---
 crypto_backend.h |   11 +++++++++++
 crypto_openssl.c |   11 +++++++++++
 ntlm.c           |   12 ++++--------
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/crypto_backend.h b/crypto_backend.h
index f0e7b18..6c2bd0c 100644
--- a/crypto_backend.h
+++ b/crypto_backend.h
@@ -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
diff --git a/crypto_openssl.c b/crypto_openssl.c
index 9fbbf11..3842463 100644
--- a/crypto_openssl.c
+++ b/crypto_openssl.c
@@ -441,3 +441,14 @@ key_des_fixup (uint8_t *key, int key_len, int ndc)
 }


+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 3440c12..40a11b9 100644
--- 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]);
        }


-- 
1.7.4.1


Reply via email to