aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.rst12
-rw-r--r--cryptography/__about__.py2
-rw-r--r--cryptography/exceptions.py1
-rw-r--r--cryptography/hazmat/backends/multibackend.py12
-rw-r--r--tests/hazmat/backends/test_multibackend.py17
-rw-r--r--vectors/cryptography_vectors/__about__.py2
6 files changed, 42 insertions, 4 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index cf5944fd..055c5abf 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,18 @@
Changelog
=========
+0.6 - `master`_
+~~~~~~~~~~~~~~~
+
+.. note:: This version is not yet released and is under active development.
+
+0.5.1 - 2014-07-07
+~~~~~~~~~~~~~~~~~~
+
+* Add
+ :class:`~cryptography.hazmat.backends.interfaces.PKCS8SerializationBackend`
+ support to :doc:`/hazmat/backends/multibackend`.
+
0.5 - 2014-07-07
~~~~~~~~~~~~~~~~
diff --git a/cryptography/__about__.py b/cryptography/__about__.py
index f18f5099..eb022fbd 100644
--- a/cryptography/__about__.py
+++ b/cryptography/__about__.py
@@ -22,7 +22,7 @@ __summary__ = ("cryptography is a package which provides cryptographic recipes"
" and primitives to Python developers.")
__uri__ = "https://github.com/pyca/cryptography"
-__version__ = "0.5"
+__version__ = "0.6.dev1"
__author__ = "The cryptography developers"
__email__ = "cryptography-dev@python.org"
diff --git a/cryptography/exceptions.py b/cryptography/exceptions.py
index c64b67f4..c14763f7 100644
--- a/cryptography/exceptions.py
+++ b/cryptography/exceptions.py
@@ -22,6 +22,7 @@ class _Reasons(object):
UNSUPPORTED_MGF = object()
UNSUPPORTED_PUBLIC_KEY_ALGORITHM = object()
UNSUPPORTED_ELLIPTIC_CURVE = object()
+ UNSUPPORTED_SERIALIZATION = object()
class UnsupportedAlgorithm(Exception):
diff --git a/cryptography/hazmat/backends/multibackend.py b/cryptography/hazmat/backends/multibackend.py
index 800c3503..6741f045 100644
--- a/cryptography/hazmat/backends/multibackend.py
+++ b/cryptography/hazmat/backends/multibackend.py
@@ -17,7 +17,7 @@ from cryptography import utils
from cryptography.exceptions import UnsupportedAlgorithm, _Reasons
from cryptography.hazmat.backends.interfaces import (
CMACBackend, CipherBackend, DSABackend, EllipticCurveBackend, HMACBackend,
- HashBackend, PBKDF2HMACBackend, RSABackend
+ HashBackend, PBKDF2HMACBackend, PKCS8SerializationBackend, RSABackend
)
@@ -26,6 +26,7 @@ from cryptography.hazmat.backends.interfaces import (
@utils.register_interface(HashBackend)
@utils.register_interface(HMACBackend)
@utils.register_interface(PBKDF2HMACBackend)
+@utils.register_interface(PKCS8SerializationBackend)
@utils.register_interface(RSABackend)
@utils.register_interface(DSABackend)
@utils.register_interface(EllipticCurveBackend)
@@ -302,3 +303,12 @@ class MultiBackend(object):
"This backend does not support this elliptic curve.",
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
)
+
+ def load_pkcs8_pem_private_key(self, data, password):
+ for b in self._filtered_backends(PKCS8SerializationBackend):
+ return b.load_pkcs8_pem_private_key(data, password)
+
+ raise UnsupportedAlgorithm(
+ "This backend does not support this key serialization.",
+ _Reasons.UNSUPPORTED_SERIALIZATION
+ )
diff --git a/tests/hazmat/backends/test_multibackend.py b/tests/hazmat/backends/test_multibackend.py
index a68fe560..3be8371f 100644
--- a/tests/hazmat/backends/test_multibackend.py
+++ b/tests/hazmat/backends/test_multibackend.py
@@ -19,7 +19,7 @@ from cryptography.exceptions import (
)
from cryptography.hazmat.backends.interfaces import (
CMACBackend, CipherBackend, DSABackend, EllipticCurveBackend, HMACBackend,
- HashBackend, PBKDF2HMACBackend, RSABackend
+ HashBackend, PBKDF2HMACBackend, PKCS8SerializationBackend, RSABackend
)
from cryptography.hazmat.backends.multibackend import MultiBackend
from cryptography.hazmat.primitives import cmac, hashes, hmac
@@ -192,6 +192,12 @@ class DummyEllipticCurveBackend(object):
raise UnsupportedAlgorithm(_Reasons.UNSUPPORTED_ELLIPTIC_CURVE)
+@utils.register_interface(PKCS8SerializationBackend)
+class DummyPKCS8SerializationBackend(object):
+ def load_pkcs8_pem_private_key(self, data, password):
+ pass
+
+
class TestMultiBackend(object):
def test_ciphers(self):
backend = MultiBackend([
@@ -471,3 +477,12 @@ class TestMultiBackend(object):
ec.SECT163K1()
)
)
+
+ def test_pkcs8_serialization_backend(self):
+ backend = MultiBackend([DummyPKCS8SerializationBackend()])
+
+ backend.load_pkcs8_pem_private_key(b"keydata", None)
+
+ backend = MultiBackend([])
+ with raises_unsupported_algorithm(_Reasons.UNSUPPORTED_SERIALIZATION):
+ backend.load_pkcs8_pem_private_key(b"keydata", None)
diff --git a/vectors/cryptography_vectors/__about__.py b/vectors/cryptography_vectors/__about__.py
index d95ccfe6..a8dab84d 100644
--- a/vectors/cryptography_vectors/__about__.py
+++ b/vectors/cryptography_vectors/__about__.py
@@ -22,7 +22,7 @@ __summary__ = "Test vectors for the cryptography package."
__uri__ = "https://github.com/pyca/cryptography"
-__version__ = "0.5"
+__version__ = "0.6.dev1"
__author__ = "The cryptography developers"
__email__ = "cryptography-dev@python.org"