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:
parent
0171d3040a
commit
6f08edb32f
10
SSU.cpp
10
SSU.cpp
@ -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
4
SSU.h
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user