base16-1.0: Fast RFC 4648-compliant Base16 encoding
Copyright(c) 2020-2023 Emily Pillmore
LicenseBSD-style
MaintainerEmily Pillmore <emilypi@cohomolo.gy>
Stabilitystable
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.ByteString.Short.Base16

Description

This module contains ShortByteString-valued combinators for implementing the RFC 4648 specification of the Base16 encoding format. This includes lenient decoding variants, as well as internal and external validation for canonicity.

Synopsis

Documentation

encodeBase16 :: ShortByteString -> Base16 ShortText Source #

Encode a ShortByteString value as Base16 ShortText

See: RFC-4648 section 8

Examples:

>>> encodeBase16 "Sun" "53756e" 

Since: 0.3.0.0

encodeBase16' :: ShortByteString -> Base16 ShortByteString Source #

Encode a ShortByteString value as a Base16 ShortByteString value

See: RFC-4648 section 8

Examples:

>>> encodeBase16' "Sun" "53756e" 

decodeBase16 :: Base16 ShortByteString -> ShortByteString Source #

Decode a Base16-encoded ShortByteString value.

See: RFC-4648 section 8

Examples:

>>> decodeBase16 $ assertBase16 "53756e" "Sun" 

decodeBase16' :: Base16 ShortText -> ShortByteString Source #

Decode Base16-encoded ShortText value.

See: RFC-4648 section 8

Examples:

>>> decodeBase16' $ assertBase16 "53756e" "Sun" 

decodeBase16Untyped :: ShortByteString -> Either Text ShortByteString Source #

Decode an untyped Base16-encoded ByteString value with error-checking.

See: RFC-4648 section 8

Examples:

>>> decodeBase16Untyped "53756e" Right "Sun" 
>>> decodeBase16Untyped "6x" Left "invalid character at offset: 1" 

decodeBase16Lenient :: ShortByteString -> ShortByteString Source #

Decode an untyped Base16-encoded ShortByteString value leniently, using a strategy that never fails

N.B.: this is not RFC 4648-compliant

Examples:

>>> decodeBase16Lenient "53756e" "Sun" 
>>> decodeBase16Lenient "6x6x" "f" 

isBase16 :: ShortByteString -> Bool Source #

Tell whether an untyped ShortByteString value is base16 encoded.

Examples:

>>> isBase16 "666f6" False 
>>> isBase16 "666f" True 

isValidBase16 :: ShortByteString -> Bool Source #

Tell whether an untyped ShortByteString value is a valid Base16 format.

This will not tell you whether or not this is a correct Base16 representation, only that it conforms to the correct alphabet. To check whether it is a true Base16 encoded ShortByteString value, use isBase16.

Examples:

>>> isValidBase16 "666f+/6" False 
>>> isValidBase16 "666f6" True