openssl-custom 2.2.2

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 (75) hide show
  1. checksums.yaml +7 -0
  2. data/BSDL +22 -0
  3. data/CONTRIBUTING.md +132 -0
  4. data/History.md +485 -0
  5. data/LICENSE.txt +56 -0
  6. data/README.md +66 -0
  7. data/ext/openssl/extconf.rb +190 -0
  8. data/ext/openssl/openssl_missing.c +106 -0
  9. data/ext/openssl/openssl_missing.h +257 -0
  10. data/ext/openssl/ossl.c +1282 -0
  11. data/ext/openssl/ossl.h +181 -0
  12. data/ext/openssl/ossl_asn1.c +1878 -0
  13. data/ext/openssl/ossl_asn1.h +62 -0
  14. data/ext/openssl/ossl_bio.c +42 -0
  15. data/ext/openssl/ossl_bio.h +16 -0
  16. data/ext/openssl/ossl_bn.c +1270 -0
  17. data/ext/openssl/ossl_bn.h +26 -0
  18. data/ext/openssl/ossl_cipher.c +1075 -0
  19. data/ext/openssl/ossl_cipher.h +20 -0
  20. data/ext/openssl/ossl_config.c +89 -0
  21. data/ext/openssl/ossl_config.h +19 -0
  22. data/ext/openssl/ossl_digest.c +425 -0
  23. data/ext/openssl/ossl_digest.h +20 -0
  24. data/ext/openssl/ossl_engine.c +567 -0
  25. data/ext/openssl/ossl_engine.h +19 -0
  26. data/ext/openssl/ossl_hmac.c +389 -0
  27. data/ext/openssl/ossl_hmac.h +18 -0
  28. data/ext/openssl/ossl_kdf.c +303 -0
  29. data/ext/openssl/ossl_kdf.h +6 -0
  30. data/ext/openssl/ossl_ns_spki.c +405 -0
  31. data/ext/openssl/ossl_ns_spki.h +19 -0
  32. data/ext/openssl/ossl_ocsp.c +2013 -0
  33. data/ext/openssl/ossl_ocsp.h +23 -0
  34. data/ext/openssl/ossl_pkcs12.c +257 -0
  35. data/ext/openssl/ossl_pkcs12.h +13 -0
  36. data/ext/openssl/ossl_pkcs7.c +1098 -0
  37. data/ext/openssl/ossl_pkcs7.h +36 -0
  38. data/ext/openssl/ossl_pkey.c +673 -0
  39. data/ext/openssl/ossl_pkey.h +241 -0
  40. data/ext/openssl/ossl_pkey_dh.c +650 -0
  41. data/ext/openssl/ossl_pkey_dsa.c +664 -0
  42. data/ext/openssl/ossl_pkey_ec.c +1827 -0
  43. data/ext/openssl/ossl_pkey_rsa.c +966 -0
  44. data/ext/openssl/ossl_rand.c +200 -0
  45. data/ext/openssl/ossl_rand.h +18 -0
  46. data/ext/openssl/ossl_ssl.c +3080 -0
  47. data/ext/openssl/ossl_ssl.h +36 -0
  48. data/ext/openssl/ossl_ssl_session.c +332 -0
  49. data/ext/openssl/ossl_ts.c +1524 -0
  50. data/ext/openssl/ossl_ts.h +16 -0
  51. data/ext/openssl/ossl_x509.c +262 -0
  52. data/ext/openssl/ossl_x509.h +115 -0
  53. data/ext/openssl/ossl_x509attr.c +324 -0
  54. data/ext/openssl/ossl_x509cert.c +846 -0
  55. data/ext/openssl/ossl_x509crl.c +542 -0
  56. data/ext/openssl/ossl_x509ext.c +491 -0
  57. data/ext/openssl/ossl_x509name.c +590 -0
  58. data/ext/openssl/ossl_x509req.c +441 -0
  59. data/ext/openssl/ossl_x509revoked.c +300 -0
  60. data/ext/openssl/ossl_x509store.c +902 -0
  61. data/ext/openssl/ruby_missing.h +24 -0
  62. data/lib/openssl/bn.rb +40 -0
  63. data/lib/openssl/buffering.rb +478 -0
  64. data/lib/openssl/cipher.rb +67 -0
  65. data/lib/openssl/config.rb +501 -0
  66. data/lib/openssl/digest.rb +73 -0
  67. data/lib/openssl/hmac.rb +13 -0
  68. data/lib/openssl/marshal.rb +30 -0
  69. data/lib/openssl/pkcs5.rb +22 -0
  70. data/lib/openssl/pkey.rb +42 -0
  71. data/lib/openssl/ssl.rb +542 -0
  72. data/lib/openssl/version.rb +5 -0
  73. data/lib/openssl/x509.rb +369 -0
  74. data/lib/openssl.rb +38 -0
  75. metadata +196 -0
@@ -0,0 +1,542 @@
1
+ /*
2
+ * 'OpenSSL for Ruby' project
3
+ * Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
4
+ * All rights reserved.
5
+ */
6
+ /*
7
+ * This program is licensed under the same licence as Ruby.
8
+ * (See the file 'LICENCE'.)
9
+ */
10
+ #include "ossl.h"
11
+
12
+ #define NewX509CRL(klass) \
13
+ TypedData_Wrap_Struct((klass), &ossl_x509crl_type, 0)
14
+ #define SetX509CRL(obj, crl) do { \
15
+ if (!(crl)) { \
16
+ ossl_raise(rb_eRuntimeError, "CRL wasn't initialized!"); \
17
+ } \
18
+ RTYPEDDATA_DATA(obj) = (crl); \
19
+ } while (0)
20
+ #define GetX509CRL(obj, crl) do { \
21
+ TypedData_Get_Struct((obj), X509_CRL, &ossl_x509crl_type, (crl)); \
22
+ if (!(crl)) { \
23
+ ossl_raise(rb_eRuntimeError, "CRL wasn't initialized!"); \
24
+ } \
25
+ } while (0)
26
+
27
+ /*
28
+ * Classes
29
+ */
30
+ VALUE cX509CRL;
31
+ VALUE eX509CRLError;
32
+
33
+ static void
34
+ ossl_x509crl_free(void *ptr)
35
+ {
36
+ X509_CRL_free(ptr);
37
+ }
38
+
39
+ static const rb_data_type_t ossl_x509crl_type = {
40
+ "OpenSSL/X509/CRL",
41
+ {
42
+ 0, ossl_x509crl_free,
43
+ },
44
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
45
+ };
46
+
47
+ /*
48
+ * PUBLIC
49
+ */
50
+ X509_CRL *
51
+ GetX509CRLPtr(VALUE obj)
52
+ {
53
+ X509_CRL *crl;
54
+
55
+ GetX509CRL(obj, crl);
56
+
57
+ return crl;
58
+ }
59
+
60
+ VALUE
61
+ ossl_x509crl_new(X509_CRL *crl)
62
+ {
63
+ X509_CRL *tmp;
64
+ VALUE obj;
65
+
66
+ obj = NewX509CRL(cX509CRL);
67
+ tmp = crl ? X509_CRL_dup(crl) : X509_CRL_new();
68
+ if(!tmp) ossl_raise(eX509CRLError, NULL);
69
+ SetX509CRL(obj, tmp);
70
+
71
+ return obj;
72
+ }
73
+
74
+ /*
75
+ * PRIVATE
76
+ */
77
+ static VALUE
78
+ ossl_x509crl_alloc(VALUE klass)
79
+ {
80
+ X509_CRL *crl;
81
+ VALUE obj;
82
+
83
+ obj = NewX509CRL(klass);
84
+ if (!(crl = X509_CRL_new())) {
85
+ ossl_raise(eX509CRLError, NULL);
86
+ }
87
+ SetX509CRL(obj, crl);
88
+
89
+ return obj;
90
+ }
91
+
92
+ static VALUE
93
+ ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self)
94
+ {
95
+ BIO *in;
96
+ X509_CRL *crl, *x = DATA_PTR(self);
97
+ VALUE arg;
98
+
99
+ if (rb_scan_args(argc, argv, "01", &arg) == 0) {
100
+ return self;
101
+ }
102
+ arg = ossl_to_der_if_possible(arg);
103
+ in = ossl_obj2bio(&arg);
104
+ crl = PEM_read_bio_X509_CRL(in, &x, NULL, NULL);
105
+ DATA_PTR(self) = x;
106
+ if (!crl) {
107
+ OSSL_BIO_reset(in);
108
+ crl = d2i_X509_CRL_bio(in, &x);
109
+ DATA_PTR(self) = x;
110
+ }
111
+ BIO_free(in);
112
+ if (!crl) ossl_raise(eX509CRLError, NULL);
113
+
114
+ return self;
115
+ }
116
+
117
+ static VALUE
118
+ ossl_x509crl_copy(VALUE self, VALUE other)
119
+ {
120
+ X509_CRL *a, *b, *crl;
121
+
122
+ rb_check_frozen(self);
123
+ if (self == other) return self;
124
+ GetX509CRL(self, a);
125
+ GetX509CRL(other, b);
126
+ if (!(crl = X509_CRL_dup(b))) {
127
+ ossl_raise(eX509CRLError, NULL);
128
+ }
129
+ X509_CRL_free(a);
130
+ DATA_PTR(self) = crl;
131
+
132
+ return self;
133
+ }
134
+
135
+ static VALUE
136
+ ossl_x509crl_get_version(VALUE self)
137
+ {
138
+ X509_CRL *crl;
139
+ long ver;
140
+
141
+ GetX509CRL(self, crl);
142
+ ver = X509_CRL_get_version(crl);
143
+
144
+ return LONG2NUM(ver);
145
+ }
146
+
147
+ static VALUE
148
+ ossl_x509crl_set_version(VALUE self, VALUE version)
149
+ {
150
+ X509_CRL *crl;
151
+ long ver;
152
+
153
+ if ((ver = NUM2LONG(version)) < 0) {
154
+ ossl_raise(eX509CRLError, "version must be >= 0!");
155
+ }
156
+ GetX509CRL(self, crl);
157
+ if (!X509_CRL_set_version(crl, ver)) {
158
+ ossl_raise(eX509CRLError, NULL);
159
+ }
160
+
161
+ return version;
162
+ }
163
+
164
+ static VALUE
165
+ ossl_x509crl_get_signature_algorithm(VALUE self)
166
+ {
167
+ X509_CRL *crl;
168
+ const X509_ALGOR *alg;
169
+ BIO *out;
170
+
171
+ GetX509CRL(self, crl);
172
+ if (!(out = BIO_new(BIO_s_mem()))) {
173
+ ossl_raise(eX509CRLError, NULL);
174
+ }
175
+ X509_CRL_get0_signature(crl, NULL, &alg);
176
+ if (!i2a_ASN1_OBJECT(out, alg->algorithm)) {
177
+ BIO_free(out);
178
+ ossl_raise(eX509CRLError, NULL);
179
+ }
180
+
181
+ return ossl_membio2str(out);
182
+ }
183
+
184
+ static VALUE
185
+ ossl_x509crl_get_issuer(VALUE self)
186
+ {
187
+ X509_CRL *crl;
188
+
189
+ GetX509CRL(self, crl);
190
+
191
+ return ossl_x509name_new(X509_CRL_get_issuer(crl)); /* NO DUP - don't free */
192
+ }
193
+
194
+ static VALUE
195
+ ossl_x509crl_set_issuer(VALUE self, VALUE issuer)
196
+ {
197
+ X509_CRL *crl;
198
+
199
+ GetX509CRL(self, crl);
200
+
201
+ if (!X509_CRL_set_issuer_name(crl, GetX509NamePtr(issuer))) { /* DUPs name */
202
+ ossl_raise(eX509CRLError, NULL);
203
+ }
204
+ return issuer;
205
+ }
206
+
207
+ static VALUE
208
+ ossl_x509crl_get_last_update(VALUE self)
209
+ {
210
+ X509_CRL *crl;
211
+ const ASN1_TIME *time;
212
+
213
+ GetX509CRL(self, crl);
214
+ time = X509_CRL_get0_lastUpdate(crl);
215
+ if (!time)
216
+ return Qnil;
217
+
218
+ return asn1time_to_time(time);
219
+ }
220
+
221
+ static VALUE
222
+ ossl_x509crl_set_last_update(VALUE self, VALUE time)
223
+ {
224
+ X509_CRL *crl;
225
+ ASN1_TIME *asn1time;
226
+
227
+ GetX509CRL(self, crl);
228
+ asn1time = ossl_x509_time_adjust(NULL, time);
229
+ if (!X509_CRL_set1_lastUpdate(crl, asn1time)) {
230
+ ASN1_TIME_free(asn1time);
231
+ ossl_raise(eX509CRLError, "X509_CRL_set_lastUpdate");
232
+ }
233
+ ASN1_TIME_free(asn1time);
234
+
235
+ return time;
236
+ }
237
+
238
+ static VALUE
239
+ ossl_x509crl_get_next_update(VALUE self)
240
+ {
241
+ X509_CRL *crl;
242
+ const ASN1_TIME *time;
243
+
244
+ GetX509CRL(self, crl);
245
+ time = X509_CRL_get0_nextUpdate(crl);
246
+ if (!time)
247
+ return Qnil;
248
+
249
+ return asn1time_to_time(time);
250
+ }
251
+
252
+ static VALUE
253
+ ossl_x509crl_set_next_update(VALUE self, VALUE time)
254
+ {
255
+ X509_CRL *crl;
256
+ ASN1_TIME *asn1time;
257
+
258
+ GetX509CRL(self, crl);
259
+ asn1time = ossl_x509_time_adjust(NULL, time);
260
+ if (!X509_CRL_set1_nextUpdate(crl, asn1time)) {
261
+ ASN1_TIME_free(asn1time);
262
+ ossl_raise(eX509CRLError, "X509_CRL_set_nextUpdate");
263
+ }
264
+ ASN1_TIME_free(asn1time);
265
+
266
+ return time;
267
+ }
268
+
269
+ static VALUE
270
+ ossl_x509crl_get_revoked(VALUE self)
271
+ {
272
+ X509_CRL *crl;
273
+ int i, num;
274
+ X509_REVOKED *rev;
275
+ VALUE ary, revoked;
276
+
277
+ GetX509CRL(self, crl);
278
+ num = sk_X509_REVOKED_num(X509_CRL_get_REVOKED(crl));
279
+ if (num < 0) {
280
+ OSSL_Debug("num < 0???");
281
+ return rb_ary_new();
282
+ }
283
+ ary = rb_ary_new2(num);
284
+ for(i=0; i<num; i++) {
285
+ /* NO DUP - don't free! */
286
+ rev = sk_X509_REVOKED_value(X509_CRL_get_REVOKED(crl), i);
287
+ revoked = ossl_x509revoked_new(rev);
288
+ rb_ary_push(ary, revoked);
289
+ }
290
+
291
+ return ary;
292
+ }
293
+
294
+ static VALUE
295
+ ossl_x509crl_set_revoked(VALUE self, VALUE ary)
296
+ {
297
+ X509_CRL *crl;
298
+ X509_REVOKED *rev;
299
+ STACK_OF(X509_REVOKED) *sk;
300
+ long i;
301
+
302
+ Check_Type(ary, T_ARRAY);
303
+ /* All ary members should be X509 Revoked */
304
+ for (i=0; i<RARRAY_LEN(ary); i++) {
305
+ OSSL_Check_Kind(RARRAY_AREF(ary, i), cX509Rev);
306
+ }
307
+ GetX509CRL(self, crl);
308
+ if ((sk = X509_CRL_get_REVOKED(crl))) {
309
+ while ((rev = sk_X509_REVOKED_pop(sk)))
310
+ X509_REVOKED_free(rev);
311
+ }
312
+ for (i=0; i<RARRAY_LEN(ary); i++) {
313
+ rev = DupX509RevokedPtr(RARRAY_AREF(ary, i));
314
+ if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */
315
+ X509_REVOKED_free(rev);
316
+ ossl_raise(eX509CRLError, "X509_CRL_add0_revoked");
317
+ }
318
+ }
319
+ X509_CRL_sort(crl);
320
+
321
+ return ary;
322
+ }
323
+
324
+ static VALUE
325
+ ossl_x509crl_add_revoked(VALUE self, VALUE revoked)
326
+ {
327
+ X509_CRL *crl;
328
+ X509_REVOKED *rev;
329
+
330
+ GetX509CRL(self, crl);
331
+ rev = DupX509RevokedPtr(revoked);
332
+ if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */
333
+ X509_REVOKED_free(rev);
334
+ ossl_raise(eX509CRLError, "X509_CRL_add0_revoked");
335
+ }
336
+ X509_CRL_sort(crl);
337
+
338
+ return revoked;
339
+ }
340
+
341
+ static VALUE
342
+ ossl_x509crl_sign(VALUE self, VALUE key, VALUE digest)
343
+ {
344
+ X509_CRL *crl;
345
+ EVP_PKEY *pkey;
346
+ const EVP_MD *md;
347
+
348
+ GetX509CRL(self, crl);
349
+ pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
350
+ md = ossl_evp_get_digestbyname(digest);
351
+ if (!X509_CRL_sign(crl, pkey, md)) {
352
+ ossl_raise(eX509CRLError, NULL);
353
+ }
354
+
355
+ return self;
356
+ }
357
+
358
+ static VALUE
359
+ ossl_x509crl_verify(VALUE self, VALUE key)
360
+ {
361
+ X509_CRL *crl;
362
+ EVP_PKEY *pkey;
363
+
364
+ GetX509CRL(self, crl);
365
+ pkey = GetPKeyPtr(key);
366
+ ossl_pkey_check_public_key(pkey);
367
+ switch (X509_CRL_verify(crl, pkey)) {
368
+ case 1:
369
+ return Qtrue;
370
+ case 0:
371
+ ossl_clear_error();
372
+ return Qfalse;
373
+ default:
374
+ ossl_raise(eX509CRLError, NULL);
375
+ }
376
+ }
377
+
378
+ static VALUE
379
+ ossl_x509crl_to_der(VALUE self)
380
+ {
381
+ X509_CRL *crl;
382
+ BIO *out;
383
+
384
+ GetX509CRL(self, crl);
385
+ if (!(out = BIO_new(BIO_s_mem()))) {
386
+ ossl_raise(eX509CRLError, NULL);
387
+ }
388
+ if (!i2d_X509_CRL_bio(out, crl)) {
389
+ BIO_free(out);
390
+ ossl_raise(eX509CRLError, NULL);
391
+ }
392
+
393
+ return ossl_membio2str(out);
394
+ }
395
+
396
+ static VALUE
397
+ ossl_x509crl_to_pem(VALUE self)
398
+ {
399
+ X509_CRL *crl;
400
+ BIO *out;
401
+
402
+ GetX509CRL(self, crl);
403
+ if (!(out = BIO_new(BIO_s_mem()))) {
404
+ ossl_raise(eX509CRLError, NULL);
405
+ }
406
+ if (!PEM_write_bio_X509_CRL(out, crl)) {
407
+ BIO_free(out);
408
+ ossl_raise(eX509CRLError, NULL);
409
+ }
410
+
411
+ return ossl_membio2str(out);
412
+ }
413
+
414
+ static VALUE
415
+ ossl_x509crl_to_text(VALUE self)
416
+ {
417
+ X509_CRL *crl;
418
+ BIO *out;
419
+
420
+ GetX509CRL(self, crl);
421
+ if (!(out = BIO_new(BIO_s_mem()))) {
422
+ ossl_raise(eX509CRLError, NULL);
423
+ }
424
+ if (!X509_CRL_print(out, crl)) {
425
+ BIO_free(out);
426
+ ossl_raise(eX509CRLError, NULL);
427
+ }
428
+
429
+ return ossl_membio2str(out);
430
+ }
431
+
432
+ /*
433
+ * Gets X509v3 extensions as array of X509Ext objects
434
+ */
435
+ static VALUE
436
+ ossl_x509crl_get_extensions(VALUE self)
437
+ {
438
+ X509_CRL *crl;
439
+ int count, i;
440
+ X509_EXTENSION *ext;
441
+ VALUE ary;
442
+
443
+ GetX509CRL(self, crl);
444
+ count = X509_CRL_get_ext_count(crl);
445
+ if (count < 0) {
446
+ OSSL_Debug("count < 0???");
447
+ return rb_ary_new();
448
+ }
449
+ ary = rb_ary_new2(count);
450
+ for (i=0; i<count; i++) {
451
+ ext = X509_CRL_get_ext(crl, i); /* NO DUP - don't free! */
452
+ rb_ary_push(ary, ossl_x509ext_new(ext));
453
+ }
454
+
455
+ return ary;
456
+ }
457
+
458
+ /*
459
+ * Sets X509_EXTENSIONs
460
+ */
461
+ static VALUE
462
+ ossl_x509crl_set_extensions(VALUE self, VALUE ary)
463
+ {
464
+ X509_CRL *crl;
465
+ X509_EXTENSION *ext;
466
+ long i;
467
+
468
+ Check_Type(ary, T_ARRAY);
469
+ /* All ary members should be X509 Extensions */
470
+ for (i=0; i<RARRAY_LEN(ary); i++) {
471
+ OSSL_Check_Kind(RARRAY_AREF(ary, i), cX509Ext);
472
+ }
473
+ GetX509CRL(self, crl);
474
+ while ((ext = X509_CRL_delete_ext(crl, 0)))
475
+ X509_EXTENSION_free(ext);
476
+ for (i=0; i<RARRAY_LEN(ary); i++) {
477
+ ext = GetX509ExtPtr(RARRAY_AREF(ary, i)); /* NO NEED TO DUP */
478
+ if (!X509_CRL_add_ext(crl, ext, -1)) {
479
+ ossl_raise(eX509CRLError, NULL);
480
+ }
481
+ }
482
+
483
+ return ary;
484
+ }
485
+
486
+ static VALUE
487
+ ossl_x509crl_add_extension(VALUE self, VALUE extension)
488
+ {
489
+ X509_CRL *crl;
490
+ X509_EXTENSION *ext;
491
+
492
+ GetX509CRL(self, crl);
493
+ ext = GetX509ExtPtr(extension);
494
+ if (!X509_CRL_add_ext(crl, ext, -1)) {
495
+ ossl_raise(eX509CRLError, NULL);
496
+ }
497
+
498
+ return extension;
499
+ }
500
+
501
+ /*
502
+ * INIT
503
+ */
504
+ void
505
+ Init_ossl_x509crl(void)
506
+ {
507
+ #if 0
508
+ mOSSL = rb_define_module("OpenSSL");
509
+ eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
510
+ mX509 = rb_define_module_under(mOSSL, "X509");
511
+ #endif
512
+
513
+ eX509CRLError = rb_define_class_under(mX509, "CRLError", eOSSLError);
514
+
515
+ cX509CRL = rb_define_class_under(mX509, "CRL", rb_cObject);
516
+
517
+ rb_define_alloc_func(cX509CRL, ossl_x509crl_alloc);
518
+ rb_define_method(cX509CRL, "initialize", ossl_x509crl_initialize, -1);
519
+ rb_define_method(cX509CRL, "initialize_copy", ossl_x509crl_copy, 1);
520
+
521
+ rb_define_method(cX509CRL, "version", ossl_x509crl_get_version, 0);
522
+ rb_define_method(cX509CRL, "version=", ossl_x509crl_set_version, 1);
523
+ rb_define_method(cX509CRL, "signature_algorithm", ossl_x509crl_get_signature_algorithm, 0);
524
+ rb_define_method(cX509CRL, "issuer", ossl_x509crl_get_issuer, 0);
525
+ rb_define_method(cX509CRL, "issuer=", ossl_x509crl_set_issuer, 1);
526
+ rb_define_method(cX509CRL, "last_update", ossl_x509crl_get_last_update, 0);
527
+ rb_define_method(cX509CRL, "last_update=", ossl_x509crl_set_last_update, 1);
528
+ rb_define_method(cX509CRL, "next_update", ossl_x509crl_get_next_update, 0);
529
+ rb_define_method(cX509CRL, "next_update=", ossl_x509crl_set_next_update, 1);
530
+ rb_define_method(cX509CRL, "revoked", ossl_x509crl_get_revoked, 0);
531
+ rb_define_method(cX509CRL, "revoked=", ossl_x509crl_set_revoked, 1);
532
+ rb_define_method(cX509CRL, "add_revoked", ossl_x509crl_add_revoked, 1);
533
+ rb_define_method(cX509CRL, "sign", ossl_x509crl_sign, 2);
534
+ rb_define_method(cX509CRL, "verify", ossl_x509crl_verify, 1);
535
+ rb_define_method(cX509CRL, "to_der", ossl_x509crl_to_der, 0);
536
+ rb_define_method(cX509CRL, "to_pem", ossl_x509crl_to_pem, 0);
537
+ rb_define_alias(cX509CRL, "to_s", "to_pem");
538
+ rb_define_method(cX509CRL, "to_text", ossl_x509crl_to_text, 0);
539
+ rb_define_method(cX509CRL, "extensions", ossl_x509crl_get_extensions, 0);
540
+ rb_define_method(cX509CRL, "extensions=", ossl_x509crl_set_extensions, 1);
541
+ rb_define_method(cX509CRL, "add_extension", ossl_x509crl_add_extension, 1);
542
+ }