ber 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +30 -0
- data/Rakefile +1 -0
- data/ber.gemspec +21 -0
- data/lib/ber.rb +61 -0
- data/lib/ber/array.rb +34 -0
- data/lib/ber/bignum.rb +26 -0
- data/lib/ber/boolean.rb +22 -0
- data/lib/ber/fixnum.rb +28 -0
- data/lib/ber/string.rb +26 -0
- data/lib/ber/version.rb +3 -0
- data/spec/ber_array_spec.rb +21 -0
- data/spec/ber_bignum_spec.rb +8 -0
- data/spec/ber_boolean_spec.rb +11 -0
- data/spec/ber_fixnum_spec.rb +19 -0
- data/spec/ber_spec.rb +82 -0
- data/spec/ber_string_spec.rb +20 -0
- data/spec/spec_helper.rb +5 -0
- metadata +85 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b529c78f22f9ef52acf218c052a848d9df4a9593
|
4
|
+
data.tar.gz: 9a9a07871c5ebe2a2cf22e1adb60c02f0d00c771
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 014c806ded70f21fc9d6330a76a8a803fc8f1ae710982b30d0dc62a404cf4e7ce9e894b8180e6c48cbe819da4bc6f36090c6ce6ec2bfb6a3b391faee3a17244a
|
7
|
+
data.tar.gz: 0d3d28f4ecd4cd0a0bfa1752a7828d246cd31a74bc4e60f9e4b111c0bfb2da008672c819eb9849d0b4ba5cb3c3e9443cbe7df8e54c87754946e6b97d835f9148
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Arcath
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# BER [![Build Status](https://travis-ci.org/Arcath/BER.png?branch=master)](https://travis-ci.org/Arcath/BER)
|
2
|
+
|
3
|
+
Implementation of Basic Encoding Rules (BER) in ruby
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install via Rubygems:
|
8
|
+
|
9
|
+
$ gem install ber
|
10
|
+
|
11
|
+
Or add as a dependency to your gem
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
Adds a `to_ber` to the supported classes e.g.
|
16
|
+
|
17
|
+
"Foo".to_ber
|
18
|
+
>> "\x04\x03foo"
|
19
|
+
|
20
|
+
Which in BER means that the supplied data is a string of length 3.
|
21
|
+
|
22
|
+
BER extends all the supported classes so all you need to do is require it somewhere in your gem.
|
23
|
+
|
24
|
+
## Contributing
|
25
|
+
|
26
|
+
1. Fork it
|
27
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
28
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
29
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
30
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/ber.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ber/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "ber"
|
8
|
+
gem.version = Ber::VERSION
|
9
|
+
gem.authors = ["Arcath"]
|
10
|
+
gem.email = ["adam@arcath.net"]
|
11
|
+
gem.description = %q{An implementation of BER (Basic Encoding Rules) in Ruby}
|
12
|
+
gem.summary = %q{An implementation of BER (Basic Encoding Rules) in Ruby}
|
13
|
+
gem.homepage = "https://github.com/Arcath/BER"
|
14
|
+
|
15
|
+
gem.add_development_dependency "rspec"
|
16
|
+
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
19
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
|
+
gem.require_paths = ["lib"]
|
21
|
+
end
|
data/lib/ber.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require "ber/version"
|
2
|
+
|
3
|
+
require "ber/array"
|
4
|
+
require "ber/bignum"
|
5
|
+
require "ber/boolean"
|
6
|
+
require "ber/fixnum"
|
7
|
+
require "ber/string"
|
8
|
+
|
9
|
+
module Ber
|
10
|
+
Zero = [0].pack('C')
|
11
|
+
Identifiers = {
|
12
|
+
end_of_content: 0x0,
|
13
|
+
boolean: 0x1,
|
14
|
+
fixnum: 0x2,
|
15
|
+
bit_string: 0x3,
|
16
|
+
ocet_string: 0x4,
|
17
|
+
null: 0x5,
|
18
|
+
array: 0x30,
|
19
|
+
|
20
|
+
# Quick shorthands
|
21
|
+
string: 4
|
22
|
+
}
|
23
|
+
|
24
|
+
def self.decode(input)
|
25
|
+
idents = Identifiers.select { |key, value| value == input.getbyte(0) }
|
26
|
+
identifier = idents.first.first
|
27
|
+
length = input.getbyte(1)
|
28
|
+
if length >= 127
|
29
|
+
length = input.length - (length - 126)
|
30
|
+
end
|
31
|
+
value = input[(input.length - length)..input.length]
|
32
|
+
if identifier == :fixnum
|
33
|
+
if length == 1
|
34
|
+
value = value.unpack('C').first
|
35
|
+
else
|
36
|
+
if value.length < 4
|
37
|
+
padded_value = "#{Zero * (4 - value.length)}#{value}"
|
38
|
+
value = padded_value.unpack('N').first
|
39
|
+
else
|
40
|
+
hex_total = ""
|
41
|
+
value.split("").each do |char|
|
42
|
+
hex = char.ord.to_s(16)
|
43
|
+
hex_total << "0" if hex.length == 1
|
44
|
+
hex_total << hex
|
45
|
+
end
|
46
|
+
value = hex_total.to_i(16)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
elsif identifier == :boolean
|
50
|
+
value = (value == Zero ? false : true)
|
51
|
+
elsif identifier == :array
|
52
|
+
values = []
|
53
|
+
found = value.scan(/(..[A-z]*)/) # This WILL NOT work for Bignums or strings of over 127 in length TODO: Fix this
|
54
|
+
found.each do |v|
|
55
|
+
values << Ber.decode(v.first)[:value]
|
56
|
+
end
|
57
|
+
value = values
|
58
|
+
end
|
59
|
+
{identifier: identifier, length: length, value: value}
|
60
|
+
end
|
61
|
+
end
|
data/lib/ber/array.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Ber
|
2
|
+
module Array
|
3
|
+
def to_ber
|
4
|
+
array = (self.ber? ? self : self.berable).join
|
5
|
+
"#{[Ber::Identifiers[:array]].pack('C')}#{[array.length].pack('C')}#{array}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def berable
|
9
|
+
self.map { |x| x.to_ber }
|
10
|
+
end
|
11
|
+
|
12
|
+
def berable!
|
13
|
+
self.map! { |x| x.to_ber }
|
14
|
+
end
|
15
|
+
|
16
|
+
def ber?
|
17
|
+
ber = true
|
18
|
+
self.each do |i|
|
19
|
+
if ber
|
20
|
+
if i.class == "".class
|
21
|
+
ber = i.ber?
|
22
|
+
else
|
23
|
+
ber = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
return ber
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Array
|
33
|
+
include Ber::Array
|
34
|
+
end
|
data/lib/ber/bignum.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ber
|
2
|
+
module Bignum
|
3
|
+
ChunkSize = 0.size
|
4
|
+
|
5
|
+
def to_ber
|
6
|
+
"#{[Ber::Identifiers[:fixnum]].pack('C')}#{encoded_self}"
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def encoded_self
|
12
|
+
ber_blocks = []
|
13
|
+
i = self
|
14
|
+
while i > 0
|
15
|
+
block = i & 0xff
|
16
|
+
ber_blocks.push block
|
17
|
+
i = i >> ChunkSize
|
18
|
+
end
|
19
|
+
([ber_blocks.size] + ber_blocks.reverse).pack('C*')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Bignum
|
25
|
+
include Ber::Bignum
|
26
|
+
end
|
data/lib/ber/boolean.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ber
|
2
|
+
module Boolean
|
3
|
+
def to_ber
|
4
|
+
"#{[Ber::Identifiers[:boolean]].pack('C')}#{encoded_self}"
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def encoded_self
|
10
|
+
encoded = (self ? [1].pack('C') : [0].pack('C'))
|
11
|
+
[1].pack('C') + encoded
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class TrueClass
|
17
|
+
include Ber::Boolean
|
18
|
+
end
|
19
|
+
|
20
|
+
class FalseClass
|
21
|
+
include Ber::Boolean
|
22
|
+
end
|
data/lib/ber/fixnum.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Ber
|
2
|
+
module Fixnum
|
3
|
+
ChunkSize = 0.size
|
4
|
+
|
5
|
+
def to_ber
|
6
|
+
"#{[Ber::Identifiers[:fixnum]].pack('C')}#{encoded_self}"
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def encoded_self
|
12
|
+
if self < (2 ** ChunkSize)
|
13
|
+
code = [self].pack('C')
|
14
|
+
else
|
15
|
+
code32 = [self].pack('N')
|
16
|
+
code = ""
|
17
|
+
code32.split("").each do |char|
|
18
|
+
code += char if char != [0].pack('C')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
[code.length].pack('C') + code
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Fixnum
|
27
|
+
include Ber::Fixnum
|
28
|
+
end
|
data/lib/ber/string.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ber
|
2
|
+
module String
|
3
|
+
def to_ber(identifier = :string)
|
4
|
+
"#{[Ber::Identifiers[identifier]].pack('C')}#{encoded_length}#{self}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def ber?
|
8
|
+
self[0].ord < 30
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def encoded_length
|
14
|
+
if length <= 127
|
15
|
+
[length].pack('C')
|
16
|
+
else
|
17
|
+
i = [length].pack('N').sub(/^[\0]+/,"")
|
18
|
+
[0x80 + i.length].pack('C') + i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class String
|
25
|
+
include Ber::String
|
26
|
+
end
|
data/lib/ber/version.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ber::Array do
|
4
|
+
it "should make everything in the array \"berable\"" do
|
5
|
+
a = ["foo", "bar"]
|
6
|
+
a.berable.should eq ["foo".to_ber, "bar".to_ber]
|
7
|
+
a.should eq ["foo", "bar"]
|
8
|
+
a.berable!
|
9
|
+
a.should eq ["foo".to_ber, "bar".to_ber]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be able to check if it is ber" do
|
13
|
+
["foo", "bar"].ber?.should be_false
|
14
|
+
["foo".to_ber, "bar".to_ber].ber?.should be_true
|
15
|
+
["foo".to_ber, "bar"].ber?.should be_false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to convert into ber" do
|
19
|
+
["foo", "bar"].to_ber.should eq "0\n\x04\x03foo\x04\x03bar"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ber::Fixnum do
|
4
|
+
it "should have a Chunk Size defined" do
|
5
|
+
Ber::Fixnum::ChunkSize.should be_a Fixnum
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should extend fixnum with to_ber" do
|
9
|
+
10.to_ber
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should encode a small number (less than #{Ber::Fixnum::ChunkSize} bits long (less than #{(2 ** Ber::Fixnum::ChunkSize) - 1}))" do
|
13
|
+
15.to_ber.should eq "\u0002\u0001\u000F"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should encode a large number (more than #{Ber::Fixnum::ChunkSize} bits long (more than #{(2 ** Ber::Fixnum::ChunkSize)}))" do
|
17
|
+
257.to_ber.should eq "\u0002\u0002\u0001\u0001"
|
18
|
+
end
|
19
|
+
end
|
data/spec/ber_spec.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ber do
|
4
|
+
it "should have a version" do
|
5
|
+
Ber::VERSION.should be_a String
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have a hash of identifiers" do
|
9
|
+
Ber::Identifiers.should be_a Hash
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be able to decode a string" do
|
13
|
+
string = "foo".to_ber
|
14
|
+
decoded = Ber.decode(string)
|
15
|
+
decoded.should be_a Hash
|
16
|
+
decoded[:identifier].should eq :ocet_string
|
17
|
+
decoded[:length].should eq 3
|
18
|
+
decoded[:value].should eq "foo"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to decode a long_string" do
|
22
|
+
string = long_string.to_ber
|
23
|
+
decoded = Ber.decode(string)
|
24
|
+
decoded.should be_a Hash
|
25
|
+
decoded[:identifier].should eq :ocet_string
|
26
|
+
decoded[:length].should eq long_string.length
|
27
|
+
decoded[:value].should eq long_string
|
28
|
+
|
29
|
+
string = long_string(200).to_ber
|
30
|
+
decoded = Ber.decode(string)
|
31
|
+
decoded.should be_a Hash
|
32
|
+
decoded[:identifier].should eq :ocet_string
|
33
|
+
decoded[:length].should eq long_string(200).length
|
34
|
+
decoded[:value].should eq long_string(200)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to decode a number" do
|
38
|
+
number = 15
|
39
|
+
decoded = Ber.decode(number.to_ber)
|
40
|
+
decoded[:identifier].should eq :fixnum
|
41
|
+
decoded[:length].should eq 1
|
42
|
+
decoded[:value].should eq number
|
43
|
+
|
44
|
+
number = 258
|
45
|
+
decoded = Ber.decode(number.to_ber)
|
46
|
+
decoded[:identifier].should eq :fixnum
|
47
|
+
decoded[:length].should eq 2
|
48
|
+
decoded[:value].should eq number
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be able to decode a big num" do
|
52
|
+
number = (2 ** 65)
|
53
|
+
decoded = Ber.decode(number.to_ber)
|
54
|
+
decoded[:identifier].should eq :fixnum
|
55
|
+
decoded[:length].should eq 9
|
56
|
+
decoded[:value].should eq number
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should be able to decode a true value" do
|
60
|
+
bool = true
|
61
|
+
decoded = Ber.decode(bool.to_ber)
|
62
|
+
decoded[:identifier].should eq :boolean
|
63
|
+
decoded[:length].should eq 1
|
64
|
+
decoded[:value].should eq bool
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be able to decode a false value" do
|
68
|
+
bool = false
|
69
|
+
decoded = Ber.decode(bool.to_ber)
|
70
|
+
decoded[:identifier].should eq :boolean
|
71
|
+
decoded[:length].should eq 1
|
72
|
+
decoded[:value].should eq bool
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be able to decode an array" do
|
76
|
+
array = ["foo", "bar"]
|
77
|
+
decoded = Ber.decode(array.to_ber)
|
78
|
+
decoded[:identifier].should eq :array
|
79
|
+
decoded[:length].should eq 10
|
80
|
+
decoded[:value].should eq array
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ber::String do
|
4
|
+
it "should extend String" do
|
5
|
+
"foo".to_ber
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should ber encode a string" do
|
9
|
+
"foo".to_ber.should eq "\x04\x03foo"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be able to tell if a string is a ber string" do
|
13
|
+
"foo".ber?.should be_false
|
14
|
+
"foo".to_ber.ber?.should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
#it "should encode a longer string" do
|
18
|
+
# long_string.to_ber.should eq "\x04\x82\x02X#{long_string}"
|
19
|
+
#end
|
20
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ber
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Arcath
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: An implementation of BER (Basic Encoding Rules) in Ruby
|
28
|
+
email:
|
29
|
+
- adam@arcath.net
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- .gitignore
|
35
|
+
- .travis.yml
|
36
|
+
- Gemfile
|
37
|
+
- LICENSE.txt
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- ber.gemspec
|
41
|
+
- lib/ber.rb
|
42
|
+
- lib/ber/array.rb
|
43
|
+
- lib/ber/bignum.rb
|
44
|
+
- lib/ber/boolean.rb
|
45
|
+
- lib/ber/fixnum.rb
|
46
|
+
- lib/ber/string.rb
|
47
|
+
- lib/ber/version.rb
|
48
|
+
- spec/ber_array_spec.rb
|
49
|
+
- spec/ber_bignum_spec.rb
|
50
|
+
- spec/ber_boolean_spec.rb
|
51
|
+
- spec/ber_fixnum_spec.rb
|
52
|
+
- spec/ber_spec.rb
|
53
|
+
- spec/ber_string_spec.rb
|
54
|
+
- spec/spec_helper.rb
|
55
|
+
homepage: https://github.com/Arcath/BER
|
56
|
+
licenses: []
|
57
|
+
metadata: {}
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 2.0.0
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: An implementation of BER (Basic Encoding Rules) in Ruby
|
78
|
+
test_files:
|
79
|
+
- spec/ber_array_spec.rb
|
80
|
+
- spec/ber_bignum_spec.rb
|
81
|
+
- spec/ber_boolean_spec.rb
|
82
|
+
- spec/ber_fixnum_spec.rb
|
83
|
+
- spec/ber_spec.rb
|
84
|
+
- spec/ber_string_spec.rb
|
85
|
+
- spec/spec_helper.rb
|