takes slices

This commit is contained in:
shimunn 2019-09-14 18:44:33 +02:00
parent a07f32e032
commit bf1504cca6
Signed by: shimun
GPG Key ID: E81D8382DC2F971B

View File

@ -31,7 +31,7 @@ pub trait HmacExtension {
"hmac-secret" "hmac-secret"
} }
fn get_dict(&mut self, salt: [u8; 32], salt2: Option<[u8; 32]>) -> FidoResult<Value> { fn get_dict(&mut self, salt: &[u8; 32], salt2: Option<&[u8; 32]>) -> FidoResult<Value> {
let mut map = BTreeMap::new(); let mut map = BTreeMap::new();
map.insert( map.insert(
Key::Text(Text::Text(Self::extension_name().to_owned())), Key::Text(Text::Text(Self::extension_name().to_owned())),
@ -40,15 +40,15 @@ pub trait HmacExtension {
Ok(Value::Map(map)) Ok(Value::Map(map))
} }
fn get_data(&mut self, salt: [u8; 32], salt2: Option<[u8; 32]>) -> FidoResult<Value>; fn get_data(&mut self, salt: &[u8; 32], salt2: Option<&[u8; 32]>) -> FidoResult<Value>;
fn make_hmac_credential(&mut self) -> FidoResult<FidoHmacCredential>; fn make_hmac_credential(&mut self) -> FidoResult<FidoHmacCredential>;
fn get_hmac_assertion( fn get_hmac_assertion(
&mut self, &mut self,
credential: &FidoHmacCredential, credential: &FidoHmacCredential,
salt: [u8; 32], salt: &[u8; 32],
salt2: Option<[u8; 32]>, salt2: Option<&[u8; 32]>,
) -> FidoResult<([u8; 32], Option<[u8; 32]>)>; ) -> FidoResult<([u8; 32], Option<[u8; 32]>)>;
fn hmac_challange( fn hmac_challange(
@ -60,21 +60,21 @@ pub trait HmacExtension {
let mut digest = Sha256::new(); let mut digest = Sha256::new();
digest.input(input); digest.input(input);
digest.result(&mut salt); digest.result(&mut salt);
self.get_hmac_assertion(credential, salt, None).map(|secret| secret.0) self.get_hmac_assertion(credential, &salt, None).map(|secret| secret.0)
} }
} }
impl HmacExtension for FidoDevice { impl HmacExtension for FidoDevice {
fn get_data(&mut self, salt: [u8; 32], salt2: Option<[u8; 32]>) -> FidoResult<Value> { fn get_data(&mut self, salt: &[u8; 32], salt2: Option<&[u8; 32]>) -> FidoResult<Value> {
let shared_secret = self.shared_secret.as_ref().unwrap(); let shared_secret = self.shared_secret.as_ref().unwrap();
let mut encryptor = shared_secret.encryptor(); let mut encryptor = shared_secret.encryptor();
let mut salt_enc = [0u8; 64]; let mut salt_enc = [0u8; 64];
let mut output = RefWriteBuffer::new(&mut salt_enc); let mut output = RefWriteBuffer::new(&mut salt_enc);
let mut encrypt = || { let mut encrypt = || {
encryptor.encrypt(&mut RefReadBuffer::new(&salt), &mut output, salt2.is_none())?; encryptor.encrypt(&mut RefReadBuffer::new(salt), &mut output, salt2.is_none())?;
if let Some(salt2) = salt2 { if let Some(salt2) = salt2 {
encryptor encryptor
.encrypt(&mut RefReadBuffer::new(&salt2), &mut output, true) .encrypt(&mut RefReadBuffer::new(salt2), &mut output, true)
.map(|_| ()) .map(|_| ())
} else { } else {
Ok(()) Ok(())
@ -124,8 +124,8 @@ impl HmacExtension for FidoDevice {
fn get_hmac_assertion( fn get_hmac_assertion(
&mut self, &mut self,
credential: &FidoHmacCredential, credential: &FidoHmacCredential,
salt: [u8; 32], salt: &[u8; 32],
salt2: Option<[u8; 32]>, salt2: Option<&[u8; 32]>,
) -> FidoResult<([u8; 32], Option<[u8; 32]>)> { ) -> FidoResult<([u8; 32], Option<[u8; 32]>)> {
let client_data_hash = [0u8; 32]; let client_data_hash = [0u8; 32];
while self.shared_secret.is_none() { while self.shared_secret.is_none() {