rubysl-openssl 0.0.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -1
  3. data/.travis.yml +7 -0
  4. data/README.md +2 -2
  5. data/Rakefile +0 -1
  6. data/ext/rubysl/openssl/extconf.h +50 -0
  7. data/ext/rubysl/openssl/extconf.rb +144 -0
  8. data/ext/rubysl/openssl/openssl_missing.c +343 -0
  9. data/ext/rubysl/openssl/openssl_missing.h +191 -0
  10. data/ext/rubysl/openssl/ossl.c +552 -0
  11. data/ext/rubysl/openssl/ossl.h +233 -0
  12. data/ext/rubysl/openssl/ossl_asn1.c +1160 -0
  13. data/ext/rubysl/openssl/ossl_asn1.h +59 -0
  14. data/ext/rubysl/openssl/ossl_bio.c +86 -0
  15. data/ext/rubysl/openssl/ossl_bio.h +21 -0
  16. data/ext/rubysl/openssl/ossl_bn.c +852 -0
  17. data/ext/rubysl/openssl/ossl_bn.h +25 -0
  18. data/ext/rubysl/openssl/ossl_cipher.c +569 -0
  19. data/ext/rubysl/openssl/ossl_cipher.h +22 -0
  20. data/ext/rubysl/openssl/ossl_config.c +75 -0
  21. data/ext/rubysl/openssl/ossl_config.h +22 -0
  22. data/ext/rubysl/openssl/ossl_digest.c +259 -0
  23. data/ext/rubysl/openssl/ossl_digest.h +22 -0
  24. data/ext/rubysl/openssl/ossl_engine.c +411 -0
  25. data/ext/rubysl/openssl/ossl_engine.h +20 -0
  26. data/ext/rubysl/openssl/ossl_hmac.c +268 -0
  27. data/ext/rubysl/openssl/ossl_hmac.h +19 -0
  28. data/ext/rubysl/openssl/ossl_ns_spki.c +257 -0
  29. data/ext/rubysl/openssl/ossl_ns_spki.h +21 -0
  30. data/ext/rubysl/openssl/ossl_ocsp.c +769 -0
  31. data/ext/rubysl/openssl/ossl_ocsp.h +24 -0
  32. data/ext/rubysl/openssl/ossl_pkcs12.c +210 -0
  33. data/ext/rubysl/openssl/ossl_pkcs12.h +15 -0
  34. data/ext/rubysl/openssl/ossl_pkcs5.c +99 -0
  35. data/ext/rubysl/openssl/ossl_pkcs5.h +6 -0
  36. data/ext/rubysl/openssl/ossl_pkcs7.c +1039 -0
  37. data/ext/rubysl/openssl/ossl_pkcs7.h +22 -0
  38. data/ext/rubysl/openssl/ossl_pkey.c +240 -0
  39. data/ext/rubysl/openssl/ossl_pkey.h +141 -0
  40. data/ext/rubysl/openssl/ossl_pkey_dh.c +532 -0
  41. data/ext/rubysl/openssl/ossl_pkey_dsa.c +484 -0
  42. data/ext/rubysl/openssl/ossl_pkey_ec.c +1593 -0
  43. data/ext/rubysl/openssl/ossl_pkey_rsa.c +593 -0
  44. data/ext/rubysl/openssl/ossl_rand.c +202 -0
  45. data/ext/rubysl/openssl/ossl_rand.h +20 -0
  46. data/ext/rubysl/openssl/ossl_ssl.c +1484 -0
  47. data/ext/rubysl/openssl/ossl_ssl.h +36 -0
  48. data/ext/rubysl/openssl/ossl_ssl_session.c +307 -0
  49. data/ext/rubysl/openssl/ossl_version.h +16 -0
  50. data/ext/rubysl/openssl/ossl_x509.c +104 -0
  51. data/ext/rubysl/openssl/ossl_x509.h +114 -0
  52. data/ext/rubysl/openssl/ossl_x509attr.c +274 -0
  53. data/ext/rubysl/openssl/ossl_x509cert.c +764 -0
  54. data/ext/rubysl/openssl/ossl_x509crl.c +535 -0
  55. data/ext/rubysl/openssl/ossl_x509ext.c +458 -0
  56. data/ext/rubysl/openssl/ossl_x509name.c +399 -0
  57. data/ext/rubysl/openssl/ossl_x509req.c +466 -0
  58. data/ext/rubysl/openssl/ossl_x509revoked.c +229 -0
  59. data/ext/rubysl/openssl/ossl_x509store.c +625 -0
  60. data/ext/rubysl/openssl/ruby_missing.h +41 -0
  61. data/lib/openssl.rb +1 -0
  62. data/lib/openssl/bn.rb +35 -0
  63. data/lib/openssl/buffering.rb +241 -0
  64. data/lib/openssl/cipher.rb +65 -0
  65. data/lib/openssl/config.rb +316 -0
  66. data/lib/openssl/digest.rb +61 -0
  67. data/lib/openssl/net/ftptls.rb +53 -0
  68. data/lib/openssl/net/telnets.rb +251 -0
  69. data/lib/openssl/pkcs7.rb +25 -0
  70. data/lib/openssl/ssl-internal.rb +187 -0
  71. data/lib/openssl/ssl.rb +1 -0
  72. data/lib/openssl/x509-internal.rb +153 -0
  73. data/lib/openssl/x509.rb +1 -0
  74. data/lib/rubysl/openssl.rb +28 -0
  75. data/lib/rubysl/openssl/version.rb +5 -0
  76. data/rubysl-openssl.gemspec +19 -18
  77. data/spec/cipher_spec.rb +16 -0
  78. data/spec/config/freeze_spec.rb +17 -0
  79. data/spec/hmac/digest_spec.rb +15 -0
  80. data/spec/hmac/hexdigest_spec.rb +15 -0
  81. data/spec/random/pseudo_bytes_spec.rb +5 -0
  82. data/spec/random/random_bytes_spec.rb +5 -0
  83. data/spec/random/shared/random_bytes.rb +28 -0
  84. data/spec/shared/constants.rb +11 -0
  85. data/spec/x509/name/parse_spec.rb +47 -0
  86. metadata +153 -89
  87. data/lib/rubysl-openssl.rb +0 -7
  88. data/lib/rubysl-openssl/version.rb +0 -5
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 76f5a7a94f60ad0a165b1917125508ceb550786b
4
+ data.tar.gz: 5bbe823de538860a62ad2194bee659aa1ea1d351
5
+ SHA512:
6
+ metadata.gz: a9a604acb9afc7a04cd9c95553357d056d3b7ffb42b8cfa34f1423de7e3e30d98ba47341de7301f4da1a293215ac7082232249da067fa4e3ed9c7a798ea55e60
7
+ data.tar.gz: ff37c957590fee69b1587d7dbd529d27a695db35ab6ac852d40bb918dede59e4b1b20527b057e955b8bf99aaf23235eb6589c2c5dfcbe19df768bf9ba354486c
data/.gitignore CHANGED
@@ -15,4 +15,3 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- .rbx
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ env:
3
+ - RUBYLIB=lib
4
+ script: bundle exec mspec
5
+ rvm:
6
+ - 1.8.7
7
+ - rbx-nightly-18mode
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RubySL::Openssl
1
+ # Rubysl::Openssl
2
2
 
3
3
  TODO: Write a gem description
4
4
 
@@ -24,6 +24,6 @@ TODO: Write usage instructions here
24
24
 
25
25
  1. Fork it
26
26
  2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
28
  4. Push to the branch (`git push origin my-new-feature`)
29
29
  5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
@@ -0,0 +1,50 @@
1
+ #ifndef EXTCONF_H
2
+ #define EXTCONF_H
3
+ #define HAVE_ASSERT_H 1
4
+ #define HAVE_OPENSSL_SSL_H 1
5
+ #define HAVE_OPENSSL_CONF_API_H 1
6
+ #define HAVE_ERR_PEEK_LAST_ERROR 1
7
+ #define HAVE_BN_MOD_ADD 1
8
+ #define HAVE_BN_MOD_SQR 1
9
+ #define HAVE_BN_MOD_SUB 1
10
+ #define HAVE_BN_PSEUDO_RAND_RANGE 1
11
+ #define HAVE_BN_RAND_RANGE 1
12
+ #define HAVE_CONF_GET1_DEFAULT_CONFIG_FILE 1
13
+ #define HAVE_EVP_CIPHER_CTX_SET_PADDING 1
14
+ #define HAVE_EVP_CIPHERFINAL_EX 1
15
+ #define HAVE_EVP_CIPHERINIT_EX 1
16
+ #define HAVE_EVP_DIGESTFINAL_EX 1
17
+ #define HAVE_EVP_DIGESTINIT_EX 1
18
+ #define HAVE_EVP_MD_CTX_CLEANUP 1
19
+ #define HAVE_EVP_MD_CTX_CREATE 1
20
+ #define HAVE_EVP_MD_CTX_DESTROY 1
21
+ #define HAVE_EVP_MD_CTX_INIT 1
22
+ #define HAVE_HMAC_CTX_CLEANUP 1
23
+ #define HAVE_HMAC_CTX_INIT 1
24
+ #define HAVE_PEM_DEF_CALLBACK 1
25
+ #define HAVE_PKCS5_PBKDF2_HMAC_SHA1 1
26
+ #define HAVE_X509V3_SET_NCONF 1
27
+ #define HAVE_X509V3_EXT_NCONF_NID 1
28
+ #define HAVE_X509_CRL_ADD0_REVOKED 1
29
+ #define HAVE_X509_CRL_SET_ISSUER_NAME 1
30
+ #define HAVE_X509_CRL_SET_VERSION 1
31
+ #define HAVE_X509_CRL_SORT 1
32
+ #define HAVE_OBJ_NAME_DO_ALL_SORTED 1
33
+ #define HAVE_SSL_SESSION_GET_ID 1
34
+ #define HAVE_OPENSSL_CLEANSE 1
35
+ #define HAVE_VA_ARGS_MACRO 1
36
+ #define HAVE_SSLV2_METHOD 1
37
+ #define HAVE_SSLV2_SERVER_METHOD 1
38
+ #define HAVE_SSLV2_CLIENT_METHOD 1
39
+ #define HAVE_SSL_SET_TLSEXT_HOST_NAME 1
40
+ #define HAVE_OPENSSL_ENGINE_H 1
41
+ #define HAVE_ENGINE_ADD 1
42
+ #define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
43
+ #define HAVE_ENGINE_GET_DIGEST 1
44
+ #define HAVE_ENGINE_GET_CIPHER 1
45
+ #define HAVE_ENGINE_CLEANUP 1
46
+ #define HAVE_OPENSSL_OCSP_H 1
47
+ #define HAVE_ST_FLAGS 1
48
+ #define HAVE_ST_ENGINE 1
49
+ #define HAVE_ST_SINGLE 1
50
+ #endif
@@ -0,0 +1,144 @@
1
+ =begin
2
+ = $RCSfile$ -- Generator for Makefile
3
+
4
+ = Info
5
+ 'OpenSSL for Ruby 2' project
6
+ Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
7
+ All rights reserved.
8
+
9
+ = Licence
10
+ This program is licenced under the same licence as Ruby.
11
+ (See the file 'LICENCE'.)
12
+
13
+ = Version
14
+ $Id: extconf.rb 32234 2011-06-26 08:58:06Z shyouhei $
15
+ =end
16
+
17
+ require "mkmf"
18
+
19
+ dir_config("openssl")
20
+ dir_config("kerberos")
21
+
22
+ message "=== OpenSSL for Ruby configurator ===\n"
23
+
24
+ ##
25
+ # Adds -Wall -DOSSL_DEBUG for compilation and some more targets when GCC is used
26
+ # To turn it on, use: --with-debug or --enable-debug
27
+ #
28
+ if with_config("debug") or enable_config("debug")
29
+ $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"
30
+
31
+ if /gcc/ =~ CONFIG["CC"]
32
+ $CPPFLAGS += " -Wall" unless $CPPFLAGS.split.include? "-Wall"
33
+ end
34
+ end
35
+
36
+ # Nothing we can do about these problems.
37
+ $CPPFLAGS += " -Wno-deprecated-declarations -Wno-pointer-sign"
38
+
39
+ message "=== Checking for system dependent stuff... ===\n"
40
+ have_library("nsl", "t_open")
41
+ have_library("socket", "socket")
42
+ have_header("assert.h")
43
+
44
+ message "=== Checking for required stuff... ===\n"
45
+ if $mingw
46
+ have_library("wsock32")
47
+ have_library("gdi32")
48
+ end
49
+ result = have_header("openssl/ssl.h")
50
+ result &&= %w[crypto libeay32].any? {|lib| have_library(lib, "OpenSSL_add_all_digests")}
51
+ result &&= %w[ssl ssleay32].any? {|lib| have_library(lib, "SSL_library_init")}
52
+ if !result
53
+ unless pkg_config("openssl") and have_header("openssl/ssl.h")
54
+ message "=== Checking for required stuff failed. ===\n"
55
+ message "Makefile wasn't created. Fix the errors above.\n"
56
+ exit 1
57
+ end
58
+ end
59
+
60
+ unless have_header("openssl/conf_api.h")
61
+ message "OpenSSL 0.9.6 or later required.\n"
62
+ exit 1
63
+ end
64
+
65
+ %w"rb_str_set_len rb_block_call".each {|func| have_func(func, "ruby.h")}
66
+
67
+ message "=== Checking for OpenSSL features... ===\n"
68
+ have_func("ERR_peek_last_error")
69
+ have_func("BN_mod_add")
70
+ have_func("BN_mod_sqr")
71
+ have_func("BN_mod_sub")
72
+ have_func("BN_pseudo_rand_range")
73
+ have_func("BN_rand_range")
74
+ have_func("CONF_get1_default_config_file")
75
+ have_func("EVP_CIPHER_CTX_copy")
76
+ have_func("EVP_CIPHER_CTX_set_padding")
77
+ have_func("EVP_CipherFinal_ex")
78
+ have_func("EVP_CipherInit_ex")
79
+ have_func("EVP_DigestFinal_ex")
80
+ have_func("EVP_DigestInit_ex")
81
+ have_func("EVP_MD_CTX_cleanup")
82
+ have_func("EVP_MD_CTX_create")
83
+ have_func("EVP_MD_CTX_destroy")
84
+ have_func("EVP_MD_CTX_init")
85
+ have_func("HMAC_CTX_cleanup")
86
+ have_func("HMAC_CTX_copy")
87
+ have_func("HMAC_CTX_init")
88
+ have_func("PEM_def_callback")
89
+ have_func("PKCS5_PBKDF2_HMAC")
90
+ have_func("PKCS5_PBKDF2_HMAC_SHA1")
91
+ have_func("X509V3_set_nconf")
92
+ have_func("X509V3_EXT_nconf_nid")
93
+ have_func("X509_CRL_add0_revoked")
94
+ have_func("X509_CRL_set_issuer_name")
95
+ have_func("X509_CRL_set_version")
96
+ have_func("X509_CRL_sort")
97
+ have_func("X509_NAME_hash_old")
98
+ have_func("X509_STORE_get_ex_data")
99
+ have_func("X509_STORE_set_ex_data")
100
+ have_func("OBJ_NAME_do_all_sorted")
101
+ have_func("SSL_SESSION_get_id")
102
+ have_func("OPENSSL_cleanse")
103
+ if try_compile("#define FOO(...) foo(__VA_ARGS__)\n int x(){FOO(1);FOO(1,2);FOO(1,2,3);}\n")
104
+ $defs.push("-DHAVE_VA_ARGS_MACRO")
105
+ end
106
+ have_func("SSLv2_method")
107
+ have_func("SSLv2_server_method")
108
+ have_func("SSLv2_client_method")
109
+ unless have_func("SSL_set_tlsext_host_name", ['openssl/ssl.h'])
110
+ have_macro("SSL_set_tlsext_host_name", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_SET_TLSEXT_HOST_NAME")
111
+ end
112
+ if have_header("openssl/engine.h")
113
+ have_func("ENGINE_add")
114
+ have_func("ENGINE_load_builtin_engines")
115
+ have_func("ENGINE_load_openbsd_dev_crypto")
116
+ have_func("ENGINE_get_digest")
117
+ have_func("ENGINE_get_cipher")
118
+ have_func("ENGINE_cleanup")
119
+ have_func("ENGINE_load_4758cca")
120
+ have_func("ENGINE_load_aep")
121
+ have_func("ENGINE_load_atalla")
122
+ have_func("ENGINE_load_chil")
123
+ have_func("ENGINE_load_cswift")
124
+ have_func("ENGINE_load_nuron")
125
+ have_func("ENGINE_load_sureware")
126
+ have_func("ENGINE_load_ubsec")
127
+ end
128
+ if try_compile(<<SRC)
129
+ #include <openssl/opensslv.h>
130
+ #if OPENSSL_VERSION_NUMBER < 0x00907000L
131
+ # error "OpenSSL version is less than 0.9.7."
132
+ #endif
133
+ SRC
134
+ have_header("openssl/ocsp.h")
135
+ end
136
+ have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")
137
+ have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h")
138
+ have_struct_member("X509_ATTRIBUTE", "single", "openssl/x509.h")
139
+
140
+ message "=== Checking done. ===\n"
141
+
142
+ create_header
143
+ create_makefile("openssl/openssl")
144
+ message "Done.\n"
@@ -0,0 +1,343 @@
1
+ /*
2
+ * $Id: openssl_missing.c 16467 2008-05-19 03:00:52Z knu $
3
+ * 'OpenSSL for Ruby' project
4
+ * Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
5
+ * All rights reserved.
6
+ */
7
+ /*
8
+ * This program is licenced under the same licence as Ruby.
9
+ * (See the file 'LICENCE'.)
10
+ */
11
+ #include RUBY_EXTCONF_H
12
+
13
+ #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ST_ENGINE)
14
+ # include <openssl/engine.h>
15
+ #endif
16
+ #include <openssl/x509_vfy.h>
17
+
18
+ #if !defined(OPENSSL_NO_HMAC)
19
+ #include <string.h> /* memcpy() */
20
+ #include <openssl/hmac.h>
21
+
22
+ #include "openssl_missing.h"
23
+
24
+ #if !defined(HAVE_HMAC_CTX_COPY)
25
+ void
26
+ HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in)
27
+ {
28
+ if (!out || !in) return;
29
+ memcpy(out, in, sizeof(HMAC_CTX));
30
+
31
+ EVP_MD_CTX_copy(&out->md_ctx, &in->md_ctx);
32
+ EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx);
33
+ EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx);
34
+ }
35
+ #endif /* HAVE_HMAC_CTX_COPY */
36
+ #endif /* NO_HMAC */
37
+
38
+ #if !defined(HAVE_X509_STORE_SET_EX_DATA)
39
+
40
+ int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data)
41
+ {
42
+ return CRYPTO_set_ex_data(&str->ex_data, idx, data);
43
+ }
44
+
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
50
+
51
+ #if !defined(HAVE_EVP_MD_CTX_CREATE)
52
+ EVP_MD_CTX *
53
+ EVP_MD_CTX_create(void)
54
+ {
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
+
60
+ return ctx;
61
+ }
62
+ #endif
63
+
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)
93
+ void
94
+ HMAC_CTX_init(HMAC_CTX *ctx)
95
+ {
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));
110
+ }
111
+ #endif
112
+
113
+ #if !defined(HAVE_EVP_CIPHER_CTX_COPY)
114
+ /*
115
+ * this function does not exist in OpenSSL yet... or ever?.
116
+ * a future version may break this function.
117
+ * tested on 0.9.7d.
118
+ */
119
+ int
120
+ EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in)
121
+ {
122
+ memcpy(out, in, sizeof(EVP_CIPHER_CTX));
123
+
124
+ #if defined(HAVE_ENGINE_ADD) && defined(HAVE_ST_ENGINE)
125
+ if (in->engine) ENGINE_add(out->engine);
126
+ if (in->cipher_data) {
127
+ out->cipher_data = OPENSSL_malloc(in->cipher->ctx_size);
128
+ memcpy(out->cipher_data, in->cipher_data, in->cipher->ctx_size);
129
+ }
130
+ #endif
131
+
132
+ return 1;
133
+ }
134
+ #endif
135
+
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)
159
+ int
160
+ X509_CRL_sort(X509_CRL *c)
161
+ {
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
174
+
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
+ }
183
+
184
+ int
185
+ X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)
186
+ {
187
+ X509_CRL_INFO *inf;
188
+
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
+ return 1;
195
+ }
196
+ #endif
197
+
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
206
+
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
+ int
218
+ BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx)
219
+ {
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);
260
+ }
261
+
262
+ return 1;
263
+ }
264
+ #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
+ #endif
273
+
274
+ #if !defined(HAVE_BN_PSEUDO_RAND_RANGE)
275
+ int
276
+ BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range)
277
+ {
278
+ return bn_rand_range(1, r, range);
279
+ }
280
+ #endif
281
+
282
+ #if !defined(HAVE_CONF_GET1_DEFAULT_CONFIG_FILE)
283
+ #define OPENSSL_CONF "openssl.cnf"
284
+ char *
285
+ CONF_get1_default_config_file(void)
286
+ {
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;
306
+ }
307
+ #endif
308
+
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)
313
+ {
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;
341
+ }
342
+ #endif
343
+