2 "https://raw.githubusercontent.com/RustCrypto/meta/master/logo_small.png")]
3 #![forbid(unsafe_code)]
4 #![cfg_attr(test, deny(warnings))]
6 extern crate curve25519_dalek;
9 extern crate num_bigint;
18 use spake2::{Ed25519Group, ErrorType, Identity, Password, SPAKEErr, SPAKE2};
22 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
23 &Password::new(b"password"),
24 &Identity::new(b"idA"),
25 &Identity::new(b"idB"),
27 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_b(
28 &Password::new(b"password"),
29 &Identity::new(b"idA"),
30 &Identity::new(b"idB"),
32 let key1 = s1.finish(msg2.as_slice()).unwrap();
33 let key2 = s2.finish(msg1.as_slice()).unwrap();
34 assert_eq!(key1, key2);
39 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
40 &Password::new(b"password"),
41 &Identity::new(b"idA"),
42 &Identity::new(b"idB"),
44 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_b(
45 &Password::new(b"password2"),
46 &Identity::new(b"idA"),
47 &Identity::new(b"idB"),
49 let key1 = s1.finish(msg2.as_slice()).unwrap();
50 let key2 = s2.finish(msg1.as_slice()).unwrap();
51 assert_ne!(key1, key2);
55 fn test_reflected_message() {
56 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
57 &Password::new(b"password"),
58 &Identity::new(b"idA"),
59 &Identity::new(b"idB"),
61 let r = s1.finish(msg1.as_slice());
65 kind: ErrorType::BadSide,
71 fn test_bad_length() {
72 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
73 &Password::new(b"password"),
74 &Identity::new(b"idA"),
75 &Identity::new(b"idB"),
77 let mut msg2 = Vec::<u8>::with_capacity(msg1.len() + 1);
78 msg2.resize(msg1.len() + 1, 0u8);
79 let r = s1.finish(&msg2);
83 kind: ErrorType::WrongLength,
89 fn test_basic_symmetric() {
90 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_symmetric(
91 &Password::new(b"password"),
92 &Identity::new(b"idS"),
94 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_symmetric(
95 &Password::new(b"password"),
96 &Identity::new(b"idS"),
98 let key1 = s1.finish(msg2.as_slice()).unwrap();
99 let key2 = s2.finish(msg1.as_slice()).unwrap();
100 assert_eq!(key1, key2);
107 #[should_panic(expected = "nope")]
109 assert!(false, "nope");