rbnacl 3.1.2 → 3.2.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 +4 -4
- data/.rubocop.yml +27 -0
- data/.travis.yml +4 -3
- data/CHANGES.md +5 -0
- data/Gemfile +8 -3
- data/Guardfile +1 -1
- data/README.md +5 -6
- data/Rakefile +3 -2
- data/lib/rbnacl.rb +1 -1
- data/lib/rbnacl/auth.rb +21 -8
- data/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb +17 -13
- data/lib/rbnacl/boxes/curve25519xsalsa20poly1305/private_key.rb +68 -65
- data/lib/rbnacl/boxes/curve25519xsalsa20poly1305/public_key.rb +49 -47
- data/lib/rbnacl/group_elements/curve25519.rb +14 -8
- data/lib/rbnacl/hash.rb +2 -2
- data/lib/rbnacl/hash/blake2b.rb +13 -13
- data/lib/rbnacl/hash/sha256.rb +5 -5
- data/lib/rbnacl/hash/sha512.rb +5 -5
- data/lib/rbnacl/hmac/sha256.rb +12 -11
- data/lib/rbnacl/hmac/sha512256.rb +11 -10
- data/lib/rbnacl/init.rb +1 -1
- data/lib/rbnacl/key_comparator.rb +3 -3
- data/lib/rbnacl/one_time_auths/poly1305.rb +4 -4
- data/lib/rbnacl/password_hash/scrypt.rb +10 -11
- data/lib/rbnacl/random.rb +2 -2
- data/lib/rbnacl/secret_boxes/xsalsa20poly1305.rb +28 -14
- data/lib/rbnacl/self_test.rb +17 -37
- data/lib/rbnacl/serializable.rb +9 -4
- data/lib/rbnacl/signatures/ed25519.rb +1 -0
- data/lib/rbnacl/signatures/ed25519/signing_key.rb +17 -9
- data/lib/rbnacl/signatures/ed25519/verify_key.rb +17 -6
- data/lib/rbnacl/simple_box.rb +6 -3
- data/lib/rbnacl/sodium.rb +6 -7
- data/lib/rbnacl/sodium/version.rb +3 -2
- data/lib/rbnacl/test_vectors.rb +57 -55
- data/lib/rbnacl/util.rb +12 -11
- data/lib/rbnacl/version.rb +3 -1
- data/rbnacl.gemspec +6 -8
- data/spec/rbnacl/authenticators/poly1305_spec.rb +1 -1
- data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/private_key_spec.rb +1 -1
- data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/public_key_spec.rb +1 -1
- data/spec/rbnacl/boxes/curve25519xsalsa20poly1305_spec.rb +2 -2
- data/spec/rbnacl/group_element_spec.rb +1 -1
- data/spec/rbnacl/hash/blake2b_spec.rb +1 -1
- data/spec/rbnacl/hash_spec.rb +1 -1
- data/spec/rbnacl/hmac/sha256_spec.rb +1 -1
- data/spec/rbnacl/hmac/sha512256_spec.rb +1 -1
- data/spec/rbnacl/password_hash/scrypt_spec.rb +3 -3
- data/spec/rbnacl/secret_box_spec.rb +3 -3
- data/spec/rbnacl/signatures/ed25519/signing_key_spec.rb +2 -2
- data/spec/rbnacl/signatures/ed25519/verify_key_spec.rb +12 -7
- data/spec/rbnacl/simple_box_spec.rb +2 -2
- data/spec/rbnacl/util_spec.rb +28 -29
- data/spec/shared/authenticator.rb +12 -12
- data/spec/shared/box.rb +2 -4
- data/spec/spec_helper.rb +11 -18
- data/tasks/rspec.rake +2 -2
- data/tasks/rubocop.rake +1 -1
- metadata +4 -5
- data/lib/rbnacl/rake_tasks.rb +0 -57
- data/tasks/ci.rake +0 -11
data/lib/rbnacl/version.rb
CHANGED
data/rbnacl.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "rbnacl/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "rbnacl"
|
@@ -11,16 +11,14 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = "Ruby binding to the Networking and Cryptography (NaCl) library"
|
12
12
|
gem.summary = "The Networking and Cryptography (NaCl) library provides a high-level toolkit for building cryptographic systems and protocols"
|
13
13
|
gem.homepage = "https://github.com/cryptosphere/rbnacl"
|
14
|
-
gem.licenses = [
|
14
|
+
gem.licenses = ["MIT"]
|
15
15
|
|
16
|
-
gem.files = `git ls-files`.split(
|
17
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
if defined? JRUBY_VERSION
|
22
|
-
gem.platform = "jruby"
|
23
|
-
end
|
21
|
+
gem.platform = "jruby" if defined? JRUBY_VERSION
|
24
22
|
|
25
23
|
gem.add_runtime_dependency "ffi"
|
26
24
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
RSpec.describe RbNaCl::Box do
|
5
5
|
let(:alicepk) { vector :alice_public }
|
@@ -33,7 +33,7 @@ RSpec.describe RbNaCl::Box do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
include_examples
|
36
|
+
include_examples "box" do
|
37
37
|
let(:box) { RbNaCl::Box.new(alicepk, bobsk) }
|
38
38
|
end
|
39
39
|
end
|
data/spec/rbnacl/hash_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
RSpec.describe RbNaCl::PasswordHash::SCrypt do
|
5
5
|
let(:reference_password) { vector :scrypt_password }
|
6
6
|
let(:reference_salt) { vector :scrypt_salt }
|
7
|
-
let(:reference_opslimit) { RbNaCl::
|
8
|
-
let(:reference_memlimit) { RbNaCl::
|
7
|
+
let(:reference_opslimit) { RbNaCl::TEST_VECTORS[:scrypt_opslimit] }
|
8
|
+
let(:reference_memlimit) { RbNaCl::TEST_VECTORS[:scrypt_memlimit] }
|
9
9
|
let(:reference_digest) { vector :scrypt_digest }
|
10
10
|
|
11
11
|
it "calculates the correct digest for a reference password/salt" do
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
RSpec.describe RbNaCl::SecretBox do
|
5
|
-
let
|
5
|
+
let(:key) { vector :secret_key }
|
6
6
|
|
7
7
|
context "new" do
|
8
8
|
it "accepts strings" do
|
@@ -14,7 +14,7 @@ RSpec.describe RbNaCl::SecretBox do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "raises on a short key" do
|
17
|
-
expect { RbNaCl::SecretBox.new("hello") }.to raise_error
|
17
|
+
expect { RbNaCl::SecretBox.new("hello") }.to raise_error RbNaCl::LengthError
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
RSpec.describe RbNaCl::SigningKey do
|
5
5
|
let(:signing_key) { vector :sign_private }
|
@@ -23,7 +23,7 @@ RSpec.describe RbNaCl::SigningKey do
|
|
23
23
|
include_examples "key equality" do
|
24
24
|
let(:key_bytes) { signing_key }
|
25
25
|
let(:key) { described_class.new(key_bytes) }
|
26
|
-
let(:other_key) { described_class.new("B"*32) }
|
26
|
+
let(:other_key) { described_class.new("B" * 32) }
|
27
27
|
end
|
28
28
|
|
29
29
|
include_examples "serializable"
|
@@ -1,11 +1,16 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
RSpec.describe RbNaCl::VerifyKey do
|
3
|
-
let(:signing_key)
|
4
|
-
let(:verify_key)
|
3
|
+
let(:signing_key) { vector :sign_private }
|
4
|
+
let(:verify_key) { vector :sign_public }
|
5
5
|
|
6
|
-
let(:message)
|
7
|
-
let(:signature)
|
8
|
-
|
6
|
+
let(:message) { vector :sign_message }
|
7
|
+
let(:signature) { vector :sign_signature }
|
8
|
+
|
9
|
+
let(:bad_signature) do
|
10
|
+
sig = signature.dup
|
11
|
+
sig[0] = (sig[0].ord + 1).chr
|
12
|
+
sig
|
13
|
+
end
|
9
14
|
|
10
15
|
subject { RbNaCl::SigningKey.new(signing_key).verify_key }
|
11
16
|
|
@@ -18,7 +23,7 @@ RSpec.describe RbNaCl::VerifyKey do
|
|
18
23
|
end
|
19
24
|
|
20
25
|
it "raises when asked to verify a short signature" do
|
21
|
-
expect { subject.verify(bad_signature[0,63], message) }.to raise_exception RbNaCl::LengthError
|
26
|
+
expect { subject.verify(bad_signature[0, 63], message) }.to raise_exception RbNaCl::LengthError
|
22
27
|
end
|
23
28
|
|
24
29
|
it "serializes to bytes" do
|
@@ -32,7 +37,7 @@ RSpec.describe RbNaCl::VerifyKey do
|
|
32
37
|
include_examples "key equality" do
|
33
38
|
let(:key_bytes) { verify_key }
|
34
39
|
let(:key) { described_class.new(verify_key) }
|
35
|
-
let(:other_key) { described_class.new("B"*32) }
|
40
|
+
let(:other_key) { described_class.new("B" * 32) }
|
36
41
|
end
|
37
42
|
|
38
43
|
include_examples "serializable"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
RSpec.describe RbNaCl::SimpleBox do
|
5
5
|
let(:secret_key) { vector :secret_key }
|
@@ -51,7 +51,7 @@ RSpec.describe RbNaCl::SimpleBox do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "decrypts a message with a 'random' nonce" do
|
54
|
-
expect(bob.decrypt(nonce+ciphertext)).to eql message
|
54
|
+
expect(bob.decrypt(nonce + ciphertext)).to eql message
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/spec/rbnacl/util_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
RSpec.describe RbNaCl::Util do
|
3
3
|
context ".verify32!" do
|
4
|
-
let
|
5
|
-
let
|
6
|
-
let
|
7
|
-
let
|
8
|
-
let
|
4
|
+
let(:msg) { RbNaCl::Util.zeros(32) }
|
5
|
+
let(:identical_msg) { RbNaCl::Util.zeros(32) }
|
6
|
+
let(:other_msg) { RbNaCl::Util.zeros(31) + "\001" }
|
7
|
+
let(:short_msg) { RbNaCl::Util.zeros(31) }
|
8
|
+
let(:long_msg) { RbNaCl::Util.zeros(33) }
|
9
9
|
|
10
10
|
it "confirms identical messages are identical" do
|
11
11
|
expect(RbNaCl::Util.verify32!(msg, identical_msg)).to be true
|
@@ -29,13 +29,13 @@ RSpec.describe RbNaCl::Util do
|
|
29
29
|
expect { RbNaCl::Util.verify32!(msg, long_msg) }.to raise_error(RbNaCl::LengthError)
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
context ".verify32" do
|
34
|
-
let
|
35
|
-
let
|
36
|
-
let
|
37
|
-
let
|
38
|
-
let
|
34
|
+
let(:msg) { RbNaCl::Util.zeros(32) }
|
35
|
+
let(:identical_msg) { RbNaCl::Util.zeros(32) }
|
36
|
+
let(:other_msg) { RbNaCl::Util.zeros(31) + "\001" }
|
37
|
+
let(:short_msg) { RbNaCl::Util.zeros(31) }
|
38
|
+
let(:long_msg) { RbNaCl::Util.zeros(33) }
|
39
39
|
|
40
40
|
it "confirms identical messages are identical" do
|
41
41
|
expect(RbNaCl::Util.verify32(msg, identical_msg)).to be true
|
@@ -49,15 +49,14 @@ RSpec.describe RbNaCl::Util do
|
|
49
49
|
expect(RbNaCl::Util.verify32(long_msg, msg)).to be false
|
50
50
|
expect(RbNaCl::Util.verify32(msg, long_msg)).to be false
|
51
51
|
end
|
52
|
-
|
53
52
|
end
|
54
53
|
|
55
54
|
context ".verify16!" do
|
56
|
-
let
|
57
|
-
let
|
58
|
-
let
|
59
|
-
let
|
60
|
-
let
|
55
|
+
let(:msg) { RbNaCl::Util.zeros(16) }
|
56
|
+
let(:identical_msg) { RbNaCl::Util.zeros(16) }
|
57
|
+
let(:other_msg) { RbNaCl::Util.zeros(15) + "\001" }
|
58
|
+
let(:short_msg) { RbNaCl::Util.zeros(15) }
|
59
|
+
let(:long_msg) { RbNaCl::Util.zeros(17) }
|
61
60
|
|
62
61
|
it "confirms identical messages are identical" do
|
63
62
|
expect(RbNaCl::Util.verify16!(msg, identical_msg)).to be true
|
@@ -81,13 +80,13 @@ RSpec.describe RbNaCl::Util do
|
|
81
80
|
expect { RbNaCl::Util.verify16!(msg, long_msg) }.to raise_error(RbNaCl::LengthError)
|
82
81
|
end
|
83
82
|
end
|
84
|
-
|
83
|
+
|
85
84
|
context ".verify16" do
|
86
|
-
let
|
87
|
-
let
|
88
|
-
let
|
89
|
-
let
|
90
|
-
let
|
85
|
+
let(:msg) { RbNaCl::Util.zeros(16) }
|
86
|
+
let(:identical_msg) { RbNaCl::Util.zeros(16) }
|
87
|
+
let(:other_msg) { RbNaCl::Util.zeros(15) + "\001" }
|
88
|
+
let(:short_msg) { RbNaCl::Util.zeros(15) }
|
89
|
+
let(:long_msg) { RbNaCl::Util.zeros(17) }
|
91
90
|
|
92
91
|
it "confirms identical messages are identical" do
|
93
92
|
expect(RbNaCl::Util.verify16(msg, identical_msg)).to be true
|
@@ -105,13 +104,13 @@ RSpec.describe RbNaCl::Util do
|
|
105
104
|
|
106
105
|
context "check_length" do
|
107
106
|
it "accepts strings of the correct length" do
|
108
|
-
expect { RbNaCl::Util.check_length("A"*4, 4, "Test String") }.not_to raise_error
|
107
|
+
expect { RbNaCl::Util.check_length("A" * 4, 4, "Test String") }.not_to raise_error
|
109
108
|
end
|
110
109
|
it "rejects strings which are too short" do
|
111
|
-
expect { RbNaCl::Util.check_length("A"*3, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 3 bytes (Expected 4)")
|
110
|
+
expect { RbNaCl::Util.check_length("A" * 3, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 3 bytes (Expected 4)")
|
112
111
|
end
|
113
112
|
it "rejects strings which are too long" do
|
114
|
-
expect { RbNaCl::Util.check_length("A"*5, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 5 bytes (Expected 4)")
|
113
|
+
expect { RbNaCl::Util.check_length("A" * 5, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 5 bytes (Expected 4)")
|
115
114
|
end
|
116
115
|
it "rejects nil strings" do
|
117
116
|
expect { RbNaCl::Util.check_length(nil, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was nil (Expected 4)")
|
@@ -121,7 +120,7 @@ RSpec.describe RbNaCl::Util do
|
|
121
120
|
context "check_string" do
|
122
121
|
it "raises EncodingError when given strings with non-BINARY encoding" do
|
123
122
|
string = "foobar"
|
124
|
-
string.force_encoding(
|
123
|
+
string.force_encoding("UTF-8")
|
125
124
|
expect do
|
126
125
|
RbNaCl::Util.check_string(string, string.bytesize, "encoding test")
|
127
126
|
end.to raise_error(EncodingError)
|
@@ -129,8 +128,8 @@ RSpec.describe RbNaCl::Util do
|
|
129
128
|
end
|
130
129
|
|
131
130
|
context "hex encoding" do
|
132
|
-
let
|
133
|
-
let
|
131
|
+
let(:bytes) { [0xDE, 0xAD, 0xBE, 0xEF].pack("c*") }
|
132
|
+
let(:hex) { "deadbeef" }
|
134
133
|
|
135
134
|
it "encodes to hex with bin2hex" do
|
136
135
|
expect(RbNaCl::Util.bin2hex(bytes)).to eq hex
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
RSpec.shared_examples "authenticator" do
|
3
|
-
let
|
4
|
-
let
|
3
|
+
let(:key) { vector :auth_key }
|
4
|
+
let(:message) { vector :auth_message }
|
5
5
|
|
6
6
|
context ".new" do
|
7
7
|
it "accepts a key" do
|
@@ -17,11 +17,11 @@ RSpec.shared_examples "authenticator" do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "raises ArgumentError on a key which is too long" do
|
20
|
-
expect { described_class.new("\0"*33) }.to raise_error(ArgumentError)
|
20
|
+
expect { described_class.new("\0" * 33) }.to raise_error(ArgumentError)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "raises ArgumentError on a key which is too short" do
|
24
|
-
expect { described_class.new("\0"*31) }.to raise_error(ArgumentError)
|
24
|
+
expect { described_class.new("\0" * 31) }.to raise_error(ArgumentError)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -35,7 +35,7 @@ RSpec.shared_examples "authenticator" do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "raises ArgumentError on a key which is too long" do
|
38
|
-
expect { described_class.auth("\0"*33, message) }.to raise_error(ArgumentError)
|
38
|
+
expect { described_class.auth("\0" * 33, message) }.to raise_error(ArgumentError)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -49,19 +49,19 @@ RSpec.shared_examples "authenticator" do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it "raises ArgumentError on a key which is too long" do
|
52
|
-
expect { described_class.verify("\0"*33, tag, message) }.to raise_error(ArgumentError)
|
52
|
+
expect { described_class.verify("\0" * 33, tag, message) }.to raise_error(ArgumentError)
|
53
53
|
end
|
54
54
|
|
55
55
|
it "fails to validate an invalid authenticator" do
|
56
|
-
expect { described_class.verify(key, tag, message+"\0") }.to raise_error(RbNaCl::BadAuthenticatorError)
|
56
|
+
expect { described_class.verify(key, tag, message + "\0") }.to raise_error(RbNaCl::BadAuthenticatorError)
|
57
57
|
end
|
58
58
|
|
59
59
|
it "fails to validate a short authenticator" do
|
60
|
-
expect { described_class.verify(key, tag[0,tag.bytesize - 2], message) }.to raise_error(RbNaCl::LengthError)
|
60
|
+
expect { described_class.verify(key, tag[0, tag.bytesize - 2], message) }.to raise_error(RbNaCl::LengthError)
|
61
61
|
end
|
62
62
|
|
63
63
|
it "fails to validate a long authenticator" do
|
64
|
-
expect { described_class.verify(key, tag+"\0", message) }.to raise_error(RbNaCl::LengthError)
|
64
|
+
expect { described_class.verify(key, tag + "\0", message) }.to raise_error(RbNaCl::LengthError)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -80,15 +80,15 @@ RSpec.shared_examples "authenticator" do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
it "fails to validate an invalid authenticator" do
|
83
|
-
expect { authenticator.verify(tag, message+"\0") }.to raise_error(RbNaCl::BadAuthenticatorError)
|
83
|
+
expect { authenticator.verify(tag, message + "\0") }.to raise_error(RbNaCl::BadAuthenticatorError)
|
84
84
|
end
|
85
85
|
|
86
86
|
it "fails to validate a short authenticator" do
|
87
|
-
expect { authenticator.verify(tag[0,tag.bytesize - 2], message) }.to raise_error(RbNaCl::LengthError)
|
87
|
+
expect { authenticator.verify(tag[0, tag.bytesize - 2], message) }.to raise_error(RbNaCl::LengthError)
|
88
88
|
end
|
89
89
|
|
90
90
|
it "fails to validate a long authenticator" do
|
91
|
-
expect { authenticator.verify(tag+"\0", message) }.to raise_error(RbNaCl::LengthError)
|
91
|
+
expect { authenticator.verify(tag + "\0", message) }.to raise_error(RbNaCl::LengthError)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
data/spec/shared/box.rb
CHANGED
@@ -2,15 +2,14 @@
|
|
2
2
|
|
3
3
|
RSpec.shared_examples "box" do
|
4
4
|
let(:nonce) { vector :box_nonce }
|
5
|
-
let(:invalid_nonce) { nonce[0,12] } # too short!
|
5
|
+
let(:invalid_nonce) { nonce[0, 12] } # too short!
|
6
6
|
let(:invalid_nonce_long) { nonce + nonce } # too long!
|
7
7
|
let(:message) { vector :box_message }
|
8
8
|
let(:ciphertext) { vector :box_ciphertext }
|
9
|
-
let
|
9
|
+
let(:nonce_error_regex) { /Nonce.*(Expected #{box.nonce_bytes})/ }
|
10
10
|
let(:corrupt_ciphertext) { ciphertext[80] = " " } # picked at random by fair diceroll
|
11
11
|
|
12
12
|
context "box" do
|
13
|
-
|
14
13
|
it "encrypts a message" do
|
15
14
|
expect(box.box(nonce, message)).to eq ciphertext
|
16
15
|
end
|
@@ -25,7 +24,6 @@ RSpec.shared_examples "box" do
|
|
25
24
|
end
|
26
25
|
|
27
26
|
context "open" do
|
28
|
-
|
29
27
|
it "decrypts a message" do
|
30
28
|
expect(box.open(nonce, ciphertext)).to eq message
|
31
29
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,34 +1,27 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
3
|
-
require
|
2
|
+
require "json"
|
3
|
+
require "coveralls"
|
4
4
|
Coveralls.wear!
|
5
5
|
|
6
6
|
# Run the specs prior to running the self-test
|
7
7
|
$RBNACL_SELF_TEST = false
|
8
8
|
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
9
|
+
require "bundler/setup"
|
10
|
+
require "rbnacl/libsodium"
|
11
|
+
require "shared/box"
|
12
|
+
require "shared/authenticator"
|
13
|
+
require "shared/key_equality"
|
14
|
+
require "shared/serializable"
|
15
15
|
|
16
16
|
def vector(name)
|
17
|
-
[RbNaCl::
|
17
|
+
[RbNaCl::TEST_VECTORS[name]].pack("H*")
|
18
18
|
end
|
19
19
|
|
20
20
|
RSpec.configure do |config|
|
21
21
|
config.after :all do
|
22
22
|
# Run the self-test after all the specs have passed
|
23
|
-
require
|
23
|
+
require "rbnacl/self_test"
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
# top level methods like `describe`, `shared_examples_for` and `shared_context`
|
28
|
-
# on `main` and `Module`. The methods are always available through the `RSpec`
|
29
|
-
# module like `RSpec.describe` regardless of this setting.
|
30
|
-
# For backwards compatibility this defaults to `true`.
|
31
|
-
#
|
32
|
-
# https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
|
33
|
-
config.expose_dsl_globally = false
|
26
|
+
config.disable_monkey_patching!
|
34
27
|
end
|