rbnacl 1.1.0 → 2.0.0.pre

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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -5
  3. data/CHANGES.md +15 -0
  4. data/Gemfile +4 -1
  5. data/Guardfile +8 -0
  6. data/README.md +52 -3
  7. data/lib/rbnacl.rb +65 -29
  8. data/lib/rbnacl/auth.rb +14 -18
  9. data/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb +185 -0
  10. data/lib/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/private_key.rb +26 -23
  11. data/lib/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/public_key.rb +13 -12
  12. data/lib/rbnacl/group_elements/curve25519.rb +81 -0
  13. data/lib/rbnacl/hash.rb +30 -14
  14. data/lib/rbnacl/hash/blake2b.rb +57 -0
  15. data/lib/rbnacl/hash/sha256.rb +15 -0
  16. data/lib/rbnacl/hash/sha512.rb +15 -0
  17. data/lib/rbnacl/hmac/sha256.rb +19 -17
  18. data/lib/rbnacl/hmac/sha512256.rb +18 -19
  19. data/lib/rbnacl/init.rb +10 -0
  20. data/lib/rbnacl/{keys/key_comparator.rb → key_comparator.rb} +1 -1
  21. data/lib/rbnacl/{auth/one_time.rb → one_time_auths/poly1305.rb} +21 -19
  22. data/lib/rbnacl/rake_tasks.rb +7 -6
  23. data/lib/rbnacl/random.rb +8 -3
  24. data/lib/rbnacl/random_nonce_box.rb +9 -14
  25. data/lib/rbnacl/secret_boxes/xsalsa20poly1305.rb +125 -0
  26. data/lib/rbnacl/self_test.rb +59 -40
  27. data/lib/rbnacl/serializable.rb +4 -12
  28. data/lib/rbnacl/signatures/ed25519.rb +15 -0
  29. data/lib/rbnacl/signatures/ed25519/signing_key.rb +104 -0
  30. data/lib/rbnacl/signatures/ed25519/verify_key.rb +91 -0
  31. data/lib/rbnacl/sodium.rb +43 -0
  32. data/lib/rbnacl/test_vectors.rb +34 -1
  33. data/lib/rbnacl/util.rb +52 -7
  34. data/lib/rbnacl/version.rb +2 -2
  35. data/rbnacl.gemspec +3 -6
  36. data/spec/rbnacl/{auth/one_time_spec.rb → authenticators/poly1305_spec.rb} +2 -2
  37. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/private_key_spec.rb +65 -0
  38. data/spec/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/public_key_spec.rb +10 -13
  39. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305_spec.rb +39 -0
  40. data/spec/rbnacl/{point_spec.rb → group_element_spec.rb} +6 -8
  41. data/spec/rbnacl/hash/blake2b_spec.rb +26 -0
  42. data/spec/rbnacl/hash_spec.rb +13 -33
  43. data/spec/rbnacl/hmac/sha256_spec.rb +2 -2
  44. data/spec/rbnacl/hmac/sha512256_spec.rb +2 -2
  45. data/spec/rbnacl/random_nonce_box_spec.rb +21 -26
  46. data/spec/rbnacl/random_spec.rb +3 -3
  47. data/spec/rbnacl/secret_box_spec.rb +6 -6
  48. data/spec/rbnacl/signatures/ed25519/signing_key_spec.rb +30 -0
  49. data/spec/rbnacl/signatures/ed25519/verify_key_spec.rb +39 -0
  50. data/spec/rbnacl/util_spec.rb +67 -53
  51. data/spec/shared/authenticator.rb +36 -54
  52. data/spec/shared/box.rb +10 -10
  53. data/spec/shared/key_equality.rb +3 -3
  54. data/spec/shared/serializable.rb +17 -0
  55. data/spec/spec_helper.rb +14 -16
  56. data/tasks/rspec.rake +1 -0
  57. metadata +42 -67
  58. checksums.yaml.gz.sig +0 -0
  59. data.tar.gz.sig +0 -3
  60. data/lib/rbnacl/box.rb +0 -171
  61. data/lib/rbnacl/encoder.rb +0 -44
  62. data/lib/rbnacl/encoders/base32.rb +0 -33
  63. data/lib/rbnacl/encoders/base64.rb +0 -30
  64. data/lib/rbnacl/encoders/hex.rb +0 -30
  65. data/lib/rbnacl/encoders/raw.rb +0 -12
  66. data/lib/rbnacl/keys/signing_key.rb +0 -95
  67. data/lib/rbnacl/keys/verify_key.rb +0 -96
  68. data/lib/rbnacl/nacl.rb +0 -146
  69. data/lib/rbnacl/point.rb +0 -70
  70. data/lib/rbnacl/secret_box.rb +0 -119
  71. data/spec/rbnacl/box_spec.rb +0 -42
  72. data/spec/rbnacl/encoder_spec.rb +0 -14
  73. data/spec/rbnacl/encoders/base32_spec.rb +0 -16
  74. data/spec/rbnacl/encoders/base64_spec.rb +0 -15
  75. data/spec/rbnacl/encoders/hex_spec.rb +0 -15
  76. data/spec/rbnacl/keys/private_key_spec.rb +0 -68
  77. data/spec/rbnacl/keys/signing_key_spec.rb +0 -39
  78. data/spec/rbnacl/keys/verify_key_spec.rb +0 -51
  79. metadata.gz.sig +0 -2
@@ -0,0 +1,30 @@
1
+ # encoding: binary
2
+ require 'spec_helper'
3
+
4
+ describe RbNaCl::SigningKey do
5
+ let(:signing_key) { vector :sign_private }
6
+ let(:message) { vector :sign_message }
7
+ let(:signature) { vector :sign_signature }
8
+
9
+ subject { described_class.new(signing_key) }
10
+
11
+ it "generates keys" do
12
+ described_class.generate.should be_a described_class
13
+ end
14
+
15
+ it "signs messages as bytes" do
16
+ subject.sign(message).should eq signature
17
+ end
18
+
19
+ it "serializes to bytes" do
20
+ subject.to_bytes.should eq signing_key
21
+ end
22
+
23
+ include_examples "key equality" do
24
+ let(:key_bytes) { signing_key }
25
+ let(:key) { described_class.new(key_bytes) }
26
+ let(:other_key) { described_class.new("B"*32) }
27
+ end
28
+
29
+ include_examples "serializable"
30
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: binary
2
+ describe RbNaCl::VerifyKey do
3
+ let(:signing_key) { vector :sign_private }
4
+ let(:verify_key) { vector :sign_public }
5
+
6
+ let(:message) { vector :sign_message }
7
+ let(:signature) { vector :sign_signature }
8
+ let(:bad_signature) { sig = signature.dup; sig[0] = (sig[0].ord + 1).chr; sig }
9
+
10
+ subject { RbNaCl::SigningKey.new(signing_key).verify_key }
11
+
12
+ it "verifies correct signatures" do
13
+ subject.verify(signature, message).should be_true
14
+ end
15
+
16
+ it "detects bad signatures" do
17
+ subject.verify(bad_signature, message).should be_false
18
+ end
19
+
20
+ it "raises when asked to verify with a bang" do
21
+ expect { subject.verify!(bad_signature, message) }.to raise_exception RbNaCl::BadSignatureError
22
+ end
23
+
24
+ it "serializes to bytes" do
25
+ subject.to_bytes.should eq verify_key
26
+ end
27
+
28
+ it "initializes from bytes" do
29
+ described_class.new(verify_key).to_s.should eq verify_key
30
+ end
31
+
32
+ include_examples "key equality" do
33
+ let(:key_bytes) { verify_key }
34
+ let(:key) { described_class.new(verify_key) }
35
+ let(:other_key) { described_class.new("B"*32) }
36
+ end
37
+
38
+ include_examples "serializable"
39
+ end
@@ -1,119 +1,133 @@
1
1
  # encoding: binary
2
- describe Crypto::Util do
2
+ describe RbNaCl::Util do
3
3
  context ".verify32!" do
4
- let (:msg) { Crypto::Util.zeros(32) }
5
- let (:identical_msg) { Crypto::Util.zeros(32) }
6
- let (:other_msg) { Crypto::Util.zeros(31) + "\001" }
7
- let (:short_msg) { Crypto::Util.zeros(31) }
8
- let (:long_msg) { Crypto::Util.zeros(33) }
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
- Crypto::Util.verify32!(msg, identical_msg).should be true
11
+ RbNaCl::Util.verify32!(msg, identical_msg).should be true
12
12
  end
13
13
 
14
14
  it "confirms non-identical messages are non-identical" do
15
- Crypto::Util.verify32!(msg, other_msg).should be false
16
- Crypto::Util.verify32!(other_msg, msg).should be false
15
+ RbNaCl::Util.verify32!(msg, other_msg).should be false
16
+ RbNaCl::Util.verify32!(other_msg, msg).should be false
17
17
  end
18
18
 
19
19
  it "raises descriptively on a short message in position 1" do
20
- expect { Crypto::Util.verify32!(short_msg, msg) }.to raise_error(Crypto::LengthError)
20
+ expect { RbNaCl::Util.verify32!(short_msg, msg) }.to raise_error(RbNaCl::LengthError)
21
21
  end
22
22
  it "raises descriptively on a short message in position 2" do
23
- expect { Crypto::Util.verify32!(msg, short_msg) }.to raise_error(Crypto::LengthError)
23
+ expect { RbNaCl::Util.verify32!(msg, short_msg) }.to raise_error(RbNaCl::LengthError)
24
24
  end
25
25
  it "raises descriptively on a long message in position 1" do
26
- expect { Crypto::Util.verify32!(long_msg, msg) }.to raise_error(Crypto::LengthError)
26
+ expect { RbNaCl::Util.verify32!(long_msg, msg) }.to raise_error(RbNaCl::LengthError)
27
27
  end
28
28
  it "raises descriptively on a long message in position 2" do
29
- expect { Crypto::Util.verify32!(msg, long_msg) }.to raise_error(Crypto::LengthError)
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 (:msg) { Crypto::Util.zeros(32) }
35
- let (:identical_msg) { Crypto::Util.zeros(32) }
36
- let (:other_msg) { Crypto::Util.zeros(31) + "\001" }
37
- let (:short_msg) { Crypto::Util.zeros(31) }
38
- let (:long_msg) { Crypto::Util.zeros(33) }
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
- Crypto::Util.verify32(msg, identical_msg).should be true
41
+ RbNaCl::Util.verify32(msg, identical_msg).should be true
42
42
  end
43
43
 
44
44
  it "confirms non-identical messages are non-identical" do
45
- Crypto::Util.verify32(msg, other_msg).should be false
46
- Crypto::Util.verify32(other_msg, msg).should be false
47
- Crypto::Util.verify32(short_msg, msg).should be false
48
- Crypto::Util.verify32(msg, short_msg).should be false
49
- Crypto::Util.verify32(long_msg, msg).should be false
50
- Crypto::Util.verify32(msg, long_msg).should be false
45
+ RbNaCl::Util.verify32(msg, other_msg).should be false
46
+ RbNaCl::Util.verify32(other_msg, msg).should be false
47
+ RbNaCl::Util.verify32(short_msg, msg).should be false
48
+ RbNaCl::Util.verify32(msg, short_msg).should be false
49
+ RbNaCl::Util.verify32(long_msg, msg).should be false
50
+ RbNaCl::Util.verify32(msg, long_msg).should be false
51
51
  end
52
52
 
53
53
  end
54
54
 
55
55
  context ".verify16!" do
56
- let (:msg) { Crypto::Util.zeros(16) }
57
- let (:identical_msg) { Crypto::Util.zeros(16) }
58
- let (:other_msg) { Crypto::Util.zeros(15) + "\001" }
59
- let (:short_msg) { Crypto::Util.zeros(15) }
60
- let (:long_msg) { Crypto::Util.zeros(17) }
56
+ let (:msg) { RbNaCl::Util.zeros(16) }
57
+ let (:identical_msg) { RbNaCl::Util.zeros(16) }
58
+ let (:other_msg) { RbNaCl::Util.zeros(15) + "\001" }
59
+ let (:short_msg) { RbNaCl::Util.zeros(15) }
60
+ let (:long_msg) { RbNaCl::Util.zeros(17) }
61
61
 
62
62
  it "confirms identical messages are identical" do
63
- Crypto::Util.verify16!(msg, identical_msg).should be true
63
+ RbNaCl::Util.verify16!(msg, identical_msg).should be true
64
64
  end
65
65
 
66
66
  it "confirms non-identical messages are non-identical" do
67
- Crypto::Util.verify16!(msg, other_msg).should be false
68
- Crypto::Util.verify16!(other_msg, msg).should be false
67
+ RbNaCl::Util.verify16!(msg, other_msg).should be false
68
+ RbNaCl::Util.verify16!(other_msg, msg).should be false
69
69
  end
70
70
 
71
71
  it "raises descriptively on a short message in position 1" do
72
- expect { Crypto::Util.verify16!(short_msg, msg) }.to raise_error(Crypto::LengthError)
72
+ expect { RbNaCl::Util.verify16!(short_msg, msg) }.to raise_error(RbNaCl::LengthError)
73
73
  end
74
74
  it "raises descriptively on a short message in position 2" do
75
- expect { Crypto::Util.verify16!(msg, short_msg) }.to raise_error(Crypto::LengthError)
75
+ expect { RbNaCl::Util.verify16!(msg, short_msg) }.to raise_error(RbNaCl::LengthError)
76
76
  end
77
77
  it "raises descriptively on a long message in position 1" do
78
- expect { Crypto::Util.verify16!(long_msg, msg) }.to raise_error(Crypto::LengthError)
78
+ expect { RbNaCl::Util.verify16!(long_msg, msg) }.to raise_error(RbNaCl::LengthError)
79
79
  end
80
80
  it "raises descriptively on a long message in position 2" do
81
- expect { Crypto::Util.verify16!(msg, long_msg) }.to raise_error(Crypto::LengthError)
81
+ expect { RbNaCl::Util.verify16!(msg, long_msg) }.to raise_error(RbNaCl::LengthError)
82
82
  end
83
83
  end
84
84
 
85
85
  context ".verify16" do
86
- let (:msg) { Crypto::Util.zeros(16) }
87
- let (:identical_msg) { Crypto::Util.zeros(16) }
88
- let (:other_msg) { Crypto::Util.zeros(15) + "\001" }
89
- let (:short_msg) { Crypto::Util.zeros(15) }
90
- let (:long_msg) { Crypto::Util.zeros(17) }
86
+ let (:msg) { RbNaCl::Util.zeros(16) }
87
+ let (:identical_msg) { RbNaCl::Util.zeros(16) }
88
+ let (:other_msg) { RbNaCl::Util.zeros(15) + "\001" }
89
+ let (:short_msg) { RbNaCl::Util.zeros(15) }
90
+ let (:long_msg) { RbNaCl::Util.zeros(17) }
91
91
 
92
92
  it "confirms identical messages are identical" do
93
- Crypto::Util.verify16(msg, identical_msg).should be true
93
+ RbNaCl::Util.verify16(msg, identical_msg).should be true
94
94
  end
95
95
 
96
96
  it "confirms non-identical messages are non-identical" do
97
- Crypto::Util.verify16(msg, other_msg).should be false
98
- Crypto::Util.verify16(other_msg, msg).should be false
99
- Crypto::Util.verify16(short_msg, msg).should be false
100
- Crypto::Util.verify16(msg, short_msg).should be false
101
- Crypto::Util.verify16(long_msg, msg).should be false
102
- Crypto::Util.verify16(msg, long_msg).should be false
97
+ RbNaCl::Util.verify16(msg, other_msg).should be false
98
+ RbNaCl::Util.verify16(other_msg, msg).should be false
99
+ RbNaCl::Util.verify16(short_msg, msg).should be false
100
+ RbNaCl::Util.verify16(msg, short_msg).should be false
101
+ RbNaCl::Util.verify16(long_msg, msg).should be false
102
+ RbNaCl::Util.verify16(msg, long_msg).should be false
103
103
  end
104
104
  end
105
+
105
106
  context "check_length" do
106
107
  it "accepts strings of the correct length" do
107
- expect { Crypto::Util.check_length("A"*4, 4, "Test String") }.not_to raise_error
108
+ expect { RbNaCl::Util.check_length("A"*4, 4, "Test String") }.not_to raise_error
108
109
  end
109
110
  it "rejects strings which are too short" do
110
- expect { Crypto::Util.check_length("A"*3, 4, "Test String") }.to raise_error(Crypto::LengthError, "Test String was 3 bytes (Expected 4)")
111
+ expect { RbNaCl::Util.check_length("A"*3, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 3 bytes (Expected 4)")
111
112
  end
112
113
  it "rejects strings which are too long" do
113
- expect { Crypto::Util.check_length("A"*5, 4, "Test String") }.to raise_error(Crypto::LengthError, "Test String was 5 bytes (Expected 4)")
114
+ expect { RbNaCl::Util.check_length("A"*5, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was 5 bytes (Expected 4)")
114
115
  end
115
116
  it "rejects nil strings" do
116
- expect { Crypto::Util.check_length(nil, 4, "Test String") }.to raise_error(Crypto::LengthError, "Test String was nil (Expected 4)")
117
+ expect { RbNaCl::Util.check_length(nil, 4, "Test String") }.to raise_error(RbNaCl::LengthError, "Test String was nil (Expected 4)")
118
+ end
119
+ end
120
+
121
+ context "hex encoding" do
122
+ let (:bytes) { [0xDE,0xAD,0xBE,0xEF].pack('c*') }
123
+ let (:hex) { "deadbeef" }
124
+
125
+ it "encodes to hex with bin2hex" do
126
+ RbNaCl::Util.bin2hex(bytes).should eq hex
127
+ end
128
+
129
+ it "decodes from hex with hex2bin" do
130
+ RbNaCl::Util.hex2bin(hex).should eq bytes
117
131
  end
118
132
  end
119
133
  end
@@ -1,29 +1,27 @@
1
1
  # encoding: binary
2
2
  shared_examples "authenticator" do
3
- let (:hex_key) { hex_vector :auth_key }
4
- let (:key) { test_vector :auth_key }
5
- let (:message) { test_vector :auth_message }
6
- let (:tag) { hex2bytes hex_tag }
3
+ let (:key) { vector :auth_key }
4
+ let (:message) { vector :auth_message }
7
5
 
8
6
  context ".new" do
9
7
  it "accepts a key" do
10
- expect { described_class.new(key) }.to_not raise_error(ArgumentError)
8
+ expect { described_class.new(key) }.to_not raise_error(ArgumentError)
11
9
  end
12
10
 
13
11
  it "requires a key" do
14
- expect { described_class.new }.to raise_error(ArgumentError)
12
+ expect { described_class.new }.to raise_error(ArgumentError)
15
13
  end
16
14
 
17
- it "raises on a nil key" do
18
- expect { described_class.new(nil) }.to raise_error(ArgumentError)
15
+ it "raises TypeError on a nil key" do
16
+ expect { described_class.new(nil) }.to raise_error(TypeError)
19
17
  end
20
18
 
21
- it "raises on a key which is too long" do
22
- expect { described_class.new("\0"*33) }.to raise_error(ArgumentError)
19
+ it "raises ArgumentError on a key which is too long" do
20
+ expect { described_class.new("\0"*33) }.to raise_error(ArgumentError)
23
21
  end
24
22
 
25
- it "raises on a key which is too short" do
26
- expect { described_class.new("\0"*31) }.to raise_error(ArgumentError)
23
+ it "raises ArgumentError on a key which is too short" do
24
+ expect { described_class.new("\0"*31) }.to raise_error(ArgumentError)
27
25
  end
28
26
  end
29
27
 
@@ -32,36 +30,38 @@ shared_examples "authenticator" do
32
30
  described_class.auth(key, message).should eq tag
33
31
  end
34
32
 
35
- it "raises on a nil key" do
36
- expect { described_class.auth(nil, message) }.to raise_error(ArgumentError)
33
+ it "raises TypeError on a nil key" do
34
+ expect { described_class.auth(nil, message) }.to raise_error(TypeError)
37
35
  end
38
36
 
39
- it "raises on a key which is too long" do
40
- expect { described_class.auth("\0"*33, message) }.to raise_error(ArgumentError)
37
+ it "raises ArgumentError on a key which is too long" do
38
+ expect { described_class.auth("\0"*33, message) }.to raise_error(ArgumentError)
41
39
  end
42
40
  end
43
41
 
44
42
  context ".verify" do
45
43
  it "verify an authenticator" do
46
- described_class.verify(key, message, tag).should eq true
44
+ described_class.verify(key, tag, message).should eq true
47
45
  end
48
46
 
49
- it "raises on a nil key" do
50
- expect { described_class.verify(nil, message, tag) }.to raise_error(ArgumentError)
47
+ it "raises TypeError on a nil key" do
48
+ expect { described_class.verify(nil, tag, message) }.to raise_error(TypeError)
51
49
  end
52
50
 
53
- it "raises on a key which is too long" do
54
- expect { described_class.verify("\0"*33, message, tag) }.to raise_error(ArgumentError)
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)
55
53
  end
56
54
 
57
55
  it "fails to validate an invalid authenticator" do
58
- described_class.verify(key, message+"\0", tag ).should be false
56
+ described_class.verify(key, tag, message+"\0").should be false
59
57
  end
58
+
60
59
  it "fails to validate a short authenticator" do
61
- described_class.verify(key, message, tag[0,tag.bytesize - 2]).should be false
60
+ described_class.verify(key, tag[0,tag.bytesize - 2], message).should be false
62
61
  end
62
+
63
63
  it "fails to validate a long authenticator" do
64
- described_class.verify(key, message, tag+"\0").should be false
64
+ described_class.verify(key, tag+"\0", message).should be false
65
65
  end
66
66
  end
67
67
 
@@ -73,41 +73,23 @@ shared_examples "authenticator" do
73
73
  it "produces an authenticator" do
74
74
  authenticator.auth(message).should eq tag
75
75
  end
76
-
77
- it "produces a hex encoded authenticator" do
78
- authenticator.auth(message, :hex).should eq hex_tag
79
- end
80
76
  end
81
77
 
82
78
  context "#verify" do
83
- context "raw bytes" do
84
- it "verifies an authenticator" do
85
- authenticator.verify(message, tag).should be true
86
- end
87
- it "fails to validate an invalid authenticator" do
88
- authenticator.verify(tag, message+"\0").should be false
89
- end
90
- it "fails to validate a short authenticator" do
91
- authenticator.verify(tag[0,tag.bytesize - 2], message).should be false
92
- end
93
- it "fails to validate a long authenticator" do
94
- authenticator.verify(tag+"\0", message).should be false
95
- end
79
+ it "verifies an authenticator" do
80
+ authenticator.verify(tag, message).should be true
81
+ end
82
+
83
+ it "fails to validate an invalid authenticator" do
84
+ authenticator.verify(tag, message+"\0").should be false
85
+ end
86
+
87
+ it "fails to validate a short authenticator" do
88
+ authenticator.verify(tag[0,tag.bytesize - 2], message).should be false
96
89
  end
97
90
 
98
- context "hex" do
99
- it "verifies an hexencoded authenticator" do
100
- authenticator.verify(message, hex_tag, :hex).should be true
101
- end
102
- it "fails to validate an invalid authenticator" do
103
- authenticator.verify(message+"\0", hex_tag , :hex).should be false
104
- end
105
- it "fails to validate a short authenticator" do
106
- authenticator.verify( message, hex_tag[0,hex_tag.bytesize - 2], :hex).should be false
107
- end
108
- it "fails to validate a long authenticator" do
109
- authenticator.verify(message, hex_tag+"00", :hex).should be false
110
- end
91
+ it "fails to validate a long authenticator" do
92
+ authenticator.verify(tag+"\0", message).should be false
111
93
  end
112
94
  end
113
95
  end
@@ -3,12 +3,12 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  shared_examples "box" do
6
- let(:nonce) { test_vector :box_nonce }
6
+ let(:nonce) { vector :box_nonce }
7
7
  let(:invalid_nonce) { nonce[0,12] } # too short!
8
8
  let(:invalid_nonce_long) { nonce + nonce } # too long!
9
- let(:message) { test_vector :box_message }
10
- let(:ciphertext) { test_vector :box_ciphertext }
11
- let (:nonce_error_regex) { /Nonce.*(Expected #{Crypto::NaCl::NONCEBYTES})/ }
9
+ let(:message) { vector :box_message }
10
+ let(:ciphertext) { vector :box_ciphertext }
11
+ let (:nonce_error_regex) { /Nonce.*(Expected #{box.nonce_bytes})/ }
12
12
  let(:corrupt_ciphertext) { ciphertext[80] = " " } # picked at random by fair diceroll
13
13
 
14
14
  context "box" do
@@ -18,11 +18,11 @@ shared_examples "box" do
18
18
  end
19
19
 
20
20
  it "raises on a short nonce" do
21
- expect { box.box(invalid_nonce, message) }.to raise_error(Crypto::LengthError, nonce_error_regex)
21
+ expect { box.box(invalid_nonce, message) }.to raise_error(RbNaCl::LengthError, nonce_error_regex)
22
22
  end
23
23
 
24
24
  it "raises on a long nonce" do
25
- expect { box.box(invalid_nonce_long, message) }.to raise_error(Crypto::LengthError, nonce_error_regex)
25
+ expect { box.box(invalid_nonce_long, message) }.to raise_error(RbNaCl::LengthError, nonce_error_regex)
26
26
  end
27
27
  end
28
28
 
@@ -33,19 +33,19 @@ shared_examples "box" do
33
33
  end
34
34
 
35
35
  it "raises on a truncated message to decrypt" do
36
- expect { box.open(nonce, ciphertext[0, 64]) }.to raise_error(Crypto::CryptoError, /Decryption failed. Ciphertext failed verification./)
36
+ expect { box.open(nonce, ciphertext[0, 64]) }.to raise_error(RbNaCl::CryptoError, /Decryption failed. Ciphertext failed verification./)
37
37
  end
38
38
 
39
39
  it "raises on a corrupt ciphertext" do
40
- expect { box.open(nonce, corrupt_ciphertext) }.to raise_error(Crypto::CryptoError, /Decryption failed. Ciphertext failed verification./)
40
+ expect { box.open(nonce, corrupt_ciphertext) }.to raise_error(RbNaCl::CryptoError, /Decryption failed. Ciphertext failed verification./)
41
41
  end
42
42
 
43
43
  it "raises on a short nonce" do
44
- expect { box.open(invalid_nonce, message) }.to raise_error(Crypto::LengthError, nonce_error_regex)
44
+ expect { box.open(invalid_nonce, message) }.to raise_error(RbNaCl::LengthError, nonce_error_regex)
45
45
  end
46
46
 
47
47
  it "raises on a long nonce" do
48
- expect { box.open(invalid_nonce_long, message) }.to raise_error(Crypto::LengthError, nonce_error_regex)
48
+ expect { box.open(invalid_nonce_long, message) }.to raise_error(RbNaCl::LengthError, nonce_error_regex)
49
49
  end
50
50
  end
51
51
  end