2 * $Id: ossl_x509revoked.c 11708 2007-02-12 23:01:19Z shyouhei $
3 * 'OpenSSL for Ruby' project
4 * Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
8 * This program is licenced under the same licence as Ruby.
9 * (See the file 'LICENCE'.)
13 #define WrapX509Rev(klass, obj, rev) do { \
15 ossl_raise(rb_eRuntimeError, "REV wasn't initialized!"); \
17 obj = Data_Wrap_Struct(klass, 0, X509_REVOKED_free, rev); \
19 #define GetX509Rev(obj, rev) do { \
20 Data_Get_Struct(obj, X509_REVOKED, rev); \
22 ossl_raise(rb_eRuntimeError, "REV wasn't initialized!"); \
25 #define SafeGetX509Rev(obj, rev) do { \
26 OSSL_Check_Kind(obj, cX509Rev); \
27 GetX509Rev(obj, rev); \
40 ossl_x509revoked_new(X509_REVOKED
*rev
)
46 new = X509_REVOKED_new();
48 new = X509_REVOKED_dup(rev
);
51 ossl_raise(eX509RevError
, NULL
);
53 WrapX509Rev(cX509Rev
, obj
, new);
59 DupX509RevokedPtr(VALUE obj
)
61 X509_REVOKED
*rev
, *new;
63 SafeGetX509Rev(obj
, rev
);
64 if (!(new = X509_REVOKED_dup(rev
))) {
65 ossl_raise(eX509RevError
, NULL
);
75 ossl_x509revoked_alloc(VALUE klass
)
80 if (!(rev
= X509_REVOKED_new())) {
81 ossl_raise(eX509RevError
, NULL
);
83 WrapX509Rev(klass
, obj
, rev
);
89 ossl_x509revoked_initialize(int argc
, VALUE
*argv
, VALUE self
)
96 ossl_x509revoked_get_serial(VALUE self
)
100 GetX509Rev(self
, rev
);
102 return asn1integer_to_num(rev
->serialNumber
);
106 ossl_x509revoked_set_serial(VALUE self
, VALUE num
)
110 GetX509Rev(self
, rev
);
111 rev
->serialNumber
= num_to_asn1integer(num
, rev
->serialNumber
);
117 ossl_x509revoked_get_time(VALUE self
)
121 GetX509Rev(self
, rev
);
123 return asn1time_to_time(rev
->revocationDate
);
127 ossl_x509revoked_set_time(VALUE self
, VALUE time
)
132 sec
= time_to_time_t(time
);
133 GetX509Rev(self
, rev
);
134 if (!X509_time_adj(rev
->revocationDate
, 0, &sec
)) {
135 ossl_raise(eX509RevError
, NULL
);
141 * Gets X509v3 extensions as array of X509Ext objects
144 ossl_x509revoked_get_extensions(VALUE self
)
151 GetX509Rev(self
, rev
);
152 count
= X509_REVOKED_get_ext_count(rev
);
154 OSSL_Debug("count < 0???");
157 ary
= rb_ary_new2(count
);
158 for (i
=0; i
<count
; i
++) {
159 ext
= X509_REVOKED_get_ext(rev
, i
);
160 rb_ary_push(ary
, ossl_x509ext_new(ext
));
167 * Sets X509_EXTENSIONs
170 ossl_x509revoked_set_extensions(VALUE self
, VALUE ary
)
177 Check_Type(ary
, T_ARRAY
);
178 for (i
=0; i
<RARRAY(ary
)->len
; i
++) {
179 OSSL_Check_Kind(RARRAY(ary
)->ptr
[i
], cX509Ext
);
181 GetX509Rev(self
, rev
);
182 sk_X509_EXTENSION_pop_free(rev
->extensions
, X509_EXTENSION_free
);
183 rev
->extensions
= NULL
;
184 for (i
=0; i
<RARRAY(ary
)->len
; i
++) {
185 item
= RARRAY(ary
)->ptr
[i
];
186 ext
= DupX509ExtPtr(item
);
187 if(!X509_REVOKED_add_ext(rev
, ext
, -1)) {
188 ossl_raise(eX509RevError
, NULL
);
196 ossl_x509revoked_add_extension(VALUE self
, VALUE ext
)
200 GetX509Rev(self
, rev
);
201 if(!X509_REVOKED_add_ext(rev
, DupX509ExtPtr(ext
), -1)) {
202 ossl_raise(eX509RevError
, NULL
);
212 Init_ossl_x509revoked()
214 eX509RevError
= rb_define_class_under(mX509
, "RevokedError", eOSSLError
);
216 cX509Rev
= rb_define_class_under(mX509
, "Revoked", rb_cObject
);
218 rb_define_alloc_func(cX509Rev
, ossl_x509revoked_alloc
);
219 rb_define_method(cX509Rev
, "initialize", ossl_x509revoked_initialize
, -1);
221 rb_define_method(cX509Rev
, "serial", ossl_x509revoked_get_serial
, 0);
222 rb_define_method(cX509Rev
, "serial=", ossl_x509revoked_set_serial
, 1);
223 rb_define_method(cX509Rev
, "time", ossl_x509revoked_get_time
, 0);
224 rb_define_method(cX509Rev
, "time=", ossl_x509revoked_set_time
, 1);
225 rb_define_method(cX509Rev
, "extensions", ossl_x509revoked_get_extensions
, 0);
226 rb_define_method(cX509Rev
, "extensions=", ossl_x509revoked_set_extensions
, 1);
227 rb_define_method(cX509Rev
, "add_extension", ossl_x509revoked_add_extension
, 1);