Home | History | Annotate | Download | only in utils
      1 # Author: Trevor Perrin
      2 # See the LICENSE file for legal information regarding use of this file.
      3 
      4 """PyCrypto RSA implementation."""
      5 
      6 from .cryptomath import *
      7 
      8 from .rsakey import *
      9 from .python_rsakey import Python_RSAKey
     10 
     11 if pycryptoLoaded:
     12 
     13     from Crypto.PublicKey import RSA
     14 
     15     class PyCrypto_RSAKey(RSAKey):
     16         def __init__(self, n=0, e=0, d=0, p=0, q=0, dP=0, dQ=0, qInv=0):
     17             if not d:
     18                 self.rsa = RSA.construct( (n, e) )
     19             else:
     20                 self.rsa = RSA.construct( (n, e, d, p, q) )
     21 
     22         def __getattr__(self, name):
     23             return getattr(self.rsa, name)
     24 
     25         def hasPrivateKey(self):
     26             return self.rsa.has_private()
     27 
     28         def _rawPrivateKeyOp(self, m):
     29             s = bytes(numberToByteArray(m, numBytes(self.n)))
     30             c = bytesToNumber(bytearray(self.rsa.decrypt((s,))))
     31             return c
     32 
     33         def _rawPublicKeyOp(self, c):
     34             s = bytes(numberToByteArray(c, numBytes(self.n)))
     35             m = bytesToNumber(bytearray(self.rsa.encrypt(s, None)[0]))
     36             return m
     37 
     38         def generate(bits):
     39             key = PyCrypto_RSAKey()
     40             def f(numBytes):
     41                 return bytes(getRandomBytes(numBytes))
     42             key.rsa = RSA.generate(bits, f)
     43             return key
     44         generate = staticmethod(generate)
     45