Copyright | (c) 2019-2023 Emily Pillmore |
---|---|
License | BSD-style |
Maintainer | Emily Pillmore <emilypi@cohomolo.gy> |
Stability | stable |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
This module contains ByteString
-valued combinators for
implementing the RFC 4648 specification of the Base32hex
encoding format. This includes padded and unpadded decoding variants, as well as
internal and external validation for canonicity.
Synopsis
- encodeBase32 :: ByteString -> Text
- encodeBase32' :: ByteString -> ByteString
- encodeBase32Unpadded :: ByteString -> Text
- encodeBase32Unpadded' :: ByteString -> ByteString
- decodeBase32 :: ByteString -> Either Text ByteString
- decodeBase32Unpadded :: ByteString -> Either Text ByteString
- decodeBase32Padded :: ByteString -> Either Text ByteString
- isBase32Hex :: ByteString -> Bool
- isValidBase32Hex :: ByteString -> Bool
Encoding
encodeBase32 :: ByteString -> Text Source #
Encode a ByteString
value as a Base32hex Text
value with padding.
See: RFC-4648 section 7
Examples:
>>>
encodeBase32 "Sun"
"ADQMS==="
encodeBase32' :: ByteString -> ByteString Source #
Encode a ByteString
value as a Base32hex ByteString
value with padding.
See: RFC-4648 section 7
Examples:
>>>
encodeBase32' "Sun"
"ADQMS==="
encodeBase32Unpadded :: ByteString -> Text Source #
Encode a ByteString
value as a Base32hex Text
value without padding.
See: RFC-4648 section 7
Examples:
>>>
encodeBase32Unpadded' "Sun"
"ADQMS"
encodeBase32Unpadded' :: ByteString -> ByteString Source #
Encode a ByteString
value as a Base32hex ByteString
value without padding.
See: RFC-4648 section 7
Examples:
>>>
encodeBase32Unpadded' "Sun"
"ADQMS"
Decoding
decodeBase32 :: ByteString -> Either Text ByteString Source #
Decode an arbitrarily padded Base32hex-encoded ByteString
value. If its length
is not a multiple of 8, then padding characters will be added to fill out the
input to a multiple of 8 for safe decoding, as Base32hex-encoded values are
optionally padded.
See: RFC-4648 section 7
Examples:
>>>
decodeBase32 "ADQMS==="
Right "Sun"
>>>
decodeBase32 "ADQMS"
Right "Sun"
>>>
decodeBase32 "ADQM==="
Left "Base32-encoded bytestring has invalid padding"
decodeBase32Unpadded :: ByteString -> Either Text ByteString Source #
Decode an unpadded Base32hex-encoded ByteString
value.
See: RFC-4648 section 7
Examples:
>>>
decodeBase32Unpadded "ADQMS"
Right "Sun"
>>>
decodeBase32Unpadded "ADQMS==="
Left "Base32-encoded bytestring has invalid padding"
decodeBase32Padded :: ByteString -> Either Text ByteString Source #
Decode a padded Base32hex-encoded ByteString
value.
See: RFC-4648 section 7
Examples:
>>>
decodeBase32Padded "ADQMS==="
Right "Sun"
>>>
decodeBase32Padded "ADQMS"
Left "Base32-encoded bytestring requires padding"
Validation
isBase32Hex :: ByteString -> Bool Source #
Tell whether a ByteString
value is encoded in padded or unpadded Base32hex format
Examples:
>>>
isBase32Hex "ADQMS"
True
>>>
isBase32Hex "ADQMS==="
True
>>>
isBase32Hex "ADQMS=="
False
isValidBase32Hex :: ByteString -> Bool Source #
Tell whether a ByteString
value is a valid Base32hex format.
This will not tell you whether or not this is a correct Base32hex representation,
only that it conforms to the correct shape (including padding/size etc.).
To check whether it is a true Base32hex encoded ByteString
value, use isBase32
.
Examples:
>>>
isValidBase32Hex "ADQMS"
True
>>>
isValidBase32Hex "ADQMS="
False
>>>
isValidBase32Hex "ADQMS%"
False