From 5a35ab9eee8d070cbc6a0f073e131cd6e567ed4d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 22 May 2019 02:08:01 -0400 Subject: problem 37 --- src/crack.rs | 30 ++++++++++++++++++++++++++++++ src/lib.rs | 1 + tests/set5.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/src/crack.rs b/src/crack.rs index 731cfbd..535b12a 100644 --- a/src/crack.rs +++ b/src/crack.rs @@ -1016,6 +1016,36 @@ impl<'a> SRPClient for CorrectSRPClient<'a> { } } +#[derive(Debug)] +pub struct ZeroKeySRPClient<'a> { + server: &'a mut crate::dh::SRPServer, +} + +impl<'a> ZeroKeySRPClient<'a> { + pub fn new(server: &'a mut crate::dh::SRPServer) -> ZeroKeySRPClient<'a> { + ZeroKeySRPClient { server } + } +} + +impl<'a> SRPClient for ZeroKeySRPClient<'a> { + fn server(&mut self) -> &mut crate::dh::SRPServer { + self.server + } + + fn key_exchange_impl( + &mut self, + user: &str, + _: &str, + ) -> (Vec, Vec, num_bigint::BigUint) { + let a_pub = num_bigint::BigUint::from(0 as u8); + let (session, salt, _b_pub) = + self.server.exchange_pubkeys(user, &a_pub); + + let s = num_bigint::BigUint::from(0 as u8); + (session, salt, s) + } +} + fn crack_single_byte_xor_with_confidence(input: &[u8]) -> (u8, f64) { let mut min_diff = 100.0; let mut best_key = 0; diff --git a/src/lib.rs b/src/lib.rs index 97ce460..42e484d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,6 +42,7 @@ pub use crack::DiffieHellmanMessageExchanger; pub use crack::NullDiffieHellmanMessageExchanger; pub use crack::ParameterInjectionDiffieHellmanMessageExchanger; pub use crack::SRPClient; +pub use crack::ZeroKeySRPClient; pub use dh::DHKeyPair; pub use dh::SRPServer; pub use dh::SRPUser; diff --git a/tests/set5.rs b/tests/set5.rs index 66d2420..81030be 100644 --- a/tests/set5.rs +++ b/tests/set5.rs @@ -260,3 +260,30 @@ fn problem_36() { assert!(key.is_some()); } + +#[test] +fn problem_37() { + let n_hex = "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024\ + e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd\ + 3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec\ + 6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f\ + 24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361\ + c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552\ + bb9ed529077096966d670c354e4abc9804f1746c08ca237327fff\ + fffffffffffff"; + let n = num_bigint::BigUint::parse_bytes(n_hex.as_bytes(), 16).unwrap(); + let g = num_bigint::BigUint::from(2 as u8); + let k = num_bigint::BigUint::from(3 as u8); + + let user = "doy@tozt.net"; + let pass = "supersecret"; + + let mut server = matasano::SRPServer::new(n, g, k); + let mut client = matasano::ZeroKeySRPClient::new(&mut server); + + client.register(user, pass); + + let key = client.key_exchange(user, pass); + + assert!(key.is_some()); +} -- cgit v1.2.3