diff options
author | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-02-13 13:09:26 +0000 |
---|---|---|
committer | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-02-13 13:09:26 +0000 |
commit | 5e2a679a46e2164f8b38b71132787c3327862957 (patch) | |
tree | 4ab99602f4f8adec2a96194abd4a39c48e0fab00 | |
parent | 1ad093352e953cabd70c851989ce06edc233d5f4 (diff) | |
download | ruby-openssl-history-5e2a679a46e2164f8b38b71132787c3327862957.tar.gz |
* transition from rb_raise to OSSL_Raise (where possible)
* some mem checks
* preliminary DH key support
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | README | 24 | ||||
-rw-r--r-- | extconf.rb | 2 | ||||
-rw-r--r-- | lib/openssl.rb | 18 | ||||
-rw-r--r-- | openssl_missing.c | 2 | ||||
-rw-r--r-- | openssl_missing.h | 10 | ||||
-rw-r--r-- | ossl.c | 20 | ||||
-rw-r--r-- | ossl.h | 28 | ||||
-rw-r--r-- | ossl_bn.c | 143 | ||||
-rw-r--r-- | ossl_cipher.c | 22 | ||||
-rw-r--r-- | ossl_config.c | 17 | ||||
-rw-r--r-- | ossl_digest.c | 22 | ||||
-rw-r--r-- | ossl_hmac.c | 20 | ||||
-rw-r--r-- | ossl_ns_spki.c | 20 | ||||
-rw-r--r-- | ossl_pkcs7.c | 81 | ||||
-rw-r--r-- | ossl_pkey.c | 24 | ||||
-rw-r--r-- | ossl_pkey_dh.c | 316 | ||||
-rw-r--r-- | ossl_pkey_dsa.c | 73 | ||||
-rw-r--r-- | ossl_pkey_rsa.c | 93 | ||||
-rw-r--r-- | ossl_rand.c | 21 | ||||
-rw-r--r-- | ossl_ssl.c | 142 | ||||
-rw-r--r-- | ossl_x509.c | 125 | ||||
-rw-r--r-- | ossl_x509attr.c | 25 | ||||
-rw-r--r-- | ossl_x509crl.c | 36 | ||||
-rw-r--r-- | ossl_x509ext.c | 40 | ||||
-rw-r--r-- | ossl_x509name.c | 25 | ||||
-rw-r--r-- | ossl_x509req.c | 66 | ||||
-rw-r--r-- | ossl_x509revoked.c | 37 | ||||
-rw-r--r-- | ossl_x509store.c | 16 |
29 files changed, 865 insertions, 608 deletions
@@ -4,6 +4,11 @@ Copyright (C) 2001 Michal Rokos <m.rokos@sh.cvut.cz> All rights reserved. $Log$ +Revision 1.30 2002/02/13 13:09:49 majkl + * transition from rb_raise to OSSL_Raise (where possible) + * some mem checks + * preliminary DH key support + Revision 1.29 2002/02/06 13:47:00 majkl * ossl-0.1.1 released @@ -1,17 +1,17 @@ $Id$ 'OpenSSL for Ruby' project -Copyright (C) 2001,2002 'OpenSSL for Ruby' team +Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz> All rights reserved. This program is licenced under the same licence as Ruby. (See the file 'LICENCE'.) -[Team members] +['OpenSSL for Ruby' team members] GOTOU Yuuzou <gotoyuzo@notwork.org> - SSL Socket implementation -Michal Rokos <m.rokos@sh.cvut.cz> - The rest (too long to enumerate) +Michal Rokos <m.rokos@sh.cvut.cz> - The rest (too long to enumerate), maintainer [Contributors] -UNKNOWN <oss-ruby@technorama.net>oss-ruby@technorama.net - BN implementation core -Hynek Rostinsky <Hynek.Rostinsky@foresta.cz> - Windows platform fixes (strptime mainly) +UNKNOWN <oss-ruby@technorama.net> - BN implementation core +Hynek Rostinsky <hynek.rostinsky@foresta.cz> - Windows platform fixes (strptime mainly) [Done] (but not fully tested) = PKey:: RSA,DSA keys - new, load, export @@ -33,6 +33,7 @@ Hynek Rostinsky <Hynek.Rostinsky@foresta.cz> - Windows platform fixes (strptime = HMAC = OpenSSL config file parser (part) = BN (safe bignums) += Diffie-Hellman [To-Do] = check for memory leaking :-)) @@ -220,6 +221,19 @@ OpenSSL:: PKey:: PKeyError + DH + ::new((fLen|sPEM) [, fGenerator=2]) - dispatches .new_from_pem or .generate + ::new_from_pem(sPEM) + ::generate(fLen, fGenerator) - yields |p,n| + ::new_from_fixnum <=> ::generate + ---------------------------------- + .public?() => bResult + .private?() => bResult + .to_str() => sHumanReadable + .export() => sPEM + .to_pem <=> .export + .public_key() => oPKey::ANY + DSA .new([fKeyLen|sPEM [, sPassword]]) - dispatches .new_from_pem or .generate .new_from_pem(sPEM [, sPassword]) @@ -1,7 +1,7 @@ =begin $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. This program is licenced under the same licence as Ruby. diff --git a/lib/openssl.rb b/lib/openssl.rb index f67ed2d..8baf452 100644 --- a/lib/openssl.rb +++ b/lib/openssl.rb @@ -82,6 +82,24 @@ if defined? RSA end # verify end # RSA end # defined? RSA +if defined? DH + class DH + def DH::new(arg, gen = 2) + if arg.kind_of? Fixnum + DH::generate(arg, gen) {|p,n| + if block_given? then yield [p,n] end + } + else + DH::new_from_pem(arg) + end + end # DH::new + # + # DH::new_from_pem(PEM string, pass) is built-in + # DH::new_from_fixnum(size, gen) is an alias to DH::generate(size, gen) + # DH::generate(size, gen) is built-in; yields p,n + # + end # DH +end # defined? DH end # PKey module SSL diff --git a/openssl_missing.c b/openssl_missing.c index 592972b..4ab85aa 100644 --- a/openssl_missing.c +++ b/openssl_missing.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. */ /* diff --git a/openssl_missing.h b/openssl_missing.h index 0d273a1..56f1667 100644 --- a/openssl_missing.h +++ b/openssl_missing.h @@ -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. */ /* @@ -26,7 +26,7 @@ extern "C" { #define PEM_write_bio_DSAPublicKey(bp,x) \ PEM_ASN1_write_bio((int (*)())i2d_DSAPublicKey,\ PEM_STRING_DSA_PUBLIC,\ - bp,(char *)x,NULL,NULL,0,NULL,NULL) + bp,(char *)x, NULL, NULL, 0, NULL, NULL) #endif /* NO_DSA */ /* to x509.h */ @@ -41,9 +41,9 @@ extern "C" { /* to pkcs7.h */ #define PKCS7_SIGNER_INFO_dup(si) (PKCS7_SIGNER_INFO *)ASN1_dup((int (*)())i2d_PKCS7_SIGNER_INFO, \ - (char *(*)())d2i_PKCS7_SIGNER_INFO,(char *)si) + (char *(*)())d2i_PKCS7_SIGNER_INFO, (char *)si) #define PKCS7_RECIP_INFO_dup(ri) (PKCS7_RECIP_INFO *)ASN1_dup((int (*)())i2d_PKCS7_RECIP_INFO, \ - (char *(*)())d2i_PKCS7_RECIP_INFO,(char *)ri) + (char *(*)())d2i_PKCS7_RECIP_INFO, (char *)ri) /* to hmac.[ch] */ #if !defined(NO_HMAC) && !defined(OPENSSL_NO_HMAC) @@ -54,5 +54,5 @@ int HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in); } #endif -#endif +#endif /*_OPENSSL_MISSING_H_*/ @@ -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. */ /* @@ -10,7 +10,7 @@ */ #include "ossl.h" -#ifdef WIN32 +#if defined(NT) # define strncasecmp _strnicmp #endif @@ -20,12 +20,6 @@ */ #ifndef HAVE_STRPTIME # include "./missing/strptime.c" -/* -#else -# define _XOPEN_SOURCE * glibc2 needs this * -# include <features.h> -# include <time.h> - */ #endif /* @@ -34,17 +28,19 @@ void ossl_check_kind(VALUE obj, VALUE klass) { - if (rb_obj_is_kind_of(obj, klass) == Qfalse) - rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected kind of %s)", + if (rb_obj_is_kind_of(obj, klass) == Qfalse) { + rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected kind of %s)",\ rb_class2name(CLASS_OF(obj)), rb_class2name(klass)); + } } void ossl_check_instance(VALUE obj, VALUE klass) { - if (rb_obj_is_instance_of(obj, klass) == Qfalse) - rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected instance of %s)", + if (rb_obj_is_instance_of(obj, klass) == Qfalse) { + rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected instance of %s)",\ rb_class2name(CLASS_OF(obj)), rb_class2name(klass)); + } } /* @@ -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. */ /* @@ -78,7 +78,6 @@ extern VALUE eSPKIError; extern VALUE eRandomError; extern VALUE cSSLSocket; extern VALUE eSSLError; - /* Cipher */ extern VALUE cCipher; extern VALUE eCipherError; @@ -125,7 +124,6 @@ VALUE asn1time_to_time(ASN1_UTCTIME *); /* * ERRor messages */ -#define ossl_error OSSL_ErrMsg /* for compat.; DEPRECATED! */ #define OSSL_ErrMsg() \ ERR_error_string(ERR_get_error(), NULL) @@ -139,7 +137,7 @@ VALUE asn1time_to_time(ASN1_UTCTIME *); # define OSSL_Warning(text) \ rb_warning("%s%s [in '%s', file: '%s', line: %d]", \ text, OSSL_ErrMsg(), __func__, __FILE__, __LINE__) -#else +#else /*OSSL_DEBUG*/ # define OSSL_Raise(klass,text) \ rb_raise(klass, "%s%s", text, OSSL_ErrMsg()) # define OSSL_Warn(text) \ @@ -163,7 +161,6 @@ void Init_ossl_digest(VALUE); /* * X509 */ -VALUE ossl_x509_new_null(void); VALUE ossl_x509_new(X509 *); VALUE ossl_x509_new_from_file(VALUE); X509 *ossl_x509_get_X509(VALUE); @@ -178,7 +175,6 @@ void Init_ossl_x509crl(VALUE); /* * X509Name */ -VALUE ossl_x509name_new_null(void); VALUE ossl_x509name_new(X509_NAME *); X509_NAME *ossl_x509name_get_X509_NAME(VALUE); void Init_ossl_x509name(VALUE); @@ -186,7 +182,6 @@ void Init_ossl_x509name(VALUE); /* * X509Request */ -VALUE ossl_x509req_new_null(void); VALUE ossl_x509req_new(X509_REQ *); X509_REQ *ossl_x509req_get_X509_REQ(VALUE); void Init_ossl_x509req(VALUE); @@ -194,7 +189,6 @@ void Init_ossl_x509req(VALUE); /* * X509Revoked */ -VALUE ossl_x509revoked_new_null(void); VALUE ossl_x509revoked_new(X509_REVOKED *); X509_REVOKED *ossl_x509revoked_get_X509_REVOKED(VALUE); void Init_ossl_x509revoked(VALUE); @@ -209,7 +203,6 @@ void Init_ossl_x509store(VALUE); /* * X509Extension */ -VALUE ossl_x509ext_new_null(void); VALUE ossl_x509ext_new(X509_EXTENSION *); X509_EXTENSION *ossl_x509ext_get_X509_EXTENSION(VALUE); void Init_ossl_x509ext(VALUE); @@ -217,7 +210,6 @@ void Init_ossl_x509ext(VALUE); /* * X509Attribute */ -VALUE ossl_x509attr_new_null(void); VALUE ossl_x509attr_new(X509_ATTRIBUTE *); X509_ATTRIBUTE *ossl_x509attr_get_X509_ATTRIBUTE(VALUE); void Init_ossl_x509attr(VALUE); @@ -251,7 +243,6 @@ void Init_ossl_pkey(VALUE); * RSA */ #if !defined(NO_RSA) && !defined(OPENSSL_NO_RSA) -VALUE ossl_rsa_new_null(); VALUE ossl_rsa_new(RSA *); RSA *ossl_rsa_get_RSA(VALUE); EVP_PKEY *ossl_rsa_get_EVP_PKEY(VALUE); @@ -262,14 +253,23 @@ void Init_ossl_rsa(VALUE, VALUE, VALUE); * DSA */ #if !defined(NO_DSA) && !defined(OPENSSL_NO_DSA) -VALUE ossl_dsa_new_null(); VALUE ossl_dsa_new(DSA *); DSA *ossl_dsa_get_DSA(VALUE); EVP_PKEY *ossl_dsa_get_EVP_PKEY(VALUE); -#endif /* NO_RSA */ +#endif /* NO_DSA */ void Init_ossl_dsa(VALUE, VALUE, VALUE); /* + * DH + */ +#if !defined(NO_DH) && !defined(OPENSSL_NO_DH) +VALUE ossl_dh_new(DH *); +DH *ossl_dh_get_DH(VALUE); +EVP_PKEY *ossl_dh_get_EVP_PKEY(VALUE); +#endif /* NO_DH */ +void Init_ossl_dh(VALUE, VALUE, VALUE); + +/* * SSL */ void Init_ssl(VALUE); @@ -277,7 +277,6 @@ void Init_ssl(VALUE); /* * PKCS7 */ -VALUE ossl_pkcs7si_new_null(void); VALUE ossl_pkcs7si_new(PKCS7_SIGNER_INFO *); PKCS7_SIGNER_INFO *ossl_pkcs7si_get_PKCS7_SIGNER_INFO(VALUE); void Init_pkcs7(VALUE); @@ -290,7 +289,6 @@ void Init_hmac(VALUE); /* * BN */ -VALUE ossl_bn_new_null(void); VALUE ossl_bn_new(BIGNUM *); BIGNUM *ossl_bn_get_BIGNUM(VALUE); void Init_bn(VALUE); @@ -1,7 +1,7 @@ /* * $Id$ * 'OpenSSL for Ruby' project - * Copyright (C) 2001 UNKNOWN <oss-ruby@technorama.net> + * Copyright (C) 2001-2002 UNKNOWN <oss-ruby@technorama.net> * All rights reserved. */ /* @@ -31,29 +31,16 @@ VALUE eBNError; * Public */ VALUE -ossl_bn_new_null(void) -{ - BIGNUM *bn = NULL; - VALUE obj; - - if (!(bn = BN_new())) - OSSL_Raise(eBNError, ""); - - WrapBN(obj, bn); - - return obj; -} - -VALUE ossl_bn_new(BIGNUM *bn) { BIGNUM *new = NULL; VALUE obj; - if (!bn) - return ossl_bn_new_null(); - - if (!(new = BN_dup(bn))) + if (!bn) + new = BN_new(); + else new = BN_dup(bn); + + if (!new) OSSL_Raise(eBNError, ""); WrapBN(obj, new); @@ -69,9 +56,9 @@ ossl_bn_get_BIGNUM(VALUE obj) OSSL_Check_Type(obj, cBN); GetBN(obj, bn); - if (!(new = BN_dup(bn))) + if (!(new = BN_dup(bn))) { OSSL_Raise(eBNError, ""); - + } return new; } @@ -84,10 +71,8 @@ ossl_bn_s_new(int argc, VALUE *argv, VALUE klass) BIGNUM *bn = NULL; VALUE obj; - if (!(bn = BN_new())) - OSSL_Raise(eBNError, ""); - - WrapBN(obj, bn); + obj = ossl_bn_new(NULL); + rb_obj_call_init(obj, argc, argv); return obj; @@ -103,9 +88,9 @@ ossl_bn_s_new(int argc, VALUE *argv, VALUE klass) \ GetBN(self, bn); \ \ - if (!BN_##func##2bn(RSTRING(str)->ptr, RSTRING(str)->len, bn)) \ + if (!BN_##func##2bn(RSTRING(str)->ptr, RSTRING(str)->len, bn)) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ return self; \ } BIGNUM_FROM(bin); @@ -121,9 +106,9 @@ BIGNUM_FROM(mpi); \ GetBN(self, bn); \ \ - if (!BN_##func##2bn(&bn, RSTRING(str)->ptr)) \ + if (!BN_##func##2bn(&bn, RSTRING(str)->ptr)) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ return self; \ } BIGNUM_FROM2(dec); @@ -140,11 +125,14 @@ ossl_bn_to_bin(VALUE self) GetBN(self, bn); len = BN_num_bytes(bn); - buf = OPENSSL_malloc(len); - - if (BN_bn2bin(bn, buf) != len) + if (!(buf = OPENSSL_malloc(len))) { + OSSL_Raise(eBNError, "Cannot allocate mem for BN"); + } + if (BN_bn2bin(bn, buf) != len) { + OPENSSL_free(buf); OSSL_Raise(eBNError, ""); - + } + str = rb_str_new(buf, len); OPENSSL_free(buf); @@ -162,10 +150,13 @@ ossl_bn_to_mpi(VALUE self) GetBN(self, bn); len = BN_bn2mpi(bn, NULL); - buf = OPENSSL_malloc(len); - - if (BN_bn2mpi(bn, buf) != len) + if (!(buf = OPENSSL_malloc(len))) { + OSSL_Raise(eBNError, "Cannot allocate mem for BN"); + } + if (BN_bn2mpi(bn, buf) != len) { + OPENSSL_free(buf); OSSL_Raise(eBNError, ""); + } str = rb_str_new(buf, len); OPENSSL_free(buf); @@ -183,9 +174,9 @@ ossl_bn_to_mpi(VALUE self) \ GetBN(self, bn); \ \ - if (!(txt = BN_bn2##func(bn))) \ + if (!(txt = BN_bn2##func(bn))) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ str = rb_str_new2(txt); \ OPENSSL_free(txt); \ \ @@ -222,9 +213,9 @@ BIGNUM_BOOL1(is_odd); \ GetBN(self, bn); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ BN_CTX_init(&ctx); \ if (BN_##func(result, bn, &ctx) != 1) { \ BN_free(result); \ @@ -250,9 +241,9 @@ BIGNUM_1c(sqr); OSSL_Check_Type(other, cBN); \ GetBN(other, bn2); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ if (BN_##func(result, bn1, bn2) != 1) { \ BN_free(result); \ OSSL_Raise(eBNError, ""); \ @@ -279,9 +270,9 @@ BIGNUM_2(sub); OSSL_Check_Type(other, cBN); \ GetBN(other, bn2); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ BN_CTX_init(&ctx); \ if (BN_##func(result, bn1, bn2, &ctx) != 1) { \ BN_free(result); \ @@ -310,8 +301,9 @@ ossl_bn_div(VALUE self, VALUE other) OSSL_Check_Type(other, cBN); GetBN(other, bn2); - if (!(r1 = BN_new())) + if (!(r1 = BN_new())) { OSSL_Raise(eBNError, ""); + } if (!(r2 = BN_new())) { BN_free(r1); OSSL_Raise(eBNError, ""); @@ -343,9 +335,9 @@ ossl_bn_mod_inverse(VALUE self, VALUE other) OSSL_Check_Type(other, cBN); GetBN(other, bn2); - if (!(result = BN_new())) + if (!(result = BN_new())) { OSSL_Raise(eBNError, ""); - + } BN_CTX_init(&ctx); if (BN_mod_inverse(result, bn1, bn2, &ctx) == NULL) { BN_free(result); @@ -373,9 +365,9 @@ ossl_bn_mod_inverse(VALUE self, VALUE other) GetBN(other1, bn2); \ GetBN(other2, bn3); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ BN_CTX_init(&ctx); \ if (BN_##func(result, bn1, bn2, bn3, &ctx) != 1) { \ BN_free(result); \ @@ -397,9 +389,9 @@ BIGNUM_3c(mod_exp); \ GetBN(self, bn); \ \ - if (BN_##func(bn, NUM2INT(bit)) != 1) \ + if (BN_##func(bn, NUM2INT(bit)) != 1) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ return self; \ } BIGNUM_BIT_SETCLEAR(set_bit); @@ -425,9 +417,9 @@ ossl_bn_mask_bits(VALUE self, VALUE bit) GetBN(self, bn); - if (BN_mask_bits(bn, NUM2INT(bit)) != 1) + if (BN_mask_bits(bn, NUM2INT(bit)) != 1) { OSSL_Raise(eBNError, ""); - + } return self; } @@ -441,9 +433,9 @@ ossl_bn_mask_bits(VALUE self, VALUE bit) \ GetBN(self, bn); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ + } \ if (BN_##func(result, bn, NUM2INT(bits)) != 1) { \ BN_free(result); \ OSSL_Raise(eBNError, ""); \ @@ -463,12 +455,13 @@ BIGNUM_SHIFT(rshift); BIGNUM *result = NULL; \ VALUE obj; \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ - if (!BN_##func(result, NUM2INT(bits), NUM2INT(top), NUM2INT(bottom))) \ + } \ + if (!BN_##func(result, NUM2INT(bits), NUM2INT(top), NUM2INT(bottom))) { \ + BN_free(result); \ OSSL_Raise(eBNError, ""); \ - \ + } \ WrapBN(obj, result); \ \ return obj; \ @@ -487,12 +480,13 @@ BIGNUM_RAND(pseudo_rand); OSSL_Check_Type(range, cBN); \ GetBN(range, bn); \ \ - if (!(result = BN_new())) \ + if (!(result = BN_new())) { \ OSSL_Raise(eBNError, ""); \ - \ - if (!BN_##func##_range(result, bn)) \ + } \ + if (!BN_##func##_range(result, bn)) { \ + BN_free(result); \ OSSL_Raise(eBNError, ""); \ - \ + } \ WrapBN(obj, result); \ \ return obj; \ @@ -516,7 +510,7 @@ ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass) if (!NIL_P(vadd)) { if (NIL_P(vrem)) - rb_raise(rb_eArgError, "if add specified, rem must be also given"); + rb_raise(rb_eArgError, "if add is specified, rem must be also given"); OSSL_Check_Type(vadd, cBN); OSSL_Check_Type(vrem, cBN); @@ -525,12 +519,13 @@ ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass) GetBN(vrem, rem); } - if (!(result = BN_new())) + if (!(result = BN_new())) { OSSL_Raise(eBNError, ""); - - if (!BN_generate_prime(result, NUM2INT(vnum), safe, add, rem, NULL, NULL)) + } + if (!BN_generate_prime(result, NUM2INT(vnum), safe, add, rem, NULL, NULL)) { + BN_free(result); OSSL_Raise(eBNError, ""); - + } WrapBN(obj, result); return obj; @@ -569,9 +564,9 @@ ossl_bn_copy(VALUE self, VALUE other) OSSL_Check_Type(other, cBN); GetBN(other, bn2); - if (!BN_copy(bn1, bn2)) + if (!BN_copy(bn1, bn2)) { OSSL_Raise(eBNError, ""); - + } return self; } @@ -581,9 +576,9 @@ ossl_bn_copy(VALUE self, VALUE other) { \ BIGNUM *bn1 = NULL, *bn2 = NULL; \ \ - GetBN(self, bn1); \ - \ OSSL_Check_Type(other, cBN); \ + \ + GetBN(self, bn1); \ GetBN(other, bn2); \ \ return INT2FIX(BN_##func(bn1, bn2)); \ @@ -591,10 +586,6 @@ ossl_bn_copy(VALUE self, VALUE other) BIGNUM_CMP(cmp); BIGNUM_CMP(ucmp); -/* - * Seems strange to me. - * MR 2002/01/14 - */ static VALUE ossl_bn_eql(VALUE self, VALUE other) { diff --git a/ossl_cipher.c b/ossl_cipher.c index 94685fb..22fc5e2 100644 --- a/ossl_cipher.c +++ b/ossl_cipher.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. */ /* @@ -96,9 +96,9 @@ ossl_cipher_s_new(int argc, VALUE *argv, VALUE klass) MakeCipher(obj, klass, ciphp); - if (!(ciphp->ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX)))) + if (!(ciphp->ctx = OPENSSL_malloc(sizeof(EVP_CIPHER_CTX)))) { OSSL_Raise(eCipherError, ""); - + } rb_obj_call_init(obj, argc, argv); return obj; @@ -139,9 +139,9 @@ ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self) cipher = EVP_get_cipherbynid(ciphp->nid); EVP_BytesToKey(cipher, EVP_md5(), iv, RSTRING(pass)->ptr, RSTRING(pass)->len, 1, key, NULL); - if (!EVP_EncryptInit(ciphp->ctx, cipher, key, iv)) + if (!EVP_EncryptInit(ciphp->ctx, cipher, key, iv)) { OSSL_Raise(eCipherError, ""); - + } return self; } @@ -177,9 +177,9 @@ ossl_cipher_decrypt(int argc, VALUE *argv, VALUE self) EVP_BytesToKey(cipher, EVP_md5(), iv, RSTRING(pass)->ptr, RSTRING(pass)->len, 1, key, NULL); - if (!EVP_DecryptInit(ciphp->ctx, cipher, key, iv)) + if (!EVP_DecryptInit(ciphp->ctx, cipher, key, iv)) { OSSL_Raise(eCipherError, ""); - + } return self; } @@ -197,9 +197,9 @@ ossl_cipher_update(VALUE self, VALUE data) in = RSTRING(data)->ptr; in_len = RSTRING(data)->len; - if (!(out = OPENSSL_malloc(in_len + EVP_CIPHER_CTX_block_size(ciphp->ctx)))) + if (!(out = OPENSSL_malloc(in_len + EVP_CIPHER_CTX_block_size(ciphp->ctx)))) { OSSL_Raise(eCipherError, ""); - + } if (!EVP_CipherUpdate(ciphp->ctx, out, &out_len, in, in_len)) { OPENSSL_free(out); OSSL_Raise(eCipherError, ""); @@ -222,9 +222,9 @@ ossl_cipher_cipher(VALUE self) GetCipher(self, ciphp); - if (!(out = OPENSSL_malloc(EVP_CIPHER_CTX_block_size(ciphp->ctx)))) + if (!(out = OPENSSL_malloc(EVP_CIPHER_CTX_block_size(ciphp->ctx)))) { OSSL_Raise(eCipherError, ""); - + } if (!EVP_CipherFinal(ciphp->ctx, out, &out_len)) { OPENSSL_free(out); OSSL_Raise(eCipherError, ""); diff --git a/ossl_config.c b/ossl_config.c index 6ba188b..548affc 100644 --- a/ossl_config.c +++ b/ossl_config.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. */ /* @@ -66,7 +66,8 @@ ossl_config_s_load(int argc, VALUE* argv, VALUE klass) if (err_line <= 0) rb_raise(eConfigError, "wrong config file %s", RSTRING(path)->ptr); else - rb_raise(eConfigError, "error on line %ld in config file %s", err_line, RSTRING(path)->ptr); + rb_raise(eConfigError, "error on line %ld in config file %s",\ + err_line, RSTRING(path)->ptr); } MakeConfig(obj, confp); @@ -89,9 +90,9 @@ ossl_config_get_value(VALUE self, VALUE section, VALUE item) } Check_SafeStr(item); - if (!(str = CONF_get_string(confp->config, sect, RSTRING(item)->ptr))) + if (!(str = CONF_get_string(confp->config, sect, RSTRING(item)->ptr))) { OSSL_Raise(eConfigError, ""); - + } return rb_str_new2(str); } @@ -110,9 +111,10 @@ ossl_config_get_section(VALUE self, VALUE section) Check_SafeStr(section); - if (!(sk = CONF_get_section(confp->config, RSTRING(section)->ptr))) + if (!(sk = CONF_get_section(confp->config, RSTRING(section)->ptr))) { OSSL_Raise(eConfigError, ""); - + } + hash = rb_hash_new(); if ((entries = sk_CONF_VALUE_num(sk)) < 0) { @@ -121,8 +123,7 @@ ossl_config_get_section(VALUE self, VALUE section) } for (i=0; i<entries; i++) { - entry = sk_CONF_VALUE_value(sk, i); - + entry = sk_CONF_VALUE_value(sk, i); rb_hash_aset(hash, rb_str_new2(entry->name), rb_str_new2(entry->value)); } diff --git a/ossl_digest.c b/ossl_digest.c index 14027cf..d253545 100644 --- a/ossl_digest.c +++ b/ossl_digest.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. */ /* @@ -108,11 +108,10 @@ ossl_digest_digest(VALUE self) GetDigest(self, digestp); if (!EVP_MD_CTX_copy(&final, digestp->md)) { - rb_raise(eDigestError, "%s", ossl_error()); + OSSL_Raise(eDigestError, ""); } - if (!(digest_txt = OPENSSL_malloc(EVP_MD_CTX_size(&final)))) { - rb_raise(eDigestError, "Cannot allocate memory for digest"); + OSSL_Raise(eDigestError, "Cannot allocate mem for digest"); } EVP_DigestFinal(&final, digest_txt, &digest_len); @@ -138,17 +137,16 @@ ossl_digest_hexdigest(VALUE self) GetDigest(self, digestp); if (!EVP_MD_CTX_copy(&final, digestp->md)) { - rb_raise(eDigestError, "%s", ossl_error()); + OSSL_Raise(eDigestError, ""); } - if (!(digest_txt = OPENSSL_malloc(EVP_MD_CTX_size(&final)))) { - rb_raise(eDigestError, "Cannot allocate memory for digest"); + OSSL_Raise(eDigestError, "Cannot allocate memory for digest"); } EVP_DigestFinal(&final, digest_txt, &digest_len); if (!(hexdigest_txt = OPENSSL_malloc(2*digest_len+1))) { OPENSSL_free(digest_txt); - rb_raise(eDigestError, "Memory alloc error"); + OSSL_Raise(eDigestError, "Memory alloc error"); } for (i = 0; i < digest_len; i++) { hexdigest_txt[i + i] = hex[((unsigned char)digest_txt[i]) >> 4]; @@ -177,11 +175,11 @@ ossl_digest_hexdigest(VALUE self) GetDigest(self, digestp); if (!EVP_MD_CTX_copy(&final, digestp->md)) { - rb_raise(eDigestError, "%s", ossl_error()); + OSSL_Raise(eDigestError, ""); } if (!(digest_txt = OPENSSL_malloc(EVP_MD_CTX_size(&final)))) { - rb_raise(eDigestError, "Cannot allocate memory for digest"); + OSSL_Raise(eDigestError, "Cannot allocate memory for digest"); } EVP_DigestFinal(&final, digest_txt, &digest_len); @@ -206,7 +204,7 @@ ossl_digest_hexdigest(VALUE self) \ GetDigest(self, digestp); \ if (!(digestp->md = OPENSSL_malloc(sizeof(EVP_MD_CTX)))) { \ - rb_raise(eDigestError, "Cannot allocate memory for new digest"); \ + OSSL_Raise(eDigestError, "Cannot allocate memory for a digest's CTX"); \ } \ EVP_DigestInit(digestp->md, EVP_##dgst()); \ \ @@ -262,7 +260,7 @@ Init_ossl_digest(VALUE module) rb_define_method(cDigest, "digest", ossl_digest_digest, 0); rb_define_method(cDigest, "hexdigest", ossl_digest_hexdigest, 0); rb_define_alias(cDigest, "inspect", "hexdigest"); - rb_define_alias(cDigest, "to_str", "hexdigest"); + rb_define_alias(cDigest, "to_s", "hexdigest"); /*rb_define_method(cDigest, "==", ossl_digest_equal, 1);*/ /* diff --git a/ossl_hmac.c b/ossl_hmac.c index 4999e99..43d9a45 100644 --- a/ossl_hmac.c +++ b/ossl_hmac.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. */ /* @@ -74,9 +74,8 @@ ossl_hmac_initialize(int argc, VALUE *argv, VALUE self) md = ossl_digest_get_EVP_MD(digest); if (!(hmacp->hmac = OPENSSL_malloc(sizeof(HMAC_CTX)))) { - rb_raise(eHMACError, "%s", ossl_error()); + OSSL_Raise(eHMACError, ""); } - HMAC_Init(hmacp->hmac, RSTRING(key)->ptr, RSTRING(key)->len, md); return self; @@ -108,11 +107,10 @@ ossl_hmac_hmac(VALUE self) GetHMAC(self, hmacp); if (!HMAC_CTX_copy(&final, hmacp->hmac)) { - rb_raise(eHMACError, "%s", ossl_error()); + OSSL_Raise(eHMACError, ""); } - if (!(buf = OPENSSL_malloc(HMAC_size(&final)))) { - rb_raise(eHMACError, "Cannot allocate memory for hmac"); + OSSL_Raise(eHMACError, "Cannot allocate memory for hmac"); } HMAC_Final(&final, buf, &buf_len); @@ -135,23 +133,25 @@ ossl_hmac_hexhmac(VALUE self) GetHMAC(self, hmacp); if (!HMAC_CTX_copy(&final, hmacp->hmac)) { - rb_raise(eHMACError, "%s", ossl_error()); + OSSL_Raise(eHMACError, "Cannot copy HMAC CTX"); } - if (!(buf = OPENSSL_malloc(HMAC_size(&final)))) { - rb_raise(eHMACError, "Cannot allocate memory for hmac"); + OSSL_Raise(eHMACError, "Cannot allocate memory for hmac"); } HMAC_Final(&final, buf, &buf_len); if (!(hexbuf = OPENSSL_malloc(2*buf_len+1))) { - rb_raise(eHMACError, "Memory alloc error"); + OPENSSL_free(buf); + OSSL_Raise(eHMACError, "Memory alloc error"); } for (i = 0; i < buf_len; i++) { hexbuf[i + i] = hex[((unsigned char)buf[i]) >> 4]; hexbuf[i + i + 1] = hex[buf[i] & 0x0f]; } hexbuf[i + i] = '\0'; + str = rb_str_new(hexbuf, 2*buf_len); + OPENSSL_free(buf); OPENSSL_free(hexbuf); diff --git a/ossl_ns_spki.c b/ossl_ns_spki.c index e9d3b58..fcea90c 100644 --- a/ossl_ns_spki.c +++ b/ossl_ns_spki.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. */ /* @@ -80,7 +80,7 @@ ossl_spki_initialize(int argc, VALUE *argv, VALUE self) rb_raise(rb_eTypeError, "unsupported type"); } if (!spki) - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); spkip->spki = spki; @@ -97,7 +97,7 @@ ossl_spki_to_pem(VALUE self) GetSPKI(self, spkip); if (!(data = NETSCAPE_SPKI_b64_encode(spkip->spki))) { - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } str = rb_str_new2(data); @@ -117,11 +117,11 @@ ossl_spki_to_str(VALUE self) GetSPKI(self, spkip); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } if (!NETSCAPE_SPKI_print(out, spkip->spki)) { BIO_free(out); - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -139,7 +139,7 @@ ossl_spki_get_public_key(VALUE self) GetSPKI(self, spkip); if (!(pkey = NETSCAPE_SPKI_get_pubkey(spkip->spki))) { - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } return ossl_pkey_new(pkey); @@ -157,7 +157,7 @@ ossl_spki_set_public_key(VALUE self, VALUE pubk) if (!NETSCAPE_SPKI_set_pubkey(spkip->spki, pkey)) { EVP_PKEY_free(pkey); - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } return pubk; @@ -185,7 +185,7 @@ ossl_spki_set_challenge(VALUE self, VALUE str) Check_SafeStr(str); if (!ASN1_STRING_set(spkip->spki->spkac->challenge, RSTRING(str)->ptr, RSTRING(str)->len)) { - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } return str; @@ -209,7 +209,7 @@ ossl_spki_sign(VALUE self, VALUE key, VALUE digest) if (!NETSCAPE_SPKI_sign(spkip->spki, pkey, md)) { EVP_PKEY_free(pkey); - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } return self; @@ -233,7 +233,7 @@ ossl_spki_verify(VALUE self, VALUE key) EVP_PKEY_free(pkey); if (result < 0) { - rb_raise(eSPKIError, "%s", ossl_error()); + OSSL_Raise(eSPKIError, ""); } else if (result > 0) return Qtrue; 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); diff --git a/ossl_pkey.c b/ossl_pkey.c index 387762b..09e8a59 100644 --- a/ossl_pkey.c +++ b/ossl_pkey.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. */ /* @@ -34,7 +34,7 @@ VALUE ossl_pkey_new(EVP_PKEY *key) { if (!key) - rb_raise(ePKeyError, "Empty key!"); + rb_raise(ePKeyError, "Cannot make new key from NULL."); switch (key->type) { #if !defined(NO_RSA) && !defined(OPENSSL_NO_RSA) @@ -45,6 +45,10 @@ ossl_pkey_new(EVP_PKEY *key) case EVP_PKEY_DSA: return ossl_dsa_new(key->pkey.dsa); #endif +#if !defined(NO_DH) && !defined(OPENSSL_NO_DH) + case EVP_PKEY_DH: + return ossl_dh_new(key->pkey.dh); +#endif } rb_raise(ePKeyError, "unsupported key type"); @@ -62,15 +66,24 @@ ossl_pkey_new_from_file(VALUE path) Check_SafeStr(path); filename = RSTRING(path)->ptr; + if ((fp = fopen(filename, "r")) == NULL) rb_raise(ePKeyError, "%s", strerror(errno)); + + /* + * MR: + * How about PublicKeys from file? + * pkey = PEM_read_PublicKey(fp, NULL, NULL, NULL); + * MISSING IN OPENSSL + */ /* * Will we handle user passwords? */ pkey = PEM_read_PrivateKey(fp, NULL, NULL, NULL); fclose(fp); + if (!pkey) - rb_raise(ePKeyError, "%s", ossl_error()); + OSSL_Raise(ePKeyError, ""); obj = ossl_pkey_new(pkey); EVP_PKEY_free(pkey); @@ -117,9 +130,6 @@ Init_ossl_pkey(VALUE module) */ Init_ossl_rsa(module, cPKey, ePKeyError); Init_ossl_dsa(module, cPKey, ePKeyError); - /* - * TODO: - * Init_ossl_dh(module, cPKey, ePKeyError); - */ + Init_ossl_dh(module, cPKey, ePKeyError); } diff --git a/ossl_pkey_dh.c b/ossl_pkey_dh.c new file mode 100644 index 0000000..ea507b5 --- /dev/null +++ b/ossl_pkey_dh.c @@ -0,0 +1,316 @@ +/* + * $Id$ + * 'OpenSSL for Ruby' project + * Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz> + * All rights reserved. + */ +/* + * This program is licenced under the same licence as Ruby. + * (See the file 'LICENCE'.) + */ +#if !defined(NO_DH) && !defined(OPENSSL_NO_DH) + +#include "ossl.h" +#include "ossl_pkey.h" + +#define MakeDH(obj, dhp) {\ + obj = Data_Make_Struct(cDH, ossl_dh, 0, ossl_dh_free, dhp);\ + dhp->pkey.get_EVP_PKEY = ossl_dh_get_EVP_PKEY;\ +} + +#define GetDH(obj, dhp) {\ + Data_Get_Struct(obj, ossl_dh, dhp);\ + if (!dhp->dh) rb_raise(eDHError, "not initialized!");\ +} + +#define DH_PRIVATE(dh) ((dh)->priv_key) + +/* + * Classes + */ +VALUE cDH; +VALUE eDHError; + +/* + * Struct + */ +typedef struct ossl_dh_st { + ossl_pkey pkey; + DH *dh; +} ossl_dh; + +static void +ossl_dh_free(ossl_dh *dhp) +{ + if (dhp) { + if (dhp->dh) DH_free(dhp->dh); + dhp->dh = NULL; + free(dhp); + } +} + +/* + * Public + */ +VALUE +ossl_dh_new(DH *dh) +{ + ossl_dh *dhp = NULL; + DH *new = NULL; + VALUE obj; + + if (!dh) + new = DH_new(); + else new = DHparams_dup(dh); + + if (!new) + OSSL_Raise(eDHError, ""); + + MakeDH(obj, dhp); + dhp->dh = new; + + return obj; +} + +DH * +ossl_dh_get_DH(VALUE obj) +{ + ossl_dh *dhp = NULL; + DH *dh = NULL; + + OSSL_Check_Type(obj, cDH); + GetDH(obj, dhp); + + dh = DHparams_dup(dhp->dh); + + if (!dh) + OSSL_Raise(eDHError, ""); + + return dh; +} + +EVP_PKEY * +ossl_dh_get_EVP_PKEY(VALUE obj) +{ + DH *dh = NULL; + EVP_PKEY *pkey = NULL; + + dh = ossl_dh_get_DH(obj); + + if (!(pkey = EVP_PKEY_new())) { + DH_free(dh); + OSSL_Raise(eDHError, ""); + } + + if (!EVP_PKEY_assign_DH(pkey, dh)) { /* NO DUP - don't free! */ + DH_free(dh); + EVP_PKEY_free(pkey); + OSSL_Raise(eDHError, ""); + } + + return pkey; +} + +/* + * Private + */ +static VALUE +ossl_dh_s_new_from_pem(VALUE klass, VALUE buffer) +{ + ossl_dh *dhp = NULL; + DH *dh = NULL; + BIO *in = NULL; + VALUE obj; + + Check_SafeStr(buffer); + + if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) + OSSL_Raise(eDHError, ""); + + if (!(dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL))) { + BIO_free(in); + OSSL_Raise(eDHError, ""); + } + BIO_free(in); + + MakeDH(obj, dhp); + dhp->dh = dh; + + return obj; +} + +/* + * CB for yielding when generating DH params + */ +static void MS_CALLBACK +ossl_dh_generate_cb(int p, int n, void *arg) +{ + VALUE ary; + + ary = rb_ary_new2(2); + rb_ary_store(ary, 0, INT2NUM(p)); + rb_ary_store(ary, 1, INT2NUM(n)); + + rb_yield(ary); +} + +static VALUE +ossl_dh_s_generate(VALUE klass, VALUE size, VALUE gen) +{ + ossl_dh *dhp = NULL; + DH *dh = NULL; + void (*cb)(int, int, void *) = NULL; + VALUE obj; + + Check_Type(size, T_FIXNUM); + + if (rb_block_given_p()) + cb = ossl_dh_generate_cb; + + if (!(dh = DH_generate_parameters(FIX2INT(size), FIX2INT(gen), cb, NULL))) { /* arg to cb = NULL */ + OSSL_Raise(eDHError, ""); + } + if (!DH_generate_key(dh)) { + DH_free(dh); + OSSL_Raise(eDHError, ""); + } + + MakeDH(obj, dhp); + dhp->dh = dh; + + return obj; +} + +static VALUE +ossl_dh_is_public(VALUE self) +{ + ossl_dh *dhp = NULL; + + GetDH(self, dhp); + + /* + * Do we need to check dhp->dh->public_pkey? + * return Qtrue; + */ + return (dhp->dh->pub_key) ? Qtrue : Qfalse; +} + +static VALUE +ossl_dh_is_private(VALUE self) +{ + ossl_dh *dhp = NULL; + + GetDH(self, dhp); + + return (DH_PRIVATE(dhp->dh)) ? Qtrue : Qfalse; +} + +static VALUE +ossl_dh_export(VALUE self) +{ + ossl_dh *dhp = NULL; + BIO *out = NULL; + BUF_MEM *buf = NULL; + VALUE str; + + GetDH(self, dhp); + + if (!(out = BIO_new(BIO_s_mem()))) { + OSSL_Raise(eDHError, ""); + } + + if (!PEM_write_bio_DHparams(out, dhp->dh)) { + BIO_free(out); + OSSL_Raise(eDHError, ""); + } + + BIO_get_mem_ptr(out, &buf); + str = rb_str_new(buf->data, buf->length); + BIO_free(out); + + return str; +} + +/* + * Prints all parameters of key to buffer + * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! + * Don't use :-)) (I's up to you) + */ +static VALUE +ossl_dh_to_str(VALUE self) +{ + ossl_dh *dhp = NULL; + BIO *out = NULL; + BUF_MEM *buf = NULL; + VALUE str; + + GetDH(self, dhp); + + if (!(out = BIO_new(BIO_s_mem()))) { + OSSL_Raise(eDHError, ""); + } + if (!DHparams_print(out, dhp->dh)) { + BIO_free(out); + OSSL_Raise(eDHError, ""); + } + + BIO_get_mem_ptr(out, &buf); + str = rb_str_new(buf->data, buf->length); + BIO_free(out); + + return str; +} + +/* + * Makes new instance DH PUBLIC_KEY from PRIVATE_KEY + */ +static VALUE +ossl_dh_to_public_key(VALUE self) +{ + ossl_dh *dhp1 = NULL, *dhp2 = NULL; + VALUE obj; + + GetDH(self, dhp1); + + MakeDH(obj, dhp2); + + if (!(dhp2->dh = DHparams_dup(dhp1->dh))) { + OSSL_Raise(eDHError, ""); + } + + return obj; +} + +/* + * INIT + */ +void +Init_ossl_dh(VALUE mPKey, VALUE cPKey, VALUE ePKeyError) +{ + eDHError = rb_define_class_under(mPKey, "DHError", ePKeyError); + + cDH = rb_define_class_under(mPKey, "DH", cPKey); + + rb_define_singleton_method(cDH, "new_from_pem", ossl_dh_s_new_from_pem, 1); + rb_define_singleton_method(cDH, "generate", ossl_dh_s_generate, 2); + rb_define_alias(CLASS_OF(cDH), "new_from_fixnum", "generate"); + + rb_define_method(cDH, "public?", ossl_dh_is_public, 0); + rb_define_method(cDH, "private?", ossl_dh_is_private, 0); + rb_define_method(cDH, "to_str", ossl_dh_to_str, 0); + rb_define_method(cDH, "export", ossl_dh_export, 0); + rb_define_alias(cDH, "to_pem", "export"); + rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); +} + +#else /* defined NO_DH */ +# warning >>> OpenSSL is compiled without DH support <<< + +void +Init_ossl_dh(VALUE mPKey, VALUE cPKey, VALUE ePKeyError) +{ + rb_warning("OpenSSL is compiled without DH support"); +} + +#endif /* NO_DH */ + diff --git a/ossl_pkey_dsa.c b/ossl_pkey_dsa.c index 07448c5..673f752 100644 --- a/ossl_pkey_dsa.c +++ b/ossl_pkey_dsa.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. */ /* @@ -53,35 +53,22 @@ ossl_dsa_free(ossl_dsa *dsap) * Public */ VALUE -ossl_dsa_new_null() -{ - ossl_dsa *dsap = NULL; - VALUE obj; - - MakeDSA(obj, dsap); - - if (!(dsap->dsa = DSA_new())) - rb_raise(eDSAError, "%s", ossl_error()); - - return obj; -} - -VALUE ossl_dsa_new(DSA *dsa) { ossl_dsa *dsap = NULL; + DSA *new = NULL; VALUE obj; if (!dsa) - return ossl_dsa_new_null(); + new = DSA_new(); + else new = (DSA_PRIVATE(dsa)) ? DSAPrivateKey_dup(dsa) : DSAPublicKey_dup(dsa); + + if (!new) + OSSL_Raise(eDSAError, ""); MakeDSA(obj, dsap); - - dsap->dsa = (DSA_PRIVATE(dsa)) ? DSAPrivateKey_dup(dsa) : DSAPublicKey_dup(dsa); + dsap->dsa = new; - if (!dsap->dsa) - rb_raise(eDSAError, "%s", ossl_error()); - return obj; } @@ -96,7 +83,7 @@ ossl_dsa_get_DSA(VALUE obj) dsa = (DSA_PRIVATE(dsap->dsa)) ? DSAPrivateKey_dup(dsap->dsa) : DSAPublicKey_dup(dsap->dsa); if (!dsa) - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); return dsa; } @@ -111,13 +98,13 @@ ossl_dsa_get_EVP_PKEY(VALUE obj) if (!(pkey = EVP_PKEY_new())) { DSA_free(dsa); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!EVP_PKEY_assign_DSA(pkey, dsa)) { /* NO DUP - don't free! */ DSA_free(dsa); EVP_PKEY_free(pkey); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } return pkey; @@ -192,9 +179,9 @@ ossl_dsa_s_generate(VALUE klass, VALUE size) Check_Type(size, T_FIXNUM); - if (!RAND_bytes(seed, seed_len)) - rb_raise(eDSAError, "%s", ossl_error()); - + if (!RAND_bytes(seed, seed_len)) { + OSSL_Raise(eDSAError, ""); + } if (rb_block_given_p()) cb = ossl_dsa_generate_cb; @@ -203,7 +190,7 @@ ossl_dsa_s_generate(VALUE klass, VALUE size) } if (!DSA_generate_key(dsa)) { DSA_free(dsa); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } MakeDSA(obj, dsap); @@ -259,18 +246,18 @@ ossl_dsa_export(int argc, VALUE *argv, VALUE self) } } if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (DSA_PRIVATE(dsap->dsa)) { if (!PEM_write_bio_DSAPrivateKey(out, dsap->dsa, ciph, NULL, 0, NULL, pass)) { BIO_free(out); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } } else { if (!PEM_write_bio_DSAPublicKey(out, dsap->dsa)) { BIO_free(out); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } } @@ -293,21 +280,21 @@ ossl_dsa_to_der(VALUE self) if (!(pkey = EVP_PKEY_new())) { DSA_free(dsa); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!EVP_PKEY_assign_DSA(pkey, dsa)) { /* NO DUP - don't free! */ DSA_free(dsa); EVP_PKEY_free(pkey); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!(key = X509_PUBKEY_new())) { EVP_PKEY_free(pkey); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!X509_PUBKEY_set(&key, pkey)) { /* safe to FREE pkey or NOT? */ EVP_PKEY_free(pkey); X509_PUBKEY_free(key); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } str = rb_str_new(key->public_key->data, key->public_key->length); @@ -333,11 +320,11 @@ ossl_dsa_to_str(VALUE self) GetDSA(self, dsap); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!DSA_print(out, dsap->dsa, 0)) { //offset = 0 BIO_free(out); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } BIO_get_mem_ptr(out, &buf); @@ -361,7 +348,7 @@ ossl_dsa_to_public_key(VALUE self) MakeDSA(obj, dsap2); if (!(dsap2->dsa = DSAPublicKey_dup(dsap1->dsa))) { - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } return obj; @@ -383,12 +370,12 @@ ossl_dsa_sign(VALUE self, VALUE data) } if (!(sig = OPENSSL_malloc(DSA_size(dsap->dsa)+16))) { - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } if (!DSA_sign(0, RSTRING(data)->ptr, RSTRING(data)->len, sig, &sig_len, dsap->dsa)) { /*type = 0*/ OPENSSL_free(sig); - rb_raise(eDSAError, "%s", ossl_error()); + OSSL_Raise(eDSAError, ""); } str = rb_str_new(sig, sig_len); OPENSSL_free(sig); @@ -410,9 +397,9 @@ ossl_dsa_verify(VALUE self, VALUE digest, VALUE sig) ret = DSA_verify(0, RSTRING(digest)->ptr, RSTRING(digest)->len,\ RSTRING(sig)->ptr, RSTRING(sig)->len, dsap->dsa); /*type = 0*/ - if (ret < 0) - rb_raise(eDSAError, "%s", ossl_error()); - else if (ret == 1) + if (ret < 0) { + OSSL_Raise(eDSAError, ""); + } else if (ret == 1) return Qtrue; return Qfalse; diff --git a/ossl_pkey_rsa.c b/ossl_pkey_rsa.c index 8901bec..c8612d4 100644 --- a/ossl_pkey_rsa.c +++ b/ossl_pkey_rsa.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. */ /* @@ -53,34 +53,21 @@ ossl_rsa_free(ossl_rsa *rsap) * Public */ VALUE -ossl_rsa_new_null() -{ - ossl_rsa *rsap = NULL; - VALUE obj; - - MakeRSA(obj, rsap); - - if (!(rsap->rsa = RSA_new())) - rb_raise(eRSAError, "%s", ossl_error()); - - return obj; -} - -VALUE ossl_rsa_new(RSA *rsa) { ossl_rsa *rsap = NULL; + RSA *new = NULL; VALUE obj; if (!rsa) - return ossl_rsa_new_null(); + new = RSA_new(); + else new = (RSA_PRIVATE(rsa)) ? RSAPrivateKey_dup(rsa) : RSAPublicKey_dup(rsa); + + if (!new) + OSSL_Raise(eRSAError, ""); MakeRSA(obj, rsap); - - rsap->rsa = (RSA_PRIVATE(rsa)) ? RSAPrivateKey_dup(rsa) : RSAPublicKey_dup(rsa); - - if (!rsap->rsa) - rb_raise(eRSAError, "%s", ossl_error()); + rsap->rsa = new; return obj; } @@ -97,7 +84,7 @@ ossl_rsa_get_RSA(VALUE obj) rsa = (RSA_PRIVATE(rsap->rsa)) ? RSAPrivateKey_dup(rsap->rsa) : RSAPublicKey_dup(rsap->rsa); if (!rsa) - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); return rsa; } @@ -112,13 +99,13 @@ ossl_rsa_get_EVP_PKEY(VALUE obj) if (!(pkey = EVP_PKEY_new())) { RSA_free(rsa); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!EVP_PKEY_assign_RSA(pkey, rsa)) { RSA_free(rsa); EVP_PKEY_free(pkey); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } return pkey; @@ -146,9 +133,9 @@ ossl_rsa_s_new_from_pem(int argc, VALUE *argv, VALUE klass) } /* else passwd = NULL; */ - if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) - rb_raise(eRSAError, "%s", ossl_error()); - + if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) { + OSSL_Raise(eRSAError, ""); + } if (!(rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL))) { BIO_reset(in); @@ -194,7 +181,7 @@ ossl_rsa_s_generate(VALUE klass, VALUE size) cb = ossl_rsa_generate_cb; if (!(rsa = RSA_generate_key(FIX2INT(size), RSA_F4, cb, NULL))) { /* arg to cb = NULL */ - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } MakeRSA(obj, rsap); @@ -250,18 +237,18 @@ ossl_rsa_export(int argc, VALUE *argv, VALUE self) } } if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (RSA_PRIVATE(rsap->rsa)) { if (!PEM_write_bio_RSAPrivateKey(out, rsap->rsa, ciph, NULL, 0, NULL, pass)) { BIO_free(out); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } } else { if (!PEM_write_bio_RSAPublicKey(out, rsap->rsa)) { BIO_free(out); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } } @@ -286,12 +273,12 @@ ossl_rsa_public_encrypt(VALUE self, VALUE buffer) size = RSA_size(rsap->rsa); - if (!(enc_text = OPENSSL_malloc(size + 16))) + if (!(enc_text = OPENSSL_malloc(size + 16))) { OSSL_Raise(eRSAError, ""); - + } if ((len = RSA_public_encrypt(RSTRING(buffer)->len, RSTRING(buffer)->ptr, enc_text, rsap->rsa, RSA_PKCS1_PADDING)) < 0) { OPENSSL_free(enc_text); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } enc = rb_str_new(enc_text, len); OPENSSL_free(enc_text); @@ -313,12 +300,12 @@ ossl_rsa_public_decrypt(VALUE self, VALUE buffer) size = RSA_size(rsap->rsa); - if (!(txt = OPENSSL_malloc(size + 16))) + if (!(txt = OPENSSL_malloc(size + 16))) { OSSL_Raise(eRSAError, ""); - + } if ((len = RSA_public_decrypt(RSTRING(buffer)->len, RSTRING(buffer)->ptr, txt, rsap->rsa, RSA_PKCS1_PADDING)) < 0) { OPENSSL_free(txt); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } text = rb_str_new(txt, len); OPENSSL_free(txt); @@ -344,12 +331,12 @@ ossl_rsa_private_encrypt(VALUE self, VALUE buffer) size = RSA_size(rsap->rsa); - if (!(enc_text = OPENSSL_malloc(size + 16))) + if (!(enc_text = OPENSSL_malloc(size + 16))) { OSSL_Raise(eRSAError, "Memory alloc error"); - + } if ((len = RSA_private_encrypt(RSTRING(buffer)->len, RSTRING(buffer)->ptr, enc_text, rsap->rsa, RSA_PKCS1_PADDING)) < 0) { OPENSSL_free(enc_text); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } enc = rb_str_new(enc_text, len); OPENSSL_free(enc_text); @@ -375,9 +362,9 @@ ossl_rsa_private_decrypt(VALUE self, VALUE buffer) size = RSA_size(rsap->rsa); - if (!(txt = OPENSSL_malloc(size + 16))) + if (!(txt = OPENSSL_malloc(size + 16))) { OSSL_Raise(eRSAError, "Memory alloc error"); - + } if ((len = RSA_private_decrypt(RSTRING(buffer)->len, RSTRING(buffer)->ptr, txt, rsap->rsa, RSA_PKCS1_PADDING)) < 0) { OPENSSL_free(txt); OSSL_Raise(eRSAError, ""); @@ -404,11 +391,11 @@ ossl_rsa_get_n(VALUE self) GetRSA(self, rsap); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!BN_print(out, rsap->rsa->n)) { BIO_free(out); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } BIO_get_mem_ptr(out, &buf); @@ -431,21 +418,21 @@ ossl_rsa_to_der(VALUE self) if (!(pkey = EVP_PKEY_new())) { RSA_free(rsa); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!EVP_PKEY_assign_RSA(pkey, rsa)) { /* NO DUP - don't free! */ RSA_free(rsa); EVP_PKEY_free(pkey); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!(key = X509_PUBKEY_new())) { EVP_PKEY_free(pkey); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!X509_PUBKEY_set(&key, pkey)) { /* safe to FREE pkey??? */ EVP_PKEY_free(pkey); X509_PUBKEY_free(key); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } str = rb_str_new(key->public_key->data, key->public_key->length); @@ -471,11 +458,11 @@ ossl_rsa_to_str(VALUE self) GetRSA(self, rsap); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } if (!RSA_print(out, rsap->rsa, 0)) { //offset = 0 BIO_free(out); - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } BIO_get_mem_ptr(out, &buf); @@ -499,7 +486,7 @@ ossl_rsa_to_public_key(VALUE self) MakeRSA(obj, rsap2); if (!(rsap2->rsa = RSAPublicKey_dup(rsap1->rsa))) { - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } return obj; @@ -523,7 +510,7 @@ ossl_rsa_sign(VALUE self, VALUE digest, VALUE text) Check_SafeStr(text); if (!(sign = OPENSSL_malloc(RSA_size(rsap->rsa)+16))) { - rb_raise(eRSAError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } md = ossl_digest_get_EVP_MD(digest); @@ -531,7 +518,7 @@ ossl_rsa_sign(VALUE self, VALUE digest, VALUE text) EVP_SignUpdate(&ctx, RSTRING(text)->ptr, RSTRING(text)->len); if (!EVP_SignFinal(&ctx, sign, &sign_len, pkeyp->key)) { OPENSSL_free(sign); - rb_raise(ePKeyError, "%s", ossl_error()); + OSSL_Raise(eRSAError, ""); } str = rb_str_new(sign, sign_len); diff --git a/ossl_rand.c b/ossl_rand.c index 3e6da45..037f608 100644 --- a/ossl_rand.c +++ b/ossl_rand.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. */ /* @@ -13,7 +13,6 @@ /* * Classes */ -VALUE cRandom; VALUE eRandomError; /* @@ -41,7 +40,7 @@ ossl_rand_load_file(VALUE self, VALUE filename) { Check_SafeStr(filename); if(!RAND_load_file(RSTRING(filename)->ptr, -1)) { - rb_raise(rb_eIOError, "%s", ossl_error()); + OSSL_Raise(eRandomError, ""); } return Qtrue; @@ -52,7 +51,7 @@ ossl_rand_write_file(VALUE self, VALUE filename) { Check_SafeStr(filename); if (RAND_write_file(RSTRING(filename)->ptr) == -1) { - rb_raise(rb_eIOError, "%s", ossl_error()); + OSSL_Raise(eRandomError, ""); } return Qtrue; @@ -67,12 +66,12 @@ ossl_rand_bytes(VALUE self, VALUE len) Check_Type(len, T_FIXNUM); if (!(buffer = OPENSSL_malloc(FIX2INT(len)+1))) { - rb_raise(eRandomError, "%s", ossl_error()); + OSSL_Raise(eRandomError, ""); } if (!RAND_bytes(buffer, FIX2INT(len))) { OPENSSL_free(buffer); - rb_raise(eRandomError, "%s", ossl_error()); + OSSL_Raise(eRandomError, ""); } str = rb_str_new(buffer, FIX2INT(len)); @@ -85,8 +84,9 @@ static VALUE ossl_rand_egd(VALUE self, VALUE filename) { Check_SafeStr(filename); - if(!RAND_egd(RSTRING(filename)->ptr)) - rb_raise(eRandomError, "%s", ossl_error()); + if(!RAND_egd(RSTRING(filename)->ptr)) { + OSSL_Raise(eRandomError, ""); + } return Qtrue; } @@ -97,8 +97,9 @@ ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len) Check_SafeStr(filename); Check_Type(len, T_FIXNUM); - if (!RAND_egd_bytes(RSTRING(filename)->ptr, FIX2INT(len))) - rb_raise(eRandomError, "%s", ossl_error()); + if (!RAND_egd_bytes(RSTRING(filename)->ptr, FIX2INT(len))) { + OSSL_Raise(eRandomError, ""); + } return Qtrue; } @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2000-2001 GOTOU YUUZOU <gotoyuzo@notwork.org> + * Copyright (c) 2000-2002 GOTOU YUUZOU <gotoyuzo@notwork.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -182,11 +182,11 @@ ssl_ctx_setup(VALUE self) key = NIL_P(val) ? NULL : ossl_pkey_get_EVP_PKEY(val); if(cert && key){ if(!SSL_CTX_use_certificate(p->ctx,cert)) - rb_raise(eSSLError,"SSL_CTX_use_certificate:%s",ossl_error()); + OSSL_Raise(eSSLError,"SSL_CTX_use_certificate:"); if(!SSL_CTX_use_PrivateKey(p->ctx,key)) - rb_raise(eSSLError,"SSL_CTX_use_PrivateKey:%s",ossl_error()); + OSSL_Raise(eSSLError,"SSL_CTX_use_PrivateKey:"); if(!SSL_CTX_check_private_key(p->ctx)) - rb_raise(eSSLError,"SSL_CTX_check_private_key:%s",ossl_error()); + OSSL_Raise(eSSLError,"SSL_CTX_check_private_key:"); } val = ssl_get_ca(self); @@ -197,11 +197,12 @@ ssl_ctx_setup(VALUE self) ca_path = NIL_P(val) ? NULL : RSTRING(val)->ptr; if (ca) if(!SSL_CTX_add_client_CA(p->ctx, ca)) - rb_raise(eSSLError, "%s", ossl_error()); + OSSL_Raise(eSSLError, ""); + if ((!SSL_CTX_load_verify_locations(p->ctx, ca_file, ca_path) || !SSL_CTX_set_default_verify_paths(p->ctx)) && ruby_verbose) { - rb_warning("can't set verify locations:%s", ossl_error()); + OSSL_Warning("can't set verify locations"); } val = ssl_get_verify_mode(self); @@ -229,7 +230,7 @@ ssl_setup(VALUE self) rb_io_check_readable(fptr); rb_io_check_writable(fptr); if((p->ssl = SSL_new(p->ctx)) == NULL) - rb_raise(eSSLError, "SSL_new:%s", ossl_error()); + OSSL_Raise(eSSLError, "SSL_new:"); SSL_set_fd(p->ssl, fileno(fptr->f)); } } @@ -243,7 +244,8 @@ ssl_s_new(int argc, VALUE *argv, VALUE klass) obj = Data_Make_Struct(klass, ssl_st, 0, ssl_free, p); memset(p, 0, sizeof(ssl_st)); if((p->ctx = SSL_CTX_new(SSLv23_method())) == NULL) - rb_raise(eSSLError, "SSL_CTX_new:%s", ossl_error()); + OSSL_Raise(eSSLError, "SSL_CTX_new:"); + SSL_CTX_set_options(p->ctx, SSL_OP_ALL); rb_obj_call_init(obj, argc, argv); @@ -294,7 +296,7 @@ ssl_connect(VALUE self) ssl_verify_callback_proc = ssl_get_verify_cb(self); if(SSL_connect(p->ssl) <= 0){ - rb_raise(eSSLError, "SSL_connect:%s", ossl_error()); + OSSL_Raise(eSSLError, "SSL_connect:"); } return self; @@ -311,7 +313,7 @@ ssl_accept(VALUE self) ssl_verify_callback_proc = ssl_get_verify_cb(self); if(SSL_accept(p->ssl) <= 0){ - rb_raise(eSSLError, "SSL_accept:%s", ossl_error()); + OSSL_Raise(eSSLError, "SSL_accept:"); } return self; @@ -320,63 +322,71 @@ ssl_accept(VALUE self) static VALUE ssl_read(VALUE self, VALUE len) { - ssl_st *p; - size_t ilen, nread = 0; - VALUE str; + ssl_st *p; + size_t ilen, nread = 0; + VALUE str; OpenFile *fptr; - Data_Get_Struct(self, ssl_st, p); - ilen = NUM2INT(len); - str = rb_str_new(0, ilen); - - if(p->ssl){ - nread = SSL_read(p->ssl, RSTRING(str)->ptr, RSTRING(str)->len); - if(nread < 0) rb_raise(eSSLError, "SSL_read:%s", ossl_error()); - } - else{ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - GetOpenFile(ssl_get_io(self), fptr); - rb_io_check_readable(fptr); - TRAP_BEG; - nread = read(fileno(fptr->f), RSTRING(str)->ptr, RSTRING(str)->len); - TRAP_END; - if(nread < 0) rb_raise(eSSLError, "read:%s", strerror(errno)); - } - if(nread == 0) rb_raise(rb_eEOFError, "End of file reached"); + Data_Get_Struct(self, ssl_st, p); + ilen = NUM2INT(len); + str = rb_str_new(0, ilen); + + if (p->ssl) { + nread = SSL_read(p->ssl, RSTRING(str)->ptr, RSTRING(str)->len); + if(nread < 0) + OSSL_Raise(eSSLError, "SSL_read:"); + } else { + rb_warning("SSL session is not started yet."); + + GetOpenFile(ssl_get_io(self), fptr); + rb_io_check_readable(fptr); + + TRAP_BEG; + nread = read(fileno(fptr->f), RSTRING(str)->ptr, RSTRING(str)->len); + TRAP_END; + + if(nread < 0) + rb_raise(eSSLError, "read:%s", strerror(errno)); + } + + if(nread == 0) + rb_raise(rb_eEOFError, "End of file reached"); - RSTRING(str)->len = nread; - RSTRING(str)->ptr[nread] = 0; - OBJ_TAINT(str); + RSTRING(str)->len = nread; + RSTRING(str)->ptr[nread] = 0; + OBJ_TAINT(str); - return str; + return str; } static VALUE ssl_write(VALUE self, VALUE str) { - ssl_st *p; - size_t nwrite = 0; + ssl_st *p; + size_t nwrite = 0; OpenFile *fptr; FILE *fp; - Data_Get_Struct(self, ssl_st, p); - if(TYPE(str) != T_STRING) + Data_Get_Struct(self, ssl_st, p); + if(TYPE(str) != T_STRING) str = rb_obj_as_string(str); - if(p->ssl){ - nwrite = SSL_write(p->ssl, RSTRING(str)->ptr, RSTRING(str)->len); - if(nwrite < 0) rb_raise(eSSLError, "SSL_write:%s", ossl_error()); - } - else{ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - GetOpenFile(ssl_get_io(self), fptr); - rb_io_check_writable(fptr); - fp = GetWriteFile(fptr); - nwrite = write(fileno(fp), RSTRING(str)->ptr, RSTRING(str)->len); - if(nwrite < 0) rb_raise(eSSLError, "write:%s", strerror(errno)); - } + if (p->ssl) { + nwrite = SSL_write(p->ssl, RSTRING(str)->ptr, RSTRING(str)->len); + if (nwrite < 0) + OSSL_Raise(eSSLError, "SSL_write:"); + } else { + rb_warning("SSL session is not started yet."); + + GetOpenFile(ssl_get_io(self), fptr); + rb_io_check_writable(fptr); + fp = GetWriteFile(fptr); + nwrite = write(fileno(fp), RSTRING(str)->ptr, RSTRING(str)->len); + if(nwrite < 0) + rb_raise(eSSLError, "write:%s", strerror(errno)); + } - return INT2NUM(nwrite); + return INT2NUM(nwrite); } static VALUE @@ -397,8 +407,8 @@ ssl_get_certificate(VALUE self) Data_Get_Struct(self, ssl_st, p); if(!p->ssl){ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - return Qnil; + rb_warning("SSL session is not started yet."); + return Qnil; } if((cert = SSL_get_certificate(p->ssl)) == NULL) return Qnil; @@ -414,8 +424,8 @@ ssl_get_peer_certificate(VALUE self) Data_Get_Struct(self, ssl_st, p); if(!p->ssl){ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - return Qnil; + rb_warning("SSL session is not started yet."); + return Qnil; } if((cert = SSL_get_peer_certificate(p->ssl)) == NULL) return Qnil; @@ -447,8 +457,8 @@ ssl_get_cipher(VALUE self) Data_Get_Struct(self, ssl_st, p); if(!p->ssl){ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - return Qnil; + rb_warning("SSL session is not started yet."); + return Qnil; } cipher = SSL_get_current_cipher(p->ssl); @@ -466,8 +476,8 @@ ssl_get_ciphers(VALUE self) Data_Get_Struct(self, ssl_st, p); if(!p->ctx){ - if(ruby_verbose) rb_warning("SSL_CTX is not initialized."); - return Qnil; + rb_warning("SSL_CTX is not initialized."); + return Qnil; } ciphers = p->ctx->cipher_list; ary = rb_ary_new(); @@ -506,10 +516,10 @@ ssl_set_ciphers(VALUE self, VALUE v) } else str = rb_obj_as_string(v); - if(!SSL_CTX_set_cipher_list(p->ctx, RSTRING(str)->ptr)) - rb_raise(eSSLError, "SSL_CTX_set_ciphers:%s", ossl_error()); - - return Qnil; + if(!SSL_CTX_set_cipher_list(p->ctx, RSTRING(str)->ptr)) { + OSSL_Raise(eSSLError, "SSL_CTX_set_ciphers:"); + } + return Qnil; } static VALUE @@ -520,8 +530,8 @@ ssl_get_state(VALUE self) Data_Get_Struct(self, ssl_st, p); if(!p->ssl){ - if(ruby_verbose) rb_warning("SSL session is not started yet."); - return Qnil; + rb_warning("SSL session is not started yet."); + return Qnil; } ret = rb_str_new2(SSL_state_string(p->ssl)); if(ruby_verbose){ diff --git a/ossl_x509.c b/ossl_x509.c index e9009f9..70081c7 100644 --- a/ossl_x509.c +++ b/ossl_x509.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. */ /* @@ -35,7 +35,7 @@ typedef struct ossl_x509_st { static void ossl_x509_free(ossl_x509 *x509p) { - if(x509p) { + if (x509p) { if(x509p->x509) X509_free(x509p->x509); x509p->x509 = NULL; free(x509p); @@ -46,34 +46,22 @@ ossl_x509_free(ossl_x509 *x509p) * public functions */ VALUE -ossl_x509_new_null(void) -{ - ossl_x509 *x509p = NULL; - VALUE obj; - - MakeX509(obj, x509p); - - if (!(x509p->x509 = X509_new())) - rb_raise(eX509CertificateError, "%s", ossl_error()); - - return obj; -} - -VALUE ossl_x509_new(X509 *x509) { ossl_x509 *x509p = NULL; + X509 *new = NULL; VALUE obj; if (!x509) - return ossl_x509_new_null(); - + new = X509_new(); + else new = X509_dup(x509); + + if (!new) + OSSL_Raise(eX509CertificateError, ""); + MakeX509(obj, x509p); + x509p->x509 = new; - if (!(x509p->x509 = X509_dup(x509))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); - } - return obj; } @@ -86,8 +74,6 @@ ossl_x509_new_from_file(VALUE filename) ossl_x509 *x509p = NULL; VALUE obj; - MakeX509(obj, x509p); - Check_SafeStr(filename); path = RSTRING(filename)->ptr; @@ -98,8 +84,9 @@ ossl_x509_new_from_file(VALUE filename) fclose(fp); if (!cert) - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); + MakeX509(obj, x509p); x509p->x509 = cert; return obj; @@ -114,8 +101,9 @@ ossl_x509_get_X509(VALUE obj) OSSL_Check_Type(obj, cX509Certificate); GetX509(obj, x509p); - if (!(x509 = X509_dup(x509p->x509))) - rb_raise(eX509CertificateError, "%s", ossl_error()); + if (!(x509 = X509_dup(x509p->x509))) { + OSSL_Raise(eX509CertificateError, ""); + } return x509; } @@ -156,7 +144,7 @@ ossl_x509_initialize(int argc, VALUE *argv, VALUE self) case T_STRING: Check_SafeStr(buffer); if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } x509 = PEM_read_bio_X509(in, NULL, NULL, NULL); BIO_free(in); @@ -167,7 +155,7 @@ ossl_x509_initialize(int argc, VALUE *argv, VALUE self) } if (!x509) - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); x509p->x509 = x509; @@ -185,11 +173,11 @@ ossl_x509_to_der(VALUE self) GetX509(self, x509p); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } if (!i2d_X509_bio(out, x509p->x509)) { BIO_free(out); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -209,11 +197,11 @@ ossl_x509_to_pem(VALUE self) GetX509(self, x509p); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } if (!PEM_write_bio_X509(out, x509p->x509)) { BIO_free(out); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -233,11 +221,11 @@ ossl_x509_to_str(VALUE self) GetX509(self, x509p); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } if (!X509_print(out, x509p->x509)) { BIO_free(out); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -258,7 +246,7 @@ ossl_x509_to_req(VALUE self) GetX509(self, x509p); if (!(req = X509_to_X509_REQ(x509p->x509, NULL, EVP_md5()))) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return ossl_x509req_new(req); @@ -290,7 +278,7 @@ ossl_x509_set_version(VALUE self, VALUE version) rb_raise(eX509CertificateError, "version must be > 0!"); } if (!X509_set_version(x509p->x509, ver-1)) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return version; @@ -306,7 +294,7 @@ ossl_x509_get_serial(VALUE self) GetX509(self, x509p); if (!(asn1int = X509_get_serialNumber(x509p->x509))) { /* NO DUP - don't free */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } serial = ASN1_INTEGER_get(asn1int); @@ -322,15 +310,15 @@ ossl_x509_set_serial(VALUE self, VALUE serial) GetX509(self, x509p); if (!(asn1int = ASN1_INTEGER_new())) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } if (!ASN1_INTEGER_set(asn1int, FIX2LONG(serial))) { ASN1_INTEGER_free(asn1int); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } if (!X509_set_serialNumber(x509p->x509, asn1int)) { /* DUPs asn1int - FREE it */ ASN1_INTEGER_free(asn1int); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } ASN1_INTEGER_free(asn1int); @@ -346,7 +334,7 @@ ossl_x509_get_subject(VALUE self) GetX509(self, x509p); if (!(name = X509_get_subject_name(x509p->x509))) { /* NO DUP - don't free! */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return ossl_x509name_new(name); @@ -365,7 +353,7 @@ ossl_x509_set_subject(VALUE self, VALUE subject) if (!X509_set_subject_name(x509p->x509, name)) { /* DUPs name - FREE it */ X509_NAME_free(name); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } X509_NAME_free(name); @@ -381,7 +369,7 @@ ossl_x509_get_issuer(VALUE self) GetX509(self, x509p); if(!(name = X509_get_issuer_name(x509p->x509))) { /* NO DUP - don't free! */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return ossl_x509name_new(name); @@ -400,7 +388,7 @@ ossl_x509_set_issuer(VALUE self, VALUE issuer) if (!X509_set_issuer_name(x509p->x509, name)) { /* DUPs name - FREE it */ X509_NAME_free(name); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } X509_NAME_free(name); @@ -416,7 +404,7 @@ ossl_x509_get_not_before(VALUE self) GetX509(self, x509p); if (!(asn1time = X509_get_notBefore(x509p->x509))) { /* NO DUP - don't free! */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return asn1time_to_time(asn1time); @@ -434,15 +422,15 @@ ossl_x509_set_not_before(VALUE self, VALUE time) OSSL_Check_Type(time, rb_cTime); sec = rb_funcall(time, rb_intern("to_i"), 0, NULL); - if (!FIXNUM_P(sec)) + if (!FIXNUM_P(sec)) { rb_raise(eX509CertificateError, "wierd time"); - - if ((intsec = FIX2INT(sec)) < 0) + } + if ((intsec = FIX2INT(sec)) < 0) { rb_raise(eX509CertificateError, "time < 0???"); - - if (!ASN1_UTCTIME_set(X509_get_notBefore(x509p->x509), intsec)) - rb_raise(eX509CertificateError, "%s", ossl_error()); - + } + if (!ASN1_UTCTIME_set(X509_get_notBefore(x509p->x509), intsec)) { + OSSL_Raise(eX509CertificateError, ""); + } return time; } @@ -455,7 +443,7 @@ ossl_x509_get_not_after(VALUE self) GetX509(self, x509p); if (!(asn1time = X509_get_notAfter(x509p->x509))) { /* NO DUP - don't free! */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } return asn1time_to_time(asn1time); @@ -473,15 +461,15 @@ ossl_x509_set_not_after(VALUE self, VALUE time) OSSL_Check_Type(time, rb_cTime); sec = rb_funcall(time, rb_intern("to_i"), 0, NULL); - if (!FIXNUM_P(sec)) + if (!FIXNUM_P(sec)) { rb_raise(eX509CertificateError, "wierd time"); - - if ((intsec = FIX2INT(sec)) < 0) + } + if ((intsec = FIX2INT(sec)) < 0) { rb_raise(eX509CertificateError, "time < 0??"); - - if (!ASN1_UTCTIME_set(X509_get_notAfter(x509p->x509), FIX2INT(sec))) - rb_raise(eX509CertificateError, "%s", ossl_error()); - + } + if (!ASN1_UTCTIME_set(X509_get_notAfter(x509p->x509), FIX2INT(sec))) { + OSSL_Raise(eX509CertificateError, ""); + } return time; } @@ -495,7 +483,7 @@ ossl_x509_get_public_key(VALUE self) GetX509(self, x509p); if (!(pkey = X509_get_pubkey(x509p->x509))) { /* adds an reference - safe to FREE */ - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } pub_key = ossl_pkey_new(pkey); EVP_PKEY_free(pkey); @@ -516,7 +504,7 @@ ossl_x509_set_public_key(VALUE self, VALUE pubk) if (!X509_set_pubkey(x509p->x509, pkey)) { /* DUPs pkey - FREE it */ EVP_PKEY_free(pkey); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } EVP_PKEY_free(pkey); @@ -543,7 +531,7 @@ ossl_x509_sign(VALUE self, VALUE key, VALUE digest) if (!X509_sign(x509p->x509, pkey, md)) { EVP_PKEY_free(pkey); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } EVP_PKEY_free(pkey); @@ -568,7 +556,7 @@ ossl_x509_verify(VALUE self, VALUE key) EVP_PKEY_free(pkey); if (i < 0) { - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } else if (i > 0) return Qtrue; @@ -589,8 +577,9 @@ ossl_x509_check_private_key(VALUE self, VALUE key) OSSL_Check_Type(key, cPKey); pkey = ossl_pkey_get_EVP_PKEY(key); + if (!X509_check_private_key(x509p->x509, pkey)) { - rb_warn("%s", ossl_error()); + OSSL_Warning("Check private key:"); result = Qfalse; } else result = Qtrue; @@ -653,7 +642,7 @@ ossl_x509_set_extensions(VALUE self, VALUE ary) if (!X509_add_ext(x509p->x509, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } X509_EXTENSION_free(ext); } @@ -674,7 +663,7 @@ ossl_x509_add_extension(VALUE self, VALUE extension) if (!X509_add_ext(x509p->x509, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); - rb_raise(eX509CertificateError, "%s", ossl_error()); + OSSL_Raise(eX509CertificateError, ""); } X509_EXTENSION_free(ext); diff --git a/ossl_x509attr.c b/ossl_x509attr.c index ba98045..8446afe 100644 --- a/ossl_x509attr.c +++ b/ossl_x509attr.c @@ -47,32 +47,21 @@ ossl_x509attr_free(ossl_x509attr *attrp) * public */ VALUE -ossl_x509attr_new_null(void) -{ - ossl_x509attr *attrp = NULL; - VALUE obj; - - MakeX509Attr(obj, attrp); - - if (!(attrp->attribute = X509_ATTRIBUTE_new())) - OSSL_Raise(eX509AttributeError, ""); - - return obj; -} - -VALUE ossl_x509attr_new(X509_ATTRIBUTE *attr) { ossl_x509attr *attrp = NULL; + X509_ATTRIBUTE *new = NULL; VALUE obj; if (!attr) - return ossl_x509attr_new_null(); - - MakeX509Attr(obj, attrp); + new = X509_ATTRIBUTE_new(); + else new = X509_ATTRIBUTE_dup(attr); - if (!(attrp->attribute = X509_ATTRIBUTE_dup(attr))) + if (!new) OSSL_Raise(eX509AttributeError, ""); + + MakeX509Attr(obj, attrp); + attrp->attribute = new; return obj; } diff --git a/ossl_x509crl.c b/ossl_x509crl.c index ba4e430..d8761c3 100644 --- a/ossl_x509crl.c +++ b/ossl_x509crl.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. */ /* @@ -56,7 +56,7 @@ ossl_x509crl_get_X509_CRL(VALUE obj) GetX509CRL(obj, crlp); if (!(crl = X509_CRL_dup(crlp->crl))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } return crl; @@ -97,7 +97,7 @@ ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self) case T_STRING: Check_SafeStr(buffer); if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, -1))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); BIO_free(in); @@ -106,7 +106,7 @@ ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self) rb_raise(rb_eTypeError, "unsupported type"); } if (!crl) - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); crlp->crl = crl; @@ -135,10 +135,10 @@ ossl_x509crl_set_version(VALUE self, VALUE version) GetX509CRL(self, crlp); if (!(asn1int = ASN1_INTEGER_new())) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } if (!ASN1_INTEGER_set(asn1int, NUM2LONG(version))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } ASN1_INTEGER_free(crlp->crl->crl->version); @@ -170,7 +170,7 @@ ossl_x509crl_set_issuer(VALUE self, VALUE issuer) if (!X509_NAME_set(&(crlp->crl->crl->issuer), name)) { /* DUPs name - FREE it */ X509_NAME_free(name); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } X509_NAME_free(name); @@ -202,7 +202,7 @@ ossl_x509crl_set_last_update(VALUE self, VALUE time) rb_raise(eX509CRLError, "wierd time"); if (!ASN1_UTCTIME_set(crlp->crl->crl->lastUpdate, FIX2INT(sec))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } return time; @@ -233,7 +233,7 @@ ossl_x509crl_set_next_update(VALUE self, VALUE time) rb_raise(eX509CRLError, "wierd time"); if (!ASN1_UTCTIME_set(crlp->crl->crl->nextUpdate, FIX2INT(sec))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } return time; @@ -287,7 +287,7 @@ ossl_x509crl_set_revoked(VALUE self, VALUE ary) 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! */ - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } } sk_X509_REVOKED_sort(crlp->crl->crl->revoked); @@ -307,7 +307,7 @@ ossl_x509crl_add_revoked(VALUE self, VALUE revoked) rev = ossl_x509revoked_get_X509_REVOKED(revoked); if (!sk_X509_CRL_push(crlp->crl->crl->revoked, rev)) { /* NO DUP - don't free! */ - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } sk_X509_REVOKED_sort(crlp->crl->crl->revoked); @@ -335,7 +335,7 @@ ossl_x509crl_sign(VALUE self, VALUE key, VALUE digest) if (!X509_CRL_sign(crlp->crl, pkey, md)) { EVP_PKEY_free(pkey); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } EVP_PKEY_free(pkey); @@ -372,11 +372,11 @@ ossl_x509crl_to_pem(VALUE self) GetX509CRL(self, crlp); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } if (!PEM_write_bio_X509_CRL(out, crlp->crl)) { BIO_free(out); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -396,11 +396,11 @@ ossl_x509crl_to_str(VALUE self) GetX509CRL(self, crlp); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } if (!X509_CRL_print(out, crlp->crl)) { BIO_free(out); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -462,7 +462,7 @@ ossl_x509crl_set_extensions(VALUE self, VALUE ary) if(!X509_CRL_add_ext(crlp->crl, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } X509_EXTENSION_free(ext); } @@ -483,7 +483,7 @@ ossl_x509crl_add_extension(VALUE self, VALUE extension) if(!X509_CRL_add_ext(crlp->crl, ext, -1)) { /* DUPs ext - FREE it */ X509_EXTENSION_free(ext); - rb_raise(eX509CRLError, "%s", ossl_error()); + OSSL_Raise(eX509CRLError, ""); } X509_EXTENSION_free(ext); diff --git a/ossl_x509ext.c b/ossl_x509ext.c index 2a5bf33..30f9e05 100644 --- a/ossl_x509ext.c +++ b/ossl_x509ext.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. */ /* @@ -65,33 +65,22 @@ ossl_x509extfactory_free(ossl_x509extfactory *extfactoryp) * Public */ VALUE -ossl_x509ext_new_null(void) -{ - ossl_x509ext *extp = NULL; - VALUE obj; - - MakeX509Ext(obj, extp); - - if (!(extp->extension = X509_EXTENSION_new())) - rb_raise(eX509ExtensionError, "%s", ossl_error()); - - return obj; -} - -VALUE ossl_x509ext_new(X509_EXTENSION *ext) { ossl_x509ext *extp = NULL; + X509_EXTENSION *new = NULL; VALUE obj; if (!ext) - return ossl_x509ext_new_null(); + new = X509_EXTENSION_new(); + else new = X509_EXTENSION_dup(ext); + if (!new) + OSSL_Raise(eX509ExtensionError, ""); + MakeX509Ext(obj, extp); + extp->extension = new; - if (!(extp->extension = X509_EXTENSION_dup(ext))) - rb_raise(eX509ExtensionError, "%s", ossl_error()); - return obj; } @@ -229,15 +218,16 @@ ossl_x509extfactory_create_ext_from_array(VALUE self, VALUE ary) rb_raise(eX509ExtensionError, "unsupported structure"); } if (!(ext = X509_EXTENSION_new())) { - rb_raise(eX509ExtensionError, "%s", ossl_error()); + OSSL_Raise(eX509ExtensionError, ""); } /* key [0] */ item = RARRAY(ary)->ptr[0]; Check_SafeStr(item); if (!(nid = OBJ_ln2nid(RSTRING(item)->ptr))) - if (!(nid = OBJ_sn2nid(RSTRING(item)->ptr))) - rb_raise(eX509ExtensionError, "%s", ossl_error()); + if (!(nid = OBJ_sn2nid(RSTRING(item)->ptr))) { + OSSL_Raise(eX509ExtensionError, ""); + } /* data [1] */ item = RARRAY(ary)->ptr[1]; @@ -255,7 +245,7 @@ ossl_x509extfactory_create_ext_from_array(VALUE self, VALUE ary) if (!(ext = X509V3_EXT_conf_nid(NULL, &(extfactoryp->ctx), nid, value))) { free(value); - rb_raise(eX509ExtensionError, "%s", ossl_error()); + OSSL_Raise(eX509ExtensionError, ""); } free(value); @@ -285,11 +275,11 @@ ossl_x509ext_to_a(VALUE obj) rb_ary_push(ary, rb_str_new2(OBJ_nid2sn(nid))); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509ExtensionError, "%s", ossl_error()); + OSSL_Raise(eX509ExtensionError, ""); } if (!X509V3_EXT_print(out, extp->extension, 0, 0)) { BIO_free(out); - rb_raise(eX509ExtensionError, "%s", ossl_error()); + OSSL_Raise(eX509ExtensionError, ""); } BIO_get_mem_ptr(out, &buf); value = rb_str_new(buf->data, buf->length); diff --git a/ossl_x509name.c b/ossl_x509name.c index 2fa5665..ada54d6 100644 --- a/ossl_x509name.c +++ b/ossl_x509name.c @@ -47,32 +47,21 @@ ossl_x509name_free(ossl_x509name *namep) * Public */ VALUE -ossl_x509name_new_null(void) -{ - ossl_x509name *namep = NULL; - VALUE obj; - - MakeX509Name(obj, namep); - - if (!(namep->name = X509_NAME_new())) - OSSL_Raise(eX509NameError, ""); - - return obj; -} - -VALUE ossl_x509name_new(X509_NAME *name) { ossl_x509name *namep = NULL; + X509_NAME *new = NULL; VALUE obj; if (!name) - return ossl_x509name_new_null(); + new = X509_NAME_new(); + else new = X509_NAME_dup(name); - MakeX509Name(obj, namep); - - if (!(namep->name = X509_NAME_dup(name))) + if (!new) OSSL_Raise(eX509NameError, ""); + + MakeX509Name(obj, namep); + namep->name = new; return obj; } diff --git a/ossl_x509req.c b/ossl_x509req.c index 79bad9e..3e658bd 100644 --- a/ossl_x509req.c +++ b/ossl_x509req.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. */ /* @@ -46,33 +46,22 @@ ossl_x509req_free(ossl_x509req *reqp) /* * Public functions */ -VALUE -ossl_x509req_new_null(void) -{ - ossl_x509req *reqp = NULL; - VALUE self; - - MakeX509Req(self, reqp); - - if (!(reqp->request = X509_REQ_new())) - rb_raise(eX509RequestError, "%s", ossl_error()); - - return self; -} - VALUE ossl_x509req_new(X509_REQ *req) { ossl_x509req *reqp = NULL; + X509_REQ *new = NULL; VALUE self; if (!req) - return ossl_x509req_new_null(); - - MakeX509Req(self, reqp); + new = X509_REQ_new(); + else new = X509_REQ_dup(req); - if (!(reqp->request = X509_REQ_dup(req))) - rb_raise(eX509RequestError, "%s", ossl_error()); + if (!new) + OSSL_Raise(eX509RequestError, ""); + + MakeX509Req(self, reqp); + reqp->request = new; return self; } @@ -87,8 +76,9 @@ ossl_x509req_get_X509_REQ(VALUE obj) GetX509Req(obj, reqp); - if (!(req = X509_REQ_dup(reqp->request))) - rb_raise(eX509RequestError, "%s", ossl_error()); + if (!(req = X509_REQ_dup(reqp->request))) { + OSSL_Raise(eX509RequestError, ""); + } return req; } @@ -128,7 +118,7 @@ ossl_x509req_initialize(int argc, VALUE *argv, VALUE self) case T_STRING: Check_SafeStr(buffer); if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, -1))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); BIO_free(in); @@ -137,7 +127,7 @@ ossl_x509req_initialize(int argc, VALUE *argv, VALUE self) rb_raise(rb_eTypeError, "unsupported type"); } if (!req) - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); reqp->request = req; @@ -155,11 +145,11 @@ ossl_x509req_to_pem(VALUE self) GetX509Req(self, reqp); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } if (!PEM_write_bio_X509_REQ(out, reqp->request)) { BIO_free(out); - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -179,11 +169,11 @@ ossl_x509req_to_str(VALUE self) GetX509Req(self, reqp); if (!(out = BIO_new(BIO_s_mem()))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } if (!X509_REQ_print(out, reqp->request)) { BIO_free(out); - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } BIO_get_mem_ptr(out, &buf); str = rb_str_new(buf->data, buf->length); @@ -204,7 +194,7 @@ ossl_x509req_to_x509(VALUE self, VALUE days, VALUE key) GetX509Req(self, reqp); ... if (!(x509 = X509_REQ_to_X509(reqp->req, d, pkey))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } return ossl_x509req_new(x509); @@ -236,7 +226,7 @@ ossl_x509req_set_version(VALUE self, VALUE version) rb_raise(eX509RequestError, "version must be > 0!"); } if (!X509_REQ_set_version(reqp->request, version)) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } return version; @@ -252,7 +242,7 @@ ossl_x509req_get_subject(VALUE self) GetX509Req(self, reqp); if (!(name = X509_REQ_get_subject_name(reqp->request))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } subject = ossl_x509name_new(name); /*X509_NAME_free(name);*/ @@ -272,7 +262,7 @@ ossl_x509req_set_subject(VALUE self, VALUE subject) name = ossl_x509name_get_X509_NAME(subject); if (!X509_REQ_set_subject_name(reqp->request, name)) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } /*X509_NAME_free(name);*/ @@ -289,7 +279,7 @@ ossl_x509req_get_public_key(VALUE self) GetX509Req(self, reqp); if (!(pkey = X509_REQ_get_pubkey(reqp->request))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } pub_key = ossl_pkey_new(pkey); EVP_PKEY_free(pkey); @@ -310,7 +300,7 @@ ossl_x509req_set_public_key(VALUE self, VALUE pubk) if (!X509_REQ_set_pubkey(reqp->request, pkey)) { EVP_PKEY_free(pkey); - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } EVP_PKEY_free(pkey); @@ -337,7 +327,7 @@ ossl_x509req_sign(VALUE self, VALUE key, VALUE digest) if (!X509_REQ_sign(reqp->request, pkey, md)) { EVP_PKEY_free(pkey); - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } EVP_PKEY_free(pkey); @@ -362,7 +352,7 @@ ossl_x509req_verify(VALUE self, VALUE key) EVP_PKEY_free(pkey); if (i < 0) - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); if (i > 0) return Qtrue; @@ -418,7 +408,7 @@ ossl_x509req_set_attributes(VALUE self, VALUE ary) attr = ossl_x509attr_get_X509_ATTRIBUTE(item); if (!X509_REQ_add1_attr(reqp->request, attr)) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } } @@ -435,7 +425,7 @@ ossl_x509req_add_attribute(VALUE self, VALUE attr) OSSL_Check_Type(attr, cX509Attribute); if (!X509_REQ_add1_attr(reqp->request, ossl_x509attr_get_X509_ATTRIBUTE(attr))) { - rb_raise(eX509RequestError, "%s", ossl_error()); + OSSL_Raise(eX509RequestError, ""); } return attr; diff --git a/ossl_x509revoked.c b/ossl_x509revoked.c index de4f6cb..be07ed6 100644 --- a/ossl_x509revoked.c +++ b/ossl_x509revoked.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. */ /* @@ -46,32 +46,21 @@ ossl_x509revoked_free(ossl_x509revoked *revp) * PUBLIC */ VALUE -ossl_x509revoked_new_null(void) -{ - ossl_x509revoked *revp = NULL; - VALUE obj; - - MakeX509Revoked(obj, revp); - - if (!(revp->revoked = X509_REVOKED_new())) - rb_raise(eX509RevokedError, "%s", ossl_error()); - - return obj; -} - -VALUE ossl_x509revoked_new(X509_REVOKED *rev) { ossl_x509revoked *revp = NULL; + X509_REVOKED *new = NULL; VALUE obj; if (!rev) - return ossl_x509revoked_new_null(); + new = X509_REVOKED_new(); + else new = X509_REVOKED_dup(rev); + + if (!new) + OSSL_Raise(eX509RevokedError, ""); MakeX509Revoked(obj, revp); - - if (!(revp->revoked = X509_REVOKED_dup(rev))) - rb_raise(eX509RevokedError, "%s", ossl_error()); + revp->revoked = new; return obj; } @@ -113,7 +102,7 @@ ossl_x509revoked_initialize(int argc, VALUE *argv, VALUE obj) GetX509Revoked_unsafe(obj, revp); if (!(revoked = X509_REVOKED_new())) { - rb_raise(eX509RevokedError, "%s", ossl_error()); + OSSL_Raise(eX509RevokedError, ""); } revp->revoked = revoked; @@ -138,7 +127,7 @@ ossl_x509revoked_set_serial(VALUE obj, VALUE serial) GetX509Revoked(obj, revp); if (!ASN1_INTEGER_set(revp->revoked->serialNumber, NUM2INT(serial))) { - rb_raise(eX509RevokedError, "%s", ossl_error()); + OSSL_Raise(eX509RevokedError, ""); } return serial; @@ -170,7 +159,7 @@ ossl_x509revoked_set_time(VALUE obj, VALUE time) rb_raise(eX509RevokedError, "wierd time"); if (!ASN1_UTCTIME_set(revp->revoked->revocationDate, FIX2INT(sec))) { - rb_raise(eX509RevokedError, "%s", ossl_error()); + OSSL_Raise(eX509RevokedError, ""); } return time; @@ -229,7 +218,7 @@ ossl_x509revoked_set_extensions(VALUE self, VALUE ary) ext = ossl_x509ext_get_X509_EXTENSION(item); if(!X509_REVOKED_add_ext(revp->revoked, ext, -1)) { - rb_raise(eX509RevokedError, "%s", ossl_error()); + OSSL_Raise(eX509RevokedError, ""); } } @@ -246,7 +235,7 @@ ossl_x509revoked_add_extension(VALUE self, VALUE ext) OSSL_Check_Type(ext, cX509Extension); if(!X509_REVOKED_add_ext(revp->revoked, ossl_x509ext_get_X509_EXTENSION(ext), -1)) { - rb_raise(eX509RevokedError, "%s", ossl_error()); + OSSL_Raise(eX509RevokedError, ""); } return ext; diff --git a/ossl_x509store.c b/ossl_x509store.c index c3a2c7b..a90d4b8 100644 --- a/ossl_x509store.c +++ b/ossl_x509store.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. */ /* @@ -67,7 +67,7 @@ ossl_x509store_new(X509_STORE_CTX *ctx) */ /* if (!(ctx2 = X509_STORE_CTX_new())) { - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } X509_STORE_CTX_init(ctx2, X509_STORE_dup(ctx->ctx), X509_dup(ctx->cert), NULL); */ @@ -175,10 +175,10 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self) GetX509Store_unsafe(self, storep); if (!(store = X509_STORE_new())) { - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } if (!(storep->store = X509_STORE_CTX_new())) { - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } X509_STORE_set_verify_cb_func(store, ossl_x509store_verify_cb); /* OpenSSL 0.9.6c @@ -207,7 +207,7 @@ ossl_x509store_add_trusted(VALUE self, VALUE cert) if (!X509_STORE_add_cert(storep->store->ctx, x509)) { X509_free(x509); - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } X509_free(x509); @@ -256,7 +256,7 @@ ossl_x509store_add_crl(VALUE self, VALUE crlst) if (!X509_STORE_add_crl(storep->store->ctx, crl)) { X509_CRL_free(crl); - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } X509_CRL_free(crl); @@ -407,7 +407,7 @@ ossl_x509store_set_default_paths(VALUE self) GetX509Store(self, storep); if (!X509_STORE_set_default_paths(storep->store->ctx)) { - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } return self; @@ -423,7 +423,7 @@ ossl_x509store_load_locations(VALUE self, VALUE path) Check_SafeStr(path); if (!X509_STORE_load_locations(storep->store->ctx, NULL, RSTRING(path)->ptr)) { - rb_raise(eX509StoreError, "%s", ossl_error()); + OSSL_Raise(eX509StoreError, ""); } return self; |