@@ -41,7 +41,7 @@ class ExpiredSignature(Exception):
4141 'HS256' : lambda msg , key : hmac .new (key , msg , hashlib .sha256 ).digest (),
4242 'HS384' : lambda msg , key : hmac .new (key , msg , hashlib .sha384 ).digest (),
4343 '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 )),
44+ 'RS256' : lambda msg , key , sig : PKCS1_v1_5 .new (key ).verify (SHA256 .new (msg ), sig ),
4545 }
4646
4747
@@ -137,9 +137,13 @@ def decode(jwt, key='', verify=True, verify_expiration=True, leeway=0):
137137 try :
138138 if isinstance (key , unicode ):
139139 key = key .encode ('utf-8' )
140- expected = verify_methods [header ['alg' ]](signing_input , key )
141- if not constant_time_compare (signature , expected ):
142- raise DecodeError ("Signature verification failed" )
140+ if header ['alg' ].startswith ('HS' ):
141+ expected = verify_methods [header ['alg' ]](signing_input , key )
142+ if not constant_time_compare (signature , expected ):
143+ raise DecodeError ("Signature verification failed" )
144+ else :
145+ if not verify_methods [header ['alg' ]](signing_input , key , signature ):
146+ raise DecodeError ("Signature verification failed" )
143147 except KeyError :
144148 raise DecodeError ("Algorithm not supported" )
145149
0 commit comments