Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bech32.h
Go to the documentation of this file.
1
// Copyright (c) 2017, 2021 Pieter Wuille
2
// Copyright (c) 2021-present 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 <cstdint>
18
#include <string>
19
#include <vector>
20
21
namespace
bech32
22
{
23
24
static
constexpr
size_t
CHECKSUM_SIZE
= 6;
25
static
constexpr
char
SEPARATOR
=
'1'
;
26
27
enum class
Encoding
{
28
INVALID
,
29
30
BECH32
,
31
BECH32M
,
32
};
33
38
enum
CharLimit
:
size_t
{
39
BECH32
= 90,
40
};
41
44
std::string
Encode
(
Encoding
encoding,
const
std::string& hrp,
const
std::vector<uint8_t>&
values
);
45
46
struct
DecodeResult
47
{
48
Encoding
encoding
;
49
std::string
hrp
;
50
std::vector<uint8_t>
data
;
51
52
DecodeResult
() :
encoding
(
Encoding
::
INVALID
) {}
53
DecodeResult
(
Encoding
enc, std::string&& h, std::vector<uint8_t>&& d) :
encoding
(enc),
hrp
(
std
::move(h)),
data
(
std
::move(d)) {}
54
};
55
57
DecodeResult
Decode
(
const
std::string& str,
CharLimit
limit =
CharLimit::BECH32
);
58
60
std::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
bech32
Definition
bech32.cpp:15
bech32::LocateErrors
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
bech32::Encoding
Encoding
Definition
bech32.h:27
bech32::Encoding::INVALID
@ INVALID
Failed decoding.
Definition
bech32.h:28
bech32::Encoding::BECH32M
@ BECH32M
Bech32m encoding as defined in BIP350.
Definition
bech32.h:31
bech32::CharLimit
CharLimit
Character limits for Bech32(m) encoded strings.
Definition
bech32.h:38
bech32::BECH32
@ BECH32
BIP173/350 imposed character limit for Bech32(m) encoded addresses. This guarantees finding up to 4 e...
Definition
bech32.h:39
bech32::Decode
DecodeResult Decode(const std::string &str, CharLimit limit)
Decode a Bech32 or Bech32m string.
Definition
bech32.cpp:374
bech32::Encode
std::string Encode(Encoding encoding, const std::string &hrp, const data &values)
Encode a Bech32 or Bech32m string.
Definition
bech32.cpp:358
bech32::CHECKSUM_SIZE
static constexpr size_t CHECKSUM_SIZE
Definition
bech32.h:24
bech32::SEPARATOR
static constexpr char SEPARATOR
Definition
bech32.h:25
std
Definition
common.h:29
values
static const int64_t values[]
A selection of numbers that do not trigger int64_t overflow when added/subtracted.
Definition
scriptnum_tests.cpp:17
bech32::DecodeResult::encoding
Encoding encoding
What encoding was detected in the result; Encoding::INVALID if failed.
Definition
bech32.h:48
bech32::DecodeResult::data
std::vector< uint8_t > data
The payload (excluding checksum).
Definition
bech32.h:50
bech32::DecodeResult::DecodeResult
DecodeResult(Encoding enc, std::string &&h, std::vector< uint8_t > &&d)
Definition
bech32.h:53
bech32::DecodeResult::hrp
std::string hrp
The human readable part.
Definition
bech32.h:49
bech32::DecodeResult::DecodeResult
DecodeResult()
Definition
bech32.h:52
Generated on
for Bitcoin Core by
1.17.0