Skip to content

Commit fb7d4ac

Browse files
committed
Merge pull request jpadilla#45 from skion/none
Add support for alg="none".
2 parents 3db70f1 + b090043 commit fb7d4ac

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

jwt/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class ExpiredSignature(Exception):
3838

3939

4040
signing_methods = {
41+
'none': lambda msg, key: b'',
4142
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
4243
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
4344
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest()
@@ -60,6 +61,7 @@ def prepare_HS_key(key):
6061
return key
6162

6263
prepare_key_methods = {
64+
'none': lambda key: None,
6365
'HS256': prepare_HS_key,
6466
'HS384': prepare_HS_key,
6567
'HS512': prepare_HS_key
@@ -154,6 +156,9 @@ def header(jwt):
154156
def encode(payload, key, algorithm='HS256', headers=None):
155157
segments = []
156158

159+
if algorithm is None:
160+
algorithm = 'none'
161+
157162
# Check that we get a mapping
158163
if not isinstance(payload, Mapping):
159164
raise TypeError('Expecting a mapping object, as json web token only'

tests/test_jwt.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,15 @@ def test_decode_with_notbefore_with_leeway(self):
381381
lambda: jwt.verify_signature(decoded_payload, signing,
382382
header, signature, secret, leeway=1))
383383

384+
def test_encode_decode_with_algo_none(self):
385+
jwt_message = jwt.encode(self.payload, key=None, algorithm=None)
386+
387+
self.assertRaises(
388+
jwt.DecodeError,
389+
lambda: jwt.decode(jwt_message))
390+
391+
jwt.decode(jwt_message, verify=False)
392+
384393
def test_encode_decode_with_rsa_sha256(self):
385394
try:
386395
from Crypto.PublicKey import RSA

0 commit comments

Comments
 (0)