Assert that the HRP is lowercase in Bech32::Encode
This commit is contained in:
parent
33f9750b1b
commit
2457aea83c
2 changed files with 8 additions and 2 deletions
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#include <bech32.h>
|
#include <bech32.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -58,7 +60,7 @@ uint32_t PolyMod(const data& v)
|
||||||
|
|
||||||
// During the course of the loop below, `c` contains the bitpacked coefficients of the
|
// During the course of the loop below, `c` contains the bitpacked coefficients of the
|
||||||
// polynomial constructed from just the values of v that were processed so far, mod g(x). In
|
// polynomial constructed from just the values of v that were processed so far, mod g(x). In
|
||||||
// the above example, `c` initially corresponds to 1 mod (x), and after processing 2 inputs of
|
// the above example, `c` initially corresponds to 1 mod g(x), and after processing 2 inputs of
|
||||||
// v, it corresponds to x^2 + v0*x + v1 mod g(x). As 1 mod g(x) = 1, that is the starting value
|
// v, it corresponds to x^2 + v0*x + v1 mod g(x). As 1 mod g(x) = 1, that is the starting value
|
||||||
// for `c`.
|
// for `c`.
|
||||||
uint32_t c = 1;
|
uint32_t c = 1;
|
||||||
|
@ -145,6 +147,10 @@ namespace bech32
|
||||||
|
|
||||||
/** Encode a Bech32 string. */
|
/** Encode a Bech32 string. */
|
||||||
std::string Encode(const std::string& hrp, const data& values) {
|
std::string Encode(const std::string& hrp, const data& values) {
|
||||||
|
// First ensure that the HRP is all lowercase. BIP-173 requires an encoder
|
||||||
|
// to return a lowercase Bech32 string, but if given an uppercase HRP, the
|
||||||
|
// result will always be invalid.
|
||||||
|
for (const char& c : hrp) assert(c < 'A' || c > 'Z');
|
||||||
data checksum = CreateChecksum(hrp, values);
|
data checksum = CreateChecksum(hrp, values);
|
||||||
data combined = Cat(values, checksum);
|
data combined = Cat(values, checksum);
|
||||||
std::string ret = hrp + '1';
|
std::string ret = hrp + '1';
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
namespace bech32
|
namespace bech32
|
||||||
{
|
{
|
||||||
|
|
||||||
/** Encode a Bech32 string. Returns the empty string in case of failure. */
|
/** Encode a Bech32 string. If hrp contains uppercase characters, this will cause an assertion error. */
|
||||||
std::string Encode(const std::string& hrp, const std::vector<uint8_t>& values);
|
std::string Encode(const std::string& hrp, const std::vector<uint8_t>& values);
|
||||||
|
|
||||||
/** Decode a Bech32 string. Returns (hrp, data). Empty hrp means failure. */
|
/** Decode a Bech32 string. Returns (hrp, data). Empty hrp means failure. */
|
||||||
|
|
Loading…
Reference in a new issue