ASN1.decode(der)DER表現の文字列を解析し、OpenSSL::ASN1::ASN1Data のサブクラスのインスタンスを返す。ASN.1 オブジェクトが Constructive である場合は、それを構成する要素も再帰的に解析する。der に複数の ASN.1 オブジェクトが含まれる場合は最初の ASN.1 オブジェクトだけを返す。
ruby -e '
require "openssl"
require "pp"
pem = File.read(ARGV[0])
cert = OpenSSL::X509::Certificate.new(pem)
pp OpenSSL::ASN1.decode(cert.to_der)
' mycert.pem
#<OpenSSL::ASN1::Sequence:0x814e9fc
@tag=16,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::Sequence:0x814ead8
@tag=16,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::ASN1Data:0x814f690
@tag=0,
@tag_class=:CONTEXT_SPECIFIC,
@value=
[#<OpenSSL::ASN1::Integer:0x814f6a4
@tag=2,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=2>]>,
...
ASN1.decode_all(der)ASN1.decode と違い、der に含まれる全てのオブジェクトを再帰的に解析し 配列として返す。
ASN1.traverse(der) {|depth, off, hlen, len, constructed, tag_class, tag| ...}der に含まれる全てのオブジェクトを再帰的に解析して、 そのプロパティを引数として与えられたブロックを評価する。
ASN1.decode_all と同じように der に含まれる全ての ASN.1 オブジェクトを 再帰的に解析する。
以下のようなモジュール関数も定義されている。メソッドと同じ名前のクラスの コンストラクター new と同じ。
ASN1.Boolean(value [, tag [, tagging [, tag_class]]])ASN1.Integer(value ... )ASN1.Enumerated(value ... )ASN1.BitString(value ... )ASN1.OctetString(value ... )ASN1.UTF8String(value ... )ASN1.NumericString(value ... )ASN1.PrintableString(value ... )ASN1.T61String(value ... )ASN1.VideotexString(value ... )ASN1.IA5String(value ... )ASN1.GraphicString(value ... )ASN1.ISO64String(value ... )ASN1.GeneralString(value ... )ASN1.UniversalString(value ... )ASN1.BMPString(value ... )ASN1.Null(value ... )ASN1.ObjectId(value ... )ASN1.UTCTime(value ... )ASN1.GeneralizedTime(value ... )ASN1.Sequence(value ... )ASN1.Set(value ... )UNIVERSAL_TAG_NAMEタグ番号が表すASN.1 オブジェクト名を収録した配列。
require 'openssl' p OpenSSL::ASN1::UNIVERSAL_TAG_NAME[0] # => "EOC" p OpenSSL::ASN1::UNIVERSAL_TAG_NAME[12] # => "UTF8STRING"
ASN.1 オブジェクトのタグ番号を表す定数が以下のように定義されている。
require 'openssl' p OpenSSL::ASN1::UTF8STRING # => 12
EOC # => 0BOOLEAN # => 1INTEGER # => 2BIT_STRING # => 3OCTET_STRING # => 4NULL # => 5OBJECT # => 6OBJECT_DESCRIPTOR # => 7EXTERNAL # => 8REAL # => 9ENUMERATED # => 10EMBEDDED_PDV # => 11UTF8STRING # => 12RELATIVE_OID # => 13SEQUENCE # => 16SET # => 17NUMERICSTRING # => 18PRINTABLESTRING # => 19T61STRING # => 20VIDEOTEXSTRING # => 21IA5STRING # => 22UTCTIME # => 23GENERALIZEDTIME # => 24GRAPHICSTRING # => 25ISO64STRING # => 26GENERALSTRING # => 27UNIVERSALSTRING # => 28CHARACTER_STRING # => 29BMPSTRING # => 30ASN1ErrorOpenSSL::OpenSSLError を継承している。