argon2 2.0.3 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: 933cdf134b0ac4110cda1cd9a8108a75c0dc6d80e6d2cb68446d93b1898f298a
|
4
|
+
data.tar.gz: bcb1c0d25d2a074c59ad5002e2078d0aa344480022f9a658eb297dcbd16b1eb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d17d3f5c0a9162dca09db8ab7a9926becc50ace4527d2ad705db80d44ffdc528d3110853885ee5c042b5142c5cd619fd8c93d6a7dec75fc70d41fbb40661f259
|
7
|
+
data.tar.gz: 91fb841e70a470bf760871690c216ae4f305442a063b4c5a5c861fe97510c226db5f8db92cc65e8a93ea459fd42ac735bd216e2dfb333fc334f1e3f21cba3bbf
|
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
|
+
@salt_do_not_supply = options[:salt_do_not_supply]
|
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 = @salt_do_not_supply || 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.
|
4
|
+
version: 2.1.1
|
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-05 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
|
-
|