aboutsummaryrefslogtreecommitdiffstats
path: root/src/cryptography/hazmat/backends/openssl/ec.py
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-01 16:05:58 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-01 21:55:08 -0600
commitfb9410ddbaeb7e10343ff925bd505633e24c10c7 (patch)
tree4650f34e31a33bb604e4df6e94f8b4078799469b /src/cryptography/hazmat/backends/openssl/ec.py
parent741175ef2bf965c9439dc4525df7e48c8a4ff72c (diff)
downloadcryptography-fb9410ddbaeb7e10343ff925bd505633e24c10c7.tar.gz
cryptography-fb9410ddbaeb7e10343ff925bd505633e24c10c7.tar.bz2
cryptography-fb9410ddbaeb7e10343ff925bd505633e24c10c7.zip
add support for serialization of EC private keys
Diffstat (limited to 'src/cryptography/hazmat/backends/openssl/ec.py')
-rw-r--r--src/cryptography/hazmat/backends/openssl/ec.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py
index 52c93da9..19d646e8 100644
--- a/src/cryptography/hazmat/backends/openssl/ec.py
+++ b/src/cryptography/hazmat/backends/openssl/ec.py
@@ -148,7 +148,7 @@ class _ECDSAVerificationContext(object):
return True
-@utils.register_interface(ec.EllipticCurvePrivateKeyWithNumbers)
+@utils.register_interface(ec.EllipticCurvePrivateKeyWithSerialization)
class _EllipticCurvePrivateKey(object):
def __init__(self, backend, ec_key_cdata):
self._backend = backend
@@ -200,6 +200,23 @@ class _EllipticCurvePrivateKey(object):
public_numbers=self.public_key().public_numbers()
)
+ def private_bytes(self, encoding, format, encryption_algorithm):
+ evp_pkey = self._backend._lib.EVP_PKEY_new()
+ assert evp_pkey != self._backend._ffi.NULL
+ evp_pkey = self._backend._ffi.gc(
+ evp_pkey, self._backend._lib.EVP_PKEY_free
+ )
+ res = self._backend._lib.EVP_PKEY_set1_EC_KEY(evp_pkey, self._ec_key)
+ assert res == 1
+ return self._backend._private_key_bytes(
+ encoding,
+ format,
+ encryption_algorithm,
+ self._backend._lib.PEM_write_bio_ECPrivateKey,
+ evp_pkey,
+ self._ec_key
+ )
+
@utils.register_interface(ec.EllipticCurvePublicKeyWithNumbers)
class _EllipticCurvePublicKey(object):