← All Products
Confium Privacy
Build privacy-preserving applications on proven crypto.
Privacy App DevelopersResearchersCompliance Engineers
Compute on shared data without revealing the inputs. PSI is the canonical starting point.
Time: ~5 minutes · Prerequisites: Rust 1.85+ (or Docker / language SDK per the tabs below)
- 1
Add the crate
cargo add confium-privacy
cargo add confium-privacy - 2
Pick a primitive
PSI, PIR, DP, MPC, ring sigs, blind sigs, VRF, VDF.
use confium_privacy::psi::EcdhPsi; use confium_privity::pir::SealPir; use confium_privacy::dp::ZcdpBudget; // 15+ primitives available - 3
Run a 2-party PSI
Find the intersection of two sets without revealing them.
let server = EcdhPsi::new(vec!["alice@ex.com".to_string()]); let request = server.request(); let client_set: Vec<String> = vec!["alice@ex.com".into(), "carol@ex.com".into()]; let response = server.respond(client_set.iter().map(|s| s.as_bytes())); let intersection = EcdhPsi::client_compute(&request, &response); // → {"alice@ex.com"} - 4
Verify the result
Confirm only the intersection was revealed.
// Server never learned client_set. // Client only learned the intersection, not the server set beyond that. assert_eq!(intersection, vec!["alice@ex.com"]); - 5
Adapt
Swap primitives; same ergonomics.
// Same flow for ring sigs, VRFs, blind sigs, etc. use confium_privacy::ring_sig::RingSig; use confium_privacy::vrf::Ecvrf; let sig = RingSig::sign(&privkey, &[pubkey1, pubkey2, pubkey3], msg)?; // Verifier can confirm ONE of {pubkey1, pubkey2, pubkey3} signed, // but not which.
Next steps
- → Read the concepts documentation
- → Browse real-world use cases
- → See the full API reference