9 use srp::client::{srp_private_key, SrpClient};
10 use srp::groups::G_2048;
11 use srp::server::{SrpServer, UserRecord};
13 fn auth_test(reg_pwd: &[u8], auth_pwd: &[u8]) {
14 let mut rng = rand::os::OsRng::new().unwrap();
15 let username = b"alice";
17 // Client instance creation
18 let a = rng.gen_iter::<u8>().take(64).collect::<Vec<u8>>();
19 let client = SrpClient::<Sha256>::new(&a, &G_2048);
22 let salt: [u8; 16] = rng.gen();
23 let reg_priv_key = srp_private_key::<Sha256>(username, reg_pwd, &salt);
24 let verif = client.get_password_verifier(®_priv_key);
26 // User sends handshake
27 let a_pub = client.get_a_pub();
29 // Server retrieve user record from db and processes handshake
30 let user = UserRecord {
35 let b = rng.gen_iter::<u8>().take(64).collect::<Vec<u8>>();
36 let server = SrpServer::<Sha256>::new(&user, &a_pub, &b, &G_2048).unwrap();
37 let (salt, b_pub) = (&user.salt, server.get_b_pub());
39 // Client processes handshake reply
40 let auth_priv_key = srp_private_key::<Sha256>(username, auth_pwd, salt);
41 let client2 = client.process_reply(&auth_priv_key, &b_pub).unwrap();
42 let proof = client2.get_proof();
44 // Server processes verification data
45 println!("Client verification");
46 let proof2 = server.verify(&proof).unwrap();
47 let server_key = server.get_key();
49 // Client verifies server
50 println!("Server verification");
51 let user_key = client2.verify_server(&proof2).unwrap();
52 assert_eq!(server_key, user_key, "server and client keys are not equal");
57 auth_test(b"password", b"password");
63 auth_test(b"password", b"paSsword");