Bitcoin Core 28.99.0
P2P Digital Currency
bech32.h
Go to the documentation of this file.
1// Copyright (c) 2017, 2021 Pieter Wuille
2// Copyright (c) 2021 The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6// Bech32 and Bech32m are string encoding formats used in newer
7// address types. The outputs consist of a human-readable part
8// (alphanumeric), a separator character (1), and a base32 data
9// section, the last 6 characters of which are a checksum. The
10// module is namespaced under bech32 for historical reasons.
11//
12// For more information, see BIP 173 and BIP 350.
13
14#ifndef BITCOIN_BECH32_H
15#define BITCOIN_BECH32_H
16
17#include <stdint.h>
18#include <string>
19#include <vector>
20
21namespace bech32
22{
23
25constexpr size_t CHECKSUM_SIZE = 6;
26
27enum class Encoding {
28 INVALID,
29
30 BECH32,
31 BECH32M,
32};
33
38enum CharLimit : size_t {
39 BECH32 = 90,
40};
41
44std::string Encode(Encoding encoding, const std::string& hrp, const std::vector<uint8_t>& values);
45
47{
49 std::string hrp;
50 std::vector<uint8_t> data;
51
53 DecodeResult(Encoding enc, std::string&& h, std::vector<uint8_t>&& d) : encoding(enc), hrp(std::move(h)), data(std::move(d)) {}
54};
55
57DecodeResult Decode(const std::string& str, CharLimit limit = CharLimit::BECH32);
58
60std::pair<std::string, std::vector<int>> LocateErrors(const std::string& str, CharLimit limit = CharLimit::BECH32);
61
62} // namespace bech32
63
64#endif // BITCOIN_BECH32_H
std::pair< std::string, std::vector< int > > LocateErrors(const std::string &str, CharLimit limit)
Find index of an incorrect character in a Bech32 string.
Definition: bech32.cpp:403
Encoding
Definition: bech32.h:27
@ INVALID
Failed decoding.
@ BECH32M
Bech32m encoding as defined in BIP350.
CharLimit
Character limits for Bech32(m) encoded strings.
Definition: bech32.h:38
@ BECH32
BIP173/350 imposed character limit for Bech32(m) encoded addresses. This guarantees finding up to 4 e...
Definition: bech32.h:39
DecodeResult Decode(const std::string &str, CharLimit limit)
Decode a Bech32 or Bech32m string.
Definition: bech32.cpp:374
std::string Encode(Encoding encoding, const std::string &hrp, const data &values)
Encode a Bech32 or Bech32m string.
Definition: bech32.cpp:358
constexpr size_t CHECKSUM_SIZE
The Bech32 and Bech32m checksum size.
Definition: bech32.h:25
static const int64_t values[]
A selection of numbers that do not trigger int64_t overflow when added/subtracted.
Encoding encoding
What encoding was detected in the result; Encoding::INVALID if failed.
Definition: bech32.h:48
std::vector< uint8_t > data
The payload (excluding checksum)
Definition: bech32.h:50
DecodeResult(Encoding enc, std::string &&h, std::vector< uint8_t > &&d)
Definition: bech32.h:53
std::string hrp
The human readable part.
Definition: bech32.h:49