8 | parseHex : Char -> Maybe (Fin 16)
9 | parseHex '0' = Just 0
10 | parseHex '1' = Just 1
11 | parseHex '2' = Just 2
12 | parseHex '3' = Just 3
13 | parseHex '4' = Just 4
14 | parseHex '5' = Just 5
15 | parseHex '6' = Just 6
16 | parseHex '7' = Just 7
17 | parseHex '8' = Just 8
18 | parseHex '9' = Just 9
19 | parseHex 'a' = Just 10
20 | parseHex 'A' = Just 10
21 | parseHex 'b' = Just 11
22 | parseHex 'B' = Just 11
23 | parseHex 'c' = Just 12
24 | parseHex 'C' = Just 12
25 | parseHex 'd' = Just 13
26 | parseHex 'D' = Just 13
27 | parseHex 'e' = Just 14
28 | parseHex 'E' = Just 14
29 | parseHex 'f' = Just 15
30 | parseHex 'F' = Just 15
31 | parseHex _ = Nothing
34 | hexDigit : Fin 16 -> Char
53 | leftPad : Char -> Nat -> String -> String
54 | leftPad paddingChar padToLength str =
55 | if length str < padToLength
56 | then pack (List.replicate (minus padToLength (length str)) paddingChar) ++ str
59 | hexListLittleEndianToInteger : List (Fin 16) -> Integer
60 | hexListLittleEndianToInteger = go 1
62 | go : Integer -> List (Fin 16) -> Integer
63 | go multiplier [] = 0
64 | go multiplier (d :: ds) = cast d * multiplier + go (16 * multiplier) ds
75 | fromHexLittleEndian : String -> Maybe Integer
76 | fromHexLittleEndian str = do
77 | hexList <- traverse parseHex (unpack str)
78 | Just (hexListLittleEndianToInteger hexList)
82 | fromHexBigEndian : String -> Maybe Integer
83 | fromHexBigEndian str = do
84 | hexList <- traverse parseHex (reverse (unpack str))
85 | Just (hexListLittleEndianToInteger hexList)