diff --git a/libi2pd/NTCP2.cpp b/libi2pd/NTCP2.cpp index fb22731b..294f83db 100644 --- a/libi2pd/NTCP2.cpp +++ b/libi2pd/NTCP2.cpp @@ -651,7 +651,7 @@ namespace transport void NTCP2Session::SendSessionRequest () { - if (!m_Establisher->CreateSessionRequestMessage (m_Server.GetRng ())) + if (!m_Establisher->CreateSessionRequestMessage (m_Server.GetEstablisherRng ())) { LogPrint (eLogWarning, "NTCP2: Send SessionRequest KDF failed"); boost::asio::post (m_Server.GetService (), std::bind (&NTCP2Session::Terminate, shared_from_this ())); @@ -787,7 +787,7 @@ namespace transport void NTCP2Session::SendSessionCreated () { - if (!m_Establisher->CreateSessionCreatedMessage (m_Server.GetRng ())) + if (!m_Establisher->CreateSessionCreatedMessage (m_Server.GetEstablisherRng ())) { LogPrint (eLogWarning, "NTCP2: Send SessionCreated KDF failed"); boost::asio::post (m_Server.GetService (), std::bind (&NTCP2Session::Terminate, shared_from_this ())); @@ -1697,6 +1697,7 @@ namespace transport RunnableServiceWithWork ("NTCP2"), m_TerminationTimer (GetService ()), m_ProxyType(eNoProxy), m_Resolver(GetService ()), m_Rng(i2p::util::GetMonotonicMicroseconds ()%1000000LL), + m_EstablisherService (m_Rng ()), m_Version (2) { } diff --git a/libi2pd/NTCP2.h b/libi2pd/NTCP2.h index dcd80949..f7b4b4d6 100644 --- a/libi2pd/NTCP2.h +++ b/libi2pd/NTCP2.h @@ -263,10 +263,16 @@ namespace transport { public: - EstablisherService (): RunnableServiceWithWork ("NTCP2e") {}; + EstablisherService (uint32_t seed): RunnableServiceWithWork ("NTCP2e"), + m_Rng (seed) {}; auto& GetService () { return GetIOService (); }; + std::mt19937& GetRng () { return m_Rng; }; void Start () { StartIOService (); }; void Stop () { StopIOService (); }; + + private: + + std::mt19937 m_Rng; }; public: @@ -286,6 +292,7 @@ namespace transport auto& GetService () { return GetIOService (); }; auto& GetEstablisherService () { return m_EstablisherService.GetService (); }; std::mt19937& GetRng () { return m_Rng; }; + std::mt19937& GetEstablisherRng () { return m_EstablisherService.GetRng (); }; void AEADChaCha20Poly1305Encrypt (const std::vector >& bufs, const uint8_t * key, const uint8_t * nonce, uint8_t * mac); bool AEADChaCha20Poly1305Decrypt (const uint8_t * msg, size_t msgLen, const uint8_t * ad, size_t adLen,