diff --git a/NTCPSession.cpp b/NTCPSession.cpp index ededc765..24bc21e5 100644 --- a/NTCPSession.cpp +++ b/NTCPSession.cpp @@ -187,8 +187,8 @@ namespace transport memcpy (xy + 256, y, 256); SHA256(xy, 512, m_Establisher->phase2.encrypted.hxy); uint32_t tsB = htobe32 (i2p::util::GetSecondsSinceEpoch ()); - m_Establisher->phase2.encrypted.timestamp = tsB; - // TODO: fill filler + memcpy (m_Establisher->phase2.encrypted.timestamp, &tsB, 4); + RAND_bytes (m_Establisher->phase2.encrypted.filler, 12); i2p::crypto::AESKey aesKey; CreateAESKey (m_Establisher->phase1.pubKey, aesKey); @@ -287,7 +287,7 @@ namespace transport s.Insert (m_Establisher->phase2.pubKey, 256); // y s.Insert (m_RemoteIdentity->GetIdentHash (), 32); // ident s.Insert (tsA); // tsA - s.Insert (m_Establisher->phase2.encrypted.timestamp); // tsB + s.Insert (m_Establisher->phase2.encrypted.timestamp, 4); // tsB s.Sign (keys, buf); m_Encryption.Encrypt(m_ReceiveBuffer, len, m_ReceiveBuffer); @@ -449,7 +449,7 @@ namespace transport s.Insert (m_Establisher->phase2.pubKey, 256); // y s.Insert (i2p::context.GetIdentHash (), 32); // ident s.Insert (tsA); // tsA - s.Insert (m_Establisher->phase2.encrypted.timestamp); // tsB + s.Insert (m_Establisher->phase2.encrypted.timestamp, 4); // tsB if (!s.Verify (m_RemoteIdentity, m_ReceiveBuffer)) { diff --git a/NTCPSession.h b/NTCPSession.h index b8efa532..7e45137e 100644 --- a/NTCPSession.h +++ b/NTCPSession.h @@ -17,8 +17,6 @@ namespace i2p { namespace transport { - -#pragma pack(1) struct NTCPPhase1 { uint8_t pubKey[256]; @@ -31,12 +29,10 @@ namespace transport struct { uint8_t hxy[32]; - uint32_t timestamp; + uint8_t timestamp[4]; uint8_t filler[12]; } encrypted; }; - -#pragma pack() const size_t NTCP_MAX_MESSAGE_SIZE = 16384; const size_t NTCP_BUFFER_SIZE = 4160; // fits 4 tunnel messages (4*1028)