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 +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
|