superclass=
type=module
library=openssl
extended=
included=

ASN.1(Abstract Syntax Notation One)
 Υǡ갷Υ⥸塼Ǥ

OpenSSLǾʤɤ갷Τɬפˤʤޤ

Υ⥸塼ˤϡASN.1ϢΥ⥸塼ؿ
ASN.1 Υǡб륯饹Ƥޤ

Υ⥸塼 ASN.1 ʬ˼갷Τɬפʵǽ
äƤޤSSL/TLSɬפʵǽƤޤ

ASN.1  ITU-T  ISO ˤä줿ǡι¤뤿
濴ȤʤǤ
θ줿Ūʹ¤ºݤΥХɽ
ˡ ASN.1 εʤΰȤƿƤޤ
Υե󥹤ǸڤƤ DER 
Υ󥳡ɷΰǤ

=== 

Υ⥸塼ˤơ
ASN.1 Υǡ [[c:OpenSSL::ASN1::ASN1Data]] 
Υ֥饹˥ޥåפƤޤ

ASN.1 ñ㷿(simple type) [[c:OpenSSL::ASN1::Primitive]] 
ƥ֥饹ˡ¤(structured type) [[c:OpenSSL::ASN1::Constructive]]
γƥ֥饹бƤޤ̾盧Υ饹 UNIVERSAL Ǥ
ͤ [[m:OpenSSL::ASN1::ASN1Data#value]] ǼФޤ
ñ㷿̾ Ruby Υ֥ȡ¤
UNIVERSALʳΥ饹դ줿ϡ
[[c:OpenSSL::ASN1::ASN1Data]] бޤUNIVERSALʳΥ饹
ǥդ줿Υǡϡ[[c:OpenSSL::ASN1::ASN1Data]]Υ֥Ȥ
ɽ졢ͤȤʸ(IMPLICITʥդξ)⤷
(EXPLICITʥդξ)Ȥɽޤ
[[c:OpenSSL::ASN1::Primitive]] ΥդξȤȤǡ
IMPLICIT or EXPLICIT ʥդ¸뤳ȤǤޤ

:
  # ñ㷿Υǡ
  x = OpenSSL::ASN1::UTF8String.new("foobar")
  # ¤Υǡ
  y = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Boolean.new(true),
                                  OpenSSL::ASN1::Integer.new(-12)])
  # APPLICATION 饹Υ2֤ǥդ줿ǡ
  z = OpenSSL::ASN1::ASN1Data.new([OpenSSL::ASN1::Boolean.new(false)], 
                                  2, :APPLICATION)
  # ƱͤΥǡ OpenSSL::ASN1::Booelan.new 2ܰʹߤ
  # ɽ
  z2 = OpenSSL::ASN1::Boolean.new(false, 2, :EXPLICIT, :APPLICATION)
  # IMPLICIT ʥդ򤹤
  u = OpenSSL::ASN1::Boolean.new(false, 3, :IMPLICIT, :APPLICATION)

  # to_der ǥ󥳡
  x.to_der  # => "\f\x06foobar"
  y.to_der  # => "0\x06\x01\x01\xFF\x02\x01\xF4"
  z.to_der  # => "b\x03\x01\x01\x00"
  z2.to_der # => "b\x03\x01\x01\x00"   z.to_der Ʊ
  u.to_der # => "C\x01\x00"
  # 󥳡ɤʸǥ
  OpenSSL::ASN1.decode(x.to_der)
  # => #<OpenSSL::ASN1::UTF8String:0x000000027cc700 @tag=12, @value="foobar", @tagging=nil, @tag_class=:UNIVERSAL>
  OpenSSL::ASN1.decode(y.to_der)
  # => #<OpenSSL::ASN1::Sequence:0x000000027c47d0 @tag=16, @value=[#<OpenSSL::ASN1::Boolean:0x000000027c4898 @tag=1, @value=true, @tagging=nil, @tag_class=:UNIVERSAL>, #<OpenSSL::ASN1::Integer:0x000000027c47f8 @tag=2, @value=-12, @tagging=nil, @tag_class=:UNIVERSAL>], @tagging=nil, @tag_class=:UNIVERSAL>
  OpenSSL::ASN1.decode(z.to_der)
  # => #<OpenSSL::ASN1::ASN1Data:0x000000027bc918 @tag=2, @value=[#<OpenSSL::ASN1::Boolean:0x000000027bc968 @tag=1, @value=false, @tagging=nil, @tag_class=:UNIVERSAL>], @tag_class=:APPLICATION>
  OpenSSL::ASN1.decode(u.to_der)
  # => #<OpenSSL::ASN1::ASN1Data:0x000000025bef30 @tag=3, @value="\x00", @tag_class=:APPLICATION>
  # @value "\x00" ȤʸˤʤäƤ

Υ⥸塼 ASN.1 ˡˤ뵭ҤᤷѤ뵡ǽϤʤᡢ
IMPLICITʥդ򤵤줿ǡŬڤ˼갷ȤݤǤ礦

DERʸǥɤRubyΥ֥ȤѴˤ
[[m:OpenSSL::ASN1.#decode]] ⤷ [[m:OpenSSL::ASN1.#decode_all]] Ѥޤ
դˡ[[c:OpenSSL::ASN1::ASN1Data]] Υ֥Ȥ DER ʸ
Ѵˤϡ[[m:OpenSSL::ASN1::ASN1Data#to_der]]Ѥޤ

饹
     OpenSSL::ASN1::ASN1Data
       +-> OpenSSL::ASN1::Primitive
       |     +-> OpenSSL::ASN1::Boolean
       |     +-> OpenSSL::ASN1::Integer
       |     +-> OpenSSL::ASN1::Enumerated
       |     +-> OpenSSL::ASN1::BitString
       |     +-> OpenSSL::ASN1::OctetString
       |     +-> OpenSSL::ASN1::UTF8String
       |     +-> OpenSSL::ASN1::NumericString
       |     +-> OpenSSL::ASN1::PrintableString
       |     +-> OpenSSL::ASN1::T61String
       |     +-> OpenSSL::ASN1::VideotexString
       |     +-> OpenSSL::ASN1::IA5String
       |     +-> OpenSSL::ASN1::GraphicString
       |     +-> OpenSSL::ASN1::ISO64String
       |     +-> OpenSSL::ASN1::GeneralString
       |     +-> OpenSSL::ASN1::UniversalString
       |     +-> OpenSSL::ASN1::BMPString
       |     +-> OpenSSL::ASN1::Null
       |     +-> OpenSSL::ASN1::ObjectId
       |     +-> OpenSSL::ASN1::UTCTime
       |     `-> OpenSSL::ASN1::GeneralizedTime
       `-> OpenSSL::ASN1::Constructive
             +-> OpenSSL::ASN1::Set
             `-> OpenSSL::ASN1::Sequence



=== 

* ITU-T Rec. X.680-699 [[url:http://www.itu.int/itu-t/recommendations/index.aspx?ser=X]]
