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 +4 -4
- data/lib/rasn1/model.rb +17 -2
- data/lib/rasn1/types/any.rb +2 -2
- data/lib/rasn1/types/base.rb +6 -13
- data/lib/rasn1/types/bit_string.rb +16 -3
- data/lib/rasn1/types/choice.rb +4 -3
- data/lib/rasn1/types/constructed.rb +1 -2
- data/lib/rasn1/types/null.rb +12 -0
- data/lib/rasn1/types/sequence_of.rb +9 -5
- 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: c08cdf722e9b7662ef2bd5158658fecde6e1834af4d9e2c9651ee13136916383
|
4
|
+
data.tar.gz: 55f0019a6325ff72ce6c1f791d46d488e53416168db23c4a9ffecbc93cf32c03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de89acb4c79a7ea05c5801400b9b8973b6ab0481ab1107cb8122254541dc9f5ffeb806c28d8f2aca7266c8be5a02003d1ddaa4f9b7bb451619956546a96bffe6
|
7
|
+
data.tar.gz: c7ebbd8871eda39c362fd9950dc5ce85b5152dbff3230c97367dde58c1aa2fcacd521c70d15544ed28387a9cf28e6ee33d36a41755dec16bc896308a46c50470
|
data/lib/rasn1/model.rb
CHANGED
@@ -314,13 +314,13 @@ module RASN1
|
|
314
314
|
|
315
315
|
# @return [String]
|
316
316
|
def inspect(level=0)
|
317
|
-
' ' * 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
|
data/lib/rasn1/types/any.rb
CHANGED
@@ -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 << "
|
44
|
+
str << "ANY: #{value.to_s.inspect}"
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
data/lib/rasn1/types/base.rb
CHANGED
@@ -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
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
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
|
-
# @
|
10
|
-
|
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
|
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"
|
data/lib/rasn1/types/choice.rb
CHANGED
@@ -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}
|
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
|
|
data/lib/rasn1/types/null.rb
CHANGED
@@ -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 <<
|
113
|
-
str << "\n" unless
|
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
|
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.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-
|
11
|
+
date: 2018-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|