Sha256: be517e39c0ecfcadf9effe677829cfd5ee4c96f210c20dc11182cea8954a3744

Contents?: true

Size: 1.56 KB

Versions: 8

Compression:

Stored size: 1.56 KB

Contents

module RASN1
  module Types

    # ASN.1 sequence
    #
    # A sequence is a collection of another ASN.1 types.
    #
    # To encode this ASN.1 example:
    #  Record ::= SEQUENCE {
    #    id        INTEGER,
    #    room  [0] INTEGER OPTIONAL,
    #    house [1] IMPLICIT INTEGER DEFAULT 0
    #  }
    # do:
    #  seq = RASN1::Types::Sequence.new
    #  seq.value = [
    #               RASN1::Types::Integer.new
    #               RASN1::Types::Integer.new(explicit: 0, optional: true),
    #               RASN1::Types::Integer.new(implicit: 1, default: 0)
    #              ]
    #
    # A sequence may also be used without value to not parse sequence content:
    #  seq = RASN1::Types::Sequence.new(:seq)
    #  seq.parse!(der_string)
    #  seq.value    # => String
    # @author Sylvain Daubert
    class Sequence < Constructed
      TAG = 0x10

      # @see Base#initialize
      def initialize(value_or_options={}, options={})
        super
        @value ||= []
      end

      def initialize_copy(other)
        super
        @value = @value.map { |v| v.dup }
      end

      private

      def value_to_der
        case @value
        when Array
          @value.map { |element| element.to_der }.join
        else
          @value.to_s
        end
      end

      def der_to_value(der, ber:false)
        if @value.is_a?(Array) and !@value.empty?
          nb_bytes = 0
          @value.each do |element|
            nb_bytes += element.parse!(der[nb_bytes..-1])
          end
        else
          @value = der
          der.length
        end 
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rasn1-0.6.8 lib/rasn1/types/sequence.rb
rasn1-0.6.7 lib/rasn1/types/sequence.rb
rasn1-0.6.6 lib/rasn1/types/sequence.rb
rasn1-0.6.5 lib/rasn1/types/sequence.rb
rasn1-0.6.4 lib/rasn1/types/sequence.rb
rasn1-0.6.3 lib/rasn1/types/sequence.rb
rasn1-0.6.2 lib/rasn1/types/sequence.rb
rasn1-0.6.1 lib/rasn1/types/sequence.rb