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);
}
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)
"#;
let vectors = regex_replace_all!{
r#"\(.*\)"#,
- vectors,
+ vectors.trim_end(),
|_| "",
};
let vectors = regex_replace_all!{