Update digest & hashes libraries to their latest versions
This commit is contained in:
+8
-4
@@ -15,6 +15,7 @@ use generic_array::{
|
||||
ArrayLength, GenericArray,
|
||||
};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
use std::ops::Mul;
|
||||
@@ -93,10 +94,13 @@ impl Group for RistrettoPoint {
|
||||
|
||||
type UniformBytesLen = U64;
|
||||
fn hash_to_curve(uniform_bytes: &GenericArray<u8, Self::UniformBytesLen>) -> Self {
|
||||
// This is because RistrettoPoint is on an obsolete sha2 version
|
||||
let mut bits = [0u8; 64];
|
||||
bits.copy_from_slice(uniform_bytes);
|
||||
// This could really be a from_uniform_bytes!
|
||||
RistrettoPoint::hash_from_bytes::<sha2::Sha512>(&bits)
|
||||
let mut hasher = sha2::Sha512::new();
|
||||
hasher.update(uniform_bytes);
|
||||
bits.copy_from_slice(&hasher.finalize());
|
||||
|
||||
RistrettoPoint::from_uniform_bytes(&bits)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +151,7 @@ impl Group for EdwardsPoint {
|
||||
&Sha256::new()
|
||||
.chain(&uniform_bytes[..32])
|
||||
.chain(&[counter])
|
||||
.result()[..32],
|
||||
.finalize()[..32],
|
||||
);
|
||||
wrapped_point = CompressedEdwardsY::from_slice(&result).decompress();
|
||||
counter += 1;
|
||||
|
||||
+18
-17
@@ -9,8 +9,9 @@ use crate::{
|
||||
};
|
||||
use generic_array::GenericArray;
|
||||
use hkdf::Hkdf;
|
||||
use hmac::{Hmac, Mac};
|
||||
use hmac::{Hmac, Mac, NewMac};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
|
||||
use sha2::{Digest, Sha256};
|
||||
use std::convert::TryFrom;
|
||||
|
||||
@@ -99,8 +100,8 @@ pub(crate) fn generate_ke1<R: RngCore + CryptoRng, KeyFormat: KeyPair<Repr = Key
|
||||
|
||||
let l1_data: Vec<u8> = [&l1_component[..], &ke1_message.to_bytes()].concat();
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.input(&l1_data);
|
||||
let hashed_l1 = hasher.result();
|
||||
hasher.update(&l1_data);
|
||||
let hashed_l1 = hasher.finalize();
|
||||
|
||||
Ok((
|
||||
KE1State {
|
||||
@@ -259,8 +260,8 @@ pub(crate) fn generate_ke2<R: RngCore + CryptoRng, KeyFormat: KeyPair<Repr = Key
|
||||
)?;
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.input(&l1_bytes);
|
||||
let hashed_l1 = hasher.result();
|
||||
hasher.update(&l1_bytes);
|
||||
let hashed_l1 = hasher.finalize();
|
||||
|
||||
let transcript2: Vec<u8> = [
|
||||
&hashed_l1[..],
|
||||
@@ -271,11 +272,11 @@ pub(crate) fn generate_ke2<R: RngCore + CryptoRng, KeyFormat: KeyPair<Repr = Key
|
||||
.concat();
|
||||
|
||||
let mut hasher2 = Sha256::new();
|
||||
hasher2.input(&transcript2);
|
||||
let hashed_transcript = hasher2.result();
|
||||
hasher2.update(&transcript2);
|
||||
let hashed_transcript = hasher2.finalize();
|
||||
|
||||
let mut mac = Hmac::<Sha256>::new_varkey(&km2).map_err(|_| InternalPakeError::HmacError)?;
|
||||
mac.input(&hashed_transcript);
|
||||
mac.update(&hashed_transcript);
|
||||
|
||||
Ok((
|
||||
KE2State {
|
||||
@@ -286,7 +287,7 @@ pub(crate) fn generate_ke2<R: RngCore + CryptoRng, KeyFormat: KeyPair<Repr = Key
|
||||
KE2Message {
|
||||
server_nonce: server_nonce.to_vec(),
|
||||
server_e_pk: server_e_kp.public().clone(),
|
||||
mac: mac.result().code().to_vec(),
|
||||
mac: mac.finalize().into_bytes().to_vec(),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -360,14 +361,14 @@ pub(crate) fn generate_ke3<KeyFormat: KeyPair<Repr = Key>>(
|
||||
.concat();
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.input(&transcript);
|
||||
let hashed_transcript = hasher.result();
|
||||
hasher.update(&transcript);
|
||||
let hashed_transcript = hasher.finalize();
|
||||
|
||||
let mut server_mac =
|
||||
Hmac::<Sha256>::new_varkey(&km2).map_err(|_| InternalPakeError::HmacError)?;
|
||||
server_mac.input(&hashed_transcript);
|
||||
server_mac.update(&hashed_transcript);
|
||||
|
||||
if ke2_message.mac != server_mac.result().code().to_vec() {
|
||||
if ke2_message.mac != server_mac.finalize().into_bytes().to_vec() {
|
||||
return Err(ProtocolError::VerificationError(
|
||||
PakeError::KeyExchangeMacValidationError,
|
||||
));
|
||||
@@ -375,14 +376,14 @@ pub(crate) fn generate_ke3<KeyFormat: KeyPair<Repr = Key>>(
|
||||
|
||||
let mut client_mac =
|
||||
Hmac::<Sha256>::new_varkey(&km3).map_err(|_| InternalPakeError::HmacError)?;
|
||||
client_mac.input(&hashed_transcript);
|
||||
client_mac.update(&hashed_transcript);
|
||||
|
||||
Ok((
|
||||
KE3State {
|
||||
shared_secret: shared_secret.to_vec(),
|
||||
},
|
||||
KE3Message {
|
||||
mac: client_mac.result().code().to_vec(),
|
||||
mac: client_mac.finalize().into_bytes().to_vec(),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -394,9 +395,9 @@ pub(crate) fn finish_ke(
|
||||
) -> Result<Vec<u8>, ProtocolError> {
|
||||
let mut client_mac =
|
||||
Hmac::<Sha256>::new_varkey(&ke2_state.km3).map_err(|_| InternalPakeError::HmacError)?;
|
||||
client_mac.input(&ke2_state.hashed_transcript);
|
||||
client_mac.update(&ke2_state.hashed_transcript);
|
||||
|
||||
if ke3_message.mac != client_mac.result().code().to_vec() {
|
||||
if ke3_message.mac != client_mac.finalize().into_bytes().to_vec() {
|
||||
return Err(ProtocolError::VerificationError(
|
||||
PakeError::KeyExchangeMacValidationError,
|
||||
));
|
||||
|
||||
@@ -25,6 +25,7 @@ use generic_array::{
|
||||
};
|
||||
use hkdf::Hkdf;
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
|
||||
use sha2::{Digest, Sha256};
|
||||
use std::{convert::TryFrom, marker::PhantomData};
|
||||
use zeroize::Zeroize;
|
||||
|
||||
+9
-2
@@ -7,6 +7,7 @@ use crate::{errors::InternalPakeError, group::Group};
|
||||
use generic_array::{typenum::U64, GenericArray};
|
||||
use hkdf::Hkdf;
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
// Low-level API
|
||||
@@ -67,7 +68,7 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::group::Group;
|
||||
use curve25519_dalek::ristretto::RistrettoPoint;
|
||||
use generic_array::{arr, arr_impl, GenericArray};
|
||||
use generic_array::{arr, GenericArray};
|
||||
use hkdf::Hkdf;
|
||||
use rand_core::OsRng;
|
||||
|
||||
@@ -122,7 +123,13 @@ mod tests {
|
||||
let mut curve_input: Vec<u8> = Vec::new();
|
||||
curve_input.extend_from_slice(&hashed_input);
|
||||
curve_input.extend_from_slice(&[0u8; 32]);
|
||||
let point = RistrettoPoint::hash_from_bytes::<sha2::Sha512>(&curve_input);
|
||||
// This is because RistrettoPoint is on an obsolete sha2 version
|
||||
let mut bits = [0u8; 64];
|
||||
let mut hasher = sha2::Sha512::new();
|
||||
hasher.update(&curve_input[..]);
|
||||
bits.copy_from_slice(&hasher.finalize());
|
||||
|
||||
let point = RistrettoPoint::from_uniform_bytes(&bits);
|
||||
let mut ikm: Vec<u8> = Vec::new();
|
||||
ikm.extend_from_slice(&point.to_bytes());
|
||||
ikm.extend_from_slice(&input);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
use crate::errors::{utils::check_slice_size, InternalPakeError, PakeError};
|
||||
use aead::{Aead, NewAead};
|
||||
use generic_array::{typenum::Unsigned, GenericArray};
|
||||
use hmac::{Hmac, Mac};
|
||||
use hmac::{Hmac, Mac, NewMac};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
@@ -83,7 +83,7 @@ pub trait RKRCipher: Sized {
|
||||
rng.fill_bytes(&mut nonce);
|
||||
let gen_nonce = GenericArray::from_slice(&nonce[..]);
|
||||
|
||||
let ciphertext = <Self::AEAD as NewAead>::new(*GenericArray::from_slice(&encryption_key))
|
||||
let ciphertext = <Self::AEAD as NewAead>::new(GenericArray::from_slice(&encryption_key))
|
||||
.encrypt(
|
||||
GenericArray::from_slice(&nonce),
|
||||
aead::Payload {
|
||||
@@ -95,11 +95,11 @@ pub trait RKRCipher: Sized {
|
||||
|
||||
let mut mac =
|
||||
Hmac::<Sha256>::new_varkey(&hmac_key).map_err(|_| InternalPakeError::HmacError)?;
|
||||
mac.input(&ciphertext);
|
||||
mac.update(&ciphertext);
|
||||
|
||||
Ok(<Self as RKRCipher>::new(
|
||||
ciphertext,
|
||||
&mac.result().code(),
|
||||
&mac.finalize().into_bytes(),
|
||||
gen_nonce,
|
||||
))
|
||||
}
|
||||
@@ -112,13 +112,13 @@ pub trait RKRCipher: Sized {
|
||||
) -> Result<Vec<u8>, PakeError> {
|
||||
let mut mac =
|
||||
Hmac::<Sha256>::new_varkey(&hmac_key).map_err(|_| InternalPakeError::HmacError)?;
|
||||
mac.input(self.aead_output());
|
||||
mac.update(self.aead_output());
|
||||
if mac.verify(self.hmac()).is_err() {
|
||||
return Err(PakeError::DecryptionHmacError);
|
||||
}
|
||||
|
||||
Aead::decrypt(
|
||||
&<Self::AEAD as NewAead>::new(*GenericArray::from_slice(&encryption_key)),
|
||||
&<Self::AEAD as NewAead>::new(GenericArray::from_slice(&encryption_key)),
|
||||
self.nonce(),
|
||||
aead::Payload {
|
||||
msg: self.aead_output(),
|
||||
|
||||
@@ -15,6 +15,8 @@ use curve25519_dalek::ristretto::RistrettoPoint;
|
||||
|
||||
use chacha20poly1305::ChaCha20Poly1305;
|
||||
use rand_core::{OsRng, RngCore};
|
||||
|
||||
use sha2::Digest;
|
||||
use std::convert::TryFrom;
|
||||
|
||||
struct Default;
|
||||
@@ -27,9 +29,16 @@ impl CipherSuite for Default {
|
||||
|
||||
fn random_ristretto_point() -> RistrettoPoint {
|
||||
let mut rng = OsRng;
|
||||
let mut random_bits = [0u8; 64];
|
||||
rng.fill_bytes(&mut random_bits);
|
||||
|
||||
// This is because RistrettoPoint is on an obsolete sha2 version
|
||||
let mut bits = [0u8; 64];
|
||||
rng.fill_bytes(&mut bits);
|
||||
RistrettoPoint::hash_from_bytes::<sha2::Sha512>(&bits)
|
||||
let mut hasher = sha2::Sha512::new();
|
||||
hasher.update(&random_bits[..]);
|
||||
bits.copy_from_slice(&hasher.finalize());
|
||||
|
||||
RistrettoPoint::from_uniform_bytes(&bits)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user