diff options
author | GOTOU Yuuzou <gotoyuzo@notwork.org> | 2002-12-17 10:05:50 +0000 |
---|---|---|
committer | GOTOU Yuuzou <gotoyuzo@notwork.org> | 2002-12-17 10:05:50 +0000 |
commit | 501b4edc1a3a804e759e1635e3cff62d77f31f81 (patch) | |
tree | 90b59e4068198c9e0428b683cbfcf6300d40880a /ossl_x509cert.c | |
parent | f75c38e35604b7915a53062f7513cf5ad643aace (diff) | |
download | ruby-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.c | 720 |
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); } |