diff options
-rw-r--r-- | docs/hazmat/primitives/index.rst | 1 | ||||
-rw-r--r-- | docs/hazmat/primitives/key-exchange-agreements.rst | 23 | ||||
-rw-r--r-- | src/cryptography/hazmat/primitives/asymmetric/key_exchange.py | 18 |
3 files changed, 42 insertions, 0 deletions
diff --git a/docs/hazmat/primitives/index.rst b/docs/hazmat/primitives/index.rst index a9ab38a0..675111bb 100644 --- a/docs/hazmat/primitives/index.rst +++ b/docs/hazmat/primitives/index.rst @@ -15,3 +15,4 @@ Primitives constant-time interfaces twofactor + key-exchange-agreements diff --git a/docs/hazmat/primitives/key-exchange-agreements.rst b/docs/hazmat/primitives/key-exchange-agreements.rst new file mode 100644 index 00000000..8d79fbad --- /dev/null +++ b/docs/hazmat/primitives/key-exchange-agreements.rst @@ -0,0 +1,23 @@ +.. hazmat:: + +Key Exchange agreements +======================= + +.. module:: cryptography.hazmat.primitives.asymmetric.key_exchange + +Key exchange agreements are cryptographic operations, like Diffie-Hellman +key exchanges, that allow two parties to use their public-private key pairs +to establish a shared secret key over an insecure channel. Usually the +negotiated key is further derived before using it for symmetric operations. + +Interfaces +~~~~~~~~~~ + +.. class:: KeyExchangeContext + + .. versionadded:: 1.1 + + .. method:: agree(public_key) + + :param public_key: The peer public key, the type depends on the + crypto system used, for example :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` diff --git a/src/cryptography/hazmat/primitives/asymmetric/key_exchange.py b/src/cryptography/hazmat/primitives/asymmetric/key_exchange.py new file mode 100644 index 00000000..a9846e28 --- /dev/null +++ b/src/cryptography/hazmat/primitives/asymmetric/key_exchange.py @@ -0,0 +1,18 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + + +@six.add_metaclass(abc.ABCMeta) +class KeyExchangeContext(object): + @abc.abstractmethod + def agree(self, public_key): + """ + Returns the agreed key material. + """ |