mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
create DH keys for SSU session directly
This commit is contained in:
parent
614921276e
commit
acc5592f59
@ -224,7 +224,11 @@ namespace transport
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!m_DHKeysPair)
|
if (!m_DHKeysPair)
|
||||||
m_DHKeysPair = transports.GetNextDHKeysPair ();
|
{
|
||||||
|
auto pair = std::make_shared<i2p::crypto::DHKeys> ();
|
||||||
|
pair->GenerateKeys ();
|
||||||
|
m_DHKeysPair = pair;
|
||||||
|
}
|
||||||
CreateAESandMacKey (buf + headerSize);
|
CreateAESandMacKey (buf + headerSize);
|
||||||
SendSessionCreated (buf + headerSize, sendRelayTag);
|
SendSessionCreated (buf + headerSize, sendRelayTag);
|
||||||
}
|
}
|
||||||
@ -826,9 +830,9 @@ namespace transport
|
|||||||
{
|
{
|
||||||
if (m_State == eSessionStateUnknown)
|
if (m_State == eSessionStateUnknown)
|
||||||
{
|
{
|
||||||
// set connect timer
|
ScheduleConnectTimer (); // set connect timer
|
||||||
ScheduleConnectTimer ();
|
m_DHKeysPair = std::make_shared<i2p::crypto::DHKeys> ();
|
||||||
m_DHKeysPair = transports.GetNextDHKeysPair ();
|
m_DHKeysPair->GenerateKeys ();
|
||||||
SendSessionRequest ();
|
SendSessionRequest ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -166,6 +166,7 @@ namespace transport
|
|||||||
bool m_IsDataReceived;
|
bool m_IsDataReceived;
|
||||||
std::unique_ptr<SignedData> m_SignedData; // we need it for SessionConfirmed only
|
std::unique_ptr<SignedData> m_SignedData; // we need it for SessionConfirmed only
|
||||||
std::map<uint32_t, std::shared_ptr<const i2p::data::RouterInfo> > m_RelayRequests; // nonce->Charlie
|
std::map<uint32_t, std::shared_ptr<const i2p::data::RouterInfo> > m_RelayRequests; // nonce->Charlie
|
||||||
|
std::shared_ptr<i2p::crypto::DHKeys> m_DHKeysPair; // X - for client and Y - for server
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ namespace transport
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
TransportSession (std::shared_ptr<const i2p::data::RouterInfo> router, int terminationTimeout):
|
TransportSession (std::shared_ptr<const i2p::data::RouterInfo> router, int terminationTimeout):
|
||||||
m_DHKeysPair (nullptr), m_NumSentBytes (0), m_NumReceivedBytes (0), m_IsOutgoing (router), m_TerminationTimeout (terminationTimeout),
|
m_NumSentBytes (0), m_NumReceivedBytes (0), m_IsOutgoing (router), m_TerminationTimeout (terminationTimeout),
|
||||||
m_LastActivityTimestamp (i2p::util::GetSecondsSinceEpoch ())
|
m_LastActivityTimestamp (i2p::util::GetSecondsSinceEpoch ())
|
||||||
{
|
{
|
||||||
if (router)
|
if (router)
|
||||||
@ -103,7 +103,6 @@ namespace transport
|
|||||||
|
|
||||||
std::shared_ptr<const i2p::data::IdentityEx> m_RemoteIdentity;
|
std::shared_ptr<const i2p::data::IdentityEx> m_RemoteIdentity;
|
||||||
mutable std::mutex m_RemoteIdentityMutex;
|
mutable std::mutex m_RemoteIdentityMutex;
|
||||||
std::shared_ptr<i2p::crypto::DHKeys> m_DHKeysPair; // X - for client and Y - for server
|
|
||||||
size_t m_NumSentBytes, m_NumReceivedBytes;
|
size_t m_NumSentBytes, m_NumReceivedBytes;
|
||||||
bool m_IsOutgoing;
|
bool m_IsOutgoing;
|
||||||
int m_TerminationTimeout;
|
int m_TerminationTimeout;
|
||||||
|
@ -134,7 +134,7 @@ namespace transport
|
|||||||
m_IsOnline (true), m_IsRunning (false), m_IsNAT (true), m_CheckReserved(true), m_Thread (nullptr),
|
m_IsOnline (true), m_IsRunning (false), m_IsNAT (true), m_CheckReserved(true), m_Thread (nullptr),
|
||||||
m_Service (nullptr), m_Work (nullptr), m_PeerCleanupTimer (nullptr), m_PeerTestTimer (nullptr),
|
m_Service (nullptr), m_Work (nullptr), m_PeerCleanupTimer (nullptr), m_PeerTestTimer (nullptr),
|
||||||
m_SSUServer (nullptr), m_NTCP2Server (nullptr),
|
m_SSUServer (nullptr), m_NTCP2Server (nullptr),
|
||||||
m_DHKeysPairSupplier (5), m_X25519KeysPairSupplier (5), // 5 pre-generated keys
|
m_X25519KeysPairSupplier (5), // 5 pre-generated keys
|
||||||
m_TotalSentBytes(0), m_TotalReceivedBytes(0), m_TotalTransitTransmittedBytes (0),
|
m_TotalSentBytes(0), m_TotalReceivedBytes(0), m_TotalTransitTransmittedBytes (0),
|
||||||
m_InBandwidth (0), m_OutBandwidth (0), m_TransitBandwidth(0),
|
m_InBandwidth (0), m_OutBandwidth (0), m_TransitBandwidth(0),
|
||||||
m_LastInBandwidthUpdateBytes (0), m_LastOutBandwidthUpdateBytes (0),
|
m_LastInBandwidthUpdateBytes (0), m_LastOutBandwidthUpdateBytes (0),
|
||||||
@ -165,7 +165,6 @@ namespace transport
|
|||||||
}
|
}
|
||||||
|
|
||||||
i2p::config::GetOption("nat", m_IsNAT);
|
i2p::config::GetOption("nat", m_IsNAT);
|
||||||
m_DHKeysPairSupplier.Start ();
|
|
||||||
m_X25519KeysPairSupplier.Start ();
|
m_X25519KeysPairSupplier.Start ();
|
||||||
m_IsRunning = true;
|
m_IsRunning = true;
|
||||||
m_Thread = new std::thread (std::bind (&Transports::Run, this));
|
m_Thread = new std::thread (std::bind (&Transports::Run, this));
|
||||||
@ -260,7 +259,6 @@ namespace transport
|
|||||||
m_NTCP2Server = nullptr;
|
m_NTCP2Server = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_DHKeysPairSupplier.Stop ();
|
|
||||||
m_X25519KeysPairSupplier.Stop ();
|
m_X25519KeysPairSupplier.Stop ();
|
||||||
m_IsRunning = false;
|
m_IsRunning = false;
|
||||||
if (m_Service) m_Service->stop ();
|
if (m_Service) m_Service->stop ();
|
||||||
@ -540,16 +538,6 @@ namespace transport
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<i2p::crypto::DHKeys> Transports::GetNextDHKeysPair ()
|
|
||||||
{
|
|
||||||
return m_DHKeysPairSupplier.Acquire ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Transports::ReuseDHKeysPair (std::shared_ptr<i2p::crypto::DHKeys> pair)
|
|
||||||
{
|
|
||||||
m_DHKeysPairSupplier.Return (pair);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<i2p::crypto::X25519Keys> Transports::GetNextX25519KeysPair ()
|
std::shared_ptr<i2p::crypto::X25519Keys> Transports::GetNextX25519KeysPair ()
|
||||||
{
|
{
|
||||||
return m_X25519KeysPairSupplier.Acquire ();
|
return m_X25519KeysPairSupplier.Acquire ();
|
||||||
|
@ -59,7 +59,6 @@ namespace transport
|
|||||||
std::condition_variable m_Acquired;
|
std::condition_variable m_Acquired;
|
||||||
std::mutex m_AcquiredMutex;
|
std::mutex m_AcquiredMutex;
|
||||||
};
|
};
|
||||||
typedef EphemeralKeysSupplier<i2p::crypto::DHKeys> DHKeysPairSupplier;
|
|
||||||
typedef EphemeralKeysSupplier<i2p::crypto::X25519Keys> X25519KeysPairSupplier;
|
typedef EphemeralKeysSupplier<i2p::crypto::X25519Keys> X25519KeysPairSupplier;
|
||||||
|
|
||||||
struct Peer
|
struct Peer
|
||||||
@ -97,8 +96,6 @@ namespace transport
|
|||||||
void SetOnline (bool online);
|
void SetOnline (bool online);
|
||||||
|
|
||||||
boost::asio::io_service& GetService () { return *m_Service; };
|
boost::asio::io_service& GetService () { return *m_Service; };
|
||||||
std::shared_ptr<i2p::crypto::DHKeys> GetNextDHKeysPair ();
|
|
||||||
void ReuseDHKeysPair (std::shared_ptr<i2p::crypto::DHKeys> pair);
|
|
||||||
std::shared_ptr<i2p::crypto::X25519Keys> GetNextX25519KeysPair ();
|
std::shared_ptr<i2p::crypto::X25519Keys> GetNextX25519KeysPair ();
|
||||||
void ReuseX25519KeysPair (std::shared_ptr<i2p::crypto::X25519Keys> pair);
|
void ReuseX25519KeysPair (std::shared_ptr<i2p::crypto::X25519Keys> pair);
|
||||||
|
|
||||||
@ -166,7 +163,6 @@ namespace transport
|
|||||||
mutable std::mutex m_PeersMutex;
|
mutable std::mutex m_PeersMutex;
|
||||||
std::unordered_map<i2p::data::IdentHash, Peer> m_Peers;
|
std::unordered_map<i2p::data::IdentHash, Peer> m_Peers;
|
||||||
|
|
||||||
DHKeysPairSupplier m_DHKeysPairSupplier;
|
|
||||||
X25519KeysPairSupplier m_X25519KeysPairSupplier;
|
X25519KeysPairSupplier m_X25519KeysPairSupplier;
|
||||||
|
|
||||||
std::atomic<uint64_t> m_TotalSentBytes, m_TotalReceivedBytes, m_TotalTransitTransmittedBytes;
|
std::atomic<uint64_t> m_TotalSentBytes, m_TotalReceivedBytes, m_TotalTransitTransmittedBytes;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user