mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-18 23:36:39 +01:00
implement Update for LeaseSet2
This commit is contained in:
parent
bc3f02cb6b
commit
6643258618
2 changed files with 20 additions and 10 deletions
|
@ -262,16 +262,23 @@ namespace data
|
||||||
|
|
||||||
void LeaseSet2::Update (const uint8_t * buf, size_t len, bool verifySignature)
|
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);
|
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
|
// standard LS2 header
|
||||||
auto identity = std::make_shared<IdentityEx>(buf, len);
|
std::shared_ptr<const IdentityEx> identity;
|
||||||
|
if (readIdentity)
|
||||||
|
{
|
||||||
|
identity = std::make_shared<IdentityEx>(buf, len);
|
||||||
SetIdentity (identity);
|
SetIdentity (identity);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
identity = GetIdentity ();
|
||||||
size_t offset = identity->GetFullLen ();
|
size_t offset = identity->GetFullLen ();
|
||||||
if (offset + 8 >= len) return;
|
if (offset + 8 >= len) return;
|
||||||
uint32_t timestamp = bufbe32toh (buf + offset); offset += 4; // published timestamp (seconds)
|
uint32_t timestamp = bufbe32toh (buf + offset); offset += 4; // published timestamp (seconds)
|
||||||
|
@ -315,11 +322,14 @@ namespace data
|
||||||
}
|
}
|
||||||
if (!s) return;
|
if (!s) return;
|
||||||
offset += s;
|
offset += s;
|
||||||
|
if (verifySignature || transientVerifier)
|
||||||
|
{
|
||||||
// verify signature
|
// verify signature
|
||||||
bool verified = transientVerifier ? VerifySignature (transientVerifier, buf, len, offset) :
|
bool verified = transientVerifier ? VerifySignature (transientVerifier, buf, len, offset) :
|
||||||
VerifySignature (identity, buf, len, offset);
|
VerifySignature (identity, buf, len, offset);
|
||||||
SetIsValid (verified);
|
SetIsValid (verified);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Verifier>
|
template<typename Verifier>
|
||||||
bool LeaseSet2::VerifySignature (Verifier& verifier, const uint8_t * buf, size_t len, size_t signatureOffset)
|
bool LeaseSet2::VerifySignature (Verifier& verifier, const uint8_t * buf, size_t len, size_t signatureOffset)
|
||||||
|
|
|
@ -135,7 +135,7 @@ namespace data
|
||||||
|
|
||||||
private:
|
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);
|
void ReadFromBufferEncrypted (const uint8_t * buf, size_t len);
|
||||||
size_t ReadStandardLS2TypeSpecificPart (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);
|
size_t ReadMetaLS2TypeSpecificPart (const uint8_t * buf, size_t len);
|
||||||
|
|
Loading…
Add table
Reference in a new issue