funky-tlv 0.2.0 → 0.2.1

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
  SHA1:
3
- metadata.gz: 581cd5ebf7ff938eddcef30ffcc2db896e9a3ede
4
- data.tar.gz: 696ee6d6b27ec8e075085cc46d9bbbe7ad091e0a
3
+ metadata.gz: 93019133102af667ae6fc14e50a6c51b9e888cc6
4
+ data.tar.gz: 7d8bb9f83888c539991cd61d8383fb292bed9c55
5
5
  SHA512:
6
- metadata.gz: e94b97b4592560c4fc96ca0e69051f7953b878abc0fa99466bfdd30c11f662e1fadd859f435f68e1e69ccdbdf2eca3c057114ca6ead00406bd844a6c05b43600
7
- data.tar.gz: 7576be5935ec9fd8c7bd9c8ff04775112a43d845183209521c107e99ee42750d76be048b5d0206d48ed3998cb280a292f841574dd9a7115d6ac2df8a4dc5f5bc
6
+ metadata.gz: 755f71facb41a6c46daa562eb083e4388e0c9fdeb5fc0e018057c05df3412521b9b2f75eaf215dc0c4a8737dabc57e44ce7644f3b02a764e2b45840e3f0a3b4d
7
+ data.tar.gz: d4a803c627e37d57f217d63e3bd108e06058f4edc9967a4a4d8c8d1e9ca56828b409a17b61658b3ac1c5f17d5562716c1db006bb0de412f778b5e05ae0e5c6ba
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- funky-tlv (0.2.0)
4
+ funky-tlv (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -25,3 +25,6 @@ DEPENDENCIES
25
25
  da_funk
26
26
  funky-tlv!
27
27
  rake (~> 10.0)
28
+
29
+ BUNDLED WITH
30
+ 1.12.3
data/funky-tlv.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "Implements Hash Ber TLV on funk environment"
13
13
  spec.homepage = "https://github.com/scalone/funky-tlv"
14
14
  spec.license = "MIT"
15
- spec.files = %w(.gitignore Gemfile Gemfile.lock README.md Rakefile funky-tlv.gemspec lib/funky-tlv.rb out/funky-tlv/main.mrb)
15
+ spec.files = %w(.gitignore Gemfile Gemfile.lock README.md Rakefile funky-tlv.gemspec lib/funky-tlv.rb lib/hash-ber-tlv.rb out/funky-tlv/main.mrb)
16
16
  spec.extensions = []
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
data/lib/funky-tlv.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module FunkyTlv
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
4
4
 
@@ -0,0 +1,67 @@
1
+ class Hash
2
+ def from_ber_tlv(data)
3
+ i = 0
4
+ tag = data[i]
5
+ if tag.unpack('C').pop & 0x1F == 0x1F # matches 00011111 mask?
6
+ begin
7
+ i += 1
8
+ tag[i] = data[i]
9
+ end while tag[i].unpack('C').pop & 0x80 == 0x80
10
+ end
11
+
12
+ length = data[tag.length].unpack('C').pop
13
+
14
+ tag_i = tag.unpack('H*').pop.to_i(16)
15
+
16
+ if length < 0x80
17
+ self[tag_i] = data[tag.length + 1, length]
18
+ remainder = data[tag.length + 1 + length..-1]
19
+ else
20
+ num_octets = length & 0x7f
21
+ octets = data[tag.length + 1, num_octets].unpack('C*')
22
+
23
+ length = 0
24
+ octets.reverse.each_with_index {|octet, idx|
25
+ length += octet * (256**idx)
26
+ }
27
+
28
+ self[tag_i] = data[tag.length + 1 + num_octets, length]
29
+ remainder = data[tag.length + 1 + num_octets + length..-1]
30
+ end
31
+
32
+ if remainder and remainder.length > 2
33
+ self.from_ber_tlv(remainder)
34
+ end
35
+
36
+ self
37
+ end
38
+
39
+ def to_ber_tlv
40
+ result = ''
41
+ self.each do |tag, value|
42
+ v = value.dup
43
+ result << int_to_binstr(tag) # adding tag to result string
44
+
45
+ #adding size of the tag
46
+ if v.size < 0x80
47
+ result << int_to_binstr(v.size)
48
+ else
49
+ len_len = int_to_binstr(v.size)
50
+ result << int_to_binstr(0x80 | len_len.size)
51
+ result << len_len
52
+ end
53
+
54
+ result << v
55
+ end
56
+
57
+ result
58
+ end
59
+
60
+ # converts integer to binary string representation
61
+ def int_to_binstr(i)
62
+ binstr = "%X" % i
63
+ binstr = '0' << binstr if binstr.size % 2 == 1
64
+ [binstr].pack('H*')
65
+ end
66
+ end
67
+
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: funky-tlv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thiago Scalone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-29 00:00:00.000000000 Z
11
+ date: 2016-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  description: Implements Hash Ber TLV on funk environment
@@ -45,13 +45,14 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
48
+ - ".gitignore"
49
49
  - Gemfile
50
50
  - Gemfile.lock
51
51
  - README.md
52
52
  - Rakefile
53
53
  - funky-tlv.gemspec
54
54
  - lib/funky-tlv.rb
55
+ - lib/hash-ber-tlv.rb
55
56
  - out/funky-tlv/main.mrb
56
57
  homepage: https://github.com/scalone/funky-tlv
57
58
  licenses:
@@ -63,17 +64,17 @@ require_paths:
63
64
  - lib
64
65
  required_ruby_version: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - '>='
67
+ - - ">="
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  required_rubygems_version: !ruby/object:Gem::Requirement
70
71
  requirements:
71
- - - '>='
72
+ - - ">="
72
73
  - !ruby/object:Gem::Version
73
74
  version: '0'
74
75
  requirements: []
75
76
  rubyforge_project:
76
- rubygems_version: 2.2.2
77
+ rubygems_version: 2.5.1
77
78
  signing_key:
78
79
  specification_version: 4
79
80
  summary: Hash Ber TLV implementation