rasn1 0.6.5 → 0.6.6

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: ad6495f1a0862912c622a732113f53782db3a6cc99b49e3237284739080d357a
4
- data.tar.gz: 0f09cb8869ed614a5d2bd4650ba0b2648c0eac4b66f87b177430344f0ad58c07
3
+ metadata.gz: 4acb42db867027d85bfd208aaaee5906af7fe4fdcd92327055f66187415e959f
4
+ data.tar.gz: 52cbb1f7306006fb0c03e3e00911d52a474a78c994e2a8e5618046356de43117
5
5
  SHA512:
6
- metadata.gz: e3e731261cf98787035fe4cae7ac432f2feba2f804964e166bd30c17ea1ba246adcf8a32507978f03424ed05e3d9d83f2572d5c2670ae4451d9d2183ac2a13d9
7
- data.tar.gz: 848d2e4b9b4aeb4dd97e66b31746f4ee836533a6bcd5490f96ed752e942f3df5d6ff4b69a655b669d5ebe4432b49bf97b94db3253ca9b00e5766ca256993a876
6
+ metadata.gz: ce57ddfbbed465bce5fefb9c7c8b91593e09e4a9cc3797e467e5eb0f482964f1f2bbed3a9053da1f590fddb18e846a1a608351594d667459f59a0f5218294480
7
+ data.tar.gz: 93943756f8b526d6467d834976eda477bacd777565d4d46723c050aab5e909b78c5e3f74539999d0cf3ab3c60f316582fc8060814003936df02c09e78b4d7308
@@ -0,0 +1,29 @@
1
+ TargetRubyVersion: 2.3
2
+ Layout/SpaceAroundEqualsInParameterDefault:
3
+ EnforcedStyle: no_space
4
+ Lint/EmptyWhen:
5
+ Enabled: false
6
+ Lint/Void:
7
+ Enabled: false
8
+ Metrics:
9
+ Enabled: false
10
+ Style/AsciiComments:
11
+ Enabled: false
12
+ Style/Encoding:
13
+ Enabled: false
14
+ Style/EvalWithLocation:
15
+ Enabled: false
16
+ Style/FormatString:
17
+ EnforcedStyle: percent
18
+ Style/FormatStringToken:
19
+ EnforcedStyle: unannotated
20
+ Style/PerlBackrefs:
21
+ Enabled: false
22
+ Style/RedundantSelf:
23
+ Enabled: false
24
+ Style/StructInheritance:
25
+ Enabled: false
26
+ Style/TrailingCommaInArrayLiteral:
27
+ Enabled: false
28
+ Style/TrailingCommaInHashLiteral:
29
+ Enabled: false
@@ -18,8 +18,8 @@ module RASN1
18
18
  # A {EnumeratedError} is raised when set value is not in enumeration.
19
19
  # @author Sylvain Daubert
20
20
  class Enumerated < Integer
21
+ # @!attribute enum
21
22
  # @return [Hash]
22
- attr_reader :enum
23
23
 
24
24
  TAG = 0x0a
25
25
 
@@ -37,95 +37,13 @@ module RASN1
37
37
  # @see Base#initialize common options to all ASN.1 types
38
38
  def initialize(value_or_options={}, options={})
39
39
  super
40
- opts = value_or_options.is_a?(Hash) ? value_or_options : options
41
-
42
- raise EnumeratedError, 'no enumeration given' unless opts.has_key? :enum
43
- @enum = opts[:enum]
44
-
45
- case @default
46
- when String,Symbol
47
- unless @enum.has_key? @default
48
- raise EnumeratedError, "TAG #@name: unknwon enumerated default value #@default"
49
- end
50
- when ::Integer
51
- if @enum.has_value? @default
52
- @default = @enum.key(@default)
53
- else
54
- raise EnumeratedError, "TAG #@name: default value #@defalt not in enumeration"
55
- end
56
- when nil
57
- else
58
- raise TypeError, "TAG #@name: #{@value.class} not handled as default value"
59
- end
60
- end
61
-
62
- # @param [Integer,String,Symbol,nil] v
63
- # @return [String,Symbol,nil]
64
- def value=(v)
65
- case v
66
- when String,Symbol
67
- unless @enum.has_key? v
68
- raise EnumeratedError, "TAG #@name: unknwon enumerated value #{v}"
69
- end
70
- @value = v
71
- when ::Integer
72
- unless @enum.has_value? v
73
- raise EnumeratedError, "TAG #@name: #{v} not in enumeration"
74
- end
75
- @value = @enum.key(v)
76
- when nil
77
- @value = nil
78
- else
79
- raise EnumeratedError, "TAG #@name: not in enumeration"
80
- end
81
- end
82
-
83
- # @return [Integer]
84
- def to_i
85
- case @value
86
- when String, Symbol
87
- @enum[@value]
88
- when ::Integer
89
- super
90
- when nil
91
- if @default
92
- @enum[@default]
93
- else
94
- 0
95
- end
96
- else
97
- raise TypeError, "TAG #@name: #{@value.class} not handled"
98
- end
40
+ raise EnumeratedError, 'no enumeration given' if @enum.nil?
99
41
  end
100
42
 
101
43
  # @return [Hash]
102
44
  def to_h
103
45
  @enum
104
46
  end
105
-
106
- private
107
-
108
- def value_to_der
109
- case @value
110
- when String, Symbol
111
- super @enum[@value]
112
- when ::Integer
113
- super
114
- else
115
- raise TypeError, "TAG #@name: #{@value.class} not handled"
116
- end
117
- end
118
-
119
- def der_to_value(der, ber:false)
120
- super
121
- v = @value
122
- @value = @enum.key(v)
123
- raise EnumeratedError, "TAG #@name: value #{v} not in enumeration" if @value.nil?
124
- end
125
-
126
- def explicit_type
127
- self.class.new(@name, enum: self.enum)
128
- end
129
47
  end
130
48
  end
131
49
  end
@@ -4,16 +4,87 @@ module RASN1
4
4
  # ASN.1 Integer
5
5
  # @author Sylvain Daubert
6
6
  class Integer < Primitive
7
+ # @return [Hash,nil]
8
+ attr_reader :enum
9
+
7
10
  TAG = 0x02
8
11
 
12
+ # @overload initialize(options={})
13
+ # @option options [Hash] :enum enumeration hash. Keys are names, and values
14
+ # are integers.
15
+ # @raise [EnumeratedError] +:default+ value is unknown when +:enum+ key is present
16
+ # @overload initialize(value, options={})
17
+ # @param [Object] value value to set for this ASN.1 object
18
+ # @option options [Hash] :enum enumeration hash. Keys are names, and values
19
+ # are integers. This key is mandatory.
20
+ # @raise [EnumeratedError] +:default+ value is unknown when +:enum+ key is present
21
+ # @see Base#initialize common options to all ASN.1 types
22
+ def initialize(value_or_options={}, options={})
23
+ super
24
+ opts = value_or_options.is_a?(Hash) ? value_or_options : options
25
+ @enum = opts[:enum]
26
+
27
+ return if @enum.nil?
28
+
29
+ # To ensure @value has the correct type
30
+ self.value = @value
31
+
32
+ case @default
33
+ when String,Symbol
34
+ unless @enum.has_key? @default
35
+ raise EnumeratedError, "TAG #@name: unknwon enumerated default value #@default"
36
+ end
37
+ when ::Integer
38
+ if @enum.has_value? @default
39
+ @default = @enum.key(@default)
40
+ else
41
+ raise EnumeratedError, "TAG #@name: default value #@default not in enumeration"
42
+ end
43
+ when nil
44
+ else
45
+ raise TypeError, "TAG #@name: #{@default.class} not handled as default value"
46
+ end
47
+ end
48
+
49
+ # @param [Integer,String,Symbol,nil] v
50
+ # @return [String,Symbol,nil]
51
+ def value=(v)
52
+ case v
53
+ when String,Symbol
54
+ raise EnumeratedError, 'TAG #@name has no :enum' if @enum.nil?
55
+
56
+ unless @enum.has_key? v
57
+ raise EnumeratedError, "TAG #@name: unknwon enumerated value #{v}"
58
+ end
59
+ @value = v
60
+ when ::Integer
61
+ if @enum.nil?
62
+ @value = v
63
+ elsif @enum.has_value? v
64
+ @value = @enum.key(v)
65
+ else
66
+ raise EnumeratedError, "TAG #@name: #{v} not in enumeration"
67
+ end
68
+ when nil
69
+ @value = nil
70
+ else
71
+ raise EnumeratedError, "TAG #@name: not in enumeration"
72
+ end
73
+ end
74
+
75
+ # Integer value
9
76
  # @return [Integer]
10
77
  def to_i
11
- @value || @default || 0
78
+ if @enum.nil?
79
+ @value || @default || 0
80
+ else
81
+ @enum[@value || @default] || 0
82
+ end
12
83
  end
13
84
 
14
85
  private
15
86
 
16
- def value_to_der(value=nil)
87
+ def int_value_to_der(value=nil)
17
88
  v = value || @value
18
89
  size = v.bit_length / 8 + (v.bit_length % 8 > 0 ? 1 : 0)
19
90
  size = 1 if size == 0
@@ -30,12 +101,36 @@ module RASN1
30
101
  ary.reverse.pack('C*')
31
102
  end
32
103
 
33
- def der_to_value(der, ber: false)
104
+ def value_to_der
105
+ case @value
106
+ when String, Symbol
107
+ int_value_to_der @enum[@value]
108
+ when ::Integer
109
+ int_value_to_der
110
+ else
111
+ raise TypeError, "TAG #@name: #{@value.class} not handled"
112
+ end
113
+ end
114
+
115
+ def der_to_int_value(der, ber: false)
34
116
  ary = der.unpack('C*')
35
- @value = ary.reduce(0) { |len, b| (len << 8) | b }
117
+ v = ary.reduce(0) { |len, b| (len << 8) | b }
36
118
  if ary[0] & 0x80 == 0x80
37
- @value = -((~@value & ((1 << @value.bit_length) - 1)) + 1)
119
+ v = -((~v & ((1 << v.bit_length) - 1)) + 1)
38
120
  end
121
+ v
122
+ end
123
+
124
+ def der_to_value(der, ber: false)
125
+ @value = der_to_int_value(der, ber: ber)
126
+ return if @enum.nil?
127
+
128
+ @value = @enum.key(@value)
129
+ raise EnumeratedError, "TAG #@name: value #{v} not in enumeration" if @value.nil?
130
+ end
131
+
132
+ def explicit_type
133
+ @enum.nil? ? self.class.new(@name) : self.class.new(@name, enum: @enum)
39
134
  end
40
135
  end
41
136
  end
@@ -1,3 +1,3 @@
1
1
  module RASN1
2
- VERSION = '0.6.5'
2
+ VERSION = '0.6.6'
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.5
4
+ version: 0.6.6
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-10-16 00:00:00.000000000 Z
11
+ date: 2018-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard
@@ -91,6 +91,7 @@ extensions: []
91
91
  extra_rdoc_files: []
92
92
  files:
93
93
  - ".gitignore"
94
+ - ".rubocop.yml"
94
95
  - ".travis.yml"
95
96
  - Gemfile
96
97
  - LICENSE