X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=secure.c;h=51e5f84c22062d965d3f6ea21a87ba34abd93049;hp=7c90ee262538055b270f697b0c4d33008b473a64;hb=132e47e292eea211b9ab0ba2f835cb7f41197ada;hpb=a521f01158c829ca8f5ce87f81b85f9aa50db4dd diff --git a/secure.c b/secure.c index 7c90ee2..51e5f84 100644 --- a/secure.c +++ b/secure.c @@ -156,6 +156,19 @@ sec_generate_keys(uint8 * client_key, uint8 * server_key, int rc4_key_size) /* Initialise RC4 state arrays */ RC4_set_key(&rc4_decrypt_key, rc4_key_len, sec_decrypt_key); RC4_set_key(&rc4_encrypt_key, rc4_key_len, sec_encrypt_key); + + { + int i; + printf("sec_decrypt_key: "); + for (i = 0; i < 16; ++i) + printf("0x%02x ", sec_decrypt_key[i]); + printf("\n"); + + printf("sec_encrypt_key: "); + for (i = 0; i < 16; ++i) + printf("0x%02x ", sec_encrypt_key[i]); + printf("\n"); + } } static uint8 pad_54[40] = { @@ -246,12 +259,12 @@ sec_encrypt(uint8 * data, int length) if (use_count == 4096) { - sec_update(sec_encrypt_key, sec_encrypt_update_key); - RC4_set_key(&rc4_encrypt_key, rc4_key_len, sec_encrypt_key); + sec_update(sec_decrypt_key, sec_decrypt_update_key); + RC4_set_key(&rc4_decrypt_key, rc4_key_len, sec_decrypt_key); use_count = 0; } - RC4(&rc4_encrypt_key, length, data, data); + RC4(&rc4_decrypt_key, length, data, data); use_count++; } @@ -263,12 +276,12 @@ sec_decrypt(uint8 * data, int length) if (use_count == 4096) { - sec_update(sec_decrypt_key, sec_decrypt_update_key); - RC4_set_key(&rc4_decrypt_key, rc4_key_len, sec_decrypt_key); + sec_update(sec_encrypt_key, sec_encrypt_update_key); + RC4_set_key(&rc4_encrypt_key, rc4_key_len, sec_encrypt_key); use_count = 0; } - RC4(&rc4_decrypt_key, length, data, data); + RC4(&rc4_encrypt_key, length, data, data); use_count++; } @@ -715,6 +728,8 @@ sec_process_mcs_data(STREAM s) } } +extern unsigned char cacert[]; + /* Receive secure transport packet */ STREAM sec_recv(void) @@ -777,6 +792,10 @@ sec_recv(void) printf("0x%x ", inr[i + SEC_RANDOM_SIZE]); } printf("\n"); + + // now we can generate the keys + sec_generate_keys(inr + SEC_RANDOM_SIZE, cacert, 8); + continue; } }