Skip to content

Commit 189220f

Browse files
committed
Merge pull request jpadilla#1 from mandus/rsa
First attempt on adding rsa support
2 parents 2b5dd54 + 8ec3e0e commit 189220f

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

jwt/__init__.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
from calendar import timegm
1212
from collections import Mapping
1313

14+
from Crypto.Signature import PKCS1_v1_5
15+
from Crypto.Hash import SHA256
16+
1417
try:
1518
import json
1619
except ImportError:
@@ -31,7 +34,15 @@ class ExpiredSignature(Exception):
3134
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
3235
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
3336
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
34-
}
37+
'RS256': lambda msg, key: PKCS1_v1_5.new(key).sign(SHA256.new(msg)),
38+
}
39+
40+
verify_methods = {
41+
'HS256': lambda msg, key: hmac.new(key, msg, hashlib.sha256).digest(),
42+
'HS384': lambda msg, key: hmac.new(key, msg, hashlib.sha384).digest(),
43+
'HS512': lambda msg, key: hmac.new(key, msg, hashlib.sha512).digest(),
44+
'RS256': lambda msg, key: PKCS1_v1_5.new(key).verify(SHA256.new(msg)),
45+
}
3546

3647

3748
def constant_time_compare(val1, val2):
@@ -126,7 +137,7 @@ def decode(jwt, key='', verify=True, verify_expiration=True, leeway=0):
126137
try:
127138
if isinstance(key, unicode):
128139
key = key.encode('utf-8')
129-
expected = signing_methods[header['alg']](signing_input, key)
140+
expected = verify_methods[header['alg']](signing_input, key)
130141
if not constant_time_compare(signature, expected):
131142
raise DecodeError("Signature verification failed")
132143
except KeyError:

0 commit comments

Comments
 (0)