Also invent OPENSSL_NO_ENTROPY_FALLBACK as it uses SHA512.
Signed-off-by: Joakim Tjernlund <[email protected]>
---
crypto/compat/getentropy_linux.c | 10 ++++++++++
ssl/s3_cbc.c | 5 ++++-
ssl/ssl_algs.c | 2 ++
ssl/t1_lib.c | 2 ++
4 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/crypto/compat/getentropy_linux.c b/crypto/compat/getentropy_linux.c
index b9312ae..be8a265 100644
--- a/crypto/compat/getentropy_linux.c
+++ b/crypto/compat/getentropy_linux.c
@@ -79,8 +79,11 @@ static int getentropy_urandom(void *buf, size_t len);
#ifdef SYS__sysctl
static int getentropy_sysctl(void *buf, size_t len);
#endif
+
+#ifndef OPENSSL_NO_ENTROPY_FALLBACK
static int getentropy_fallback(void *buf, size_t len);
static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data);
+#endif
int
getentropy(void *buf, size_t len)
@@ -160,7 +163,10 @@ getentropy(void *buf, size_t len)
#ifdef FAIL_INSTEAD_OF_TRYING_FALLBACK
raise(SIGKILL);
#endif
+ ret = -1;
+#ifndef OPENSSL_NO_ENTROPY_FALLBACK
ret = getentropy_fallback(buf, len);
+#endif
if (ret != -1)
return (ret);
@@ -296,6 +302,7 @@ sysctlfailed:
}
#endif /* SYS__sysctl */
+#ifndef OPENSSL_NO_ENTROPY_FALLBACK
static int cl[] = {
CLOCK_REALTIME,
#ifdef CLOCK_MONOTONIC
@@ -320,7 +327,9 @@ static int cl[] = {
CLOCK_THREAD_CPUTIME_ID,
#endif
};
+#endif
+#ifndef OPENSSL_NO_ENTROPY_FALLBACK
static int
getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data)
{
@@ -542,3 +551,4 @@ getentropy_fallback(void *buf, size_t len)
errno = EIO;
return -1;
}
+#endif
diff --git a/ssl/s3_cbc.c b/ssl/s3_cbc.c
index 983ac94..5b41722 100644
--- a/ssl/s3_cbc.c
+++ b/ssl/s3_cbc.c
@@ -366,6 +366,7 @@ tls1_sha256_final_raw(void* ctx, unsigned char *md_out)
#undef LARGEST_DIGEST_CTX
#define LARGEST_DIGEST_CTX SHA256_CTX
+#ifndef OPENSSL_NO_SHA512
static void
tls1_sha512_final_raw(void* ctx, unsigned char *md_out)
{
@@ -378,7 +379,7 @@ tls1_sha512_final_raw(void* ctx, unsigned char *md_out)
}
#undef LARGEST_DIGEST_CTX
#define LARGEST_DIGEST_CTX SHA512_CTX
-
+#endif
/* ssl3_cbc_record_digest_supported returns 1 iff |ctx| uses a hash function
* which ssl3_cbc_digest_record supports. */
char
@@ -475,6 +476,7 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned
char* md_out,
md_transform = (void(*)(void *ctx, const unsigned char *block))
SHA256_Transform;
md_size = 32;
break;
+#ifndef OPENSSL_NO_SHA512
case NID_sha384:
SHA384_Init((SHA512_CTX*)md_state.c);
md_final_raw = tls1_sha512_final_raw;
@@ -491,6 +493,7 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned
char* md_out,
md_block_size = 128;
md_length_size = 16;
break;
+#endif
default:
/* ssl3_cbc_record_digest_supported should have been
* called first to check that the hash function is
diff --git a/ssl/ssl_algs.c b/ssl/ssl_algs.c
index 935a58e..04010a8 100644
--- a/ssl/ssl_algs.c
+++ b/ssl/ssl_algs.c
@@ -105,8 +105,10 @@ SSL_library_init(void)
EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA);
EVP_add_digest(EVP_sha224());
EVP_add_digest(EVP_sha256());
+#ifndef OPENSSL_NO_SHA512
EVP_add_digest(EVP_sha384());
EVP_add_digest(EVP_sha512());
+#endif
EVP_add_digest(EVP_dss1()); /* DSA with sha1 */
EVP_add_digest_alias(SN_dsaWithSHA1, SN_dsaWithSHA1_2);
EVP_add_digest_alias(SN_dsaWithSHA1, "DSS1");
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c
index 5bd6465..d336473 100644
--- a/ssl/t1_lib.c
+++ b/ssl/t1_lib.c
@@ -2019,10 +2019,12 @@ tls12_get_hash(unsigned char hash_alg)
return EVP_sha224();
case TLSEXT_hash_sha256:
return EVP_sha256();
+#ifndef OPENSSL_NO_SHA512
case TLSEXT_hash_sha384:
return EVP_sha384();
case TLSEXT_hash_sha512:
return EVP_sha512();
+#endif
default:
return NULL;
}
--
1.8.5.5