mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
e8f63fc657
2457aea83c1f9fba708e2335bb197950bf0b6244 Assert that the HRP is lowercase in Bech32::Encode (Samuel Dobson)
Pull request description:
From BIP-173:
> The lowercase form is used when determining a character's value for checksum purposes.
> Encoders MUST always output an all lowercase Bech32 string. If an uppercase version of the encoding result is desired, (e.g.- for presentation purposes, or QR code use), then an uppercasing procedure can be performed external to the encoding process.
Currently if HRP contains uppercase characters, the checksum will be generated over these uppercase characters resulting in mixed-case output that will always be invalid even if the case is changed manually after encoding. This shouldn't happen because both prefix's `bc` and `tb` are lowercase currently, but we assert this condition anyway.
This is consistent also with the [C reference implementation](2b0aac650c/ref/c/segwit_addr.c (L59)
)
ACKs for top commit:
laanwj:
ACK 2457aea83c1f9fba708e2335bb197950bf0b6244
Tree-SHA512: 24fcbbc2f315c72c550cc3d82b4332443eea6378fc73d571f98b87492604d023378dd102377c9e05467192cae6049606dee98e4c5688c8d5e4caac50c970284b
31 lines
975 B
C++
31 lines
975 B
C++
// Copyright (c) 2017 Pieter Wuille
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
// Bech32 is a string encoding format used in newer address types.
|
|
// The output consists of a human-readable part (alphanumeric), a
|
|
// separator character (1), and a base32 data section, the last
|
|
// 6 characters of which are a checksum.
|
|
//
|
|
// For more information, see BIP 173.
|
|
|
|
#ifndef BITCOIN_BECH32_H
|
|
#define BITCOIN_BECH32_H
|
|
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace bech32
|
|
{
|
|
|
|
/** 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);
|
|
|
|
/** Decode a Bech32 string. Returns (hrp, data). Empty hrp means failure. */
|
|
std::pair<std::string, std::vector<uint8_t>> Decode(const std::string& str);
|
|
|
|
} // namespace bech32
|
|
|
|
#endif // BITCOIN_BECH32_H
|