simple-secrets 1.0.0 → 2.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dce15098b369653fbfa4f4f1a5c38123254c4d17
4
+ data.tar.gz: 7b3c14b5e9ce8a62d84eea8f561c5785d647bbe6
5
+ SHA512:
6
+ metadata.gz: 6ded25d7753b56b891fbcdb578e33369bfe8d8a863a9deb2a3af1f16c0be5b76747ab028cd19f51e3fbb5d83901f2c891bc247d98fed72c5b80561920831cb25
7
+ data.tar.gz: f0f34544a1bbacc377633d77167e9cb19fc6ad79481edda31f43d796e16cb30a891209e35b583fa32b225e44734d87551791a10ef7bc5202b421da0e549a1550
data/.travis.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
4
+ - 2.2.4
data/README.md CHANGED
@@ -1,9 +1,13 @@
1
1
 
2
- # SimpleSecrets [![Build Status](https://travis-ci.org/timshadel/simple-secrets.rb.png?branch=master)](https://travis-ci.org/timshadel/simple-secrets.rb)
2
+ # simple-secrets.rb [![Build Status](https://travis-ci.org/timshadel/simple-secrets.rb.png?branch=master)](https://travis-ci.org/timshadel/simple-secrets.rb)
3
3
 
4
- A Ruby client for [simple-secrets][simple-secrets], the simple, opinionated library for encrypting small packets of data securely.
4
+ The Ruby implementation of a simple, opinionated library for encrypting small packets of data securely. Designed for exchanging tokens among systems written in a variety of programming languages: [Node.js][simple-secrets], [Ruby][simple-secrets.rb], [Objective-C][SimpleSecrets], [Java][simple-secrets.java], [Erlang][simple_secrets.erl].
5
5
 
6
6
  [simple-secrets]: https://github.com/timshadel/simple-secrets
7
+ [simple-secrets.rb]: https://github.com/timshadel/simple-secrets.rb
8
+ [SimpleSecrets]: https://github.com/timshadel/SimpleSecrets
9
+ [simple-secrets.java]: https://github.com/timshadel/simple-secrets.java
10
+ [simple_secrets.erl]: https://github.com/CamShaft/simple_secrets.erl
7
11
 
8
12
  ## Examples
9
13
 
@@ -12,29 +16,32 @@ A Ruby client for [simple-secrets][simple-secrets], the simple, opinionated libr
12
16
  Send:
13
17
 
14
18
  ```ruby
15
- require('simple-secrets')
19
+ require 'simple-secrets'
20
+
21
+ include SimpleSecrets
16
22
 
17
23
  # Try `head /dev/urandom | shasum -a 256` to make a decent 256-bit key
18
- master_key = new Buffer('<64-char hex string (32 bytes, 256 bits)>', 'hex');
19
- # => <Buffer 71 c8 67 56 23 4b fd 3c 37 ... >
24
+ sender = Packet.new '<64-char hex string master key (32 bytes, 256 bits)>'
25
+ # => #<SimpleSecrets::Packet:0x007fec7c198e60 @master_key="d\xDD\xB5...", @identity="B\xBE...">
20
26
 
21
- var sender = secrets(master_key);
22
- var packet = sender.pack('this is a secret message');
23
- # => 'OqlG6KVMeyFYmunboS3HIXkvN_nXKTxg2yNkQydZOhvJrZvmfov54hUmkkiZCnlhzyrlwOJkbV7XnPPbqvdzZ6TsFOO5YdmxjxRksZmeIhbhLaMiDbfsOuSY1dBn_ZgtYCw-FRIM'
27
+ packet = sender.pack msg: 'this is a secret message'
28
+ # => 'Qr4m7AughkcQIRqQvlyXiB67EwHdBf5n9JD2s_Z9NpO4ksPGvLYjNbDm3HRzvFXFSpV2IqDQw_LTamndMh2c7iOQT0lSp4LstqJPAtoQklU5sb7JHYyTOuf-6W-q7W8gAnq1wCs5'
24
29
  ```
25
30
 
26
31
  Receive:
27
32
 
28
- ```js
29
- var secrets = require('simple-secrets');
33
+ ```ruby
34
+ require 'simple-secrets'
35
+
36
+ include SimpleSecrets
37
+
38
+ # Same shared key
39
+ sender = Packet.new '<64-char hex string master key (32 bytes, 256 bits)>'
40
+ # Read data from somewhere
41
+ packet = 'OqlG6KVMeyFYmunboS3HIXkvN_nXKTxg2yNkQydZOhvJrZvmfov54hUmkkiZCnlhzyrlwOJkbV7XnPPbqvdzZ6TsFOO5YdmxjxRksZmeIhbhLaMiDbfsOuSY1dBn_ZgtYCw-FRIM'
30
42
 
31
- // Same shared key
32
- var master_key = new Buffer('<shared-key-hex>', 'hex');
33
- var sender = secrets(master_key);
34
- var packet = new Buffer('<read data from somewhere>');
35
- // => 'OqlG6KVMeyFYmunboS3HIXkvN_nXKTxg2yNkQydZOhvJrZvmfov54hUmkkiZCnlhzyrlwOJkbV7XnPPbqvdzZ6TsFOO5YdmxjxRksZmeIhbhLaMiDbfsOuSY1dBn_ZgtYCw-FRIM'
36
- var secret_message = sender.unpack(packet);
37
- // => 'this is a secret message'
43
+ secret_message = sender.unpack(packet);
44
+ # => {"msg"=>"this is a secret message"}
38
45
  ```
39
46
 
40
47
 
@@ -0,0 +1,31 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ class Array
3
+ def to_msgpack
4
+ MessagePack.pack self
5
+ end
6
+ end
7
+
8
+ class String
9
+ def to_msgpack
10
+ MessagePack.pack self
11
+ end
12
+ end
13
+
14
+ class Fixnum
15
+ def to_msgpack
16
+ MessagePack.pack self
17
+ end
18
+ end
19
+
20
+ class NilClass
21
+ def to_msgpack
22
+ MessagePack.pack self
23
+ end
24
+ end
25
+
26
+ class Hash
27
+ def to_msgpack
28
+ MessagePack.pack self
29
+ end
30
+ end
31
+ end
@@ -1,6 +1,7 @@
1
1
  require 'openssl'
2
2
  require 'base64'
3
3
  require 'msgpack'
4
+ require 'msgpack_extensions'
4
5
 
5
6
  module SimpleSecrets
6
7
 
@@ -121,7 +122,7 @@ module SimpleSecrets
121
122
  cipher = OpenSSL::Cipher::AES256.new(:CBC)
122
123
  cipher.encrypt
123
124
  cipher.key = key
124
- iv = cipher.random_iv
125
+ iv = cipher.iv = OpenSSL::Random.random_bytes(16)
125
126
 
126
127
  encrypted = ''.force_encoding('BINARY')
127
128
  encrypted << iv
@@ -360,7 +361,7 @@ private
360
361
  end
361
362
 
362
363
  def self.assert256BitBinary binary
363
- raise '256-bit binary string required.' unless binary.size == 32
364
+ raise "256-bit binary string required. '#{binary.unpack("H*")}'" unless binary.size == 32
364
365
  end
365
366
 
366
367
  def self.assert128BitBinary binary
@@ -1,3 +1,3 @@
1
1
  module SimpleSecrets
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -17,8 +17,13 @@ Gem::Specification.new do |spec|
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)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = '>= 2.0'
20
21
 
21
- spec.add_dependency "msgpack"
22
+ if RUBY_PLATFORM == 'java'
23
+ spec.add_dependency "msgpack-jruby", "~> 1.4.0"
24
+ else
25
+ spec.add_dependency "msgpack", "~> 0.7.1"
26
+ end
22
27
 
23
28
  spec.add_development_dependency "bundler", "~> 1.3"
24
29
  spec.add_development_dependency "rake"
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+
3
+ include SimpleSecrets
4
+
5
+ describe 'the Ruby implementation should handle the compatibility standard items' do
6
+
7
+ let(:master_key){ 'eda00b0f46f6518d4c77944480a0b9b0a7314ad45e124521e490263c2ea217ad' }
8
+ let(:iv){ Util.hex_to_bin '7f3333233ce9235860ef902e6d0fcf35' }
9
+ let(:nonce){ Util.hex_to_bin '83dcf5916c0b5c4bc759e44f9f5c8c50' }
10
+
11
+ subject{ Packet.new master_key }
12
+
13
+ before(:each) do
14
+ allow(Primitives).to receive(:nonce) { nonce }
15
+ allow(OpenSSL::Random).to receive(:random_bytes) { iv }
16
+ end
17
+
18
+ describe 'string' do
19
+ let(:string){ 'This is the simple-secrets compatibility standard string.' }
20
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yMqhBNKylbt-R7lByBe6fmIZdLIH2C2BPyYOtA-z2oGxclL_nZ0Ylo8e_gkf3bXzMn04l61i4dRsVCMJ5pL72suwuJMURy81n73eZEu2ASoVqSSVsnJo9WODLLmvsF_Mu0' }
21
+ let(:websafe_msgpack5){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yNp54eHe8KRY2JqOo9H8bi3Hnm4G0-r5SNlXXhIW9S99qTxTwibKW7mLkaNMTeZ1ktDwx-4sjCpCnXPIyZe7-l6-o6XjIqazRdhGD6AH5ZS9UFqLpaqIowSUQ9CeiQeFBQ' }
22
+
23
+ it 'creates' do
24
+ expect(subject.pack(string)).to eq websafe_msgpack5
25
+ end
26
+
27
+ it 'recovers' do
28
+ expect(subject.unpack(websafe_msgpack1)).to eq string
29
+ expect(subject.unpack(websafe_msgpack5)).to eq string
30
+ end
31
+ end
32
+
33
+ describe 'binary' do
34
+ let(:binary){ "32".hex_to_bin(10) }
35
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yOnGuj4lHrhU_Uv8rMbpjXQJiqd3OMdktrw1asMDXy6jyLrVe9Ea-W09XC90Dgaxlk' }
36
+ let(:websafe_msgpack5){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yMVgYX8jn_wUmumA0aJMLlWffSYU0oaJsyJsVjxxF96Ia6mZgAalv5iywbsKORqxtQ' }
37
+
38
+ it 'creates' do
39
+ expect(subject.pack(binary)).to eq websafe_msgpack5
40
+ end
41
+
42
+ it 'recovers' do
43
+ expect(subject.unpack(websafe_msgpack1)).to eq binary
44
+ expect(subject.unpack(websafe_msgpack5)).to eq binary
45
+ end
46
+ end
47
+
48
+ describe 'numbers' do
49
+ let(:number){ 65234 }
50
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yN5I1SH6a75Y_qQlQIclwrVyOk6jJJnMrjeOm6D27_wD0DxwIY9cxSw8boQDgEsLKg' }
51
+
52
+ it 'creates' do
53
+ expect(subject.pack(number)).to eq websafe_msgpack1
54
+ end
55
+
56
+ it 'recovers' do
57
+ expect(subject.unpack(websafe_msgpack1)).to eq number
58
+ end
59
+ end
60
+
61
+ describe 'nil' do
62
+ let(:null){ nil }
63
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yPYBCYpYMU-4WChi6L1O1GCEApGRhWlg13kVPLTb90cXcEN9vpYgvttgcBJBh6Tjv8' }
64
+
65
+ it 'creates' do
66
+ expect(subject.pack(null)).to eq websafe_msgpack1
67
+ end
68
+
69
+ it 'recovers' do
70
+ expect(subject.unpack(websafe_msgpack1)).to eq nil
71
+ end
72
+ end
73
+
74
+ describe 'array' do
75
+ let(:array){ ['This is the simple-secrets compatibility standard array.','This is the simple-secrets compatibility standard array.'] }
76
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yMKAFsDUUYwc2fKvPhP_RHYhDOUfJ58li1gJgg9sVeaKx9yC0vFkpxuTmzJP6hZjn6XXlrG6A7-EeNgyzvP547booi2LUi0ALyAzbCaR8abXqnzoNwITRz7TL0J_NkP2gfxbpwUvyBo8ZT0cxGRr9jGnW5F5s6D0jmKZTl209nDJEpXDFRDXCo5y08tmvMNogs7rsZYz74mAap3mrBS-J7W' }
77
+ let(:websafe_msgpack5){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yP5Au9NtEbC-uoWkSPKgnAjODduuH_a2tH-zXaPNdqScWNR8snsQK2OufCVnb2OFk8O7VwgrObvx5gnGgC3pOsmk2Z5CasmOAfzn0B6uEnaBpiMOs74d0d70t07J4MdCRs1aDai9SJqxMpbjz5KJpVmSWqnT3n5KhzEdTLQwCuXQhSA0JKFaAlwQHh5tzq6ToWZZVR34REAGdAo7RMLSSi3' }
78
+
79
+ it 'creates' do
80
+ expect(subject.pack(array)).to eq websafe_msgpack5
81
+ end
82
+
83
+ it 'recovers' do
84
+ expect(subject.unpack(websafe_msgpack1)).to eq array
85
+ expect(subject.unpack(websafe_msgpack5)).to eq array
86
+ end
87
+ end
88
+
89
+ describe 'map' do
90
+ let(:map){ {'compatibility-key' => 'This is the simple-secrets compatibility standard map.'} }
91
+ let(:websafe_msgpack1){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yNR4q6kPij6WINZKHgOqKHXYKrvvhyLbyFTsndgOx5M5yockEUwdSgv6jG_JYpAiU5R37Y7OIZnF3IN2EWtaFSuJko0ajcvoYgDPeLMvjAJdRyBUYIKcvR-g56_p4O7Uef3yJRnfCprG6jUdMyDBai_' }
92
+ let(:websafe_msgpack5){ 'W7l1PJaffzMzIzzpI1hg75AubQ_PNSjEUycoH1Z7GEwonPVW7yNR4q6kPij6WINZKHgOqKHXsI6Zwegq5A48uq2i-l13bNQWLY9Ho-lG_s6PzwQhjGz6BnCwAK66YsDBlTqflM-X1mviccZbvUV7K6i2ZPOs8gDUtMIVnu-ByDFopGwZUHjelkUZiLZcRKWXIYSLWyKp' }
93
+
94
+ it 'creates' do
95
+ expect(subject.pack(map)).to eq websafe_msgpack5
96
+ end
97
+
98
+ it 'recovers' do
99
+ expect(subject.unpack(websafe_msgpack1)).to eq map
100
+ expect(subject.unpack(websafe_msgpack5)).to eq map
101
+ end
102
+ end
103
+
104
+ end
105
+
106
+ class Util
107
+ def self.hex_to_bin string
108
+ b = [string].pack('H*')
109
+ b.force_encoding 'BINARY'
110
+ b
111
+ end
112
+ end
data/spec/packet_spec.rb CHANGED
@@ -17,26 +17,26 @@ describe Packet do
17
17
  describe '#initialize' do
18
18
  it 'sets its master key' do
19
19
  its_key = subject.instance_variable_get(:@master_key)
20
- its_key.unpack('H*').first.should eq master_key
21
- its_key.encoding.should eq Encoding::ASCII_8BIT
20
+ expect(its_key.unpack('H*').first).to eq(master_key)
21
+ expect(its_key.encoding).to eq(Encoding::ASCII_8BIT)
22
22
  end
23
23
 
24
24
  it 'sets its identity' do
25
25
  identity = Primitives.identify subject.instance_variable_get(:@master_key)
26
- subject.instance_variable_get(:@identity).should eq identity
26
+ expect(subject.instance_variable_get(:@identity)).to eq(identity)
27
27
  end
28
28
  end
29
29
 
30
30
  describe '#build_body' do
31
31
  it 'concatenates the serialized body with a nonce' do
32
- Primitives.should_receive(:nonce){ nonce }
33
- subject.build_body(data).should eq test_body
32
+ expect(Primitives).to receive(:nonce) { nonce }
33
+ expect(subject.build_body(data)).to eq(test_body)
34
34
  end
35
35
  end
36
36
 
37
37
  describe '#body_to_data' do
38
38
  it 'it splits out the nonce and deserializes the body' do
39
- subject.body_to_data(test_body).should eq data
39
+ expect(subject.body_to_data(test_body)).to eq(data)
40
40
  end
41
41
  end
42
42
 
@@ -46,9 +46,9 @@ describe Packet do
46
46
 
47
47
  cipher_data = subject.encrypt_body test_body, key
48
48
  decrypted_body = subject.decrypt_body cipher_data, key
49
- test_body.should_not eq cipher_data
50
- cipher_data.should_not eq decrypted_body
51
- decrypted_body.should eq test_body
49
+ expect(test_body).not_to eq(cipher_data)
50
+ expect(cipher_data).not_to eq(decrypted_body)
51
+ expect(decrypted_body).to eq(test_body)
52
52
  end
53
53
  end
54
54
 
@@ -59,7 +59,7 @@ describe Packet do
59
59
 
60
60
  packet = subject.authenticate test_body, key, id
61
61
  data = subject.verify packet, key, id
62
- data.should eq test_body
62
+ expect(data).to eq(test_body)
63
63
  end
64
64
 
65
65
  it 'returns nil if the key identity does not match' do
@@ -68,7 +68,7 @@ describe Packet do
68
68
 
69
69
  packet = subject.authenticate test_body, key, bad_id
70
70
  data = subject.verify packet, key, id
71
- data.should be_nil
71
+ expect(data).to be_nil
72
72
  end
73
73
 
74
74
  it 'returns nil if the MAC does not match' do
@@ -79,17 +79,17 @@ describe Packet do
79
79
  packet = "#{packet[0...-32]}#{bad_mac}"
80
80
 
81
81
  data = subject.verify packet, key, id
82
- data.should be_nil
82
+ expect(data).to be_nil
83
83
  end
84
84
  end
85
85
 
86
86
  describe '.pack and .unpack' do
87
87
  it 'encrypts and signs data into web-safe string, then verifies and decrypts it back' do
88
88
  packed_data = subject.pack data
89
- packed_data.should_not eq data
89
+ expect(packed_data).not_to eq(data)
90
90
 
91
91
  unpacked_data = subject.unpack packed_data
92
- unpacked_data.should eq data
92
+ expect(unpacked_data).to eq(data)
93
93
  end
94
94
  end
95
95
  end
@@ -213,9 +213,9 @@ describe Primitives do
213
213
  b = "12".hex_to_bin
214
214
  c = "11".hex_to_bin
215
215
 
216
- expect(Primitives.compare(a,a)).to be_true
217
- expect(Primitives.compare(a,b)).to be_false
218
- expect(Primitives.compare(a,c)).to be_true
216
+ expect(Primitives.compare(a,a)).to be true
217
+ expect(Primitives.compare(a,b)).to be false
218
+ expect(Primitives.compare(a,c)).to be true
219
219
  end
220
220
 
221
221
  # Timing test, in progress from node.js version
@@ -330,6 +330,14 @@ describe Primitives do
330
330
  expect(Primitives.deserialize(Primitives.serialize('abcd'))).to eq('abcd')
331
331
  expect(Primitives.deserialize(Primitives.serialize([]))).to eq([])
332
332
  expect(Primitives.deserialize(Primitives.serialize({}))).to eq({})
333
+ buf = "32".hex_to_bin(10)
334
+ out = Primitives.deserialize(Primitives.serialize(buf))
335
+ expect(out).to eq(buf)
336
+ # msgpack bug: data is correctly extracted, but tagged with incorrect
337
+ # encoding. Make sure it can be coerced back.
338
+ if out.encoding != buf.encoding
339
+ expect(out.force_encoding(buf.encoding)).to eq(buf)
340
+ end
333
341
  end
334
342
  end
335
343
 
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe SimpleSecrets do
4
4
  it 'should have a version number' do
5
- SimpleSecrets::VERSION.should_not be_nil
5
+ expect(SimpleSecrets::VERSION).not_to be_nil
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,78 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-secrets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tim Shadel
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-11 00:00:00.000000000 Z
11
+ date: 2016-01-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: msgpack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: 0.7.1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: 0.7.1
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '1.3'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.3'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  description: A Ruby client for simple-secrets, the simple, opinionated library for
@@ -83,19 +74,21 @@ executables: []
83
74
  extensions: []
84
75
  extra_rdoc_files: []
85
76
  files:
86
- - .gitignore
87
- - .rspec
88
- - .travis.yml
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - ".travis.yml"
89
80
  - Gemfile
90
81
  - LICENSE.txt
91
82
  - README.md
92
83
  - Rakefile
84
+ - lib/msgpack_extensions.rb
93
85
  - lib/simple-secrets.rb
94
86
  - lib/simple_secrets.rb
95
87
  - lib/simple_secrets/packet.rb
96
88
  - lib/simple_secrets/primitives.rb
97
89
  - lib/simple_secrets/version.rb
98
90
  - simple_secrets.gemspec
91
+ - spec/compatibility_spec.rb
99
92
  - spec/packet_spec.rb
100
93
  - spec/primitives_spec.rb
101
94
  - spec/simple_secrets_spec.rb
@@ -103,30 +96,30 @@ files:
103
96
  homepage: https://github.com/timshadel/simple-secrets.rb
104
97
  licenses:
105
98
  - MIT
99
+ metadata: {}
106
100
  post_install_message:
107
101
  rdoc_options: []
108
102
  require_paths:
109
103
  - lib
110
104
  required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
105
  requirements:
113
- - - ! '>='
106
+ - - ">="
114
107
  - !ruby/object:Gem::Version
115
- version: '0'
108
+ version: '2.0'
116
109
  required_rubygems_version: !ruby/object:Gem::Requirement
117
- none: false
118
110
  requirements:
119
- - - ! '>='
111
+ - - ">="
120
112
  - !ruby/object:Gem::Version
121
113
  version: '0'
122
114
  requirements: []
123
115
  rubyforge_project:
124
- rubygems_version: 1.8.23
116
+ rubygems_version: 2.4.5
125
117
  signing_key:
126
- specification_version: 3
118
+ specification_version: 4
127
119
  summary: A Ruby client for simple-secrets, the simple, opinionated library for encrypting
128
120
  small packets of data securely.
129
121
  test_files:
122
+ - spec/compatibility_spec.rb
130
123
  - spec/packet_spec.rb
131
124
  - spec/primitives_spec.rb
132
125
  - spec/simple_secrets_spec.rb