mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-04 10:59:08 +02:00
Merge #19326: Simplify hash.h interface using Spans
77c507358bMake Hash[160] consume range-like objects (Pieter Wuille)02c4cc5c5dMake CHash256/CHash160 output to Span (Pieter Wuille)0ef97b1b10Make MurmurHash3 consume Spans (Pieter Wuille)e549bf8a9aMake CHash256 and CHash160 consume Spans (Pieter Wuille)2a2182c387Make script/standard's BaseHash Span-convertible (Pieter Wuille)e63dcc3a67Add MakeUCharSpan, to help constructing Span<[const] unsigned char> (Pieter Wuille)567825049fMake uint256 Span-convertible by adding ::data() (Pieter Wuille)131a2f0337scripted-diff: rename base_blob::data to m_data (Pieter Wuille) Pull request description: This makes use of the implicit constructions and conversions to Span introduced in #18468 to simplify the hash.h interface: * All functions that take a pointer and a length are changed to take a Span instead. * The Hash() and Hash160() functions are changed to take in "range" objects instead of begin/end iterators. ACKs for top commit: laanwj: re-ACK77c507358bjonatack: Code review re-ACK77c5073per `git range-diff14ceddd49fc016 77c5073` Tree-SHA512: 9ec929891b1ddcf30eb14b946ee1bf142eca1442b9de0067ad6a3c181e0c7ea0c99c0e291e7f6e7a18bd7bdf78fe94ee3d5de66e167401674caf91e026269771
This commit is contained in:
@@ -743,7 +743,7 @@ BOOST_AUTO_TEST_CASE(sha256d64)
|
||||
in[j] = InsecureRandBits(8);
|
||||
}
|
||||
for (int j = 0; j < i; ++j) {
|
||||
CHash256().Write(in + 64 * j, 64).Finalize(out1 + 32 * j);
|
||||
CHash256().Write({in + 64 * j, 64}).Finalize({out1 + 32 * j, 32});
|
||||
}
|
||||
SHA256D64(out2, in, i);
|
||||
BOOST_CHECK(memcmp(out1, out2, 32 * i) == 0);
|
||||
|
||||
@@ -44,8 +44,8 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||
}
|
||||
}
|
||||
|
||||
(void)hash160.Write(data.data(), data.size());
|
||||
(void)hash256.Write(data.data(), data.size());
|
||||
(void)hash160.Write(data);
|
||||
(void)hash256.Write(data);
|
||||
(void)hmac_sha256.Write(data.data(), data.size());
|
||||
(void)hmac_sha512.Write(data.data(), data.size());
|
||||
(void)ripemd160.Write(data.data(), data.size());
|
||||
@@ -54,9 +54,8 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||
(void)sha512.Write(data.data(), data.size());
|
||||
(void)sip_hasher.Write(data.data(), data.size());
|
||||
|
||||
(void)Hash(data.begin(), data.end());
|
||||
(void)Hash(data);
|
||||
(void)Hash160(data);
|
||||
(void)Hash160(data.begin(), data.end());
|
||||
(void)sha512.Size();
|
||||
break;
|
||||
}
|
||||
@@ -73,12 +72,12 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 8)) {
|
||||
case 0: {
|
||||
data.resize(CHash160::OUTPUT_SIZE);
|
||||
hash160.Finalize(data.data());
|
||||
hash160.Finalize(data);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
data.resize(CHash256::OUTPUT_SIZE);
|
||||
hash256.Finalize(data.data());
|
||||
hash256.Finalize(data);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
|
||||
@@ -85,7 +85,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||
assert(negated_key == key);
|
||||
}
|
||||
|
||||
const uint256 random_uint256 = Hash(buffer.begin(), buffer.end());
|
||||
const uint256 random_uint256 = Hash(buffer);
|
||||
|
||||
{
|
||||
CKey child_key;
|
||||
|
||||
@@ -77,7 +77,7 @@ BOOST_AUTO_TEST_CASE(key_test1)
|
||||
for (int n=0; n<16; n++)
|
||||
{
|
||||
std::string strMsg = strprintf("Very secret message %i: 11", n);
|
||||
uint256 hashMsg = Hash(strMsg.begin(), strMsg.end());
|
||||
uint256 hashMsg = Hash(strMsg);
|
||||
|
||||
// normal signatures
|
||||
|
||||
@@ -134,7 +134,7 @@ BOOST_AUTO_TEST_CASE(key_test1)
|
||||
|
||||
std::vector<unsigned char> detsig, detsigc;
|
||||
std::string strMsg = "Very deterministic message";
|
||||
uint256 hashMsg = Hash(strMsg.begin(), strMsg.end());
|
||||
uint256 hashMsg = Hash(strMsg);
|
||||
BOOST_CHECK(key1.Sign(hashMsg, detsig));
|
||||
BOOST_CHECK(key1C.Sign(hashMsg, detsigc));
|
||||
BOOST_CHECK(detsig == detsigc);
|
||||
@@ -158,7 +158,7 @@ BOOST_AUTO_TEST_CASE(key_signature_tests)
|
||||
// When entropy is specified, we should see at least one high R signature within 20 signatures
|
||||
CKey key = DecodeSecret(strSecret1);
|
||||
std::string msg = "A message to be signed";
|
||||
uint256 msg_hash = Hash(msg.begin(), msg.end());
|
||||
uint256 msg_hash = Hash(msg);
|
||||
std::vector<unsigned char> sig;
|
||||
bool found = false;
|
||||
|
||||
@@ -179,7 +179,7 @@ BOOST_AUTO_TEST_CASE(key_signature_tests)
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
sig.clear();
|
||||
std::string msg = "A message to be signed" + ToString(i);
|
||||
msg_hash = Hash(msg.begin(), msg.end());
|
||||
msg_hash = Hash(msg);
|
||||
BOOST_CHECK(key.Sign(msg_hash, sig));
|
||||
found = sig[3] == 0x20;
|
||||
BOOST_CHECK(sig.size() <= 70);
|
||||
@@ -196,7 +196,7 @@ BOOST_AUTO_TEST_CASE(key_key_negation)
|
||||
std::string str = "Bitcoin key verification\n";
|
||||
GetRandBytes(rnd, sizeof(rnd));
|
||||
uint256 hash;
|
||||
CHash256().Write((unsigned char*)str.data(), str.size()).Write(rnd, sizeof(rnd)).Finalize(hash.begin());
|
||||
CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash);
|
||||
|
||||
// import the static test key
|
||||
CKey key = DecodeSecret(strSecret1C);
|
||||
|
||||
@@ -13,9 +13,9 @@ static uint256 ComputeMerkleRootFromBranch(const uint256& leaf, const std::vecto
|
||||
uint256 hash = leaf;
|
||||
for (std::vector<uint256>::const_iterator it = vMerkleBranch.begin(); it != vMerkleBranch.end(); ++it) {
|
||||
if (nIndex & 1) {
|
||||
hash = Hash(it->begin(), it->end(), hash.begin(), hash.end());
|
||||
hash = Hash(*it, hash);
|
||||
} else {
|
||||
hash = Hash(hash.begin(), hash.end(), it->begin(), it->end());
|
||||
hash = Hash(hash, *it);
|
||||
}
|
||||
nIndex >>= 1;
|
||||
}
|
||||
@@ -60,7 +60,7 @@ static void MerkleComputation(const std::vector<uint256>& leaves, uint256* proot
|
||||
}
|
||||
}
|
||||
mutated |= (inner[level] == h);
|
||||
CHash256().Write(inner[level].begin(), 32).Write(h.begin(), 32).Finalize(h.begin());
|
||||
CHash256().Write(inner[level]).Write(h).Finalize(h);
|
||||
}
|
||||
// Store the resulting hash at inner position level.
|
||||
inner[level] = h;
|
||||
@@ -86,7 +86,7 @@ static void MerkleComputation(const std::vector<uint256>& leaves, uint256* proot
|
||||
if (pbranch && matchh) {
|
||||
pbranch->push_back(h);
|
||||
}
|
||||
CHash256().Write(h.begin(), 32).Write(h.begin(), 32).Finalize(h.begin());
|
||||
CHash256().Write(h).Write(h).Finalize(h);
|
||||
// Increment count to the value it would have if two entries at this
|
||||
// level had existed.
|
||||
count += (((uint32_t)1) << level);
|
||||
@@ -101,7 +101,7 @@ static void MerkleComputation(const std::vector<uint256>& leaves, uint256* proot
|
||||
matchh = true;
|
||||
}
|
||||
}
|
||||
CHash256().Write(inner[level].begin(), 32).Write(h.begin(), 32).Finalize(h.begin());
|
||||
CHash256().Write(inner[level]).Write(h).Finalize(h);
|
||||
level++;
|
||||
}
|
||||
}
|
||||
@@ -144,8 +144,7 @@ static uint256 BlockBuildMerkleTree(const CBlock& block, bool* fMutated, std::ve
|
||||
// Two identical hashes at the end of the list at a particular level.
|
||||
mutated = true;
|
||||
}
|
||||
vMerkleTree.push_back(Hash(vMerkleTree[j+i].begin(), vMerkleTree[j+i].end(),
|
||||
vMerkleTree[j+i2].begin(), vMerkleTree[j+i2].end()));
|
||||
vMerkleTree.push_back(Hash(vMerkleTree[j+i], vMerkleTree[j+i2]));
|
||||
}
|
||||
j += nSize;
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
|
||||
s << OP_0 << ToByteVector(pubkey.GetID());
|
||||
BOOST_CHECK(ExtractDestination(s, address));
|
||||
WitnessV0KeyHash keyhash;
|
||||
CHash160().Write(pubkey.begin(), pubkey.size()).Finalize(keyhash.begin());
|
||||
CHash160().Write(pubkey).Finalize(keyhash);
|
||||
BOOST_CHECK(boost::get<WitnessV0KeyHash>(&address) && *boost::get<WitnessV0KeyHash>(&address) == keyhash);
|
||||
|
||||
// TxoutType::WITNESS_V0_SCRIPTHASH
|
||||
|
||||
@@ -282,7 +282,7 @@ public:
|
||||
CScript scriptPubKey = script;
|
||||
if (wm == WitnessMode::PKH) {
|
||||
uint160 hash;
|
||||
CHash160().Write(&script[1], script.size() - 1).Finalize(hash.begin());
|
||||
CHash160().Write(MakeSpan(script).subspan(1)).Finalize(hash);
|
||||
script = CScript() << OP_DUP << OP_HASH160 << ToByteVector(hash) << OP_EQUALVERIFY << OP_CHECKSIG;
|
||||
scriptPubKey = CScript() << witnessversion << ToByteVector(hash);
|
||||
} else if (wm == WitnessMode::SH) {
|
||||
|
||||
@@ -145,7 +145,7 @@ BOOST_AUTO_TEST_CASE(floats)
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
ss << float(i);
|
||||
}
|
||||
BOOST_CHECK(Hash(ss.begin(), ss.end()) == uint256S("8e8b4cf3e4df8b332057e3e23af42ebc663b61e0495d5e7e32d85099d7f3fe0c"));
|
||||
BOOST_CHECK(Hash(ss) == uint256S("8e8b4cf3e4df8b332057e3e23af42ebc663b61e0495d5e7e32d85099d7f3fe0c"));
|
||||
|
||||
// decode
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
@@ -162,7 +162,7 @@ BOOST_AUTO_TEST_CASE(doubles)
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
ss << double(i);
|
||||
}
|
||||
BOOST_CHECK(Hash(ss.begin(), ss.end()) == uint256S("43d0c82591953c4eafe114590d392676a01585d25b25d433557f0d7878b23f96"));
|
||||
BOOST_CHECK(Hash(ss) == uint256S("43d0c82591953c4eafe114590d392676a01585d25b25d433557f0d7878b23f96"));
|
||||
|
||||
// decode
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
|
||||
@@ -228,7 +228,7 @@ BOOST_FIXTURE_TEST_CASE(Merge, MergeTestingSetup)
|
||||
if (OnlyHasDefaultSectionSetting(settings, network, name)) desc += " ignored";
|
||||
desc += "\n";
|
||||
|
||||
out_sha.Write((const unsigned char*)desc.data(), desc.size());
|
||||
out_sha.Write(MakeUCharSpan(desc));
|
||||
if (out_file) {
|
||||
BOOST_REQUIRE(fwrite(desc.data(), 1, desc.size(), out_file) == desc.size());
|
||||
}
|
||||
|
||||
@@ -1009,7 +1009,7 @@ BOOST_FIXTURE_TEST_CASE(util_ArgsMerge, ArgsMergeTestingSetup)
|
||||
|
||||
desc += "\n";
|
||||
|
||||
out_sha.Write((const unsigned char*)desc.data(), desc.size());
|
||||
out_sha.Write(MakeUCharSpan(desc));
|
||||
if (out_file) {
|
||||
BOOST_REQUIRE(fwrite(desc.data(), 1, desc.size(), out_file) == desc.size());
|
||||
}
|
||||
@@ -1112,7 +1112,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
||||
}
|
||||
desc += "\n";
|
||||
|
||||
out_sha.Write((const unsigned char*)desc.data(), desc.size());
|
||||
out_sha.Write(MakeUCharSpan(desc));
|
||||
if (out_file) {
|
||||
BOOST_REQUIRE(fwrite(desc.data(), 1, desc.size(), out_file) == desc.size());
|
||||
}
|
||||
@@ -2186,8 +2186,8 @@ BOOST_AUTO_TEST_CASE(message_hash)
|
||||
std::string(1, (char)unsigned_tx.length()) +
|
||||
unsigned_tx;
|
||||
|
||||
const uint256 signature_hash = Hash(unsigned_tx.begin(), unsigned_tx.end());
|
||||
const uint256 message_hash1 = Hash(prefixed_message.begin(), prefixed_message.end());
|
||||
const uint256 signature_hash = Hash(unsigned_tx);
|
||||
const uint256 message_hash1 = Hash(prefixed_message);
|
||||
const uint256 message_hash2 = MessageHash(unsigned_tx);
|
||||
|
||||
BOOST_CHECK_EQUAL(message_hash1, message_hash2);
|
||||
|
||||
Reference in New Issue
Block a user