aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Rokos <m.rokos@sh.cvut.cz>2002-02-13 13:09:26 +0000
committerMichal Rokos <m.rokos@sh.cvut.cz>2002-02-13 13:09:26 +0000
commit5e2a679a46e2164f8b38b71132787c3327862957 (patch)
tree4ab99602f4f8adec2a96194abd4a39c48e0fab00
parent1ad093352e953cabd70c851989ce06edc233d5f4 (diff)
downloadruby-openssl-history-5e2a679a46e2164f8b38b71132787c3327862957.tar.gz
* transition from rb_raise to OSSL_Raise (where possible)
* some mem checks * preliminary DH key support
-rw-r--r--ChangeLog5
-rw-r--r--README24
-rw-r--r--extconf.rb2
-rw-r--r--lib/openssl.rb18
-rw-r--r--openssl_missing.c2
-rw-r--r--openssl_missing.h10
-rw-r--r--ossl.c20
-rw-r--r--ossl.h28
-rw-r--r--ossl_bn.c143
-rw-r--r--ossl_cipher.c22
-rw-r--r--ossl_config.c17
-rw-r--r--ossl_digest.c22
-rw-r--r--ossl_hmac.c20
-rw-r--r--ossl_ns_spki.c20
-rw-r--r--ossl_pkcs7.c81
-rw-r--r--ossl_pkey.c24
-rw-r--r--ossl_pkey_dh.c316
-rw-r--r--ossl_pkey_dsa.c73
-rw-r--r--ossl_pkey_rsa.c93
-rw-r--r--ossl_rand.c21
-rw-r--r--ossl_ssl.c142
-rw-r--r--ossl_x509.c125
-rw-r--r--ossl_x509attr.c25
-rw-r--r--ossl_x509crl.c36
-rw-r--r--ossl_x509ext.c40
-rw-r--r--ossl_x509name.c25
-rw-r--r--ossl_x509req.c66
-rw-r--r--ossl_x509revoked.c37
-rw-r--r--ossl_x509store.c16
29 files changed, 865 insertions, 608 deletions
diff --git a/ChangeLog b/ChangeLog
index 7a69d04..af830d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/README b/README
index f10b52a..4c2763c 100644
--- a/README
+++ b/README
@@ -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])
diff --git a/extconf.rb b/extconf.rb
index 550ab68..f1ef1e7 100644
--- a/extconf.rb
+++ b/extconf.rb
@@ -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_*/
diff --git a/ossl.c b/ossl.c
index 114c6c5..86e4e0f 100644
--- a/ossl.c
+++ b/ossl.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.
*/
/*
@@ -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));
+ }
}
/*
diff --git a/ossl.h b/ossl.h
index 56cff06..a3c7595 100644
--- a/ossl.h
+++ b/ossl.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.
*/
/*
@@ -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);
diff --git a/ossl_bn.c b/ossl_bn.c
index 91c857c..35dc785 100644
--- a/ossl_bn.c
+++ b/ossl_bn.c
@@ -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;
}
diff --git a/ossl_ssl.c b/ossl_ssl.c
index 0399a44..1bc7efb 100644
--- a/ossl_ssl.c
+++ b/ossl_ssl.c
@@ -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;