Files
opaque-lattice/src/oprf/mod.rs
Cole Leavitt 9c4a3a30b6 feat(oprf): add production-grade Silent VOLE authentication protocol
Implements complete registration + login flow:
- Registration: Client/Server exchange PCG seeds (once)
- Login: Single-round (pcg_index + masked_input → evaluation)

New types:
- VoleRegistrationRequest/Response - PCG seed exchange
- VoleUserRecord - Server's stored user data
- VoleClientCredential - Client's stored credential
- VoleLoginRequest/Response - Single-round login messages

Key properties:
- Single-round online phase after registration
- Perfect privacy (server cannot fingerprint users)
- ~4KB round-trip (vs ~8KB for Ring-LPR)
- Deterministic OPRF output (LWR guaranteed)
- Wrong password correctly rejected

All 211 tests passing.
2026-01-07 13:04:14 -07:00

51 lines
2.0 KiB
Rust

pub mod fast_oprf;
pub mod hybrid;
pub mod leap_oprf;
pub mod ot;
pub mod ring;
pub mod ring_lpr;
#[cfg(test)]
mod security_proofs;
pub mod unlinkable_oprf;
pub mod vole_oprf;
pub mod voprf;
pub use ring::{
RING_N, RingElement, deterministic_round, hash_from_ring, hash_to_ring, ring_multiply,
};
pub use ring_lpr::{
BlindedInput, ClientState, EvaluatedOutput, OPRF_OUTPUT_LEN, RingLprKey, client_blind,
client_finalize as ring_lpr_finalize, client_finalize_with_id, prf_evaluate,
server_evaluate as ring_lpr_evaluate, server_evaluate_with_id,
};
pub use hybrid::{
BlindedElement, EvaluatedElement, OprfClient, OprfServer, client_finalize, server_evaluate,
};
pub use voprf::{
CommittedKey, EvaluationProof, KeyCommitment, VerifiableOutput, voprf_evaluate, voprf_verify,
};
pub use unlinkable_oprf::{
UnlinkableBlindedInput, UnlinkableClientState, UnlinkableOprfOutput, UnlinkablePublicParams,
UnlinkableServerKey, UnlinkableServerResponse, client_blind_unlinkable,
client_finalize_unlinkable, evaluate_unlinkable, server_evaluate_unlinkable,
};
pub use leap_oprf::{
LeapClientCommitment, LeapClientMessage, LeapClientState, LeapOprfOutput, LeapPublicParams,
LeapServerChallenge, LeapServerKey, LeapServerResponse, client_blind as leap_client_blind,
client_commit as leap_client_commit, client_finalize as leap_client_finalize, evaluate_leap,
server_challenge as leap_server_challenge, server_evaluate as leap_server_evaluate,
};
pub use vole_oprf::{
PcgSeed, VoleClientCredential, VoleClientMessage, VoleClientState, VoleCorrelation,
VoleLoginRequest, VoleLoginResponse, VoleOprfOutput, VoleRegistrationRequest,
VoleRegistrationResponse, VoleRingElement, VoleServerKey, VoleServerResponse, VoleUserRecord,
evaluate_vole_oprf, vole_client_blind, vole_client_finalize, vole_client_finish_registration,
vole_client_login, vole_client_start_registration, vole_client_verify_login,
vole_server_evaluate, vole_server_login, vole_server_register, vole_setup,
};