argon2id 0.7.0 → 0.8.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe0651aa144c9dd31ce3eec05fff4a92b19f9c3123ccca67c2f19ae0e0047e85
4
- data.tar.gz: fdc003fc28fd0258bf838c599f5a7bf784296aefbd3658efc87e6ca23a9ea4a4
3
+ metadata.gz: 119b279c6ef2b526ac12f0e6a586d48cf472f2b45fb84d82a99dd918a2d846e9
4
+ data.tar.gz: 8e1c05a7b9b2b67cd386c76c404ec546eddb7f87382a6fbdb39146709e6ae05b
5
5
  SHA512:
6
- metadata.gz: b6eae30f919739df31878696ec9ce8d2bfd26bbc4c8dfe8a442021d139b51c80c6bc362c9810cad9dc706b4f32d36333ca85bbcdd5620ae169981d6766fd3d8c
7
- data.tar.gz: d9c614f7e76e809677402b3f451b932ccfe413775d4bbf27131552f4c6249f819cef39db7285a85f5f91aaa37ad4b2f3cde6f24545f9d7eb412598df3cdcdbb8
6
+ metadata.gz: 6a01dcec727fdea0a54cd963d2a944db78885ab159e5bbf94fbba7bcba175dc503c10f4e1c70785a37075669f4426baffe2b7e411fd7ae11bb26351ae54fc94f
7
+ data.tar.gz: 5060c0426198101d970d939731787309a58d346a247f0d8d5ee478898067a387d4ec7f92586faf80b6e258b7670410c167ce33b71f9f87ce0ca3b7b98fd629e9
data/CHANGELOG.md CHANGED
@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.8.0.rc1] - 2024-12-16
9
+
10
+ ### Added
11
+
12
+ - Add Ruby 3.4.0-rc1 support to the precompiled, native gems
13
+
14
+ ### Changed
15
+
16
+ - Provide separate precompiled, native gems for GNU and Musl
17
+ - Require glibc 2.29+ for x86-linux-gnu and x86_64-linux-gnu (and recommend
18
+ RubyGems 3.3.22+ and Bundler 2.3.21+)
19
+
20
+ ### Removed
21
+
22
+ - Drop support for Ruby versions older than 3.1 as they do not ship with a
23
+ version of RubyGems new enough to handle the new Musl gems
24
+
8
25
  ## [0.7.0] - 2024-11-08
9
26
 
10
27
  ### Fixed
@@ -111,6 +128,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
111
128
  reference C implementation of Argon2, the password-hashing function that won
112
129
  the Password Hashing Competition.
113
130
 
131
+ [0.8.0.rc1]: https://github.com/mudge/argon2id/releases/tag/v0.8.0.rc1
114
132
  [0.7.0]: https://github.com/mudge/argon2id/releases/tag/v0.7.0
115
133
  [0.6.0]: https://github.com/mudge/argon2id/releases/tag/v0.6.0
116
134
  [0.5.0]: https://github.com/mudge/argon2id/releases/tag/v0.5.0
data/README.md CHANGED
@@ -5,7 +5,7 @@ Ruby bindings to [Argon2][], the password-hashing function that won the 2015
5
5
 
6
6
  [![Build Status](https://github.com/mudge/argon2id/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/mudge/argon2id/actions)
7
7
 
8
- **Current version:** 0.7.0
8
+ **Current version:** 0.8.0.rc1
9
9
  **Bundled Argon2 version:** libargon2.1 (20190702)
10
10
 
11
11
  ```ruby
@@ -28,6 +28,7 @@ password.salt #=> "e-\xA7\x04U\x81\xA6{v\xF0x\xED\xCC\xD3\x96\xE3"
28
28
  * [Verifying passwords](#verifying-passwords)
29
29
  * [Validating encoded hashes](#validating-encoded-hashes)
30
30
  * [Errors](#errors)
31
+ * [Usage with Active Record](#usage-with-active-record)
31
32
  * [Requirements](#requirements)
32
33
  * [Native gems](#native-gems)
33
34
  * [Verifying the gems](#verifying-the-gems)
@@ -196,11 +197,67 @@ Argon2id::Password.create("password", salt_len: 0)
196
197
  # Salt is too short (Argon2id::Error)
197
198
  ```
198
199
 
200
+ ### Usage with Active Record
201
+
202
+ If you're planning to use this with Active Record instead of [Rails' own
203
+ bcrypt-based
204
+ `has_secure_password`](https://api.rubyonrails.org/v8.0/classes/ActiveModel/SecurePassword/ClassMethods.html),
205
+ you can use the following as a starting point:
206
+
207
+ #### The `User` model
208
+
209
+ ```ruby
210
+ require "argon2id"
211
+
212
+ # Schema: User(name: string, password_digest:string)
213
+ class User < ApplicationRecord
214
+ attr_reader :password
215
+
216
+ validates :password_digest, presence: true
217
+ validates :password, confirmation: true, allow_blank: true
218
+
219
+ def password=(unencrypted_password)
220
+ if unencrypted_password.nil?
221
+ @password = nil
222
+ self.password_digest = nil
223
+ elsif !unencrypted_password.empty?
224
+ @password = unencrypted_password
225
+ self.password_digest = Argon2id::Password.create(unencrypted_password)
226
+ end
227
+ end
228
+
229
+ def authenticate(unencrypted_password)
230
+ password_digest? && Argon2id::Password.new(password_digest).is_password?(unencrypted_password) && self
231
+ end
232
+
233
+ def password_salt
234
+ Argon2id::Password.new(password_digest).salt if password_digest?
235
+ end
236
+ end
237
+ ```
238
+
239
+ This can then be used like so:
240
+
241
+ ```ruby
242
+ user = User.new(name: "alice", password: "", password_confirmation: "diffpassword")
243
+ user.save #=> false, password required
244
+ user.password = "password"
245
+ user.save #=> false, confirmation doesn't match
246
+ user.password_confirmation = "password"
247
+ user.save #=> true
248
+
249
+ user.authenticate("notright") #=> false
250
+ user.authenticate("password") #=> user
251
+
252
+ User.find_by(name: "alice")&.authenticate("notright") #=> false
253
+ User.find_by(name: "alice")&.authenticate("password") #=> user
254
+ ```
255
+
199
256
  ## Requirements
200
257
 
201
258
  This gem requires any of the following to run:
202
259
 
203
- * [Ruby](https://www.ruby-lang.org/en/) 2.6 to 3.3
260
+ * [Ruby](https://www.ruby-lang.org/en/) 3.1 to 3.4.0-rc1
204
261
  * [JRuby](https://www.jruby.org) 9.4
205
262
  * [TruffleRuby](https://www.graalvm.org/ruby/) 24.1
206
263
 
@@ -214,11 +271,10 @@ This gem requires any of the following to run:
214
271
  Where possible, a pre-compiled native gem will be provided for the following platforms:
215
272
 
216
273
  * Linux
217
- * `aarch64-linux` and `arm-linux` (requires [glibc](https://www.gnu.org/software/libc/) 2.29+)
218
- * `x86-linux` and `x86_64-linux` (requires [glibc](https://www.gnu.org/software/libc/) 2.17+)
219
- * [musl](https://musl.libc.org/)-based systems such as [Alpine](https://alpinelinux.org) are supported as long as a [glibc-compatible library is installed](https://wiki.alpinelinux.org/wiki/Running_glibc_programs)
274
+ * `aarch64-linux`, `arm-linux`, `x86-linux`, `x86_64-linux` (requires [glibc](https://www.gnu.org/software/libc/) 2.29+, RubyGems 3.3.22+ and Bundler 2.3.21+)
275
+ * [musl](https://musl.libc.org/)-based systems such as [Alpine](https://alpinelinux.org) are supported with Bundler 2.5.6+
220
276
  * macOS `x86_64-darwin` and `arm64-darwin`
221
- * Windows `x64-mingw32` and `x64-mingw-ucrt`
277
+ * Windows `x64-mingw-ucrt`
222
278
  * Java: any platform running JRuby 9.4 or higher
223
279
 
224
280
  ### Verifying the gems
@@ -228,11 +284,11 @@ notes](https://github.com/mudge/argon2id/releases) for each version and can be
228
284
  checked with `sha256sum`, e.g.
229
285
 
230
286
  ```console
231
- $ gem fetch argon2id -v 0.6.0
232
- Fetching argon2id-0.6.0-arm64-darwin.gem
233
- Downloaded argon2id-0.6.0-arm64-darwin
234
- $ sha256sum argon2id-0.6.0-arm64-darwin.gem
235
- 18f1f04be4b5e7badb4d491762e57874febeeb46c64ce1b0a5e3a75b39b5baeb argon2id-0.6.0-arm64-darwin.gem
287
+ $ gem fetch argon2id -v 0.7.0
288
+ Fetching argon2id-0.7.0-arm64-darwin.gem
289
+ Downloaded argon2id-0.7.0-arm64-darwin
290
+ $ sha256sum argon2id-0.7.0-arm64-darwin.gem
291
+ 26bba5bcefa56827c728222e6df832aef5c8c4f4d3285875859a1d911477ec68 argon2id-0.7.0-arm64-darwin.gem
236
292
  ```
237
293
 
238
294
  [GPG](https://www.gnupg.org/) signatures are attached to each release (the
@@ -242,8 +298,8 @@ from a public keyserver, e.g. `gpg --keyserver keyserver.ubuntu.com --recv-key
242
298
  0x39AC3530070E0F75`):
243
299
 
244
300
  ```console
245
- $ gpg --verify argon2id-0.6.0-arm64-darwin.gem.sig argon2id-0.6.0-arm64-darwin.gem
246
- gpg: Signature made Tue 5 Nov 11:30:47 2024 GMT
301
+ $ gpg --verify argon2id-0.7.0-arm64-darwin.gem.sig argon2id-0.7.0-arm64-darwin.gem
302
+ gpg: Signature made Fri 8 Nov 13:45:18 2024 GMT
247
303
  gpg: using RSA key 702609D9C790F45B577D7BEC39AC3530070E0F75
248
304
  gpg: Good signature from "Paul Mucur <mudge@mudge.name>" [unknown]
249
305
  gpg: aka "Paul Mucur <paul@ghostcassette.com>" [unknown]
data/Rakefile CHANGED
@@ -5,18 +5,22 @@ require "minitest/test_task"
5
5
  CLEAN.add("lib/**/*.{o,so,bundle}", "pkg")
6
6
 
7
7
  cross_platforms = %w[
8
- aarch64-linux
9
- arm-linux
8
+ aarch64-linux-gnu
9
+ aarch64-linux-musl
10
+ arm-linux-gnu
11
+ arm-linux-musl
10
12
  arm64-darwin
11
13
  x64-mingw-ucrt
12
14
  x64-mingw32
13
- x86-linux
15
+ x86-linux-gnu
16
+ x86-linux-musl
14
17
  x86-mingw32
15
18
  x86_64-darwin
16
- x86_64-linux
19
+ x86_64-linux-gnu
20
+ x86_64-linux-musl
17
21
  ].freeze
18
22
 
19
- ENV["RUBY_CC_VERSION"] = %w[3.3.0 3.2.0 3.1.0 3.0.0 2.7.0 2.6.0].join(":")
23
+ ENV["RUBY_CC_VERSION"] = %w[3.4.0 3.3.5 3.2.0 3.1.0].join(":")
20
24
 
21
25
  gemspec = Gem::Specification.load("argon2id.gemspec")
22
26
 
data/argon2id.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  "source_code_uri" => "https://github.com/mudge/argon2id",
19
19
  "rubygems_mfa_required" => "true"
20
20
  }
21
- s.required_ruby_version = ">= 2.6.0"
21
+ s.required_ruby_version = ">= 3.1.0"
22
22
  s.extensions = ["ext/argon2id/extconf.rb"]
23
23
  s.files = [
24
24
  "CHANGELOG.md",
@@ -54,6 +54,6 @@ Gem::Specification.new do |s|
54
54
  s.rdoc_options = ["--main", "README.md"]
55
55
 
56
56
  s.add_development_dependency("rake-compiler", "~> 1.2")
57
- s.add_development_dependency("rake-compiler-dock", "~> 1.5")
57
+ s.add_development_dependency("rake-compiler-dock", "~> 1.7.0.rc1")
58
58
  s.add_development_dependency("minitest", "~> 5.25")
59
59
  end
@@ -15,10 +15,11 @@ if RUBY_PLATFORM == "java"
15
15
  output = Java::byte[hashlen].new
16
16
  params = Java::OrgBouncycastleCryptoParams::Argon2Parameters::Builder
17
17
  .new(Java::OrgBouncycastleCryptoParams::Argon2Parameters::ARGON2_id)
18
- .with_salt(salt_bytes)
19
- .with_parallelism(parallelism)
20
- .with_memory_as_kb(m_cost)
18
+ .with_version(Java::OrgBouncycastleCryptoParams::Argon2Parameters::ARGON2_VERSION_13)
21
19
  .with_iterations(t_cost)
20
+ .with_memory_as_kb(m_cost)
21
+ .with_parallelism(parallelism)
22
+ .with_salt(salt_bytes)
22
23
  .build
23
24
  generator = Java::OrgBouncycastleCryptoGenerators::Argon2BytesGenerator.new
24
25
 
@@ -43,11 +44,11 @@ if RUBY_PLATFORM == "java"
43
44
  other_output = Java::byte[output.bytesize].new
44
45
  params = Java::OrgBouncycastleCryptoParams::Argon2Parameters::Builder
45
46
  .new(Java::OrgBouncycastleCryptoParams::Argon2Parameters::ARGON2_id)
46
- .with_salt(salt.to_java_bytes)
47
- .with_parallelism(parallelism)
48
- .with_memory_as_kb(m_cost)
49
- .with_iterations(t_cost)
50
47
  .with_version(version)
48
+ .with_iterations(t_cost)
49
+ .with_memory_as_kb(m_cost)
50
+ .with_parallelism(parallelism)
51
+ .with_salt(salt.to_java_bytes)
51
52
  .build
52
53
  generator = Java::OrgBouncycastleCryptoGenerators::Argon2BytesGenerator.new
53
54
  generator.init(params)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Argon2id
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0.rc1"
5
5
  end
@@ -386,6 +386,12 @@ class TestPassword < Minitest::Test
386
386
  assert_instance_of Argon2id::Password, password
387
387
  end
388
388
 
389
+ def test_create_password_uses_version_13
390
+ password = Argon2id::Password.create("password")
391
+
392
+ assert_equal 0x13, password.version
393
+ end
394
+
389
395
  def test_create_password_uses_default_t_cost
390
396
  password = Argon2id::Password.create("password")
391
397
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argon2id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0.rc1
5
5
  platform: ruby
6
+ original_platform: ''
6
7
  authors:
7
8
  - Paul Mucur
8
- autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-08 00:00:00.000000000 Z
11
+ date: 2024-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.5'
33
+ version: 1.7.0.rc1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.5'
40
+ version: 1.7.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -54,7 +54,6 @@ dependencies:
54
54
  version: '5.25'
55
55
  description: Ruby bindings to Argon2, the password-hashing function that won the 2015
56
56
  Password Hashing Competition.
57
- email:
58
57
  executables: []
59
58
  extensions:
60
59
  - ext/argon2id/extconf.rb
@@ -99,7 +98,6 @@ metadata:
99
98
  homepage_uri: https://github.com/mudge/argon2id
100
99
  source_code_uri: https://github.com/mudge/argon2id
101
100
  rubygems_mfa_required: 'true'
102
- post_install_message:
103
101
  rdoc_options:
104
102
  - "--main"
105
103
  - README.md
@@ -109,15 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
107
  requirements:
110
108
  - - ">="
111
109
  - !ruby/object:Gem::Version
112
- version: 2.6.0
110
+ version: 3.1.0
113
111
  required_rubygems_version: !ruby/object:Gem::Requirement
114
112
  requirements:
115
113
  - - ">="
116
114
  - !ruby/object:Gem::Version
117
115
  version: '0'
118
116
  requirements: []
119
- rubygems_version: 3.5.22
120
- signing_key:
117
+ rubygems_version: 3.6.0.dev
121
118
  specification_version: 4
122
119
  summary: Ruby bindings to Argon2
123
120
  test_files: []