rasn1 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.rubocop.yml +0 -1
 - data/lib/rasn1/model.rb +5 -3
 - data/lib/rasn1/types/any.rb +8 -2
 - data/lib/rasn1/types/base.rb +16 -9
 - data/lib/rasn1/types/choice.rb +3 -3
 - data/lib/rasn1/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 1889a0ada74e2d9255ce6af799caa441fd2d2cacfaf0097b5afd1730ed9a9fd9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e0453969129814385bd272c362373b12ae0e38201145280c360ac3696dd95cb1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4dc47229a202f0bfa7d56a129cd5e1807009b9147da6e844d5a47589fbf0e8eab9bebbb51f81866a0222eb4a6dbf953d381f266ec332e697b6caf1b894fa6c18
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 4fc5127882d478d111452dff0cac6e226d270f47b4798b6a365f735c0bb1402ec417640b48be9839f7336fcf6d526f2a771d90bdc6ed64b0cefc3258d9e22bff
         
     | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/lib/rasn1/model.rb
    CHANGED
    
    | 
         @@ -60,6 +60,8 @@ module RASN1 
     | 
|
| 
       60 
60 
     | 
    
         
             
              class Model
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
                class << self
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # @return [Hash]
         
     | 
| 
      
 64 
     | 
    
         
            +
                  attr_reader :options
         
     | 
| 
       63 
65 
     | 
    
         | 
| 
       64 
66 
     | 
    
         
             
                  # Use another model in this model
         
     | 
| 
       65 
67 
     | 
    
         
             
                  # @param [String,Symbol] name
         
     | 
| 
         @@ -90,7 +92,7 @@ module RASN1 
     | 
|
| 
       90 
92 
     | 
    
         
             
                  # @return [void]
         
     | 
| 
       91 
93 
     | 
    
         
             
                  def inherited(klass)
         
     | 
| 
       92 
94 
     | 
    
         
             
                    super
         
     | 
| 
       93 
     | 
    
         
            -
                    root = @root
         
     | 
| 
      
 95 
     | 
    
         
            +
                    root = defined?(@root )? @root : nil
         
     | 
| 
       94 
96 
     | 
    
         
             
                    klass.class_eval { @root = root }
         
     | 
| 
       95 
97 
     | 
    
         
             
                  end
         
     | 
| 
       96 
98 
     | 
    
         | 
| 
         @@ -218,7 +220,7 @@ module RASN1 
     | 
|
| 
       218 
220 
     | 
    
         
             
                  # Give type name (aka class name)
         
     | 
| 
       219 
221 
     | 
    
         
             
                  # @return [String]
         
     | 
| 
       220 
222 
     | 
    
         
             
                  def type
         
     | 
| 
       221 
     | 
    
         
            -
                    return @type if @type
         
     | 
| 
      
 223 
     | 
    
         
            +
                    return @type if defined? @type
         
     | 
| 
       222 
224 
     | 
    
         
             
                    @type = self.to_s.gsub(/.*::/, '')
         
     | 
| 
       223 
225 
     | 
    
         
             
                  end
         
     | 
| 
       224 
226 
     | 
    
         | 
| 
         @@ -347,7 +349,7 @@ module RASN1 
     | 
|
| 
       347 
349 
     | 
    
         
             
                  root = self.class.class_eval { @root }
         
     | 
| 
       348 
350 
     | 
    
         
             
                  @root = root[0]
         
     | 
| 
       349 
351 
     | 
    
         
             
                  @elements = {}
         
     | 
| 
       350 
     | 
    
         
            -
                  @elements[@root] = get_type(root[1], self.class. 
     | 
| 
      
 352 
     | 
    
         
            +
                  @elements[@root] = get_type(root[1], self.class.options || {})
         
     | 
| 
       351 
353 
     | 
    
         
             
                  root
         
     | 
| 
       352 
354 
     | 
    
         
             
                end
         
     | 
| 
       353 
355 
     | 
    
         | 
    
        data/lib/rasn1/types/any.rb
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ module RASN1 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
                # ASN.1 ANY: accepts any types
         
     | 
| 
       5 
5 
     | 
    
         
             
                #
         
     | 
| 
       6 
     | 
    
         
            -
                # If `any#value` is `nil 
     | 
| 
      
 6 
     | 
    
         
            +
                # If `any#value` is `nil` and Any object is not {#optional?}, `any` will be encoded as a {Null} object.
         
     | 
| 
       7 
7 
     | 
    
         
             
                # @author Sylvain Daubert
         
     | 
| 
       8 
8 
     | 
    
         
             
                class Any < Base
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
         @@ -13,7 +13,7 @@ module RASN1 
     | 
|
| 
       13 
13 
     | 
    
         
             
                    when Base, Model
         
     | 
| 
       14 
14 
     | 
    
         
             
                      @value.to_der
         
     | 
| 
       15 
15 
     | 
    
         
             
                    when nil
         
     | 
| 
       16 
     | 
    
         
            -
                      Null.new.to_der
         
     | 
| 
      
 16 
     | 
    
         
            +
                      optional? ? '' : Null.new.to_der
         
     | 
| 
       17 
17 
     | 
    
         
             
                    else
         
     | 
| 
       18 
18 
     | 
    
         
             
                      @value.to_s
         
     | 
| 
       19 
19 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -25,6 +25,12 @@ module RASN1 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  # @param [Boolean] ber if +true+, accept BER encoding
         
     | 
| 
       26 
26 
     | 
    
         
             
                  # @return [Integer] total number of parsed bytes
         
     | 
| 
       27 
27 
     | 
    
         
             
                  def parse!(der, ber: false)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    if der.nil? or der.empty?
         
     | 
| 
      
 29 
     | 
    
         
            +
                      return 0 if optional?
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      raise ASN1Error, "Expected ANY but get nothing"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       28 
34 
     | 
    
         
             
                    total_length,  = get_data(der, ber)
         
     | 
| 
       29 
35 
     | 
    
         
             
                    @value = der[0, total_length]
         
     | 
| 
       30 
36 
     | 
    
         
             
                    total_length
         
     | 
    
        data/lib/rasn1/types/base.rb
    CHANGED
    
    | 
         @@ -70,7 +70,7 @@ module RASN1 
     | 
|
| 
       70 
70 
     | 
    
         
             
                  # Get ASN.1 type
         
     | 
| 
       71 
71 
     | 
    
         
             
                  # @return [String]
         
     | 
| 
       72 
72 
     | 
    
         
             
                  def self.type
         
     | 
| 
       73 
     | 
    
         
            -
                    return @type if @type
         
     | 
| 
      
 73 
     | 
    
         
            +
                    return @type if defined? @type
         
     | 
| 
       74 
74 
     | 
    
         
             
                    @type = self.to_s.gsub(/.*::/, '').gsub(/([a-z0-9])([A-Z])/, '\1 \2').upcase
         
     | 
| 
       75 
75 
     | 
    
         
             
                  end
         
     | 
| 
       76 
76 
     | 
    
         | 
| 
         @@ -168,14 +168,14 @@ module RASN1 
     | 
|
| 
       168 
168 
     | 
    
         
             
                  # @return [::Boolean,nil] return +nil+ if not tagged, return +true+
         
     | 
| 
       169 
169 
     | 
    
         
             
                  #   if explicit, else +false+
         
     | 
| 
       170 
170 
     | 
    
         
             
                  def explicit?
         
     | 
| 
       171 
     | 
    
         
            -
                    @tag 
     | 
| 
      
 171 
     | 
    
         
            +
                    !defined?(@tag) ? nil : @tag == :explicit
         
     | 
| 
       172 
172 
     | 
    
         
             
                  end
         
     | 
| 
       173 
173 
     | 
    
         | 
| 
       174 
174 
     | 
    
         
             
                  # Say if a tagged type is implicit
         
     | 
| 
       175 
175 
     | 
    
         
             
                  # @return [::Boolean,nil] return +nil+ if not tagged, return +true+
         
     | 
| 
       176 
176 
     | 
    
         
             
                  #   if implicit, else +false+
         
     | 
| 
       177 
177 
     | 
    
         
             
                  def implicit?
         
     | 
| 
       178 
     | 
    
         
            -
                    @tag 
     | 
| 
      
 178 
     | 
    
         
            +
                    !defined?(@tag) ? nil : @tag == :implicit
         
     | 
| 
       179 
179 
     | 
    
         
             
                  end
         
     | 
| 
       180 
180 
     | 
    
         | 
| 
       181 
181 
     | 
    
         
             
                  # @abstract This method SHOULD be partly implemented by subclasses, which
         
     | 
| 
         @@ -211,7 +211,7 @@ module RASN1 
     | 
|
| 
       211 
211 
     | 
    
         
             
                         else    # false
         
     | 
| 
       212 
212 
     | 
    
         
             
                           0
         
     | 
| 
       213 
213 
     | 
    
         
             
                         end
         
     | 
| 
       214 
     | 
    
         
            -
                     
     | 
| 
      
 214 
     | 
    
         
            +
                    tag_value | CLASSES[@asn1_class] | pc
         
     | 
| 
       215 
215 
     | 
    
         
             
                  end
         
     | 
| 
       216 
216 
     | 
    
         | 
| 
       217 
217 
     | 
    
         
             
                  # @abstract This method SHOULD be partly implemented by subclasses to parse
         
     | 
| 
         @@ -326,7 +326,7 @@ module RASN1 
     | 
|
| 
       326 
326 
     | 
    
         
             
                      @constructed = options[:constructed]
         
     | 
| 
       327 
327 
     | 
    
         
             
                    end
         
     | 
| 
       328 
328 
     | 
    
         | 
| 
       329 
     | 
    
         
            -
                    @asn1_class = :context if @tag  
     | 
| 
      
 329 
     | 
    
         
            +
                    @asn1_class = :context if defined?(@tag) && (@asn1_class == :universal)
         
     | 
| 
       330 
330 
     | 
    
         
             
                  end
         
     | 
| 
       331 
331 
     | 
    
         | 
| 
       332 
332 
     | 
    
         
             
                  def build_tag?
         
     | 
| 
         @@ -349,8 +349,14 @@ module RASN1 
     | 
|
| 
       349 
349 
     | 
    
         
             
                    end
         
     | 
| 
       350 
350 
     | 
    
         
             
                  end
         
     | 
| 
       351 
351 
     | 
    
         | 
| 
      
 352 
     | 
    
         
            +
                  def tag_value
         
     | 
| 
      
 353 
     | 
    
         
            +
                    return @tag_value if defined? @tag_value
         
     | 
| 
      
 354 
     | 
    
         
            +
             
     | 
| 
      
 355 
     | 
    
         
            +
                    self.class::TAG
         
     | 
| 
      
 356 
     | 
    
         
            +
                  end
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
       352 
358 
     | 
    
         
             
                  def encode_tag
         
     | 
| 
       353 
     | 
    
         
            -
                    if  
     | 
| 
      
 359 
     | 
    
         
            +
                    if tag_value <= MAX_TAG
         
     | 
| 
       354 
360 
     | 
    
         
             
                      [tag].pack('C')
         
     | 
| 
       355 
361 
     | 
    
         
             
                    else
         
     | 
| 
       356 
362 
     | 
    
         
             
                      raise ASN1Error, 'multi-byte tag value are not supported'
         
     | 
| 
         @@ -426,7 +432,8 @@ module RASN1 
     | 
|
| 
       426 
432 
     | 
    
         
             
                  end
         
     | 
| 
       427 
433 
     | 
    
         | 
| 
       428 
434 
     | 
    
         
             
                  def raise_tag_error(tag)
         
     | 
| 
       429 
     | 
    
         
            -
                    msg =  
     | 
| 
      
 435 
     | 
    
         
            +
                    msg = name.nil? ? '' : "#{name}: "
         
     | 
| 
      
 436 
     | 
    
         
            +
                    msg << "Expected #{self2name} but get #{tag2name(tag)}"
         
     | 
| 
       430 
437 
     | 
    
         
             
                    raise ASN1Error, msg
         
     | 
| 
       431 
438 
     | 
    
         
             
                  end
         
     | 
| 
       432 
439 
     | 
    
         | 
| 
         @@ -434,7 +441,7 @@ module RASN1 
     | 
|
| 
       434 
441 
     | 
    
         
             
                    name = CLASSES.key(tag & 0xc0).to_s.upcase
         
     | 
| 
       435 
442 
     | 
    
         
             
                    name << " #{tag & Constructed::ASN1_PC > 0 ? 'CONSTRUCTED' : 'PRIMITIVE'}"
         
     | 
| 
       436 
443 
     | 
    
         
             
                    if implicit? || explicit?
         
     | 
| 
       437 
     | 
    
         
            -
                      name << ' 0x%02X' %  
     | 
| 
      
 444 
     | 
    
         
            +
                      name << ' 0x%02X (0x%02X)' % [tag & 0x1f, tag]
         
     | 
| 
       438 
445 
     | 
    
         
             
                    else
         
     | 
| 
       439 
446 
     | 
    
         
             
                      name << ' ' << self.class.type
         
     | 
| 
       440 
447 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -449,7 +456,7 @@ module RASN1 
     | 
|
| 
       449 
456 
     | 
    
         
             
                    type =  Types.constants.map { |c| Types.const_get(c) }.
         
     | 
| 
       450 
457 
     | 
    
         
             
                              select { |klass| klass < Primitive || klass < Constructed }.
         
     | 
| 
       451 
458 
     | 
    
         
             
                              find { |klass| klass::TAG == itag & 0x1f }
         
     | 
| 
       452 
     | 
    
         
            -
                    name << " #{type.nil? ? "0x%02X" %  
     | 
| 
      
 459 
     | 
    
         
            +
                    name << " #{type.nil? ? "0x%02X (0x%02X)" % [itag & 0x1f, itag] : type.encode_type }"
         
     | 
| 
       453 
460 
     | 
    
         
             
                  end
         
     | 
| 
       454 
461 
     | 
    
         
             
                end
         
     | 
| 
       455 
462 
     | 
    
         
             
              end
         
     | 
    
        data/lib/rasn1/types/choice.rb
    CHANGED
    
    | 
         @@ -95,7 +95,7 @@ module RASN1 
     | 
|
| 
       95 
95 
     | 
    
         
             
                    str << '  ' * level if level > 0
         
     | 
| 
       96 
96 
     | 
    
         
             
                    str << "#{name} " if name
         
     | 
| 
       97 
97 
     | 
    
         
             
                    str << "#{type}:"
         
     | 
| 
       98 
     | 
    
         
            -
                    if @chosen 
     | 
| 
      
 98 
     | 
    
         
            +
                    if !defined? @chosen
         
     | 
| 
       99 
99 
     | 
    
         
             
                      str << ' not chosen!'
         
     | 
| 
       100 
100 
     | 
    
         
             
                    else
         
     | 
| 
       101 
101 
     | 
    
         
             
                      str << "\n#{@value[@chosen].inspect(level+1)}"
         
     | 
| 
         @@ -105,10 +105,10 @@ module RASN1 
     | 
|
| 
       105 
105 
     | 
    
         
             
                  private
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
107 
     | 
    
         
             
                  def check_chosen
         
     | 
| 
       108 
     | 
    
         
            -
                    raise ChoiceError if @chosen.nil?
         
     | 
| 
      
 108 
     | 
    
         
            +
                    raise ChoiceError if !defined?(@chosen) || @chosen.nil?
         
     | 
| 
       109 
109 
     | 
    
         
             
                  end
         
     | 
| 
       110 
110 
     | 
    
         
             
                end
         
     | 
| 
       111 
111 
     | 
    
         
             
              end
         
     | 
| 
       112 
112 
     | 
    
         
             
            end
         
     | 
| 
       113 
113 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
    
        data/lib/rasn1/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rasn1
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sylvain Daubert
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2018- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-11-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: yard
         
     |