summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Padilla <jpadilla@webapplicate.com>2014-01-18 12:41:03 -0500
committerJosé Padilla <jpadilla@webapplicate.com>2014-01-18 12:41:03 -0500
commit84a0ba9793661f77fac3ec7b635fa10a4c2f41cb (patch)
treee4ff3dcda58c7c89eca90307e6236feb24e2a95c
parent3ca7667884e6d31605a55385d1df9d14af64f60e (diff)
downloadpyjwt-84a0ba9793661f77fac3ec7b635fa10a4c2f41cb.tar.gz
Make Crypto signing and verifying methods optional
-rw-r--r--jwt/__init__.py39
1 files changed, 24 insertions, 15 deletions
diff --git a/jwt/__init__.py b/jwt/__init__.py
index b73aa08..708d7ca 100644
--- a/jwt/__init__.py
+++ b/jwt/__init__.py
@@ -14,11 +14,6 @@ from datetime import datetime
from calendar import timegm
from collections import Mapping
-from Crypto.Signature import PKCS1_v1_5
-from Crypto.Hash import SHA256
-from Crypto.Hash import SHA384
-from Crypto.Hash import SHA512
-
try:
import json
except ImportError:
@@ -42,20 +37,34 @@ class ExpiredSignature(Exception):
signing_methods = {
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
- 'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
- 'RS256': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA256.new(msg)),
- 'RS384': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA384.new(msg)),
- 'RS512': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA512.new(msg)),
- }
+ 'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest()
+}
verify_methods = {
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
- 'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
- 'RS256': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA256.new(msg), sig),
- 'RS384': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA384.new(msg), sig),
- 'RS512': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA512.new(msg), sig),
- }
+ 'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest()
+}
+
+try:
+ from Crypto.Signature import PKCS1_v1_5
+ from Crypto.Hash import SHA256
+ from Crypto.Hash import SHA384
+ from Crypto.Hash import SHA512
+
+ signing_methods.update({
+ 'RS256': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA256.new(msg)),
+ 'RS384': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA384.new(msg)),
+ 'RS512': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA512.new(msg))
+ })
+
+ verify_methods.update({
+ 'RS256': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA256.new(msg), sig),
+ 'RS384': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA384.new(msg), sig),
+ 'RS512': lambda msg, key, sig: PKCS1_v1_5.new(key).verify(SHA512.new(msg), sig)
+ })
+except ImportError:
+ pass
def constant_time_compare(val1, val2):