jwt 2.10.1 → 2.10.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dcc16f3a25f01facd96faaf83722fd6d45e2a2fa80539e68727cee1a6df71cc1
4
- data.tar.gz: 241e7ef393bd3c40356e730466e32d45bc63f0d4e9983d2c40c7bef2424334fa
3
+ metadata.gz: 014554dde95af535e1c1b84fb4532d6a69ecf2391baaf21c69bbabefb91e4d1c
4
+ data.tar.gz: f309fd328b353d1ebc2f96e4938cd3d82bf1cc88ab3f94fbadb30027c98751d7
5
5
  SHA512:
6
- metadata.gz: dffc0046d44c6a5d03538bbd9f0870da9142873ea5ffbb186ccfd339324d3e4c0c1f2e104c668f819047f54573717cd396b1bf8cb96a9a971cf02f6151100bfe
7
- data.tar.gz: d86d34077d0fe9d760d72bd176262fafedcea294dada4e95f33b2a0bbeb9995f8e9e3f8d6225cff3cdd480d981dfa40da396683a662cdabc9410266fbde0709f
6
+ metadata.gz: f6c6fc5f6ec227884cb6cbef16cf91063c29e81a58b3a0186b50dce86b66ea769bac89742e030f4db59097e67d263819bf3d73a6e1b3ca337eec65dc6219bedb
7
+ data.tar.gz: 8c62212530a0f8bb6405ed923a0bcfb50375ed63e51f5fe3570d59f7208a6d018434d2de8fefb932b1a2401920b615a69adc5b072be1238f7bf849fda823f26a
data/CHANGELOG.md CHANGED
@@ -1,7 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [v2.10.3](https://github.com/jwt/ruby-jwt/tree/v2.10.3) (2026-05-22)
4
+
5
+ [Full Changelog](https://github.com/jwt/ruby-jwt/compare/v2.10.2...v2.10.3)
6
+
7
+ **Fixes and enhancements:**
8
+
9
+ - Backport: Reject `nil` and empty HMAC keys when signing and verifying ([CVE-2026-45363](https://www.cve.org/CVERecord?id=CVE-2026-45363) / [GHSA-c32j-vqhx-rx3x](https://github.com/jwt/ruby-jwt/security/advisories/GHSA-c32j-vqhx-rx3x)) [#725](https://github.com/jwt/ruby-jwt/pull/725) ([@royzwambag](https://github.com/royzwambag))
10
+
11
+ ## [v2.10.2](https://github.com/jwt/ruby-jwt/tree/v2.10.2) (2025-06-29)
12
+
13
+ [Full Changelog](https://github.com/jwt/ruby-jwt/compare/v2.10.1...v2.10.2)
14
+
15
+ **Fixes and enhancements:**
16
+
17
+ - Avoid using the same digest across calls in JWT::JWA::Ecdsa and JWT::JWA::Rsa [#697](https://github.com/jwt/ruby-jwt/pull/697)
18
+
3
19
  ## [v2.10.1](https://github.com/jwt/ruby-jwt/tree/v2.10.1) (2024-12-26)
4
20
 
21
+ [Full Changelog](https://github.com/jwt/ruby-jwt/compare/v2.10.0...v2.10.1)
22
+
5
23
  **Fixes and enhancements:**
6
24
 
7
25
  - Make version constants public again [#646](https://github.com/jwt/ruby-jwt/pull/646) ([@anakinj]
data/lib/jwt/jwa/ecdsa.rb CHANGED
@@ -8,7 +8,7 @@ module JWT
8
8
 
9
9
  def initialize(alg, digest)
10
10
  @alg = alg
11
- @digest = OpenSSL::Digest.new(digest)
11
+ @digest = digest
12
12
  end
13
13
 
14
14
  def sign(data:, signing_key:)
@@ -16,7 +16,7 @@ module JWT
16
16
  key_algorithm = curve_definition[:algorithm]
17
17
  raise IncorrectAlgorithm, "payload algorithm is #{alg} but #{key_algorithm} signing key was provided" if alg != key_algorithm
18
18
 
19
- asn1_to_raw(signing_key.dsa_sign_asn1(digest.digest(data)), signing_key)
19
+ asn1_to_raw(signing_key.dsa_sign_asn1(OpenSSL::Digest.new(digest).digest(data)), signing_key)
20
20
  end
21
21
 
22
22
  def verify(data:, signature:, verification_key:)
@@ -24,7 +24,7 @@ module JWT
24
24
  key_algorithm = curve_definition[:algorithm]
25
25
  raise IncorrectAlgorithm, "payload algorithm is #{alg} but #{key_algorithm} verification key was provided" if alg != key_algorithm
26
26
 
27
- verification_key.dsa_verify_asn1(digest.digest(data), raw_to_asn1(signature, verification_key))
27
+ verification_key.dsa_verify_asn1(OpenSSL::Digest.new(digest).digest(data), raw_to_asn1(signature, verification_key))
28
28
  rescue OpenSSL::PKey::PKeyError
29
29
  raise JWT::VerificationError, 'Signature verification raised'
30
30
  end
data/lib/jwt/jwa/eddsa.rb CHANGED
@@ -13,7 +13,7 @@ module JWT
13
13
  def sign(data:, signing_key:)
14
14
  raise_sign_error!("Key given is a #{signing_key.class} but has to be an RbNaCl::Signatures::Ed25519::SigningKey") unless signing_key.is_a?(RbNaCl::Signatures::Ed25519::SigningKey)
15
15
 
16
- Deprecations.warning('Using Ed25519 keys is deprecated and will be removed in a future version of ruby-jwt. Please use the ruby-eddsa gem instead.')
16
+ Deprecations.warning('Using the EdDSA algorithm is deprecated and will be removed in a future version of ruby-jwt. In the future the algorithm will be provided by the jwt-eddsa gem.')
17
17
 
18
18
  signing_key.sign(data)
19
19
  end
@@ -21,7 +21,7 @@ module JWT
21
21
  def verify(data:, signature:, verification_key:)
22
22
  raise_verify_error!("key given is a #{verification_key.class} but has to be a RbNaCl::Signatures::Ed25519::VerifyKey") unless verification_key.is_a?(RbNaCl::Signatures::Ed25519::VerifyKey)
23
23
 
24
- Deprecations.warning('Using Ed25519 keys is deprecated and will be removed in a future version of ruby-jwt. Please use the ruby-eddsa gem instead.')
24
+ Deprecations.warning('Using the EdDSA algorithm is deprecated and will be removed in a future version of ruby-jwt. In the future the algorithm will be provided by the jwt-eddsa gem.')
25
25
 
26
26
  verification_key.verify(signature, data)
27
27
  rescue RbNaCl::CryptoError
data/lib/jwt/jwa/hmac.rb CHANGED
@@ -16,18 +16,15 @@ module JWT
16
16
  end
17
17
 
18
18
  def sign(data:, signing_key:)
19
- signing_key ||= ''
20
- raise_verify_error!('HMAC key expected to be a String') unless signing_key.is_a?(String)
19
+ ensure_valid_key!(signing_key)
21
20
 
22
21
  OpenSSL::HMAC.digest(digest.new, signing_key, data)
23
- rescue OpenSSL::HMACError => e
24
- raise_verify_error!('OpenSSL 3.0 does not support nil or empty hmac_secret') if signing_key == '' && e.message == 'EVP_PKEY_new_mac_key: malloc failure'
25
-
26
- raise e
27
22
  end
28
23
 
29
24
  def verify(data:, signature:, verification_key:)
30
- SecurityUtils.secure_compare(signature, sign(data: data, signing_key: verification_key))
25
+ ensure_valid_key!(verification_key)
26
+
27
+ SecurityUtils.secure_compare(signature, OpenSSL::HMAC.digest(digest.new, verification_key, data))
31
28
  end
32
29
 
33
30
  register_algorithm(new('HS256', OpenSSL::Digest::SHA256))
@@ -38,6 +35,11 @@ module JWT
38
35
 
39
36
  attr_reader :digest
40
37
 
38
+ def ensure_valid_key!(key)
39
+ raise_verify_error!('HMAC key expected to be a String') unless key.is_a?(String)
40
+ raise_verify_error!('HMAC key cannot be empty') if key.empty?
41
+ end
42
+
41
43
  # Copy of https://github.com/rails/rails/blob/v7.0.3.1/activesupport/lib/active_support/security_utils.rb
42
44
  # rubocop:disable Naming/MethodParameterName, Style/StringLiterals, Style/NumericPredicate
43
45
  module SecurityUtils
data/lib/jwt/jwa/rsa.rb CHANGED
@@ -8,17 +8,17 @@ module JWT
8
8
 
9
9
  def initialize(alg)
10
10
  @alg = alg
11
- @digest = OpenSSL::Digest.new(alg.sub('RS', 'SHA'))
11
+ @digest = alg.sub('RS', 'SHA')
12
12
  end
13
13
 
14
14
  def sign(data:, signing_key:)
15
15
  raise_sign_error!("The given key is a #{signing_key.class}. It has to be an OpenSSL::PKey::RSA instance") unless signing_key.is_a?(OpenSSL::PKey::RSA)
16
16
 
17
- signing_key.sign(digest, data)
17
+ signing_key.sign(OpenSSL::Digest.new(digest), data)
18
18
  end
19
19
 
20
20
  def verify(data:, signature:, verification_key:)
21
- verification_key.verify(digest, signature, data)
21
+ verification_key.verify(OpenSSL::Digest.new(digest), signature, data)
22
22
  rescue OpenSSL::PKey::PKeyError
23
23
  raise JWT::VerificationError, 'Signature verification raised'
24
24
  end
data/lib/jwt/version.rb CHANGED
@@ -16,7 +16,7 @@ module JWT
16
16
  module VERSION
17
17
  MAJOR = 2
18
18
  MINOR = 10
19
- TINY = 1
19
+ TINY = 3
20
20
  PRE = nil
21
21
 
22
22
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
data/ruby-jwt.gemspec CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
35
35
 
36
36
  spec.add_development_dependency 'appraisal'
37
37
  spec.add_development_dependency 'bundler'
38
+ spec.add_development_dependency 'logger'
38
39
  spec.add_development_dependency 'rake'
39
40
  spec.add_development_dependency 'rspec'
40
41
  spec.add_development_dependency 'rubocop'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.1
4
+ version: 2.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Rudat
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2024-12-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: base64
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: logger
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: rake
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -180,7 +194,7 @@ licenses:
180
194
  - MIT
181
195
  metadata:
182
196
  bug_tracker_uri: https://github.com/jwt/ruby-jwt/issues
183
- changelog_uri: https://github.com/jwt/ruby-jwt/blob/v2.10.1/CHANGELOG.md
197
+ changelog_uri: https://github.com/jwt/ruby-jwt/blob/v2.10.3/CHANGELOG.md
184
198
  rubygems_mfa_required: 'true'
185
199
  rdoc_options: []
186
200
  require_paths:
@@ -196,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
210
  - !ruby/object:Gem::Version
197
211
  version: '0'
198
212
  requirements: []
199
- rubygems_version: 3.6.2
213
+ rubygems_version: 4.0.10
200
214
  specification_version: 4
201
215
  summary: JSON Web Token implementation in Ruby
202
216
  test_files: []