Skip to content

Commit

Permalink
Build OpenSSL with threading support.
Browse files Browse the repository at this point in the history
This allows OpenSSL to be used in multi-threaded enclaves.

- Remove no-threads configuration option.
- Implement pthread_atfork API which is used by OpenSSL
  initialization only if OPENSSL_INIT_ATFORK option is
  used to initialize OpenSSL. Enclaves don't support forking.
- Implement pthread_create API so that threads_test passes.

Signed-off-by: Anand Krishnamoorthi <[email protected]>
  • Loading branch information
anakrish committed Oct 29, 2021
1 parent 7399436 commit b475c8d
Show file tree
Hide file tree
Showing 9 changed files with 612 additions and 111 deletions.
203 changes: 103 additions & 100 deletions 3rdparty/openssl/include/opensslconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* WARNING: do not edit!
* Generated by Makefile from openssl/include/openssl/opensslconf.h.in
*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
Expand All @@ -12,190 +12,193 @@

#include <openssl/opensslv.h>

#ifdef __cplusplus
extern "C" {
#ifdef __cplusplus
extern "C"
{
#endif

#ifdef OPENSSL_ALGORITHM_DEFINES
# error OPENSSL_ALGORITHM_DEFINES no longer supported
#error OPENSSL_ALGORITHM_DEFINES no longer supported
#endif

/*
* OpenSSL was configured with the following options:
*/
/*
* OpenSSL was configured with the following options:
*/

#ifndef OPENSSL_NO_ARIA
# define OPENSSL_NO_ARIA
#define OPENSSL_NO_ARIA
#endif
#ifndef OPENSSL_NO_BF
# define OPENSSL_NO_BF
#define OPENSSL_NO_BF
#endif
#ifndef OPENSSL_NO_BLAKE2
# define OPENSSL_NO_BLAKE2
#define OPENSSL_NO_BLAKE2
#endif
#ifndef OPENSSL_NO_CAMELLIA
# define OPENSSL_NO_CAMELLIA
#define OPENSSL_NO_CAMELLIA
#endif
#ifndef OPENSSL_NO_CAST
# define OPENSSL_NO_CAST
#define OPENSSL_NO_CAST
#endif
#ifndef OPENSSL_NO_CHACHA
# define OPENSSL_NO_CHACHA
#define OPENSSL_NO_CHACHA
#endif
#ifndef OPENSSL_NO_CMS
# define OPENSSL_NO_CMS
#define OPENSSL_NO_CMS
#endif
#ifndef OPENSSL_NO_CT
# define OPENSSL_NO_CT
#define OPENSSL_NO_CT
#endif
#ifndef OPENSSL_NO_IDEA
# define OPENSSL_NO_IDEA
#define OPENSSL_NO_IDEA
#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_MD4
# define OPENSSL_NO_MD4
#define OPENSSL_NO_MD4
#endif
#ifndef OPENSSL_NO_MDC2
# define OPENSSL_NO_MDC2
#define OPENSSL_NO_MDC2
#endif
#ifndef OPENSSL_NO_POLY1305
# define OPENSSL_NO_POLY1305
#define OPENSSL_NO_POLY1305
#endif
#ifndef OPENSSL_NO_RC4
# define OPENSSL_NO_RC4
#define OPENSSL_NO_RC4
#endif
#ifndef OPENSSL_NO_RC5
# define OPENSSL_NO_RC5
#define OPENSSL_NO_RC5
#endif
#ifndef OPENSSL_NO_RMD160
# define OPENSSL_NO_RMD160
#define OPENSSL_NO_RMD160
#endif
#ifndef OPENSSL_NO_SEED
# define OPENSSL_NO_SEED
#define OPENSSL_NO_SEED
#endif
#ifndef OPENSSL_NO_SIPHASH
# define OPENSSL_NO_SIPHASH
#define OPENSSL_NO_SIPHASH
#endif
#ifndef OPENSSL_NO_SM2
# define OPENSSL_NO_SM2
#define OPENSSL_NO_SM2
#endif
#ifndef OPENSSL_NO_SM3
# define OPENSSL_NO_SM3
#define OPENSSL_NO_SM3
#endif
#ifndef OPENSSL_NO_SM4
# define OPENSSL_NO_SM4
#define OPENSSL_NO_SM4
#endif
#ifndef OPENSSL_NO_SRP
# define OPENSSL_NO_SRP
#define OPENSSL_NO_SRP
#endif
#ifndef OPENSSL_NO_WHIRLPOOL
# define OPENSSL_NO_WHIRLPOOL
#define OPENSSL_NO_WHIRLPOOL
#endif
#ifndef OPENSSL_THREADS
#define OPENSSL_THREADS
#endif
#ifndef OPENSSL_RAND_SEED_NONE
# define OPENSSL_RAND_SEED_NONE
#define OPENSSL_RAND_SEED_NONE
#endif
#ifndef OPENSSL_NO_AFALGENG
# define OPENSSL_NO_AFALGENG
#define OPENSSL_NO_AFALGENG
#endif
#ifndef OPENSSL_NO_ASAN
# define OPENSSL_NO_ASAN
#define OPENSSL_NO_ASAN
#endif
#ifndef OPENSSL_NO_AUTOERRINIT
# define OPENSSL_NO_AUTOERRINIT
#define OPENSSL_NO_AUTOERRINIT
#endif
#ifndef OPENSSL_NO_AUTOLOAD_CONFIG
# define OPENSSL_NO_AUTOLOAD_CONFIG
#define OPENSSL_NO_AUTOLOAD_CONFIG
#endif
#ifndef OPENSSL_NO_CAPIENG
# define OPENSSL_NO_CAPIENG
#define OPENSSL_NO_CAPIENG
#endif
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
# define OPENSSL_NO_CRYPTO_MDEBUG
#define OPENSSL_NO_CRYPTO_MDEBUG
#endif
#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
#define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
#endif
#ifndef OPENSSL_NO_DEVCRYPTOENG
# define OPENSSL_NO_DEVCRYPTOENG
#define OPENSSL_NO_DEVCRYPTOENG
#endif
#ifndef OPENSSL_NO_DSO
# define OPENSSL_NO_DSO
#define OPENSSL_NO_DSO
#endif
#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
# define OPENSSL_NO_EC_NISTP_64_GCC_128
#define OPENSSL_NO_EC_NISTP_64_GCC_128
#endif
#ifndef OPENSSL_NO_EGD
# define OPENSSL_NO_EGD
#define OPENSSL_NO_EGD
#endif
#ifndef OPENSSL_NO_EXTERNAL_TESTS
# define OPENSSL_NO_EXTERNAL_TESTS
#define OPENSSL_NO_EXTERNAL_TESTS
#endif
#ifndef OPENSSL_NO_FUZZ_AFL
# define OPENSSL_NO_FUZZ_AFL
#define OPENSSL_NO_FUZZ_AFL
#endif
#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
# define OPENSSL_NO_FUZZ_LIBFUZZER
#define OPENSSL_NO_FUZZ_LIBFUZZER
#endif
#ifndef OPENSSL_NO_GOST
# define OPENSSL_NO_GOST
#define OPENSSL_NO_GOST
#endif
#ifndef OPENSSL_NO_HEARTBEATS
# define OPENSSL_NO_HEARTBEATS
#define OPENSSL_NO_HEARTBEATS
#endif
#ifndef OPENSSL_NO_HW
# define OPENSSL_NO_HW
#define OPENSSL_NO_HW
#endif
#ifndef OPENSSL_NO_MSAN
# define OPENSSL_NO_MSAN
#define OPENSSL_NO_MSAN
#endif
#ifndef OPENSSL_NO_NEXTPROTONEG
# define OPENSSL_NO_NEXTPROTONEG
#define OPENSSL_NO_NEXTPROTONEG
#endif
#ifndef OPENSSL_NO_PSK
# define OPENSSL_NO_PSK
#define OPENSSL_NO_PSK
#endif
#ifndef OPENSSL_NO_RFC3779
# define OPENSSL_NO_RFC3779
#define OPENSSL_NO_RFC3779
#endif
#ifndef OPENSSL_NO_SCRYPT
# define OPENSSL_NO_SCRYPT
#define OPENSSL_NO_SCRYPT
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#define OPENSSL_NO_SCTP
#endif
#ifndef OPENSSL_NO_SSL_TRACE
# define OPENSSL_NO_SSL_TRACE
#define OPENSSL_NO_SSL_TRACE
#endif
#ifndef OPENSSL_NO_SSL3
# define OPENSSL_NO_SSL3
#define OPENSSL_NO_SSL3
#endif
#ifndef OPENSSL_NO_SSL3_METHOD
# define OPENSSL_NO_SSL3_METHOD
#define OPENSSL_NO_SSL3_METHOD
#endif
#ifndef OPENSSL_NO_UBSAN
# define OPENSSL_NO_UBSAN
#define OPENSSL_NO_UBSAN
#endif
#ifndef OPENSSL_NO_UI_CONSOLE
# define OPENSSL_NO_UI_CONSOLE
#define OPENSSL_NO_UI_CONSOLE
#endif
#ifndef OPENSSL_NO_UNIT_TEST
# define OPENSSL_NO_UNIT_TEST
#define OPENSSL_NO_UNIT_TEST
#endif
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
# define OPENSSL_NO_WEAK_SSL_CIPHERS
#define OPENSSL_NO_WEAK_SSL_CIPHERS
#endif
#ifndef OPENSSL_NO_DYNAMIC_ENGINE
# define OPENSSL_NO_DYNAMIC_ENGINE
#define OPENSSL_NO_DYNAMIC_ENGINE
#endif


/*
* Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
* don't like that. This will hopefully silence them.
*/
#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
#define NON_EMPTY_TRANSLATION_UNIT static void* dummy = &dummy;

/*
* Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
Expand All @@ -204,67 +207,67 @@ extern "C" {
* functions.
*/
#ifndef DECLARE_DEPRECATED
# define DECLARE_DEPRECATED(f) f;
# ifdef __GNUC__
# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
# undef DECLARE_DEPRECATED
# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
# endif
# elif defined(__SUNPRO_C)
# if (__SUNPRO_C >= 0x5130)
# undef DECLARE_DEPRECATED
# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
# endif
# endif
#define DECLARE_DEPRECATED(f) f;
#ifdef __GNUC__
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
#undef DECLARE_DEPRECATED
#define DECLARE_DEPRECATED(f) f __attribute__((deprecated));
#endif
#elif defined(__SUNPRO_C)
#if (__SUNPRO_C >= 0x5130)
#undef DECLARE_DEPRECATED
#define DECLARE_DEPRECATED(f) f __attribute__((deprecated));
#endif
#endif
#endif

#ifndef OPENSSL_FILE
# ifdef OPENSSL_NO_FILENAMES
# define OPENSSL_FILE ""
# define OPENSSL_LINE 0
# else
# define OPENSSL_FILE __FILE__
# define OPENSSL_LINE __LINE__
# endif
#ifdef OPENSSL_NO_FILENAMES
#define OPENSSL_FILE ""
#define OPENSSL_LINE 0
#else
#define OPENSSL_FILE __FILE__
#define OPENSSL_LINE __LINE__
#endif
#endif

#ifndef OPENSSL_MIN_API
# define OPENSSL_MIN_API 0
#define OPENSSL_MIN_API 0
#endif

#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
# undef OPENSSL_API_COMPAT
# define OPENSSL_API_COMPAT OPENSSL_MIN_API
#undef OPENSSL_API_COMPAT
#define OPENSSL_API_COMPAT OPENSSL_MIN_API
#endif

/*
* Do not deprecate things to be deprecated in version 1.2.0 before the
* OpenSSL version number matches.
*/
#if OPENSSL_VERSION_NUMBER < 0x10200000L
# define DEPRECATEDIN_1_2_0(f) f;
#define DEPRECATEDIN_1_2_0(f) f;
#elif OPENSSL_API_COMPAT < 0x10200000L
# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
#define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
#else
# define DEPRECATEDIN_1_2_0(f)
#define DEPRECATEDIN_1_2_0(f)
#endif

#if OPENSSL_API_COMPAT < 0x10100000L
# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
#define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
#else
# define DEPRECATEDIN_1_1_0(f)
#define DEPRECATEDIN_1_1_0(f)
#endif

#if OPENSSL_API_COMPAT < 0x10000000L
# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
#define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
#else
# define DEPRECATEDIN_1_0_0(f)
#define DEPRECATEDIN_1_0_0(f)
#endif

#if OPENSSL_API_COMPAT < 0x00908000L
# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
#define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
#else
# define DEPRECATEDIN_0_9_8(f)
#define DEPRECATEDIN_0_9_8(f)
#endif

/* Generate 80386 code? */
Expand All @@ -279,15 +282,15 @@ extern "C" {
* The following are cipher-specific, but are part of the public API.
*/
#if !defined(OPENSSL_SYS_UEFI)
# undef BN_LLONG
#undef BN_LLONG
/* Only one for the following should be defined */
# define SIXTY_FOUR_BIT_LONG
# undef SIXTY_FOUR_BIT
# undef THIRTY_TWO_BIT
#define SIXTY_FOUR_BIT_LONG
#undef SIXTY_FOUR_BIT
#undef THIRTY_TWO_BIT
#endif

#define RC4_INT unsigned int

#ifdef __cplusplus
#ifdef __cplusplus
}
#endif
2 changes: 1 addition & 1 deletion 3rdparty/openssl/update.make
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ update-openssl-headers:
no-cms no-ct no-dso no-gost no-idea no-md2 no-md4 no-mdc2 no-nextprotoneg \
no-poly1305 no-psk no-rc4 no-rfc3779 no-rmd160 no-scrypt no-seed \
no-shared no-siphash no-sm2 no-sm3 no-sm4 no-srp no-ssl2 no-ssl3 \
no-threads no-ui-console no-whirlpool no-zlib CC=clang-10 CXX=clang++-10; \
no-ui-console no-whirlpool no-zlib CC=clang-10 CXX=clang++-10; \
perl "-I." -Mconfigdata "openssl/util/dofile.pl" "-oMakefile" "openssl/include/crypto/bn_conf.h.in" \
> include/bn_conf.h; \
perl "-I." -Mconfigdata "openssl/util/dofile.pl" "-oMakefile" "openssl/include/crypto/dso_conf.h.in" \
Expand Down
Loading

0 comments on commit b475c8d

Please sign in to comment.