aboutsummaryrefslogtreecommitdiffstats
path: root/ossl_x509crl.c
diff options
context:
space:
mode:
authorMichal Rokos <m.rokos@sh.cvut.cz>2002-03-11 17:20:04 +0000
committerMichal Rokos <m.rokos@sh.cvut.cz>2002-03-11 17:20:04 +0000
commit7ed17afc8c327bc88d1510255d284487d06f226c (patch)
tree52aa2aed34535a040ba155fef373e4394449dd33 /ossl_x509crl.c
parent91e607a11b3862c0aa966712149b2afd2a00d90d (diff)
downloadruby-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.c223
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, "");
}