File tree Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -6350,7 +6350,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman)
6350
6350
6351
6351
// Checksum
6352
6352
CDataStream& vRecv = msg.vRecv ;
6353
- uint256 hash = Hash (vRecv. begin (), vRecv. begin () + nMessageSize );
6353
+ const uint256& hash = msg. GetMessageHash ( );
6354
6354
if (memcmp (hash.begin (), hdr.pchChecksum , CMessageHeader::CHECKSUM_SIZE) != 0 )
6355
6355
{
6356
6356
LogPrintf (" %s(%s, %u bytes): CHECKSUM ERROR expected %s was %s\n " , __func__,
Original file line number Diff line number Diff line change @@ -758,12 +758,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes)
758
758
vRecv.resize (std::min (hdr.nMessageSize , nDataPos + nCopy + 256 * 1024 ));
759
759
}
760
760
761
+ hasher.Write ((const unsigned char *)pch, nCopy);
761
762
memcpy (&vRecv[nDataPos], pch, nCopy);
762
763
nDataPos += nCopy;
763
764
764
765
return nCopy;
765
766
}
766
767
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
+
767
776
768
777
769
778
Original file line number Diff line number Diff line change @@ -512,6 +512,9 @@ class CNodeStats
512
512
513
513
514
514
class CNetMessage {
515
+ private:
516
+ mutable CHash256 hasher;
517
+ mutable uint256 data_hash;
515
518
public:
516
519
bool in_data; // parsing header (false) or data (true)
517
520
@@ -539,6 +542,8 @@ class CNetMessage {
539
542
return (hdr.nMessageSize == nDataPos);
540
543
}
541
544
545
+ const uint256& GetMessageHash () const ;
546
+
542
547
void SetVersion (int nVersionIn)
543
548
{
544
549
hdrbuf.SetVersion (nVersionIn);
You can’t perform that action at this time.
0 commit comments