lib/rasn1.rb in rasn1-0.6.8 vs lib/rasn1.rb in rasn1-0.7.0

- old
+ new

@@ -1,13 +1,14 @@ +# frozen_string_literal: true + require 'rasn1/version' require 'rasn1/types' require 'rasn1/model' # Rasn1 is a pure ruby library to parse, decode and encode ASN.1 data. # @author Sylvain Daubert module RASN1 - # Base error class class Error < StandardError; end # ASN.1 encoding/decoding error class ASN1Error < Error; end @@ -24,14 +25,14 @@ class EnumeratedError < Error; end # CHOICE error: #chosen not set class ChoiceError < RASN1::Error def message - "CHOICE #@name: #chosen not set" + "CHOICE #{@name}: #chosen not set" end end - + # 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. @@ -40,18 +41,18 @@ # @param [String] der binary string to parse # @param [Boolean] ber if +true+, decode a BER string, else a DER one # @return [Types::Base] def self.parse(der, ber: false) root = nil - while der.size > 0 + until der.empty? type = Types.tag2type(der[0].ord) type.parse!(der, ber: ber) root = type if root.nil? if [Types::Sequence, Types::Set].include? type.class subder = type.value ary = [] - while subder.size > 0 + until subder.empty? ary << self.parse(subder) subder = subder[ary.last.to_der.size..-1] end type.value = ary end