zig_example 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/ext/mkmf.rb +2734 -0
  3. data/ext/openssl/openssl_missing.c +40 -0
  4. data/ext/openssl/openssl_missing.h +238 -0
  5. data/ext/openssl/ossl.c +1295 -0
  6. data/ext/openssl/ossl.h +201 -0
  7. data/ext/openssl/ossl_asn1.c +1891 -0
  8. data/ext/openssl/ossl_asn1.h +62 -0
  9. data/ext/openssl/ossl_bio.c +42 -0
  10. data/ext/openssl/ossl_bio.h +16 -0
  11. data/ext/openssl/ossl_bn.c +1344 -0
  12. data/ext/openssl/ossl_bn.h +26 -0
  13. data/ext/openssl/ossl_cipher.c +1074 -0
  14. data/ext/openssl/ossl_cipher.h +20 -0
  15. data/ext/openssl/ossl_config.c +460 -0
  16. data/ext/openssl/ossl_config.h +16 -0
  17. data/ext/openssl/ossl_digest.c +425 -0
  18. data/ext/openssl/ossl_digest.h +20 -0
  19. data/ext/openssl/ossl_engine.c +568 -0
  20. data/ext/openssl/ossl_engine.h +19 -0
  21. data/ext/openssl/ossl_hmac.c +310 -0
  22. data/ext/openssl/ossl_hmac.h +18 -0
  23. data/ext/openssl/ossl_kdf.c +311 -0
  24. data/ext/openssl/ossl_kdf.h +6 -0
  25. data/ext/openssl/ossl_ns_spki.c +405 -0
  26. data/ext/openssl/ossl_ns_spki.h +19 -0
  27. data/ext/openssl/ossl_ocsp.c +1965 -0
  28. data/ext/openssl/ossl_ocsp.h +23 -0
  29. data/ext/openssl/ossl_pkcs12.c +275 -0
  30. data/ext/openssl/ossl_pkcs12.h +13 -0
  31. data/ext/openssl/ossl_pkcs7.c +1081 -0
  32. data/ext/openssl/ossl_pkcs7.h +36 -0
  33. data/ext/openssl/ossl_pkey.c +1624 -0
  34. data/ext/openssl/ossl_pkey.h +204 -0
  35. data/ext/openssl/ossl_pkey_dh.c +440 -0
  36. data/ext/openssl/ossl_pkey_dsa.c +359 -0
  37. data/ext/openssl/ossl_pkey_ec.c +1655 -0
  38. data/ext/openssl/ossl_pkey_rsa.c +579 -0
  39. data/ext/openssl/ossl_rand.c +200 -0
  40. data/ext/openssl/ossl_rand.h +18 -0
  41. data/ext/openssl/ossl_ssl.c +3142 -0
  42. data/ext/openssl/ossl_ssl.h +36 -0
  43. data/ext/openssl/ossl_ssl_session.c +331 -0
  44. data/ext/openssl/ossl_ts.c +1539 -0
  45. data/ext/openssl/ossl_ts.h +16 -0
  46. data/ext/openssl/ossl_x509.c +256 -0
  47. data/ext/openssl/ossl_x509.h +115 -0
  48. data/ext/openssl/ossl_x509attr.c +324 -0
  49. data/ext/openssl/ossl_x509cert.c +1002 -0
  50. data/ext/openssl/ossl_x509crl.c +545 -0
  51. data/ext/openssl/ossl_x509ext.c +490 -0
  52. data/ext/openssl/ossl_x509name.c +597 -0
  53. data/ext/openssl/ossl_x509req.c +444 -0
  54. data/ext/openssl/ossl_x509revoked.c +300 -0
  55. data/ext/openssl/ossl_x509store.c +986 -0
  56. data/ext/zigrb_100doors/build.zig +0 -12
  57. data/ext/zigrb_100doors/extconf.rb +2 -19
  58. data/ext/zigrb_ackermann/build.zig +0 -12
  59. data/ext/zigrb_ackermann/extconf.rb +2 -19
  60. data/ext/zigrb_lucas_lehmer/build.zig +0 -12
  61. data/ext/zigrb_lucas_lehmer/extconf.rb +2 -19
  62. data/lib/zig_example/version.rb +1 -1
  63. metadata +56 -2
@@ -0,0 +1,23 @@
1
+ /*
2
+ * 'OpenSSL for Ruby' project
3
+ * Copyright (C) 2003 Michal Rokos <m.rokos@sh.cvut.cz>
4
+ * Copyright (C) 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
5
+ * All rights reserved.
6
+ */
7
+ /*
8
+ * This program is licensed under the same licence as Ruby.
9
+ * (See the file 'LICENCE'.)
10
+ */
11
+ #if !defined(_OSSL_OCSP_H_)
12
+ #define _OSSL_OCSP_H_
13
+
14
+ #if !defined(OPENSSL_NO_OCSP)
15
+ extern VALUE mOCSP;
16
+ extern VALUE cOCSPReq;
17
+ extern VALUE cOCSPRes;
18
+ extern VALUE cOCSPBasicRes;
19
+ #endif
20
+
21
+ void Init_ossl_ocsp(void);
22
+
23
+ #endif /* _OSSL_OCSP_H_ */
@@ -0,0 +1,275 @@
1
+ /*
2
+ * This program is licensed under the same licence as Ruby.
3
+ * (See the file 'LICENCE'.)
4
+ */
5
+ #include "ossl.h"
6
+
7
+ #define NewPKCS12(klass) \
8
+ TypedData_Wrap_Struct((klass), &ossl_pkcs12_type, 0)
9
+
10
+ #define SetPKCS12(obj, p12) do { \
11
+ if(!(p12)) ossl_raise(rb_eRuntimeError, "PKCS12 wasn't initialized."); \
12
+ RTYPEDDATA_DATA(obj) = (p12); \
13
+ } while (0)
14
+
15
+ #define GetPKCS12(obj, p12) do { \
16
+ TypedData_Get_Struct((obj), PKCS12, &ossl_pkcs12_type, (p12)); \
17
+ if(!(p12)) ossl_raise(rb_eRuntimeError, "PKCS12 wasn't initialized."); \
18
+ } while (0)
19
+
20
+ #define ossl_pkcs12_set_key(o,v) rb_iv_set((o), "@key", (v))
21
+ #define ossl_pkcs12_set_cert(o,v) rb_iv_set((o), "@certificate", (v))
22
+ #define ossl_pkcs12_set_ca_certs(o,v) rb_iv_set((o), "@ca_certs", (v))
23
+ #define ossl_pkcs12_get_key(o) rb_iv_get((o), "@key")
24
+ #define ossl_pkcs12_get_cert(o) rb_iv_get((o), "@certificate")
25
+ #define ossl_pkcs12_get_ca_certs(o) rb_iv_get((o), "@ca_certs")
26
+
27
+ /*
28
+ * Classes
29
+ */
30
+ VALUE cPKCS12;
31
+ VALUE ePKCS12Error;
32
+
33
+ /*
34
+ * Private
35
+ */
36
+ static void
37
+ ossl_pkcs12_free(void *ptr)
38
+ {
39
+ PKCS12_free(ptr);
40
+ }
41
+
42
+ static const rb_data_type_t ossl_pkcs12_type = {
43
+ "OpenSSL/PKCS12",
44
+ {
45
+ 0, ossl_pkcs12_free,
46
+ },
47
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
48
+ };
49
+
50
+ static VALUE
51
+ ossl_pkcs12_s_allocate(VALUE klass)
52
+ {
53
+ PKCS12 *p12;
54
+ VALUE obj;
55
+
56
+ obj = NewPKCS12(klass);
57
+ if(!(p12 = PKCS12_new())) ossl_raise(ePKCS12Error, NULL);
58
+ SetPKCS12(obj, p12);
59
+
60
+ return obj;
61
+ }
62
+
63
+ static VALUE
64
+ ossl_pkcs12_initialize_copy(VALUE self, VALUE other)
65
+ {
66
+ PKCS12 *p12, *p12_old, *p12_new;
67
+
68
+ rb_check_frozen(self);
69
+ GetPKCS12(self, p12_old);
70
+ GetPKCS12(other, p12);
71
+
72
+ p12_new = ASN1_dup((i2d_of_void *)i2d_PKCS12, (d2i_of_void *)d2i_PKCS12, (char *)p12);
73
+ if (!p12_new)
74
+ ossl_raise(ePKCS12Error, "ASN1_dup");
75
+
76
+ SetPKCS12(self, p12_new);
77
+ PKCS12_free(p12_old);
78
+
79
+ return self;
80
+ }
81
+
82
+ /*
83
+ * call-seq:
84
+ * PKCS12.create(pass, name, key, cert [, ca, [, key_pbe [, cert_pbe [, key_iter [, mac_iter [, keytype]]]]]])
85
+ *
86
+ * === Parameters
87
+ * * _pass_ - string
88
+ * * _name_ - A string describing the key.
89
+ * * _key_ - Any PKey.
90
+ * * _cert_ - A X509::Certificate.
91
+ * * The public_key portion of the certificate must contain a valid public key.
92
+ * * The not_before and not_after fields must be filled in.
93
+ * * _ca_ - An optional array of X509::Certificate's.
94
+ * * _key_pbe_ - string
95
+ * * _cert_pbe_ - string
96
+ * * _key_iter_ - integer
97
+ * * _mac_iter_ - integer
98
+ * * _keytype_ - An integer representing an MSIE specific extension.
99
+ *
100
+ * Any optional arguments may be supplied as +nil+ to preserve the OpenSSL defaults.
101
+ *
102
+ * See the OpenSSL documentation for PKCS12_create().
103
+ */
104
+ static VALUE
105
+ ossl_pkcs12_s_create(int argc, VALUE *argv, VALUE self)
106
+ {
107
+ VALUE pass, name, pkey, cert, ca, key_nid, cert_nid, key_iter, mac_iter, keytype;
108
+ VALUE obj;
109
+ char *passphrase, *friendlyname;
110
+ EVP_PKEY *key;
111
+ X509 *x509;
112
+ STACK_OF(X509) *x509s;
113
+ int nkey = 0, ncert = 0, kiter = 0, miter = 0, ktype = 0;
114
+ PKCS12 *p12;
115
+
116
+ rb_scan_args(argc, argv, "46", &pass, &name, &pkey, &cert, &ca, &key_nid, &cert_nid, &key_iter, &mac_iter, &keytype);
117
+ passphrase = NIL_P(pass) ? NULL : StringValueCStr(pass);
118
+ friendlyname = NIL_P(name) ? NULL : StringValueCStr(name);
119
+ key = GetPKeyPtr(pkey);
120
+ x509 = GetX509CertPtr(cert);
121
+ /* TODO: make a VALUE to nid function */
122
+ if (!NIL_P(key_nid)) {
123
+ if ((nkey = OBJ_txt2nid(StringValueCStr(key_nid))) == NID_undef)
124
+ ossl_raise(rb_eArgError, "Unknown PBE algorithm %"PRIsVALUE, key_nid);
125
+ }
126
+ if (!NIL_P(cert_nid)) {
127
+ if ((ncert = OBJ_txt2nid(StringValueCStr(cert_nid))) == NID_undef)
128
+ ossl_raise(rb_eArgError, "Unknown PBE algorithm %"PRIsVALUE, cert_nid);
129
+ }
130
+ if (!NIL_P(key_iter))
131
+ kiter = NUM2INT(key_iter);
132
+ if (!NIL_P(mac_iter))
133
+ miter = NUM2INT(mac_iter);
134
+ if (!NIL_P(keytype))
135
+ ktype = NUM2INT(keytype);
136
+
137
+ obj = NewPKCS12(cPKCS12);
138
+ x509s = NIL_P(ca) ? NULL : ossl_x509_ary2sk(ca);
139
+ p12 = PKCS12_create(passphrase, friendlyname, key, x509, x509s,
140
+ nkey, ncert, kiter, miter, ktype);
141
+ sk_X509_pop_free(x509s, X509_free);
142
+ if(!p12) ossl_raise(ePKCS12Error, NULL);
143
+ SetPKCS12(obj, p12);
144
+
145
+ ossl_pkcs12_set_key(obj, pkey);
146
+ ossl_pkcs12_set_cert(obj, cert);
147
+ ossl_pkcs12_set_ca_certs(obj, ca);
148
+
149
+ return obj;
150
+ }
151
+
152
+ static VALUE
153
+ ossl_pkey_new_i(VALUE arg)
154
+ {
155
+ return ossl_pkey_new((EVP_PKEY *)arg);
156
+ }
157
+
158
+ static VALUE
159
+ ossl_x509_new_i(VALUE arg)
160
+ {
161
+ return ossl_x509_new((X509 *)arg);
162
+ }
163
+
164
+ static VALUE
165
+ ossl_x509_sk2ary_i(VALUE arg)
166
+ {
167
+ return ossl_x509_sk2ary((STACK_OF(X509) *)arg);
168
+ }
169
+
170
+ /*
171
+ * call-seq:
172
+ * PKCS12.new -> pkcs12
173
+ * PKCS12.new(str) -> pkcs12
174
+ * PKCS12.new(str, pass) -> pkcs12
175
+ *
176
+ * === Parameters
177
+ * * _str_ - Must be a DER encoded PKCS12 string.
178
+ * * _pass_ - string
179
+ */
180
+ static VALUE
181
+ ossl_pkcs12_initialize(int argc, VALUE *argv, VALUE self)
182
+ {
183
+ BIO *in;
184
+ VALUE arg, pass, pkey, cert, ca;
185
+ char *passphrase;
186
+ EVP_PKEY *key;
187
+ X509 *x509;
188
+ STACK_OF(X509) *x509s = NULL;
189
+ int st = 0;
190
+ PKCS12 *pkcs = DATA_PTR(self);
191
+
192
+ if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) return self;
193
+ passphrase = NIL_P(pass) ? NULL : StringValueCStr(pass);
194
+ in = ossl_obj2bio(&arg);
195
+ d2i_PKCS12_bio(in, &pkcs);
196
+ DATA_PTR(self) = pkcs;
197
+ BIO_free(in);
198
+
199
+ pkey = cert = ca = Qnil;
200
+ /* OpenSSL's bug; PKCS12_parse() puts errors even if it succeeds.
201
+ * Fixed in OpenSSL 1.0.0t, 1.0.1p, 1.0.2d */
202
+ ERR_set_mark();
203
+ if(!PKCS12_parse(pkcs, passphrase, &key, &x509, &x509s))
204
+ ossl_raise(ePKCS12Error, "PKCS12_parse");
205
+ ERR_pop_to_mark();
206
+ if (key) {
207
+ pkey = rb_protect(ossl_pkey_new_i, (VALUE)key, &st);
208
+ if (st) goto err;
209
+ }
210
+ if (x509) {
211
+ cert = rb_protect(ossl_x509_new_i, (VALUE)x509, &st);
212
+ if (st) goto err;
213
+ }
214
+ if (x509s) {
215
+ ca = rb_protect(ossl_x509_sk2ary_i, (VALUE)x509s, &st);
216
+ if (st) goto err;
217
+ }
218
+
219
+ err:
220
+ X509_free(x509);
221
+ sk_X509_pop_free(x509s, X509_free);
222
+ ossl_pkcs12_set_key(self, pkey);
223
+ ossl_pkcs12_set_cert(self, cert);
224
+ ossl_pkcs12_set_ca_certs(self, ca);
225
+ if(st) rb_jump_tag(st);
226
+
227
+ return self;
228
+ }
229
+
230
+ static VALUE
231
+ ossl_pkcs12_to_der(VALUE self)
232
+ {
233
+ PKCS12 *p12;
234
+ VALUE str;
235
+ long len;
236
+ unsigned char *p;
237
+
238
+ GetPKCS12(self, p12);
239
+ if((len = i2d_PKCS12(p12, NULL)) <= 0)
240
+ ossl_raise(ePKCS12Error, NULL);
241
+ str = rb_str_new(0, len);
242
+ p = (unsigned char *)RSTRING_PTR(str);
243
+ if(i2d_PKCS12(p12, &p) <= 0)
244
+ ossl_raise(ePKCS12Error, NULL);
245
+ ossl_str_adjust(str, p);
246
+
247
+ return str;
248
+ }
249
+
250
+ void
251
+ Init_ossl_pkcs12(void)
252
+ {
253
+ #undef rb_intern
254
+ #if 0
255
+ mOSSL = rb_define_module("OpenSSL");
256
+ eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
257
+ #endif
258
+
259
+ /*
260
+ * Defines a file format commonly used to store private keys with
261
+ * accompanying public key certificates, protected with a password-based
262
+ * symmetric key.
263
+ */
264
+ cPKCS12 = rb_define_class_under(mOSSL, "PKCS12", rb_cObject);
265
+ ePKCS12Error = rb_define_class_under(cPKCS12, "PKCS12Error", eOSSLError);
266
+ rb_define_singleton_method(cPKCS12, "create", ossl_pkcs12_s_create, -1);
267
+
268
+ rb_define_alloc_func(cPKCS12, ossl_pkcs12_s_allocate);
269
+ rb_define_method(cPKCS12, "initialize_copy", ossl_pkcs12_initialize_copy, 1);
270
+ rb_attr(cPKCS12, rb_intern("key"), 1, 0, Qfalse);
271
+ rb_attr(cPKCS12, rb_intern("certificate"), 1, 0, Qfalse);
272
+ rb_attr(cPKCS12, rb_intern("ca_certs"), 1, 0, Qfalse);
273
+ rb_define_method(cPKCS12, "initialize", ossl_pkcs12_initialize, -1);
274
+ rb_define_method(cPKCS12, "to_der", ossl_pkcs12_to_der, 0);
275
+ }
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This program is licensed under the same licence as Ruby.
3
+ * (See the file 'LICENCE'.)
4
+ */
5
+ #if !defined(_OSSL_PKCS12_H_)
6
+ #define _OSSL_PKCS12_H_
7
+
8
+ extern VALUE cPKCS12;
9
+ extern VALUE ePKCS12Error;
10
+
11
+ void Init_ossl_pkcs12(void);
12
+
13
+ #endif /* _OSSL_PKCS12_H_ */