Commit eb2b0c69 authored by Christian Heimes's avatar Christian Heimes Committed by GitHub

bpo-38153: detect shake independently from sha3 (GH-16143)

XOF digests (SHAKE) are not available in OpenSSL 1.1.0 but SHA3 fixed-length digests are.
Signed-off-by: default avatarChristian Heimes <christian@python.org>
parent f919054e
...@@ -34,10 +34,14 @@ ...@@ -34,10 +34,14 @@
#define MUNCH_SIZE INT_MAX #define MUNCH_SIZE INT_MAX
#if defined(NID_sha3_224) && defined(EVP_MD_FLAG_XOF) #ifdef NID_sha3_224
#define PY_OPENSSL_HAS_SHA3 1 #define PY_OPENSSL_HAS_SHA3 1
#endif #endif
#if defined(EVP_MD_FLAG_XOF) && defined(NID_shake128)
#define PY_OPENSSL_HAS_SHAKE 1
#endif
#ifdef NID_blake2b512 #ifdef NID_blake2b512
#define PY_OPENSSL_HAS_BLAKE2 1 #define PY_OPENSSL_HAS_BLAKE2 1
#endif #endif
...@@ -139,6 +143,8 @@ py_digest_name(const EVP_MD *md) ...@@ -139,6 +143,8 @@ py_digest_name(const EVP_MD *md)
case NID_sha3_512: case NID_sha3_512:
name ="sha3_512"; name ="sha3_512";
break; break;
#endif
#ifdef PY_OPENSSL_HAS_SHAKE
case NID_shake128: case NID_shake128:
name ="shake_128"; name ="shake_128";
break; break;
...@@ -177,8 +183,9 @@ py_digest_by_name(const char *name) ...@@ -177,8 +183,9 @@ py_digest_by_name(const char *name)
/* OpenSSL uses dash instead of underscore in names of some algorithms /* OpenSSL uses dash instead of underscore in names of some algorithms
* like SHA3 and SHAKE. Detect different spellings. */ * like SHA3 and SHAKE. Detect different spellings. */
if (digest == NULL) { if (digest == NULL) {
if (0) {}
#ifdef NID_sha512_224 #ifdef NID_sha512_224
if (!strcmp(name, "sha512_224") || !strcmp(name, "SHA512_224")) { else if (!strcmp(name, "sha512_224") || !strcmp(name, "SHA512_224")) {
digest = EVP_sha512_224(); digest = EVP_sha512_224();
} }
else if (!strcmp(name, "sha512_256") || !strcmp(name, "SHA512_256")) { else if (!strcmp(name, "sha512_256") || !strcmp(name, "SHA512_256")) {
...@@ -199,6 +206,8 @@ py_digest_by_name(const char *name) ...@@ -199,6 +206,8 @@ py_digest_by_name(const char *name)
else if (!strcmp(name, "sha3_512")) { else if (!strcmp(name, "sha3_512")) {
digest = EVP_sha3_512(); digest = EVP_sha3_512();
} }
#endif
#ifdef PY_OPENSSL_HAS_SHAKE
else if (!strcmp(name, "shake_128")) { else if (!strcmp(name, "shake_128")) {
digest = EVP_shake128(); digest = EVP_shake128();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment