Skip to content

Commit 9f554e0

Browse files
committed
Merge #9045: Hash P2P messages as they are received instead of at process-time
fe1dc62 Hash P2P messages as they are received instead of at process-time (Matt Corallo)
2 parents 1253f86 + fe1dc62 commit 9f554e0

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6399,7 +6399,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman)
63996399

64006400
// Checksum
64016401
CDataStream& vRecv = msg.vRecv;
6402-
uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize);
6402+
const uint256& hash = msg.GetMessageHash();
64036403
if (memcmp(hash.begin(), hdr.pchChecksum, CMessageHeader::CHECKSUM_SIZE) != 0)
64046404
{
64056405
LogPrintf("%s(%s, %u bytes): CHECKSUM ERROR expected %s was %s\n", __func__,

src/net.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,12 +742,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes)
742742
vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024));
743743
}
744744

745+
hasher.Write((const unsigned char*)pch, nCopy);
745746
memcpy(&vRecv[nDataPos], pch, nCopy);
746747
nDataPos += nCopy;
747748

748749
return nCopy;
749750
}
750751

752+
const uint256& CNetMessage::GetMessageHash() const
753+
{
754+
assert(complete());
755+
if (data_hash.IsNull())
756+
hasher.Finalize(data_hash.begin());
757+
return data_hash;
758+
}
759+
751760

752761

753762

src/net.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,9 @@ class CNodeStats
543543

544544

545545
class CNetMessage {
546+
private:
547+
mutable CHash256 hasher;
548+
mutable uint256 data_hash;
546549
public:
547550
bool in_data; // parsing header (false) or data (true)
548551

@@ -570,6 +573,8 @@ class CNetMessage {
570573
return (hdr.nMessageSize == nDataPos);
571574
}
572575

576+
const uint256& GetMessageHash() const;
577+
573578
void SetVersion(int nVersionIn)
574579
{
575580
hdrbuf.SetVersion(nVersionIn);

0 commit comments

Comments
 (0)