···5050 {2 SPAKE2 Example}
51515252 {[
5353- let password = "secret" in
5454-5555- (* Party A *)
5656- let state_a, msg_a = Spake2.init ~password `A in
5757- (* send msg_a to B, receive msg_b from B *)
5858- let key_a = Spake2.finish ~context:"myapp" state_a msg_b in
5959-6060- (* Party B *)
6161- let state_b, msg_b = Spake2.init ~password `B in
6262- (* send msg_b to A, receive msg_a from A *)
6363- let key_b = Spake2.finish ~context:"myapp" state_b msg_a in
6464-6565- (* key_a = key_b *)
5353+ let () = Crypto_rng_unix.use_default ()
5454+ let password = "secret"
5555+ let context = "myapp"
5656+ let state_a, msg_a = Spake2.init ~password `A
5757+ let state_b, msg_b = Spake2.init ~password `B
5858+ let key_a = Spake2.finish ~context state_a msg_b
5959+ let key_b = Spake2.finish ~context state_b msg_a
6060+ let () = assert (key_a = key_b)
6661 ]}
67626863 {2 SPAKE2+ Example}
69647065 {[
7171- (* Setup: derive verifier data from password *)
7272- let w0, w1 = Spake2.Plus.derive_w ~password ~salt ~iterations in
7373- let l = Spake2.Plus.compute_l ~w1 in
7474- (* Server stores: w0, l (NOT the password or w1) *)
6666+ let () = Crypto_rng_unix.use_default ()
75677676- (* Protocol run *)
7777- let prover_state, pa = Spake2.Plus.prover_init ~w0 ~w1 ~context in
7878- let verifier_state, pb = Spake2.Plus.verifier_init ~w0 ~l ~context in
6868+ (* Setup: derive verifier data from password. Server only stores w0, l. *)
6969+ let w0, w1 =
7070+ Spake2.Plus.derive_w ~password:"secret" ~salt:"server-salt"
7171+ ~iterations:1000
7272+7373+ let l = Spake2.Plus.compute_l ~w1
7474+ let context = "myapp"
7575+ let prover_state, pa = Spake2.Plus.prover_init ~w0 ~w1 ~context
7676+ let verifier_state, pb = Spake2.Plus.verifier_init ~w0 ~l ~context
7777+ let prover_result = Spake2.Plus.prover_finish prover_state pb
7878+ let verifier_result = Spake2.Plus.verifier_finish verifier_state pa
79798080- let prover_result = Spake2.Plus.prover_finish prover_state pb in
8181- let verifier_result = Spake2.Plus.verifier_finish verifier_state pa in
8080+ let () =
8181+ match (prover_result, verifier_result) with
8282+ | Ok (k_p, _, _), Ok (k_v, _, _) -> assert (k_p = k_v)
8383+ | _ -> assert false
8284 ]} *)
83858486(** {1 Types} *)