[v2] secur32 : add and fix some algids

Max Qian public at maxqia.com
Sun Jul 3 16:41:16 CDT 2016


Signed-off-by: Max Qian <public at maxqia.com>
---
 dlls/secur32/schannel_gnutls.c | 37 +++++++++++++++++++++++++++++--------
 dlls/secur32/schannel_macosx.c |  8 ++++----
 include/wincrypt.h             |  2 ++
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c
index bcadd47..d86ca14 100644
--- a/dlls/secur32/schannel_gnutls.c
+++ b/dlls/secur32/schannel_gnutls.c
@@ -303,6 +303,10 @@ static ALG_ID schannel_get_cipher_algid(int cipher)
     case GNUTLS_CIPHER_AES_256_GCM:
     case GNUTLS_CIPHER_AES_256_CBC: return CALG_AES_256;
     case GNUTLS_CIPHER_RC2_40_CBC: return CALG_RC2;
+
+    case GNUTLS_CIPHER_CAMELLIA_128_CBC:
+    case GNUTLS_CIPHER_CAMELLIA_256_CBC:
+    case GNUTLS_CIPHER_CAMELLIA_192_CBC:
     default:
         FIXME("unknown algorithm %d\n", cipher);
         return 0;
@@ -316,10 +320,14 @@ static ALG_ID schannel_get_mac_algid(gnutls_mac_algorithm_t mac)
     case GNUTLS_MAC_UNKNOWN:
     case GNUTLS_MAC_NULL: return 0;
     case GNUTLS_MAC_MD5: return CALG_MD5;
-    case GNUTLS_MAC_SHA1:
-    case GNUTLS_MAC_SHA256:
-    case GNUTLS_MAC_SHA384:
-    case GNUTLS_MAC_SHA512: return CALG_SHA;
+    case GNUTLS_MAC_SHA1: return CALG_SHA1;
+    case GNUTLS_MAC_MD2: return CALG_MD2;
+    case GNUTLS_MAC_SHA256: return CALG_SHA_256;
+    case GNUTLS_MAC_SHA384: return CALG_SHA_384;
+    case GNUTLS_MAC_SHA512: return CALG_SHA_512;
+
+    case GNUTLS_MAC_SHA224:
+    case GNUTLS_MAC_AEAD:
     default:
         FIXME("unknown algorithm %d\n", mac);
         return 0;
@@ -330,12 +338,25 @@ static ALG_ID schannel_get_kx_algid(gnutls_kx_algorithm_t kx)
 {
     switch (kx)
     {
-        case GNUTLS_KX_RSA: return CALG_RSA_KEYX;
+        case GNUTLS_KX_UNKNOWN: return 0;
+        case GNUTLS_KX_RSA:
+        case GNUTLS_KX_RSA_EXPORT: return CALG_RSA_KEYX;
+        case GNUTLS_KX_DHE_PSK:
         case GNUTLS_KX_DHE_DSS:
         case GNUTLS_KX_DHE_RSA: return CALG_DH_EPHEM;
-    default:
-        FIXME("unknown algorithm %d\n", kx);
-        return 0;
+        case GNUTLS_KX_ANON_ECDH: return CALG_ECDH;
+        case GNUTLS_KX_ECDHE_RSA:
+        case GNUTLS_KX_ECDHE_PSK: return CALG_ECDH_EPHEM;
+        case GNUTLS_KX_ECDHE_ECDSA: return CALG_ECDSA;
+
+        case GNUTLS_KX_SRP:
+        case GNUTLS_KX_SRP_RSA:
+        case GNUTLS_KX_SRP_DSS:
+        case GNUTLS_KX_PSK:
+        case GNUTLS_KX_ANON_DH:
+        default:
+            FIXME("unknown algorithm %d\n", kx);
+            return 0;
     }
 }
 
diff --git a/dlls/secur32/schannel_macosx.c b/dlls/secur32/schannel_macosx.c
index b940881..2ed12d6 100644
--- a/dlls/secur32/schannel_macosx.c
+++ b/dlls/secur32/schannel_macosx.c
@@ -496,11 +496,12 @@ static ALG_ID schan_get_kx_algid(const struct cipher_suite* c)
     case schan_kx_DHE_RSA:          return CALG_DH_EPHEM;
     case schan_kx_ECDH_anon:
     case schan_kx_ECDH_ECDSA:
-    case schan_kx_ECDH_RSA:
+    case schan_kx_ECDH_RSA:         return CALG_ECDH;
     case schan_kx_ECDHE_ECDSA:
-    case schan_kx_ECDHE_RSA:        return CALG_ECDH;
+    case schan_kx_ECDHE_RSA:        return CALG_ECDH_EPHEM;
     case schan_kx_NULL:             return 0;
-    case schan_kx_RSA:              return CALG_RSA_KEYX;
+    case schan_kx_RSA:
+    case schan_kx_RSA_EXPORT:       return CALG_RSA_KEYX;
 
     case schan_kx_DH_anon_EXPORT:
     case schan_kx_DH_anon:
@@ -509,7 +510,6 @@ static ALG_ID schan_get_kx_algid(const struct cipher_suite* c)
     case schan_kx_DH_RSA_EXPORT:
     case schan_kx_DH_RSA:
     case schan_kx_FORTEZZA_DMS:
-    case schan_kx_RSA_EXPORT:
         FIXME("Don't know CALG for key exchange algorithm %d for cipher suite %#x, returning 0\n", c->kx_alg, (unsigned)c->suite);
         return 0;
 
diff --git a/include/wincrypt.h b/include/wincrypt.h
index 55c9509..19af6ca 100644
--- a/include/wincrypt.h
+++ b/include/wincrypt.h
@@ -1583,6 +1583,7 @@ typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
 #define ALG_SID_AGREED_KEY_ANY          3
 #define ALG_SID_KEA                     4
 #define ALG_SID_ECDH                    5
+#define ALG_SID_ECDH_EPHEM              6
 /* RC2 SIDs */
 #define ALG_SID_RC4                     1
 #define ALG_SID_RC2                     2
@@ -1639,6 +1640,7 @@ typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
 #define CALG_KEA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_KEA)
 #define CALG_HUGHES_MD5           (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY           | ALG_SID_MD5)
 #define CALG_ECDH                 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_ECDH)
+#define CALG_ECDH_EPHEM           (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_ECDH_EPHEM)
 #define CALG_RSA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)
 #define CALG_ECMQV                (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY           | ALG_SID_ECMQV)
 #define CALG_DES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_DES)
-- 
2.9.0




More information about the wine-patches mailing list