Add comment about size calculations for converted serialized keys
This commit is contained in:
parent
bec3e62bc1
commit
dd7417c8d0
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue