diff options
author | Pieter Wuille <pieter@wuille.net> | 2021-01-05 12:55:15 -0800 |
---|---|---|
committer | Pieter Wuille <pieter@wuille.net> | 2021-03-27 12:09:13 -0700 |
commit | 1485533092a0732bae55313659a3e3f9669fd77a (patch) | |
tree | d67e5f8780cb44088706e0231629bcb85492a1b2 /src/key_io.cpp | |
parent | a30fd40735eb5646dd4bf3c78d1532fde14502b6 (diff) | |
download | bitcoin-1485533092a0732bae55313659a3e3f9669fd77a.tar.xz |
Implement Bech32m encoding/decoding
Github-Pull: #20861
Rebased-From: da2bb6976dadeec682d163c258c9afecc87d6428
Diffstat (limited to 'src/key_io.cpp')
-rw-r--r-- | src/key_io.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/key_io.cpp b/src/key_io.cpp index d2f5be93f5..f927ebbb42 100644 --- a/src/key_io.cpp +++ b/src/key_io.cpp @@ -44,7 +44,7 @@ public: std::vector<unsigned char> data = {0}; data.reserve(33); ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, id.begin(), id.end()); - return bech32::Encode(m_params.Bech32HRP(), data); + return bech32::Encode(bech32::Encoding::BECH32, m_params.Bech32HRP(), data); } std::string operator()(const WitnessV0ScriptHash& id) const @@ -52,7 +52,7 @@ public: std::vector<unsigned char> data = {0}; data.reserve(53); ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, id.begin(), id.end()); - return bech32::Encode(m_params.Bech32HRP(), data); + return bech32::Encode(bech32::Encoding::BECH32, m_params.Bech32HRP(), data); } std::string operator()(const WitnessUnknown& id) const @@ -63,7 +63,7 @@ public: std::vector<unsigned char> data = {(unsigned char)id.version}; data.reserve(1 + (id.length * 8 + 4) / 5); ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, id.program, id.program + id.length); - return bech32::Encode(m_params.Bech32HRP(), data); + return bech32::Encode(bech32::Encoding::BECH32, m_params.Bech32HRP(), data); } std::string operator()(const CNoDestination& no) const { return {}; } @@ -91,13 +91,13 @@ CTxDestination DecodeDestination(const std::string& str, const CChainParams& par } } data.clear(); - auto bech = bech32::Decode(str); - if (bech.second.size() > 0 && bech.first == params.Bech32HRP()) { + const auto dec = bech32::Decode(str); + if (dec.encoding == bech32::Encoding::BECH32 && dec.data.size() > 0 && dec.hrp == params.Bech32HRP()) { // Bech32 decoding - int version = bech.second[0]; // The first 5 bit symbol is the witness version (0-16) + int version = dec.data[0]; // The first 5 bit symbol is the witness version (0-16) // The rest of the symbols are converted witness program bytes. - data.reserve(((bech.second.size() - 1) * 5) / 8); - if (ConvertBits<5, 8, false>([&](unsigned char c) { data.push_back(c); }, bech.second.begin() + 1, bech.second.end())) { + data.reserve(((dec.data.size() - 1) * 5) / 8); + if (ConvertBits<5, 8, false>([&](unsigned char c) { data.push_back(c); }, dec.data.begin() + 1, dec.data.end())) { if (version == 0) { { WitnessV0KeyHash keyid; |