mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2024-11-17 21:26:04 +00:00
tls 1.2 and RSA_WITH_AES_256_CBC_SHA256
This commit is contained in:
parent
29d118a19a
commit
dce8cf1af2
40
Reseed.cpp
40
Reseed.cpp
@ -504,40 +504,42 @@ namespace data
|
|||||||
static uint8_t clientHello[] =
|
static uint8_t clientHello[] =
|
||||||
{
|
{
|
||||||
0x16, // handshake
|
0x16, // handshake
|
||||||
0x03, 0x02, // version (TSL 1.2)
|
0x03, 0x03, // version (TSL 1.2)
|
||||||
0x00, 0x2F, // length of handshake
|
0x00, 0x31, // length of handshake
|
||||||
// handshake
|
// handshake
|
||||||
0x01, // handshake type (client hello)
|
0x01, // handshake type (client hello)
|
||||||
0x00, 0x00, 0x2B, // length of handshake payload
|
0x00, 0x00, 0x2D, // length of handshake payload
|
||||||
// client hello
|
// client hello
|
||||||
0x03, 0x02, // highest version supported (TSL 1.2)
|
0x03, 0x03, // highest version supported (TSL 1.2)
|
||||||
0x01, 0x01, 0x01, 0x01, // date, can be anything
|
0x45, 0xFA, 0x01, 0x19, 0x74, 0x55, 0x18, 0x36,
|
||||||
0x74, 0x55, 0x18, 0x36, 0x42, 0x05, 0xC1, 0xDD, 0x4A, 0x21, 0x80, 0x80, 0xEC, 0x37,
|
0x42, 0x05, 0xC1, 0xDD, 0x4A, 0x21, 0x80, 0x80,
|
||||||
0x11, 0x93, 0x16, 0xF4, 0x66, 0x00, 0x12, 0x67, 0xAB, 0xBA, 0xFF, 0x29, 0x13, 0x9E, // 28 random bytes
|
0xEC, 0x37, 0x11, 0x93, 0x16, 0xF4, 0x66, 0x00,
|
||||||
|
0x12, 0x67, 0xAB, 0xBA, 0xFF, 0x29, 0x13, 0x9E, // 32 random bytes
|
||||||
0x00, // session id length
|
0x00, // session id length
|
||||||
0x00, 0x04, // chiper suites length
|
0x00, 0x04, // chiper suites length
|
||||||
0x00, 0x00, // NULL_WITH_NULL_NULL
|
0x00, 0x00, // NULL_WITH_NULL_NULL
|
||||||
0x00, 0x35, // RSA_WITH_AES_256_CBC_SHA
|
0x00, 0x3D, // RSA_WITH_AES_256_CBC_SHA256
|
||||||
0x01, // compression methods length
|
0x01, // compression methods length
|
||||||
0x00 // no compression
|
0x00, // no compression
|
||||||
|
0x00, 0x00 // extensions length
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t clientKeyExchange[] =
|
static uint8_t clientKeyExchange[] =
|
||||||
{
|
{
|
||||||
0x16, // handshake
|
0x16, // handshake
|
||||||
0x03, 0x02, // version (TSL 1.2)
|
0x03, 0x03, // version (TSL 1.2)
|
||||||
0x02, 0x04, // length of handshake
|
0x01, 0x04, // length of handshake
|
||||||
// handshake
|
// handshake
|
||||||
0x10, // handshake type (client key exchange)
|
0x10, // handshake type (client key exchange)
|
||||||
0x00, 0x02, 0x00, // length of handshake payload
|
0x00, 0x01, 0x00, // length of handshake payload
|
||||||
// client key exchange RSA
|
// client key exchange RSA
|
||||||
// 512 RSA encrypted 48 bytes ( 2 bytes version + 46 random bytes)
|
// 256 RSA encrypted 48 bytes ( 2 bytes version + 46 random bytes)
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t finished[] =
|
static uint8_t finished[] =
|
||||||
{
|
{
|
||||||
0x16, // handshake
|
0x16, // handshake
|
||||||
0x03, 0x02, // version (TSL 1.2)
|
0x03, 0x03, // version (TSL 1.2)
|
||||||
0x00, 0x10, // length of handshake
|
0x00, 0x10, // length of handshake
|
||||||
// handshake
|
// handshake
|
||||||
0x14, // handshake type (finished)
|
0x14, // handshake type (finished)
|
||||||
@ -615,15 +617,15 @@ namespace data
|
|||||||
CryptoPP::AutoSeededRandomPool rnd;
|
CryptoPP::AutoSeededRandomPool rnd;
|
||||||
CryptoPP::RSAES_PKCS1v15_Encryptor encryptor(publicKey);
|
CryptoPP::RSAES_PKCS1v15_Encryptor encryptor(publicKey);
|
||||||
// encryptor.CiphertextLength (48);
|
// encryptor.CiphertextLength (48);
|
||||||
uint8_t secret[48], encrypted[512];
|
uint8_t secret[48], encrypted[256];
|
||||||
secret[0] = clientKeyExchange[1]; secret[1] = clientKeyExchange[2]; // version
|
secret[0] = clientKeyExchange[1]; secret[1] = clientKeyExchange[2]; // version
|
||||||
rnd.GenerateBlock (secret + 2, 46); // 46 random bytes
|
rnd.GenerateBlock (secret + 2, 46); // 46 random bytes
|
||||||
encryptor.Encrypt (rnd, secret, 48, encrypted);
|
encryptor.Encrypt (rnd, secret, 48, encrypted);
|
||||||
// send ClientKeyExchange
|
// send ClientKeyExchange
|
||||||
site.write ((char *)clientKeyExchange, sizeof (clientKeyExchange));
|
site.write ((char *)clientKeyExchange, sizeof (clientKeyExchange));
|
||||||
site.write ((char *)encrypted, 512);
|
site.write ((char *)encrypted, 256);
|
||||||
finishedHash.Update (clientKeyExchange, sizeof (clientKeyExchange));
|
finishedHash.Update (clientKeyExchange, sizeof (clientKeyExchange));
|
||||||
finishedHash.Update (encrypted, 512);
|
finishedHash.Update (encrypted, 256);
|
||||||
uint8_t masterSecret[48], random[64];
|
uint8_t masterSecret[48], random[64];
|
||||||
memcpy (random, clientHello + 11, 32);
|
memcpy (random, clientHello + 11, 32);
|
||||||
memcpy (random + 32, serverRandom, 32);
|
memcpy (random + 32, serverRandom, 32);
|
||||||
@ -647,8 +649,8 @@ namespace data
|
|||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint8_t clientMACKey[20];
|
uint8_t clientMACKey[32];
|
||||||
uint8_t serverMACKey[20];
|
uint8_t serverMACKey[32];
|
||||||
uint8_t clientKey[32];
|
uint8_t clientKey[32];
|
||||||
uint8_t serverKey[32];
|
uint8_t serverKey[32];
|
||||||
} keys;
|
} keys;
|
||||||
|
Loading…
Reference in New Issue
Block a user