summaryrefslogtreecommitdiffstats
path: root/ossl_x509cert.c
diff options
context:
space:
mode:
authorGOTOU Yuuzou <gotoyuzo@notwork.org>2002-12-17 10:05:50 +0000
committerGOTOU Yuuzou <gotoyuzo@notwork.org>2002-12-17 10:05:50 +0000
commit501b4edc1a3a804e759e1635e3cff62d77f31f81 (patch)
tree90b59e4068198c9e0428b683cbfcf6300d40880a /ossl_x509cert.c
parentf75c38e35604b7915a53062f7513cf5ad643aace (diff)
downloadruby-openssl-history-501b4edc1a3a804e759e1635e3cff62d77f31f81.tar.gz
* Indent by 4 spaces, 1 tab has the width of 8 spaces.
Diffstat (limited to 'ossl_x509cert.c')
-rw-r--r--ossl_x509cert.c720
1 files changed, 351 insertions, 369 deletions
diff --git a/ossl_x509cert.c b/ossl_x509cert.c
index eac14dc..fe039ca 100644
--- a/ossl_x509cert.c
+++ b/ossl_x509cert.c
@@ -11,20 +11,20 @@
#include "ossl.h"
#define WrapX509(klass, obj, x509) do { \
- if (!x509) { \
- ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \
- } \
- obj = Data_Wrap_Struct(klass, 0, X509_free, x509); \
+ if (!x509) { \
+ ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \
+ } \
+ obj = Data_Wrap_Struct(klass, 0, X509_free, x509); \
} while (0)
#define GetX509(obj, x509) do { \
- Data_Get_Struct(obj, X509, x509); \
- if (!x509) { \
- ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \
- } \
+ Data_Get_Struct(obj, X509, x509); \
+ if (!x509) { \
+ ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \
+ } \
} while (0)
#define SafeGetX509(obj, x509) do { \
- OSSL_Check_Kind(obj, cX509Cert); \
- GetX509(obj, x509); \
+ OSSL_Check_Kind(obj, cX509Cert); \
+ GetX509(obj, x509); \
} while (0)
/*
@@ -39,65 +39,63 @@ VALUE eX509CertError;
VALUE
ossl_x509_new(X509 *x509)
{
- X509 *new;
- VALUE obj;
+ X509 *new;
+ VALUE obj;
- if (!x509) {
- new = X509_new();
- } else {
- new = X509_dup(x509);
- }
- if (!new) {
- ossl_raise(eX509CertError, "");
- }
- WrapX509(cX509Cert, obj, new);
+ if (!x509) {
+ new = X509_new();
+ } else {
+ new = X509_dup(x509);
+ }
+ if (!new) {
+ ossl_raise(eX509CertError, "");
+ }
+ WrapX509(cX509Cert, obj, new);
- return obj;
+ return obj;
}
VALUE
ossl_x509_new_from_file(VALUE filename)
{
- X509 *x509;
- FILE *fp;
- VALUE obj;
+ X509 *x509;
+ FILE *fp;
+ VALUE obj;
- SafeStringValue(filename);
-
- if (!(fp = fopen(RSTRING(filename)->ptr, "r"))) {
- ossl_raise(eX509CertError, "%s", strerror(errno));
- }
- x509 = PEM_read_X509(fp, NULL, NULL, NULL);
- fclose(fp);
+ SafeStringValue(filename);
+ if (!(fp = fopen(RSTRING(filename)->ptr, "r"))) {
+ ossl_raise(eX509CertError, "%s", strerror(errno));
+ }
+ x509 = PEM_read_X509(fp, NULL, NULL, NULL);
+ fclose(fp);
+ if (!x509) {
+ ossl_raise(eX509CertError, "");
+ }
+ WrapX509(cX509Cert, obj, x509);
- if (!x509) {
- ossl_raise(eX509CertError, "");
- }
- WrapX509(cX509Cert, obj, x509);
-
- return obj;
+ return obj;
}
X509 *
GetX509CertPtr(VALUE obj)
{
- X509 *x509;
+ X509 *x509;
- SafeGetX509(obj, x509);
+ SafeGetX509(obj, x509);
- return x509;
+ return x509;
}
X509 *
DupX509CertPtr(VALUE obj)
{
- X509 *x509;
+ X509 *x509;
- SafeGetX509(obj, x509);
+ SafeGetX509(obj, x509);
- CRYPTO_add(&x509->references, 1, CRYPTO_LOCK_X509);
+ CRYPTO_add(&x509->references, 1, CRYPTO_LOCK_X509);
- return x509;
+ return x509;
}
/*
@@ -106,367 +104,359 @@ DupX509CertPtr(VALUE obj)
static VALUE
ossl_x509_s_allocate(VALUE klass)
{
- X509 *x509;
- VALUE obj;
+ X509 *x509;
+ VALUE obj;
- if (!(x509 = X509_new())) {
- ossl_raise(eX509CertError, "");
- }
- WrapX509(klass, obj, x509);
+ if (!(x509 = X509_new())) {
+ ossl_raise(eX509CertError, "");
+ }
+ WrapX509(klass, obj, x509);
- return obj;
+ return obj;
}
static VALUE
ossl_x509_initialize(int argc, VALUE *argv, VALUE self)
{
- BIO *in;
- VALUE buffer;
+ BIO *in;
+ VALUE buffer;
- if (rb_scan_args(argc, argv, "01", &buffer) == 0) {
- /* create just empty X509Cert */
- return self;
- }
- StringValue(buffer);
-
- if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) {
- ossl_raise(eX509CertError, "");
- }
- /*
- * TODO:
- * Check if we could free old X509
- X509_free(DATA_PTR(self));
- */
- if (!PEM_read_bio_X509(in, (X509 **)&DATA_PTR(self), NULL, NULL)) {
- BIO_free(in);
- ossl_raise(eX509CertError, "");
- }
- BIO_free(in);
-
+ if (rb_scan_args(argc, argv, "01", &buffer) == 0) {
+ /* create just empty X509Cert */
return self;
+ }
+ StringValue(buffer);
+
+ if (!(in = BIO_new_mem_buf(RSTRING(buffer)->ptr, RSTRING(buffer)->len))) {
+ ossl_raise(eX509CertError, "");
+ }
+ /*
+ * TODO:
+ * Check if we could free old X509
+ X509_free(DATA_PTR(self));
+ */
+ if (!PEM_read_bio_X509(in, (X509 **)&DATA_PTR(self), NULL, NULL)) {
+ BIO_free(in);
+ ossl_raise(eX509CertError, "");
+ }
+ BIO_free(in);
+
+ return self;
}
static VALUE
ossl_x509_become(VALUE self, VALUE other)
{
- X509 *a, *b, *x509;
+ X509 *a, *b, *x509;
- rb_check_frozen(self);
-
- if (self == other) return self;
+ rb_check_frozen(self);
+ if (self == other) return self;
+ GetX509(self, a);
+ SafeGetX509(other, b);
+ if (!(x509 = X509_dup(b))) {
+ ossl_raise(eX509CertError, "");
+ }
+ X509_free(a);
+ DATA_PTR(self) = x509;
- GetX509(self, a);
- SafeGetX509(other, b);
-
- if (!(x509 = X509_dup(b))) {
- ossl_raise(eX509CertError, "");
- }
- X509_free(a);
- DATA_PTR(self) = x509;
-
- return self;
+ return self;
}
static VALUE
ossl_x509_to_der(VALUE self)
{
- X509 *x509;
- BIO *out;
- BUF_MEM *buf;
- VALUE str;
-
- GetX509(self, x509);
+ X509 *x509;
+ BIO *out;
+ BUF_MEM *buf;
+ VALUE str;
- if (!(out = BIO_new(BIO_s_mem()))) {
- ossl_raise(eX509CertError, "");
- }
- if (!i2d_X509_bio(out, x509)) {
- BIO_free(out);
- ossl_raise(eX509CertError, "");
- }
- BIO_get_mem_ptr(out, &buf);
- str = rb_str_new(buf->data, buf->length);
+ GetX509(self, x509);
+ if (!(out = BIO_new(BIO_s_mem()))) {
+ ossl_raise(eX509CertError, "");
+ }
+ if (!i2d_X509_bio(out, x509)) {
BIO_free(out);
-
- return str;
+ ossl_raise(eX509CertError, "");
+ }
+ BIO_get_mem_ptr(out, &buf);
+ str = rb_str_new(buf->data, buf->length);
+ BIO_free(out);
+
+ return str;
}
static VALUE
ossl_x509_to_pem(VALUE self)
{
- X509 *x509;
- BIO *out;
- BUF_MEM *buf;
- VALUE str;
+ X509 *x509;
+ BIO *out;
+ BUF_MEM *buf;
+ VALUE str;
- GetX509(self, x509);
-
- if (!(out = BIO_new(BIO_s_mem()))) {
- ossl_raise(eX509CertError, "");
- }
- if (!PEM_write_bio_X509(out, x509)) {
- BIO_free(out);
- ossl_raise(eX509CertError, "");
- }
- BIO_get_mem_ptr(out, &buf);
- str = rb_str_new(buf->data, buf->length);
+ GetX509(self, x509);
+ if (!(out = BIO_new(BIO_s_mem()))) {
+ ossl_raise(eX509CertError, "");
+ }
+ if (!PEM_write_bio_X509(out, x509)) {
BIO_free(out);
-
- return str;
+ ossl_raise(eX509CertError, "");
+ }
+ BIO_get_mem_ptr(out, &buf);
+ str = rb_str_new(buf->data, buf->length);
+ BIO_free(out);
+
+ return str;
}
static VALUE
ossl_x509_to_text(VALUE self)
{
- X509 *x509;
- BIO *out;
- BUF_MEM *buf;
- VALUE str;
+ X509 *x509;
+ BIO *out;
+ BUF_MEM *buf;
+ VALUE str;
- GetX509(self, x509);
-
- if (!(out = BIO_new(BIO_s_mem()))) {
- ossl_raise(eX509CertError, "");
- }
- if (!X509_print(out, x509)) {
- BIO_free(out);
- ossl_raise(eX509CertError, "");
- }
- BIO_get_mem_ptr(out, &buf);
- str = rb_str_new(buf->data, buf->length);
+ GetX509(self, x509);
+ if (!(out = BIO_new(BIO_s_mem()))) {
+ ossl_raise(eX509CertError, "");
+ }
+ if (!X509_print(out, x509)) {
BIO_free(out);
-
- return str;
+ ossl_raise(eX509CertError, "");
+ }
+ BIO_get_mem_ptr(out, &buf);
+ str = rb_str_new(buf->data, buf->length);
+ BIO_free(out);
+
+ return str;
}
+#if 0
/*
* Makes from X509 X509_REQuest
- *
+ */
static VALUE
ossl_x509_to_req(VALUE self)
{
- X509 *x509;
- X509_REQ *req;
- VALUE obj;
-
- GetX509(self, x509);
-
- if (!(req = X509_to_X509_REQ(x509, NULL, EVP_md5()))) {
- ossl_raise(eX509CertError, "");
- }
- obj = ossl_x509req_new(req);
- X509_REQ_free(req);
+ X509 *x509;
+ X509_REQ *req;
+ VALUE obj;
+
+ GetX509(self, x509);
+ if (!(req = X509_to_X509_REQ(x509, NULL, EVP_md5()))) {
+ ossl_raise(eX509CertError, "");
+ }
+ obj = ossl_x509req_new(req);
+ X509_REQ_free(req);
- return obj;
+ return obj;
}
- */
+#endif
static VALUE
ossl_x509_get_version(VALUE self)
{
- X509 *x509;
+ X509 *x509;
- GetX509(self, x509);
+ GetX509(self, x509);
- return LONG2NUM(X509_get_version(x509));
+ return LONG2NUM(X509_get_version(x509));
}
static VALUE
ossl_x509_set_version(VALUE self, VALUE version)
{
- X509 *x509;
- long ver;
+ X509 *x509;
+ long ver;
- GetX509(self, x509);
+ GetX509(self, x509);
+ if ((ver = NUM2LONG(version)) < 0) {
+ ossl_raise(eX509CertError, "version must be >= 0!");
+ }
+ if (!X509_set_version(x509, ver)) {
+ ossl_raise(eX509CertError, "");
+ }
- if ((ver = NUM2LONG(version)) < 0) {
- ossl_raise(eX509CertError, "version must be >= 0!");
- }
- if (!X509_set_version(x509, ver)) {
- ossl_raise(eX509CertError, "");
- }
- return version;
+ return version;
}
static VALUE
ossl_x509_get_serial(VALUE self)
{
- X509 *x509;
+ X509 *x509;
- GetX509(self, x509);
+ GetX509(self, x509);
- return asn1integer_to_num(X509_get_serialNumber(x509));
+ return asn1integer_to_num(X509_get_serialNumber(x509));
}
static VALUE
ossl_x509_set_serial(VALUE self, VALUE num)
{
- X509 *x509;
+ X509 *x509;
- GetX509(self, x509);
+ GetX509(self, x509);
- x509->cert_info->serialNumber = num_to_asn1integer(num, X509_get_serialNumber(x509));
+ x509->cert_info->serialNumber =
+ num_to_asn1integer(num, X509_get_serialNumber(x509));
- return num;
+ return num;
}
static VALUE
ossl_x509_get_subject(VALUE self)
{
- X509 *x509;
- X509_NAME *name;
+ X509 *x509;
+ X509_NAME *name;
- GetX509(self, x509);
+ GetX509(self, x509);
+ if (!(name = X509_get_subject_name(x509))) { /* NO DUP - don't free! */
+ ossl_raise(eX509CertError, "");
+ }
- if (!(name = X509_get_subject_name(x509))) { /* NO DUP - don't free! */
- ossl_raise(eX509CertError, "");
- }
- return ossl_x509name_new(name);
+ return ossl_x509name_new(name);
}
static VALUE
ossl_x509_set_subject(VALUE self, VALUE subject)
{
- X509 *x509;
+ X509 *x509;
- GetX509(self, x509);
+ GetX509(self, x509);
+ if (!X509_set_subject_name(x509, GetX509NamePtr(subject))) { /* DUPs name */
+ ossl_raise(eX509CertError, "");
+ }
- if (!X509_set_subject_name(x509, GetX509NamePtr(subject))) { /* DUPs name */
- ossl_raise(eX509CertError, "");
- }
- return subject;
+ return subject;
}
static VALUE
ossl_x509_get_issuer(VALUE self)
{
- X509 *x509;
- X509_NAME *name;
-
- GetX509(self, x509);
-
- if(!(name = X509_get_issuer_name(x509))) { /* NO DUP - don't free! */
- ossl_raise(eX509CertError, "");
- }
- return ossl_x509name_new(name);
+ X509 *x509;
+ X509_NAME *name;
+
+ GetX509(self, x509);
+ if(!(name = X509_get_issuer_name(x509))) { /* NO DUP - don't free! */
+ ossl_raise(eX509CertError, "");
+ }
+
+ return ossl_x509name_new(name);
}
static VALUE
ossl_x509_set_issuer(VALUE self, VALUE issuer)
{
- X509 *x509;
-
- GetX509(self, x509);
+ X509 *x509;
- if (!X509_set_issuer_name(x509, GetX509NamePtr(issuer))) { /* DUPs name */
- ossl_raise(eX509CertError, "");
- }
- return issuer;
+ GetX509(self, x509);
+ if (!X509_set_issuer_name(x509, GetX509NamePtr(issuer))) { /* DUPs name */
+ ossl_raise(eX509CertError, "");
+ }
+
+ return issuer;
}
static VALUE
ossl_x509_get_not_before(VALUE self)
{
- X509 *x509;
- ASN1_UTCTIME *asn1time;
+ X509 *x509;
+ ASN1_UTCTIME *asn1time;
- GetX509(self, x509);
+ GetX509(self, x509);
+ if (!(asn1time = X509_get_notBefore(x509))) { /* NO DUP - don't free! */
+ ossl_raise(eX509CertError, "");
+ }
- if (!(asn1time = X509_get_notBefore(x509))) { /* NO DUP - don't free! */
- ossl_raise(eX509CertError, "");
- }
- return asn1time_to_time(asn1time);
+ return asn1time_to_time(asn1time);
}
static VALUE
ossl_x509_set_not_before(VALUE self, VALUE time)
{
- X509 *x509;
- time_t sec;
+ X509 *x509;
+ time_t sec;
- GetX509(self, x509);
+ GetX509(self, x509);
+ sec = time_to_time_t(time);
+ if (!X509_time_adj(X509_get_notBefore(x509), 0, &sec)) {
+ ossl_raise(eX509CertError, "");
+ }
- sec = time_to_time_t(time);
-
- if (!X509_time_adj(X509_get_notBefore(x509), 0, &sec)) {
- ossl_raise(eX509CertError, "");
- }
- return time;
+ return time;
}
static VALUE
ossl_x509_get_not_after(VALUE self)
{
- X509 *x509;
- ASN1_TIME *asn1time;
+ X509 *x509;
+ ASN1_TIME *asn1time;
- GetX509(self, x509);
+ GetX509(self, x509);
+ if (!(asn1time = X509_get_notAfter(x509))) { /* NO DUP - don't free! */
+ ossl_raise(eX509CertError, "");
+ }
- if (!(asn1time = X509_get_notAfter(x509))) { /* NO DUP - don't free! */
- ossl_raise(eX509CertError, "");
- }
- return asn1time_to_time(asn1time);
+ return asn1time_to_time(asn1time);
}
static VALUE
ossl_x509_set_not_after(VALUE self, VALUE time)
{
- X509 *x509;
- time_t sec;
+ X509 *x509;
+ time_t sec;
- GetX509(self, x509);
+ GetX509(self, x509);
+ sec = time_to_time_t(time);
+ if (!X509_time_adj(X509_get_notAfter(x509), 0, &sec)) {
+ ossl_raise(eX509CertError, "");
+ }
- sec = time_to_time_t(time);
-
- if (!X509_time_adj(X509_get_notAfter(x509), 0, &sec)) {
- ossl_raise(eX509CertError, "");
- }
- return time;
+ return time;
}
static VALUE
ossl_x509_get_public_key(VALUE self)
{
- X509 *x509;
- EVP_PKEY *pkey;
+ X509 *x509;
+ EVP_PKEY *pkey;
- GetX509(self, x509);
-
- if (!(pkey = X509_get_pubkey(x509))) { /* adds an reference */
- ossl_raise(eX509CertError, "");
- }
- return ossl_pkey_new(pkey); /* NO DUP - OK */
+ GetX509(self, x509);
+ if (!(pkey = X509_get_pubkey(x509))) { /* adds an reference */
+ ossl_raise(eX509CertError, "");
+ }
+
+ return ossl_pkey_new(pkey); /* NO DUP - OK */
}
static VALUE
ossl_x509_set_public_key(VALUE self, VALUE key)
{
- X509 *x509;
+ X509 *x509;
- GetX509(self, x509);
-
- if (!X509_set_pubkey(x509, GetPKeyPtr(key))) { /* DUPs pkey */
- ossl_raise(eX509CertError, "");
- }
- return key;
+ GetX509(self, x509);
+ if (!X509_set_pubkey(x509, GetPKeyPtr(key))) { /* DUPs pkey */
+ ossl_raise(eX509CertError, "");
+ }
+
+ return key;
}
static VALUE
ossl_x509_sign(VALUE self, VALUE key, VALUE digest)
{
- X509 *x509;
- EVP_PKEY *pkey;
- const EVP_MD *md;
+ X509 *x509;
+ EVP_PKEY *pkey;
+ const EVP_MD *md;
- GetX509(self, x509);
-
- pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
- md = GetDigestPtr(digest);
-
- if (!X509_sign(x509, pkey, md)) {
- ossl_raise(eX509CertError, "");
- }
- return self;
+ GetX509(self, x509);
+ pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
+ md = GetDigestPtr(digest);
+ if (!X509_sign(x509, pkey, md)) {
+ ossl_raise(eX509CertError, "");
+ }
+
+ return self;
}
/*
@@ -475,21 +465,20 @@ ossl_x509_sign(VALUE self, VALUE key, VALUE digest)
static VALUE
ossl_x509_verify(VALUE self, VALUE key)
{
- X509 *x509;
- EVP_PKEY *pkey;
- int i;
+ X509 *x509;
+ EVP_PKEY *pkey;
+ int i;
- GetX509(self, x509);
-
- pkey = GetPKeyPtr(key); /* NO NEED TO DUP */
-
- if ((i = X509_verify(x509, pkey)) < 0) {
- ossl_raise(eX509CertError, "");
- }
- if (i > 0) {
- return Qtrue;
- }
- return Qfalse;
+ GetX509(self, x509);
+ pkey = GetPKeyPtr(key); /* NO NEED TO DUP */
+ if ((i = X509_verify(x509, pkey)) < 0) {
+ ossl_raise(eX509CertError, "");
+ }
+ if (i > 0) {
+ return Qtrue;
+ }
+
+ return Qfalse;
}
/*
@@ -498,19 +487,18 @@ ossl_x509_verify(VALUE self, VALUE key)
static VALUE
ossl_x509_check_private_key(VALUE self, VALUE key)
{
- X509 *x509;
- EVP_PKEY *pkey;
-
- GetX509(self, x509);
-
- /* not needed private key, but should be */
- pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
+ X509 *x509;
+ EVP_PKEY *pkey;
- if (!X509_check_private_key(x509, pkey)) {
- OSSL_Warning("Check private key:%s", OSSL_ErrMsg());
- return Qfalse;
- }
- return Qtrue;
+ GetX509(self, x509);
+ /* not needed private key, but should be */
+ pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
+ if (!X509_check_private_key(x509, pkey)) {
+ OSSL_Warning("Check private key:%s", OSSL_ErrMsg());
+ return Qfalse;
+ }
+
+ return Qtrue;
}
/*
@@ -519,25 +507,23 @@ ossl_x509_check_private_key(VALUE self, VALUE key)
static VALUE
ossl_x509_get_extensions(VALUE self)
{
- X509 *x509;
- int count, i;
- X509_EXTENSION *ext;
- VALUE ary;
-
- GetX509(self, x509);
+ X509 *x509;
+ int count, i;
+ X509_EXTENSION *ext;
+ VALUE ary;
- count = X509_get_ext_count(x509);
+ GetX509(self, x509);
+ count = X509_get_ext_count(x509);
+ if (count < 0) {
+ return rb_ary_new();
+ }
+ ary = rb_ary_new2(count);
+ for (i=0; i<count; i++) {
+ ext = X509_get_ext(x509, i); /* NO DUP - don't free! */
+ rb_ary_push(ary, ossl_x509ext_new(ext));
+ }
- if (count < 0) {
- return rb_ary_new();
- }
- ary = rb_ary_new2(count);
-
- for (i=0; i<count; i++) {
- ext = X509_get_ext(x509, i); /* NO DUP - don't free! */
- rb_ary_push(ary, ossl_x509ext_new(ext));
- }
- return ary;
+ return ary;
}
/*
@@ -546,50 +532,46 @@ ossl_x509_get_extensions(VALUE self)
static VALUE
ossl_x509_set_extensions(VALUE self, VALUE ary)
{
- X509 *x509;
- X509_EXTENSION *ext;
- int i;
-
- GetX509(self, x509);
-
- Check_Type(ary, T_ARRAY);
+ X509 *x509;
+ X509_EXTENSION *ext;
+ int i;
+
+ GetX509(self, x509);
+ Check_Type(ary, T_ARRAY);
+ /* All ary's members should be X509Extension */
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ OSSL_Check_Kind(RARRAY(ary)->ptr[i], cX509Ext);
+ }
+ sk_X509_EXTENSION_pop_free(x509->cert_info->extensions, X509_EXTENSION_free);
+ x509->cert_info->extensions = NULL;
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ ext = ossl_x509ext_get_X509_EXTENSION(RARRAY(ary)->ptr[i]);
- for (i=0; i<RARRAY(ary)->len; i++) { /* All ary's members should be X509Extension */
- OSSL_Check_Kind(RARRAY(ary)->ptr[i], cX509Ext);
+ if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
+ X509_EXTENSION_free(ext);
+ ossl_raise(eX509CertError, "");
}
+ X509_EXTENSION_free(ext);
+ }
- sk_X509_EXTENSION_pop_free(x509->cert_info->extensions, X509_EXTENSION_free);
- x509->cert_info->extensions = NULL;
-
- for (i=0; i<RARRAY(ary)->len; i++) {
- ext = ossl_x509ext_get_X509_EXTENSION(RARRAY(ary)->ptr[i]);
-
- if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
- X509_EXTENSION_free(ext);
- ossl_raise(eX509CertError, "");
- }
- X509_EXTENSION_free(ext);
- }
- return ary;
+ return ary;
}
static VALUE
ossl_x509_add_extension(VALUE self, VALUE extension)
{
- X509 *x509;
- X509_EXTENSION *ext;
-
- GetX509(self, x509);
-
- ext = ossl_x509ext_get_X509_EXTENSION(extension);
+ X509 *x509;
+ X509_EXTENSION *ext;
- if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
- X509_EXTENSION_free(ext);
- ossl_raise(eX509CertError, "");
- }
+ GetX509(self, x509);
+ ext = ossl_x509ext_get_X509_EXTENSION(extension);
+ if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
X509_EXTENSION_free(ext);
+ ossl_raise(eX509CertError, "");
+ }
+ X509_EXTENSION_free(ext);
- return extension;
+ return extension;
}
/*
@@ -598,37 +580,37 @@ ossl_x509_add_extension(VALUE self, VALUE extension)
void
Init_ossl_x509cert()
{
- eX509CertError = rb_define_class_under(mX509, "CertificateError", eOSSLError);
-
- cX509Cert = rb_define_class_under(mX509, "Certificate", rb_cObject);
-
- rb_define_singleton_method(cX509Cert, "allocate", ossl_x509_s_allocate, 0);
- rb_define_method(cX509Cert, "initialize", ossl_x509_initialize, -1);
-
- rb_define_method(cX509Cert, "become", ossl_x509_become, 1);
- rb_define_method(cX509Cert, "to_der", ossl_x509_to_der, 0);
- rb_define_method(cX509Cert, "to_pem", ossl_x509_to_pem, 0);
- rb_define_alias(cX509Cert, "to_s", "to_pem");
- rb_define_method(cX509Cert, "to_text", ossl_x509_to_text, 0);
- rb_define_method(cX509Cert, "version", ossl_x509_get_version, 0);
- rb_define_method(cX509Cert, "version=", ossl_x509_set_version, 1);
- rb_define_method(cX509Cert, "serial", ossl_x509_get_serial, 0);
- rb_define_method(cX509Cert, "serial=", ossl_x509_set_serial, 1);
- rb_define_method(cX509Cert, "subject", ossl_x509_get_subject, 0);
- rb_define_method(cX509Cert, "subject=", ossl_x509_set_subject, 1);
- rb_define_method(cX509Cert, "issuer", ossl_x509_get_issuer, 0);
- rb_define_method(cX509Cert, "issuer=", ossl_x509_set_issuer, 1);
- rb_define_method(cX509Cert, "not_before", ossl_x509_get_not_before, 0);
- rb_define_method(cX509Cert, "not_before=", ossl_x509_set_not_before, 1);
- rb_define_method(cX509Cert, "not_after", ossl_x509_get_not_after, 0);
- rb_define_method(cX509Cert, "not_after=", ossl_x509_set_not_after, 1);
- rb_define_method(cX509Cert, "public_key", ossl_x509_get_public_key, 0);
- rb_define_method(cX509Cert, "public_key=", ossl_x509_set_public_key, 1);
- rb_define_method(cX509Cert, "sign", ossl_x509_sign, 2);
- rb_define_method(cX509Cert, "verify", ossl_x509_verify, 1);
- rb_define_method(cX509Cert, "check_private_key", ossl_x509_check_private_key, 1);
- rb_define_method(cX509Cert, "extensions", ossl_x509_get_extensions, 0);
- rb_define_method(cX509Cert, "extensions=", ossl_x509_set_extensions, 1);
- rb_define_method(cX509Cert, "add_extension", ossl_x509_add_extension, 1);
+ eX509CertError = rb_define_class_under(mX509, "CertificateError", eOSSLError);
+
+ cX509Cert = rb_define_class_under(mX509, "Certificate", rb_cObject);
+
+ rb_define_singleton_method(cX509Cert, "allocate", ossl_x509_s_allocate, 0);
+ rb_define_method(cX509Cert, "initialize", ossl_x509_initialize, -1);
+
+ rb_define_method(cX509Cert, "become", ossl_x509_become, 1);
+ rb_define_method(cX509Cert, "to_der", ossl_x509_to_der, 0);
+ rb_define_method(cX509Cert, "to_pem", ossl_x509_to_pem, 0);
+ rb_define_alias(cX509Cert, "to_s", "to_pem");
+ rb_define_method(cX509Cert, "to_text", ossl_x509_to_text, 0);
+ rb_define_method(cX509Cert, "version", ossl_x509_get_version, 0);
+ rb_define_method(cX509Cert, "version=", ossl_x509_set_version, 1);
+ rb_define_method(cX509Cert, "serial", ossl_x509_get_serial, 0);
+ rb_define_method(cX509Cert, "serial=", ossl_x509_set_serial, 1);
+ rb_define_method(cX509Cert, "subject", ossl_x509_get_subject, 0);
+ rb_define_method(cX509Cert, "subject=", ossl_x509_set_subject, 1);
+ rb_define_method(cX509Cert, "issuer", ossl_x509_get_issuer, 0);
+ rb_define_method(cX509Cert, "issuer=", ossl_x509_set_issuer, 1);
+ rb_define_method(cX509Cert, "not_before", ossl_x509_get_not_before, 0);
+ rb_define_method(cX509Cert, "not_before=", ossl_x509_set_not_before, 1);
+ rb_define_method(cX509Cert, "not_after", ossl_x509_get_not_after, 0);
+ rb_define_method(cX509Cert, "not_after=", ossl_x509_set_not_after, 1);
+ rb_define_method(cX509Cert, "public_key", ossl_x509_get_public_key, 0);
+ rb_define_method(cX509Cert, "public_key=", ossl_x509_set_public_key, 1);
+ rb_define_method(cX509Cert, "sign", ossl_x509_sign, 2);
+ rb_define_method(cX509Cert, "verify", ossl_x509_verify, 1);
+ rb_define_method(cX509Cert, "check_private_key", ossl_x509_check_private_key, 1);
+ rb_define_method(cX509Cert, "extensions", ossl_x509_get_extensions, 0);
+ rb_define_method(cX509Cert, "extensions=", ossl_x509_set_extensions, 1);
+ rb_define_method(cX509Cert, "add_extension", ossl_x509_add_extension, 1);
}