aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-10-07 21:48:28 -0500
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-10-07 21:48:28 -0500
commit8e69350d8ad92a6153de27ba2eb2739bc113716f (patch)
treeee89e002b1531475ff13d447fb8d6ee8a441f7f6
parentcbc554c3ff6dd567f2af8669db0105a562d96f95 (diff)
parenta7c65b5ccdc188d739a1e21e89e3863b69449b34 (diff)
downloadcryptography-8e69350d8ad92a6153de27ba2eb2739bc113716f.tar.gz
cryptography-8e69350d8ad92a6153de27ba2eb2739bc113716f.tar.bz2
cryptography-8e69350d8ad92a6153de27ba2eb2739bc113716f.zip
Merge pull request #1882 from simo5/KEX
Add Key Exchange Agreement Interface
-rw-r--r--docs/hazmat/primitives/index.rst1
-rw-r--r--docs/hazmat/primitives/key-exchange-agreements.rst23
-rw-r--r--src/cryptography/hazmat/primitives/asymmetric/key_exchange.py18
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.
+ """