Возвращается правильный хеш, он просто не соответствует ожидаемому вами представлению.Хэш возвращается как необработанные байты, а не как байты, преобразованные в шестнадцатеричные цифры ASCII.
Если мы распечатаем массив хэш-кода как шестнадцатеричный код, например:
println!("{:02x?}", code);
, тогда мы можем увидеть, чтоона соответствует вашей строке:
[97, 04, 96, 23, b0, e5, d2, 0b, f6, be, b5, 31, 3d, 80, 60, 0e, 3d, 6a, be, 56]
// 97049623b0e5d20bf6beb5313d80600e3d6abe56
, тогда как строка "97049623b0e5d20bf6beb5313d80600e3d6abe56"
выглядит следующим образом:
[39, 37, 30, 34, 39, 36, 32, 33, 62, 30, 65, 35, 64, 32, 30, 62, 66, 36, 62, 65,
62, 35, 33, 31, 33, 64, 38, 30, 36, 30, 30, 65, 33, 64, 36, 61, 62, 65, 35, 36]
Используя itertools , мы можем преобразовать первое в второекак это:
assert_eq!(
COMPUTED_HMAC,
code.iter().format_with("", |byte, f| f(&format_args!("{:02x}", byte))).to_string());