aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cryptography/primitives/hashes.py6
-rw-r--r--docs/primitives/cryptographic-hashes.rst164
-rw-r--r--docs/primitives/index.rst1
-rw-r--r--tests/primitives/test_hash_vectors.py13
-rw-r--r--tests/primitives/test_hashes.py10
5 files changed, 194 insertions, 0 deletions
diff --git a/cryptography/primitives/hashes.py b/cryptography/primitives/hashes.py
index 06d90a90..d0f4c226 100644
--- a/cryptography/primitives/hashes.py
+++ b/cryptography/primitives/hashes.py
@@ -82,3 +82,9 @@ class Whirlpool(BaseHash):
name = "whirlpool"
digest_size = 64
block_size = 64
+
+
+class MD5(BaseHash):
+ name = "md5"
+ digest_size = 16
+ block_size = 64
diff --git a/docs/primitives/cryptographic-hashes.rst b/docs/primitives/cryptographic-hashes.rst
new file mode 100644
index 00000000..1499f762
--- /dev/null
+++ b/docs/primitives/cryptographic-hashes.rst
@@ -0,0 +1,164 @@
+Message Digests
+====================
+
+SHA-1
+~~~~~~~
+
+.. attention::
+
+ NIST has deprecated SHA-1 in favor of the SHA-2 variants. New applications
+ are strongly suggested to use SHA-2 over SHA-1.
+
+.. class:: cryptography.primitives.hashes.SHA1()
+
+ SHA-1 is a cryptographic hash function standardized by NIST. It has a
+ 160-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+
+SHA-2 Family
+~~~~~~~
+
+.. class:: cryptography.primitives.hashes.SHA224()
+
+ SHA-224 is a cryptographic hash function from the SHA-2 family and
+ standardized by NIST. It has a 224-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+.. class:: cryptography.primitives.hashes.SHA256()
+
+ SHA-256 is a cryptographic hash function from the SHA-2 family and
+ standardized by NIST. It has a 256-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+.. class:: cryptography.primitives.hashes.SHA384()
+
+ SHA-384 is a cryptographic hash function from the SHA-2 family and
+ standardized by NIST. It has a 384-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+.. class:: cryptography.primitives.hashes.SHA512()
+
+ SHA-512 is a cryptographic hash function from the SHA-2 family and
+ standardized by NIST. It has a 512-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+RIPEMD160
+~~~~~~~
+
+.. class:: cryptography.primitives.hashes.RIPEMD160()
+
+ RIPEMD160 is a cryptographic hash function that is part of ISO/IEC
+ 10118-3:2004. It has a 160-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+Whirlpool
+~~~~~~~
+
+.. class:: cryptography.primitives.hashes.Whirlpool()
+
+ Whirlpool is a cryptographic hash function that is part of ISO/IEC
+ 10118-3:2004. It has a 512-bit message digest.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
+
+MD5
+~~~~~~~
+
+.. warning::
+
+ MD5 is a deprecated hash algorithm that has practical known collision
+ attacks. You are strongly discouraged from using it.
+
+.. class:: cryptography.primitives.hashes.MD5()
+
+ MD5 is a deprecated cryptographic hash function. It has a 160-bit message
+ digest and has practical known collision attacks.
+
+ .. method:: update(string)
+
+ :param bytes string: The bytes you wish to hash.
+
+ .. method:: digest()
+
+ :return bytes: The message digest as bytes.
+
+ .. method:: hexdigest()
+
+ :return str: The message digest as hex.
diff --git a/docs/primitives/index.rst b/docs/primitives/index.rst
index 1066e30e..c18c62ca 100644
--- a/docs/primitives/index.rst
+++ b/docs/primitives/index.rst
@@ -4,4 +4,5 @@ Primitives
.. toctree::
:maxdepth: 1
+ cryptographic-hashes
symmetric-encryption
diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py
index 52c972a3..02ef4dbb 100644
--- a/tests/primitives/test_hash_vectors.py
+++ b/tests/primitives/test_hash_vectors.py
@@ -131,3 +131,16 @@ class TestWhirlpool(object):
only_if=lambda api: api.supports_hash(hashes.Whirlpool),
skip_message="Does not support Whirlpool",
)
+
+
+class TestMD5(object):
+ test_md5 = generate_hash_test(
+ load_hash_vectors_from_file,
+ os.path.join("RFC", "MD5"),
+ [
+ "rfc-1321.txt",
+ ],
+ hashes.MD5,
+ only_if=lambda api: api.supports_hash(hashes.MD5),
+ skip_message="Does not support MD5",
+ )
diff --git a/tests/primitives/test_hashes.py b/tests/primitives/test_hashes.py
index 982fc7cd..901ddabb 100644
--- a/tests/primitives/test_hashes.py
+++ b/tests/primitives/test_hashes.py
@@ -86,3 +86,13 @@ class TestWhirlpool(object):
only_if=lambda api: api.supports_hash(hashes.Whirlpool),
skip_message="Does not support Whirlpool",
)
+
+
+class TestMD5(object):
+ test_MD5 = generate_base_hash_test(
+ hashes.MD5,
+ digest_size=16,
+ block_size=64,
+ only_if=lambda api: api.supports_hash(hashes.MD5),
+ skip_message="Does not support MD5",
+ )