[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