Skip to content

Commit 2161958

Browse files
authored
Merge pull request #187 from blag/allow-bytes-secret
Allow bytes secret
2 parents 99ec142 + 46302d7 commit 2161958

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

jose/jws.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -229,24 +229,23 @@ def _get_keys(key):
229229
except Exception:
230230
pass
231231

232-
# JWK Set per RFC 7517
233-
if 'keys' in key:
234-
return key['keys']
235-
236-
# Individual JWK per RFC 7517
237-
elif 'kty' in key:
238-
return (key,)
239-
240-
# Some other mapping. Firebase uses just dict of kid, cert pairs
241-
elif isinstance(key, Mapping):
242-
values = key.values()
243-
if values:
244-
return values
245-
return (key,)
232+
if isinstance(key, Mapping):
233+
if 'keys' in key:
234+
# JWK Set per RFC 7517
235+
return key['keys']
236+
elif 'kty' in key:
237+
# Individual JWK per RFC 7517
238+
return (key,)
239+
else:
240+
# Some other mapping. Firebase uses just dict of kid, cert pairs
241+
values = key.values()
242+
if values:
243+
return values
244+
return (key,)
246245

247246
# Iterable but not text or mapping => list- or tuple-like
248247
elif (isinstance(key, Iterable) and
249-
not (isinstance(key, six.string_types) or isinstance(key, Mapping))):
248+
not (isinstance(key, six.string_types) or isinstance(key, six.binary_type))):
250249
return key
251250

252251
# Scalar value, wrap in tuple.

tests/test_jws.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ def test_invalid_key(self, payload):
7777
with pytest.raises(JWSError):
7878
jws.sign(payload, 'secret', algorithm='RS256')
7979

80+
@pytest.mark.parametrize("key", [
81+
b'key',
82+
'key',
83+
])
84+
def test_round_trip_with_different_key_types(self, key):
85+
signed_data = jws.sign({'testkey': 'testvalue'}, key, algorithm=ALGORITHMS.HS256)
86+
verified_bytes = jws.verify(signed_data, key, algorithms=[ALGORITHMS.HS256])
87+
verified_data = json.loads(verified_bytes.decode('utf-8'))
88+
assert 'testkey' in verified_data.keys()
89+
assert verified_data['testkey'] == 'testvalue'
90+
8091

8192
class TestHMAC(object):
8293

tests/test_jwt.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ def test_decode(self, claims, key):
165165

166166
assert decoded == claims
167167

168+
@pytest.mark.parametrize('key', [
169+
b'key',
170+
'key',
171+
])
172+
def test_round_trip_with_different_key_types(self, key):
173+
token = jwt.encode({'testkey': 'testvalue'}, key, algorithm='HS256')
174+
verified_data = jwt.decode(token, key, algorithms=['HS256'])
175+
assert 'testkey' in verified_data.keys()
176+
assert verified_data['testkey'] == 'testvalue'
177+
168178
def test_leeway_is_int(self):
169179
pass
170180

0 commit comments

Comments
 (0)