diff --git a/src/key_exchange/tripledh.rs b/src/key_exchange/tripledh.rs index af9e61a..3ddbf5d 100644 --- a/src/key_exchange/tripledh.rs +++ b/src/key_exchange/tripledh.rs @@ -11,7 +11,10 @@ use crate::{ keypair::{Key, KeyPair, SizedBytes}, }; use digest::{Digest, FixedOutput}; -use generic_array::{typenum::U32, ArrayLength, GenericArray}; +use generic_array::{ + typenum::{Unsigned, U32}, + ArrayLength, GenericArray, +}; use hkdf::Hkdf; use hmac::{Hmac, Mac, NewMac}; use rand_core::{CryptoRng, RngCore}; @@ -22,7 +25,6 @@ const KEY_LEN: usize = 32; pub(crate) const NONCE_LEN: usize = 32; pub(crate) type NonceLen = U32; const KE1_STATE_LEN: usize = KEY_LEN + KEY_LEN + NONCE_LEN; -const KE2_MESSAGE_LEN: usize = NONCE_LEN + 2 * KEY_LEN; static STR_3DH: &[u8] = b"3DH keys"; @@ -208,7 +210,7 @@ impl KeyExchange for TripleDH { } fn ke2_message_size() -> usize { - KE2_MESSAGE_LEN + NONCE_LEN + KEY_LEN + <::OutputSize as Unsigned>::to_usize() } } @@ -335,7 +337,8 @@ impl> TryFrom> for KE2Message { type Error = ProtocolError; fn try_from(ke2_message_bytes: Vec) -> Result { - let checked_bytes = check_slice_size(&ke2_message_bytes, KE2_MESSAGE_LEN, "ke2_message")?; + let ke2_message_len = NONCE_LEN + KEY_LEN + HashLen::to_usize(); + let checked_bytes = check_slice_size(&ke2_message_bytes, ke2_message_len, "ke2_message")?; Ok(Self { server_nonce: GenericArray::clone_from_slice(&checked_bytes[..NONCE_LEN]), diff --git a/src/map_to_curve.rs b/src/map_to_curve.rs index 3d8819c..a7667db 100644 --- a/src/map_to_curve.rs +++ b/src/map_to_curve.rs @@ -9,7 +9,6 @@ use crate::group::Group; use curve25519_dalek::{edwards::EdwardsPoint, ristretto::RistrettoPoint}; -use generic_array::GenericArray; use hkdf::Hkdf; use sha2::{Sha256, Sha512}; @@ -22,13 +21,13 @@ pub trait GroupWithMapToCurve: Group { impl GroupWithMapToCurve for RistrettoPoint { fn map_to_curve(password: &[u8], pepper: Option<&[u8]>) -> Self { let (hashed_input, _) = Hkdf::::extract(pepper, password); - ::hash_to_curve(GenericArray::from_slice(&hashed_input)) + ::hash_to_curve(&hashed_input) } } impl GroupWithMapToCurve for EdwardsPoint { fn map_to_curve(password: &[u8], pepper: Option<&[u8]>) -> Self { let (hashed_input, _) = Hkdf::::extract(pepper, password); - ::hash_to_curve(GenericArray::from_slice(&hashed_input)) + ::hash_to_curve(&hashed_input) } }