diff --git a/src/blockfilter.cpp b/src/blockfilter.cpp --- a/src/blockfilter.cpp +++ b/src/blockfilter.cpp @@ -289,7 +289,7 @@ const std::vector &data = GetEncodedFilter(); uint256 result; - CHash256().Write(data).Finalize(result.begin()); + CHash256().Write(data).Finalize(result); return result; } @@ -297,6 +297,6 @@ const uint256 &filter_hash = GetHash(); uint256 result; - CHash256().Write(filter_hash).Write(prev_header).Finalize(result.begin()); + CHash256().Write(filter_hash).Write(prev_header).Finalize(result); return result; } diff --git a/src/hash.h b/src/hash.h --- a/src/hash.h +++ b/src/hash.h @@ -26,10 +26,11 @@ public: static const size_t OUTPUT_SIZE = CSHA256::OUTPUT_SIZE; - void Finalize(uint8_t hash[OUTPUT_SIZE]) { + void Finalize(Span output) { + assert(output.size() == OUTPUT_SIZE); uint8_t buf[CSHA256::OUTPUT_SIZE]; sha.Finalize(buf); - sha.Reset().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash); + sha.Reset().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(output.data()); } CHash256 &Write(Span input) { @@ -51,10 +52,11 @@ public: static const size_t OUTPUT_SIZE = CRIPEMD160::OUTPUT_SIZE; - void Finalize(uint8_t hash[OUTPUT_SIZE]) { + void Finalize(Span output) { + assert(output.size() == OUTPUT_SIZE); uint8_t buf[CSHA256::OUTPUT_SIZE]; sha.Finalize(buf); - CRIPEMD160().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash); + CRIPEMD160().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(output.data()); } CHash160 &Write(Span input) { @@ -75,7 +77,7 @@ CHash256() .Write({pbegin == pend ? pblank : (const uint8_t *)&pbegin[0], (pend - pbegin) * sizeof(pbegin[0])}) - .Finalize((uint8_t *)&result); + .Finalize(result); return result; } @@ -90,7 +92,7 @@ (p1end - p1begin) * sizeof(p1begin[0])}) .Write({p2begin == p2end ? pblank : (const uint8_t *)&p2begin[0], (p2end - p2begin) * sizeof(p2begin[0])}) - .Finalize((uint8_t *)&result); + .Finalize(result); return result; } @@ -101,7 +103,7 @@ CHash160() .Write({pbegin == pend ? pblank : (const uint8_t *)&pbegin[0], (pend - pbegin) * sizeof(pbegin[0])}) - .Finalize((uint8_t *)&result); + .Finalize(result); return result; } @@ -138,7 +140,7 @@ // invalidates the object uint256 GetHash() { uint256 result; - ctx.Finalize((uint8_t *)&result); + ctx.Finalize(result); return result; } diff --git a/src/key.cpp b/src/key.cpp --- a/src/key.cpp +++ b/src/key.cpp @@ -308,7 +308,7 @@ std::string str = "Bitcoin key verification\n"; GetRandBytes(rnd, sizeof(rnd)); uint256 hash; - CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash.begin()); + CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash); std::vector vchSig; SignECDSA(hash, vchSig); return pubkey.VerifyECDSA(hash, vchSig); diff --git a/src/net.cpp b/src/net.cpp --- a/src/net.cpp +++ b/src/net.cpp @@ -726,7 +726,7 @@ const uint256 &V1TransportDeserializer::GetMessageHash() const { assert(Complete()); if (data_hash.IsNull()) { - hasher.Finalize(data_hash.begin()); + hasher.Finalize(data_hash); } return data_hash; } diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -940,9 +940,9 @@ .Write(vch.data(), vch.size()) .Finalize(vchHash.data()); } else if (opcode == OP_HASH160) { - CHash160().Write(vch).Finalize(vchHash.data()); + CHash160().Write(vch).Finalize(vchHash); } else if (opcode == OP_HASH256) { - CHash256().Write(vch).Finalize(vchHash.data()); + CHash256().Write(vch).Finalize(vchHash); } popstack(stack); stack.push_back(vchHash); diff --git a/src/test/crypto_tests.cpp b/src/test/crypto_tests.cpp --- a/src/test/crypto_tests.cpp +++ b/src/test/crypto_tests.cpp @@ -1063,7 +1063,7 @@ 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); diff --git a/src/test/fuzz/crypto.cpp b/src/test/fuzz/crypto.cpp --- a/src/test/fuzz/crypto.cpp +++ b/src/test/fuzz/crypto.cpp @@ -81,12 +81,12 @@ fuzzed_data_provider.ConsumeIntegralInRange(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: { diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp --- a/src/test/key_tests.cpp +++ b/src/test/key_tests.cpp @@ -379,7 +379,7 @@ std::string str = "Bitcoin key verification\n"; GetRandBytes(rnd, sizeof(rnd)); uint256 hash; - CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash.begin()); + CHash256().Write(MakeUCharSpan(str)).Write(rnd).Finalize(hash); // import the static test key CKey key = DecodeSecret(strSecret1C); diff --git a/src/test/merkle_tests.cpp b/src/test/merkle_tests.cpp --- a/src/test/merkle_tests.cpp +++ b/src/test/merkle_tests.cpp @@ -79,7 +79,7 @@ } } mutated |= (inner[level] == h); - CHash256().Write(inner[level]).Write(h).Finalize(h.begin()); + CHash256().Write(inner[level]).Write(h).Finalize(h); } // Store the resulting hash at inner position level. inner[level] = h; @@ -105,7 +105,7 @@ if (pbranch && matchh) { pbranch->push_back(h); } - CHash256().Write(h).Write(h).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); @@ -120,7 +120,7 @@ matchh = true; } } - CHash256().Write(inner[level]).Write(h).Finalize(h.begin()); + CHash256().Write(inner[level]).Write(h).Finalize(h); level++; } }