aboutsummaryrefslogtreecommitdiffstats
path: root/ossl_pkcs7.c
diff options
context:
space:
mode:
Diffstat (limited to 'ossl_pkcs7.c')
-rw-r--r--ossl_pkcs7.c81
1 files changed, 35 insertions, 46 deletions
diff --git a/ossl_pkcs7.c b/ossl_pkcs7.c
index 407d106..2d2f260 100644
--- a/ossl_pkcs7.c
+++ b/ossl_pkcs7.c
@@ -1,7 +1,7 @@
/*
* $Id$
* 'OpenSSL for Ruby' project
- * Copyright (C) 2001 Michal Rokos <m.rokos@sh.cvut.cz>
+ * Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
* All rights reserved.
*/
/*
@@ -81,33 +81,22 @@ ossl_pkcs7si_free(ossl_pkcs7si *p7sip)
* Public
*/
VALUE
-ossl_pkcs7si_new_null(void)
-{
- ossl_pkcs7si *p7sip = NULL;
- VALUE obj;
-
- MakePKCS7si(obj, p7sip);
-
- if (!(p7sip->signer = PKCS7_SIGNER_INFO_new()))
- OSSL_Raise(ePKCS7Error, "");
-
- return obj;
-}
-
-VALUE
ossl_pkcs7si_new(PKCS7_SIGNER_INFO *si)
{
ossl_pkcs7si *p7sip = NULL;
+ PKCS7_SIGNER_INFO *new = NULL;
VALUE obj;
if (!si)
- return ossl_pkcs7si_new_null();
-
- MakePKCS7si(obj, p7sip);
+ new = PKCS7_SIGNER_INFO_new();
+ else new = PKCS7_SIGNER_INFO_dup(si);
- if (!(p7sip->signer = PKCS7_SIGNER_INFO_dup(si)))
+ if (!new)
OSSL_Raise(ePKCS7Error, "");
+ MakePKCS7si(obj, p7sip);
+ p7sip->signer = new;
+
return obj;
}
@@ -154,13 +143,13 @@ static VALUE ossl_pkcs7_s_sign(VALUE klass, VALUE key, VALUE cert, VALUE data)
if (!(bio = BIO_new_mem_buf(RSTRING(data)->ptr, RSTRING(data)->len))) {
EVP_PKEY_free(pkey);
X509_free(x509);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if (!(p7 = PKCS7_sign(x509, pkey, NULL, bio, 0))) {
EVP_PKEY_free(pkey);
X509_free(x509);
BIO_free(bio);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
EVP_PKEY_free(pkey);
X509_free(x509);
@@ -201,28 +190,27 @@ ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self)
switch (TYPE(arg1)) {
case T_FIXNUM:
if (!(p7 = PKCS7_new())) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if(!PKCS7_set_type(p7, FIX2INT(arg1))) {
PKCS7_free(p7);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
break;
case T_STRING:
Check_SafeStr(arg1);
if (!(in = BIO_new_mem_buf(RSTRING(arg1)->ptr, RSTRING(arg1)->len))) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if (!(p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL))) {
BIO_free(in);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
BIO_free(in);
break;
default:
rb_raise(ePKCS7Error, "unsupported param (%s)", rb_class2name(CLASS_OF(arg1)));
}
-
p7p->pkcs7 = p7;
return self;
@@ -238,7 +226,7 @@ ossl_pkcs7_set_cipher(VALUE self, VALUE cipher)
OSSL_Check_Type(cipher, cCipher);
if (!PKCS7_set_cipher(p7p->pkcs7, ossl_cipher_get_EVP_CIPHER(cipher))) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
return cipher;
@@ -257,7 +245,7 @@ ossl_pkcs7_add_signer(VALUE self, VALUE signer, VALUE pkey)
OSSL_Check_Type(pkey, cPKey);
if (rb_funcall(pkey, rb_intern("private?"), 0, NULL) != Qtrue) {
- rb_raise(ePKCS7Error, "private key needed!");
+ rb_raise(ePKCS7Error, "Private key needed!");
}
si = ossl_pkcs7si_get_PKCS7_SIGNER_INFO(signer);
key = ossl_pkey_get_EVP_PKEY(pkey);
@@ -265,7 +253,7 @@ ossl_pkcs7_add_signer(VALUE self, VALUE signer, VALUE pkey)
if (!PKCS7_add_signer(p7p->pkcs7, si)) {
PKCS7_SIGNER_INFO_free(si);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "Could not add signer.");
}
if (PKCS7_type_is_signed(p7p->pkcs7))
@@ -291,7 +279,7 @@ ossl_pkcs7_get_signer(VALUE self)
}
if ((num = sk_PKCS7_SIGNER_INFO_num(sk)) < 0) {
- rb_raise(ePKCS7Error, "negative no of signers!");
+ rb_raise(ePKCS7Error, "Negative number of signers!");
}
ary = rb_ary_new2(num);
@@ -316,7 +304,7 @@ ossl_pkcs7_add_recipient(VALUE self, VALUE cert)
OSSL_Check_Type(cert, cX509Certificate);
if (!(ri = PKCS7_RECIP_INFO_new())) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
x509 = ossl_x509_get_X509(cert);
@@ -324,13 +312,13 @@ ossl_pkcs7_add_recipient(VALUE self, VALUE cert)
if (!PKCS7_RECIP_INFO_set(ri, x509)) {
X509_free(x509);
PKCS7_RECIP_INFO_free(ri);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
X509_free(x509);
if (!PKCS7_add_recipient_info(p7p->pkcs7, ri)) {
PKCS7_RECIP_INFO_free(ri);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
return self;
@@ -348,7 +336,7 @@ ossl_pkcs7_add_certificate(VALUE self, VALUE cert)
if (!PKCS7_add_certificate(p7p->pkcs7, x509)) { /* DUPs x509 - free it! */
X509_free(x509);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
X509_free(x509);
@@ -367,7 +355,7 @@ ossl_pkcs7_add_crl(VALUE self, VALUE x509crl)
if (!PKCS7_add_crl(p7p->pkcs7, crl)) { /* DUPs crl - free it! */
X509_CRL_free(crl);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
X509_CRL_free(crl);
@@ -394,7 +382,7 @@ ossl_pkcs7_add_data(int argc, VALUE *argv, VALUE self)
PKCS7_set_detached(p7p->pkcs7, 1);
if (!(bio=PKCS7_dataInit(p7p->pkcs7, NULL))) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if ((i = BIO_write(bio, RSTRING(data)->ptr, RSTRING(data)->len)) != RSTRING(data)->len) {
BIO_free(bio);
@@ -402,7 +390,7 @@ ossl_pkcs7_add_data(int argc, VALUE *argv, VALUE self)
}
if (!PKCS7_dataFinal(p7p->pkcs7, bio)) {
BIO_free(bio);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
BIO_free(bio);
@@ -434,8 +422,9 @@ ossl_pkcs7_data_verify(int argc, VALUE *argv, VALUE self)
if (!NIL_P(detached)) {
Check_SafeStr(detached);
- if (!(data = BIO_new_mem_buf(RSTRING(detached)->ptr, RSTRING(detached)->len)))
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ if (!(data = BIO_new_mem_buf(RSTRING(detached)->ptr, RSTRING(detached)->len))) {
+ OSSL_Raise(ePKCS7Error, "");
+ }
}
if (PKCS7_get_detached(p7p->pkcs7)) {
@@ -448,7 +437,7 @@ ossl_pkcs7_data_verify(int argc, VALUE *argv, VALUE self)
if (!bio) {
if (data) BIO_free(data);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
/* We have to 'read' from bio to calculate digests etc. */
@@ -505,7 +494,7 @@ ossl_pkcs7_data_decode(VALUE self, VALUE key, VALUE cert)
if (!(bio = PKCS7_dataDecode(p7p->pkcs7, pkey, NULL, x509))) {
EVP_PKEY_free(pkey);
X509_free(x509);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
EVP_PKEY_free(pkey);
X509_free(x509);
@@ -528,11 +517,11 @@ ossl_pkcs7_to_pem(VALUE self)
GetPKCS7(self, p7p);
if (!(out = BIO_new(BIO_s_mem()))) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if (!PEM_write_bio_PKCS7(out, p7p->pkcs7)) {
BIO_free(out);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
BIO_get_mem_ptr(out, &buf);
str = rb_str_new(buf->data, buf->length);
@@ -585,13 +574,13 @@ ossl_pkcs7si_initialize(int argc, VALUE *argv, VALUE self)
if (!(si = PKCS7_SIGNER_INFO_new())) {
EVP_PKEY_free(pkey);
X509_free(x509);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if (!(PKCS7_SIGNER_INFO_set(si, x509, pkey, md))) {
EVP_PKEY_free(pkey);
X509_free(x509);
PKCS7_SIGNER_INFO_free(si);
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
EVP_PKEY_free(pkey);
X509_free(x509);
@@ -630,7 +619,7 @@ ossl_pkcs7si_get_signed_time(VALUE self)
GetPKCS7si(self, p7sip);
if (!(asn1obj = PKCS7_get_signed_attribute(p7sip->signer, NID_pkcs9_signingTime))) {
- rb_raise(ePKCS7Error, "%s", ossl_error());
+ OSSL_Raise(ePKCS7Error, "");
}
if (asn1obj->type == V_ASN1_UTCTIME)
return asn1time_to_time(asn1obj->value.utctime);