From a521f01158c829ca8f5ce87f81b85f9aa50db4dd Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 5 Feb 2005 20:46:53 +0000 Subject: [PATCH] Decrypt the client random (although not without Valgrind hits from OpenSSL...) --- mcs.c | 4 +++- secure.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mcs.c b/mcs.c index 6e13770..e771a07 100644 --- a/mcs.c +++ b/mcs.c @@ -395,10 +395,12 @@ mcs_send_connect_response() // this is a good time to load our private key :-) { unsigned char *buf = (unsigned char *)malloc(1024); - unsigned char *ptr = buf; + const unsigned char *ptr = buf; memcpy(buf, private_key, sizeof(private_key)); privkey = d2i_RSAPrivateKey(NULL, &ptr, sizeof(private_key)); free(buf); + + printf("Loaded private key (%u bytes)\n", sizeof(private_key)); } } diff --git a/secure.c b/secure.c index 10fc916..7c90ee2 100644 --- a/secure.c +++ b/secure.c @@ -752,6 +752,8 @@ sec_recv(void) if (sec_flags & SEC_CLIENT_RANDOM) { uint32 length; + uint8 inr[SEC_MODULUS_SIZE]; + int i; printf("Receiving the client random!\n"); in_uint32_le(s, length); @@ -763,6 +765,18 @@ sec_recv(void) if (!s_check_end(s)) { error("Junk after client random\n"); } + + reverse(sec_crypted_random, SEC_MODULUS_SIZE); + + RSA_private_decrypt(SEC_MODULUS_SIZE, sec_crypted_random, inr, privkey, RSA_NO_PADDING); + + reverse(inr + SEC_RANDOM_SIZE, SEC_RANDOM_SIZE); + + printf("Unencrypted client random: "); + for (i = 0; i < SEC_RANDOM_SIZE; ++i) { + printf("0x%x ", inr[i + SEC_RANDOM_SIZE]); + } + printf("\n"); } } -- 2.39.2