From 3f6b6d4afedb05ecd1406a37f434813a3d313699 Mon Sep 17 00:00:00 2001 From: dAxpeDDa Date: Fri, 30 Jul 2021 13:51:02 +0200 Subject: [PATCH] Implement `client_mac_key` test --- src/key_exchange/traits.rs | 7 ++++++- src/key_exchange/tripledh.rs | 2 ++ src/opaque.rs | 7 +++++++ src/tests/opaque_test_vectors.rs | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/key_exchange/traits.rs b/src/key_exchange/traits.rs index e3ed441..2285f65 100644 --- a/src/key_exchange/traits.rs +++ b/src/key_exchange/traits.rs @@ -28,7 +28,12 @@ pub type GenerateKe2Result = ( #[cfg(not(test))] pub type GenerateKe3Result = (Vec, >::KE3Message); #[cfg(test)] -pub type GenerateKe3Result = (Vec, >::KE3Message, Vec); +pub type GenerateKe3Result = ( + Vec, + >::KE3Message, + Vec, + generic_array::GenericArray::OutputSize>, +); pub trait KeyExchange { type KE1State: FromBytes + ToBytesWithPointers + Zeroize + Clone; diff --git a/src/key_exchange/tripledh.rs b/src/key_exchange/tripledh.rs index 274b511..91dba53 100644 --- a/src/key_exchange/tripledh.rs +++ b/src/key_exchange/tripledh.rs @@ -189,6 +189,8 @@ impl KeyExchange for TripleDH { }, #[cfg(test)] result.3, + #[cfg(test)] + result.2, )) } diff --git a/src/opaque.rs b/src/opaque.rs index 0cce525..403ef5a 100644 --- a/src/opaque.rs +++ b/src/opaque.rs @@ -576,6 +576,9 @@ pub struct ClientLoginFinishResult { /// Handshake secret, only used tests #[cfg(test)] pub handshake_secret: Vec, + /// Client MAC key, only used in tests + #[cfg(test)] + pub client_mac_key: GenericArray::OutputSize>, } // Cannot be derived because it would require for CS to be Clone. @@ -590,6 +593,8 @@ impl Clone for ClientLoginFinishResult { state: self.state.clone(), #[cfg(test)] handshake_secret: self.handshake_secret.clone(), + #[cfg(test)] + client_mac_key: self.client_mac_key.clone(), } } } @@ -703,6 +708,8 @@ impl ClientLogin { state: self, #[cfg(test)] handshake_secret: result.2, + #[cfg(test)] + client_mac_key: result.3, }) } } diff --git a/src/tests/opaque_test_vectors.rs b/src/tests/opaque_test_vectors.rs index c1dcfc9..14bea14 100644 --- a/src/tests/opaque_test_vectors.rs +++ b/src/tests/opaque_test_vectors.rs @@ -67,6 +67,7 @@ pub struct TestVectorParameters { pub randomized_pwd: Vec, pub handshake_secret: Vec, pub server_mac_key: Vec, + pub client_mac_key: Vec, } // Pulled from "OPAQUE-3DH Test Vector 1" and "OPAQUE-3DH Test Vector 6" @@ -490,6 +491,7 @@ fn populate_test_vectors(values: &Value) -> TestVectorParameters { randomized_pwd: parse!(values, "randomized_pwd"), handshake_secret: parse!(values, "handshake_secret"), server_mac_key: parse!(values, "server_mac_key"), + client_mac_key: parse!(values, "client_mac_key"), } } @@ -706,6 +708,10 @@ fn test_ke3() -> Result<(), ProtocolError> { hex::encode(¶meters.handshake_secret), hex::encode(&client_login_finish_result.handshake_secret) ); + assert_eq!( + hex::encode(¶meters.client_mac_key), + hex::encode(&client_login_finish_result.client_mac_key) + ); assert_eq!( hex::encode(¶meters.KE3), hex::encode(client_login_finish_result.message.serialize())