Skip to content

Commit b7e6a10

Browse files
committed
make m2crypto backed public key pickleable
1 parent 2e8fe11 commit b7e6a10

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

tlslite/utils/openssl_rsakey.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def password_callback(v, prompt1='Enter private key passphrase:',
3030

3131
if m2cryptoLoaded:
3232
import M2Crypto
33+
# the methods like rsa_get_e and rsa_get_n are native, so pylint can't find
34+
# them, ignore those errors
35+
#pylint: disable=no-member
3336

3437
class OpenSSL_RSAKey(RSAKey):
3538
def __init__(self, n=0, e=0, key_type="rsa"):
@@ -43,6 +46,22 @@ def __init__(self, n=0, e=0, key_type="rsa"):
4346
m2.rsa_set_e(self.rsa, numberToMPI(e))
4447
self.key_type = key_type
4548

49+
def __getstate__(self):
50+
if not self.rsa:
51+
return (self.key_type, )
52+
return (self.key_type,
53+
mpiToNumber(m2.rsa_get_e(self.rsa)),
54+
mpiToNumber(m2.rsa_get_n(self.rsa)))
55+
56+
def __setstate__(self, state):
57+
self.rsa = None
58+
self._hasPrivateKey = False
59+
self.key_type = state[0]
60+
if len(state) > 1:
61+
self.rsa = m2.rsa_new()
62+
m2.rsa_set_e(self.rsa, numberToMPI(state[1]))
63+
m2.rsa_set_n(self.rsa, numberToMPI(state[2]))
64+
4665
def __del__(self):
4766
if self.rsa:
4867
m2.rsa_free(self.rsa)

0 commit comments

Comments
 (0)