Skip to content

Commit

Permalink
Merge pull request #1659 from reaperhulk/move-cipher-interfaces
Browse files Browse the repository at this point in the history
Move cipher and mode interfaces
  • Loading branch information
public committed Feb 16, 2015
2 parents ebc1717 + 7c5c9fe commit 99c1b80
Show file tree
Hide file tree
Showing 19 changed files with 466 additions and 338 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ Changelog
:class:`~cryptography.hazmat.primitives.hashes.HashContext` were moved from
:mod:`~cryptography.hazmat.primitives.interfaces` to
:mod:`~cryptography.hazmat.primitives.hashes`.
* :class:`~cryptography.hazmat.primitives.ciphers.CipherContext`,
:class:`~cryptography.hazmat.primitives.ciphers.AEADCipherContext`,
:class:`~cryptography.hazmat.primitives.ciphers.AEADEncryptionContext`,
:class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm`, and
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
were moved from :mod:`~cryptography.hazmat.primitives.interfaces` to
:mod:`~cryptography.hazmat.primitives.ciphers`.
* :class:`~cryptography.hazmat.primitives.ciphers.modes.Mode`,
:class:`~cryptography.hazmat.primitives.ciphers.modes.ModeWithInitializationVector`,
:class:`~cryptography.hazmat.primitives.ciphers.modes.ModeWithNonce`, and
:class:`~cryptography.hazmat.primitives.ciphers.modes.ModeWithAuthenticationTag`
were moved from :mod:`~cryptography.hazmat.primitives.interfaces` to
:mod:`~cryptography.hazmat.primitives.ciphers.modes`.
* :class:`~cryptography.hazmat.primitives.padding.PaddingContext` was moved
from :mod:`~cryptography.hazmat.primitives.interfaces` to
:mod:`~cryptography.hazmat.primitives.padding`.
* :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAParameters`,
:class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAParametersWithNumbers`,
:class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`,
Expand Down
24 changes: 12 additions & 12 deletions docs/hazmat/backends/interfaces.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ A specific ``backend`` may provide one or more of these interfaces.
this backend.

:param cipher: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.CipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm`
provider.
:param mode: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.Mode` provider.
:class:`~cryptography.hazmat.primitives.ciphers.modes.Mode` provider.

:returns: ``True`` if the specified ``cipher`` and ``mode`` combination
is supported by this backend, otherwise ``False``
Expand All @@ -42,37 +42,37 @@ A specific ``backend`` may provide one or more of these interfaces.
.. method:: create_symmetric_encryption_ctx(cipher, mode)

Create a
:class:`~cryptography.hazmat.primitives.interfaces.CipherContext` that
:class:`~cryptography.hazmat.primitives.ciphers.CipherContext` that
can be used for encrypting data with the symmetric ``cipher`` using
the given ``mode``.

:param cipher: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.CipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm`
provider.
:param mode: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.Mode` provider.
:class:`~cryptography.hazmat.primitives.ciphers.modes.Mode` provider.

:returns:
:class:`~cryptography.hazmat.primitives.interfaces.CipherContext`
:class:`~cryptography.hazmat.primitives.ciphers.CipherContext`

:raises ValueError: When tag is not None in an AEAD mode


.. method:: create_symmetric_decryption_ctx(cipher, mode)

Create a
:class:`~cryptography.hazmat.primitives.interfaces.CipherContext` that
:class:`~cryptography.hazmat.primitives.ciphers.CipherContext` that
can be used for decrypting data with the symmetric ``cipher`` using
the given ``mode``.

:param cipher: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.CipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.CipherAlgorithm`
provider.
:param mode: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.Mode` provider.
:class:`~cryptography.hazmat.primitives.ciphers.modes.Mode` provider.

:returns:
:class:`~cryptography.hazmat.primitives.interfaces.CipherContext`
:class:`~cryptography.hazmat.primitives.ciphers.CipherContext`

:raises ValueError: When tag is None in an AEAD mode

Expand Down Expand Up @@ -157,7 +157,7 @@ A specific ``backend`` may provide one or more of these interfaces.
.. method:: cmac_algorithm_supported(algorithm)

:param algorithm: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
provider.
:return: Returns True if the block cipher is supported for CMAC by this backend

Expand All @@ -168,7 +168,7 @@ A specific ``backend`` may provide one or more of these interfaces.
uses the specified ``algorithm`` to calculate a message authentication code.

:param algorithm: An instance of a
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
provider.

:returns:
Expand Down
89 changes: 0 additions & 89 deletions docs/hazmat/primitives/interfaces.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,95 +14,6 @@ to document argument and return types.
.. _`Abstract Base Classes`: https://docs.python.org/3/library/abc.html


Symmetric ciphers
-----------------

.. class:: CipherAlgorithm

A named symmetric encryption algorithm.

.. attribute:: name

:type: str

The standard name for the mode, for example, "AES", "Camellia", or
"Blowfish".

.. attribute:: key_size

:type: int

The number of bits in the key being used.


.. class:: BlockCipherAlgorithm

A block cipher algorithm.

.. attribute:: block_size

:type: int

The number of bits in a block.


Cipher modes
~~~~~~~~~~~~

Interfaces used by the symmetric cipher modes described in
:ref:`Symmetric Encryption Modes <symmetric-encryption-modes>`.

.. class:: Mode

A named cipher mode.

.. attribute:: name

:type: str

This should be the standard shorthand name for the mode, for example
Cipher-Block Chaining mode is "CBC".

The name may be used by a backend to influence the operation of a
cipher in conjunction with the algorithm's name.

.. method:: validate_for_algorithm(algorithm)

:param CipherAlgorithm algorithm:

Checks that the combination of this mode with the provided algorithm
meets any necessary invariants. This should raise an exception if they
are not met.

For example, the
:class:`~cryptography.hazmat.primitives.ciphers.modes.CBC` mode uses
this method to check that the provided initialization vector's length
matches the block size of the algorithm.


.. class:: ModeWithInitializationVector

A cipher mode with an initialization vector.

.. attribute:: initialization_vector

:type: bytes

Exact requirements of the initialization are described by the
documentation of individual modes.


.. class:: ModeWithNonce

A cipher mode with a nonce.

.. attribute:: nonce

:type: bytes

Exact requirements of the nonce are described by the documentation of
individual modes.

Asymmetric interfaces
---------------------

Expand Down
8 changes: 4 additions & 4 deletions docs/hazmat/primitives/mac/cmac.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`.
.. versionadded:: 0.4

CMAC objects take a
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm` provider.
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm` provider.

.. doctest::

Expand All @@ -39,7 +39,7 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`.
raised.

If ``algorithm`` isn't a
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
provider then ``TypeError`` will be raised.

To check that a given signature is correct use the :meth:`verify` method.
Expand All @@ -55,13 +55,13 @@ A subset of CMAC with the AES-128 algorithm is described in :rfc:`4493`.
cryptography.exceptions.InvalidSignature: Signature did not match digest.

:param algorithm: An
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
provider.
:param backend: An
:class:`~cryptography.hazmat.backends.interfaces.CMACBackend`
provider.
:raises TypeError: This is raised if the provided ``algorithm`` is not an instance of
:class:`~cryptography.hazmat.primitives.interfaces.BlockCipherAlgorithm`
:class:`~cryptography.hazmat.primitives.ciphers.BlockCipherAlgorithm`
:raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the
provided ``backend`` does not implement
:class:`~cryptography.hazmat.backends.interfaces.CMACBackend`
Expand Down
8 changes: 3 additions & 5 deletions docs/hazmat/primitives/padding.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Padding
=======

.. currentmodule:: cryptography.hazmat.primitives.padding
.. module:: cryptography.hazmat.primitives.padding

Padding is a way to take data that may or may not be a multiple of the block
size for a cipher and extend it out so that it is. This is required for many
Expand Down Expand Up @@ -44,18 +44,16 @@ multiple of the block size.
.. method:: padder()

:returns: A padding
:class:`~cryptography.hazmat.primitives.interfaces.PaddingContext`
:class:`~cryptography.hazmat.primitives.padding.PaddingContext`
provider.

.. method:: unpadder()

:returns: An unpadding
:class:`~cryptography.hazmat.primitives.interfaces.PaddingContext`
:class:`~cryptography.hazmat.primitives.padding.PaddingContext`
provider.


.. currentmodule:: cryptography.hazmat.primitives.interfaces

.. class:: PaddingContext

When calling ``padder()`` or ``unpadder()`` the result will conform to the
Expand Down

0 comments on commit 99c1b80

Please sign in to comment.