Index: third_party/tlslite/tlslite/utils/openssl_rsakey.py |
diff --git a/third_party/tlslite/tlslite/utils/openssl_rsakey.py b/third_party/tlslite/tlslite/utils/openssl_rsakey.py |
index 9cee35d2efc30ef75cf68047dba55f64a2ffc1fd..f6ec8595819ded254b49e78c652ddf1bfb89bb63 100644 |
--- a/third_party/tlslite/tlslite/utils/openssl_rsakey.py |
+++ b/third_party/tlslite/tlslite/utils/openssl_rsakey.py |
@@ -1,9 +1,12 @@ |
+# Author: Trevor Perrin |
+# See the LICENSE file for legal information regarding use of this file. |
+ |
"""OpenSSL/M2Crypto RSA implementation.""" |
-from cryptomath import * |
+from .cryptomath import * |
-from rsakey import * |
-from python_rsakey import Python_RSAKey |
+from .rsakey import * |
+from .python_rsakey import Python_RSAKey |
#copied from M2Crypto.util.py, so when we load the local copy of m2 |
#we can still use it |
@@ -55,33 +58,16 @@ if m2cryptoLoaded: |
def hasPrivateKey(self): |
return self._hasPrivateKey |
- 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(m2.rsa_private_encrypt(self.rsa, s, |
- m2.no_padding)) |
+ b = numberToByteArray(m, numBytes(self.n)) |
+ s = m2.rsa_private_encrypt(self.rsa, bytes(b), m2.no_padding) |
+ c = bytesToNumber(bytearray(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(m2.rsa_public_decrypt(self.rsa, s, |
- m2.no_padding)) |
+ b = numberToByteArray(c, numBytes(self.n)) |
+ s = m2.rsa_public_decrypt(self.rsa, bytes(b), m2.no_padding) |
+ m = bytesToNumber(bytearray(s)) |
return m |
def acceptsPassword(self): return True |
@@ -103,9 +89,6 @@ if m2cryptoLoaded: |
m2.bio_free(bio) |
return s |
- def writeXMLPublicKey(self, indent=''): |
- return Python_RSAKey(self.n, self.e).write(indent) |
- |
def generate(bits): |
key = OpenSSL_RSAKey() |
def f():pass |
@@ -115,6 +98,11 @@ if m2cryptoLoaded: |
generate = staticmethod(generate) |
def parse(s, passwordCallback=None): |
+ # Skip forward to the first PEM header |
+ start = s.find("-----BEGIN ") |
+ if start == -1: |
+ raise SyntaxError() |
+ s = s[start:] |
if s.startswith("-----BEGIN "): |
if passwordCallback==None: |
callback = password_callback |