Class: OpenSSL::X509::Name
- Inherits:
-
Object
- Object
- OpenSSL::X509::Name
- Includes:
- Comparable
- Defined in:
- ext/rubysl/openssl/ossl_x509name.c,
lib/openssl/x509.rb,
ext/rubysl/openssl/ossl_x509name.c
Overview
An X.509 name represents a hostname, email address or other entity associated with a public key.
You can create a Name by parsing a distinguished name String or by supplying the distinguished name as an Array.
name = OpenSSL::X509::Name.parse 'CN=nobody/DC=example'
name = OpenSSL::X509::Name.new [['CN', 'nobody'], ['DC', 'example']]
Defined Under Namespace
Modules: RFC2253DN
Constant Summary collapse
- DEFAULT_OBJECT_TYPE =
The default object type for name entries.
utf8str
- OBJECT_TYPE_TEMPLATE =
The default object type template for name entries.
hash
- COMPAT =
A flag for #to_s.
Breaks the name returned into multiple lines if longer than 80 characters.
ULONG2NUM(XN_FLAG_COMPAT)
- RFC2253 =
A flag for #to_s.
Returns an RFC2253 format name.
ULONG2NUM(XN_FLAG_RFC2253)
- ONELINE =
A flag for #to_s.
Returns a more readable format than RFC2253.
ULONG2NUM(XN_FLAG_ONELINE)
- MULTILINE =
A flag for #to_s.
Returns a multiline format.
ULONG2NUM(XN_FLAG_MULTILINE)
Class Method Summary collapse
- .parse_openssl(str, template = OBJECT_TYPE_TEMPLATE) ⇒ Object (also: parse)
- .parse_rfc2253(str, template = OBJECT_TYPE_TEMPLATE) ⇒ Object
Instance Method Summary collapse
-
#add_entry(oid, value[, type]) ⇒ self
Adds a new entry with the given
oid
andvalue
to this name. -
#cmp(other) ⇒ Object
(also: #<=>)
Compares this Name with
other
and returns 0 if they are the same and -1 or +1 if they are greater or less than each other respectively. -
#eql?(other) ⇒ Boolean
Returns true if
name
andother
refer to the same hash key. -
#hash ⇒ Integer
The hash value returned is suitable for use as a certificate’s filename in a CA path.
-
#hash_old ⇒ Integer
Returns an MD5 based hash used in OpenSSL 0.9.X.
-
#initialize(*args) ⇒ Object
constructor
Creates a new Name.
- #pretty_print(q) ⇒ Object
-
#to_a ⇒ Array
Returns an Array representation of the distinguished name suitable for passing to ::new.
-
#to_der ⇒ String
Converts the name to DER encoding.
-
#to_s(*args) ⇒ Object
Returns this name as a Distinguished Name string.
Constructor Details
#X509::Name.new ⇒ Object #X509::Name.new(der) ⇒ Object #X509::Name.new(distinguished_name) ⇒ Object #X509::Name.new(distinguished_name, template) ⇒ Object
Creates a new Name.
A name may be created from a DER encoded string der
, an Array representing a distinguished_name
or a distinguished_name
along with a template
.
name = OpenSSL::X509::Name.new [['CN', 'nobody'], ['DC', 'example']]
name = OpenSSL::X509::Name.new name.to_der
See add_entry for a description of the distinguished_name
Array’s contents
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 149
static VALUE
ossl_x509name_initialize(int argc, VALUE *argv, VALUE self)
{
X509_NAME *name;
VALUE arg, template;
GetX509Name(self, name);
if (rb_scan_args(argc, argv, "02", &arg, &template) == 0) {
return self;
}
else {
VALUE tmp = rb_check_array_type(arg);
if (!NIL_P(tmp)) {
VALUE args;
if(NIL_P(template)) template = OBJECT_TYPE_TEMPLATE;
args = rb_ary_new3(2, self, template);
rb_block_call(tmp, rb_intern("each"), 0, 0, ossl_x509name_init_i, args);
}
else{
const unsigned char *p;
VALUE str = ossl_to_der_if_possible(arg);
X509_NAME *x;
StringValue(str);
p = (unsigned char *)RSTRING_PTR(str);
x = d2i_X509_NAME(&name, &p, RSTRING_LEN(str));
DATA_PTR(self) = name;
if(!x){
ossl_raise(eX509NameError, NULL);
}
}
}
return self;
}
|
Class Method Details
.parse_openssl(str, template = OBJECT_TYPE_TEMPLATE) ⇒ Object Also known as: parse
141 142 143 144 |
# File 'lib/openssl/x509.rb', line 141 def parse_openssl(str, template=OBJECT_TYPE_TEMPLATE) ary = str.scan(/\s*([^\/,]+)\s*/).collect{|i| i[0].split("=", 2) } self.new(ary, template) end |
Instance Method Details
#add_entry(oid, value[, type]) ⇒ self
Adds a new entry with the given oid
and value
to this name. The oid
is an object identifier defined in ASN.1. Some common OIDs are:
- C
-
Country Name
- CN
-
Common Name
- DC
-
Domain Component
- O
-
Organization Name
- OU
-
Organizational Unit Name
- ST
-
State or Province Name
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 217
static
VALUE ossl_x509name_add_entry(int argc, VALUE *argv, VALUE self)
{
X509_NAME *name;
VALUE oid, value, type;
const char *oid_name;
rb_scan_args(argc, argv, "21", &oid, &value, &type);
oid_name = StringValueCStr(oid);
StringValue(value);
if(NIL_P(type)) type = rb_aref(OBJECT_TYPE_TEMPLATE, oid);
GetX509Name(self, name);
if (!X509_NAME_add_entry_by_txt(name, oid_name, NUM2INT(type),
(const unsigned char *)RSTRING_PTR(value), RSTRING_LENINT(value), -1, 0)) {
ossl_raise(eX509NameError, NULL);
}
return self;
}
|
#other ⇒ Integer #<=>(other) ⇒ Integer Also known as: <=>
Compares this Name with other
and returns 0 if they are the same and -1 or +1 if they are greater or less than each other respectively.
358 359 360 361 362 363 364 365 366 367 368 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 358
static VALUE
ossl_x509name_cmp(VALUE self, VALUE other)
{
int result;
result = ossl_x509name_cmp0(self, other);
if (result < 0) return INT2FIX(-1);
if (result > 0) return INT2FIX(1);
return INT2FIX(0);
}
|
#eql?(other) ⇒ Boolean
Returns true if name
and other
refer to the same hash key.
376 377 378 379 380 381 382 383 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 376
static VALUE
ossl_x509name_eql(VALUE self, VALUE other)
{
if (!rb_obj_is_kind_of(other, cX509Name))
return Qfalse;
return ossl_x509name_cmp0(self, other) == 0 ? Qtrue : Qfalse;
}
|
#hash ⇒ Integer
The hash value returned is suitable for use as a certificate’s filename in a CA path.
392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 392
static VALUE
ossl_x509name_hash(VALUE self)
{
X509_NAME *name;
unsigned long hash;
GetX509Name(self, name);
hash = X509_NAME_hash(name);
return ULONG2NUM(hash);
}
|
#hash_old ⇒ Integer
Returns an MD5 based hash used in OpenSSL 0.9.X.
412 413 414 415 416 417 418 419 420 421 422 423 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 412
static VALUE
ossl_x509name_hash_old(VALUE self)
{
X509_NAME *name;
unsigned long hash;
GetX509Name(self, name);
hash = X509_NAME_hash_old(name);
return ULONG2NUM(hash);
}
|
#pretty_print(q) ⇒ Object
149 150 151 152 153 154 |
# File 'lib/openssl/x509.rb', line 149 def pretty_print(q) q.object_group(self) { q.text ' ' q.text to_s(OpenSSL::X509::Name::RFC2253) } end |
#to_a ⇒ Array
Returns an Array representation of the distinguished name suitable for passing to ::new
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 299
static VALUE
ossl_x509name_to_a(VALUE self)
{
X509_NAME *name;
X509_NAME_ENTRY *entry;
int i,entries,nid;
char long_name[512];
const char *short_name;
VALUE ary, vname, ret;
ASN1_STRING *value;
GetX509Name(self, name);
entries = X509_NAME_entry_count(name);
if (entries < 0) {
OSSL_Debug("name entries < 0!");
return rb_ary_new();
}
ret = rb_ary_new2(entries);
for (i=0; i<entries; i++) {
if (!(entry = X509_NAME_get_entry(name, i))) {
ossl_raise(eX509NameError, NULL);
}
if (!i2t_ASN1_OBJECT(long_name, sizeof(long_name),
X509_NAME_ENTRY_get_object(entry))) {
ossl_raise(eX509NameError, NULL);
}
nid = OBJ_ln2nid(long_name);
if (nid == NID_undef) {
vname = rb_str_new2((const char *) &long_name);
} else {
short_name = OBJ_nid2sn(nid);
vname = rb_str_new2(short_name); /*do not free*/
}
value = X509_NAME_ENTRY_get_data(entry);
ary = rb_ary_new3(3, vname, asn1str_to_str(value), INT2NUM(value->type));
rb_ary_push(ret, ary);
}
return ret;
}
|
#to_der ⇒ String
Converts the name to DER encoding
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 432
static VALUE
ossl_x509name_to_der(VALUE self)
{
X509_NAME *name;
VALUE str;
long len;
unsigned char *p;
GetX509Name(self, name);
if((len = i2d_X509_NAME(name, NULL)) <= 0)
ossl_raise(eX509NameError, NULL);
str = rb_str_new(0, len);
p = (unsigned char *)RSTRING_PTR(str);
if(i2d_X509_NAME(name, &p) <= 0)
ossl_raise(eX509NameError, NULL);
ossl_str_adjust(str, p);
return str;
}
|
#to_s ⇒ String #to_s(flags) ⇒ String
Returns this name as a Distinguished Name string. flags
may be one of:
-
OpenSSL::X509::Name::COMPAT
-
OpenSSL::X509::Name::RFC2253
-
OpenSSL::X509::Name::ONELINE
-
OpenSSL::X509::Name::MULTILINE
281 282 283 284 285 286 287 288 289 290 |
# File 'ext/rubysl/openssl/ossl_x509name.c', line 281
static VALUE
ossl_x509name_to_s(int argc, VALUE *argv, VALUE self)
{
rb_check_arity(argc, 0, 1);
/* name.to_s(nil) was allowed */
if (!argc || NIL_P(argv[0]))
return ossl_x509name_to_s_old(self);
else
return x509name_print(self, NUM2ULONG(argv[0]));
}
|