1 #![forbid(unsafe_code)]
2 #![cfg_attr(test, deny(warnings))]
4 extern crate curve25519_dalek;
7 extern crate num_bigint;
16 use spake2::{Ed25519Group, ErrorType, Identity, Password, SPAKEErr, SPAKE2};
20 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
21 &Password::new(b"password"),
22 &Identity::new(b"idA"),
23 &Identity::new(b"idB"),
25 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_b(
26 &Password::new(b"password"),
27 &Identity::new(b"idA"),
28 &Identity::new(b"idB"),
30 let key1 = s1.finish(msg2.as_slice()).unwrap();
31 let key2 = s2.finish(msg1.as_slice()).unwrap();
32 assert_eq!(key1, key2);
37 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
38 &Password::new(b"password"),
39 &Identity::new(b"idA"),
40 &Identity::new(b"idB"),
42 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_b(
43 &Password::new(b"password2"),
44 &Identity::new(b"idA"),
45 &Identity::new(b"idB"),
47 let key1 = s1.finish(msg2.as_slice()).unwrap();
48 let key2 = s2.finish(msg1.as_slice()).unwrap();
49 assert_ne!(key1, key2);
53 fn test_reflected_message() {
54 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
55 &Password::new(b"password"),
56 &Identity::new(b"idA"),
57 &Identity::new(b"idB"),
59 let r = s1.finish(msg1.as_slice());
63 kind: ErrorType::BadSide,
69 fn test_bad_length() {
70 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_a(
71 &Password::new(b"password"),
72 &Identity::new(b"idA"),
73 &Identity::new(b"idB"),
75 let mut msg2 = Vec::<u8>::with_capacity(msg1.len() + 1);
76 msg2.resize(msg1.len() + 1, 0u8);
77 let r = s1.finish(&msg2);
81 kind: ErrorType::WrongLength,
87 fn test_basic_symmetric() {
88 let (s1, msg1) = SPAKE2::<Ed25519Group>::start_symmetric(
89 &Password::new(b"password"),
90 &Identity::new(b"idS"),
92 let (s2, msg2) = SPAKE2::<Ed25519Group>::start_symmetric(
93 &Password::new(b"password"),
94 &Identity::new(b"idS"),
96 let key1 = s1.finish(msg2.as_slice()).unwrap();
97 let key2 = s2.finish(msg1.as_slice()).unwrap();
98 assert_eq!(key1, key2);
105 #[should_panic(expected = "nope")]
107 assert!(false, "nope");