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