From dd7417c8d08796660c45d7e7c9c1d63235216f1d Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 12 Jun 2018 15:40:50 +1200 Subject: [PATCH] Add comment about size calculations for converted serialized keys --- src/key_io.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/key_io.cpp b/src/key_io.cpp index c73a3703f..b1754a494 100644 --- a/src/key_io.cpp +++ b/src/key_io.cpp @@ -92,6 +92,7 @@ public: // ConvertBits requires unsigned char, but CDataStream uses char std::vector seraddr(ss.begin(), ss.end()); std::vector data; + // See calculation comment below data.reserve((seraddr.size() * 8 + 4) / 5); ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, seraddr.begin(), seraddr.end()); return bech32::Encode(m_params.Bech32HRP(CChainParams::SAPLING_PAYMENT_ADDRESS), data); @@ -148,6 +149,7 @@ public: // ConvertBits requires unsigned char, but CDataStream uses char std::vector serkey(ss.begin(), ss.end()); std::vector data; + // See calculation comment below data.reserve((serkey.size() * 8 + 4) / 5); ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, serkey.begin(), serkey.end()); std::string ret = bech32::Encode(m_params.Bech32HRP(CChainParams::SAPLING_SPENDING_KEY), data); @@ -159,6 +161,10 @@ public: std::string operator()(const libzcash::InvalidEncoding& no) const { return {}; } }; +// Sizes of SaplingPaymentAddress and SaplingSpendingKey after +// ConvertBits<8, 5, true>(). The calculations below take the +// regular serialized size in bytes, convert to bits, and then +// perform ceiling division to get the number of 5-bit clusters. const size_t ConvertedSaplingPaymentAddressSize = ((32 + 11) * 8 + 4) / 5; const size_t ConvertedSaplingSpendingKeySize = (32 * 8 + 4) / 5; } // namespace