Skip to content

Commit

Permalink
bpo-30102: Call OPENSSL_add_all_algorithms_noconf (python#3112)
Browse files Browse the repository at this point in the history
The ssl and hashlib modules now call OPENSSL_add_all_algorithms_noconf() on
OpenSSL < 1.1.0. The function detects CPU features and enables optimizations
on some CPU architectures such as POWER8. Patch is based on research from
Gustavo Serra Scalet.

Signed-off-by: Christian Heimes <christian@python.org>
  • Loading branch information
tiran committed Sep 5, 2017
1 parent 52451fb commit c941e62
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The ssl and hashlib modules now call OPENSSL_add_all_algorithms_noconf() on
OpenSSL < 1.1.0. The function detects CPU features and enables optimizations
on some CPU architectures such as POWER8. Patch is based on research from
Gustavo Serra Scalet.
5 changes: 4 additions & 1 deletion Modules/_hashopenssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1022,8 +1022,11 @@ PyInit__hashlib(void)
{
PyObject *m, *openssl_md_meth_names;

OpenSSL_add_all_digests();
#ifndef OPENSSL_VERSION_1_1
/* Load all digest algorithms and initialize cpuid */
OPENSSL_add_all_algorithms_noconf();
ERR_load_crypto_strings();
#endif

/* TODO build EVP_functions openssl_* entries dynamically based
* on what hashes are supported rather than listing many
Expand Down
6 changes: 5 additions & 1 deletion Modules/_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -5181,9 +5181,14 @@ PyInit__ssl(void)
return NULL;
PySocketModule = *socket_api;

#ifndef OPENSSL_VERSION_1_1
/* Load all algorithms and initialize cpuid */
OPENSSL_add_all_algorithms_noconf();
/* Init OpenSSL */
SSL_load_error_strings();
SSL_library_init();
#endif

#ifdef WITH_THREAD
#ifdef HAVE_OPENSSL_CRYPTO_LOCK
/* note that this will start threading if not already started */
Expand All @@ -5195,7 +5200,6 @@ PyInit__ssl(void)
_ssl_locks_count++;
#endif
#endif /* WITH_THREAD */
OpenSSL_add_all_algorithms();

/* Add symbols to module dict */
sslerror_type_slots[0].pfunc = PyExc_OSError;
Expand Down

0 comments on commit c941e62

Please sign in to comment.