Make DecodeBase{32,64} always return vector, not string

Base32/base64 are mechanisms for encoding binary data. That they'd
decode to a string is just bizarre. The fact that they'd do that
based on the type of input arguments even more so.
This commit is contained in:
Pieter Wuille
2022-04-04 13:19:49 -04:00
committed by MacroFake
parent a4377a0843
commit a65931e3ce
13 changed files with 31 additions and 30 deletions

View File

@@ -36,7 +36,7 @@ MessageVerificationResult MessageVerify(
}
bool invalid = false;
std::vector<unsigned char> signature_bytes = DecodeBase64(signature.c_str(), &invalid);
std::vector<unsigned char> signature_bytes = DecodeBase64(signature, &invalid);
if (invalid) {
return MessageVerificationResult::ERR_MALFORMED_SIGNATURE;
}

View File

@@ -172,14 +172,13 @@ std::vector<unsigned char> DecodeBase64(const char* p, bool* pf_invalid)
return ret;
}
std::string DecodeBase64(const std::string& str, bool* pf_invalid)
std::vector<unsigned char> DecodeBase64(const std::string& str, bool* pf_invalid)
{
if (!ValidAsCString(str)) {
*pf_invalid = true;
return {};
}
std::vector<unsigned char> vchRet = DecodeBase64(str.c_str(), pf_invalid);
return std::string((const char*)vchRet.data(), vchRet.size());
return DecodeBase64(str.c_str(), pf_invalid);
}
std::string EncodeBase32(Span<const unsigned char> input, bool pad)
@@ -248,14 +247,13 @@ std::vector<unsigned char> DecodeBase32(const char* p, bool* pf_invalid)
return ret;
}
std::string DecodeBase32(const std::string& str, bool* pf_invalid)
std::vector<unsigned char> DecodeBase32(const std::string& str, bool* pf_invalid)
{
if (!ValidAsCString(str)) {
*pf_invalid = true;
return {};
}
std::vector<unsigned char> vchRet = DecodeBase32(str.c_str(), pf_invalid);
return std::string((const char*)vchRet.data(), vchRet.size());
return DecodeBase32(str.c_str(), pf_invalid);
}
namespace {

View File

@@ -65,12 +65,12 @@ bool IsHex(std::string_view str);
*/
bool IsHexNumber(std::string_view str);
std::vector<unsigned char> DecodeBase64(const char* p, bool* pf_invalid);
std::string DecodeBase64(const std::string& str, bool* pf_invalid);
std::vector<unsigned char> DecodeBase64(const std::string& str, bool* pf_invalid);
std::string EncodeBase64(Span<const unsigned char> input);
inline std::string EncodeBase64(Span<const std::byte> input) { return EncodeBase64(MakeUCharSpan(input)); }
inline std::string EncodeBase64(const std::string& str) { return EncodeBase64(MakeUCharSpan(str)); }
std::vector<unsigned char> DecodeBase32(const char* p, bool* pf_invalid);
std::string DecodeBase32(const std::string& str, bool* pf_invalid);
std::vector<unsigned char> DecodeBase32(const std::string& str, bool* pf_invalid);
/**
* Base32 encode.