argon2 2.0.3 → 2.1.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/.github/workflows/ruby.yml +58 -20
- data/.rubocop.yml +29 -1
- data/Changelog.md +4 -0
- data/README.md +22 -11
- data/Steepfile +16 -0
- data/argon2.gemspec +3 -0
- data/bin/console +4 -4
- data/bin/setup +6 -2
- data/bin/test +10 -0
- data/lib/argon2/ffi_engine.rb +4 -4
- data/lib/argon2/hash_format.rb +49 -0
- data/lib/argon2/version.rb +1 -1
- data/lib/argon2.rb +12 -6
- data/sig/argon2.rbs +16 -0
- data/sig/constants.rbs +8 -0
- data/sig/version.rbs +4 -0
- metadata +24 -5
- data/.github/workflows/rubocop.yml +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e3f42d9a5dff3fd0375ce5c5106e91e0ff8d451ea2a2f4a33c3d9f837707dbd
|
4
|
+
data.tar.gz: 99cd35b1d042eba0b17a84eb2a8b15a023f9220b5d635f4a523e677fb8343236
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1327ce0e44b87f4a16000a9d390c658343ee29f4016709e9c80a9e21e194a575cf7083d50b12e3754151d9765b2364e2abba8aa28e121b2b48d1905f1b2a1ad
|
7
|
+
data.tar.gz: 5fc47c017aa6e9af263760bcbb3d44cec879e38338c393562b8c3455912bf4880326a84455d0853168aa9972751bfebf7d4f2ff56c1c2f67a454c4ee63e7719c
|
data/.github/workflows/ruby.yml
CHANGED
@@ -1,32 +1,70 @@
|
|
1
1
|
name: Test Suite
|
2
2
|
|
3
|
-
|
3
|
+
# Run against all commits and pull requests.
|
4
|
+
on: [ push, pull_request ]
|
4
5
|
|
5
6
|
jobs:
|
6
|
-
|
7
|
+
test_matrix:
|
7
8
|
|
8
|
-
runs-on: ubuntu-latest
|
9
9
|
strategy:
|
10
|
+
fail-fast: false
|
10
11
|
matrix:
|
11
|
-
|
12
|
+
os:
|
13
|
+
- ubuntu
|
14
|
+
- macos
|
15
|
+
ruby:
|
16
|
+
- 2.6
|
17
|
+
- 2.7
|
18
|
+
- 3.0
|
19
|
+
- head
|
20
|
+
|
21
|
+
runs-on: ${{ matrix.os }}-latest
|
22
|
+
|
23
|
+
env:
|
24
|
+
TEST_CHECKS: 100
|
25
|
+
|
26
|
+
steps:
|
27
|
+
- uses: actions/checkout@v2
|
28
|
+
- name: Set up Ruby
|
29
|
+
uses: ruby/setup-ruby@v1
|
30
|
+
with:
|
31
|
+
ruby-version: ${{ matrix.ruby }}
|
32
|
+
bundler-cache: true
|
33
|
+
- name: Build Argon2 C library
|
34
|
+
run: bin/setup
|
35
|
+
- name: Test Argon2 C library
|
36
|
+
run: bin/test
|
37
|
+
- name: Run tests
|
38
|
+
run: bundle exec rake test
|
39
|
+
- name: Coveralls Parallel
|
40
|
+
uses: coverallsapp/github-action@master
|
41
|
+
with:
|
42
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
43
|
+
flag-name: run-${{ matrix.ruby-version }}
|
44
|
+
parallel: true
|
45
|
+
|
46
|
+
rubocop:
|
47
|
+
|
48
|
+
runs-on: ubuntu-latest
|
12
49
|
|
13
50
|
steps:
|
14
51
|
- uses: actions/checkout@v2
|
15
|
-
- name: Set up Ruby
|
52
|
+
- name: Set up Ruby
|
16
53
|
uses: ruby/setup-ruby@v1
|
17
54
|
with:
|
18
|
-
ruby-version:
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
55
|
+
ruby-version: 3.0
|
56
|
+
bundler-cache: true
|
57
|
+
- name: Run rubocop
|
58
|
+
run: bundle exec rake rubocop
|
59
|
+
|
60
|
+
finish:
|
61
|
+
runs-on: ubuntu-latest
|
62
|
+
needs: [ test_matrix, rubocop ]
|
63
|
+
steps:
|
64
|
+
- name: Coveralls Finished
|
65
|
+
uses: coverallsapp/github-action@master
|
66
|
+
with:
|
67
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
68
|
+
parallel-finished: true
|
69
|
+
- name: Wait for status checks
|
70
|
+
run: echo "All Green!"
|
data/.rubocop.yml
CHANGED
@@ -7,6 +7,11 @@ Metrics/CyclomaticComplexity:
|
|
7
7
|
Metrics/PerceivedComplexity:
|
8
8
|
Enabled: false
|
9
9
|
|
10
|
+
Metrics/ParameterLists:
|
11
|
+
Max: 5
|
12
|
+
Exclude:
|
13
|
+
- 'lib/argon2/ffi_engine.rb'
|
14
|
+
|
10
15
|
Layout/LineLength:
|
11
16
|
Max: 160
|
12
17
|
Exclude:
|
@@ -205,4 +210,27 @@ Style/RedundantArgument: # (new in 1.4)
|
|
205
210
|
Enabled: true
|
206
211
|
Style/SwapValues: # (new in 1.1)
|
207
212
|
Enabled: true
|
208
|
-
|
213
|
+
Gemspec/DateAssignment: # (new in 1.10)
|
214
|
+
Enabled: true
|
215
|
+
Lint/DeprecatedConstants: # (new in 1.8)
|
216
|
+
Enabled: true
|
217
|
+
Lint/LambdaWithoutLiteralBlock: # (new in 1.8)
|
218
|
+
Enabled: true
|
219
|
+
Lint/NumberedParameterAssignment: # (new in 1.9)
|
220
|
+
Enabled: true
|
221
|
+
Lint/OrAssignmentToConstant: # (new in 1.9)
|
222
|
+
Enabled: true
|
223
|
+
Lint/RedundantDirGlobSort: # (new in 1.8)
|
224
|
+
Enabled: true
|
225
|
+
Lint/SymbolConversion: # (new in 1.9)
|
226
|
+
Enabled: true
|
227
|
+
Lint/TripleQuotes: # (new in 1.9)
|
228
|
+
Enabled: true
|
229
|
+
Style/EndlessMethod: # (new in 1.8)
|
230
|
+
Enabled: true
|
231
|
+
Style/HashConversion: # (new in 1.10)
|
232
|
+
Enabled: true
|
233
|
+
Style/IfWithBooleanLiteralBranches: # (new in 1.9)
|
234
|
+
Enabled: true
|
235
|
+
Style/StringChars: # (new in 1.12)
|
236
|
+
Enabled: true
|
data/Changelog.md
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,6 @@ This project has several key tenets to its design:
|
|
17
17
|
* Errors from the C interface are raised as Exceptions. There are a lot of exception classes, but they tend to relate to things like very broken input, and code bugs. Calls to this library should generally not require a rescue.
|
18
18
|
* Test suites should aim for 100% code coverage.
|
19
19
|
* Default work values should not be considered constants. I will increase them from time to time.
|
20
|
-
* Not exposing the threads parameter is a design choice. I believe there is significant risk, and minimal gain in using a value other than '1'. Four threads on a four core box completely ties up the entire server to process one user logon. If you want more security, increase m_cost.
|
21
20
|
* Many Rubocop errors have been disabled, but any commit should avoid new alerts or demonstrate their necessity.
|
22
21
|
|
23
22
|
## Usage
|
@@ -31,7 +30,7 @@ require 'argon2'
|
|
31
30
|
To generate a hash using specific time and memory cost:
|
32
31
|
|
33
32
|
```ruby
|
34
|
-
hasher = Argon2::Password.new(t_cost: 2, m_cost: 16)
|
33
|
+
hasher = Argon2::Password.new(t_cost: 2, m_cost: 16, p_cost: 1)
|
35
34
|
hasher.create("password")
|
36
35
|
=> "$argon2i$v=19$m=65536,t=2,p=1$jL7lLEAjDN+pY2cG1N8D2g$iwj1ueduCvm6B9YVjBSnAHu+6mKzqGmDW745ALR38Uo"
|
37
36
|
```
|
@@ -43,7 +42,6 @@ hasher = Argon2::Password.new
|
|
43
42
|
hasher.create("password")
|
44
43
|
```
|
45
44
|
|
46
|
-
If you follow this pattern, it is important to create a new `Argon2::Password` every time you generate a hash, in order to ensure a unique salt. See [issue 23](https://github.com/technion/ruby-argon2/issues/23) for more information.
|
47
45
|
Alternatively, use this shortcut:
|
48
46
|
|
49
47
|
```ruby
|
@@ -72,6 +70,17 @@ argon = Argon2::Password.new(t_cost: 2, m_cost: 16, secret: KEY)
|
|
72
70
|
myhash = argon.create("A password")
|
73
71
|
Argon2::Password.verify_password("A password", myhash, KEY)
|
74
72
|
```
|
73
|
+
## Ruby 3 Types
|
74
|
+
I am now shipping signatures in sig/. The following command sets up a testing interface.
|
75
|
+
```sh
|
76
|
+
RBS_TEST_TARGET="Argon2::*" bundle exec ruby -r rbs/test/setup bin/console
|
77
|
+
```
|
78
|
+
You should also be able to pass Steep checks:
|
79
|
+
```sh
|
80
|
+
steep check
|
81
|
+
```
|
82
|
+
These tools will need to be installed manually at this time and will be added to Gemfiles after much further testing.
|
83
|
+
|
75
84
|
## Version 2.0 - Argon 2id
|
76
85
|
Version 2.x upwards will now default to the Argon2id hash format. This is consistent with current recommendations regarding Argon2 usage. It remains capable of verifying existing hashes.
|
77
86
|
|
@@ -80,7 +89,7 @@ Version 1.0.0 included a major version bump over 0.1.4 due to several breaking c
|
|
80
89
|
|
81
90
|
The second of these is that the reference Argon2 implementation introduced an algorithm change, which produces a hash which is not backwards compatible. This is documented on [this PR on the C library](https://github.com/P-H-C/phc-winner-argon2/pull/115). This was a regrettable requirement to address a security concern in the algorithm itself. The two versions of the Argon2 algorithm are numbered 1.0 and 1.3 respectively.
|
82
91
|
|
83
|
-
Shortly after this, version 1.0.0 of this gem was released with this breaking change, supporting only Argon2 v1.3. Further time later, the official encoding format was updated, with a spec that included the version number, and the library introduced backward compatibility. This should remove the likelihood of such breaking changes in future.
|
92
|
+
Shortly after this, version 1.0.0 of this gem was released with this breaking change, supporting only Argon2 v1.3. Further time later, the official encoding format was updated, with a spec that included the version number, and the library introduced backward compatibility. This should remove the likelihood of such breaking changes in future.
|
84
93
|
|
85
94
|
|
86
95
|
## Platform Issues
|
@@ -123,17 +132,19 @@ Any form of contribution is appreciated, however, please review [CONTRIBUTING.md
|
|
123
132
|
|
124
133
|
## Building locally/Tests
|
125
134
|
|
126
|
-
To build the gem locally, you will need to
|
135
|
+
To build the gem locally, you will need to run the setup script:
|
136
|
+
|
137
|
+
```shell
|
138
|
+
./bin/setup
|
139
|
+
```
|
140
|
+
|
141
|
+
You can test that the Argon2 C library was properly imported by running the C test suite:
|
127
142
|
|
128
143
|
```shell
|
129
|
-
|
130
|
-
bundle install
|
131
|
-
cd ext/argon2_wrap/
|
132
|
-
make
|
133
|
-
cd ../..
|
144
|
+
./bin/test
|
134
145
|
```
|
135
146
|
|
136
|
-
The test
|
147
|
+
The ruby wrapper test suite includes a property based test. To more strenuously perform this test, you can tune the iterations parameter:
|
137
148
|
|
138
149
|
```shell
|
139
150
|
TEST_CHECKS=10000 bundle exec rake test
|
data/Steepfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
target :lib do
|
4
|
+
signature "sig"
|
5
|
+
|
6
|
+
check "argon2.rb"
|
7
|
+
check "lib" # Directory name
|
8
|
+
ignore "lib/argon2/ffi_engine.rb"
|
9
|
+
ignore "lib/argon2/errors.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
target :spec do
|
13
|
+
signature "sig", "sig-private"
|
14
|
+
|
15
|
+
check "spec"
|
16
|
+
end
|
data/argon2.gemspec
CHANGED
@@ -11,6 +11,8 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.authors = ["Technion"]
|
12
12
|
spec.email = ["technion@lolware.net"]
|
13
13
|
|
14
|
+
spec.required_ruby_version = '>= 2.6.0'
|
15
|
+
|
14
16
|
spec.summary = 'Argon2 Password hashing binding'
|
15
17
|
spec.description = 'Argon2 FFI binding'
|
16
18
|
spec.homepage = 'https://github.com/technion/ruby-argon2'
|
@@ -31,5 +33,6 @@ Gem::Specification.new do |spec|
|
|
31
33
|
spec.add_development_dependency "rubocop", '~> 1.7'
|
32
34
|
spec.add_development_dependency "simplecov", '~> 0.20'
|
33
35
|
spec.add_development_dependency "simplecov-lcov", '~> 0.8'
|
36
|
+
spec.add_development_dependency "steep", "~> 0.43.1"
|
34
37
|
spec.extensions << 'ext/argon2_wrap/extconf.rb'
|
35
38
|
end
|
data/bin/console
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'argon2'
|
6
6
|
|
7
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
9
9
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
# require
|
11
|
+
# require 'pry'
|
12
12
|
# Pry.start
|
13
13
|
|
14
|
-
require
|
14
|
+
require 'irb'
|
15
15
|
IRB.start
|
data/bin/setup
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
#!/bin/bash
|
2
|
+
# Exit the script immediately if a command fails
|
2
3
|
set -euo pipefail
|
4
|
+
# Internal Field Separator
|
3
5
|
IFS=$'\n\t'
|
4
6
|
|
7
|
+
# Initialize Git Submodules
|
8
|
+
git submodule update --init --recursive
|
9
|
+
|
10
|
+
# Build the Argon2 C Library. Git submodules must be initialized first!
|
5
11
|
bundle install
|
6
12
|
cd ext/argon2_wrap/
|
7
13
|
make
|
8
14
|
cd ../..
|
9
|
-
|
10
|
-
# Do any other automated setup that you need to do here
|
data/bin/test
ADDED
data/lib/argon2/ffi_engine.rb
CHANGED
@@ -62,13 +62,13 @@ module Argon2
|
|
62
62
|
result.unpack('H*').join
|
63
63
|
end
|
64
64
|
|
65
|
-
def self.hash_argon2id(password, salt, t_cost, m_cost, out_len = nil)
|
65
|
+
def self.hash_argon2id(password, salt, t_cost, m_cost, p_cost, out_len = nil)
|
66
66
|
out_len = (out_len || Constants::OUT_LEN).to_i
|
67
67
|
raise ArgonHashFail, "Invalid output length" if out_len < 1
|
68
68
|
|
69
69
|
result = ''
|
70
70
|
FFI::MemoryPointer.new(:char, out_len) do |buffer|
|
71
|
-
ret = Ext.argon2id_hash_raw(t_cost, 1 << m_cost,
|
71
|
+
ret = Ext.argon2id_hash_raw(t_cost, 1 << m_cost, p_cost, password,
|
72
72
|
password.length, salt, salt.length,
|
73
73
|
buffer, out_len)
|
74
74
|
raise ArgonHashFail, ERRORS[ret.abs] unless ret.zero?
|
@@ -78,7 +78,7 @@ module Argon2
|
|
78
78
|
result.unpack('H*').join
|
79
79
|
end
|
80
80
|
|
81
|
-
def self.hash_argon2id_encode(password, salt, t_cost, m_cost, secret)
|
81
|
+
def self.hash_argon2id_encode(password, salt, t_cost, m_cost, p_cost, secret)
|
82
82
|
result = ''
|
83
83
|
secretlen = secret.nil? ? 0 : secret.bytesize
|
84
84
|
passwordlen = password.nil? ? 0 : password.bytesize
|
@@ -87,7 +87,7 @@ module Argon2
|
|
87
87
|
FFI::MemoryPointer.new(:char, Constants::ENCODE_LEN) do |buffer|
|
88
88
|
ret = Ext.argon2_wrap(buffer, password, passwordlen,
|
89
89
|
salt, salt.length, t_cost, (1 << m_cost),
|
90
|
-
|
90
|
+
p_cost, secret, secretlen)
|
91
91
|
raise ArgonHashFail, ERRORS[ret.abs] unless ret.zero?
|
92
92
|
|
93
93
|
result = buffer.read_string(Constants::ENCODE_LEN)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Argon2
|
4
|
+
##
|
5
|
+
# Get the values from an Argon2 compatible string.
|
6
|
+
#
|
7
|
+
class HashFormat
|
8
|
+
attr_reader :variant, :version, :t_cost, :m_cost, :p_cost, :salt, :checksum
|
9
|
+
|
10
|
+
# FIXME: Reduce complexity/AbcSize
|
11
|
+
# rubocop:disable Metrics/AbcSize
|
12
|
+
def initialize(digest)
|
13
|
+
digest = digest.to_s unless digest.is_a?(String)
|
14
|
+
|
15
|
+
raise Argon2::ArgonHashFail, 'Invalid Argon2 hash' unless self.class.valid_hash?(digest)
|
16
|
+
|
17
|
+
_, variant, version, config, salt, checksum = digest.split('$')
|
18
|
+
# Regex magic to extract the values for each setting
|
19
|
+
version = /v=(\d+)/.match(version)
|
20
|
+
t_cost = /t=(\d+),/.match(config)
|
21
|
+
m_cost = /m=(\d+),/.match(config)
|
22
|
+
p_cost = /p=(\d+)/.match(config)
|
23
|
+
|
24
|
+
# Make sure none of the values are missing
|
25
|
+
raise Argon2::ArgonHashFail, 'Invalid Argon2 version' if version.nil?
|
26
|
+
raise Argon2::ArgonHashFail, 'Invalid Argon2 time cost' if t_cost.nil?
|
27
|
+
raise Argon2::ArgonHashFail, 'Invalid Argon2 memory cost' if m_cost.nil?
|
28
|
+
raise Argon2::ArgonHashFail, 'Invalid Argon2 parallelism cost' if p_cost.nil?
|
29
|
+
|
30
|
+
@variant = variant.to_str
|
31
|
+
@version = version[1].to_i
|
32
|
+
@t_cost = t_cost[1].to_i
|
33
|
+
@m_cost = m_cost[1].to_i
|
34
|
+
@p_cost = p_cost[1].to_i
|
35
|
+
@salt = salt.to_str
|
36
|
+
@checksum = checksum.to_str
|
37
|
+
end
|
38
|
+
# rubocop:enable Metrics/AbcSize
|
39
|
+
|
40
|
+
##
|
41
|
+
# Checks whether a given digest is a valid Argon2 hash.
|
42
|
+
#
|
43
|
+
# Supports 1 and argon2id formats.
|
44
|
+
#
|
45
|
+
def self.valid_hash?(digest)
|
46
|
+
/^\$argon2(id?|d).{,113}/ =~ digest
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/argon2/version.rb
CHANGED
data/lib/argon2.rb
CHANGED
@@ -5,6 +5,7 @@ require 'argon2/ffi_engine'
|
|
5
5
|
require 'argon2/version'
|
6
6
|
require 'argon2/errors'
|
7
7
|
require 'argon2/engine'
|
8
|
+
require 'argon2/hash_format'
|
8
9
|
|
9
10
|
module Argon2
|
10
11
|
# Front-end API for the Argon2 module.
|
@@ -16,7 +17,10 @@ module Argon2
|
|
16
17
|
@m_cost = options[:m_cost] || 16
|
17
18
|
raise ArgonHashFail, "Invalid m_cost" if @m_cost < 1 || @m_cost > 31
|
18
19
|
|
19
|
-
@
|
20
|
+
@p_cost = options[:p_cost] || 1
|
21
|
+
raise ArgonHashFail, "Invalid p_cost" if @p_cost < 1 || @p_cost > 8
|
22
|
+
|
23
|
+
@insecure_salt = options[:salt_for_testing_purposes_only]
|
20
24
|
@secret = options[:secret]
|
21
25
|
end
|
22
26
|
|
@@ -24,19 +28,21 @@ module Argon2
|
|
24
28
|
raise ArgonHashFail, "Invalid password (expected string)" unless
|
25
29
|
pass.is_a?(String)
|
26
30
|
|
31
|
+
# Ensure salt is freshly generated unless it was intentionally supplied.
|
32
|
+
salt = @insecure_salt || Engine.saltgen
|
33
|
+
|
27
34
|
Argon2::Engine.hash_argon2id_encode(
|
28
|
-
pass,
|
35
|
+
pass, salt, @t_cost, @m_cost, @p_cost, @secret)
|
29
36
|
end
|
30
37
|
|
31
38
|
# Helper class, just creates defaults and calls hash()
|
32
|
-
def self.create(pass)
|
33
|
-
argon2 = Argon2::Password.new
|
39
|
+
def self.create(pass, options = {})
|
40
|
+
argon2 = Argon2::Password.new(options)
|
34
41
|
argon2.create(pass)
|
35
42
|
end
|
36
43
|
|
37
|
-
# Supports 1 and argon2id formats.
|
38
44
|
def self.valid_hash?(hash)
|
39
|
-
|
45
|
+
Argon2::HashFormat.valid_hash?(hash)
|
40
46
|
end
|
41
47
|
|
42
48
|
def self.verify_password(pass, hash, secret = nil)
|
data/sig/argon2.rbs
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Classes
|
2
|
+
module Argon2
|
3
|
+
class Password
|
4
|
+
@t_cost: Integer
|
5
|
+
@m_cost: Integer
|
6
|
+
@p_cost: Integer
|
7
|
+
@salt: nil | String
|
8
|
+
@secret: nil | String
|
9
|
+
|
10
|
+
def initialize: (?Hash[Symbol, Integer] options) -> (nil | String)
|
11
|
+
def create: (String pass) -> untyped
|
12
|
+
def self.create: (String pass) -> untyped
|
13
|
+
def self.valid_hash?: (string hash) -> Integer?
|
14
|
+
def self.verify_password: (untyped pass, untyped hash, ?nil secret) -> untyped
|
15
|
+
end
|
16
|
+
end
|
data/sig/constants.rbs
ADDED
data/sig/version.rbs
ADDED
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: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Technion
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.8'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: steep
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.43.1
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.43.1
|
125
139
|
description: Argon2 FFI binding
|
126
140
|
email:
|
127
141
|
- technion@lolware.net
|
@@ -130,7 +144,6 @@ extensions:
|
|
130
144
|
- ext/argon2_wrap/extconf.rb
|
131
145
|
extra_rdoc_files: []
|
132
146
|
files:
|
133
|
-
- ".github/workflows/rubocop.yml"
|
134
147
|
- ".github/workflows/ruby.yml"
|
135
148
|
- ".gitignore"
|
136
149
|
- ".gitmodules"
|
@@ -141,9 +154,11 @@ files:
|
|
141
154
|
- LICENSE.txt
|
142
155
|
- README.md
|
143
156
|
- Rakefile
|
157
|
+
- Steepfile
|
144
158
|
- argon2.gemspec
|
145
159
|
- bin/console
|
146
160
|
- bin/setup
|
161
|
+
- bin/test
|
147
162
|
- ext/argon2_wrap/Makefile
|
148
163
|
- ext/argon2_wrap/argon_wrap.c
|
149
164
|
- ext/argon2_wrap/extconf.rb
|
@@ -233,7 +248,11 @@ files:
|
|
233
248
|
- lib/argon2/engine.rb
|
234
249
|
- lib/argon2/errors.rb
|
235
250
|
- lib/argon2/ffi_engine.rb
|
251
|
+
- lib/argon2/hash_format.rb
|
236
252
|
- lib/argon2/version.rb
|
253
|
+
- sig/argon2.rbs
|
254
|
+
- sig/constants.rbs
|
255
|
+
- sig/version.rbs
|
237
256
|
homepage: https://github.com/technion/ruby-argon2
|
238
257
|
licenses:
|
239
258
|
- MIT
|
@@ -246,14 +265,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
246
265
|
requirements:
|
247
266
|
- - ">="
|
248
267
|
- !ruby/object:Gem::Version
|
249
|
-
version:
|
268
|
+
version: 2.6.0
|
250
269
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
270
|
requirements:
|
252
271
|
- - ">="
|
253
272
|
- !ruby/object:Gem::Version
|
254
273
|
version: '0'
|
255
274
|
requirements: []
|
256
|
-
rubygems_version: 3.
|
275
|
+
rubygems_version: 3.2.21
|
257
276
|
signing_key:
|
258
277
|
specification_version: 4
|
259
278
|
summary: Argon2 Password hashing binding
|
@@ -1,16 +0,0 @@
|
|
1
|
-
name: Rubocop
|
2
|
-
|
3
|
-
# Run this workflow every time a new commit pushed to your repository
|
4
|
-
on: push
|
5
|
-
|
6
|
-
jobs:
|
7
|
-
|
8
|
-
rubocop:
|
9
|
-
name: Rubocopchecks
|
10
|
-
runs-on: ubuntu-latest
|
11
|
-
steps:
|
12
|
-
- name: Run Rubocop
|
13
|
-
uses: gimenete/rubocop-action@1.0
|
14
|
-
env:
|
15
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
16
|
-
|