如何在 Elm 中构建 HMAC 代码?

How do I build a HMAC code in Elm?

我正在尝试在 Elm 中实现 HMAC,
但我似乎无法弄清楚我在这里做错了什么。
一些帮助将不胜感激

type alias HashFunction =
    String -> String


encrypt64 : HashFunction -> String -> String -> String
encrypt64 =
    encrypt 64


encrypt : Int -> HashFunction -> String -> String -> String
encrypt blockSize hasher message key =
    let
        keySize =
            String.length key

        keyWithCorrectSize =
            if keySize > blockSize then
                hexStringToUtf8String (hasher key)
            else if keySize < blockSize then
                String.padRight blockSize (Char.fromCode 0) key
            else
                key

        keyCodePoints =
            keyWithCorrectSize
                |> String.toList
                |> List.map Char.toCode

        partA =
            keyCodePoints
                |> List.map (Bitwise.xor 54 >> Char.fromCode)
                |> String.fromList

        partB =
            keyCodePoints
                |> List.map (Bitwise.xor 92 >> Char.fromCode)
                |> String.fromList
    in
        message
            |> String.append partA
            |> hasher
            |> hexStringToUtf8String
            |> String.append partB
            |> hasher



-- Utils


hexStringToUtf8String : String -> String
hexStringToUtf8String input =
    input
        |> String.toList
        |> List.Extra.greedyGroupsOf 2
        |> List.map (String.fromList >> hexStringToUtf8Char)
        |> String.fromList


hexStringToUtf8Char : String -> Char
hexStringToUtf8Char input =
    case Hex.fromString input of
        Ok v ->
            Char.fromCode v

        Err err ->
            Debug.crash err

您可以在这里找到相关代码:https://github.com/icidasset/ongaku-ryoho/blob/master/src/App/Sources/Crypto/Hmac.elm(包括文档测试)

编辑: 更清楚...我当前的代码没有输出有效的 HMAC,
我想知道为什么。

查看 Elm SHA 库,我认为问题(或至少是一个问题)是散列的输出是十六进制编码的。 HMAC 两次调用哈希函数,将第一个输出反馈给第二次调用,这需要是原始 SHA 字节,而不是十六进制字符串。

因此您需要解码第一次调用 hasher 的十六进制输出,然后将其应用于 partA