rasn1 0.6.2 → 0.6.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9745a1fe5540da0693f4e9bf5048dd177c58e314917e6d606b1caa34fa0f138
4
- data.tar.gz: 67f2bc01529e894be272fb905ded771a89f8bb6eb14bc1eac86178d3e7a72148
3
+ metadata.gz: c08cdf722e9b7662ef2bd5158658fecde6e1834af4d9e2c9651ee13136916383
4
+ data.tar.gz: 55f0019a6325ff72ce6c1f791d46d488e53416168db23c4a9ffecbc93cf32c03
5
5
  SHA512:
6
- metadata.gz: dc403f68a96560969a2221bc255e9f9f56dacb90f174977067054830dd0b85afc53dd8c25b130ddda3d38b6fc8e3d9d6341e9e5a805dda59ea4b478d3b960a78
7
- data.tar.gz: 201e5f5255a2ebb2a2d26c9fe2a75d9fed7f72d5e32f6ceb712e4ff0d01c81b38a896c31ee6bf446f74b9065f5ef6bab5cecdbf55e236dc53b53015ee959ee58
6
+ metadata.gz: de89acb4c79a7ea05c5801400b9b8973b6ab0481ab1107cb8122254541dc9f5ffeb806c28d8f2aca7266c8be5a02003d1ddaa4f9b7bb451619956546a96bffe6
7
+ data.tar.gz: c7ebbd8871eda39c362fd9950dc5ce85b5152dbff3230c97367dde58c1aa2fcacd521c70d15544ed28387a9cf28e6ee33d36a41755dec16bc896308a46c50470
@@ -314,13 +314,13 @@ module RASN1
314
314
 
315
315
  # @return [String]
316
316
  def inspect(level=0)
317
- ' ' * level + "#{@root} (#{type}) #{root.inspect(-level)}"
317
+ ' ' * level + "(#{type}) #{root.inspect(-level)}"
318
318
  end
319
319
 
320
320
  # Objects are equal if they have same class AND same DER
321
321
  # @param [Base] other
322
322
  # @return [Boolean]
323
- def==(other)
323
+ def ==(other)
324
324
  (other.class == self.class) && (other.to_der == self.to_der)
325
325
  end
326
326
 
@@ -373,6 +373,21 @@ module RASN1
373
373
  else
374
374
  raise ArgumentError, "element #{name}: may only pass a Hash for Model elements"
375
375
  end
376
+ elsif value.is_a? Array
377
+ composed = if obj[name].is_a? Model
378
+ obj[name].root
379
+ else
380
+ obj[name]
381
+ end
382
+ if composed.of_type.is_a? Model
383
+ value.each do |el|
384
+ composed << initialize_elements(composed.of_type.class.new, el)
385
+ end
386
+ else
387
+ value.each do |el|
388
+ obj[name] << el
389
+ end
390
+ end
376
391
  else
377
392
  obj[name].value = value
378
393
  end
@@ -36,12 +36,12 @@ module RASN1
36
36
  str << "#{@name} " unless @name.nil?
37
37
  if @value.nil?
38
38
  str << "(ANY) NULL"
39
- elsif @value.is_a?(OctetString)
39
+ elsif @value.is_a?(OctetString) or @value.is_a?(BitString)
40
40
  str << "(ANY) #{@value.type}: #{value.value.inspect}"
41
41
  elsif @value.class < Base
42
42
  str << "(ANY) #{@value.type}: #{value.value}"
43
43
  else
44
- str << "(ANY) #{value.to_s.inspect}"
44
+ str << "ANY: #{value.to_s.inspect}"
45
45
  end
46
46
  end
47
47
  end
@@ -237,23 +237,16 @@ module RASN1
237
237
  value_to_der.size
238
238
  end
239
239
 
240
+ # @param [Integer] level
241
+ # @return [String]
240
242
  def inspect(level=0)
241
243
  str = ''
242
244
  str << ' ' * level if level > 0
243
245
  str << "#{@name} " unless @name.nil?
244
- if self.class == Base
245
- str << "#{type} (0x#{'%02x' % tag}): "
246
- if @value.is_a?(Base)
247
- str << value.inspect(level+1)
248
- else
249
- str << value.inspect
250
- end
251
- else
252
- str << "#{type}: #{value.inspect}"
253
- str << " OPTIONAL" if optional?
254
- str << " DEFAULT #{@default}" unless @default.nil?
255
- str
256
- end
246
+ str << "#{type}: #{value.inspect}"
247
+ str << " OPTIONAL" if optional?
248
+ str << " DEFAULT #{@default}" unless @default.nil?
249
+ str
257
250
  end
258
251
 
259
252
  # Objects are equal if they have same class AND same DER
@@ -6,8 +6,9 @@ module RASN1
6
6
  class BitString < Primitive
7
7
  TAG = 0x03
8
8
 
9
- # @return [Integer] bit length of bit string
10
- attr_accessor :bit_length
9
+ # @param [Integer] bit_length
10
+ # @return [Integer]
11
+ attr_writer :bit_length
11
12
 
12
13
  # @overload initialize(options={})
13
14
  # @param [Hash] options
@@ -28,8 +29,20 @@ module RASN1
28
29
  end
29
30
  @default_bit_length = opts[:bit_length]
30
31
  end
32
+ @bit_length = opts[:bit_length]
31
33
  end
32
34
 
35
+ # Get bit length
36
+ def bit_length
37
+ if @value.nil?
38
+ @default_bit_length
39
+ else
40
+ @bit_length
41
+ end
42
+ end
43
+
44
+ # @param [Integer] level
45
+ # @return [String]
33
46
  def inspect(level=0)
34
47
  str = ''
35
48
  str << ' ' * level if level > 0
@@ -46,7 +59,7 @@ module RASN1
46
59
  end
47
60
 
48
61
  def value_to_der
49
- raise ASN1Error, "TAG #@name: bit length is not set" if @bit_length.nil?
62
+ raise ASN1Error, "TAG #@name: bit length is not set" if bit_length.nil?
50
63
 
51
64
  while @value.length * 8 < @bit_length
52
65
  @value << "\x00"
@@ -93,11 +93,12 @@ module RASN1
93
93
  def inspect(level=0)
94
94
  str = ''
95
95
  str << ' ' * level if level > 0
96
- str << "#{name} #{type}: "
96
+ str << "#{name} " if name
97
+ str << "#{type}:"
97
98
  if @chosen.nil?
98
- str << 'not chosen!'
99
+ str << ' not chosen!'
99
100
  else
100
- str << @value[@chosen].inspect(level)
101
+ str << "\n#{@value[@chosen].inspect(level+1)}"
101
102
  end
102
103
  end
103
104
 
@@ -22,10 +22,9 @@ module RASN1
22
22
  case item
23
23
  when Base, Model
24
24
  next if item.optional? and item.value.nil?
25
- str << ' ' * level
26
25
  str << "#{item.inspect(level)}\n"
27
26
  else
28
- str << item.inspect
27
+ str << ' ' * level + item.inspect + "\n"
29
28
  end
30
29
  end
31
30
  str
@@ -6,6 +6,18 @@ module RASN1
6
6
  class Null < Primitive
7
7
  TAG = 0x05
8
8
 
9
+ # @return [String]
10
+ def inspect(level=0)
11
+ str = ''
12
+ str << ' ' * level if level > 0
13
+ str << "#{@name} " unless @name.nil?
14
+ str << "#{type}"
15
+ str << " OPTIONAL" if optional?
16
+ str
17
+ end
18
+
19
+ private
20
+
9
21
  def value_to_der
10
22
  ''
11
23
  end
@@ -99,9 +99,16 @@ module RASN1
99
99
  @value[idx]
100
100
  end
101
101
 
102
+ # Get length of SEQUENCE OF (ie number of elements)
103
+ # @return [Integer]
104
+ def length
105
+ @value.length
106
+ end
107
+
102
108
  def inspect(level=0)
103
109
  str = ''
104
110
  str << ' ' * level if level > 0
111
+ str << "#{@name} " unless @name.nil?
105
112
  level = level.abs
106
113
  str << "#{type}:\n"
107
114
  level += 1
@@ -109,11 +116,8 @@ module RASN1
109
116
  case item
110
117
  when Base, Model
111
118
  next if item.optional? and item.value.nil?
112
- str << ' ' * level + "#{item.inspect(level)}"
113
- str << "\n" unless item.is_a?(Model)
114
- when Hash
115
- type = of_type_class.new(item)
116
- str << ' ' * level + "#{type.inspect(level)}"
119
+ str << "#{item.inspect(level)}"
120
+ str << "\n" unless str.end_with?("\n")
117
121
  else
118
122
  str << ' ' * level + "#{item.inspect}\n"
119
123
  end
@@ -1,3 +1,3 @@
1
1
  module RASN1
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.3"
3
3
  end
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.2
4
+ version: 0.6.3
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-05-28 00:00:00.000000000 Z
11
+ date: 2018-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard