]> granicus.if.org Git - curl/commitdiff
ntlm_core: Use own odd parity function when crypto engine doesn't have one
authorSteve Holme <steve_holme@hotmail.com>
Wed, 28 Jan 2015 20:59:27 +0000 (20:59 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Wed, 28 Jan 2015 22:34:53 +0000 (22:34 +0000)
lib/curl_ntlm_core.c

index 620049256c3cedc36bd575655a0664a667066c41..1bdc82312e7b1291085d084af5fbe92b2b551911 100644 (file)
 #include "curl_hmac.h"
 #include "warnless.h"
 #include "curl_endian.h"
+#include "curl_des.h"
 
 #define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
@@ -147,7 +148,11 @@ static void setup_des_key(const unsigned char *key_56,
   extend_key_56_to_64(key_56, (char *) key);
 
   /* Set the key parity to odd */
+#if defined(HAVE_BORINGSSL)
+  Curl_des_set_odd_parity((unsigned char *) &key, sizeof(key));
+#else
   DES_set_odd_parity(&key);
+#endif
 
   /* Set the key */
   DES_set_key(&key, ks);
@@ -163,6 +168,9 @@ static void setup_des_key(const unsigned char *key_56,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
   /* Set the key */
   des_set_key(des, (const uint8_t *) key);
 }
@@ -180,6 +188,9 @@ static void setup_des_key(const unsigned char *key_56,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
   /* Set the key */
   gcry_cipher_setkey(*des, key, sizeof(key));
 }
@@ -212,6 +223,9 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
   /* Import the key */
   key_item.data = (unsigned char *)key;
   key_item.len = sizeof(key);
@@ -258,6 +272,9 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
   /* Perform the encryption */
   err = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionECBMode, key,
                 kCCKeySizeDES, NULL, in, 8 /* inbuflen */, out,
@@ -281,6 +298,9 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, ctl.Crypto_Key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) ctl.Crypto_Key, ctl.Data_Len);
+
   /* Perform the encryption */
   _CIPHER((_SPCPTR *) &out, &ctl, (_SPCPTR *) &in);
 
@@ -316,6 +336,9 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, blob.key);
 
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) blob.key, sizeof(blob.key));
+
   /* Import the key */
   if(!CryptImportKey(hprov, (BYTE *) &blob, sizeof(blob), 0, 0, &hkey)) {
     CryptReleaseContext(hprov, 0);