diff --git a/src/key_exchange/traits.rs b/src/key_exchange/traits.rs index 6a78872..e3ed441 100644 --- a/src/key_exchange/traits.rs +++ b/src/key_exchange/traits.rs @@ -23,6 +23,7 @@ pub type GenerateKe2Result = ( >::KE2State, >::KE2Message, Vec, + generic_array::GenericArray::OutputSize>, ); #[cfg(not(test))] pub type GenerateKe3Result = (Vec, >::KE3Message); diff --git a/src/key_exchange/tripledh.rs b/src/key_exchange/tripledh.rs index 77c1260..274b511 100644 --- a/src/key_exchange/tripledh.rs +++ b/src/key_exchange/tripledh.rs @@ -128,6 +128,8 @@ impl KeyExchange for TripleDH { }, #[cfg(test)] result.3, + #[cfg(test)] + result.1, )) } diff --git a/src/opaque.rs b/src/opaque.rs index bc70714..0cce525 100644 --- a/src/opaque.rs +++ b/src/opaque.rs @@ -748,6 +748,8 @@ pub struct ServerLoginStartResult { /// Handshake secret, only used tests #[cfg(test)] pub handshake_secret: Vec, + #[cfg(test)] + pub server_mac_key: GenericArray::OutputSize>, } // Cannot be derived because it would require for CS to be Clone. @@ -758,6 +760,8 @@ impl Clone for ServerLoginStartResult { state: self.state.clone(), #[cfg(test)] handshake_secret: self.handshake_secret.clone(), + #[cfg(test)] + server_mac_key: self.server_mac_key.clone(), } } } @@ -885,6 +889,8 @@ impl ServerLogin { }, #[cfg(test)] handshake_secret: result.2, + #[cfg(test)] + server_mac_key: result.3, }) } diff --git a/src/tests/opaque_test_vectors.rs b/src/tests/opaque_test_vectors.rs index a90e689..c1dcfc9 100644 --- a/src/tests/opaque_test_vectors.rs +++ b/src/tests/opaque_test_vectors.rs @@ -66,6 +66,7 @@ pub struct TestVectorParameters { pub auth_key: Vec, pub randomized_pwd: Vec, pub handshake_secret: Vec, + pub server_mac_key: Vec, } // Pulled from "OPAQUE-3DH Test Vector 1" and "OPAQUE-3DH Test Vector 6" @@ -488,6 +489,7 @@ fn populate_test_vectors(values: &Value) -> TestVectorParameters { auth_key: parse!(values, "auth_key"), randomized_pwd: parse!(values, "randomized_pwd"), handshake_secret: parse!(values, "handshake_secret"), + server_mac_key: parse!(values, "server_mac_key"), } } @@ -659,6 +661,10 @@ fn test_ke2() -> Result<(), ProtocolError> { hex::encode(¶meters.handshake_secret), hex::encode(server_login_start_result.handshake_secret) ); + assert_eq!( + hex::encode(¶meters.server_mac_key), + hex::encode(server_login_start_result.server_mac_key) + ); assert_eq!( hex::encode(¶meters.KE2), hex::encode(server_login_start_result.message.serialize())