rubysl-openssl 2.10 → 2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -5
  2. data/ext/rubysl/openssl/deprecation.rb +7 -3
  3. data/ext/rubysl/openssl/extconf.rb +148 -103
  4. data/ext/rubysl/openssl/openssl_missing.c +94 -275
  5. data/ext/rubysl/openssl/openssl_missing.h +167 -98
  6. data/ext/rubysl/openssl/ossl.c +266 -212
  7. data/ext/rubysl/openssl/ossl.h +27 -89
  8. data/ext/rubysl/openssl/ossl_asn1.c +157 -221
  9. data/ext/rubysl/openssl/ossl_asn1.h +11 -3
  10. data/ext/rubysl/openssl/ossl_bio.c +10 -40
  11. data/ext/rubysl/openssl/ossl_bio.h +1 -2
  12. data/ext/rubysl/openssl/ossl_bn.c +144 -100
  13. data/ext/rubysl/openssl/ossl_bn.h +3 -1
  14. data/ext/rubysl/openssl/ossl_cipher.c +270 -195
  15. data/ext/rubysl/openssl/ossl_config.c +7 -1
  16. data/ext/rubysl/openssl/ossl_config.h +0 -1
  17. data/ext/rubysl/openssl/ossl_digest.c +40 -29
  18. data/ext/rubysl/openssl/ossl_engine.c +23 -62
  19. data/ext/rubysl/openssl/ossl_hmac.c +82 -55
  20. data/ext/rubysl/openssl/ossl_ns_spki.c +22 -22
  21. data/ext/rubysl/openssl/ossl_ocsp.c +894 -144
  22. data/ext/rubysl/openssl/ossl_ocsp.h +1 -1
  23. data/ext/rubysl/openssl/ossl_pkcs12.c +47 -19
  24. data/ext/rubysl/openssl/ossl_pkcs5.c +7 -15
  25. data/ext/rubysl/openssl/ossl_pkcs7.c +38 -15
  26. data/ext/rubysl/openssl/ossl_pkey.c +151 -99
  27. data/ext/rubysl/openssl/ossl_pkey.h +123 -29
  28. data/ext/rubysl/openssl/ossl_pkey_dh.c +143 -92
  29. data/ext/rubysl/openssl/ossl_pkey_dsa.c +149 -104
  30. data/ext/rubysl/openssl/ossl_pkey_ec.c +646 -524
  31. data/ext/rubysl/openssl/ossl_pkey_rsa.c +180 -121
  32. data/ext/rubysl/openssl/ossl_rand.c +25 -21
  33. data/ext/rubysl/openssl/ossl_ssl.c +795 -413
  34. data/ext/rubysl/openssl/ossl_ssl.h +3 -0
  35. data/ext/rubysl/openssl/ossl_ssl_session.c +83 -77
  36. data/ext/rubysl/openssl/ossl_version.h +1 -1
  37. data/ext/rubysl/openssl/ossl_x509.c +92 -8
  38. data/ext/rubysl/openssl/ossl_x509.h +14 -5
  39. data/ext/rubysl/openssl/ossl_x509attr.c +77 -41
  40. data/ext/rubysl/openssl/ossl_x509cert.c +45 -46
  41. data/ext/rubysl/openssl/ossl_x509crl.c +51 -57
  42. data/ext/rubysl/openssl/ossl_x509ext.c +39 -33
  43. data/ext/rubysl/openssl/ossl_x509name.c +68 -45
  44. data/ext/rubysl/openssl/ossl_x509req.c +32 -38
  45. data/ext/rubysl/openssl/ossl_x509revoked.c +43 -9
  46. data/ext/rubysl/openssl/ossl_x509store.c +309 -104
  47. data/ext/rubysl/openssl/ruby_missing.h +8 -6
  48. data/lib/openssl/buffering.rb +11 -5
  49. data/lib/openssl/cipher.rb +23 -15
  50. data/lib/openssl/digest.rb +7 -10
  51. data/lib/openssl/pkey.rb +15 -8
  52. data/lib/openssl/ssl.rb +81 -105
  53. data/lib/rubysl/openssl.rb +1 -4
  54. data/lib/rubysl/openssl/version.rb +1 -1
  55. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8170c92fac3dc7ed60bbd846bd9c6c9305b67f9e
4
- data.tar.gz: 6dbb74381898065c6db26bbf1dd07f580da5011a
2
+ SHA256:
3
+ metadata.gz: c8e134279ec9b3fb382410f085056f03b7452528e35e767659db710fd831e9e0
4
+ data.tar.gz: f49ad76beb97edc9466f440b7a51a34da5b3a38cbe4c240b4ec67b29aeeced3a
5
5
  SHA512:
6
- metadata.gz: ccae0e900ef78f9858ea6e5f080d4dcd1414c9063e1527f21a19b05d3aec1a2acd75e7d1647ec0e0cb2c83d1a380038fa72679dcb27050bbd37506b2e5f00fb8
7
- data.tar.gz: 4b7aceae7fa70b44e876e00900c16b5dcde6d64e73242a43ad569847dbe03c5ca0dc395d4e854c5076d3811cd91b2fe9136232a1c730cf740826c3eb5b427cc0
6
+ metadata.gz: 00272e14585bb278bcc37c42c1de138fbb4f1075329cd831b64c9749c0b39f89b93fafb0940369fd2238649a3bade8dc604ace72684e541bb41ac442c64f21a2
7
+ data.tar.gz: '089dd3bf4adfa74f51a6566e3c55d8c24bbc7dd64f4e0bb6e9443d6e497743af84a5a7847618d83c2495fc022cedc9347649675a0c1371462598cfe354af7ae6'
@@ -3,7 +3,7 @@ module OpenSSL
3
3
  def self.deprecated_warning_flag
4
4
  unless flag = (@deprecated_warning_flag ||= nil)
5
5
  if try_compile("", flag = "-Werror=deprecated-declarations")
6
- if with_config("broken-apple-openssl")
6
+ if /darwin/ =~ RUBY_PLATFORM and with_config("broken-apple-openssl")
7
7
  flag = "-Wno-deprecated-declarations"
8
8
  end
9
9
  $warnflags << " #{flag}"
@@ -16,7 +16,11 @@ module OpenSSL
16
16
  end
17
17
 
18
18
  def self.check_func(func, header)
19
- have_func(func, header, deprecated_warning_flag) and
20
- have_header(header, nil, deprecated_warning_flag)
19
+ have_func(func, header, deprecated_warning_flag)
20
+ end
21
+
22
+ def self.check_func_or_macro(func, header)
23
+ check_func(func, header) or
24
+ have_macro(func, header) && $defs.push("-DHAVE_#{func.upcase}")
21
25
  end
22
26
  end
@@ -19,144 +19,189 @@ dir_config("kerberos")
19
19
 
20
20
  Logging::message "=== OpenSSL for Ruby configurator ===\n"
21
21
 
22
+ # Add -Werror=deprecated-declarations to $warnflags if available
23
+ OpenSSL.deprecated_warning_flag
24
+
22
25
  ##
23
26
  # Adds -DOSSL_DEBUG for compilation and some more targets when GCC is used
24
27
  # To turn it on, use: --with-debug or --enable-debug
25
28
  #
26
29
  if with_config("debug") or enable_config("debug")
27
- $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"
30
+ $defs.push("-DOSSL_DEBUG")
28
31
  end
29
32
 
30
33
  Logging::message "=== Checking for system dependent stuff... ===\n"
31
34
  have_library("nsl", "t_open")
32
35
  have_library("socket", "socket")
33
- have_header("assert.h")
34
-
35
- Logging::message "=== Checking for required stuff... ===\n"
36
- if $mingw
37
- have_library("wsock32")
38
- have_library("gdi32")
36
+ if $mswin || $mingw
37
+ have_library("ws2_32")
39
38
  end
40
39
 
40
+ Logging::message "=== Checking for required stuff... ===\n"
41
41
  result = pkg_config("openssl") && have_header("openssl/ssl.h")
42
42
 
43
+ def find_openssl_library
44
+ if $mswin || $mingw
45
+ # required for static OpenSSL libraries
46
+ have_library("gdi32") # OpenSSL <= 1.0.2 (for RAND_screen())
47
+ have_library("crypt32")
48
+ end
49
+
50
+ return false unless have_header("openssl/ssl.h")
51
+
52
+ ret = have_library("crypto", "CRYPTO_malloc") &&
53
+ have_library("ssl", "SSL_new")
54
+ return ret if ret
55
+
56
+ if $mswin
57
+ # OpenSSL >= 1.1.0: libcrypto.lib and libssl.lib.
58
+ if have_library("libcrypto", "CRYPTO_malloc") &&
59
+ have_library("libssl", "SSL_new")
60
+ return true
61
+ end
62
+
63
+ # OpenSSL <= 1.0.2: libeay32.lib and ssleay32.lib.
64
+ if have_library("libeay32", "CRYPTO_malloc") &&
65
+ have_library("ssleay32", "SSL_new")
66
+ return true
67
+ end
68
+
69
+ # LibreSSL: libcrypto-##.lib and libssl-##.lib, where ## is the ABI version
70
+ # number. We have to find the version number out by scanning libpath.
71
+ libpath = $LIBPATH.dup
72
+ libpath |= ENV["LIB"].split(File::PATH_SEPARATOR)
73
+ libpath.map! { |d| d.tr(File::ALT_SEPARATOR, File::SEPARATOR) }
74
+
75
+ ret = [
76
+ ["crypto", "CRYPTO_malloc"],
77
+ ["ssl", "SSL_new"]
78
+ ].all? do |base, func|
79
+ result = false
80
+ libs = ["lib#{base}-[0-9][0-9]", "lib#{base}-[0-9][0-9][0-9]"]
81
+ libs = Dir.glob(libs.map{|l| libpath.map{|d| File.join(d, l + ".*")}}.flatten).map{|path| File.basename(path, ".*")}.uniq
82
+ libs.each do |lib|
83
+ result = have_library(lib, func)
84
+ break if result
85
+ end
86
+ result
87
+ end
88
+ return ret if ret
89
+ end
90
+ return false
91
+ end
92
+
43
93
  unless result
44
- result = have_header("openssl/ssl.h")
45
- result &&= %w[crypto libeay32].any? {|lib| have_library(lib, "OpenSSL_add_all_digests")}
46
- result &&= %w[ssl ssleay32].any? {|lib| have_library(lib, "SSL_library_init")}
47
- unless result
94
+ unless find_openssl_library
48
95
  Logging::message "=== Checking for required stuff failed. ===\n"
49
96
  Logging::message "Makefile wasn't created. Fix the errors above.\n"
50
97
  exit 1
51
98
  end
52
99
  end
53
100
 
54
- unless have_header("openssl/conf_api.h")
55
- raise "OpenSSL 0.9.6 or later required."
101
+ result = checking_for("OpenSSL version is 0.9.8 or later") {
102
+ try_static_assert("OPENSSL_VERSION_NUMBER >= 0x00908000L", "openssl/opensslv.h")
103
+ }
104
+ unless result
105
+ raise "OpenSSL 0.9.8 or later required."
56
106
  end
57
- unless OpenSSL.check_func("SSL_library_init()", "openssl/ssl.h")
107
+
108
+ if /darwin/ =~ RUBY_PLATFORM and !OpenSSL.check_func("SSL_library_init()", "openssl/ssl.h")
58
109
  Logging::message "You may be using a version of OpenSSL or SSL provided by Apple.\nIf you encounter issues, please use another SSL library. (e.g. using `configure --with-openssl-dir=/path/to/openssl')"
59
110
  end
60
111
 
61
112
  Logging::message "=== Checking for OpenSSL features... ===\n"
62
- have_func("ERR_peek_last_error")
63
- have_func("ASN1_put_eoc")
64
- have_func("BN_mod_add")
65
- have_func("BN_mod_sqr")
66
- have_func("BN_mod_sub")
67
- have_func("BN_pseudo_rand_range")
68
- have_func("BN_rand_range")
69
- have_func("CONF_get1_default_config_file")
70
- have_func("EVP_CIPHER_CTX_copy")
71
- have_func("EVP_CIPHER_CTX_set_padding")
72
- have_func("EVP_CipherFinal_ex")
73
- have_func("EVP_CipherInit_ex")
74
- have_func("EVP_DigestFinal_ex")
75
- have_func("EVP_DigestInit_ex")
76
- have_func("EVP_MD_CTX_cleanup")
77
- have_func("EVP_MD_CTX_create")
78
- have_func("EVP_MD_CTX_destroy")
79
- have_func("EVP_MD_CTX_init")
80
- have_func("HMAC_CTX_cleanup")
81
- have_func("HMAC_CTX_copy")
82
- have_func("HMAC_CTX_init")
83
- have_func("PEM_def_callback")
84
- have_func("PKCS5_PBKDF2_HMAC")
85
- have_func("PKCS5_PBKDF2_HMAC_SHA1")
86
- have_func("RAND_egd")
87
- have_func("X509V3_set_nconf")
88
- have_func("X509V3_EXT_nconf_nid")
89
- have_func("X509_CRL_add0_revoked")
90
- have_func("X509_CRL_set_issuer_name")
91
- have_func("X509_CRL_set_version")
92
- have_func("X509_CRL_sort")
93
- have_func("X509_NAME_hash_old")
94
- have_func("X509_STORE_get_ex_data")
95
- have_func("X509_STORE_set_ex_data")
96
- have_func("OBJ_NAME_do_all_sorted")
97
- have_func("SSL_SESSION_get_id")
98
- have_func("SSL_SESSION_cmp")
99
- have_func("OPENSSL_cleanse")
113
+ # compile options
114
+
115
+ # SSLv2 and SSLv3 may be removed in future versions of OpenSSL, and even macros
116
+ # like OPENSSL_NO_SSL2 may not be defined.
100
117
  have_func("SSLv2_method")
101
- have_func("SSLv2_server_method")
102
- have_func("SSLv2_client_method")
103
118
  have_func("SSLv3_method")
104
- have_func("SSLv3_server_method")
105
- have_func("SSLv3_client_method")
106
119
  have_func("TLSv1_1_method")
107
- have_func("TLSv1_1_server_method")
108
- have_func("TLSv1_1_client_method")
109
120
  have_func("TLSv1_2_method")
110
- have_func("TLSv1_2_server_method")
111
- have_func("TLSv1_2_client_method")
112
- have_func("SSL_CTX_set_alpn_select_cb")
113
- have_func("SSL_CTX_set_alpn_protos")
114
- have_macro("OPENSSL_NPN_NEGOTIATED", ['openssl/ssl.h']) && $defs.push("-DHAVE_OPENSSL_NPN_NEGOTIATED")
115
- unless have_func("SSL_set_tlsext_host_name", ['openssl/ssl.h'])
116
- have_macro("SSL_set_tlsext_host_name", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_SET_TLSEXT_HOST_NAME")
117
- end
118
- if have_header("openssl/engine.h")
119
- have_func("ENGINE_add")
120
- have_func("ENGINE_load_builtin_engines")
121
- have_func("ENGINE_load_openbsd_dev_crypto")
122
- have_func("ENGINE_get_digest")
123
- have_func("ENGINE_get_cipher")
124
- have_func("ENGINE_cleanup")
125
- have_func("ENGINE_load_dynamic")
126
- have_func("ENGINE_load_4758cca")
127
- have_func("ENGINE_load_aep")
128
- have_func("ENGINE_load_atalla")
129
- have_func("ENGINE_load_chil")
130
- have_func("ENGINE_load_cswift")
131
- have_func("ENGINE_load_nuron")
132
- have_func("ENGINE_load_sureware")
133
- have_func("ENGINE_load_ubsec")
134
- have_func("ENGINE_load_padlock")
135
- have_func("ENGINE_load_capi")
136
- have_func("ENGINE_load_gmp")
137
- have_func("ENGINE_load_gost")
138
- have_func("ENGINE_load_cryptodev")
139
- have_func("ENGINE_load_aesni")
140
- end
141
- have_func("DH_generate_parameters_ex")
142
- have_func("DSA_generate_parameters_ex")
143
- have_func("RSA_generate_key_ex")
144
- if checking_for('OpenSSL version is 0.9.7 or later') {
145
- try_static_assert('OPENSSL_VERSION_NUMBER >= 0x00907000L', 'openssl/opensslv.h')
146
- }
147
- have_header("openssl/ocsp.h")
121
+ have_func("RAND_egd")
122
+ engines = %w{builtin_engines openbsd_dev_crypto dynamic 4758cca aep atalla chil
123
+ cswift nuron sureware ubsec padlock capi gmp gost cryptodev aesni}
124
+ engines.each { |name|
125
+ OpenSSL.check_func_or_macro("ENGINE_load_#{name}", "openssl/engine.h")
126
+ }
127
+
128
+ if ($mswin || $mingw) && have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h")
129
+ $defs.push("-DNOCRYPT")
148
130
  end
131
+
132
+ # added in 0.9.8X
133
+ have_func("EVP_CIPHER_CTX_new")
134
+ have_func("EVP_CIPHER_CTX_free")
135
+ OpenSSL.check_func_or_macro("SSL_CTX_clear_options", "openssl/ssl.h")
136
+
137
+ # added in 1.0.0
138
+ have_func("ASN1_TIME_adj")
139
+ have_func("EVP_CIPHER_CTX_copy")
140
+ have_func("EVP_PKEY_base_id")
141
+ have_func("HMAC_CTX_copy")
142
+ have_func("PKCS5_PBKDF2_HMAC")
143
+ have_func("X509_NAME_hash_old")
144
+ have_func("X509_STORE_CTX_get0_current_crl")
145
+ have_func("X509_STORE_set_verify_cb")
146
+ have_func("i2d_ASN1_SET_ANY")
147
+ have_func("SSL_SESSION_cmp") # removed
148
+ OpenSSL.check_func_or_macro("SSL_set_tlsext_host_name", "openssl/ssl.h")
149
149
  have_struct_member("CRYPTO_THREADID", "ptr", "openssl/crypto.h")
150
- have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")
151
- have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h")
152
- have_struct_member("X509_ATTRIBUTE", "single", "openssl/x509.h")
153
- have_macro("OPENSSL_FIPS", ['openssl/opensslconf.h']) && $defs.push("-DHAVE_OPENSSL_FIPS")
150
+ have_func("EVP_PKEY_get0")
151
+
152
+ # added in 1.0.1
153
+ have_func("SSL_CTX_set_next_proto_select_cb")
154
154
  have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTHENTICATED_ENCRYPTION")
155
155
 
156
+ # added in 1.0.2
157
+ have_func("EC_curve_nist2nid")
158
+ have_func("X509_REVOKED_dup")
159
+ have_func("X509_STORE_CTX_get0_store")
160
+ have_func("SSL_CTX_set_alpn_select_cb")
161
+ OpenSSL.check_func_or_macro("SSL_CTX_set1_curves_list", "openssl/ssl.h")
162
+ OpenSSL.check_func_or_macro("SSL_CTX_set_ecdh_auto", "openssl/ssl.h")
163
+ OpenSSL.check_func_or_macro("SSL_get_server_tmp_key", "openssl/ssl.h")
164
+ have_func("SSL_is_server")
165
+
166
+ # added in 1.1.0
167
+ if !have_struct_member("SSL", "ctx", "openssl/ssl.h") ||
168
+ try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x2070000fL", "openssl/opensslv.h")
169
+ $defs.push("-DHAVE_OPAQUE_OPENSSL")
170
+ end
171
+ have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API")
172
+ have_func("BN_GENCB_new")
173
+ have_func("BN_GENCB_free")
174
+ have_func("BN_GENCB_get_arg")
175
+ have_func("EVP_MD_CTX_new")
176
+ have_func("EVP_MD_CTX_free")
177
+ have_func("HMAC_CTX_new")
178
+ have_func("HMAC_CTX_free")
179
+ OpenSSL.check_func("RAND_pseudo_bytes", "openssl/rand.h") # deprecated
180
+ have_func("X509_STORE_get_ex_data")
181
+ have_func("X509_STORE_set_ex_data")
182
+ have_func("X509_CRL_get0_signature")
183
+ have_func("X509_REQ_get0_signature")
184
+ have_func("X509_REVOKED_get0_serialNumber")
185
+ have_func("X509_REVOKED_get0_revocationDate")
186
+ have_func("X509_get0_tbs_sigalg")
187
+ have_func("X509_STORE_CTX_get0_untrusted")
188
+ have_func("X509_STORE_CTX_get0_cert")
189
+ have_func("X509_STORE_CTX_get0_chain")
190
+ have_func("OCSP_SINGLERESP_get0_id")
191
+ have_func("SSL_CTX_get_ciphers")
192
+ have_func("X509_up_ref")
193
+ have_func("X509_CRL_up_ref")
194
+ have_func("X509_STORE_up_ref")
195
+ have_func("SSL_SESSION_up_ref")
196
+ have_func("EVP_PKEY_up_ref")
197
+ OpenSSL.check_func_or_macro("SSL_CTX_set_tmp_ecdh_callback", "openssl/ssl.h") # removed
198
+ OpenSSL.check_func_or_macro("SSL_CTX_set_min_proto_version", "openssl/ssl.h")
199
+ have_func("SSL_CTX_get_security_level")
200
+ have_func("X509_get0_notBefore")
201
+ have_func("SSL_SESSION_get_protocol_version")
202
+
156
203
  Logging::message "=== Checking done. ===\n"
157
204
 
158
205
  create_header
159
- create_makefile("openssl/openssl") {|conf|
160
- conf << "THREAD_MODEL = #{CONFIG["THREAD_MODEL"]}\n"
161
- }
206
+ create_makefile("openssl/openssl")
162
207
  Logging::message "Done.\n"
@@ -9,107 +9,42 @@
9
9
  */
10
10
  #include RUBY_EXTCONF_H
11
11
 
12
- #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
12
+ #include <string.h> /* memcpy() */
13
+ #if !defined(OPENSSL_NO_ENGINE)
13
14
  # include <openssl/engine.h>
14
15
  #endif
15
- #include <openssl/x509_vfy.h>
16
-
17
16
  #if !defined(OPENSSL_NO_HMAC)
18
- #include <string.h> /* memcpy() */
19
- #include <openssl/hmac.h>
20
-
21
- #include "openssl_missing.h"
22
-
23
- #if !defined(HAVE_HMAC_CTX_COPY)
24
- void
25
- HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in)
26
- {
27
- if (!out || !in) return;
28
- memcpy(out, in, sizeof(HMAC_CTX));
29
-
30
- EVP_MD_CTX_copy(&out->md_ctx, &in->md_ctx);
31
- EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx);
32
- EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx);
33
- }
34
- #endif /* HAVE_HMAC_CTX_COPY */
35
- #endif /* NO_HMAC */
36
-
37
- #if !defined(HAVE_X509_STORE_SET_EX_DATA)
38
- int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data)
39
- {
40
- return CRYPTO_set_ex_data(&str->ex_data, idx, data);
41
- }
17
+ # include <openssl/hmac.h>
42
18
  #endif
19
+ #include <openssl/x509_vfy.h>
43
20
 
44
- #if !defined(HAVE_X509_STORE_GET_EX_DATA)
45
- void *X509_STORE_get_ex_data(X509_STORE *str, int idx)
46
- {
47
- return CRYPTO_get_ex_data(&str->ex_data, idx);
48
- }
49
- #endif
21
+ #include "openssl_missing.h"
50
22
 
51
- #if !defined(HAVE_EVP_MD_CTX_CREATE)
52
- EVP_MD_CTX *
53
- EVP_MD_CTX_create(void)
23
+ /* added in 0.9.8X */
24
+ #if !defined(HAVE_EVP_CIPHER_CTX_NEW)
25
+ EVP_CIPHER_CTX *
26
+ ossl_EVP_CIPHER_CTX_new(void)
54
27
  {
55
- EVP_MD_CTX *ctx = OPENSSL_malloc(sizeof(EVP_MD_CTX));
56
- if (!ctx) return NULL;
57
-
58
- memset(ctx, 0, sizeof(EVP_MD_CTX));
59
-
28
+ EVP_CIPHER_CTX *ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX));
29
+ if (!ctx)
30
+ return NULL;
31
+ EVP_CIPHER_CTX_init(ctx);
60
32
  return ctx;
61
33
  }
62
34
  #endif
63
35
 
64
- #if !defined(HAVE_EVP_MD_CTX_CLEANUP)
65
- int
66
- EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
67
- {
68
- /* FIXME!!! */
69
- memset(ctx, 0, sizeof(EVP_MD_CTX));
70
-
71
- return 1;
72
- }
73
- #endif
74
-
75
- #if !defined(HAVE_EVP_MD_CTX_DESTROY)
76
- void
77
- EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)
78
- {
79
- EVP_MD_CTX_cleanup(ctx);
80
- OPENSSL_free(ctx);
81
- }
82
- #endif
83
-
84
- #if !defined(HAVE_EVP_MD_CTX_INIT)
85
- void
86
- EVP_MD_CTX_init(EVP_MD_CTX *ctx)
87
- {
88
- memset(ctx, 0, sizeof(EVP_MD_CTX));
89
- }
90
- #endif
91
-
92
- #if !defined(HAVE_HMAC_CTX_INIT)
36
+ #if !defined(HAVE_EVP_CIPHER_CTX_FREE)
93
37
  void
94
- HMAC_CTX_init(HMAC_CTX *ctx)
38
+ ossl_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx)
95
39
  {
96
- EVP_MD_CTX_init(&ctx->i_ctx);
97
- EVP_MD_CTX_init(&ctx->o_ctx);
98
- EVP_MD_CTX_init(&ctx->md_ctx);
99
- }
100
- #endif
101
-
102
- #if !defined(HAVE_HMAC_CTX_CLEANUP)
103
- void
104
- HMAC_CTX_cleanup(HMAC_CTX *ctx)
105
- {
106
- EVP_MD_CTX_cleanup(&ctx->i_ctx);
107
- EVP_MD_CTX_cleanup(&ctx->o_ctx);
108
- EVP_MD_CTX_cleanup(&ctx->md_ctx);
109
- memset(ctx, 0, sizeof(HMAC_CTX));
40
+ if (ctx) {
41
+ EVP_CIPHER_CTX_cleanup(ctx);
42
+ OPENSSL_free(ctx);
43
+ }
110
44
  }
111
45
  #endif
112
46
 
47
+ /* added in 1.0.0 */
113
48
  #if !defined(HAVE_EVP_CIPHER_CTX_COPY)
114
49
  /*
115
50
  * this function does not exist in OpenSSL yet... or ever?.
@@ -117,11 +52,11 @@ HMAC_CTX_cleanup(HMAC_CTX *ctx)
117
52
  * tested on 0.9.7d.
118
53
  */
119
54
  int
120
- EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in)
55
+ ossl_EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in)
121
56
  {
122
57
  memcpy(out, in, sizeof(EVP_CIPHER_CTX));
123
58
 
124
- #if defined(HAVE_ENGINE_ADD) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
59
+ #if !defined(OPENSSL_NO_ENGINE)
125
60
  if (in->engine) ENGINE_add(out->engine);
126
61
  if (in->cipher_data) {
127
62
  out->cipher_data = OPENSSL_malloc(in->cipher->ctx_size);
@@ -133,222 +68,106 @@ EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in)
133
68
  }
134
69
  #endif
135
70
 
136
- #if !defined(HAVE_X509_CRL_SET_VERSION)
137
- int
138
- X509_CRL_set_version(X509_CRL *x, long version)
139
- {
140
- if (x == NULL || x->crl == NULL) return 0;
141
- if (x->crl->version == NULL) {
142
- x->crl->version = M_ASN1_INTEGER_new();
143
- if (x->crl->version == NULL) return 0;
144
- }
145
- return ASN1_INTEGER_set(x->crl->version, version);
146
- }
147
- #endif
148
-
149
- #if !defined(HAVE_X509_CRL_SET_ISSUER_NAME)
150
- int
151
- X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name)
152
- {
153
- if (x == NULL || x->crl == NULL) return 0;
154
- return X509_NAME_set(&x->crl->issuer, name);
155
- }
156
- #endif
157
-
158
- #if !defined(HAVE_X509_CRL_SORT)
71
+ #if !defined(OPENSSL_NO_HMAC)
72
+ #if !defined(HAVE_HMAC_CTX_COPY)
159
73
  int
160
- X509_CRL_sort(X509_CRL *c)
74
+ ossl_HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in)
161
75
  {
162
- int i;
163
- X509_REVOKED *r;
164
- /* sort the data so it will be written in serial
165
- * number order */
166
- sk_X509_REVOKED_sort(c->crl->revoked);
167
- for (i=0; i<sk_X509_REVOKED_num(c->crl->revoked); i++) {
168
- r=sk_X509_REVOKED_value(c->crl->revoked, i);
169
- r->sequence=i;
170
- }
171
- return 1;
172
- }
173
- #endif
76
+ if (!out || !in)
77
+ return 0;
174
78
 
175
- #if !defined(HAVE_X509_CRL_ADD0_REVOKED)
176
- static int
177
- OSSL_X509_REVOKED_cmp(const X509_REVOKED * const *a, const X509_REVOKED * const *b)
178
- {
179
- return(ASN1_STRING_cmp(
180
- (ASN1_STRING *)(*a)->serialNumber,
181
- (ASN1_STRING *)(*b)->serialNumber));
182
- }
79
+ memcpy(out, in, sizeof(HMAC_CTX));
183
80
 
184
- int
185
- X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
186
- {
187
- X509_CRL_INFO *inf;
81
+ EVP_MD_CTX_copy(&out->md_ctx, &in->md_ctx);
82
+ EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx);
83
+ EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx);
188
84
 
189
- inf = crl->crl;
190
- if (!inf->revoked)
191
- inf->revoked = sk_X509_REVOKED_new(OSSL_X509_REVOKED_cmp);
192
- if (!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev))
193
- return 0;
194
85
  return 1;
195
86
  }
196
- #endif
87
+ #endif /* HAVE_HMAC_CTX_COPY */
88
+ #endif /* NO_HMAC */
197
89
 
198
- #if !defined(HAVE_BN_MOD_SQR)
199
- int
200
- BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
201
- {
202
- if (!BN_sqr(r, (BIGNUM*)a, ctx)) return 0;
203
- return BN_mod(r, r, m, ctx);
204
- }
205
- #endif
90
+ /* added in 1.0.2 */
91
+ #if !defined(OPENSSL_NO_EC)
92
+ #if !defined(HAVE_EC_CURVE_NIST2NID)
93
+ static struct {
94
+ const char *name;
95
+ int nid;
96
+ } nist_curves[] = {
97
+ {"B-163", NID_sect163r2},
98
+ {"B-233", NID_sect233r1},
99
+ {"B-283", NID_sect283r1},
100
+ {"B-409", NID_sect409r1},
101
+ {"B-571", NID_sect571r1},
102
+ {"K-163", NID_sect163k1},
103
+ {"K-233", NID_sect233k1},
104
+ {"K-283", NID_sect283k1},
105
+ {"K-409", NID_sect409k1},
106
+ {"K-571", NID_sect571k1},
107
+ {"P-192", NID_X9_62_prime192v1},
108
+ {"P-224", NID_secp224r1},
109
+ {"P-256", NID_X9_62_prime256v1},
110
+ {"P-384", NID_secp384r1},
111
+ {"P-521", NID_secp521r1}
112
+ };
206
113
 
207
- #if !defined(HAVE_BN_MOD_ADD) || !defined(HAVE_BN_MOD_SUB)
208
- int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx)
209
- {
210
- if (!BN_mod(r,m,d,ctx)) return 0;
211
- if (!r->neg) return 1;
212
- return (d->neg ? BN_sub : BN_add)(r, r, d);
213
- }
214
- #endif
215
-
216
- #if !defined(HAVE_BN_MOD_ADD)
217
114
  int
218
- BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx)
115
+ ossl_EC_curve_nist2nid(const char *name)
219
116
  {
220
- if (!BN_add(r, a, b)) return 0;
221
- return BN_nnmod(r, r, m, ctx);
222
- }
223
- #endif
224
-
225
- #if !defined(HAVE_BN_MOD_SUB)
226
- int
227
- BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx)
228
- {
229
- if (!BN_sub(r, a, b)) return 0;
230
- return BN_nnmod(r, r, m, ctx);
231
- }
232
- #endif
233
-
234
- #if !defined(HAVE_BN_RAND_RANGE) || !defined(HAVE_BN_PSEUDO_RAND_RANGE)
235
- static int
236
- bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
237
- {
238
- int (*bn_rand)(BIGNUM *, int, int, int) = pseudo ? BN_pseudo_rand : BN_rand;
239
- int n;
240
-
241
- if (range->neg || BN_is_zero(range)) return 0;
242
-
243
- n = BN_num_bits(range);
244
-
245
- if (n == 1) {
246
- if (!BN_zero(r)) return 0;
247
- } else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3)) {
248
- do {
249
- if (!bn_rand(r, n + 1, -1, 0)) return 0;
250
- if (BN_cmp(r ,range) >= 0) {
251
- if (!BN_sub(r, r, range)) return 0;
252
- if (BN_cmp(r, range) >= 0)
253
- if (!BN_sub(r, r, range)) return 0;
254
- }
255
- } while (BN_cmp(r, range) >= 0);
256
- } else {
257
- do {
258
- if (!bn_rand(r, n, -1, 0)) return 0;
259
- } while (BN_cmp(r, range) >= 0);
117
+ size_t i;
118
+ for (i = 0; i < (sizeof(nist_curves) / sizeof(nist_curves[0])); i++) {
119
+ if (!strcmp(nist_curves[i].name, name))
120
+ return nist_curves[i].nid;
260
121
  }
261
-
262
- return 1;
122
+ return NID_undef;
263
123
  }
264
124
  #endif
265
-
266
- #if !defined(HAVE_BN_RAND_RANGE)
267
- int
268
- BN_rand_range(BIGNUM *r, BIGNUM *range)
269
- {
270
- return bn_rand_range(0, r, range);
271
- }
272
125
  #endif
273
126
 
274
- #if !defined(HAVE_BN_PSEUDO_RAND_RANGE)
275
- int
276
- BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range)
127
+ /*** added in 1.1.0 ***/
128
+ #if !defined(HAVE_HMAC_CTX_NEW)
129
+ HMAC_CTX *
130
+ ossl_HMAC_CTX_new(void)
277
131
  {
278
- return bn_rand_range(1, r, range);
132
+ HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX));
133
+ if (!ctx)
134
+ return NULL;
135
+ HMAC_CTX_init(ctx);
136
+ return ctx;
279
137
  }
280
138
  #endif
281
139
 
282
- #if !defined(HAVE_CONF_GET1_DEFAULT_CONFIG_FILE)
283
- #define OPENSSL_CONF "openssl.cnf"
284
- char *
285
- CONF_get1_default_config_file(void)
140
+ #if !defined(HAVE_HMAC_CTX_FREE)
141
+ void
142
+ ossl_HMAC_CTX_free(HMAC_CTX *ctx)
286
143
  {
287
- char *file;
288
- int len;
289
-
290
- file = getenv("OPENSSL_CONF");
291
- if (file) return BUF_strdup(file);
292
- len = strlen(X509_get_default_cert_area());
293
- #ifndef OPENSSL_SYS_VMS
294
- len++;
295
- #endif
296
- len += strlen(OPENSSL_CONF);
297
- file = OPENSSL_malloc(len + 1);
298
- if (!file) return NULL;
299
- strcpy(file,X509_get_default_cert_area());
300
- #ifndef OPENSSL_SYS_VMS
301
- strcat(file,"/");
302
- #endif
303
- strcat(file,OPENSSL_CONF);
304
-
305
- return file;
144
+ if (ctx) {
145
+ HMAC_CTX_cleanup(ctx);
146
+ OPENSSL_free(ctx);
147
+ }
306
148
  }
307
149
  #endif
308
150
 
309
- #if !defined(HAVE_PEM_DEF_CALLBACK)
310
- #define OSSL_PASS_MIN_LENGTH 4
311
- int
312
- PEM_def_callback(char *buf, int num, int w, void *key)
151
+ #if !defined(HAVE_X509_CRL_GET0_SIGNATURE)
152
+ void
153
+ ossl_X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
154
+ const X509_ALGOR **palg)
313
155
  {
314
- int i,j;
315
- const char *prompt;
316
-
317
- if (key) {
318
- i = strlen(key);
319
- i = (i > num) ? num : i;
320
- memcpy(buf, key, i);
321
- return i;
322
- }
323
-
324
- prompt = EVP_get_pw_prompt();
325
- if (prompt == NULL) prompt = "Enter PEM pass phrase:";
326
- for (;;) {
327
- i = EVP_read_pw_string(buf, num, prompt, w);
328
- if (i != 0) {
329
- memset(buf, 0, (unsigned int)num);
330
- return(-1);
331
- }
332
- j = strlen(buf);
333
- if (j < OSSL_PASS_MIN_LENGTH) {
334
- fprintf(stderr,
335
- "phrase is too short, needs to be at least %d chars\n",
336
- OSSL_PASS_MIN_LENGTH);
337
- }
338
- else break;
339
- }
340
- return j;
156
+ if (psig != NULL)
157
+ *psig = crl->signature;
158
+ if (palg != NULL)
159
+ *palg = crl->sig_alg;
341
160
  }
342
161
  #endif
343
162
 
344
- #if !defined(HAVE_ASN1_PUT_EOC)
345
- int
346
- ASN1_put_eoc(unsigned char **pp)
163
+ #if !defined(HAVE_X509_REQ_GET0_SIGNATURE)
164
+ void
165
+ ossl_X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
166
+ const X509_ALGOR **palg)
347
167
  {
348
- unsigned char *p = *pp;
349
- *p++ = 0;
350
- *p++ = 0;
351
- *pp = p;
352
- return 2;
168
+ if (psig != NULL)
169
+ *psig = req->signature;
170
+ if (palg != NULL)
171
+ *palg = req->sig_alg;
353
172
  }
354
173
  #endif