OpenSSL::X509::Request
class OpenSSL::X509::Request
父类:Object
公共类方法
new(p1 = v1) Show source
static VALUE
ossl_x509req_initialize(int argc, VALUE *argv, VALUE self)
{
BIO *in;
X509_REQ *req, *x = DATA_PTR(self
VALUE arg;
if (rb_scan_args(argc, argv, "01", &arg) == 0) {
return self;
}
arg = ossl_to_der_if_possible(arg
in = ossl_obj2bio(arg
req = PEM_read_bio_X509_REQ(in, &x, NULL, NULL
DATA_PTR(self) = x;
if (!req) {
OSSL_BIO_reset(in
req = d2i_X509_REQ_bio(in, &x
DATA_PTR(self) = x;
}
BIO_free(in
if (!req) ossl_raise(eX509ReqError, NULL
return self;
}
公共实例方法
add_attribute(p1)显示源文件
static VALUE
ossl_x509req_add_attribute(VALUE self, VALUE attr)
{
X509_REQ *req;
GetX509Req(self, req
if (!X509_REQ_add1_attr(req, GetX509AttrPtr(attr))) {
ossl_raise(eX509ReqError, NULL
}
return attr;
}
attributes()显示源文件
static VALUE
ossl_x509req_get_attributes(VALUE self)
{
X509_REQ *req;
int count, i;
X509_ATTRIBUTE *attr;
VALUE ary;
GetX509Req(self, req
count = X509_REQ_get_attr_count(req
if (count < 0) {
OSSL_Debug("count < 0???"
return rb_ary_new(
}
ary = rb_ary_new2(count
for (i=0; i<count; i++) {
attr = X509_REQ_get_attr(req, i
rb_ary_push(ary, ossl_x509attr_new(attr)
}
return ary;
}
属性=(p1)显示源
static VALUE
ossl_x509req_set_attributes(VALUE self, VALUE ary)
{
X509_REQ *req;
X509_ATTRIBUTE *attr;
long i;
VALUE item;
Check_Type(ary, T_ARRAY
for (i=0;i<RARRAY_LEN(ary i++) {
OSSL_Check_Kind(RARRAY_AREF(ary, i), cX509Attr
}
GetX509Req(self, req
while ((attr = X509_REQ_delete_attr(req, 0)))
X509_ATTRIBUTE_free(attr
for (i=0;i<RARRAY_LEN(ary i++) {
item = RARRAY_AREF(ary, i
attr = GetX509AttrPtr(item
if (!X509_REQ_add1_attr(req, attr)) {
ossl_raise(eX509ReqError, NULL
}
}
return ary;
}
public_key()显示源文件
static VALUE
ossl_x509req_get_public_key(VALUE self)
{
X509_REQ *req;
EVP_PKEY *pkey;
GetX509Req(self, req
if (!(pkey = X509_REQ_get_pubkey(req))) { /* adds reference */
ossl_raise(eX509ReqError, NULL
}
return ossl_pkey_new(pkey /* NO DUP - OK */
}
public_key =(p1)显示源文件
static VALUE
ossl_x509req_set_public_key(VALUE self, VALUE key)
{
X509_REQ *req;
EVP_PKEY *pkey;
GetX509Req(self, req
pkey = GetPKeyPtr(key /* NO NEED TO DUP */
if (!X509_REQ_set_pubkey(req, pkey)) {
ossl_raise(eX509ReqError, NULL
}
return key;
}
符号(p1,p2)显示源
static VALUE
ossl_x509req_sign(VALUE self, VALUE key, VALUE digest)
{
X509_REQ *req;
EVP_PKEY *pkey;
const EVP_MD *md;
GetX509Req(self, req
pkey = GetPrivPKeyPtr(key /* NO NEED TO DUP */
md = GetDigestPtr(digest
if (!X509_REQ_sign(req, pkey, md)) {
ossl_raise(eX509ReqError, NULL
}
return self;
}
signature_algorithm()显示源文件
static VALUE
ossl_x509req_get_signature_algorithm(VALUE self)
{
X509_REQ *req;
const X509_ALGOR *alg;
BIO *out;
GetX509Req(self, req
if (!(out = BIO_new(BIO_s_mem()))) {
ossl_raise(eX509ReqError, NULL
}
X509_REQ_get0_signature(req, NULL, &alg
if (!i2a_ASN1_OBJECT(out, alg->algorithm)) {
BIO_free(out
ossl_raise(eX509ReqError, NULL
}
return ossl_membio2str(out
}
subject()显示源文件
static VALUE
ossl_x509req_get_subject(VALUE self)
{
X509_REQ *req;
X509_NAME *name;
GetX509Req(self, req
if (!(name = X509_REQ_get_subject_name(req))) { /* NO DUP - don't free */
ossl_raise(eX509ReqError, NULL
}
return ossl_x509name_new(name
}
subject =(p1)显示源文件
static VALUE
ossl_x509req_set_subject(VALUE self, VALUE subject)
{
X509_REQ *req;
GetX509Req(self, req
/* DUPs name */
if (!X509_REQ_set_subject_name(req, GetX509NamePtr(subject))) {
ossl_raise(eX509ReqError, NULL
}
return subject;
}
to_der()显示源文件
static VALUE
ossl_x509req_to_der(VALUE self)
{
X509_REQ *req;
VALUE str;
long len;
unsigned char *p;
GetX509Req(self, req
if ((len = i2d_X509_REQ(req, NULL)) <= 0)
ossl_raise(eX509ReqError, NULL
str = rb_str_new(0, len
p = (unsigned char *)RSTRING_PTR(str
if (i2d_X509_REQ(req, &p) <= 0)
ossl_raise(eX509ReqError, NULL
ossl_str_adjust(str, p
return str;
}
to_pem()显示源文件
static VALUE
ossl_x509req_to_pem(VALUE self)
{
X509_REQ *req;
BIO *out;
GetX509Req(self, req
if (!(out = BIO_new(BIO_s_mem()))) {
ossl_raise(eX509ReqError, NULL
}
if (!PEM_write_bio_X509_REQ(out, req)) {
BIO_free(out
ossl_raise(eX509ReqError, NULL
}
return ossl_membio2str(out
}
另外别名为:to_s
to_s()
别名为:to_pem
to_text()显示源文件
static VALUE
ossl_x509req_to_text(VALUE self)
{
X509_REQ *req;
BIO *out;
GetX509Req(self, req
if (!(out = BIO_new(BIO_s_mem()))) {
ossl_raise(eX509ReqError, NULL
}
if (!X509_REQ_print(out, req)) {
BIO_free(out
ossl_raise(eX509ReqError, NULL
}
return ossl_membio2str(out
}
验证(p1)显示源
检查证书签名是用PRIVversion这个PUBLIC'key'
static VALUE
ossl_x509req_verify(VALUE self, VALUE key)
{
X509_REQ *req;
EVP_PKEY *pkey;
GetX509Req(self, req
pkey = GetPKeyPtr(key /* NO NEED TO DUP */
switch (X509_REQ_verify(req, pkey)) {
case 1:
return Qtrue;
case 0:
ossl_clear_error(
return Qfalse;
default:
ossl_raise(eX509ReqError, NULL
}
}
版本()显示源文件
static VALUE
ossl_x509req_get_version(VALUE self)
{
X509_REQ *req;
long version;
GetX509Req(self, req
version = X509_REQ_get_version(req
return LONG2NUM(version
}
版本=(p1)显示源
static VALUE
ossl_x509req_set_version(VALUE self, VALUE version)
{
X509_REQ *req;
long ver;
if ((ver = NUM2LONG(version)) < 0) {
ossl_raise(eX509ReqError, "version must be >= 0!"
}
GetX509Req(self, req
if (!X509_REQ_set_version(req, ver)) {
ossl_raise(eX509ReqError, "X509_REQ_set_version"
}
return version;
}