This is a Ruby tree! It shows every object from the Ruby Programming Language in a tree format.

OpenSSL::ASN1::ASN1Data

        # OpenSSL::ASN1::ASN1Data < Object

(from ruby core)
---
The top-level class representing any ASN.1 object. When parsed by
ASN1.decode, tagged values are always represented by an instance of
ASN1Data.

## The role of ASN1Data for parsing tagged values

When encoding an ASN.1 type it is inherently clear what original type
(e.g. INTEGER, OCTET STRING etc.) this value has, regardless of its
tagging. But opposed to the time an ASN.1 type is to be encoded, when
parsing them it is not possible to deduce the "real type" of tagged
values. This is why tagged values are generally parsed into ASN1Data
instances, but with a different outcome for implicit and explicit
tagging.

### Example of a parsed implicitly tagged value

An implicitly 1-tagged INTEGER value will be parsed as an ASN1Data with
*   *tag* equal to 1
*   *tag_class* equal to `:CONTEXT_SPECIFIC`
*   *value* equal to a String that carries the raw encoding of the
    INTEGER.

This implies that a subsequent decoding step is required to completely
decode implicitly tagged values.

### Example of a parsed explicitly tagged value

An explicitly 1-tagged INTEGER value will be parsed as an ASN1Data with
*   *tag* equal to 1
*   *tag_class* equal to `:CONTEXT_SPECIFIC`
*   *value* equal to an Array with one single element, an instance of
    OpenSSL::ASN1::Integer, i.e. the inner element is the non-tagged
    primitive value, and the tagging is represented in the outer
    ASN1Data


## Example - Decoding an implicitly tagged INTEGER
    int = OpenSSL::ASN1::Integer.new(1, 0, :IMPLICIT) # implicit 0-tagged
    seq = OpenSSL::ASN1::Sequence.new( [int] )
    der = seq.to_der
    asn1 = OpenSSL::ASN1.decode(der)
    # pp asn1 => #<OpenSSL::ASN1::Sequence:0x87326e0
    #              @indefinite_length=false,
    #              @tag=16,
    #              @tag_class=:UNIVERSAL,
    #              @tagging=nil,
    #              @value=
    #                [#<OpenSSL::ASN1::ASN1Data:0x87326f4
    #                   @indefinite_length=false,
    #                   @tag=0,
    #                   @tag_class=:CONTEXT_SPECIFIC,
    #                   @value="\x01">]>
    raw_int = asn1.value[0]
    # manually rewrite tag and tag class to make it an UNIVERSAL value
    raw_int.tag = OpenSSL::ASN1::INTEGER
    raw_int.tag_class = :UNIVERSAL
    int2 = OpenSSL::ASN1.decode(raw_int)
    puts int2.value # => 1

## Example - Decoding an explicitly tagged INTEGER
    int = OpenSSL::ASN1::Integer.new(1, 0, :EXPLICIT) # explicit 0-tagged
    seq = OpenSSL::ASN1::Sequence.new( [int] )
    der = seq.to_der
    asn1 = OpenSSL::ASN1.decode(der)
    # pp asn1 => #<OpenSSL::ASN1::Sequence:0x87326e0
    #              @indefinite_length=false,
    #              @tag=16,
    #              @tag_class=:UNIVERSAL,
    #              @tagging=nil,
    #              @value=
    #                [#<OpenSSL::ASN1::ASN1Data:0x87326f4
    #                   @indefinite_length=false,
    #                   @tag=0,
    #                   @tag_class=:CONTEXT_SPECIFIC,
    #                   @value=
    #                     [#<OpenSSL::ASN1::Integer:0x85bf308
    #                        @indefinite_length=false,
    #                        @tag=2,
    #                        @tag_class=:UNIVERSAL
    #                        @tagging=nil,
    #                        @value=1>]>]>
    int2 = asn1.value[0].value[0]
    puts int2.value # => 1
---
# Class methods:

    new

# Instance methods:

    indefinite_length
    infinite_length
    tag
    tag_class
    to_der
    value

# Attributes:

    attr_accessor indefinite_length
    attr_accessor infinite_length
    attr_accessor tag
    attr_accessor tag_class
    attr_accessor value


      

This is MURDOC! A Ruby documentation browser inspired by Smalltalk-80. It allows you to learn about Ruby by browsing through its class hierarchies, and see any of its methods.