use sha1::Sha1;
use crate::client::Client;
use crate::server::Server;
use crate::tests::test_utils::*;
#[test]
fn test_full_srp_handshake() {
let group = create_test_group_1024();
let salt = create_test_salt();
let client = Client::<Sha1>::new(group.clone());
let server = Server::<Sha1>::new(group);
let verifier = client.compute_verifier(TEST_USERNAME, TEST_PASSWORD, &salt);
let (client_private, client_public) = client.generate_keypair(128).unwrap();
let (server_private, server_public) = server.generate_keypair(128, &verifier).unwrap();
let client_premaster = client
.compute_premaster_key(
&server_public,
&client_private,
&client_public,
&salt,
TEST_USERNAME,
TEST_PASSWORD,
)
.unwrap();
let server_premaster = server
.compute_premaster_key(&client_public, &verifier, &server_private, &server_public)
.unwrap();
assert_eq!(client_premaster, server_premaster);
let client_session_key = client.compute_session_key(&client_premaster);
let server_session_key = server.compute_session_key(&server_premaster);
assert_eq!(client_session_key, server_session_key);
let client_proof = client.compute_client_proof(
TEST_USERNAME,
&salt,
&client_public,
&server_public,
&client_session_key,
);
let server_proof =
server.compute_server_proof(&client_public, &client_proof, &server_session_key);
let is_client_proof_valid = server.verify_client_proof(
TEST_USERNAME,
&salt,
&client_public,
&server_public,
&server_session_key,
&client_proof,
);
let is_server_proof_valid = client.verify_server_proof(
&client_public,
&client_proof,
&server_proof,
&client_session_key,
);
assert!(is_client_proof_valid);
assert!(is_server_proof_valid);
}