tls 1.2 and RSA_WITH_AES_256_CBC_SHA256

This commit is contained in:
orignal 2015-02-18 10:28:29 -05:00
parent 29d118a19a
commit dce8cf1af2

View File

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