MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / LeaseSetBufferValidate

Function LeaseSetBufferValidate

libi2pd/LeaseSet.cpp:827–859  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

825 }
826
827 bool LeaseSetBufferValidate(const uint8_t * ptr, size_t sz, uint64_t & expires)
828 {
829 IdentityEx ident(ptr, sz);
830 size_t size = ident.GetFullLen ();
831 if (size > sz)
832 {
833 LogPrint (eLogError, "LeaseSet: Identity length ", size, " exceeds buffer size ", sz);
834 return false;
835 }
836 // encryption key
837 size += 256;
838 // signing key (unused)
839 size += ident.GetSigningPublicKeyLen ();
840 uint8_t numLeases = ptr[size];
841 ++size;
842 if (!numLeases || numLeases > MAX_NUM_LEASES)
843 {
844 LogPrint (eLogError, "LeaseSet: Incorrect number of leases", (int)numLeases);
845 return false;
846 }
847 const uint8_t * leases = ptr + size;
848 expires = 0;
849 /** find lease with the max expiration timestamp */
850 for (int i = 0; i < numLeases; i++)
851 {
852 leases += 36; // gateway + tunnel ID
853 uint64_t endDate = bufbe64toh (leases);
854 leases += 8; // end date
855 if(endDate > expires)
856 expires = endDate;
857 }
858 return ident.Verify(ptr, leases - ptr, leases);
859 }
860
861 LocalLeaseSet2::LocalLeaseSet2 (uint8_t storeType, const i2p::data::PrivateKeys& keys,
862 const EncryptionKeys& encryptionKeys, const std::vector<std::shared_ptr<i2p::tunnel::InboundTunnel> >& tunnels,

Callers 1

AddLeaseSetMethod · 0.85

Calls 5

LogPrintFunction · 0.85
bufbe64tohFunction · 0.85
GetFullLenMethod · 0.45
VerifyMethod · 0.45

Tested by

no test coverage detected