rbnacl 3.1.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -0
  3. data/.travis.yml +4 -3
  4. data/CHANGES.md +5 -0
  5. data/Gemfile +8 -3
  6. data/Guardfile +1 -1
  7. data/README.md +5 -6
  8. data/Rakefile +3 -2
  9. data/lib/rbnacl.rb +1 -1
  10. data/lib/rbnacl/auth.rb +21 -8
  11. data/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb +17 -13
  12. data/lib/rbnacl/boxes/curve25519xsalsa20poly1305/private_key.rb +68 -65
  13. data/lib/rbnacl/boxes/curve25519xsalsa20poly1305/public_key.rb +49 -47
  14. data/lib/rbnacl/group_elements/curve25519.rb +14 -8
  15. data/lib/rbnacl/hash.rb +2 -2
  16. data/lib/rbnacl/hash/blake2b.rb +13 -13
  17. data/lib/rbnacl/hash/sha256.rb +5 -5
  18. data/lib/rbnacl/hash/sha512.rb +5 -5
  19. data/lib/rbnacl/hmac/sha256.rb +12 -11
  20. data/lib/rbnacl/hmac/sha512256.rb +11 -10
  21. data/lib/rbnacl/init.rb +1 -1
  22. data/lib/rbnacl/key_comparator.rb +3 -3
  23. data/lib/rbnacl/one_time_auths/poly1305.rb +4 -4
  24. data/lib/rbnacl/password_hash/scrypt.rb +10 -11
  25. data/lib/rbnacl/random.rb +2 -2
  26. data/lib/rbnacl/secret_boxes/xsalsa20poly1305.rb +28 -14
  27. data/lib/rbnacl/self_test.rb +17 -37
  28. data/lib/rbnacl/serializable.rb +9 -4
  29. data/lib/rbnacl/signatures/ed25519.rb +1 -0
  30. data/lib/rbnacl/signatures/ed25519/signing_key.rb +17 -9
  31. data/lib/rbnacl/signatures/ed25519/verify_key.rb +17 -6
  32. data/lib/rbnacl/simple_box.rb +6 -3
  33. data/lib/rbnacl/sodium.rb +6 -7
  34. data/lib/rbnacl/sodium/version.rb +3 -2
  35. data/lib/rbnacl/test_vectors.rb +57 -55
  36. data/lib/rbnacl/util.rb +12 -11
  37. data/lib/rbnacl/version.rb +3 -1
  38. data/rbnacl.gemspec +6 -8
  39. data/spec/rbnacl/authenticators/poly1305_spec.rb +1 -1
  40. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/private_key_spec.rb +1 -1
  41. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/public_key_spec.rb +1 -1
  42. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305_spec.rb +2 -2
  43. data/spec/rbnacl/group_element_spec.rb +1 -1
  44. data/spec/rbnacl/hash/blake2b_spec.rb +1 -1
  45. data/spec/rbnacl/hash_spec.rb +1 -1
  46. data/spec/rbnacl/hmac/sha256_spec.rb +1 -1
  47. data/spec/rbnacl/hmac/sha512256_spec.rb +1 -1
  48. data/spec/rbnacl/password_hash/scrypt_spec.rb +3 -3
  49. data/spec/rbnacl/secret_box_spec.rb +3 -3
  50. data/spec/rbnacl/signatures/ed25519/signing_key_spec.rb +2 -2
  51. data/spec/rbnacl/signatures/ed25519/verify_key_spec.rb +12 -7
  52. data/spec/rbnacl/simple_box_spec.rb +2 -2
  53. data/spec/rbnacl/util_spec.rb +28 -29
  54. data/spec/shared/authenticator.rb +12 -12
  55. data/spec/shared/box.rb +2 -4
  56. data/spec/spec_helper.rb +11 -18
  57. data/tasks/rspec.rake +2 -2
  58. data/tasks/rubocop.rake +1 -1
  59. metadata +4 -5
  60. data/lib/rbnacl/rake_tasks.rb +0 -57
  61. data/tasks/ci.rake +0 -11
@@ -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; to_bytes; end
6
- def to_str; to_bytes; end
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
@@ -1,6 +1,7 @@
1
1
  # encoding: binary
2
2
  module RbNaCl
3
3
  module Signatures
4
+ # The EdDSA signature system implemented using the Ed25519 elliptic curve
4
5
  module Ed25519
5
6
  extend Sodium
6
7
 
@@ -23,7 +23,7 @@ module RbNaCl
23
23
  include KeyComparator
24
24
  include Serializable
25
25
 
26
- extend Sodium
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) || raise(CryptoError, "Failed to generate a key pair")
61
+ self.class.sign_ed25519_seed_keypair(pk, sk, seed) || fail(CryptoError, "Failed to generate a key pair")
62
62
 
63
- @seed, @signing_key = seed, sk
64
- @verify_key = VerifyKey.new(pk)
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; @seed; end
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; self.class.primitive; end
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; Ed25519::SIGNATUREBYTES; end
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; Ed25519::SIGNATUREBYTES; end
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 Sodium
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) || raise(BadSignatureError, "signature was forged/corrupt")
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; @key; end
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; self.class.primitive; end
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; Ed25519::SIGNATUREBYTES; end
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; Ed25519::SIGNATUREBYTES; end
83
+ def signature_bytes
84
+ Ed25519::SIGNATUREBYTES
85
+ end
75
86
  end
76
87
  end
77
88
  end
@@ -1,5 +1,7 @@
1
1
  # encoding: binary
2
- require 'forwardable'
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
- alias encrypt box
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
- alias decrypt open
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
@@ -1,5 +1,5 @@
1
1
  # encoding: binary
2
- require 'ffi'
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 'sodium'
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, [], :ulong_long
34
- self.const_set(name, self.public_send(fn))
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
- self.module_eval <<-eos, __FILE__, __LINE__ + 1
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 'rbnacl/sodium'
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
- raise "Sorry, you need to install libsodium #{MINIMUM_LIBSODIUM_VERSION}+. You have #{Version::STRING} installed"
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
@@ -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
- TestVectors = {
6
+ TEST_VECTORS = {
5
7
  #
6
8
  # Curve25519 test vectors
7
9
  # Taken from the NaCl distribution
8
10
  #
9
- :alice_private => "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a",
10
- :alice_public => "8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a",
11
- :bob_private => "5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb",
12
- :bob_public => "de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f",
13
- :alice_mult_bob => "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742",
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
- :secret_key => "1b27556473e985d462cd51197a9a46c76009549eac6474f206c4ee0844f68389",
20
- :box_nonce => "69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37",
21
- :box_message => "be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc" +
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
- :box_ciphertext => "f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce" +
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
- :sign_private => "b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd",
38
- :sign_public => "77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb",
39
- :sign_message => "916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171" +
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
- :sign_signature => "6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b" +
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
- :sha256_message => "6162636462636465636465666465666765666768666768696768696a68696a6b" +
52
+ sha256_message: "6162636462636465636465666465666765666768666768696768696a68696a6b" \
51
53
  "696a6b6c6a6b6c6d6b6c6d6e6c6d6e6f6d6e6f706e6f7071",
52
- :sha256_digest => "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
53
- :sha256_empty => "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
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
- :sha512_message => "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" +
60
+ sha512_message: "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" \
59
61
  "6865206c617a7920646f672e",
60
- :sha512_digest => "91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bb" +
62
+ sha512_digest: "91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bb" \
61
63
  "c6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed",
62
- :sha512_empty => "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" +
64
+ sha512_empty: "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" \
63
65
  "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
64
66
 
65
67
  # Blake2b test vectors
66
68
  # self-created? (TODO: double check, fix)
67
- :blake2b_message => "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" +
69
+ blake2b_message: "54686520717569636b2062726f776e20666f78206a756d7073206f7665722074" \
68
70
  "6865206c617a7920646f67",
69
- :blake2b_digest => "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673" +
71
+ blake2b_digest: "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673" \
70
72
  "f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918",
71
- :blake2b_empty => "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" +
73
+ blake2b_empty: "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" \
72
74
  "d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce",
73
75
 
74
76
  # from the Blake2 paper(?) (TODO: double check)
75
- :blake2b_keyed_message => "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" +
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
- :blake2b_key => "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" +
85
+ blake2b_key: "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" \
84
86
  "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
85
- :blake2b_keyed_digest => "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e9248" +
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
- :scrypt_password => "4a857e2ee8aa9b6056f2424e84d24a72473378906ee04a46cb05311502d5250b" +
91
- "82ad86b83c8f20a23dbb74f6da60b0b6ecffd67134d45946ac8ebfb3064294bc" +
92
+ scrypt_password: "4a857e2ee8aa9b6056f2424e84d24a72473378906ee04a46cb05311502d5250b" \
93
+ "82ad86b83c8f20a23dbb74f6da60b0b6ecffd67134d45946ac8ebfb3064294bc" \
92
94
  "097d43ced68642bfb8bbbdd0f50b30118f5e",
93
- :scrypt_salt => "39d82eef32010b8b79cc5ba88ed539fbaba741100f2edbeca7cc171ffeabf258",
94
- :scrypt_opslimit => 758010,
95
- :scrypt_memlimit => 5432947,
96
- :scrypt_digest => "bcc5c2fd785e4781d1201ed43d84925537e2a540d3de55f5812f29e9dd0a4a00" +
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
- :auth_key => "eea6a7251c1e72916d11c2cb214d3c252539121d8e234e652d651fa4c8cff880",
103
- :auth_message => "8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186a" +
104
- "c0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738" +
105
- "b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da" +
106
- "99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74" +
104
+ auth_key: "eea6a7251c1e72916d11c2cb214d3c252539121d8e234e652d651fa4c8cff880",
105
+ auth_message: "8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186a" \
106
+ "c0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738" \
107
+ "b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da" \
108
+ "99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74" \
107
109
  "e355a5",
108
- :auth_onetime => "f3ffc7703f9400e52a7dfb4b3d3305d9",
110
+ auth_onetime: "f3ffc7703f9400e52a7dfb4b3d3305d9",
109
111
  # self-created (FIXME: find standard test vectors)
110
- :auth_hmacsha256 => "7f7b9b707e8790ca8620ff94df5e6533ddc8e994060ce310c9d7de04d44aabc3",
111
- :auth_hmacsha512256 => "b2a31b8d4e01afcab2ee545b5caf4e3d212a99d7b3a116a97cec8e83c32e107d"
112
+ auth_hmacsha256: "7f7b9b707e8790ca8620ff94df5e6533ddc8e994060ce310c9d7de04d44aabc3",
113
+ auth_hmacsha512256: "b2a31b8d4e01afcab2ee545b5caf4e3d212a99d7b3a116a97cec8e83c32e107d"
112
114
  }
113
115
  end
@@ -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('ASCII-8BIT') : zeros
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
- raise LengthError,
61
- "#{description} was nil (Expected #{length.to_int})",
62
- caller
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
- raise LengthError,
67
- "#{description} was #{string.bytesize} bytes (Expected #{length.to_int})",
68
- caller
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
- raise TypeError, "can't convert #{string.class} into String with #to_str"
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
- raise EncodingError, "strings must use BINARY encoding (got #{string.encoding})"
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
-