Browse Source

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)
0.14
Pieter Wuille 8 years ago
parent
commit
9f554e03eb
No known key found for this signature in database
GPG Key ID: DBA1A67379A1A931
  1. 2
      src/main.cpp
  2. 9
      src/net.cpp
  3. 5
      src/net.h

2
src/main.cpp

@ -6399,7 +6399,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman) @@ -6399,7 +6399,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman)
// Checksum
CDataStream& vRecv = msg.vRecv;
uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize);
const uint256& hash = msg.GetMessageHash();
if (memcmp(hash.begin(), hdr.pchChecksum, CMessageHeader::CHECKSUM_SIZE) != 0)
{
LogPrintf("%s(%s, %u bytes): CHECKSUM ERROR expected %s was %s\n", __func__,

9
src/net.cpp

@ -742,12 +742,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes) @@ -742,12 +742,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes)
vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024));
}
hasher.Write((const unsigned char*)pch, nCopy);
memcpy(&vRecv[nDataPos], pch, nCopy);
nDataPos += nCopy;
return nCopy;
}
const uint256& CNetMessage::GetMessageHash() const
{
assert(complete());
if (data_hash.IsNull())
hasher.Finalize(data_hash.begin());
return data_hash;
}

5
src/net.h

@ -543,6 +543,9 @@ public: @@ -543,6 +543,9 @@ public:
class CNetMessage {
private:
mutable CHash256 hasher;
mutable uint256 data_hash;
public:
bool in_data; // parsing header (false) or data (true)
@ -570,6 +573,8 @@ public: @@ -570,6 +573,8 @@ public:
return (hdr.nMessageSize == nDataPos);
}
const uint256& GetMessageHash() const;
void SetVersion(int nVersionIn)
{
hdrbuf.SetVersion(nVersionIn);

Loading…
Cancel
Save