mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
don't create full identity from buffer if only ident hash is needed
This commit is contained in:
parent
d7ff459f12
commit
d3062d2994
@ -420,6 +420,14 @@ namespace data
|
|||||||
return CreateEncryptor (GetCryptoKeyType (), key);
|
return CreateEncryptor (GetCryptoKeyType (), key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t GetIdentityBufferLen (const uint8_t * buf, size_t len)
|
||||||
|
{
|
||||||
|
if (len < DEFAULT_IDENTITY_SIZE) return 0;
|
||||||
|
size_t l = DEFAULT_IDENTITY_SIZE + bufbe16toh (buf + DEFAULT_IDENTITY_SIZE - 2);
|
||||||
|
if (l > len) return 0;
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
PrivateKeys& PrivateKeys::operator=(const Keys& keys)
|
PrivateKeys& PrivateKeys::operator=(const Keys& keys)
|
||||||
{
|
{
|
||||||
m_Public = std::make_shared<IdentityEx>(Identity (keys));
|
m_Public = std::make_shared<IdentityEx>(Identity (keys));
|
||||||
|
@ -136,6 +136,8 @@ namespace data
|
|||||||
uint8_t m_ExtendedBuffer[MAX_EXTENDED_BUFFER_SIZE];
|
uint8_t m_ExtendedBuffer[MAX_EXTENDED_BUFFER_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
size_t GetIdentityBufferLen (const uint8_t * buf, size_t len); // return actual identity length in buffer
|
||||||
|
|
||||||
class PrivateKeys // for eepsites
|
class PrivateKeys // for eepsites
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -777,11 +777,12 @@ namespace client
|
|||||||
size_t offset = 2;
|
size_t offset = 2;
|
||||||
if (m_Destination)
|
if (m_Destination)
|
||||||
{
|
{
|
||||||
i2p::data::IdentityEx identity;
|
size_t identSize = i2p::data::GetIdentityBufferLen (buf + offset, len - offset);
|
||||||
size_t identsize = identity.FromBuffer (buf + offset, len - offset);
|
if (identSize)
|
||||||
if (identsize)
|
|
||||||
{
|
{
|
||||||
offset += identsize;
|
i2p::data::IdentHash identHash;
|
||||||
|
SHA256(buf + offset, identSize, identHash); // caclulate ident hash, because we don't need full identity
|
||||||
|
offset += identSize;
|
||||||
uint32_t payloadLen = bufbe32toh (buf + offset);
|
uint32_t payloadLen = bufbe32toh (buf + offset);
|
||||||
if (payloadLen + offset <= len)
|
if (payloadLen + offset <= len)
|
||||||
{
|
{
|
||||||
@ -791,7 +792,7 @@ namespace client
|
|||||||
{
|
{
|
||||||
if (m_IsSendAccepted)
|
if (m_IsSendAccepted)
|
||||||
SendMessageStatusMessage (nonce, eI2CPMessageStatusAccepted); // accepted
|
SendMessageStatusMessage (nonce, eI2CPMessageStatusAccepted); // accepted
|
||||||
m_Destination->SendMsgTo (buf + offset, payloadLen, identity.GetIdentHash (), nonce);
|
m_Destination->SendMsgTo (buf + offset, payloadLen, identHash, nonce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendMessageStatusMessage (nonce, eI2CPMessageStatusNoLocalTunnels);
|
SendMessageStatusMessage (nonce, eI2CPMessageStatusNoLocalTunnels);
|
||||||
|
Loading…
Reference in New Issue
Block a user