CVS: rdesktop licence.c,1.29,1.30 secure.c,1.43,1.44
Matt Chapman <[email protected]>
| Newsgroups | gmane.network.rdesktop.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/rdesktop/rdesktop
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29067
Modified Files:
licence.c secure.c
Log Message:
Document differences between RDP encryption and SSLv3, and bring some
of the terminology in line with the SSLv3 specification.
Index: licence.c
===================================================================
RCS file: /cvsroot/rdesktop/rdesktop/licence.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** licence.c 28 Jul 2003 21:41:12 -0000 1.29
--- licence.c 16 May 2004 11:18:20 -0000 1.30
***************
*** 37,54 ****
/* Generate a session key and RC4 keys, given client and server randoms */
static void
! licence_generate_keys(uint8 * client_key, uint8 * server_key, uint8 * client_rsa)
{
! uint8 session_key[48];
! uint8 temp_hash[48];
! /* Generate session key - two rounds of sec_hash_48 */
! sec_hash_48(temp_hash, client_rsa, client_key, server_key, 65);
! sec_hash_48(session_key, temp_hash, server_key, client_key, 65);
! /* Store first 16 bytes of session key, for generating signatures */
! memcpy(g_licence_sign_key, session_key, 16);
! /* Generate RC4 key */
! sec_hash_16(g_licence_key, &session_key[16], client_key, server_key);
}
--- 37,54 ----
/* Generate a session key and RC4 keys, given client and server randoms */
static void
! licence_generate_keys(uint8 * client_random, uint8 * server_random, uint8 * pre_master_secret)
{
! uint8 master_secret[48];
! uint8 key_block[48];
! /* Generate master secret and then key material */
! sec_hash_48(master_secret, pre_master_secret, client_random, server_random, 'A');
! sec_hash_48(key_block, master_secret, server_random, client_random, 'A');
! /* Store first 16 bytes of session key as MAC secret */
! memcpy(g_licence_sign_key, key_block, 16);
! /* Generate RC4 key from next 16 bytes */
! sec_hash_16(g_licence_key, &key_block[16], client_random, server_random);
}
Index: secure.c
===================================================================
RCS file: /cvsroot/rdesktop/rdesktop/secure.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** secure.c 26 Apr 2004 13:48:39 -0000 1.43
--- secure.c 16 May 2004 11:18:20 -0000 1.44
***************
*** 62,67 ****
/*
! * General purpose 48-byte transformation, using two 32-byte salts (generally,
! * a client and server salt) and a global salt value used for padding.
* Both SHA1 and MD5 algorithms are used.
*/
--- 62,76 ----
/*
! * I believe this is based on SSLv3 with the following differences:
! * MAC algorithm (5.2.3.1) uses only 32-bit length in place of seq_num/type/length fields
! * MAC algorithm uses SHA1 and MD5 for the two hash functions instead of one or other
! * key_block algorithm (6.2.2) uses 'X', 'YY', 'ZZZ' instead of 'A', 'BB', 'CCC'
! * key_block partitioning is different (16 bytes each: MAC secret, decrypt key, encrypt key)
! * encryption/decryption keys updated every 4096 packets
! * See http://wp.netscape.com/eng/ssl3/draft302.txt
! */
!
! /*
! * 48-byte transformation used to generate master secret (6.1) and key material (6.2.2).
* Both SHA1 and MD5 algorithms are used.
*/
***************
*** 94,99 ****
/*
! * Weaker 16-byte transformation, also using two 32-byte salts, but
! * only using a single round of MD5.
*/
void
--- 103,107 ----
/*
! * 16-byte transformation used to generate export keys (6.2.2).
*/
void
***************
*** 118,143 ****
}
! /* Generate a session key and RC4 keys, given client and server randoms */
static void
! sec_generate_keys(uint8 * client_key, uint8 * server_key, int rc4_key_size)
{
! uint8 session_key[48];
! uint8 temp_hash[48];
! uint8 input[48];
! /* Construct input data to hash */
! memcpy(input, client_key, 24);
! memcpy(input + 24, server_key, 24);
! /* Generate session key - two rounds of sec_hash_48 */
! sec_hash_48(temp_hash, input, client_key, server_key, 65);
! sec_hash_48(session_key, temp_hash, client_key, server_key, 88);
! /* Store first 16 bytes of session key, for generating signatures */
! memcpy(sec_sign_key, session_key, 16);
! /* Generate RC4 keys */
! sec_hash_16(sec_decrypt_key, &session_key[16], client_key, server_key);
! sec_hash_16(sec_encrypt_key, &session_key[32], client_key, server_key);
if (rc4_key_size == 1)
--- 126,151 ----
}
! /* Generate encryption keys given client and server randoms */
static void
! sec_generate_keys(uint8 * client_random, uint8 * server_random, int rc4_key_size)
{
! uint8 pre_master_secret[48];
! uint8 master_secret[48];
! uint8 key_block[48];
! /* Construct pre-master secret */
! memcpy(pre_master_secret, client_random, 24);
! memcpy(pre_master_secret + 24, server_random, 24);
! /* Generate master secret and then key material */
! sec_hash_48(master_secret, pre_master_secret, client_random, server_random, 'A');
! sec_hash_48(key_block, master_secret, client_random, server_random, 'X');
! /* First 16 bytes of key material is MAC secret */
! memcpy(sec_sign_key, key_block, 16);
! /* Generate export keys from next two blocks of 16 bytes */
! sec_hash_16(sec_decrypt_key, &key_block[16], client_random, server_random);
! sec_hash_16(sec_encrypt_key, &key_block[32], client_random, server_random);
if (rc4_key_size == 1)
***************
*** 188,192 ****
}
! /* Generate a signature hash, using a combination of SHA1 and MD5 */
void
sec_sign(uint8 * signature, int siglen, uint8 * session_key, int keylen, uint8 * data, int datalen)
--- 196,200 ----
}
! /* Generate a MAC hash (5.2.3.1), using a combination of SHA1 and MD5 */
void
sec_sign(uint8 * signature, int siglen, uint8 * session_key, int keylen, uint8 * data, int datalen)
***************
*** 216,220 ****
}
! /* Update an encryption key - similar to the signing process */
static void
sec_update(uint8 * key, uint8 * update_key)
--- 224,228 ----
}
! /* Update an encryption key */
static void
sec_update(uint8 * key, uint8 * update_key)
-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click