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 +7 -0
- data/.travis.yml +1 -1
- data/README.md +24 -17
- data/lib/msgpack_extensions.rb +31 -0
- data/lib/simple_secrets/primitives.rb +3 -2
- data/lib/simple_secrets/version.rb +1 -1
- data/simple_secrets.gemspec +6 -1
- data/spec/compatibility_spec.rb +112 -0
- data/spec/packet_spec.rb +14 -14
- data/spec/primitives_spec.rb +11 -3
- data/spec/simple_secrets_spec.rb +1 -1
- metadata +24 -31
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
data/README.md
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
|
2
|
-
#
|
2
|
+
# simple-secrets.rb [](https://travis-ci.org/timshadel/simple-secrets.rb)
|
3
3
|
|
4
|
-
|
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
|
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
|
-
|
19
|
-
# =>
|
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
|
-
|
22
|
-
|
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
|
-
```
|
29
|
-
|
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
|
-
|
32
|
-
|
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.
|
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
|
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
|
data/simple_secrets.gemspec
CHANGED
@@ -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
|
-
|
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.
|
21
|
-
its_key.encoding.
|
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).
|
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.
|
33
|
-
subject.build_body(data).
|
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).
|
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.
|
50
|
-
cipher_data.
|
51
|
-
decrypted_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.
|
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.
|
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.
|
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.
|
89
|
+
expect(packed_data).not_to eq(data)
|
90
90
|
|
91
91
|
unpacked_data = subject.unpack packed_data
|
92
|
-
unpacked_data.
|
92
|
+
expect(unpacked_data).to eq(data)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
data/spec/primitives_spec.rb
CHANGED
@@ -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
|
217
|
-
expect(Primitives.compare(a,b)).to
|
218
|
-
expect(Primitives.compare(a,c)).to
|
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
|
|
data/spec/simple_secrets_spec.rb
CHANGED
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:
|
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:
|
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:
|
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:
|
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:
|
116
|
+
rubygems_version: 2.4.5
|
125
117
|
signing_key:
|
126
|
-
specification_version:
|
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
|