aboutsummaryrefslogtreecommitdiff
path: root/src/bech32.cpp
diff options
context:
space:
mode:
authorSamuel Dobson <dobsonsa68@gmail.com>2021-11-23 12:17:34 +1300
committerSamuel Dobson <dobsonsa68@gmail.com>2021-11-23 15:48:59 +1300
commitc8b9a224e70f70ccc638b2c4200a505cdf024efd (patch)
tree158d0c3d3b9342ca4e50a1cb9f95f3bfe20cd440 /src/bech32.cpp
parent92f0cafdca11a9463b6f04229c1c47805c97c1b5 (diff)
downloadbitcoin-c8b9a224e70f70ccc638b2c4200a505cdf024efd.tar.xz
Report encoding type in bech32 error message
Diffstat (limited to 'src/bech32.cpp')
-rw-r--r--src/bech32.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/bech32.cpp b/src/bech32.cpp
index ec69965d07..7585ee944c 100644
--- a/src/bech32.cpp
+++ b/src/bech32.cpp
@@ -7,6 +7,7 @@
#include <util/vector.h>
#include <assert.h>
+#include <optional>
namespace bech32
{
@@ -539,6 +540,7 @@ std::string LocateErrors(const std::string& str, std::vector<int>& error_locatio
// We attempt error detection with both bech32 and bech32m, and choose the one with the fewest errors
// We can't simply use the segwit version, because that may be one of the errors
+ std::optional<Encoding> error_encoding;
for (Encoding encoding : {Encoding::BECH32, Encoding::BECH32M}) {
std::vector<int> possible_errors;
// Recall that (ExpandHRP(hrp) ++ values) is interpreted as a list of coefficients of a polynomial
@@ -657,9 +659,13 @@ std::string LocateErrors(const std::string& str, std::vector<int>& error_locatio
if (error_locations.empty() || (!possible_errors.empty() && possible_errors.size() < error_locations.size())) {
error_locations = std::move(possible_errors);
+ if (!error_locations.empty()) error_encoding = encoding;
}
}
- return "Invalid checksum";
+ return error_encoding == Encoding::BECH32M ? "Invalid Bech32m checksum"
+ : error_encoding == Encoding::BECH32 ? "Invalid Bech32 checksum"
+ : "Invalid checksum";
+
}
} // namespace bech32