From: Ian Jackson Date: Sun, 1 Aug 2021 00:12:35 +0000 (+0100) Subject: own hmac, tests, pass X-Git-Tag: hippotat/1.0.0~406 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=4c9be85e2dc8338d6cb046c0e0b2fbc00f4ccb5d;p=hippotat.git own hmac, tests, pass Signed-off-by: Ian Jackson --- diff --git a/src/utils.rs b/src/utils.rs index a47b848..868dd11 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -19,13 +19,15 @@ impl Result where AE: From { use sha2::Digest as _; type HmacH = sha2::Sha256; +const HMAC_B: usize = 64; const HMAC_L: usize = 32; -fn token_hmac(key: &[u8], message: &[u8]) -> [u8; HMAC_L] { +pub fn token_hmac(key: &[u8], message: &[u8]) -> [u8; HMAC_L] { let key = { - let mut padded = [0; HMAC_L]; - if key.len() > HMAC_L { - padded = HmacH::digest(key).into(); + let mut padded = [0; HMAC_B]; + if key.len() > padded.len() { + let digest: [u8; HMAC_L] = HmacH::digest(key).into(); + padded[0..HMAC_L].copy_from_slice(&digest); } else { padded[0.. key.len()].copy_from_slice(key); } @@ -34,6 +36,8 @@ fn token_hmac(key: &[u8], message: &[u8]) -> [u8; HMAC_L] { let mut ikey = key; for k in &mut ikey { *k ^= 0x36; } let mut okey = key; for k in &mut okey { *k ^= 0x5C; } +//dbg!(&key, &ikey, &okey); + let h1 = HmacH::new() .chain(&ikey) .chain(message) @@ -129,7 +133,7 @@ fn hmac_test_vectors(){ "#; let vectors = regex_replace_all!{ r#"\(.*\)"#, - vectors, + vectors.trim_end(), |_| "", }; let vectors = regex_replace_all!{