rasn1 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
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