mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
MixHash with encrypted payload after decryption
This commit is contained in:
parent
765e0e5c6b
commit
5c9af1c613
@ -124,15 +124,17 @@ namespace transport
|
|||||||
i2p::context.GetSSU2StaticKeys ().Agree (headerX + 16, sharedSecret);
|
i2p::context.GetSSU2StaticKeys ().Agree (headerX + 16, sharedSecret);
|
||||||
m_NoiseState->MixKey (sharedSecret);
|
m_NoiseState->MixKey (sharedSecret);
|
||||||
// decrypt
|
// decrypt
|
||||||
uint8_t * payload = buf + 64;
|
uint8_t * payload = buf + 64;
|
||||||
m_NoiseState->MixHash (payload, 24); // h = SHA256(h || 24 byte encrypted payload from Session Request) for SessionCreated
|
std::vector<uint8_t> decryptedPayload(len - 80);
|
||||||
if (!i2p::crypto::AEADChaCha20Poly1305 (payload, len - 80, m_NoiseState->m_H, 32, m_NoiseState->m_CK + 32, nonce, payload, len - 80, false))
|
if (!i2p::crypto::AEADChaCha20Poly1305 (payload, len - 80, m_NoiseState->m_H, 32,
|
||||||
|
m_NoiseState->m_CK + 32, nonce, decryptedPayload.data (), decryptedPayload.size (), false))
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "SSU2: SessionRequest AEAD verification failed ");
|
LogPrint (eLogWarning, "SSU2: SessionRequest AEAD verification failed ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_NoiseState->MixHash (payload, 24); // h = SHA256(h || 24 byte encrypted payload from Session Request) for SessionCreated
|
||||||
// payload
|
// payload
|
||||||
HandlePayload (payload, len - 80);
|
HandlePayload (decryptedPayload.data (), decryptedPayload.size ());
|
||||||
|
|
||||||
m_Server.AddSession (m_SourceConnID, shared_from_this ());
|
m_Server.AddSession (m_SourceConnID, shared_from_this ());
|
||||||
SendSessionCreated (headerX + 16);
|
SendSessionCreated (headerX + 16);
|
||||||
@ -497,7 +499,10 @@ namespace transport
|
|||||||
boost::asio::buffer (payload, payloadLen)
|
boost::asio::buffer (payload, payloadLen)
|
||||||
};
|
};
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
m_Socket.send_to (bufs, to, 0, ec);
|
if (to.address ().is_v6 ())
|
||||||
|
m_SocketV6.send_to (bufs, to, 0, ec);
|
||||||
|
else
|
||||||
|
m_Socket.send_to (bufs, to, 0, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SSU2Server::CreateSession (std::shared_ptr<const i2p::data::RouterInfo> router,
|
bool SSU2Server::CreateSession (std::shared_ptr<const i2p::data::RouterInfo> router,
|
||||||
|
Loading…
Reference in New Issue
Block a user