From 0cf9478cd49c4df184a4b745db18e3999b29cba9 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 2 Jun 2022 20:12:25 -0400 Subject: [PATCH] create SSU2 session for peer test msgs 5-7 --- libi2pd/SSU2.cpp | 19 ++++++++++++++----- libi2pd/SSU2.h | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 2263b044..9fafe7e6 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -109,8 +109,19 @@ namespace transport void SSU2Session::SendPeerTest () { // we are Alice + uint32_t nonce; + RAND_bytes ((uint8_t *)&nonce, 4); + auto ts = i2p::util::GetSecondsSinceEpoch (); + // session for message 5 + auto session = std::make_shared (m_Server); + session->SetState (eSSU2SessionStatePeerTest); + m_PeerTests.emplace (nonce, std::make_pair (session, ts)); + session->m_SourceConnID = htobe64 (((uint64_t)nonce << 32) | nonce); + session->m_DestConnID = ~session->m_SourceConnID; + m_Server.AddSession (session); + // peer test block uint8_t payload[SSU2_MAX_PAYLOAD_SIZE]; - size_t payloadSize = CreatePeerTestBlock (payload, SSU2_MAX_PAYLOAD_SIZE); + size_t payloadSize = CreatePeerTestBlock (payload, SSU2_MAX_PAYLOAD_SIZE, nonce); payloadSize += CreatePaddingBlock (payload + payloadSize, SSU2_MAX_PAYLOAD_SIZE - payloadSize); SendData (payload, payloadSize); } @@ -1316,7 +1327,7 @@ namespace transport auto it = m_PeerTests.find (nonce); if (it != m_PeerTests.end ()) { - // TODO: send to Charlie + // TODO: update Charlie's session RouterInfo m_PeerTests.erase (it); } break; @@ -1593,13 +1604,11 @@ namespace transport return payloadSize + 3; } - size_t SSU2Session::CreatePeerTestBlock (uint8_t * buf, size_t len) + size_t SSU2Session::CreatePeerTestBlock (uint8_t * buf, size_t len, uint32_t nonce) { auto localAddress = FindLocalAddress (); if (!localAddress) return 0; // signed data - uint32_t nonce; - RAND_bytes ((uint8_t *)&nonce, 4); auto ts = i2p::util::GetSecondsSinceEpoch (); uint8_t signedData[96]; signedData[0] = 2; // ver diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index 03c72b52..fd0719ea 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -219,7 +219,7 @@ namespace transport size_t CreateRelayIntroBlock (uint8_t * buf, size_t len, const uint8_t * introData, size_t introDataLen); size_t CreateRelayResponseBlock (uint8_t * buf, size_t len, uint32_t nonce); // Charlie size_t CreatePeerTestBlock (uint8_t * buf, size_t len, uint8_t msg, const uint8_t * routerHash, const uint8_t * signedData, size_t signedDataLen); - size_t CreatePeerTestBlock (uint8_t * buf, size_t len); // Alice + size_t CreatePeerTestBlock (uint8_t * buf, size_t len, uint32_t nonce); // Alice private: