From 8d4b98c83ae541ac8c8ce29d44e9cadd4c3e02ee Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 27 Jan 2014 16:52:17 -0500 Subject: [PATCH] SSUHeader and authenticate added --- SSU.cpp | 10 ++++++++++ SSU.h | 20 +++++++++++++++++++- hmac.h | 3 +-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/SSU.cpp b/SSU.cpp index aebab995..e77ccb66 100644 --- a/SSU.cpp +++ b/SSU.cpp @@ -14,6 +14,16 @@ namespace ssu void SSUSession::ProcessNextMessage (uint8_t * buf, std::size_t len) { + switch (m_State) + { + default: + LogPrint ("SSU state not implemented yet"); + } + } + + void SSUSession::Authenticate (uint8_t * buf, size_t len, uint8_t * aesKey, uint8_t * iv, uint8_t * macKey) + { + m_Encryption.SetKeyWithIV (aesKey, 32, iv); } SSUServer::SSUServer (boost::asio::io_service& service, int port): diff --git a/SSU.h b/SSU.h index 8bb2c6fa..073184f3 100644 --- a/SSU.h +++ b/SSU.h @@ -4,11 +4,24 @@ #include #include #include +#include +#include +#include "I2PEndian.h" namespace i2p { namespace ssu { +#pragma pack(1) + struct SSUHeader + { + uint8_t mac[16]; + uint8_t iv[16]; + uint8_t flag; + uint32_t time; + }; +#pragma pack() + const int SSU_MTU = 1484; // payload types (4 bits) @@ -38,11 +51,16 @@ namespace ssu public: SSUSession (); - void ProcessNextMessage (uint8_t * buf, std::size_t len); + void ProcessNextMessage (uint8_t * buf, size_t len); + + private: + + void Authenticate (uint8_t * buf, size_t len, uint8_t * aesKey, uint8_t * iv, uint8_t * macKey); private: SessionState m_State; + CryptoPP::CBC_Mode::Encryption m_Encryption; }; class SSUServer diff --git a/hmac.h b/hmac.h index 7b77af28..df35a142 100644 --- a/hmac.h +++ b/hmac.h @@ -19,7 +19,7 @@ namespace crypto // block size is 64 bytes { size_t totalLen = len + 64 + 32; - uint8_t * buf = new uint8_t[totalLen]; // TODO: reuse buffers + uint8_t buf[2048]; // ikeypad ((uint64_t *)buf)[0] = ((uint64_t *)key)[0] ^ IPAD; ((uint64_t *)buf)[1] = ((uint64_t *)key)[1] ^ IPAD; @@ -51,7 +51,6 @@ namespace crypto // calculate digest CryptoPP::Weak1::MD5().CalculateDigest (digest, buf, totalLen); - delete[] buf; } } }