grizzly_ber 1.0.1 → 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/grizzly_ber.rb +18 -4
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f53d7ab07529b15d9aa734970098be59d26c0f5f
4
- data.tar.gz: 6c9400a6562e683cf4fecddd5ffc5e914efa85c3
3
+ metadata.gz: d3a8c80071b42ae32018e13afe33c1d0669891a8
4
+ data.tar.gz: bfb24420adc9aeef6f73a8d08a6b739c0791f833
5
5
  SHA512:
6
- metadata.gz: 70872c91a78a71d23f812ddc3c8c6620d306373a4359216a00b88e2db59fd7efeff117b355c30a1530ef26cadad3d16cf54278b4f9cf3482b07e2d3a013db707
7
- data.tar.gz: d0fb5e0ac7d558892ab2481958a6f4333aca695f2bde1d07138ef7f96773745e4a7c243586ad48f3e3c5bcc7718c64c02408489189a84ffef45f62f5fb30b419
6
+ metadata.gz: 6ce15399e53924e379619676b5ec11dcc2f76300cd510e8b016ed9d3fffcdf046c57eb86838767172cd3a57d83a89d1898446111226c5d1528ea0afabb0345a4
7
+ data.tar.gz: 3e4699be345997b37e1cc0924d4ce2755b437869e30a772482f59ae55129180d6b4efe40fd9c5c3aedd7c7149876ad34195e81286579095a971acc8519f1c6bb
data/lib/grizzly_ber.rb CHANGED
@@ -12,6 +12,7 @@ class GrizzlyBerElement
12
12
 
13
13
  def tag=(tag)
14
14
  raise ArgumentError, "tag must be a valid hex string" unless tag.is_a? String and tag.size.even? and tag =~ /^[0-9A-F]*$/
15
+ raise ArgumentError, "tag #{tag} must be a valid BER tag" unless tag_is_valid? tag
15
16
  @tag = tag
16
17
  end
17
18
 
@@ -39,6 +40,20 @@ class GrizzlyBerElement
39
40
 
40
41
  private
41
42
 
43
+ def tag_is_valid?(tag_string)
44
+ tag_byte_array = [tag_string].pack("H*").unpack("C*")
45
+ return false if tag_byte_array.size < 1
46
+
47
+ first_byte = tag_byte_array.shift
48
+ return false if tag_byte_array.size > 0 and (first_byte & 0x1F) != 0x1F
49
+
50
+ last_byte = tag_byte_array.pop || 0x00
51
+ return false if (last_byte & 0x80) != 0x00
52
+
53
+ tag_byte_array.each {|byte| return false if (byte & 0x80) != 0x80 }
54
+ true
55
+ end
56
+
42
57
  def byte_to_hex(byte)
43
58
  byte.to_s(16).rjust(2,'0').upcase
44
59
  end
@@ -145,12 +160,11 @@ class GrizzlyBer
145
160
  end
146
161
 
147
162
  def set_value_for_tag(tag, value)
148
- tag.upcase!
149
- first_tagged_element = @elements.find {|element| tag == element.tag}
150
- first_tagged_element ||= @elements.find {|element| element.tag == GrizzlyTag.named(tag)[:tag]} if GrizzlyTag.named(tag)
163
+ real_tag = GrizzlyTag.named(tag) ? GrizzlyTag.named(tag)[:tag] : tag.upcase
164
+ first_tagged_element = @elements.find {|element| real_tag == element.tag}
151
165
  if first_tagged_element.nil?
152
166
  first_tagged_element = GrizzlyBerElement.new
153
- first_tagged_element.tag = tag
167
+ first_tagged_element.tag = real_tag
154
168
  @elements << first_tagged_element
155
169
  end
156
170
  first_tagged_element.value = value
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grizzly_ber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Balsdon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-11 00:00:00.000000000 Z
11
+ date: 2015-01-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: CODEC for EMV TLV-BER encoded strings.
14
14
  email: ryan.balsdon@shopify.com
@@ -28,12 +28,12 @@ require_paths:
28
28
  - lib
29
29
  required_ruby_version: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  required_rubygems_version: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - '>='
36
+ - - ">="
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []