/gdata/tlslite/utils/PyCrypto_RSAKey.py
http://radioappz.googlecode.com/ · Python · 61 lines · 48 code · 12 blank · 1 comment · 9 complexity · 8758ed3f01e926752ac14c95f7be3fb1 MD5 · raw file
- """PyCrypto RSA implementation."""
- from cryptomath import *
- from RSAKey import *
- from Python_RSAKey import Python_RSAKey
- if pycryptoLoaded:
- from Crypto.PublicKey import RSA
- class PyCrypto_RSAKey(RSAKey):
- def __init__(self, n=0, e=0, d=0, p=0, q=0, dP=0, dQ=0, qInv=0):
- if not d:
- self.rsa = RSA.construct( (n, e) )
- else:
- self.rsa = RSA.construct( (n, e, d, p, q) )
- def __getattr__(self, name):
- return getattr(self.rsa, name)
- def hasPrivateKey(self):
- return self.rsa.has_private()
- def hash(self):
- return Python_RSAKey(self.n, self.e).hash()
- def _rawPrivateKeyOp(self, m):
- s = numberToString(m)
- byteLength = numBytes(self.n)
- if len(s)== byteLength:
- pass
- elif len(s) == byteLength-1:
- s = '\0' + s
- else:
- raise AssertionError()
- c = stringToNumber(self.rsa.decrypt((s,)))
- return c
- def _rawPublicKeyOp(self, c):
- s = numberToString(c)
- byteLength = numBytes(self.n)
- if len(s)== byteLength:
- pass
- elif len(s) == byteLength-1:
- s = '\0' + s
- else:
- raise AssertionError()
- m = stringToNumber(self.rsa.encrypt(s, None)[0])
- return m
- def writeXMLPublicKey(self, indent=''):
- return Python_RSAKey(self.n, self.e).write(indent)
- def generate(bits):
- key = PyCrypto_RSAKey()
- def f(numBytes):
- return bytesToString(getRandomBytes(numBytes))
- key.rsa = RSA.generate(bits, f)
- return key
- generate = staticmethod(generate)