Add comment about size calculations for converted serialized keys

This commit is contained in:
Jack Grigg 2018-06-12 15:40:50 +12:00
parent bec3e62bc1
commit dd7417c8d0
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
1 changed files with 6 additions and 0 deletions

View File

@ -92,6 +92,7 @@ public:
// ConvertBits requires unsigned char, but CDataStream uses char // ConvertBits requires unsigned char, but CDataStream uses char
std::vector<unsigned char> seraddr(ss.begin(), ss.end()); std::vector<unsigned char> seraddr(ss.begin(), ss.end());
std::vector<unsigned char> data; std::vector<unsigned char> data;
// See calculation comment below
data.reserve((seraddr.size() * 8 + 4) / 5); data.reserve((seraddr.size() * 8 + 4) / 5);
ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, seraddr.begin(), seraddr.end()); 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); return bech32::Encode(m_params.Bech32HRP(CChainParams::SAPLING_PAYMENT_ADDRESS), data);
@ -148,6 +149,7 @@ public:
// ConvertBits requires unsigned char, but CDataStream uses char // ConvertBits requires unsigned char, but CDataStream uses char
std::vector<unsigned char> serkey(ss.begin(), ss.end()); std::vector<unsigned char> serkey(ss.begin(), ss.end());
std::vector<unsigned char> data; std::vector<unsigned char> data;
// See calculation comment below
data.reserve((serkey.size() * 8 + 4) / 5); data.reserve((serkey.size() * 8 + 4) / 5);
ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, serkey.begin(), serkey.end()); 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); 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 {}; } 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 ConvertedSaplingPaymentAddressSize = ((32 + 11) * 8 + 4) / 5;
const size_t ConvertedSaplingSpendingKeySize = (32 * 8 + 4) / 5; const size_t ConvertedSaplingSpendingKeySize = (32 * 8 + 4) / 5;
} // namespace } // namespace