diff options
author | Zooko O'Whielacronx <zooko@zooko.com> | 2012-03-10 12:30:52 -0800 |
---|---|---|
committer | Zooko O'Whielacronx <zooko@zooko.com> | 2012-03-10 12:30:52 -0800 |
commit | b77b14a544a252b863a53e0eb2fccc4692635ee9 (patch) | |
tree | 20d33614d71b12b4dac7cefb7bbb3b72f3144f11 | |
parent | 9fb706709b6443a005a08ae17148600b817b9e7e (diff) |
catch C++ exception from malformed serialized signing key and turn it into Python exception
fixes #83
-rw-r--r-- | src/pycryptopp/publickey/rsamodule.cpp | 7 | ||||
-rw-r--r-- | src/pycryptopp/test/test_rsa.py | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/pycryptopp/publickey/rsamodule.cpp b/src/pycryptopp/publickey/rsamodule.cpp index 3e83803..256fd85 100644 --- a/src/pycryptopp/publickey/rsamodule.cpp +++ b/src/pycryptopp/publickey/rsamodule.cpp @@ -354,7 +354,12 @@ rsa_create_signing_key_from_string(PyObject *dummy, PyObject *args, PyObject *kw return NULL; StringSource ss(reinterpret_cast<const byte*>(serializedsigningkey), serializedsigningkeysize, true); - signer->k = new RSASS<PSS, SHA256>::Signer(ss); + try { + signer->k = new RSASS<PSS, SHA256>::Signer(ss); + } catch (CryptoPP::BERDecodeErr le) { + return PyErr_Format(rsa_error, "Serialized signing key was corrupted. Crypto++ gave this exception: %s", le.what()); + } + if (!signer->k) return PyErr_NoMemory(); return reinterpret_cast<PyObject*>(signer); diff --git a/src/pycryptopp/test/test_rsa.py b/src/pycryptopp/test/test_rsa.py index 5348789..5370f16 100644 --- a/src/pycryptopp/test/test_rsa.py +++ b/src/pycryptopp/test/test_rsa.py @@ -54,7 +54,7 @@ class Signer(unittest.TestCase): def test_create_from_string_invalid(self): try: - signer = rsa.create_signing_key_from_string("invalid string") + rsa.create_signing_key_from_string("invalid string") except rsa.Error, le: self.failUnless("decode error" in str(le), le) else: |