aboutsummaryrefslogtreecommitdiffstats
path: root/ext/openssl/extconf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/openssl/extconf.rb')
-rw-r--r--ext/openssl/extconf.rb197
1 files changed, 95 insertions, 102 deletions
diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb
index d042fd210a..b5fb770a36 100644
--- a/ext/openssl/extconf.rb
+++ b/ext/openssl/extconf.rb
@@ -63,129 +63,122 @@ def have_func_or_macro(name, header)
have_macro(name, [header]) && $defs.push("-DHAVE_#{name.upcase}")
end
+def have_funcish(name)
+ have_func(name) ||
+ have_macro(name, [header]) && $defs.push("-DHAVE_#{name.upcase}")
+end
+
Logging::message "=== Checking for OpenSSL features... ===\n"
+# added in 0.9.6a-0.9.7
+have_func("OPENSSL_cleanse")
have_func("ERR_peek_last_error")
+have_func("CONF_get1_default_config_file")
have_func("ASN1_put_eoc")
+have_func("OBJ_NAME_do_all_sorted")
+have_func("PEM_def_callback")
+have_func("BN_rand_range")
+have_func("BN_pseudo_rand_range")
+have_func("BN_nnmod")
have_func("BN_mod_add")
-have_func("BN_mod_sqr")
have_func("BN_mod_sub")
-have_func("BN_pseudo_rand_range")
-have_func("BN_rand_range")
-have_func("BN_is_prime_ex") # for 0.9.6
-have_func("BN_is_prime_fasttest_ex") # for 0.9.6
-have_func("BN_generate_prime_ex") # for 0.9.6
-have_func("BN_GENCB_new")
-have_func("CONF_get1_default_config_file")
-have_func("EVP_CIPHER_CTX_new")
-have_func("EVP_CIPHER_CTX_free")
-have_func("EVP_CIPHER_CTX_copy")
+have_func("BN_mod_sqr")
+have_func("EVP_MD_CTX_init")
+have_func("EVP_MD_CTX_create")
+have_func("EVP_MD_CTX_destroy")
have_func("EVP_CIPHER_CTX_set_padding")
-have_func("EVP_CipherFinal_ex")
-have_func("EVP_CipherInit_ex")
-have_func("EVP_DigestFinal_ex")
have_func("EVP_DigestInit_ex")
-have_func("EVP_MD_CTX_new")
-have_func("EVP_MD_CTX_create") # for 0.9.6
-have_func("EVP_MD_CTX_free")
-have_func("EVP_MD_CTX_destroy") # for 0.9.6
-have_func("EVP_MD_CTX_init") # for 0.9.6
-have_func("EVP_PKEY_id")
-have_func("HMAC_CTX_new")
-have_func("HMAC_CTX_init") # for 0.9.6
-have_func("HMAC_CTX_free")
-have_func("HMAC_CTX_cleanup") # for 0.9.6
-have_func("HMAC_CTX_reset")
+have_func("EVP_DigestFinal_ex")
+have_func("EVP_CipherInit_ex")
+have_func("EVP_CipherFinal_ex")
have_func("HMAC_Init_ex")
-have_func("HMAC_CTX_copy")
-have_func("PEM_def_callback")
-have_func("PKCS5_PBKDF2_HMAC")
-have_func("PKCS5_PBKDF2_HMAC_SHA1")
-have_func("RAND_egd")
-have_func("EC_curve_nist2nid")
-have_func("X509V3_set_nconf")
-have_func("X509V3_EXT_nconf_nid")
+have_func("HMAC_CTX_init")
+have_func("HMAC_CTX_cleanup")
+have_func("X509_CRL_set_nextUpdate")
have_func("X509_CRL_add0_revoked")
have_func("X509_CRL_set_issuer_name")
have_func("X509_CRL_set_version")
have_func("X509_CRL_sort")
-have_func("X509_CRL_set_nextUpdate") # for 0.9.6
+have_func("X509_STORE_get_ex_data")
+have_func("X509_STORE_set_ex_data")
+have_func("X509V3_set_nconf")
+have_func("X509V3_EXT_nconf_nid")
+
+have_header("openssl/engine.h")
+have_func("ENGINE_add")
+have_func("ENGINE_get_digest")
+have_func("ENGINE_get_cipher")
+# ENGINE_load_xx is deprecated in OpenSSL 1.1.0 and become a macro
+engines = %w{builtin_engines openbsd_dev_crypto dynamic 4758cca aep atalla chil
+ cswift nuron sureware ubsec padlock capi gmp gost cryptodev aesni}
+engines.each { |name| have_func_or_macro("ENGINE_load_#{name}", "openssl/engine.h") }
+
+have_header("openssl/ocsp.h")
+
+# added in -0.9.8
+have_func("BN_is_prime_ex")
+have_func("BN_is_prime_fasttest_ex")
+have_func("BN_generate_prime_ex")
+have_func("EVP_CIPHER_CTX_new")
+have_func("EVP_CIPHER_CTX_free")
+have_func("DH_generate_parameters_ex")
+have_func("DSA_generate_parameters_ex")
+have_func("RSA_generate_key_ex")
+have_func("SSL_SESSION_get_id")
+have_func("SSL_CTX_set_tmp_ecdh_callback") # removed in 1.1.0
+have_func("OCSP_SINGLERESP_delete_ext")
+
+# added in 1.0.0
+have_struct_member("CRYPTO_THREADID", "ptr", "openssl/crypto.h") # check if CRYPTO_THREADID exists
+have_func("EVP_CIPHER_CTX_copy")
+have_func("EVP_PKEY_id")
+have_func("HMAC_CTX_copy")
+have_func("PKCS5_PBKDF2_HMAC")
+have_func("X509_NAME_hash_old")
+have_func_or_macro("SSL_set_tlsext_host_name", 'openssl/ssl.h')
+
+# added in 1.0.1
+have_func("SSL_CTX_set_next_proto_select_cb")
+have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTHENTICATED_ENCRYPTION")
+
+# added in 1.0.2
+have_func("EC_curve_nist2nid")
+have_func("SSL_CTX_set_alpn_select_cb")
+have_func_or_macro("SSL_CTX_set1_curves_list", "openssl/ssl.h")
+have_func_or_macro("SSL_CTX_set_ecdh_auto", "openssl/ssl.h") # removed in 1.1.0
+have_func_or_macro("SSL_get_server_tmp_key", "openssl/ssl.h")
+
+# added in 1.1.0
+have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API")
+have_func("BN_GENCB_new")
+have_func("BN_GENCB_free")
+have_func("BN_GENCB_get_arg")
+have_func("HMAC_CTX_new")
+have_func("HMAC_CTX_free")
+have_func("HMAC_CTX_reset")
+have_func("EVP_MD_CTX_new")
+have_func("EVP_MD_CTX_free")
+have_func("X509_up_ref")
have_func("X509_CRL_get0_signature")
have_func("X509_REQ_get0_signature")
have_func("X509_get0_tbs_sigalg")
have_func("X509_REVOKED_get0_serialNumber")
have_func("X509_REVOKED_set_serialNumber")
have_func("X509_REVOKED_get0_revocationDate")
-have_func("X509_REVOKED_set_nextUpdate")
-have_func("X509_NAME_hash_old")
-have_func("X509_STORE_get_ex_data")
-have_func("X509_STORE_set_ex_data")
-have_func("X509_up_ref")
-have_func("OBJ_NAME_do_all_sorted")
-have_func("SSL_SESSION_get_id")
-have_func("SSL_SESSION_cmp")
-have_func("OPENSSL_cleanse")
-have_func("SSLv2_method")
-have_func("SSLv2_server_method")
-have_func("SSLv2_client_method")
-have_func("SSLv3_method")
-have_func("SSLv3_server_method")
-have_func("SSLv3_client_method")
+have_func("TLS_method") # renamed from SSLv23_method
+have_func("SSL_CTX_get_ciphers")
+have_func("SSL_CTX_get_security_level")
+have_func("OCSP_SINGLERESP_get0_id")
+have_struct_member("EVP_PKEY", "type", "openssl/evp.h") # removed
+
+# depending on OpenSSL configuration
have_func("TLSv1_1_method")
-have_func("TLSv1_1_server_method")
-have_func("TLSv1_1_client_method")
have_func("TLSv1_2_method")
-have_func("TLSv1_2_server_method")
-have_func("TLSv1_2_client_method")
-have_func("SSL_CTX_set_alpn_select_cb")
-have_func("SSL_CTX_set_next_proto_select_cb")
-have_func("SSL_CTX_set_tmp_ecdh_callback")
-have_func("SSL_CTX_get_ciphers")
-have_func("SSL_CTX_get_security_level") # 1.1.0
-have_func_or_macro("SSL_CTX_set1_curves_list", "openssl/ssl.h")
-have_macro("SSL_get_server_tmp_key", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_GET_SERVER_TMP_KEY")
-unless have_func("SSL_set_tlsext_host_name", ['openssl/ssl.h'])
- have_macro("SSL_set_tlsext_host_name", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_SET_TLSEXT_HOST_NAME")
-end
-if have_header("openssl/engine.h")
- have_func("ENGINE_add")
- have_func("ENGINE_load_builtin_engines")
- have_func("ENGINE_load_openbsd_dev_crypto")
- have_func("ENGINE_get_digest")
- have_func("ENGINE_get_cipher")
- have_func_or_macro("ENGINE_load_dynamic", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_4758cca", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_aep", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_atalla", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_chil", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_cswift", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_nuron", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_sureware", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_ubsec", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_padlock", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_capi", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_gmp", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_gost", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_cryptodev", "openssl/engine.h")
- have_func_or_macro("ENGINE_load_aesni", "openssl/engine.h")
-end
-have_func("DH_generate_parameters_ex")
-have_func("DSA_generate_parameters_ex")
-have_func("RSA_generate_key_ex")
-if checking_for('OpenSSL version is 0.9.7 or later') {
- try_static_assert('OPENSSL_VERSION_NUMBER >= 0x00907000L', 'openssl/opensslv.h')
- }
- have_header("openssl/ocsp.h")
- have_func("OCSP_id_get0_info")
- have_func("OCSP_SINGLERESP_delete_ext")
- have_func("OCSP_SINGLERESP_get0_id")
-end
-have_struct_member("CRYPTO_THREADID", "ptr", "openssl/crypto.h")
-have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")
-have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h")
-have_struct_member("EVP_PKEY", "type", "openssl/evp.h")
+have_func("SSLv2_method")
+have_func("SSLv3_method")
have_macro("OPENSSL_FIPS", ['openssl/opensslconf.h']) && $defs.push("-DHAVE_OPENSSL_FIPS")
-have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTHENTICATED_ENCRYPTION")
-have_func("CRYPTO_lock") # removed in OpenSSL 1.1
+
+# LibreSSL support
+have_func("RAND_egd") # removed
Logging::message "=== Checking done. ===\n"