Juan Lang : winhttp: Support querying the cipher strength of an SSL connection.
Alexandre Julliard
julliard at winehq.org
Fri Oct 1 11:38:43 CDT 2010
Module: wine
Branch: master
Commit: 4127062a3eaf9938aafc7b3c4909d3298e11a156
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4127062a3eaf9938aafc7b3c4909d3298e11a156
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Sep 29 09:54:34 2010 -0700
winhttp: Support querying the cipher strength of an SSL connection.
---
dlls/winhttp/net.c | 19 +++++++++++++++++++
dlls/winhttp/session.c | 4 ++--
dlls/winhttp/winhttp_private.h | 1 +
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c
index 4812979..7db7a66 100644
--- a/dlls/winhttp/net.c
+++ b/dlls/winhttp/net.c
@@ -124,6 +124,8 @@ MAKE_FUNCPTR( SSL_get_ex_data_X509_STORE_CTX_idx );
MAKE_FUNCPTR( SSL_get_peer_certificate );
MAKE_FUNCPTR( SSL_CTX_set_default_verify_paths );
MAKE_FUNCPTR( SSL_CTX_set_verify );
+MAKE_FUNCPTR( SSL_get_current_cipher );
+MAKE_FUNCPTR( SSL_CIPHER_get_bits );
MAKE_FUNCPTR( CRYPTO_num_locks );
MAKE_FUNCPTR( CRYPTO_set_id_callback );
@@ -464,6 +466,8 @@ BOOL netconn_init( netconn_t *conn, BOOL secure )
LOAD_FUNCPTR( SSL_get_peer_certificate );
LOAD_FUNCPTR( SSL_CTX_set_default_verify_paths );
LOAD_FUNCPTR( SSL_CTX_set_verify );
+ LOAD_FUNCPTR( SSL_get_current_cipher );
+ LOAD_FUNCPTR( SSL_CIPHER_get_bits );
#undef LOAD_FUNCPTR
#define LOAD_FUNCPTR(x) \
@@ -1067,3 +1071,18 @@ const void *netconn_get_certificate( netconn_t *conn )
return NULL;
#endif
}
+
+int netconn_get_cipher_strength( netconn_t *conn )
+{
+#ifdef SONAME_LIBSSL
+ SSL_CIPHER *cipher;
+ int bits = 0;
+
+ if (!conn->secure) return 0;
+ if (!(cipher = pSSL_get_current_cipher( conn->ssl_conn ))) return 0;
+ pSSL_CIPHER_get_bits( cipher, &bits );
+ return bits;
+#else
+ return 0;
+#endif
+}
diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c
index 7f6350f..ef4ef08 100644
--- a/dlls/winhttp/session.c
+++ b/dlls/winhttp/session.c
@@ -641,7 +641,7 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf
else
ci->lpszSignatureAlgName = NULL;
ci->lpszEncryptionAlgName = NULL;
- ci->dwKeySize = 128;
+ ci->dwKeySize = netconn_get_cipher_strength( &request->netconn );
CertFreeCertificateContext( cert );
*buflen = sizeof(*ci);
@@ -656,7 +656,7 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf
return FALSE;
}
- *(DWORD *)buffer = 128; /* FIXME */
+ *(DWORD *)buffer = netconn_get_cipher_strength( &request->netconn );
*buflen = sizeof(DWORD);
return TRUE;
}
diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h
index c2dfdbe..5da3ae1 100644
--- a/dlls/winhttp/winhttp_private.h
+++ b/dlls/winhttp/winhttp_private.h
@@ -229,6 +229,7 @@ BOOL netconn_secure_connect( netconn_t *, WCHAR * );
BOOL netconn_send( netconn_t *, const void *, size_t, int, int * );
DWORD netconn_set_timeout( netconn_t *, BOOL, int );
const void *netconn_get_certificate( netconn_t * );
+int netconn_get_cipher_strength( netconn_t * );
BOOL set_cookies( request_t *, const WCHAR * );
BOOL add_cookie_headers( request_t * );
More information about the wine-cvs
mailing list