diff options
author | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-03-11 17:20:04 +0000 |
---|---|---|
committer | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-03-11 17:20:04 +0000 |
commit | 7ed17afc8c327bc88d1510255d284487d06f226c (patch) | |
tree | 52aa2aed34535a040ba155fef373e4394449dd33 /ossl_x509crl.c | |
parent | 91e607a11b3862c0aa966712149b2afd2a00d90d (diff) | |
download | ruby-openssl-history-7ed17afc8c327bc88d1510255d284487d06f226c.tar.gz |
* Big internal cleanup (all structs with only 1 member rearranged)
* improved getting time_t from cTime
Diffstat (limited to 'ossl_x509crl.c')
-rw-r--r-- | ossl_x509crl.c | 223 |
1 files changed, 93 insertions, 130 deletions
diff --git a/ossl_x509crl.c b/ossl_x509crl.c index f001053..dccc021 100644 --- a/ossl_x509crl.c +++ b/ossl_x509crl.c @@ -10,14 +10,8 @@ */ #include "ossl.h" -#define MakeX509CRL(obj, crlp) {\ - obj = Data_Make_Struct(cX509CRL, ossl_x509crl, 0, ossl_x509crl_free, crlp);\ -} -#define GetX509CRL_unsafe(obj, crlp) Data_Get_Struct(obj, ossl_x509crl, crlp) -#define GetX509CRL(obj, crlp) {\ - GetX509CRL_unsafe(obj, crlp);\ - if (!crlp->crl) rb_raise(eX509CRLError, "not initialized!");\ -} +#define WrapX509CRL(obj, crl) obj = Data_Wrap_Struct(cX509CRL, 0, X509_CRL_free, crl) +#define GetX509CRL(obj, crl) Data_Get_Struct(obj, X509_CRL, crl) /* * Classes @@ -26,40 +20,22 @@ VALUE cX509CRL; VALUE eX509CRLError; /* - * Struct - */ -typedef struct ossl_x509crl_st { - X509_CRL *crl; -} ossl_x509crl; - -static void -ossl_x509crl_free(ossl_x509crl *crlp) -{ - if (crlp) { - if (crlp->crl) X509_CRL_free(crlp->crl); - crlp->crl = NULL; - free(crlp); - } -} - -/* * PUBLIC */ X509_CRL * ossl_x509crl_get_X509_CRL(VALUE obj) { - ossl_x509crl *crlp = NULL; - X509_CRL *crl = NULL; + X509_CRL *crl = NULL, *new; OSSL_Check_Type(obj, cX509CRL); - GetX509CRL(obj, crlp); + GetX509CRL(obj, crl); - if (!(crl = X509_CRL_dup(crlp->crl))) { + if (!(new = X509_CRL_dup(crl))) { OSSL_Raise(eX509CRLError, ""); } - return crl; + return new; } /* @@ -68,11 +44,15 @@ ossl_x509crl_get_X509_CRL(VALUE obj) static VALUE ossl_x509crl_s_new(int argc, VALUE *argv, VALUE klass) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; VALUE obj; - MakeX509CRL(obj, crlp); - + if (!(crl = X509_CRL_new())) { + OSSL_Raise(eX509CRLError, ""); + } + + WrapX509CRL(obj, crl); + rb_obj_call_init(obj, argc, argv); return obj; @@ -81,44 +61,35 @@ ossl_x509crl_s_new(int argc, VALUE *argv, VALUE klass) static VALUE ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self) { - ossl_x509crl *crlp = NULL; - X509_CRL *crl = NULL; BIO *in = NULL; VALUE buffer; - GetX509CRL_unsafe(self, crlp); + if (argc == 0) + return self; - rb_scan_args(argc, argv, "01", &buffer); - - switch (TYPE(buffer)) { - case T_NIL: - crl = X509_CRL_new(); - break; - default: - buffer = rb_String(buffer); - if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, -1))) { - OSSL_Raise(eX509CRLError, ""); - } - crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); - BIO_free(in); + buffer = rb_String(argv[0]); + + if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, -1))) { + OSSL_Raise(eX509CRLError, ""); } - if (!crl) + if (!PEM_read_bio_X509_CRL(in, (X509_CRL **)&DATA_PTR(self), NULL, NULL)) { + BIO_free(in); OSSL_Raise(eX509CRLError, ""); - - crlp->crl = crl; - + } + BIO_free(in); + return self; } static VALUE ossl_x509crl_get_version(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; long ver = 0; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - ver = ASN1_INTEGER_get(crlp->crl->crl->version); + ver = ASN1_INTEGER_get(crl->crl->version); return INT2NUM(ver); } @@ -126,10 +97,10 @@ ossl_x509crl_get_version(VALUE self) static VALUE ossl_x509crl_set_version(VALUE self, VALUE version) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; ASN1_INTEGER *asn1int = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); if (!(asn1int = ASN1_INTEGER_new())) { OSSL_Raise(eX509CRLError, ""); @@ -138,8 +109,8 @@ ossl_x509crl_set_version(VALUE self, VALUE version) OSSL_Raise(eX509CRLError, ""); } - ASN1_INTEGER_free(crlp->crl->crl->version); - crlp->crl->crl->version = asn1int; + ASN1_INTEGER_free(crl->crl->version); + crl->crl->version = asn1int; return version; } @@ -147,25 +118,25 @@ ossl_x509crl_set_version(VALUE self, VALUE version) static VALUE ossl_x509crl_get_issuer(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - return ossl_x509name_new(crlp->crl->crl->issuer); + return ossl_x509name_new(crl->crl->issuer); } static VALUE ossl_x509crl_set_issuer(VALUE self, VALUE issuer) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; X509_NAME *name = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); OSSL_Check_Type(issuer, cX509Name); name = ossl_x509name_get_X509_NAME(issuer); - if (!X509_NAME_set(&(crlp->crl->crl->issuer), name)) { /* DUPs name - FREE it */ + if (!X509_NAME_set(&(crl->crl->issuer), name)) { /* DUPs name - FREE it */ X509_NAME_free(name); OSSL_Raise(eX509CRLError, ""); } @@ -177,28 +148,24 @@ ossl_x509crl_set_issuer(VALUE self, VALUE issuer) static VALUE ossl_x509crl_get_last_update(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - return asn1time_to_time(crlp->crl->crl->lastUpdate); + return asn1time_to_time(crl->crl->lastUpdate); } static VALUE ossl_x509crl_set_last_update(VALUE self, VALUE time) { - ossl_x509crl *crlp = NULL; - VALUE sec; + X509_CRL *crl = NULL; + time_t sec; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - OSSL_Check_Type(time, rb_cTime); - sec = rb_funcall(time, rb_intern("to_i"), 0, NULL); + sec = time_to_time_t(time); - if (!FIXNUM_P(sec)) - rb_raise(eX509CRLError, "wierd time"); - - if (!ASN1_UTCTIME_set(crlp->crl->crl->lastUpdate, FIX2INT(sec))) { + if (!ASN1_UTCTIME_set(crl->crl->lastUpdate, sec)) { OSSL_Raise(eX509CRLError, ""); } @@ -208,28 +175,24 @@ ossl_x509crl_set_last_update(VALUE self, VALUE time) static VALUE ossl_x509crl_get_next_update(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - return asn1time_to_time(crlp->crl->crl->nextUpdate); + return asn1time_to_time(crl->crl->nextUpdate); } static VALUE ossl_x509crl_set_next_update(VALUE self, VALUE time) { - ossl_x509crl *crlp = NULL; - VALUE sec; + X509_CRL *crl = NULL; + time_t sec; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - OSSL_Check_Type(time, rb_cTime); - sec = rb_funcall(time, rb_intern("to_i"), 0, NULL); + sec = time_to_time_t(time); - if (!FIXNUM_P(sec)) - rb_raise(eX509CRLError, "wierd time"); - - if (!ASN1_UTCTIME_set(crlp->crl->crl->nextUpdate, FIX2INT(sec))) { + if (!ASN1_UTCTIME_set(crl->crl->nextUpdate, sec)) { OSSL_Raise(eX509CRLError, ""); } @@ -239,14 +202,14 @@ ossl_x509crl_set_next_update(VALUE self, VALUE time) static VALUE ossl_x509crl_get_revoked(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; int i, num = 0; X509_REVOKED *rev = NULL; VALUE ary, revoked; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - num = sk_X509_CRL_num(crlp->crl->crl->revoked); + num = sk_X509_CRL_num(crl->crl->revoked); if (num < 0) return rb_ary_new(); @@ -254,7 +217,7 @@ ossl_x509crl_get_revoked(VALUE self) ary = rb_ary_new2(num); for(i=0; i<num; i++) { - rev = (X509_REVOKED *)sk_X509_CRL_value(crlp->crl->crl->revoked, i); /* NO DUP - don't free! */ + rev = (X509_REVOKED *)sk_X509_CRL_value(crl->crl->revoked, i); /* NO DUP - don't free! */ revoked = ossl_x509revoked_new(rev); rb_ary_push(ary, revoked); } @@ -265,29 +228,29 @@ ossl_x509crl_get_revoked(VALUE self) static VALUE ossl_x509crl_set_revoked(VALUE self, VALUE ary) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; X509_REVOKED *rev = NULL; int i; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); Check_Type(ary, T_ARRAY); for (i=0; i<RARRAY(ary)->len; i++) { /* All ary members should be X509 Revoked */ OSSL_Check_Type(RARRAY(ary)->ptr[i], cX509Revoked); } - sk_X509_REVOKED_pop_free(crlp->crl->crl->revoked, X509_REVOKED_free); - crlp->crl->crl->revoked = NULL; - M_ASN1_New(crlp->crl->crl->revoked, sk_X509_REVOKED_new_null); + sk_X509_REVOKED_pop_free(crl->crl->revoked, X509_REVOKED_free); + crl->crl->revoked = NULL; + M_ASN1_New(crl->crl->revoked, sk_X509_REVOKED_new_null); for (i=0; i<RARRAY(ary)->len; i++) { rev = ossl_x509revoked_get_X509_REVOKED(RARRAY(ary)->ptr[i]); - if (!sk_X509_CRL_push(crlp->crl->crl->revoked, rev)) { /* NO DUP - don't free! */ + if (!sk_X509_CRL_push(crl->crl->revoked, rev)) { /* NO DUP - don't free! */ OSSL_Raise(eX509CRLError, ""); } } - sk_X509_REVOKED_sort(crlp->crl->crl->revoked); + sk_X509_REVOKED_sort(crl->crl->revoked); return ary; } @@ -295,18 +258,18 @@ ossl_x509crl_set_revoked(VALUE self, VALUE ary) static VALUE ossl_x509crl_add_revoked(VALUE self, VALUE revoked) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; X509_REVOKED *rev = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); OSSL_Check_Type(revoked, cX509Revoked); rev = ossl_x509revoked_get_X509_REVOKED(revoked); - if (!sk_X509_CRL_push(crlp->crl->crl->revoked, rev)) { /* NO DUP - don't free! */ + if (!sk_X509_CRL_push(crl->crl->revoked, rev)) { /* NO DUP - don't free! */ OSSL_Raise(eX509CRLError, ""); } - sk_X509_REVOKED_sort(crlp->crl->crl->revoked); + sk_X509_REVOKED_sort(crl->crl->revoked); return revoked; } @@ -314,23 +277,23 @@ ossl_x509crl_add_revoked(VALUE self, VALUE revoked) static VALUE ossl_x509crl_sign(VALUE self, VALUE key, VALUE digest) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; EVP_PKEY *pkey = NULL; const EVP_MD *md = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); OSSL_Check_Type(key, cPKey); OSSL_Check_Type(digest, cDigest); - if (rb_funcall(key, rb_intern("private?"), 0, NULL) == Qfalse) { + if (rb_funcall(key, id_private_q, 0, NULL) == Qfalse) { rb_raise(eX509CRLError, "PRIVATE key needed to sign CRL!"); } pkey = ossl_pkey_get_EVP_PKEY(key); md = ossl_digest_get_EVP_MD(digest); - if (!X509_CRL_sign(crlp->crl, pkey, md)) { + if (!X509_CRL_sign(crl, pkey, md)) { EVP_PKEY_free(pkey); OSSL_Raise(eX509CRLError, ""); } @@ -342,16 +305,16 @@ ossl_x509crl_sign(VALUE self, VALUE key, VALUE digest) static VALUE ossl_x509crl_verify(VALUE self, VALUE key) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; EVP_PKEY *pkey = NULL; int result = 0; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); OSSL_Check_Type(key, cPKey); pkey = ossl_pkey_get_EVP_PKEY(key); - result = X509_CRL_verify(crlp->crl, pkey); + result = X509_CRL_verify(crl, pkey); EVP_PKEY_free(pkey); if (result == 1) return Qtrue; @@ -361,17 +324,17 @@ ossl_x509crl_verify(VALUE self, VALUE key) static VALUE ossl_x509crl_to_pem(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; BIO *out = NULL; BUF_MEM *buf = NULL; VALUE str; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); if (!(out = BIO_new(BIO_s_mem()))) { OSSL_Raise(eX509CRLError, ""); } - if (!PEM_write_bio_X509_CRL(out, crlp->crl)) { + if (!PEM_write_bio_X509_CRL(out, crl)) { BIO_free(out); OSSL_Raise(eX509CRLError, ""); } @@ -385,17 +348,17 @@ ossl_x509crl_to_pem(VALUE self) static VALUE ossl_x509crl_to_text(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; BIO *out = NULL; BUF_MEM *buf = NULL; VALUE str; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); if (!(out = BIO_new(BIO_s_mem()))) { OSSL_Raise(eX509CRLError, ""); } - if (!X509_CRL_print(out, crlp->crl)) { + if (!X509_CRL_print(out, crl)) { BIO_free(out); OSSL_Raise(eX509CRLError, ""); } @@ -412,14 +375,14 @@ ossl_x509crl_to_text(VALUE self) static VALUE ossl_x509crl_get_extensions(VALUE self) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; int count = 0, i; X509_EXTENSION *ext = NULL; VALUE ary; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); - count = X509_CRL_get_ext_count(crlp->crl); + count = X509_CRL_get_ext_count(crl); if (count > 0) ary = rb_ary_new2(count); @@ -427,7 +390,7 @@ ossl_x509crl_get_extensions(VALUE self) return rb_ary_new(); for (i=0; i<count; i++) { - ext = X509_CRL_get_ext(crlp->crl, i); /* NO DUP - don't free! */ + ext = X509_CRL_get_ext(crl, i); /* NO DUP - don't free! */ rb_ary_push(ary, ossl_x509ext_new(ext)); } @@ -440,24 +403,24 @@ ossl_x509crl_get_extensions(VALUE self) static VALUE ossl_x509crl_set_extensions(VALUE self, VALUE ary) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; X509_EXTENSION *ext = NULL; int i = 0; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); Check_Type(ary, T_ARRAY); for (i=0; i<RARRAY(ary)->len; i++) { /* All ary members should be X509 Extensions */ OSSL_Check_Type(RARRAY(ary)->ptr[i], cX509Extension); } - sk_X509_EXTENSION_pop_free(crlp->crl->crl->extensions, X509_EXTENSION_free); - crlp->crl->crl->extensions = NULL; + sk_X509_EXTENSION_pop_free(crl->crl->extensions, X509_EXTENSION_free); + crl->crl->extensions = NULL; for (i=0; i<RARRAY(ary)->len; i++) { ext = ossl_x509ext_get_X509_EXTENSION(RARRAY(ary)->ptr[i]); - if(!X509_CRL_add_ext(crlp->crl, ext, -1)) { /* DUPs ext - FREE it */ + if(!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); OSSL_Raise(eX509CRLError, ""); } @@ -470,15 +433,15 @@ ossl_x509crl_set_extensions(VALUE self, VALUE ary) static VALUE ossl_x509crl_add_extension(VALUE self, VALUE extension) { - ossl_x509crl *crlp = NULL; + X509_CRL *crl = NULL; X509_EXTENSION *ext = NULL; - GetX509CRL(self, crlp); + GetX509CRL(self, crl); OSSL_Check_Type(extension, cX509Extension); ext = ossl_x509ext_get_X509_EXTENSION(extension); - if(!X509_CRL_add_ext(crlp->crl, ext, -1)) { /* DUPs ext - FREE it */ + if (!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); OSSL_Raise(eX509CRLError, ""); } |