Skip to content
This repository was archived by the owner on May 26, 2020. It is now read-only.

Commit 69d8b82

Browse files
committed
Update PyJWT temporarily until package release
1 parent e7605ec commit 69d8b82

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

requirements.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
Django>=1.3
2-
djangorestframework>=2.3.10
3-
pycrypto>=2.6.1
2+
djangorestframework>=2.3.10

rest_framework_jwt/jwt.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Minimum implementation based on this spec:
44
http://self-issued.info/docs/draft-jones-json-web-token-01.html
55
6-
Taken from: https://github.com/progrium/pyjwt @ 6b1e5e0
6+
Taken from: https://github.com/progrium/pyjwt @ 3bade27
77
"""
88
from __future__ import unicode_literals
99
import base64
@@ -16,11 +16,6 @@
1616
from calendar import timegm
1717
from collections import Mapping
1818

19-
from Crypto.Signature import PKCS1_v1_5
20-
from Crypto.Hash import SHA256
21-
from Crypto.Hash import SHA384
22-
from Crypto.Hash import SHA512
23-
2419
try:
2520
import json
2621
except ImportError:
@@ -44,20 +39,34 @@ class ExpiredSignature(Exception):
4439
signing_methods = {
4540
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
4641
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
47-
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
48-
'RS256': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA256.new(msg)),
49-
'RS384': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA384.new(msg)),
50-
'RS512': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA512.new(msg)),
51-
}
42+
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest()
43+
}
5244

5345
verify_methods = {
5446
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
5547
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
56-
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
57-
'RS256': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA256.new(msg), sig),
58-
'RS384': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA384.new(msg), sig),
59-
'RS512': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA512.new(msg), sig),
60-
}
48+
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest()
49+
}
50+
51+
try:
52+
from Crypto.Signature import PKCS1_v1_5
53+
from Crypto.Hash import SHA256
54+
from Crypto.Hash import SHA384
55+
from Crypto.Hash import SHA512
56+
57+
signing_methods.update({
58+
'RS256': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA256.new(msg)),
59+
'RS384': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA384.new(msg)),
60+
'RS512': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA512.new(msg))
61+
})
62+
63+
verify_methods.update({
64+
'RS256': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA256.new(msg), sig),
65+
'RS384': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA384.new(msg), sig),
66+
'RS512': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA512.new(msg), sig)
67+
})
68+
except ImportError:
69+
pass
6170

6271

6372
def constant_time_compare(val1, val2):
@@ -179,4 +188,4 @@ def decode(jwt, key='', verify=True, verify_expiration=True, leeway=0):
179188
utc_timestamp = timegm(datetime.utcnow().utctimetuple())
180189
if payload['exp'] < (utc_timestamp - leeway):
181190
raise ExpiredSignature("Signature has expired")
182-
return payload
191+
return payload

0 commit comments

Comments
 (0)