diff --git a/src/netaddress.cpp b/src/netaddress.cpp --- a/src/netaddress.cpp +++ b/src/netaddress.cpp @@ -342,10 +342,10 @@ std::string CNetAddr::ToStringIP() const { if (IsTor()) { - return EncodeBase32(m_addr.data(), m_addr.size()) + ".onion"; + return EncodeBase32(m_addr) + ".onion"; } if (IsInternal()) { - return EncodeBase32(m_addr.data(), m_addr.size()) + ".internal"; + return EncodeBase32(m_addr) + ".internal"; } CService serv(*this, 0); struct sockaddr_storage sockaddr; diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -1550,7 +1550,7 @@ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << merged_psbt; - return EncodeBase64((uint8_t *)ssTx.data(), ssTx.size()); + return EncodeBase64(MakeUCharSpan(ssTx)); } static UniValue finalizepsbt(const Config &config, @@ -1730,7 +1730,7 @@ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << psbtx; - return EncodeBase64((uint8_t *)ssTx.data(), ssTx.size()); + return EncodeBase64(MakeUCharSpan(ssTx)); } static UniValue converttopsbt(const Config &config, @@ -1796,7 +1796,7 @@ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << psbtx; - return EncodeBase64((uint8_t *)ssTx.data(), ssTx.size()); + return EncodeBase64(MakeUCharSpan(ssTx)); } UniValue utxoupdatepsbt(const Config &config, const JSONRPCRequest &request) { @@ -1898,7 +1898,7 @@ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << psbtx; - return EncodeBase64((uint8_t *)ssTx.data(), ssTx.size()); + return EncodeBase64(MakeUCharSpan(ssTx)); } UniValue joinpsbts(const Config &config, const JSONRPCRequest &request) { @@ -2000,7 +2000,7 @@ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << shuffled_psbt; - return EncodeBase64((uint8_t *)ssTx.data(), ssTx.size()); + return EncodeBase64(MakeUCharSpan(ssTx)); } UniValue analyzepsbt(const Config &config, const JSONRPCRequest &request) { diff --git a/src/util/message.cpp b/src/util/message.cpp --- a/src/util/message.cpp +++ b/src/util/message.cpp @@ -61,7 +61,7 @@ return false; } - signature = EncodeBase64(signature_bytes.data(), signature_bytes.size()); + signature = EncodeBase64(signature_bytes); return true; } diff --git a/src/util/strencodings.h b/src/util/strencodings.h --- a/src/util/strencodings.h +++ b/src/util/strencodings.h @@ -55,11 +55,11 @@ bool IsHexNumber(const std::string &str); std::vector DecodeBase64(const char *p, bool *pf_invalid = nullptr); std::string DecodeBase64(const std::string &str, bool *pf_invalid = nullptr); -std::string EncodeBase64(const uint8_t *pch, size_t len); +std::string EncodeBase64(Span input); std::string EncodeBase64(const std::string &str); std::vector DecodeBase32(const char *p, bool *pf_invalid = nullptr); std::string DecodeBase32(const std::string &str, bool *pf_invalid = nullptr); -std::string EncodeBase32(const uint8_t *pch, size_t len); +std::string EncodeBase32(Span input); std::string EncodeBase32(const std::string &str); void SplitHostPort(std::string in, int &portOut, std::string &hostOut); diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -134,13 +134,14 @@ } } -std::string EncodeBase64(const uint8_t *pch, size_t len) { +std::string EncodeBase64(Span input) { static const char *pbase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; std::string str; - str.reserve(((len + 2) / 3) * 4); - ConvertBits<8, 6, true>([&](int v) { str += pbase64[v]; }, pch, pch + len); + str.reserve(((input.size() + 2) / 3) * 4); + ConvertBits<8, 6, true>([&](int v) { str += pbase64[v]; }, input.begin(), + input.end()); while (str.size() % 4) { str += '='; } @@ -148,7 +149,7 @@ } std::string EncodeBase64(const std::string &str) { - return EncodeBase64((const uint8_t *)str.data(), str.size()); + return EncodeBase64(MakeUCharSpan(str)); } std::vector DecodeBase64(const char *p, bool *pf_invalid) { @@ -213,12 +214,13 @@ return std::string((const char *)vchRet.data(), vchRet.size()); } -std::string EncodeBase32(const uint8_t *pch, size_t len) { +std::string EncodeBase32(Span input) { static const char *pbase32 = "abcdefghijklmnopqrstuvwxyz234567"; std::string str; - str.reserve(((len + 4) / 5) * 8); - ConvertBits<8, 5, true>([&](int v) { str += pbase32[v]; }, pch, pch + len); + str.reserve(((input.size() + 4) / 5) * 8); + ConvertBits<8, 5, true>([&](int v) { str += pbase32[v]; }, input.begin(), + input.end()); while (str.size() % 8) { str += '='; } @@ -226,7 +228,7 @@ } std::string EncodeBase32(const std::string &str) { - return EncodeBase32((const uint8_t *)str.data(), str.size()); + return EncodeBase32(MakeUCharSpan(str)); } std::vector DecodeBase32(const char *p, bool *pf_invalid) {