]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Refactored NTLM DES key generation
authorAdriaan de Jong <dejong@fox-it.com>
Thu, 23 Jun 2011 13:03:09 +0000 (15:03 +0200)
committerDavid Sommerseth <davids@redhat.com>
Wed, 19 Oct 2011 20:09:54 +0000 (22:09 +0200)
Signed-off-by: Adriaan de Jong <dejong@fox-it.com>
Acked-by: David Sommerseth <davids@redhat.com>
Signed-off-by: David Sommerseth <davids@redhat.com>
crypto_backend.h
crypto_openssl.c
ntlm.c

index f0e7b181d1c01479f0a86dd088c4c496498900c9..6c2bd0c418d196d7e0fcf0e0c8f26e1a0f766002 100644 (file)
@@ -126,6 +126,17 @@ bool key_des_check (uint8_t *key, int key_len, int ndc);
  */
 void key_des_fixup (uint8_t *key, int key_len, int ndc);
 
+/**
+ * Encrypt the given block, using DES ECB mode
+ *
+ * @param key          DES key to use.
+ * @param src          Buffer containing the 8-byte source.
+ * @param dst          Buffer containing the 8-byte destination
+ */
+void cipher_des_encrypt_ecb (const unsigned char key[8],
+    unsigned char src[8],
+    unsigned char dst[8]);
+
 /*
  *
  * Generic cipher key type functions
index c0f36439f16974e83133be849bc5f238423e70a1..a3e3a62cc36339efdecb6fd2f4e414209231fd5b 100644 (file)
@@ -439,3 +439,15 @@ key_des_fixup (uint8_t *key, int key_len, int ndc)
       DES_set_odd_parity (dc);
     }
 }
+
+
+void
+cipher_des_encrypt_ecb (const unsigned char key[8],
+    unsigned char *src,
+    unsigned char *dst)
+{
+    des_key_schedule sched;
+
+    des_set_key_unchecked((des_cblock*)key, sched);
+    des_ecb_encrypt((des_cblock *)src, (des_cblock *)dst, sched, DES_ENCRYPT);
+}
diff --git a/ntlm.c b/ntlm.c
index 3440c12506d7c9a921c3eedb06c0156738a0ba14..40a11b9c382bd285a109d579d31d744963c42b1b 100644 (file)
--- a/ntlm.c
+++ b/ntlm.c
@@ -196,8 +196,6 @@ ntlm_phase_3 (const struct http_proxy_info *p, const char *phase_2, struct gc_ar
   char md4_hash[21];
   char challenge[8], ntlm_response[24];
   int i, ret_val;
-  des_cblock key1, key2, key3;
-  des_key_schedule sched1, sched2, sched3;
 
        char ntlmv2_response[144];
        char userdomain_u[256]; /* for uppercase unicode username and domain */
@@ -303,18 +301,16 @@ ntlm_phase_3 (const struct http_proxy_info *p, const char *phase_2, struct gc_ar
                memcpy(ntlmv2_response, ntlmv2_hmacmd5, 16); /* Note: This overwrites challenge previously written at ntlmv2_response[8..15] */
        
        } else { /* Generate NTLM response */
+               unsigned char key1[8], key2[8], key3[8];
 
                create_des_keys ((unsigned char *)md4_hash, key1);
-               des_set_key_unchecked ((des_cblock *)key1, sched1);
-               des_ecb_encrypt ((des_cblock *)challenge, (des_cblock *)ntlm_response, sched1, DES_ENCRYPT);
+               cipher_des_encrypt_ecb (key1, challenge, ntlm_response);
 
                create_des_keys ((unsigned char *)&(md4_hash[7]), key2);
-               des_set_key_unchecked ((des_cblock *)key2, sched2);
-               des_ecb_encrypt ((des_cblock *)challenge, (des_cblock *)&(ntlm_response[8]), sched2, DES_ENCRYPT);
+               cipher_des_encrypt_ecb (key2, challenge, &ntlm_response[8]);
 
                create_des_keys ((unsigned char *)&(md4_hash[14]), key3);
-               des_set_key_unchecked ((des_cblock *)key3, sched3);
-               des_ecb_encrypt ((des_cblock *)challenge, (des_cblock *)&(ntlm_response[16]), sched3, DES_ENCRYPT);
+               cipher_des_encrypt_ecb (key3, challenge, &ntlm_response[16]);
        }