SSUHeader and authenticate added

This commit is contained in:
orignal 2014-01-27 16:52:17 -05:00
parent 27426a6023
commit 8d4b98c83a
3 changed files with 30 additions and 3 deletions

10
SSU.cpp
View File

@ -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):

20
SSU.h
View File

@ -4,11 +4,24 @@
#include <inttypes.h>
#include <map>
#include <boost/asio.hpp>
#include <cryptopp/modes.h>
#include <cryptopp/aes.h>
#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<CryptoPP::AES>::Encryption m_Encryption;
};
class SSUServer

3
hmac.h
View File

@ -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;
}
}
}