Skip to content

Commit f5216cf

Browse files
committed
Support JWK Set
1 parent 048377d commit f5216cf

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

jose/jws.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,14 @@ def _load(jwt):
205205
return (header, payload, signing_input, signature)
206206

207207

208+
def _sig_matches_keys(keys, signing_input, signature, alg):
209+
for key in keys:
210+
key = jwk.construct(key, alg)
211+
if key.verify(signing_input, signature):
212+
return True
213+
return False
214+
215+
208216
def _verify_signature(signing_input, header, signature, key='', algorithms=None):
209217

210218
alg = header.get('alg')
@@ -214,12 +222,14 @@ def _verify_signature(signing_input, header, signature, key='', algorithms=None)
214222
if algorithms is not None and alg not in algorithms:
215223
raise JWSError('The specified alg value is not allowed')
216224

217-
try:
218-
key = jwk.construct(key, alg)
225+
if 'keys' in key: # JWK Set per RFC 7517
226+
keys = key['keys']
227+
else:
228+
keys = [key]
219229

220-
if not key.verify(signing_input, signature):
230+
try:
231+
if not _sig_matches_keys(keys, signing_input, signature, alg):
221232
raise JWSSignatureError()
222-
223233
except JWSSignatureError:
224234
raise JWSError('Signature verification failed.')
225235
except JWSError:

0 commit comments

Comments
 (0)