Documentation Index
Fetch the complete documentation index at: https://docs.privora.xyz/llms.txt
Use this file to discover all available pages before exploring further.
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)?;
const keypair = Keypair.generate();
const userCrypto = privora.userCrypto(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?;
const encrypted = privora.encrypt(100, 'u8').withUserRecovery(userCrypto);
const hash = await privora.submit(encrypted);
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());
if (encrypted.userRecovery) {
const bytes = userCrypto.decryptRecovery(encrypted.userRecovery);
const value = new DataView(bytes.buffer).getUint8(0);
}
Decrypting MPC Results
let plaintext = user_crypto.decrypt_from_mpc(
&result.ciphertext,
&result.nonce,
&result.ephemeral_pubkey,
)?;
When to Use Recovery
| Use Case | Use Recovery? |
|---|
| User’s own balance | Yes |
| User’s order details | Yes |
| Counterparty data | No |
| System-generated values | No |