Skip to main content
User recovery enables users to decrypt their own encrypted values locally without MPC participation.

How It Works

With dual encryption:
  • FHE ciphertext: For homomorphic computation
  • User ciphertext: For local recovery (X25519)

Setting Up UserCrypto

let keypair = Keypair::new();
let user_crypto = UserCrypto::from_keypair(&keypair)?;

Encrypting with Recovery

let encrypted = encryptor.encrypt(100u8)?;
let with_recovery = user_crypto.add_recovery(encrypted, &100u8.to_le_bytes())?;
let hash = privora.submit(&with_recovery).await?;

Decrypting Locally

let recovery = encrypted.user_recovery().unwrap();
let plaintext = user_crypto.decrypt_recovery(recovery)?;
let value = u8::from_le_bytes(plaintext.try_into().unwrap());

Decrypting MPC Results

let plaintext = user_crypto.decrypt_from_mpc(
    &result.ciphertext,
    &result.nonce,
    &result.ephemeral_pubkey,
)?;

When to Use Recovery

Use CaseUse Recovery?
User’s own balanceYes
User’s order detailsYes
Counterparty dataNo
System-generated valuesNo