mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

optional argument to specify the DirectoryString type (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString for DirectoryString, and strongly requires to use UTF8String for all certificates issued after December, 31 2003. * ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
74 lines
1.8 KiB
Ruby
74 lines
1.8 KiB
Ruby
=begin
|
|
= $RCSfile$ -- Ruby-space definitions that completes C-space funcs for X509 and subclasses
|
|
|
|
= Info
|
|
'OpenSSL for Ruby 2' project
|
|
Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
|
All rights reserved.
|
|
|
|
= Licence
|
|
This program is licenced under the same licence as Ruby.
|
|
(See the file 'LICENCE'.)
|
|
|
|
= Version
|
|
$Id$
|
|
=end
|
|
|
|
##
|
|
# Should we care what if somebody require this file directly?
|
|
#require 'openssl'
|
|
|
|
module OpenSSL
|
|
module X509
|
|
class ExtensionFactory
|
|
def create_extension(*arg)
|
|
if arg.size > 1
|
|
create_ext(*arg)
|
|
else
|
|
send("create_ext_from_"+arg[0].class.name.downcase, arg[0])
|
|
end
|
|
end
|
|
|
|
def create_ext_from_array(ary)
|
|
raise ExtensionError, "unexpected array form" if ary.size > 3
|
|
create_ext(ary[0], ary[1], ary[2])
|
|
end
|
|
|
|
def create_ext_from_string(str) # "oid = critical, value"
|
|
oid, value = str.split(/=/, 2)
|
|
oid.strip!
|
|
value.strip!
|
|
create_ext(oid, value)
|
|
end
|
|
|
|
def create_ext_from_hash(hash)
|
|
create_ext(hash["oid"], hash["value"], hash["critical"])
|
|
end
|
|
end # ExtensionFactory
|
|
|
|
class Extension
|
|
def to_s # "oid = critical, value"
|
|
str = self.oid
|
|
str << " = "
|
|
str << "critical, " if self.critical?
|
|
str << self.value.gsub(/\n/, ", ")
|
|
end
|
|
|
|
def to_h # {"oid"=>sn|ln, "value"=>value, "critical"=>true|false}
|
|
{"oid"=>self.oid,"value"=>self.value,"critical"=>self.critical?}
|
|
end
|
|
|
|
def to_a
|
|
[ self.oid, self.value, self.critical? ]
|
|
end
|
|
end # Extension
|
|
|
|
class Name
|
|
def self.parse(str, type=ASN1::UTF8STRING)
|
|
ary = str.scan(/\s*([^\/,]+)\s*/).collect{|i| i[0].split("=") }
|
|
self.new(ary, type)
|
|
end
|
|
end # Name
|
|
|
|
end # X509
|
|
end # OpenSSL
|