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