[v3] secur32 : add and fix some algids

Max Qian public at maxqia.com
Tue Jul 5 18:51:41 CDT 2016


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

diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c
index bcadd47..0ec2115 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;
@@ -315,11 +319,15 @@ 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_MD2: return CALG_MD2;
     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_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:
+        case GNUTLS_KX_ECDHE_RSA:
+        case GNUTLS_KX_ECDHE_PSK: return CALG_ECDH;
+        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..fdfa48e 100644
--- a/dlls/secur32/schannel_macosx.c
+++ b/dlls/secur32/schannel_macosx.c
@@ -500,7 +500,8 @@ static ALG_ID schan_get_kx_algid(const struct cipher_suite* c)
     case schan_kx_ECDHE_ECDSA:
     case schan_kx_ECDHE_RSA:        return CALG_ECDH;
     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..b6c247a 100644
--- a/include/wincrypt.h
+++ b/include/wincrypt.h
@@ -1639,6 +1639,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)
+/* MSDN mentions CALG_ECDH_EPHEM, but doesn't appear in the Windows SDK, see https://github.com/retep998/winapi-rs/issues/287 */
 #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