From 6643258618df46e20df74fdd505556ecb08d6e40 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 1 Feb 2019 12:55:13 -0500 Subject: [PATCH] implement Update for LeaseSet2 --- libi2pd/LeaseSet.cpp | 28 +++++++++++++++++++--------- libi2pd/LeaseSet.h | 2 +- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/libi2pd/LeaseSet.cpp b/libi2pd/LeaseSet.cpp index 5fe09a4a..06c5928c 100644 --- a/libi2pd/LeaseSet.cpp +++ b/libi2pd/LeaseSet.cpp @@ -262,16 +262,23 @@ namespace data void LeaseSet2::Update (const uint8_t * buf, size_t len, bool verifySignature) { - // shouldn't be called for now. Must be called from NetDb::AddLeaseSet later SetBuffer (buf, len); - // TODO:verify signature if requested + if (storeType != NETDB_STORE_TYPE_ENCRYPTED_LEASESET2) + ReadFromBuffer (buf, len, false, verifySignature); + // TODO: implement encrypted } - void LeaseSet2::ReadFromBuffer (const uint8_t * buf, size_t len) + void LeaseSet2::ReadFromBuffer (const uint8_t * buf, size_t len, bool readIdentity, bool verifySignature) { // standard LS2 header - auto identity = std::make_shared(buf, len); - SetIdentity (identity); + std::shared_ptr identity; + if (readIdentity) + { + identity = std::make_shared(buf, len); + SetIdentity (identity); + } + else + identity = GetIdentity (); size_t offset = identity->GetFullLen (); if (offset + 8 >= len) return; uint32_t timestamp = bufbe32toh (buf + offset); offset += 4; // published timestamp (seconds) @@ -315,10 +322,13 @@ namespace data } if (!s) return; offset += s; - // verify signature - bool verified = transientVerifier ? VerifySignature (transientVerifier, buf, len, offset) : - VerifySignature (identity, buf, len, offset); - SetIsValid (verified); + if (verifySignature || transientVerifier) + { + // verify signature + bool verified = transientVerifier ? VerifySignature (transientVerifier, buf, len, offset) : + VerifySignature (identity, buf, len, offset); + SetIsValid (verified); + } } template diff --git a/libi2pd/LeaseSet.h b/libi2pd/LeaseSet.h index 660b7ea2..3a9adae5 100644 --- a/libi2pd/LeaseSet.h +++ b/libi2pd/LeaseSet.h @@ -135,7 +135,7 @@ namespace data private: - void ReadFromBuffer (const uint8_t * buf, size_t len); + void ReadFromBuffer (const uint8_t * buf, size_t len, bool readIdentity = true, bool verifySignature = true); void ReadFromBufferEncrypted (const uint8_t * buf, size_t len); size_t ReadStandardLS2TypeSpecificPart (const uint8_t * buf, size_t len); size_t ReadMetaLS2TypeSpecificPart (const uint8_t * buf, size_t len);