Module: wine Branch: master Commit: 39b467da61eb95c6c50a70b14471c6c450f0e7a5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=39b467da61eb95c6c50a70b144...
Author: Ken Thomases ken@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@codeweavers.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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,