module RASN1

Rasn1 is a pure ruby library to parse, decode and encode ASN.1 data. @author Sylvain Daubert

Constants

VERSION

Public Class Methods

parse(der, ber: false) click to toggle source

Parse a DER/BER string without checking a model @note If you want to check ASN.1 grammary, you should define a {Model}

and use {Model#parse}.

@note This method will never decode SEQUENCE OF or SET OF objects, as these

ones use the same encoding as SEQUENCE and SET, respectively.

@note Real type of tagged value cannot be guessed. So, such tag will

generate {Types::Base} objects.

@param [String] der binary string to parse @param [Boolean] ber if true, decode a BER string, else a DER one @return [Types::Base]

# File lib/rasn1.rb, line 44
def self.parse(der, ber: false)
  root = nil
  until der.empty?
    type = Types.id2type(der)
    type.parse!(der, ber: ber)
    root = type if root.nil?

    if [Types::Sequence, Types::Set].include? type.class
      subder = type.value
      ary = []
      until subder.empty?
        ary << self.parse(subder)
        subder = subder[ary.last.to_der.size..-1]
      end
      type.value = ary
    end
    der = der[type.to_der.size..-1]
  end
  root
end