diff options
author | Michal Rokos <m.rokos@sh.cvut.cz> | 2003-07-10 10:34:59 +0000 |
---|---|---|
committer | Michal Rokos <m.rokos@sh.cvut.cz> | 2003-07-10 10:34:59 +0000 |
commit | 13558d14bbec0b191c2b7dbd73a36cdd32cb7848 (patch) | |
tree | 50091b1bdee439f4e5283840c416392132ab60b8 | |
parent | 43ecdc1c17871b80957884e398ccaa3fa9c14ba2 (diff) | |
download | ruby-openssl-history-13558d14bbec0b191c2b7dbd73a36cdd32cb7848.tar.gz |
Fixex
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ossl.c | 58 | ||||
-rw-r--r-- | ossl_ocsp.c | 2 | ||||
-rw-r--r-- | ossl_pkcs7.c | 6 | ||||
-rw-r--r-- | ossl_x509cert.c | 51 |
5 files changed, 75 insertions, 48 deletions
@@ -1,3 +1,9 @@ +Thu, 10 Jul 2003 12:32:56 +0200 -- Michal Rokos <m.rokos@sh.cvut.cz> + * ossl.c: Prototype for sk2ary + * ocsp.c: Typo in ossl_ocspbres_add_status (sk_X509_pop_free -> sk_X509_EXTENSION_pop_free) + * pkcs7.c: Added missed handling of flags in ossl_pkcs7_s_encrypt + * x509cert.c: try to use obj2bio and bio2obj funcs + Thu, 10 Jul 2003 04:56:38 +0900 -- GOTOU Yuuzou <gotoyuzo@notwork.org> * ossl_pkcs7.c: PKCS7#encrypt(): use EVP_rc2_40_cbc() by default. @@ -34,7 +34,7 @@ asn1time_to_time(ASN1_TIME *time) } memset(&tm, 0, sizeof(struct tm)); - switch(time->type) { + switch (time->type) { case V_ASN1_UTCTIME: if (sscanf(time->data, "%2d%2d%2d%2d%2d%2dZ", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { @@ -115,7 +115,7 @@ asn1integer_to_num(ASN1_INTEGER *ai) return num; } -#if 0 +#if DO_IT_VIA_RUBY ASN1_INTEGER *num_to_asn1integer(VALUE obj, ASN1_INTEGER *ai) { BIGNUM *bn = NULL; @@ -188,17 +188,17 @@ ossl_obj2bio(VALUE obj) { BIO *bio; - if(TYPE(obj) == T_FILE){ + if (TYPE(obj) == T_FILE) { OpenFile *fptr; GetOpenFile(obj, fptr); rb_io_check_readable(fptr); bio = BIO_new_fp(fptr->f, BIO_NOCLOSE); } - else{ + else { StringValue(obj); bio = BIO_new_mem_buf(RSTRING(obj)->ptr, RSTRING(obj)->len); } - if(!bio) ossl_raise(ePKCS7Error, NULL); + if (!bio) ossl_raise(eOSSLError, NULL); return bio; } @@ -226,9 +226,7 @@ ossl_membio2str(BIO *bio) VALUE ossl_protect_membio2str(BIO *bio, int *status) { - VALUE ret; - ret = rb_protect((VALUE(*)())ossl_membio2str, (VALUE)bio, status); - return ret; + return rb_protect((VALUE(*)())ossl_membio2str, (VALUE)bio, status); } STACK_OF(X509) * @@ -240,28 +238,56 @@ ossl_x509_ary2sk(VALUE ary) int i; Check_Type(ary, T_ARRAY); - if(!(sk = sk_X509_new_null())) - ossl_raise(eOSSLError, NULL); - for(i = 0; i < RARRAY(ary)->len; i++){ + sk = sk_X509_new_null(); + if (!sk) ossl_raise(eOSSLError, NULL); + + for (i = 0; i < RARRAY(ary)->len; i++){ val = rb_ary_entry(ary, i); - if(!rb_obj_is_kind_of(val, cX509Cert)){ + if (!rb_obj_is_kind_of(val, cX509Cert)) { sk_X509_pop_free(sk, X509_free); ossl_raise(eOSSLError, "object except X509 cert is in array"); } x509 = DupX509CertPtr(val); /* NEED TO DUP */ sk_X509_push(sk, x509); } - return sk; } STACK_OF(X509) * ossl_protect_x509_ary2sk(VALUE ary, int *status) { - STACK_OF(X509) *sk; - sk = (STACK_OF(X509)*)rb_protect((VALUE(*)())ossl_x509_ary2sk, ary, status); - return sk; + return (STACK_OF(X509)*)rb_protect((VALUE(*)())ossl_x509_ary2sk, ary, status); +} + +#if 0 +#define OSSL_SK2ARY(name, type) \ +VALUE \ +ossl_##name##_sk2ary(STACK *sk) \ +{ \ + type *t; \ + int i, num; \ + VALUE ary; \ + \ + if (!sk) { \ + OSSL_Debug("empty sk!"); \ + return rb_ary_new(); \ + } \ + num = sk_num(sk); \ + if (num < 0) { \ + OSSL_Debug("items in sk < -1???"); \ + return rb_ary_new(); \ + } \ + ary = rb_ary_new2(num); \ + \ + for (i=0; i<num; i++) { \ + t = (type *)sk_value(sk, i); \ + rb_ary_push(ary, ossl_##name##_new(t)); \ + } \ + return ary; \ } +OSSL_SK2ARY(x509, X509) +OSSL_SK2ARY(x509crl, X509_CRL) +#endif /* * our default PEM callback diff --git a/ossl_ocsp.c b/ossl_ocsp.c index 51e598b..5d18f0e 100644 --- a/ossl_ocsp.c +++ b/ossl_ocsp.c @@ -479,7 +479,7 @@ ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status, if(!NIL_P(ext)){ X509_EXTENSION *x509ext; - sk_X509_pop_free(single->singleExtensions, X509_EXTENSION_free); + sk_X509_EXTENSION_pop_free(single->singleExtensions, X509_EXTENSION_free); single->singleExtensions = NULL; for(i = 0; i < RARRAY(ext)->len; i++){ x509ext = DupX509ExtPtr(RARRAY(ext)->ptr[i]); diff --git a/ossl_pkcs7.c b/ossl_pkcs7.c index 8471957..d6ac916 100644 --- a/ossl_pkcs7.c +++ b/ossl_pkcs7.c @@ -219,6 +219,7 @@ ossl_pkcs7_s_encrypt(int argc, VALUE *argv, VALUE klass) } else ciph = GetCipherPtr(cipher); /* NO NEED TO DUP */ + flg = NIL_P(flags) ? 0 : NUM2INT(flags); in = ossl_obj2bio(data); x509s = ossl_protect_x509_ary2sk(certs, &status); if(status){ @@ -261,9 +262,8 @@ ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self) if(rb_scan_args(argc, argv, "01", &s) == 0) return self; - StringValue(s); - if (!(in = BIO_new_mem_buf(RSTRING(s)->ptr, RSTRING(s)->len))) - ossl_raise(ePKCS7Error, NULL); + in = ossl_obj2bio(s); + if (!PEM_read_bio_PKCS7(in, (PKCS7 **)&DATA_PTR(self), NULL, NULL)) { BIO_free(in); ossl_raise(ePKCS7Error, NULL); diff --git a/ossl_x509cert.c b/ossl_x509cert.c index 6b58c5c..c2ce21e 100644 --- a/ossl_x509cert.c +++ b/ossl_x509cert.c @@ -131,18 +131,13 @@ ossl_x509_initialize(int argc, VALUE *argv, VALUE self) { BIO *in; X509 *x509; - VALUE buffer; + VALUE arg; - if (rb_scan_args(argc, argv, "01", &buffer) == 0) { + if (rb_scan_args(argc, argv, "01", &arg) == 0) { /* create just empty X509Cert */ return self; } - StringValue(buffer); - - in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len); - if (!in) { - ossl_raise(eX509CertError, NULL); - } + in = ossl_obj2bio(arg); /* * TODO: @@ -154,11 +149,8 @@ ossl_x509_initialize(int argc, VALUE *argv, VALUE self) BIO_reset(in); x509 = d2i_X509_bio(in, (X509 **)&DATA_PTR(self)); } - if (!x509) { - BIO_free(in); - ossl_raise(eX509CertError, NULL); - } BIO_free(in); + if (!x509) ossl_raise(eX509CertError, NULL); return self; } @@ -170,11 +162,13 @@ ossl_x509_copy(VALUE self, VALUE other) rb_check_frozen(self); if (self == other) return self; + GetX509(self, a); SafeGetX509(other, b); - if (!(x509 = X509_dup(b))) { - ossl_raise(eX509CertError, NULL); - } + + x509 = X509_dup(b); + if (!x509) ossl_raise(eX509CertError, NULL); + DATA_PTR(self) = x509; X509_free(a); @@ -186,21 +180,22 @@ ossl_x509_to_der(VALUE self) { X509 *x509; BIO *out; - BUF_MEM *buf; VALUE str; + int status=0; GetX509(self, x509); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eX509CertError, NULL); - } + + out = BIO_new(BIO_s_mem()); + if (!out) ossl_raise(eX509CertError, NULL); + if (!i2d_X509_bio(out, x509)) { BIO_free(out); ossl_raise(eX509CertError, NULL); } - BIO_get_mem_ptr(out, &buf); - str = rb_str_new(buf->data, buf->length); + str = ossl_protect_membio2str(out, &status); BIO_free(out); - + if (status) rb_jump_tag(status); + return str; } @@ -209,20 +204,20 @@ ossl_x509_to_pem(VALUE self) { X509 *x509; BIO *out; - BUF_MEM *buf; VALUE str; + int status=0; GetX509(self, x509); - if (!(out = BIO_new(BIO_s_mem()))) { - ossl_raise(eX509CertError, NULL); - } + out = BIO_new(BIO_s_mem()); + if (!out) ossl_raise(eX509CertError, NULL); + if (!PEM_write_bio_X509(out, x509)) { BIO_free(out); ossl_raise(eX509CertError, NULL); } - BIO_get_mem_ptr(out, &buf); - str = rb_str_new(buf->data, buf->length); + str = ossl_protect_membio2str(out, &status); BIO_free(out); + if (status) rb_jump_tag(status); return str; } |