bech32-1.0.0: Implementation of the Bech32 cryptocurrency address format (BIP 0173).

Copyright© 2017 Marko Bencun 2018-2019 IOHK
LicenseApache-2.0
Safe HaskellNone
LanguageHaskell2010

Codec.Binary.Bech32

Contents

Description

Implementation of the Bech32 address format.

From an original implementation by Marko Bencun:

sipa/bech32

Synopsis

Encoding & Decoding

encode :: HumanReadablePart -> DataPart -> Either EncodingError Text Source #

Encode a human-readable string and data payload into a Bech32 string.

encodeLenient :: HumanReadablePart -> DataPart -> Text Source #

Like encode but allows output to be longer than 90 characters. This isn't ideal as the error detection becomes worse as string get longer but it's still acceptable.

From BIP-0173:

Even though the chosen code performs reasonably well up to 1023 characters, other designs are preferable for lengths above 89 characters (excluding the separator).

data EncodingError Source #

Represents the set of error conditions that may occur while encoding a Bech32 string.

Constructors

EncodedStringTooLong 

decode :: Text -> Either DecodingError (HumanReadablePart, DataPart) Source #

Decode a Bech32 string into a human-readable part and data part.

decodeLenient :: Text -> Either DecodingError (HumanReadablePart, DataPart) Source #

Like decode but does not enforce a maximum length. See also encodeLenient for details.

data DecodingError Source #

Represents the set of errors that may occur while decoding a Bech32 string with the decode function.

Constructors

StringToDecodeTooLong 
StringToDecodeTooShort 
StringToDecodeHasMixedCase 
StringToDecodeMissingSeparatorChar 
StringToDecodeContainsInvalidChars [CharPosition]

In cases where it is possible to determine the exact locations of erroneous characters, this list will encode those locations. Clients can use this information to provide user feedback. In cases where it isn't possible to reliably determine the locations of erroneous characters, this list will be empty.

Data Part

data DataPart Source #

Represents the data part of a Bech32 string, as defined here: https://git.io/fj8FS

dataPartFromBytes :: ByteString -> DataPart Source #

Constructs a DataPart from a ByteString.

This function encodes a ByteString in such a way that guarantees it can be successfully decoded with the dataPartToBytes function:

dataPartToBytes (dataPartFromBytes b) == Just b

dataPartFromText :: Text -> Maybe DataPart Source #

Constructs a DataPart from textual input. All characters in the input must be a member of dataCharList, the set of characters permitted to appear within the data part of a Bech32 string.

Returns Nothing if any character in the input is not a member of dataCharList.

This function guarantees to satisfy the following property:

dataPartFromText (dataPartToText d) == Just d

dataPartToBytes :: DataPart -> Maybe ByteString Source #

Attempts to extract a ByteString from a DataPart.

This function guarantees to satisfy the following property:

dataPartToBytes (dataPartFromBytes b) == Just b

dataPartToText :: DataPart -> Text Source #

Converts a DataPart to Text, using the Bech32 character set to render the data.

This function guarantees to satisfy the following property:

dataPartFromText (dataPartToText d) == Just d

Human-Readable Part

humanReadablePartFromText :: Text -> Either HumanReadablePartError HumanReadablePart Source #

Parses the human-readable part of a Bech32 string, as defined here: https://git.io/fj8FS

humanReadablePartToText :: HumanReadablePart -> Text Source #

Get the raw text of the human-readable part of a Bech32 string.