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/serializable.rb
CHANGED
@@ -2,14 +2,19 @@
|
|
2
2
|
module RbNaCl
|
3
3
|
# Serialization features shared across all "key-like" classes
|
4
4
|
module Serializable
|
5
|
-
def to_s
|
6
|
-
|
5
|
+
def to_s
|
6
|
+
to_bytes
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_str
|
10
|
+
to_bytes
|
11
|
+
end
|
7
12
|
|
8
13
|
# Inspect this key
|
9
14
|
#
|
10
15
|
# @return [String] a string representing this key
|
11
16
|
def inspect
|
12
|
-
"#<#{self.class}:#{Util.bin2hex(to_bytes)[0,8]}>"
|
17
|
+
"#<#{self.class}:#{Util.bin2hex(to_bytes)[0, 8]}>"
|
13
18
|
end
|
14
19
|
end
|
15
|
-
end
|
20
|
+
end
|
@@ -23,7 +23,7 @@ module RbNaCl
|
|
23
23
|
include KeyComparator
|
24
24
|
include Serializable
|
25
25
|
|
26
|
-
extend
|
26
|
+
extend Sodium
|
27
27
|
|
28
28
|
sodium_type :sign
|
29
29
|
sodium_primitive :ed25519
|
@@ -58,10 +58,11 @@ module RbNaCl
|
|
58
58
|
pk = Util.zeros(Ed25519::VERIFYKEYBYTES)
|
59
59
|
sk = Util.zeros(Ed25519::SIGNINGKEYBYTES)
|
60
60
|
|
61
|
-
self.class.sign_ed25519_seed_keypair(pk, sk, seed) ||
|
61
|
+
self.class.sign_ed25519_seed_keypair(pk, sk, seed) || fail(CryptoError, "Failed to generate a key pair")
|
62
62
|
|
63
|
-
@seed
|
64
|
-
@
|
63
|
+
@seed = seed
|
64
|
+
@signing_key = sk
|
65
|
+
@verify_key = VerifyKey.new(pk)
|
65
66
|
end
|
66
67
|
|
67
68
|
# Sign a message using this key
|
@@ -81,23 +82,30 @@ module RbNaCl
|
|
81
82
|
# Return the raw seed value of this key
|
82
83
|
#
|
83
84
|
# @return [String] seed used to create this key
|
84
|
-
def to_bytes
|
85
|
+
def to_bytes
|
86
|
+
@seed
|
87
|
+
end
|
85
88
|
|
86
89
|
# The crypto primitive this SigningKey class uses for signatures
|
87
90
|
#
|
88
91
|
# @return [Symbol] The primitive
|
89
|
-
def primitive
|
92
|
+
def primitive
|
93
|
+
self.class.primitive
|
94
|
+
end
|
90
95
|
|
91
96
|
# The size of signatures generated by the SigningKey class
|
92
97
|
#
|
93
98
|
# @return [Integer] The number of bytes in a signature
|
94
|
-
def self.signature_bytes
|
99
|
+
def self.signature_bytes
|
100
|
+
Ed25519::SIGNATUREBYTES
|
101
|
+
end
|
95
102
|
|
96
103
|
# The size of signatures generated by the SigningKey instance
|
97
104
|
#
|
98
105
|
# @return [Integer] The number of bytes in a signature
|
99
|
-
def signature_bytes
|
100
|
-
|
106
|
+
def signature_bytes
|
107
|
+
Ed25519::SIGNATUREBYTES
|
108
|
+
end
|
101
109
|
end
|
102
110
|
end
|
103
111
|
end
|
@@ -12,7 +12,7 @@ module RbNaCl
|
|
12
12
|
include KeyComparator
|
13
13
|
include Serializable
|
14
14
|
|
15
|
-
extend
|
15
|
+
extend Sodium
|
16
16
|
|
17
17
|
sodium_type :sign
|
18
18
|
sodium_primitive :ed25519
|
@@ -50,28 +50,39 @@ module RbNaCl
|
|
50
50
|
buffer = Util.zeros(sig_and_msg.bytesize)
|
51
51
|
buffer_len = Util.zeros(FFI::Type::LONG_LONG.size)
|
52
52
|
|
53
|
-
self.class.sign_ed25519_open(buffer, buffer_len, sig_and_msg, sig_and_msg.bytesize, @key)
|
53
|
+
success = self.class.sign_ed25519_open(buffer, buffer_len, sig_and_msg, sig_and_msg.bytesize, @key)
|
54
|
+
fail(BadSignatureError, "signature was forged/corrupt") unless success
|
55
|
+
|
56
|
+
true
|
54
57
|
end
|
55
58
|
|
56
59
|
# Return the raw key in byte format
|
57
60
|
#
|
58
61
|
# @return [String] raw key as bytes
|
59
|
-
def to_bytes
|
62
|
+
def to_bytes
|
63
|
+
@key
|
64
|
+
end
|
60
65
|
|
61
66
|
# The crypto primitive this VerifyKey class uses for signatures
|
62
67
|
#
|
63
68
|
# @return [Symbol] The primitive
|
64
|
-
def primitive
|
69
|
+
def primitive
|
70
|
+
self.class.primitive
|
71
|
+
end
|
65
72
|
|
66
73
|
# The size of signatures verified by the VerifyKey class
|
67
74
|
#
|
68
75
|
# @return [Integer] The number of bytes in a signature
|
69
|
-
def self.signature_bytes
|
76
|
+
def self.signature_bytes
|
77
|
+
Ed25519::SIGNATUREBYTES
|
78
|
+
end
|
70
79
|
|
71
80
|
# The size of signatures verified by the VerifyKey instance
|
72
81
|
#
|
73
82
|
# @return [Integer] The number of bytes in a signature
|
74
|
-
def signature_bytes
|
83
|
+
def signature_bytes
|
84
|
+
Ed25519::SIGNATUREBYTES
|
85
|
+
end
|
75
86
|
end
|
76
87
|
end
|
77
88
|
end
|
data/lib/rbnacl/simple_box.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "forwardable"
|
3
|
+
|
4
|
+
# NaCl/libsodium for Ruby
|
3
5
|
module RbNaCl
|
4
6
|
# The simplest nonce strategy that could possibly work
|
5
7
|
#
|
@@ -78,7 +80,7 @@ module RbNaCl
|
|
78
80
|
cipher_text = @box.box(nonce, message)
|
79
81
|
nonce + cipher_text
|
80
82
|
end
|
81
|
-
|
83
|
+
alias_method :encrypt, :box
|
82
84
|
|
83
85
|
# Decrypts the ciphertext with a random nonce
|
84
86
|
#
|
@@ -94,9 +96,10 @@ module RbNaCl
|
|
94
96
|
nonce, ciphertext = extract_nonce(enciphered_message.to_s)
|
95
97
|
@box.open(nonce, ciphertext)
|
96
98
|
end
|
97
|
-
|
99
|
+
alias_method :decrypt, :open
|
98
100
|
|
99
101
|
private
|
102
|
+
|
100
103
|
def generate_nonce
|
101
104
|
Random.random_bytes(nonce_bytes)
|
102
105
|
end
|
data/lib/rbnacl/sodium.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: binary
|
2
|
-
require
|
2
|
+
require "ffi"
|
3
3
|
|
4
4
|
module RbNaCl
|
5
5
|
# Provides helpers for defining the libsodium bindings
|
@@ -9,11 +9,10 @@ module RbNaCl
|
|
9
9
|
if defined?(RBNACL_LIBSODIUM_GEM_LIB_PATH)
|
10
10
|
klass.ffi_lib RBNACL_LIBSODIUM_GEM_LIB_PATH
|
11
11
|
else
|
12
|
-
klass.ffi_lib
|
12
|
+
klass.ffi_lib "sodium"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
16
|
def sodium_type(type = nil)
|
18
17
|
return @type if type.nil?
|
19
18
|
@type = type
|
@@ -28,14 +27,14 @@ module RbNaCl
|
|
28
27
|
sodium_primitive
|
29
28
|
end
|
30
29
|
|
31
|
-
def sodium_constant(constant, name=constant)
|
30
|
+
def sodium_constant(constant, name = constant)
|
32
31
|
fn = "crypto_#{sodium_type}_#{sodium_primitive}_#{constant.to_s.downcase}"
|
33
|
-
attach_function fn, [], :
|
34
|
-
|
32
|
+
attach_function fn, [], :size_t
|
33
|
+
const_set(name, public_send(fn))
|
35
34
|
end
|
36
35
|
|
37
36
|
def sodium_function(name, function, arguments)
|
38
|
-
|
37
|
+
module_eval <<-eos, __FILE__, __LINE__ + 1
|
39
38
|
attach_function #{function.inspect}, #{arguments.inspect}, :int
|
40
39
|
def self.#{name}(*args)
|
41
40
|
ret = #{function}(*args)
|
@@ -1,7 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "rbnacl/sodium"
|
2
2
|
|
3
3
|
module RbNaCl
|
4
4
|
module Sodium
|
5
|
+
# libsodium version API
|
5
6
|
module Version
|
6
7
|
MINIMUM_LIBSODIUM_VERSION = "0.4.3"
|
7
8
|
|
@@ -16,7 +17,7 @@ module RbNaCl
|
|
16
17
|
|
17
18
|
case installed_version <=> minimum_version
|
18
19
|
when -1
|
19
|
-
|
20
|
+
fail "Sorry, you need to install libsodium #{MINIMUM_LIBSODIUM_VERSION}+. You have #{Version::STRING} installed"
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
data/lib/rbnacl/test_vectors.rb
CHANGED
@@ -1,113 +1,115 @@
|
|
1
1
|
# encoding: binary
|
2
|
+
|
3
|
+
# NaCl/libsodium for Ruby
|
2
4
|
module RbNaCl
|
3
5
|
# Reference library of test vectors used to verify the software is correct
|
4
|
-
|
6
|
+
TEST_VECTORS = {
|
5
7
|
#
|
6
8
|
# Curve25519 test vectors
|
7
9
|
# Taken from the NaCl distribution
|
8
10
|
#
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
11
|
+
alice_private: "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a",
|
12
|
+
alice_public: "8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a",
|
13
|
+
bob_private: "5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb",
|
14
|
+
bob_public: "de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f",
|
15
|
+
alice_mult_bob: "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742",
|
14
16
|
|
15
17
|
#
|
16
18
|
# Box test vectors
|
17
19
|
# Taken from the NaCl distribution
|
18
20
|
#
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
"e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31"
|
23
|
-
"0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde"
|
24
|
-
"048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864"
|
21
|
+
secret_key: "1b27556473e985d462cd51197a9a46c76009549eac6474f206c4ee0844f68389",
|
22
|
+
box_nonce: "69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37",
|
23
|
+
box_message: "be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc" \
|
24
|
+
"e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31" \
|
25
|
+
"0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde" \
|
26
|
+
"048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864" \
|
25
27
|
"5e0705",
|
26
28
|
|
27
|
-
:
|
28
|
-
"48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972"
|
29
|
-
"71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae"
|
30
|
-
"90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3"
|
29
|
+
box_ciphertext: "f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce" \
|
30
|
+
"48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972" \
|
31
|
+
"71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae" \
|
32
|
+
"90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3" \
|
31
33
|
"7973f622a43d14a6599b1f654cb45a74e355a5",
|
32
34
|
|
33
35
|
#
|
34
36
|
# Ed25519 test vectors
|
35
37
|
# Taken from the Python test vectors: http://ed25519.cr.yp.to/python/sign.input
|
36
38
|
#
|
37
|
-
:
|
38
|
-
:
|
39
|
-
:
|
40
|
-
"ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01"
|
41
|
-
"dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313"
|
42
|
-
"c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460"
|
39
|
+
sign_private: "b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd",
|
40
|
+
sign_public: "77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb",
|
41
|
+
sign_message: "916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171" \
|
42
|
+
"ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01" \
|
43
|
+
"dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313" \
|
44
|
+
"c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460" \
|
43
45
|
"376d7f3ac22ff372c18f613f2ae2e856af40",
|
44
|
-
:
|
46
|
+
sign_signature: "6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b" \
|
45
47
|
"4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509",
|
46
48
|
|
47
49
|
#
|
48
50
|
# SHA256 test vectors
|
49
51
|
# Taken from the NSRL test vectors: http://www.nsrl.nist.gov/testdata/
|
50
|
-
:
|
52
|
+
sha256_message: "6162636462636465636465666465666765666768666768696768696a68696a6b" \
|
51
53
|
"696a6b6c6a6b6c6d6b6c6d6e6c6d6e6f6d6e6f706e6f7071",
|
52
|
-
:
|
53
|
-
:
|
54
|
+
sha256_digest: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
|
55
|
+
sha256_empty: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
54
56
|
|
55
57
|
#
|
56
58
|
# SHA512 test vectors
|
57
59
|
# self-created (FIXME: find standard test vectors)
|
58
|
-
:
|
60
|
+
sha512_message: "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" \
|
59
61
|
"6865206c617a7920646f672e",
|
60
|
-
:
|
62
|
+
sha512_digest: "91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bb" \
|
61
63
|
"c6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed",
|
62
|
-
:
|
64
|
+
sha512_empty: "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" \
|
63
65
|
"47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
|
64
66
|
|
65
67
|
# Blake2b test vectors
|
66
68
|
# self-created? (TODO: double check, fix)
|
67
|
-
:
|
69
|
+
blake2b_message: "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" \
|
68
70
|
"6865206c617a7920646f67",
|
69
|
-
:
|
71
|
+
blake2b_digest: "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673" \
|
70
72
|
"f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918",
|
71
|
-
:
|
73
|
+
blake2b_empty: "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" \
|
72
74
|
"d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce",
|
73
75
|
|
74
76
|
# from the Blake2 paper(?) (TODO: double check)
|
75
|
-
:
|
76
|
-
"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
|
77
|
-
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f"
|
78
|
-
"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f"
|
79
|
-
"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f"
|
80
|
-
"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
|
81
|
-
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
|
77
|
+
blake2b_keyed_message: "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" \
|
78
|
+
"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" \
|
79
|
+
"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f" \
|
80
|
+
"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" \
|
81
|
+
"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f" \
|
82
|
+
"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" \
|
83
|
+
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf" \
|
82
84
|
"e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
|
83
|
-
:
|
85
|
+
blake2b_key: "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" \
|
84
86
|
"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
|
85
|
-
:
|
87
|
+
blake2b_keyed_digest: "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e9248" \
|
86
88
|
"4be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461",
|
87
89
|
|
88
90
|
# scrypt test vectors
|
89
91
|
# Taken from http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#page-14
|
90
|
-
:
|
91
|
-
"82ad86b83c8f20a23dbb74f6da60b0b6ecffd67134d45946ac8ebfb3064294bc"
|
92
|
+
scrypt_password: "4a857e2ee8aa9b6056f2424e84d24a72473378906ee04a46cb05311502d5250b" \
|
93
|
+
"82ad86b83c8f20a23dbb74f6da60b0b6ecffd67134d45946ac8ebfb3064294bc" \
|
92
94
|
"097d43ced68642bfb8bbbdd0f50b30118f5e",
|
93
|
-
:
|
94
|
-
:
|
95
|
-
:
|
96
|
-
:
|
95
|
+
scrypt_salt: "39d82eef32010b8b79cc5ba88ed539fbaba741100f2edbeca7cc171ffeabf258",
|
96
|
+
scrypt_opslimit: 758_010,
|
97
|
+
scrypt_memlimit: 5_432_947,
|
98
|
+
scrypt_digest: "bcc5c2fd785e4781d1201ed43d84925537e2a540d3de55f5812f29e9dd0a4a00" \
|
97
99
|
"451a5c8ddbb4862c03d45c75bf91b7fb49265feb667ad5c899fdbf2ca19eac67",
|
98
100
|
|
99
101
|
# Auth test vectors
|
100
102
|
# Taken from NaCl distribution
|
101
103
|
#
|
102
|
-
:
|
103
|
-
:
|
104
|
-
"c0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738"
|
105
|
-
"b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da"
|
106
|
-
"99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74"
|
104
|
+
auth_key: "eea6a7251c1e72916d11c2cb214d3c252539121d8e234e652d651fa4c8cff880",
|
105
|
+
auth_message: "8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186a" \
|
106
|
+
"c0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738" \
|
107
|
+
"b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da" \
|
108
|
+
"99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74" \
|
107
109
|
"e355a5",
|
108
|
-
:
|
110
|
+
auth_onetime: "f3ffc7703f9400e52a7dfb4b3d3305d9",
|
109
111
|
# self-created (FIXME: find standard test vectors)
|
110
|
-
:
|
111
|
-
:
|
112
|
+
auth_hmacsha256: "7f7b9b707e8790ca8620ff94df5e6533ddc8e994060ce310c9d7de04d44aabc3",
|
113
|
+
auth_hmacsha512256: "b2a31b8d4e01afcab2ee545b5caf4e3d212a99d7b3a116a97cec8e83c32e107d"
|
112
114
|
}
|
113
115
|
end
|
data/lib/rbnacl/util.rb
CHANGED
@@ -6,7 +6,9 @@ module RbNaCl
|
|
6
6
|
|
7
7
|
sodium_function :c_verify16, :crypto_verify_16, [:pointer, :pointer]
|
8
8
|
sodium_function :c_verify32, :crypto_verify_32, [:pointer, :pointer]
|
9
|
+
|
9
10
|
module_function
|
11
|
+
|
10
12
|
# Returns a string of n zeros
|
11
13
|
#
|
12
14
|
# Lots of the functions require us to create strings to pass into functions of a specified size.
|
@@ -14,11 +16,11 @@ module RbNaCl
|
|
14
16
|
# @param [Integer] n the size of the string to make
|
15
17
|
#
|
16
18
|
# @return [String] A nice collection of zeros
|
17
|
-
def zeros(n=32)
|
19
|
+
def zeros(n = 32)
|
18
20
|
zeros = "\0" * n
|
19
21
|
# make sure they're 8-bit zeros, not 7-bit zeros. Otherwise we might get
|
20
22
|
# encoding errors later
|
21
|
-
zeros.respond_to?(:force_encoding) ? zeros.force_encoding(
|
23
|
+
zeros.respond_to?(:force_encoding) ? zeros.force_encoding("ASCII-8BIT") : zeros
|
22
24
|
end
|
23
25
|
|
24
26
|
# Prepends a message with zeros
|
@@ -57,15 +59,15 @@ module RbNaCl
|
|
57
59
|
# @param description [String] Description of the string (used in the error)
|
58
60
|
def check_length(string, length, description)
|
59
61
|
if string.nil?
|
60
|
-
|
61
|
-
|
62
|
-
|
62
|
+
fail LengthError,
|
63
|
+
"#{description} was nil (Expected #{length.to_int})",
|
64
|
+
caller
|
63
65
|
end
|
64
66
|
|
65
67
|
if string.bytesize != length.to_int
|
66
|
-
|
67
|
-
|
68
|
-
|
68
|
+
fail LengthError,
|
69
|
+
"#{description} was #{string.bytesize} bytes (Expected #{length.to_int})",
|
70
|
+
caller
|
69
71
|
end
|
70
72
|
true
|
71
73
|
end
|
@@ -83,12 +85,12 @@ module RbNaCl
|
|
83
85
|
# @param description [String] Description of the string (used in the error)
|
84
86
|
def check_string(string, length, description)
|
85
87
|
unless string.respond_to? :to_str
|
86
|
-
|
88
|
+
fail TypeError, "can't convert #{string.class} into String with #to_str"
|
87
89
|
end
|
88
90
|
|
89
91
|
string = string.to_str
|
90
92
|
unless string.encoding == Encoding::BINARY
|
91
|
-
|
93
|
+
fail EncodingError, "strings must use BINARY encoding (got #{string.encoding})"
|
92
94
|
end
|
93
95
|
check_length(string, length, description)
|
94
96
|
|
@@ -180,4 +182,3 @@ module RbNaCl
|
|
180
182
|
end
|
181
183
|
end
|
182
184
|
end
|
183
|
-
|