aboutsummaryrefslogtreecommitdiff
path: root/src/bech32.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bech32.h')
-rw-r--r--src/bech32.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/bech32.h b/src/bech32.h
index 5e89e6efda..fe2a276ae0 100644
--- a/src/bech32.h
+++ b/src/bech32.h
@@ -28,6 +28,14 @@ enum class Encoding {
BECH32M, //!< Bech32m encoding as defined in BIP350
};
+/** Character limits for Bech32(m) encoded strings. Character limits are how we provide error location guarantees.
+ * These values should never exceed 2^31 - 1 (max value for a 32-bit int), since there are places where we may need to
+ * convert the CharLimit::VALUE to an int. In practice, this should never happen since this CharLimit applies to an address encoding
+ * and we would never encode an address with such a massive value */
+enum CharLimit : size_t {
+ BECH32 = 90, //!< BIP173/350 imposed character limit for Bech32(m) encoded addresses. This guarantees finding up to 4 errors.
+};
+
/** Encode a Bech32 or Bech32m string. If hrp contains uppercase characters, this will cause an
* assertion error. Encoding must be one of BECH32 or BECH32M. */
std::string Encode(Encoding encoding, const std::string& hrp, const std::vector<uint8_t>& values);
@@ -43,10 +51,10 @@ struct DecodeResult
};
/** Decode a Bech32 or Bech32m string. */
-DecodeResult Decode(const std::string& str);
+DecodeResult Decode(const std::string& str, CharLimit limit = CharLimit::BECH32);
/** Return the positions of errors in a Bech32 string. */
-std::pair<std::string, std::vector<int>> LocateErrors(const std::string& str);
+std::pair<std::string, std::vector<int>> LocateErrors(const std::string& str, CharLimit limit = CharLimit::BECH32);
} // namespace bech32