json-jwt 1.9.3 → 1.9.4

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.

Potentially problematic release.


This version of json-jwt might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 9d4b2dfb27f37a7525522312228284729a9f940698bfa3d1b7b3562f94cf998b
4
- data.tar.gz: 865265a1f3d884476535d0f3c8d3de258db91d9ca4948283b78f4a48cc1023c3
2
+ SHA1:
3
+ metadata.gz: f808ae988b45e4c8e03f0afcee499e0d4c89295e
4
+ data.tar.gz: f0f2cd732d906a495cc247afc0fd7eaa18725be2
5
5
  SHA512:
6
- metadata.gz: eae66e49d8e101e68575ec4a4bf7ac46cef62d151d3dbae4d1a1c17a7a17235f376991c7346c8e46c9605b8028bca41113da7b84d85a52b58a28050e59c586c1
7
- data.tar.gz: '0295d9284c1fb49c1f29881c915ffacac5f5f9c985f19f2a39c2bc27aac5570102f1f2d07032f62254b88eb3e8133236d4e6d4551235c83ec03c64a324e8593e'
6
+ metadata.gz: 5c6e99521dd9ec520097930ab4a0094f43b3e263f56c701eebc7f1278f75a51b2abf12dee99729efcf51db8d7dd40645e9546e6ad1e2ea8600e8284d00cedbfd
7
+ data.tar.gz: 5b87068577c488f213de6a2fe2346d757ee01d1c92aca73e2a87dbd3af07f28b321d511afb4968cd228afb47a41822c3b0040320ef47760629699701a8d8c0cc
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.3
1
+ 1.9.4
@@ -13,7 +13,6 @@ Gem::Specification.new do |gem|
13
13
  gem.require_paths = ['lib']
14
14
  gem.add_runtime_dependency 'activesupport'
15
15
  gem.add_runtime_dependency 'bindata'
16
- gem.add_runtime_dependency 'securecompare'
17
16
  gem.add_runtime_dependency 'aes_key_wrap'
18
17
  gem.add_development_dependency 'rake'
19
18
  gem.add_development_dependency 'simplecov'
@@ -1,4 +1,4 @@
1
- require 'securecompare'
1
+ require 'active_support/security_utils'
2
2
 
3
3
  module JSON
4
4
  module JOSE
@@ -6,7 +6,6 @@ module JSON
6
6
 
7
7
  included do
8
8
  extend ClassMethods
9
- include SecureCompare
10
9
  register_header_keys :alg, :jku, :jwk, :x5u, :x5t, :x5c, :kid, :typ, :cty, :crit
11
10
  alias_method :algorithm, :alg
12
11
 
@@ -33,6 +32,18 @@ module JSON
33
32
  end
34
33
  end
35
34
 
35
+ def secure_compare(a, b)
36
+ if ActiveSupport::SecurityUtils.respond_to?(:fixed_length_secure_compare)
37
+ begin
38
+ ActiveSupport::SecurityUtils.fixed_length_secure_compare(a, b)
39
+ rescue ArgumentError
40
+ false
41
+ end
42
+ else
43
+ ActiveSupport::SecurityUtils.secure_compare(a, b)
44
+ end
45
+ end
46
+
36
47
  module ClassMethods
37
48
  def register_header_keys(*keys)
38
49
  keys.each do |header_key|
@@ -48,6 +48,8 @@ module JSON
48
48
  cipher.key = encryption_key
49
49
  cipher.iv = iv # NOTE: 'iv' has to be set after 'key' for GCM
50
50
  if gcm?
51
+ # https://github.com/ruby/openssl/issues/63
52
+ raise DecryptionFailed.new('Invalid authentication tag') if authentication_tag.length < 16
51
53
  cipher.auth_tag = authentication_tag
52
54
  cipher.auth_data = auth_data
53
55
  end
@@ -70,6 +70,7 @@ module JSON
70
70
  end
71
71
 
72
72
  def autodetected_algorithm_from(private_key_or_secret)
73
+ private_key_or_secret = with_jwk_support private_key_or_secret
73
74
  case private_key_or_secret
74
75
  when String
75
76
  :HS256
@@ -169,6 +169,24 @@ describe JSON::JWE do
169
169
  end
170
170
  end
171
171
 
172
+ shared_examples_for :verify_gcm_authentication_tag do
173
+ let(:jwe_string) do
174
+ _jwe_ = JSON::JWE.new plain_text
175
+ _jwe_.alg, _jwe_.enc = alg, enc
176
+ _jwe_.encrypt! key
177
+ header, key, iv, cipher_text, auth_tag = _jwe_.to_s.split('.')
178
+ truncated_auth_tag = Base64.urlsafe_decode64(auth_tag).slice(0..-2)
179
+ truncated_auth_tag = Base64.urlsafe_encode64(truncated_auth_tag, padding: false)
180
+ [header, key, iv, cipher_text, truncated_auth_tag].join('.')
181
+ end
182
+
183
+ it do
184
+ expect do
185
+ jwe.decrypt! key
186
+ end.to raise_error JSON::JWE::DecryptionFailed
187
+ end
188
+ end
189
+
172
190
  shared_examples_for :unexpected_algorithm_for_decryption do
173
191
  it do
174
192
  expect do
@@ -193,6 +211,7 @@ describe JSON::JWE do
193
211
  let(:enc) { :A128GCM }
194
212
  if gcm_supported?
195
213
  it_behaves_like :decryptable
214
+ it_behaves_like :verify_gcm_authentication_tag
196
215
  else
197
216
  it_behaves_like :gcm_decryption_unsupported
198
217
  end
@@ -202,6 +221,7 @@ describe JSON::JWE do
202
221
  let(:enc) { :A256GCM }
203
222
  if gcm_supported?
204
223
  it_behaves_like :decryptable
224
+ it_behaves_like :verify_gcm_authentication_tag
205
225
  else
206
226
  it_behaves_like :gcm_decryption_unsupported
207
227
  end
@@ -226,6 +246,7 @@ describe JSON::JWE do
226
246
  let(:enc) { :A128GCM }
227
247
  if gcm_supported?
228
248
  it_behaves_like :decryptable
249
+ it_behaves_like :verify_gcm_authentication_tag
229
250
  else
230
251
  it_behaves_like :gcm_decryption_unsupported
231
252
  end
@@ -235,6 +256,7 @@ describe JSON::JWE do
235
256
  let(:enc) { :A256GCM }
236
257
  if gcm_supported?
237
258
  it_behaves_like :decryptable
259
+ it_behaves_like :verify_gcm_authentication_tag
238
260
  else
239
261
  it_behaves_like :gcm_decryption_unsupported
240
262
  end
@@ -262,6 +284,7 @@ describe JSON::JWE do
262
284
  let(:key_size) { 16 }
263
285
  if gcm_supported?
264
286
  it_behaves_like :decryptable
287
+ it_behaves_like :verify_gcm_authentication_tag
265
288
  else
266
289
  it_behaves_like :gcm_decryption_unsupported
267
290
  end
@@ -272,6 +295,7 @@ describe JSON::JWE do
272
295
  let(:key_size) { 32 }
273
296
  if gcm_supported?
274
297
  it_behaves_like :decryptable
298
+ it_behaves_like :verify_gcm_authentication_tag
275
299
  else
276
300
  it_behaves_like :gcm_decryption_unsupported
277
301
  end
@@ -77,6 +77,33 @@ describe JSON::JWT do
77
77
  its(:alg) { should == :ES512 }
78
78
  end
79
79
  end
80
+
81
+ context 'when key is JWK with kty=okt' do
82
+ let(:key) { JSON::JWK.new shared_secret }
83
+ its(:alg) { should == :HS256 }
84
+ end
85
+
86
+ context 'when key is JWK with kty=RSA' do
87
+ let(:key) { JSON::JWK.new private_key }
88
+ its(:alg) { should == :RS256 }
89
+ end
90
+
91
+ context 'when key is JWK with kty=EC' do
92
+ context 'when prime256v1' do
93
+ let(:key) { JSON::JWK.new private_key(:ecdsa) }
94
+ its(:alg) { should == :ES256 }
95
+ end
96
+
97
+ context 'when secp384r1' do
98
+ let(:key) { JSON::JWK.new private_key(:ecdsa, digest_length: 384) }
99
+ its(:alg) { should == :ES384 }
100
+ end
101
+
102
+ context 'when secp521r1' do
103
+ let(:key) { JSON::JWK.new private_key(:ecdsa, digest_length: 512) }
104
+ its(:alg) { should == :ES512 }
105
+ end
106
+ end
80
107
  end
81
108
 
82
109
  context 'when non-JWK key is given' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.3
4
+ version: 1.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov matake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-27 00:00:00.000000000 Z
11
+ date: 2018-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: securecompare
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: aes_key_wrap
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -188,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
174
  version: '0'
189
175
  requirements: []
190
176
  rubyforge_project:
191
- rubygems_version: 2.7.3
177
+ rubygems_version: 2.6.11
192
178
  signing_key:
193
179
  specification_version: 4
194
180
  summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and