diff options
-rw-r--r-- | src/cryptography/hazmat/backends/openssl/backend.py | 5 | ||||
-rw-r--r-- | tests/hazmat/backends/test_openssl_memleak.py | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py index ebcf8015..85e13b57 100644 --- a/src/cryptography/hazmat/backends/openssl/backend.py +++ b/src/cryptography/hazmat/backends/openssl/backend.py @@ -1409,8 +1409,9 @@ class Backend(object): res = self._lib.EC_KEY_set_public_key(ec_cdata, point) self.openssl_assert(res == 1) - res = self._lib.EC_KEY_set_private_key( - ec_cdata, self._int_to_bn(private_value)) + private = self._int_to_bn(private_value) + private = self._ffi.gc(private, self._lib.BN_clear_free) + res = self._lib.EC_KEY_set_private_key(ec_cdata, private) self.openssl_assert(res == 1) evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) diff --git a/tests/hazmat/backends/test_openssl_memleak.py b/tests/hazmat/backends/test_openssl_memleak.py index 6e92e341..74973fe5 100644 --- a/tests/hazmat/backends/test_openssl_memleak.py +++ b/tests/hazmat/backends/test_openssl_memleak.py @@ -214,3 +214,11 @@ class TestOpenSSLMemoryLeaks(object): ) ).private_key(backend) """)) + + def test_ec_derive_private_key(self): + assert_no_memory_leaks(textwrap.dedent(""" + def func(): + from cryptography.hazmat.backends.openssl import backend + from cryptography.hazmat.primitives.asymmetric import ec + ec.derive_private_key(1, ec.SECP256R1(), backend) + """)) |