Juan Lang : wininet: Support querying the cipher strength of an SSL connection.
Alexandre Julliard
julliard at winehq.org
Fri Oct 1 11:38:46 CDT 2010
Module: wine
Branch: master
Commit: 887aeb6a097b73165658e00313eeec8728022d8e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=887aeb6a097b73165658e00313eeec8728022d8e
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Sep 30 13:18:07 2010 -0700
wininet: Support querying the cipher strength of an SSL connection.
---
dlls/wininet/http.c | 1 +
dlls/wininet/internet.h | 1 +
dlls/wininet/netconnection.c | 22 ++++++++++++++++++++++
dlls/wininet/tests/http.c | 4 ----
4 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 992a827..a15977a 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1847,6 +1847,7 @@ static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe
CertNameToStrA(context->dwCertEncodingType,
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
info->lpszIssuerInfo, len);
+ info->dwKeySize = NETCON_GetCipherStrength(&req->netConnection);
CertFreeCertificateContext(context);
return ERROR_SUCCESS;
}
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 109179f..86b16bd 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -460,6 +460,7 @@ DWORD NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int
int *recvd /* out */);
BOOL NETCON_query_data_available(WININET_NETCONNECTION *connection, DWORD *available);
LPCVOID NETCON_GetCert(WININET_NETCONNECTION *connection);
+int NETCON_GetCipherStrength(WININET_NETCONNECTION *connection);
DWORD NETCON_set_timeout(WININET_NETCONNECTION *connection, BOOL send, int value);
int sock_get_error(int);
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index 004b213..a1c3090 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
@@ -150,6 +150,8 @@ MAKE_FUNCPTR(SSL_CTX_get_timeout);
MAKE_FUNCPTR(SSL_CTX_set_timeout);
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(X509_STORE_CTX_get_ex_data);
/* OpenSSL's libcrypto functions that we use */
@@ -427,6 +429,8 @@ DWORD NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
DYNSSL(SSL_CTX_set_timeout);
DYNSSL(SSL_CTX_set_default_verify_paths);
DYNSSL(SSL_CTX_set_verify);
+ DYNSSL(SSL_get_current_cipher);
+ DYNSSL(SSL_CIPHER_get_bits);
DYNSSL(X509_STORE_CTX_get_ex_data);
#undef DYNSSL
@@ -868,6 +872,24 @@ LPCVOID NETCON_GetCert(WININET_NETCONNECTION *connection)
#endif
}
+int NETCON_GetCipherStrength(WININET_NETCONNECTION *connection)
+{
+#ifdef SONAME_LIBSSL
+ SSL_CIPHER *cipher;
+ int bits = 0;
+
+ if (!connection->useSSL)
+ return 0;
+ cipher = pSSL_get_current_cipher(connection->ssl_s);
+ if (!cipher)
+ return 0;
+ pSSL_CIPHER_get_bits(cipher, &bits);
+ return bits;
+#else
+ return 0;
+#endif
+}
+
DWORD NETCON_set_timeout(WININET_NETCONNECTION *connection, BOOL send, int value)
{
int result;
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index d06cdf2..1236d30 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -2622,7 +2622,6 @@ static void test_secure_connection(void)
"unexpected encryption algorithm name\n");
ok(!certificate_structA->lpszProtocolName,
"unexpected protocol name\n");
- todo_wine
ok(certificate_structA->dwKeySize, "expected a non-zero key size\n");
}
HeapFree(GetProcessHeap(), 0, certificate_structA);
@@ -2653,7 +2652,6 @@ static void test_secure_connection(void)
"unexpected encryption algorithm name\n");
ok(!certificate_structA->lpszProtocolName,
"unexpected protocol name\n");
- todo_wine
ok(certificate_structA->dwKeySize, "expected a non-zero key size\n");
}
HeapFree(GetProcessHeap(), 0, certificate_structW);
@@ -2705,7 +2703,6 @@ static void test_secure_connection(void)
"unexpected encryption algorithm name\n");
ok(!certificate_structA->lpszProtocolName,
"unexpected protocol name\n");
- todo_wine
ok(certificate_structA->dwKeySize, "expected a non-zero key size\n");
}
HeapFree(GetProcessHeap(), 0, certificate_structA);
@@ -2736,7 +2733,6 @@ static void test_secure_connection(void)
"unexpected encryption algorithm name\n");
ok(!certificate_structA->lpszProtocolName,
"unexpected protocol name\n");
- todo_wine
ok(certificate_structA->dwKeySize, "expected a non-zero key size\n");
}
HeapFree(GetProcessHeap(), 0, certificate_structW);
More information about the wine-cvs
mailing list