Ich versuche, HMAC in Elm,
zu implementieren, aber ich kann nicht scheinen, herauszufinden, was ich hier falsch mache.
würde Einige helfen starkWie baue ich einen HMAC-Code in Elm?
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
Sie den zugehörigen Code finden hier geschätzt werden: https://github.com/icidasset/ongaku-ryoho/blob/master/src/App/Sources/Crypto/Hmac.elm bearbeiten
(die doc-Tests beinhaltet): mehr klar sein ... hier meine aktuellen Code doesn 't geben einen gültigen HMAC,
aus und ich würde gerne wissen, warum.
Danke! Das ist definitiv eines der Probleme. Leider noch nicht ganz da ... Ich habe meinen obigen Code aktualisiert. Sieht das für dich ok aus? – Icid
Ok, also ein Kumpel von mir nahm den umgekehrten Weg und machte 'partB' eine hexadezimierte Zeichenkette und das scheint zu funktionieren. Es ist komisch, dass meine Möchtegernlösung nicht funktioniert ... Wie auch immer, das war definitiv das einzige Problem. Danke noch einmal! – Icid
Gern geschehen! Freut mich, dass es endlich funktioniert hat. Ich sehe, dass die SHA-Bibliothek Hex-Eingaben akzeptiert, wenn Sie ein Präfix "0x" verwenden, also denke ich, dass Sie das hier meinen. –