Adding support for "internal mode" and fake credential response + test vectors (#155)
* Adding support for internal and external mode
This commit is contained in:
+13
-14
@@ -10,11 +10,12 @@ use crate::{
|
||||
envelope::Envelope,
|
||||
errors::{
|
||||
utils::{check_slice_size, check_slice_size_atleast},
|
||||
ProtocolError, PakeError,
|
||||
PakeError, ProtocolError,
|
||||
},
|
||||
group::Group,
|
||||
key_exchange::traits::{FromBytes, KeyExchange, ToBytes},
|
||||
keypair::{KeyPair, PublicKey, SizedBytesExt},
|
||||
opaque::ServerSetup,
|
||||
};
|
||||
use digest::Digest;
|
||||
use generic_array::{typenum::Unsigned, GenericArray};
|
||||
@@ -128,7 +129,7 @@ impl_serialize_and_deserialize_for!(RegistrationResponse);
|
||||
pub struct RegistrationUpload<CS: CipherSuite> {
|
||||
/// The "envelope" generated by the user, containing sealed
|
||||
/// cryptographic identifiers
|
||||
pub(crate) envelope: Envelope<CS::Hash>,
|
||||
pub(crate) envelope: Envelope<CS>,
|
||||
/// The masking key used to mask the envelope
|
||||
pub(crate) masking_key: GenericArray<u8, <CS::Hash as Digest>::OutputSize>,
|
||||
/// The user's public key
|
||||
@@ -161,12 +162,9 @@ impl<CS: CipherSuite> RegistrationUpload<CS> {
|
||||
pub fn deserialize(input: &[u8]) -> Result<Self, ProtocolError> {
|
||||
let key_len = <PublicKey as SizedBytes>::Len::to_usize();
|
||||
let hash_len = <CS::Hash as Digest>::OutputSize::to_usize();
|
||||
let checked_slice = check_slice_size(
|
||||
&input,
|
||||
key_len + hash_len + Envelope::<CS::Hash>::len(),
|
||||
"registration_upload_bytes",
|
||||
)?;
|
||||
let envelope = Envelope::<CS::Hash>::deserialize(&checked_slice[key_len + hash_len..])?;
|
||||
let checked_slice =
|
||||
check_slice_size_atleast(input, key_len + hash_len, "registration_upload_bytes")?;
|
||||
let envelope = Envelope::<CS>::deserialize(&checked_slice[key_len + hash_len..])?;
|
||||
Ok(Self {
|
||||
envelope,
|
||||
masking_key: GenericArray::clone_from_slice(
|
||||
@@ -179,16 +177,17 @@ impl<CS: CipherSuite> RegistrationUpload<CS> {
|
||||
}
|
||||
|
||||
// Creates a dummy instance used for faking a [CredentialResponse]
|
||||
pub(crate) fn dummy<R: RngCore + CryptoRng>(rng: &mut R) -> Self {
|
||||
pub(crate) fn dummy<R: RngCore + CryptoRng>(
|
||||
rng: &mut R,
|
||||
server_setup: &ServerSetup<CS>,
|
||||
) -> Self {
|
||||
let mut masking_key = vec![0u8; <CS::Hash as Digest>::OutputSize::to_usize()];
|
||||
rng.fill_bytes(&mut masking_key);
|
||||
|
||||
let keypair = KeyPair::<CS::Group>::generate_random(rng);
|
||||
|
||||
Self {
|
||||
envelope: Envelope::<CS::Hash>::dummy(),
|
||||
envelope: Envelope::<CS>::dummy(),
|
||||
masking_key: GenericArray::clone_from_slice(&masking_key),
|
||||
client_s_pk: keypair.public().clone(),
|
||||
client_s_pk: server_setup.fake_keypair.public().clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -290,7 +289,7 @@ impl<CS: CipherSuite> CredentialResponse<CS> {
|
||||
let elem_len = <CS::Group as Group>::ElemLen::to_usize();
|
||||
let key_len = <PublicKey as SizedBytes>::Len::to_usize();
|
||||
let nonce_len: usize = 32;
|
||||
let envelope_len = Envelope::<CS::Hash>::len();
|
||||
let envelope_len = Envelope::<CS>::len();
|
||||
let masked_response_len = key_len + envelope_len;
|
||||
let ke2_message_len = CS::KeyExchange::ke2_message_size();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user