argon2 0.1.4 → 1.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -9
  3. data/.travis.yml +0 -1
  4. data/CONTRIBUTING.md +12 -0
  5. data/Changelog.md +10 -11
  6. data/README.md +23 -14
  7. data/ext/argon2_wrap/Makefile +8 -6
  8. data/ext/argon2_wrap/argon_wrap.c +23 -12
  9. data/ext/argon2_wrap/test.c +14 -42
  10. data/ext/phc-winner-argon2/.gitignore +5 -1
  11. data/ext/phc-winner-argon2/.travis.yml +14 -0
  12. data/ext/phc-winner-argon2/Makefile +33 -12
  13. data/ext/phc-winner-argon2/README.md +48 -19
  14. data/ext/phc-winner-argon2/argon2-specs.pdf +0 -0
  15. data/ext/phc-winner-argon2/{src → include}/argon2.h +137 -137
  16. data/ext/phc-winner-argon2/kats/argon2d +12290 -12290
  17. data/ext/phc-winner-argon2/kats/argon2d.shasum +1 -1
  18. data/ext/phc-winner-argon2/kats/argon2i +12290 -12290
  19. data/ext/phc-winner-argon2/kats/argon2i.shasum +1 -1
  20. data/ext/phc-winner-argon2/opt.o +0 -0
  21. data/ext/phc-winner-argon2/src/argon2.c +125 -145
  22. data/ext/phc-winner-argon2/src/bench.c +5 -5
  23. data/ext/phc-winner-argon2/src/core.c +15 -20
  24. data/ext/phc-winner-argon2/src/core.h +5 -2
  25. data/ext/phc-winner-argon2/src/encoding.c +45 -72
  26. data/ext/phc-winner-argon2/src/encoding.h +24 -0
  27. data/ext/phc-winner-argon2/src/genkat.c +2 -2
  28. data/ext/phc-winner-argon2/src/opt.c +19 -10
  29. data/ext/phc-winner-argon2/src/opt.h +5 -17
  30. data/ext/phc-winner-argon2/src/ref.c +12 -9
  31. data/ext/phc-winner-argon2/src/ref.h +4 -12
  32. data/ext/phc-winner-argon2/src/run.c +67 -42
  33. data/ext/phc-winner-argon2/src/test.c +131 -0
  34. data/lib/argon2.rb +6 -5
  35. data/lib/argon2/constants.rb +3 -2
  36. data/lib/argon2/engine.rb +1 -0
  37. data/lib/argon2/errors.rb +37 -36
  38. data/lib/argon2/ffi_engine.rb +10 -10
  39. data/lib/argon2/version.rb +2 -1
  40. metadata +7 -12
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'argon2/constants'
2
3
  require 'argon2/ffi_engine'
3
4
  require 'argon2/version'
@@ -16,20 +17,20 @@ module Argon2
16
17
  @secret = options[:secret]
17
18
  end
18
19
 
19
- def hash(pass)
20
+ def create(pass)
20
21
  Argon2::Engine.hash_argon2i_encode(
21
22
  pass, @salt, @t_cost, @m_cost, @secret)
22
23
  end
23
24
 
24
- #Helper class, just creates defaults and calls hash()
25
- def self.hash(pass)
25
+ # Helper class, just creates defaults and calls hash()
26
+ def self.create(pass)
26
27
  argon2 = Argon2::Password.new
27
- argon2.hash(pass)
28
+ argon2.create(pass)
28
29
  end
29
30
 
30
31
  def self.verify_password(pass, hash, secret = nil)
31
32
  raise ArgonHashFail, "Invalid hash" unless
32
- /^\$argon2i\$.{,110}/.match hash
33
+ /^\$argon2i\$.{,110}/ =~ hash
33
34
  Argon2::Engine.argon2i_verify(pass, hash, secret)
34
35
  end
35
36
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module Argon2
2
3
  # Constants utilised in several parts of the Argon2 module
3
4
  # SALT_LEN is a standard recommendation from the Argon2 spec.
4
5
  module Constants
5
6
  SALT_LEN = 16
6
- OUT_LEN = 32 #Binary, unencoded output
7
- ENCODE_LEN = 108 #Encoded output
7
+ OUT_LEN = 32 # Binary, unencoded output
8
+ ENCODE_LEN = 108 # Encoded output
8
9
  end
9
10
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'securerandom'
2
3
 
3
4
  module Argon2
@@ -1,41 +1,42 @@
1
+ # frozen_string_literal: true
1
2
  # Defines an array of errors that matches the enum list of errors from
2
3
  # argon2.h. This allows return values to propagate errors through the FFI.
3
4
  module Argon2
4
5
  class ArgonHashFail < StandardError; end
5
- ERRORS = [
6
- 'ARGON2_OK',
7
- 'ARGON2_OUTPUT_PTR_NULL',
8
- 'ARGON2_OUTPUT_TOO_SHORT',
9
- 'ARGON2_OUTPUT_TOO_LONG',
10
- 'ARGON2_PWD_TOO_SHORT',
11
- 'ARGON2_PWD_TOO_LONG',
12
- 'ARGON2_SALT_TOO_SHORT',
13
- 'ARGON2_SALT_TOO_LONG',
14
- 'ARGON2_AD_TOO_SHORT',
15
- 'ARGON2_AD_TOO_LONG',
16
- 'ARGON2_SECRET_TOO_SHORT',
17
- 'ARGON2_SECRET_TOO_LONG',
18
- 'ARGON2_TIME_TOO_SMALL',
19
- 'ARGON2_TIME_TOO_LARGE',
20
- 'ARGON2_MEMORY_TOO_LITTLE',
21
- 'ARGON2_MEMORY_TOO_MUCH',
22
- 'ARGON2_LANES_TOO_FEW',
23
- 'ARGON2_LANES_TOO_MANY',
24
- 'ARGON2_PWD_PTR_MISMATCH',
25
- 'ARGON2_SALT_PTR_MISMATCH',
26
- 'ARGON2_SECRET_PTR_MISMATCH',
27
- 'ARGON2_AD_PTR_MISMATCH',
28
- 'ARGON2_MEMORY_ALLOCATION_ERROR',
29
- 'ARGON2_FREE_MEMORY_CBK_NULL',
30
- 'ARGON2_ALLOCATE_MEMORY_CBK_NULL',
31
- 'ARGON2_INCORRECT_PARAMETER',
32
- 'ARGON2_INCORRECT_TYPE',
33
- 'ARGON2_OUT_PTR_MISMATCH',
34
- 'ARGON2_THREADS_TOO_FEW',
35
- 'ARGON2_THREADS_TOO_MANY',
36
- 'ARGON2_MISSING_ARGS',
37
- 'ARGON2_ENCODING_FAIL',
38
- 'ARGON2_DECODING_FAIL'
39
-
40
- ]
6
+ ERRORS = %w(
7
+ ARGON2_OK
8
+ ARGON2_OUTPUT_PTR_NULL
9
+ ARGON2_OUTPUT_TOO_SHORT
10
+ ARGON2_OUTPUT_TOO_LONG
11
+ ARGON2_PWD_TOO_SHORT
12
+ ARGON2_PWD_TOO_LONG
13
+ ARGON2_SALT_TOO_SHORT
14
+ ARGON2_SALT_TOO_LONG
15
+ ARGON2_AD_TOO_SHORT
16
+ ARGON2_AD_TOO_LONG
17
+ ARGON2_SECRET_TOO_SHORT
18
+ ARGON2_SECRET_TOO_LONG
19
+ ARGON2_TIME_TOO_SMALL
20
+ ARGON2_TIME_TOO_LARGE
21
+ ARGON2_MEMORY_TOO_LITTLE
22
+ ARGON2_MEMORY_TOO_MUCH
23
+ ARGON2_LANES_TOO_FEW
24
+ ARGON2_LANES_TOO_MANY
25
+ ARGON2_PWD_PTR_MISMATCH
26
+ ARGON2_SALT_PTR_MISMATCH
27
+ ARGON2_SECRET_PTR_MISMATCH
28
+ ARGON2_AD_PTR_MISMATCH
29
+ ARGON2_MEMORY_ALLOCATION_ERROR
30
+ ARGON2_FREE_MEMORY_CBK_NULL
31
+ ARGON2_ALLOCATE_MEMORY_CBK_NULL
32
+ ARGON2_INCORRECT_PARAMETER
33
+ ARGON2_INCORRECT_TYPE
34
+ ARGON2_OUT_PTR_MISMATCH
35
+ ARGON2_THREADS_TOO_FEW
36
+ ARGON2_THREADS_TOO_MANY
37
+ ARGON2_MISSING_ARGS
38
+ ARGON2_ENCODING_FAIL
39
+ ARGON2_DECODING_FAIL
40
+ ARGON2_THREAD_FAIL
41
+ ).freeze
41
42
  end
@@ -2,12 +2,12 @@ require 'ffi'
2
2
  require 'ffi-compiler/loader'
3
3
 
4
4
  module Argon2
5
- #Direct external bindings. Call these methods via the Engine class to ensure points are dealt with
5
+ # Direct external bindings. Call these methods via the Engine class to ensure points are dealt with
6
6
  module Ext
7
7
  extend FFI::Library
8
8
  ffi_lib FFI::Compiler::Loader.find('argon2_wrap')
9
9
 
10
- #int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
10
+ # int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
11
11
  # const uint32_t parallelism, const void *pwd,
12
12
  # const size_t pwdlen, const void *salt,
13
13
  # const size_t saltlen, void *hash, const size_t hashlen);
@@ -16,16 +16,16 @@ module Argon2
16
16
  :uint, :uint, :uint, :pointer,
17
17
  :size_t, :pointer, :size_t, :pointer, :size_t], :int, :blocking => true
18
18
 
19
- #void argon2_wrap(uint8_t *out, char *pwd, size_it pwdlen,
20
- #uint8_t *salt, uint32_t t_cost,
19
+ # void argon2_wrap(uint8_t *out, char *pwd, size_it pwdlen,
20
+ # uint8_t *salt, uint32_t t_cost,
21
21
  # uint32_t m_cost, uint32_t lanes,
22
22
  # uint8_t *secret, uint32_t secretlen)
23
23
  attach_function :argon2_wrap, [
24
24
  :pointer, :pointer, :size_t, :pointer, :uint,
25
25
  :uint, :uint, :pointer, :size_t], :uint, :blocking => true
26
26
 
27
- #int argon2i_verify(const char *encoded, const void *pwd,
28
- #const size_t pwdlen);
27
+ # int argon2i_verify(const char *encoded, const void *pwd,
28
+ # const size_t pwdlen);
29
29
  attach_function :wrap_argon2_verify, [:pointer, :pointer, :size_t,
30
30
  :pointer, :size_t], :int, :blocking => true
31
31
  end
@@ -39,7 +39,7 @@ module Argon2
39
39
  ret = Ext.argon2i_hash_raw(t_cost, 1 << m_cost, 1, password,
40
40
  password.length, salt, salt.length,
41
41
  buffer, Constants::OUT_LEN)
42
- raise ArgonHashFail, ERRORS[ret] unless ret == 0
42
+ raise ArgonHashFail, ERRORS[ret.abs] unless ret == 0
43
43
  result = buffer.read_string(Constants::OUT_LEN)
44
44
  end
45
45
  result.unpack('H*').join
@@ -56,7 +56,7 @@ module Argon2
56
56
  ret = Ext.argon2_wrap(buffer, password, passwordlen,
57
57
  salt, t_cost, (1 << m_cost),
58
58
  1, secret, secretlen)
59
- raise ArgonHashFail, ERRORS[ret] unless ret == 0
59
+ raise ArgonHashFail, ERRORS[ret.abs] unless ret == 0
60
60
  result = buffer.read_string(Constants::ENCODE_LEN)
61
61
  end
62
62
  result.delete "\0"
@@ -67,8 +67,8 @@ module Argon2
67
67
  passwordlen = pwd.nil? ? 0 : pwd.bytesize
68
68
 
69
69
  ret = Ext.wrap_argon2_verify(hash, pwd, passwordlen, secret, secretlen)
70
- return false if ERRORS[ret] == 'ARGON2_DECODING_FAIL'
71
- raise ArgonHashFail, ERRORS[ret] unless ret == 0
70
+ return false if ERRORS[ret.abs] == 'ARGON2_DECODING_FAIL'
71
+ raise ArgonHashFail, ERRORS[ret.abs] unless ret == 0
72
72
  true
73
73
  end
74
74
  end
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  # Standard Gem version constant.
2
3
  module Argon2
3
- VERSION = "0.1.4"
4
+ VERSION = "1.0.0".freeze
4
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argon2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Technion
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-11 00:00:00.000000000 Z
11
+ date: 2016-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -132,6 +132,7 @@ files:
132
132
  - ".gitmodules"
133
133
  - ".rubocop.yml"
134
134
  - ".travis.yml"
135
+ - CONTRIBUTING.md
135
136
  - Changelog.md
136
137
  - Gemfile
137
138
  - LICENSE.txt
@@ -148,47 +149,41 @@ files:
148
149
  - ext/argon2_wrap/tests
149
150
  - ext/phc-winner-argon2/.git
150
151
  - ext/phc-winner-argon2/.gitignore
152
+ - ext/phc-winner-argon2/.travis.yml
151
153
  - ext/phc-winner-argon2/CHANGELOG.md
152
154
  - ext/phc-winner-argon2/LICENSE
153
155
  - ext/phc-winner-argon2/Makefile
154
156
  - ext/phc-winner-argon2/README.md
155
- - ext/phc-winner-argon2/argon2
156
157
  - ext/phc-winner-argon2/argon2-specs.pdf
158
+ - ext/phc-winner-argon2/include/argon2.h
157
159
  - ext/phc-winner-argon2/kats/argon2d
158
160
  - ext/phc-winner-argon2/kats/argon2d.shasum
159
161
  - ext/phc-winner-argon2/kats/argon2i
160
162
  - ext/phc-winner-argon2/kats/argon2i.shasum
161
163
  - ext/phc-winner-argon2/kats/check-sums.sh
162
164
  - ext/phc-winner-argon2/kats/test.sh
163
- - ext/phc-winner-argon2/libargon2.a
164
- - ext/phc-winner-argon2/libargon2.so
165
+ - ext/phc-winner-argon2/opt.o
165
166
  - ext/phc-winner-argon2/src/argon2.c
166
- - ext/phc-winner-argon2/src/argon2.h
167
- - ext/phc-winner-argon2/src/argon2.o
168
167
  - ext/phc-winner-argon2/src/bench.c
169
168
  - ext/phc-winner-argon2/src/blake2/blake2-impl.h
170
169
  - ext/phc-winner-argon2/src/blake2/blake2.h
171
170
  - ext/phc-winner-argon2/src/blake2/blake2b.c
172
- - ext/phc-winner-argon2/src/blake2/blake2b.o
173
171
  - ext/phc-winner-argon2/src/blake2/blamka-round-opt.h
174
172
  - ext/phc-winner-argon2/src/blake2/blamka-round-ref.h
175
173
  - ext/phc-winner-argon2/src/core.c
176
174
  - ext/phc-winner-argon2/src/core.h
177
- - ext/phc-winner-argon2/src/core.o
178
175
  - ext/phc-winner-argon2/src/encoding.c
179
176
  - ext/phc-winner-argon2/src/encoding.h
180
- - ext/phc-winner-argon2/src/encoding.o
181
177
  - ext/phc-winner-argon2/src/genkat.c
182
178
  - ext/phc-winner-argon2/src/genkat.h
183
179
  - ext/phc-winner-argon2/src/opt.c
184
180
  - ext/phc-winner-argon2/src/opt.h
185
181
  - ext/phc-winner-argon2/src/ref.c
186
182
  - ext/phc-winner-argon2/src/ref.h
187
- - ext/phc-winner-argon2/src/ref.o
188
183
  - ext/phc-winner-argon2/src/run.c
184
+ - ext/phc-winner-argon2/src/test.c
189
185
  - ext/phc-winner-argon2/src/thread.c
190
186
  - ext/phc-winner-argon2/src/thread.h
191
- - ext/phc-winner-argon2/src/thread.o
192
187
  - lib/argon2.rb
193
188
  - lib/argon2/constants.rb
194
189
  - lib/argon2/engine.rb