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 Base32
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
- isBase32 :: ByteString -> Bool
- isValidBase32 :: ByteString -> Bool
Encoding
encodeBase32 :: ByteString -> Text Source #
Encode a ByteString
value as a Base32 Text
value with padding.
See: RFC-4648 section 6
Examples:
>>>
encodeBase32 "Sun"
"KN2W4==="
encodeBase32' :: ByteString -> ByteString Source #
Encode a ByteString
value as a Base32 ByteString
value with padding.
See: RFC-4648 section 6
Examples:
>>>
encodeBase32' "Sun"
"KN2W4==="
encodeBase32Unpadded :: ByteString -> Text Source #
Encode a ByteString
value as a Base32 Text
value without padding.
See: RFC-4648 section 6
Examples:
>>>
encodeBase32Unpadded "Sun"
"KN2W4"
encodeBase32Unpadded' :: ByteString -> ByteString Source #
Encode a ByteString
value as a Base32 ByteString
value without padding.
See: RFC-4648 section 6
Examples:
>>>
encodeBase32Unpadded' "Sun"
"KN2W4"
Decoding
decodeBase32 :: ByteString -> Either Text ByteString Source #
Decode an arbitrarily padded Base32-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 Base32-encoded values are
optionally padded.
See: RFC-4648 section 6
Examples:
>>>
decodeBase32 "KN2W4==="
Right "Sun"
>>>
decodeBase32 "KN2W4"
Right "Sun"
>>>
decodeBase32 "KN2W==="
Left "Base32-encoded bytestring has invalid padding"
decodeBase32Unpadded :: ByteString -> Either Text ByteString Source #
Decode an unpadded Base32-encoded ByteString
value.
See: RFC-4648 section 6
Examples:
>>>
decodeBase32Unpadded "KN2W4"
Right "Sun"
>>>
decodeBase32Unpadded "KN2W4==="
Left "Base32-encoded bytestring has invalid padding"
decodeBase32Padded :: ByteString -> Either Text ByteString Source #
Decode a padded Base32-encoded ByteString
value.
See: RFC-4648 section 6
Examples:
>>>
decodeBase32Padded "KN2W4==="
Right "Sun"
>>>
decodeBase32Padded "KN2W4"
Left "Base32-encoded bytestring requires padding"
Validation
isBase32 :: ByteString -> Bool Source #
Tell whether a ByteString
value is encoded in padded or unpadded Base32 format
Examples:
>>>
isBase32 "KN2W4"
True
>>>
isBase32 "KN2W4==="
True
>>>
isBase32 "KN2W4=="
False
isValidBase32 :: ByteString -> Bool Source #
Tell whether a ByteString
value is a valid Base32 format.
This will not tell you whether or not this is a correct Base32 representation,
only that it conforms to the correct shape (including padding/size etc.).
To check whether it is a true Base32 encoded ByteString
value, use isBase32
.
Examples:
>>>
isValidBase32 "KN2W4"
True
>>>
isValidBase32 "KN2W4="
False
>>>
isValidBase32 "KN2W4%"
False