Skip to content

Commit fe1dc62

Browse files
committed
Hash P2P messages as they are received instead of at process-time
1 parent d2143dc commit fe1dc62

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
@@ -6350,7 +6350,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman)
63506350

63516351
// Checksum
63526352
CDataStream& vRecv = msg.vRecv;
6353-
uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize);
6353+
const uint256& hash = msg.GetMessageHash();
63546354
if (memcmp(hash.begin(), hdr.pchChecksum, CMessageHeader::CHECKSUM_SIZE) != 0)
63556355
{
63566356
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
@@ -758,12 +758,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes)
758758
vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024));
759759
}
760760

761+
hasher.Write((const unsigned char*)pch, nCopy);
761762
memcpy(&vRecv[nDataPos], pch, nCopy);
762763
nDataPos += nCopy;
763764

764765
return nCopy;
765766
}
766767

768+
const uint256& CNetMessage::GetMessageHash() const
769+
{
770+
assert(complete());
771+
if (data_hash.IsNull())
772+
hasher.Finalize(data_hash.begin());
773+
return data_hash;
774+
}
775+
767776

768777

769778

src/net.h

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

513513

514514
class CNetMessage {
515+
private:
516+
mutable CHash256 hasher;
517+
mutable uint256 data_hash;
515518
public:
516519
bool in_data; // parsing header (false) or data (true)
517520

@@ -539,6 +542,8 @@ class CNetMessage {
539542
return (hdr.nMessageSize == nDataPos);
540543
}
541544

545+
const uint256& GetMessageHash() const;
546+
542547
void SetVersion(int nVersionIn)
543548
{
544549
hdrbuf.SetVersion(nVersionIn);

0 commit comments

Comments
 (0)