← 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. 1

    Add the crate

    cargo add confium-privacy

    cargo add confium-privacy
  2. 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. 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. 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. 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