1
0
mirror of https://github.com/PurpleI2P/i2pd.git synced 2025-01-22 04:04:16 +00:00

create MAC key

This commit is contained in:
orignal 2014-02-03 14:40:38 -05:00
parent 0171d3040a
commit 6f08edb32f
2 changed files with 9 additions and 5 deletions

10
SSU.cpp
View File

@ -20,7 +20,7 @@ namespace ssu
{ {
} }
void SSUSession::CreateAESKey (uint8_t * pubKey, uint8_t * aesKey) // TODO: move it to base class for NTCP and SSU void SSUSession::CreateAESandMacKey (uint8_t * pubKey, uint8_t * aesKey, uint8_t * macKey)
{ {
CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg); CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg);
CryptoPP::SecByteBlock secretKey(dh.AgreedValueLength()); CryptoPP::SecByteBlock secretKey(dh.AgreedValueLength());
@ -34,9 +34,13 @@ namespace ssu
{ {
aesKey[0] = 0; aesKey[0] = 0;
memcpy (aesKey + 1, secretKey, 31); memcpy (aesKey + 1, secretKey, 31);
memcpy (macKey, secretKey + 31, 32);
} }
else else
{
memcpy (aesKey, secretKey, 32); memcpy (aesKey, secretKey, 32);
memcpy (macKey, secretKey + 32, 32);
}
} }
void SSUSession::ProcessNextMessage (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint) void SSUSession::ProcessNextMessage (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint)
@ -172,7 +176,7 @@ namespace ssu
SSUHeader * header = (SSUHeader *)buf; SSUHeader * header = (SSUHeader *)buf;
if ((header->flag >> 4) == expectedPayloadType) if ((header->flag >> 4) == expectedPayloadType)
{ {
CreateAESKey (buf + sizeof (SSUHeader), m_SessionKey); CreateAESandMacKey (buf + sizeof (SSUHeader), m_SessionKey, m_MacKey);
return true; return true;
} }
else else

4
SSU.h
View File

@ -63,7 +63,7 @@ namespace ssu
private: private:
void CreateAESKey (uint8_t * pubKey, uint8_t * aesKey); // TODO: shouldn't be here void CreateAESandMacKey (uint8_t * pubKey, uint8_t * aesKey, uint8_t * macKey);
void ProcessSessionRequest (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint); void ProcessSessionRequest (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint);
void SendSessionRequest (); void SendSessionRequest ();
@ -83,7 +83,7 @@ namespace ssu
SessionState m_State; SessionState m_State;
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption; CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption;
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption m_Decryption; CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption m_Decryption;
uint8_t m_SessionKey[32]; uint8_t m_SessionKey[32], m_MacKey[32];
}; };
class SSUServer class SSUServer