Updating AKE message format (#85)

This commit is contained in:
Kevin Lewi
2020-11-16 11:49:27 -08:00
committed by GitHub
parent f18eaea8cf
commit 51b3781e5c
7 changed files with 300 additions and 107 deletions
+26 -18
View File
@@ -81,11 +81,11 @@ impl<Grp: Group> RegisterFirstMessage<Grp> {
return Err(PakeError::SerializationError.into());
}
let (data, remainder) = tokenize(input[1..].to_vec(), 3)?;
let (data, remainder) = tokenize(&input[1..], 3)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
}
let (alpha_bytes, remainder) = tokenize(data, 2)?;
let (alpha_bytes, remainder) = tokenize(&data, 2)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
@@ -191,17 +191,17 @@ where
return Err(PakeError::SerializationError.into());
}
let (data, remainder) = tokenize(input[1..].to_vec(), 3)?;
let (data, remainder) = tokenize(&input[1..], 3)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
}
let (beta_bytes, remainder) = tokenize(data, 2)?;
let (server_s_pk, remainder) = tokenize(remainder, 2)?;
let (beta_bytes, remainder) = tokenize(&data, 2)?;
let (server_s_pk, remainder) = tokenize(&remainder, 2)?;
// Handle ecf deserialization
let (secret_credentials, remainder) = tokenize(remainder, 1)?;
let (cleartext_credentials, remainder) = tokenize(remainder, 1)?;
let (secret_credentials, remainder) = tokenize(&remainder, 1)?;
let (cleartext_credentials, remainder) = tokenize(&remainder, 1)?;
let sc = secret_credentials
.iter()
.map(|x| u8_to_credential_type(*x).ok_or(PakeError::SerializationError))
@@ -291,13 +291,13 @@ where
return Err(PakeError::SerializationError.into());
}
let (data, remainder) = tokenize(input[1..].to_vec(), 3)?;
let (data, remainder) = tokenize(&input[1..], 3)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
}
let (envelope, remainder) = Envelope::<D>::deserialize(&data)?;
let (client_s_pk, remainder) = tokenize(remainder, 2)?;
let (client_s_pk, remainder) = tokenize(&remainder, 2)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
@@ -348,8 +348,8 @@ impl<CS: CipherSuite> LoginFirstMessage<CS> {
return Err(PakeError::SerializationError.into());
}
let (data, ke1m) = tokenize(input[1..].to_vec(), 3)?;
let (alpha_bytes, remainder) = tokenize(data, 2)?;
let (data, ke1m) = tokenize(&input[1..], 3)?;
let (alpha_bytes, remainder) = tokenize(&data, 2)?;
if !remainder.is_empty() {
return Err(PakeError::SerializationError.into());
@@ -399,8 +399,8 @@ impl<CS: CipherSuite> LoginSecondMessage<CS> {
return Err(PakeError::SerializationError.into());
}
let (data, ke2m) = tokenize(input[1..].to_vec(), 3)?;
let (beta_bytes, envelope_bytes) = tokenize(data, 2)?;
let (data, ke2m) = tokenize(&input[1..], 3)?;
let (beta_bytes, envelope_bytes) = tokenize(&data, 2)?;
let concatenated = [&beta_bytes[..], &envelope_bytes[..], &ke2m[..]].concat();
Self::try_from(&concatenated[..])
@@ -494,8 +494,8 @@ pub struct ClientRegistration<CS: CipherSuite> {
impl<CS: CipherSuite> TryFrom<&[u8]> for ClientRegistration<CS> {
type Error = ProtocolError;
fn try_from(input: &[u8]) -> Result<Self, Self::Error> {
let (id_u, bytes) = tokenize(input.to_vec(), 2)?;
let (id_s, bytes) = tokenize(bytes.to_vec(), 2)?;
let (id_u, bytes) = tokenize(&input, 2)?;
let (id_s, bytes) = tokenize(&bytes, 2)?;
let min_expected_len = <CS::Group as Group>::ScalarLen::to_usize();
let checked_slice = (if bytes.len() <= min_expected_len {
@@ -931,8 +931,8 @@ pub struct ClientLogin<CS: CipherSuite> {
impl<CS: CipherSuite> TryFrom<&[u8]> for ClientLogin<CS> {
type Error = ProtocolError;
fn try_from(input: &[u8]) -> Result<Self, Self::Error> {
let (id_u, bytes) = tokenize(input.to_vec(), 2)?;
let (id_s, bytes) = tokenize(bytes.to_vec(), 2)?;
let (id_u, bytes) = tokenize(&input, 2)?;
let (id_s, bytes) = tokenize(&bytes, 2)?;
let scalar_len = <CS::Group as Group>::ScalarLen::to_usize();
let ke1_state_size =
@@ -1044,7 +1044,11 @@ impl<CS: CipherSuite> ClientLogin<CS> {
postprocess,
)?;
let (ke1_state, ke1_message) = CS::KeyExchange::generate_ke1(alpha.to_arr().to_vec(), rng)?;
let (ke1_state, ke1_message) = CS::KeyExchange::generate_ke1(
alpha.to_arr().to_vec(),
Vec::new(), /* TODO set this */
rng,
)?;
let l1 = LoginFirstMessage { alpha, ke1_message };
@@ -1123,6 +1127,8 @@ impl<CS: CipherSuite> ClientLogin<CS> {
<CS::KeyFormat as KeyPair>::Repr::from_bytes(
&opened_envelope.credentials_map[&CredentialType::SkU],
)?,
Vec::new(), // TODO: fill in
Vec::new(), // TODO: fill in
)?;
Ok((
@@ -1218,6 +1224,8 @@ impl<CS: CipherSuite> ServerLogin<CS> {
l1.ke1_message,
client_s_pk,
server_s_sk.clone(),
Vec::new(), // TODO populate this
Vec::new(), // TODO populate this
)?;
let l2 = LoginSecondMessage {