///|
/// 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..