Ken Thomases : secur32: Implement schan_imp_get_key_signature_algorithm() for macOS.
Alexandre Julliard
julliard at winehq.org
Thu Apr 27 15:49:11 CDT 2017
Module: wine
Branch: master
Commit: 39b467da61eb95c6c50a70b14471c6c450f0e7a5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=39b467da61eb95c6c50a70b14471c6c450f0e7a5
Author: Ken Thomases <ken at codeweavers.com>
Date: Thu Apr 27 14:43:35 2017 -0500
secur32: Implement schan_imp_get_key_signature_algorithm() for macOS.
Signed-off-by: Ken Thomases <ken at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/secur32/schannel_macosx.c | 60 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/dlls/secur32/schannel_macosx.c b/dlls/secur32/schannel_macosx.c
index f397291..7f38133 100644
--- a/dlls/secur32/schannel_macosx.c
+++ b/dlls/secur32/schannel_macosx.c
@@ -916,8 +916,64 @@ unsigned int schan_imp_get_max_message_size(schan_imp_session session)
ALG_ID schan_imp_get_key_signature_algorithm(schan_imp_session session)
{
- FIXME("(%p)\n", session);
- return 0;
+ struct mac_session* s = (struct mac_session*)session;
+ SSLCipherSuite cipherSuite;
+ const struct cipher_suite* c;
+ int status;
+
+ TRACE("(%p/%p)\n", s, s->context);
+
+ status = SSLGetNegotiatedCipher(s->context, &cipherSuite);
+ if (status != noErr)
+ {
+ ERR("Failed to get session cipher suite: %d\n", status);
+ return 0;
+ }
+
+ c = get_cipher_suite(cipherSuite);
+ if (!c)
+ {
+ ERR("Unknown session cipher suite: %#x\n", (unsigned int)cipherSuite);
+ return 0;
+ }
+
+ switch (c->kx_alg)
+ {
+ case schan_kx_DH_DSS_EXPORT:
+ case schan_kx_DH_DSS:
+ case schan_kx_DHE_DSS_EXPORT:
+ case schan_kx_DHE_DSS:
+ return CALG_DSS_SIGN;
+
+ case schan_kx_DH_RSA_EXPORT:
+ case schan_kx_DH_RSA:
+ case schan_kx_DHE_RSA_EXPORT:
+ case schan_kx_DHE_RSA:
+ case schan_kx_ECDH_RSA:
+ case schan_kx_ECDHE_RSA:
+ case schan_kx_RSA_EXPORT:
+ case schan_kx_RSA:
+ return CALG_RSA_SIGN;
+
+ case schan_kx_ECDH_ECDSA:
+ case schan_kx_ECDHE_ECDSA:
+ return CALG_ECDSA;
+
+ case schan_kx_DH_anon_EXPORT:
+ case schan_kx_DH_anon:
+ case schan_kx_DHE_PSK:
+ case schan_kx_ECDH_anon:
+ case schan_kx_FORTEZZA_DMS:
+ case schan_kx_NULL:
+ case schan_kx_PSK:
+ case schan_kx_RSA_PSK:
+ FIXME("Don't know key signature algorithm for key exchange algorithm %d, returning 0\n", c->kx_alg);
+ return 0;
+
+ default:
+ FIXME("Unknown key exchange algorithm %d for cipher suite %#x, returning 0\n", c->kx_alg, (unsigned int)c->suite);
+ return 0;
+ }
}
SECURITY_STATUS schan_imp_get_connection_info(schan_imp_session session,
More information about the wine-cvs
mailing list