| Viewing file:  pycrypto.py (1.22 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
import Crypto.Hash.SHA256import Crypto.Hash.SHA384
 import Crypto.Hash.SHA512
 
 from Crypto.PublicKey import RSA
 from Crypto.Signature import PKCS1_v1_5
 
 from jwt.algorithms import Algorithm
 from jwt.compat import string_types, text_type
 
 
 class RSAAlgorithm(Algorithm):
 """
 Performs signing and verification operations using
 RSASSA-PKCS-v1_5 and the specified hash function.
 
 This class requires PyCrypto package to be installed.
 
 This is based off of the implementation in PyJWT 0.3.2
 """
 SHA256 = Crypto.Hash.SHA256
 SHA384 = Crypto.Hash.SHA384
 SHA512 = Crypto.Hash.SHA512
 
 def __init__(self, hash_alg):
 self.hash_alg = hash_alg
 
 def prepare_key(self, key):
 
 if isinstance(key, RSA._RSAobj):
 return key
 
 if isinstance(key, string_types):
 if isinstance(key, text_type):
 key = key.encode('utf-8')
 
 key = RSA.importKey(key)
 else:
 raise TypeError('Expecting a PEM- or RSA-formatted key.')
 
 return key
 
 def sign(self, msg, key):
 return PKCS1_v1_5.new(key).sign(self.hash_alg.new(msg))
 
 def verify(self, msg, key, sig):
 return PKCS1_v1_5.new(key).verify(self.hash_alg.new(msg), sig)
 
 |