summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Rokos <m.rokos@sh.cvut.cz>2003-07-10 10:34:59 +0000
committerMichal Rokos <m.rokos@sh.cvut.cz>2003-07-10 10:34:59 +0000
commit13558d14bbec0b191c2b7dbd73a36cdd32cb7848 (patch)
tree50091b1bdee439f4e5283840c416392132ab60b8
parent43ecdc1c17871b80957884e398ccaa3fa9c14ba2 (diff)
downloadruby-openssl-history-13558d14bbec0b191c2b7dbd73a36cdd32cb7848.tar.gz
Fixex
-rw-r--r--ChangeLog6
-rw-r--r--ossl.c58
-rw-r--r--ossl_ocsp.c2
-rw-r--r--ossl_pkcs7.c6
-rw-r--r--ossl_x509cert.c51
5 files changed, 75 insertions, 48 deletions
diff --git a/ChangeLog b/ChangeLog
index e962904..0881dfe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/ossl.c b/ossl.c
index 24cbc87..3f50b60 100644
--- a/ossl.c
+++ b/ossl.c
@@ -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;
}