///|
/// Compute HMAC-SHA256 (RFC 2104) and return raw 32-byte digest.
pub fn hmac_sha256(key : Bytes, message : Bytes) -> Bytes {
let block_size = 64
// If key longer than block size, hash it
let actual_key = if key.length() > block_size { sha256(key) } else { key }
// Pad key to block size
let k : Array[Byte] = actual_key.to_array()
while k.length() < block_size {
k.push(b'\x00')
}
let key_bytes = Bytes::from_array(k)
// ipad and opad
let ipad : Array[Byte] = Array::make(block_size, b'\x00')
let opad : Array[Byte] = Array::make(block_size, b'\x00')
for i in 0..