git / moonbite-core / src/bech32.h · raw

// Copyright (c) 2017, 2021 Pieter Wuille// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.// Bech32 and Bech32m are string encoding formats used in newer// address types. The outputs consist of a human-readable part// (alphanumeric), a separator character (1), and a base32 data// section, the last 6 characters of which are a checksum. The// module is namespaced under bech32 for historical reasons.//// For more information, see BIP 173 and BIP 350.#ifndef BITCOIN_BECH32_H#define BITCOIN_BECH32_H#include <stdint.h>#include <string>#include <vector>namespace bech32{enum class Encoding {    INVALID, //!< Failed decoding    BECH32,  //!< Bech32 encoding as defined in BIP173    BECH32M, //!< Bech32m encoding as defined in BIP350};/** Encode a Bech32 or Bech32m string. If hrp contains uppercase characters, this will cause an *  assertion error. Encoding must be one of BECH32 or BECH32M. */std::string Encode(Encoding encoding, const std::string& hrp, const std::vector<uint8_t>& values);struct DecodeResult{    Encoding encoding;         //!< What encoding was detected in the result; Encoding::INVALID if failed.    std::string hrp;           //!< The human readable part    std::vector<uint8_t> data; //!< The payload (excluding checksum)    DecodeResult() : encoding(Encoding::INVALID) {}    DecodeResult(Encoding enc, std::string&& h, std::vector<uint8_t>&& d) : encoding(enc), hrp(std::move(h)), data(std::move(d)) {}};/** Decode a Bech32 or Bech32m string. */DecodeResult Decode(const std::string& str, const bool ext_length = false);} // namespace bech32#endif // BITCOIN_BECH32_H