]> git.lizzy.rs Git - PAKEs.git/blob - srp/tests/mod.rs
srp: replace custom powm with modpow (#78)
[PAKEs.git] / srp / tests / mod.rs
1 use rand;
2 use rand::RngCore;
3 use sha2::Sha256;
4
5 use srp::client::{srp_private_key, SrpClient};
6 use srp::groups::G_2048;
7 use srp::server::{SrpServer, UserRecord};
8
9 fn auth_test(reg_pwd: &[u8], auth_pwd: &[u8]) {
10     let mut rng = rand::rngs::OsRng::new().unwrap();
11     let username = b"alice";
12
13     // Client instance creation
14     let mut a = [0u8; 64];
15     rng.fill_bytes(&mut a);
16     let client = SrpClient::<Sha256>::new(&a, &G_2048);
17
18     // Registration
19     let mut salt = [0u8; 16];
20     rng.fill_bytes(&mut salt);
21     let reg_priv_key = srp_private_key::<Sha256>(username, reg_pwd, &salt);
22     let verif = client.get_password_verifier(&reg_priv_key);
23
24     // User sends handshake
25     let a_pub = client.get_a_pub();
26
27     // Server retrieve user record from db and processes handshake
28     let user = UserRecord {
29         username,
30         salt: &salt,
31         verifier: &verif,
32     };
33     let mut b = [0u8; 64];
34     rng.fill_bytes(&mut b);
35     let server = SrpServer::<Sha256>::new(&user, &a_pub, &b, &G_2048).unwrap();
36     let (salt, b_pub) = (&user.salt, server.get_b_pub());
37
38     // Client processes handshake reply
39     let auth_priv_key = srp_private_key::<Sha256>(username, auth_pwd, salt);
40     let client2 = client.process_reply(&auth_priv_key, &b_pub).unwrap();
41     let proof = client2.get_proof();
42
43     // Server processes verification data
44     println!("Client verification");
45     let proof2 = server.verify(&proof).unwrap();
46     let server_key = server.get_key();
47
48     // Client verifies server
49     println!("Server verification");
50     let user_key = client2.verify_server(&proof2).unwrap();
51     assert_eq!(server_key, user_key, "server and client keys are not equal");
52 }
53
54 #[test]
55 fn good_password() {
56     auth_test(b"password", b"password");
57 }
58
59 #[test]
60 #[should_panic]
61 fn bad_password() {
62     auth_test(b"password", b"paSsword");
63 }