Skip to content

Commit b912756

Browse files
committed
expose the private exponent (d) with all backends
1 parent bcd83cf commit b912756

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

tlslite/utils/keyfactory.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,21 +121,23 @@ def parsePEMKey(s, private=False, public=False, passwordCallback=None,
121121

122122

123123
def _parseKeyHelper(key, private, public):
124-
if private:
125-
if not key.hasPrivateKey():
126-
raise SyntaxError("Not a private key!")
124+
if private and not key.hasPrivateKey():
125+
raise SyntaxError("Not a private key!")
127126

128127
if public:
129128
return _createPublicKey(key)
130129

131130
if private:
132-
if hasattr(key, "d"):
133-
return _createPrivateKey(key)
134-
else:
131+
if cryptomath.m2cryptoLoaded:
132+
if type(key) == Python_RSAKey:
133+
return _createPrivateKey(key)
134+
assert type(key) in (OpenSSL_RSAKey, Python_ECDSAKey), type(key)
135135
return key
136-
136+
elif hasattr(key, "d"):
137+
return _createPrivateKey(key)
137138
return key
138139

140+
139141
def parseAsPublicKey(s):
140142
"""Parse a PEM-formatted public key.
141143

tlslite/utils/openssl_rsakey.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .rsakey import *
99
from .python_rsakey import Python_RSAKey
1010
from .compat import compatAscii2Bytes
11+
import sys
1112

1213
#copied from M2Crypto.util.py, so when we load the local copy of m2
1314
#we can still use it
@@ -159,6 +160,13 @@ def f():pass
159160
key._hasPrivateKey = False
160161
else:
161162
raise SyntaxError()
163+
if key._hasPrivateKey:
164+
if sys.version_info < (3, 0):
165+
b64_key = str(key.write())
166+
else:
167+
b64_key = str(key.write(), "ascii")
168+
py_key = Python_RSAKey.parsePEM(b64_key)
169+
key.d = py_key.d
162170
return key
163171
finally:
164172
m2.bio_free(bio)

0 commit comments

Comments
 (0)