OpenSSL::ASN1

モジュール関数

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 に含まれる全てのオブジェクトを再帰的に解析して、 そのプロパティを引数として与えられたブロックを評価する。

  • depth は再帰の深さ
  • off は対象の ASN.1 オブジェクトの開始の der の始めからのオフセット。
  • hlen は ASN.1 オブジェクトのヘッダの長さ。
  • len は ASN.1 オブジェクトの値フィールドの長さ。
  • constructed は対象の ASN.1 オブジェクトが Constructive なら真である。
  • tag_class はタグクラスを表す Symbol オブジェクト (:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION)。
  • tag はタグ番号。

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 # => 0
BOOLEAN # => 1
INTEGER # => 2
BIT_STRING # => 3
OCTET_STRING # => 4
NULL # => 5
OBJECT # => 6
OBJECT_DESCRIPTOR # => 7
EXTERNAL # => 8
REAL # => 9
ENUMERATED # => 10
EMBEDDED_PDV # => 11
UTF8STRING # => 12
RELATIVE_OID # => 13
SEQUENCE # => 16
SET # => 17
NUMERICSTRING # => 18
PRINTABLESTRING # => 19
T61STRING # => 20
VIDEOTEXSTRING # => 21
IA5STRING # => 22
UTCTIME # => 23
GENERALIZEDTIME # => 24
GRAPHICSTRING # => 25
ISO64STRING # => 26
GENERALSTRING # => 27
UNIVERSALSTRING # => 28
CHARACTER_STRING # => 29
BMPSTRING # => 30

例外

ASN1Error

OpenSSL::OpenSSLError を継承している。

参照



rubyist ML