From bde6fb52129909cf319157dba95d65fb557d5013 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 18:08:49 -0500 Subject: Hash Saga Part 3 - API changes + SHA1 support + tests --- tests/primitives/test_hash_vectors.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/primitives/test_hash_vectors.py (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py new file mode 100644 index 00000000..4b71ad70 --- /dev/null +++ b/tests/primitives/test_hash_vectors.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import os + +from cryptography.primitives import hashes + +from .utils import generate_hash_test +from ..utils import load_hash_vectors_from_file + + +class TestSHA1(object): + test_SHA1 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("NIST", "SHABYTE"), + [ + "SHA1LongMsg.rsp", + "SHA1ShortMsg.rsp", + ], + lambda api: hashes.SHA1(api=api), + only_if=lambda api: api.supports_hash("sha1"), + skip_message="Does not support SHA1", + ) -- cgit v1.2.3 From bb069c2fee6460185ee435ea848d80bab2ccec6c Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 19:51:01 -0500 Subject: remove unneeded lambdas from tests --- tests/primitives/test_hash_vectors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py index 4b71ad70..8198b086 100644 --- a/tests/primitives/test_hash_vectors.py +++ b/tests/primitives/test_hash_vectors.py @@ -29,7 +29,7 @@ class TestSHA1(object): "SHA1LongMsg.rsp", "SHA1ShortMsg.rsp", ], - lambda api: hashes.SHA1(api=api), + hashes.SHA1, only_if=lambda api: api.supports_hash("sha1"), skip_message="Does not support SHA1", ) -- cgit v1.2.3 From ba3b471e4b0f56e65acdb9d5daf64eb726d9c371 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 20:53:04 -0500 Subject: change api.supports_hash to take a hash class rather than a str * This change means hash class names will be byte strings and we no longer need to encode to ascii on hashobject.name in create_hash_context --- tests/primitives/test_hash_vectors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py index 8198b086..9a925e27 100644 --- a/tests/primitives/test_hash_vectors.py +++ b/tests/primitives/test_hash_vectors.py @@ -30,6 +30,6 @@ class TestSHA1(object): "SHA1ShortMsg.rsp", ], hashes.SHA1, - only_if=lambda api: api.supports_hash("sha1"), + only_if=lambda api: api.supports_hash(hashes.SHA1), skip_message="Does not support SHA1", ) -- cgit v1.2.3 From 7e5697c6f597ac6b0550ae3dbcc19482d10f3efe Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 21:07:36 -0500 Subject: SHA-2 family support --- tests/primitives/test_hash_vectors.py | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py index 9a925e27..d0fe46d1 100644 --- a/tests/primitives/test_hash_vectors.py +++ b/tests/primitives/test_hash_vectors.py @@ -33,3 +33,59 @@ class TestSHA1(object): only_if=lambda api: api.supports_hash(hashes.SHA1), skip_message="Does not support SHA1", ) + + +class TestSHA224(object): + test_SHA224 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("NIST", "SHABYTE"), + [ + "SHA224LongMsg.rsp", + "SHA224ShortMsg.rsp", + ], + hashes.SHA224, + only_if=lambda api: api.supports_hash(hashes.SHA224), + skip_message="Does not support SHA224", + ) + + +class TestSHA256(object): + test_SHA256 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("NIST", "SHABYTE"), + [ + "SHA256LongMsg.rsp", + "SHA256ShortMsg.rsp", + ], + hashes.SHA256, + only_if=lambda api: api.supports_hash(hashes.SHA256), + skip_message="Does not support SHA256", + ) + + +class TestSHA384(object): + test_SHA384 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("NIST", "SHABYTE"), + [ + "SHA384LongMsg.rsp", + "SHA384ShortMsg.rsp", + ], + hashes.SHA384, + only_if=lambda api: api.supports_hash(hashes.SHA384), + skip_message="Does not support SHA384", + ) + + +class TestSHA512(object): + test_SHA512 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("NIST", "SHABYTE"), + [ + "SHA512LongMsg.rsp", + "SHA512ShortMsg.rsp", + ], + hashes.SHA512, + only_if=lambda api: api.supports_hash(hashes.SHA512), + skip_message="Does not support SHA512", + ) -- cgit v1.2.3 From c179407406f0ef5c2b7b5b6316521408ba3803b3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 21:42:57 -0500 Subject: ripemd160 support + long string hash test * Note that the long string hash test for RIPEMD160 adds a vector in the test. You can verify this vector (for b"a" * 1000000) on the RIPE homepage: http://homes.esat.kuleuven.be/~bosselae/ripemd160.html --- tests/primitives/test_hash_vectors.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py index d0fe46d1..51c4b85d 100644 --- a/tests/primitives/test_hash_vectors.py +++ b/tests/primitives/test_hash_vectors.py @@ -17,7 +17,7 @@ import os from cryptography.primitives import hashes -from .utils import generate_hash_test +from .utils import generate_hash_test, generate_long_string_hash_test from ..utils import load_hash_vectors_from_file @@ -89,3 +89,23 @@ class TestSHA512(object): only_if=lambda api: api.supports_hash(hashes.SHA512), skip_message="Does not support SHA512", ) + + +class TestRIPEMD160(object): + test_RIPEMD160 = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("ISO", "ripemd160"), + [ + "ripevectors.txt", + ], + hashes.RIPEMD160, + only_if=lambda api: api.supports_hash(hashes.RIPEMD160), + skip_message="Does not support RIPEMD160", + ) + + test_RIPEMD160_long_string = generate_long_string_hash_test( + hashes.RIPEMD160, + "52783243c1697bdbe16d37f97f68f08325dc1528", + only_if=lambda api: api.supports_hash(hashes.RIPEMD160), + skip_message="Does not support RIPEMD160", + ) -- cgit v1.2.3 From 79ff8bf91838e0e98ec75b467c0650968bf4f626 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 22:07:29 -0500 Subject: Whirlpool support --- tests/primitives/test_hash_vectors.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests/primitives/test_hash_vectors.py') diff --git a/tests/primitives/test_hash_vectors.py b/tests/primitives/test_hash_vectors.py index 51c4b85d..52c972a3 100644 --- a/tests/primitives/test_hash_vectors.py +++ b/tests/primitives/test_hash_vectors.py @@ -109,3 +109,25 @@ class TestRIPEMD160(object): only_if=lambda api: api.supports_hash(hashes.RIPEMD160), skip_message="Does not support RIPEMD160", ) + + +class TestWhirlpool(object): + test_whirlpool = generate_hash_test( + load_hash_vectors_from_file, + os.path.join("ISO", "whirlpool"), + [ + "iso-test-vectors.txt", + ], + hashes.Whirlpool, + only_if=lambda api: api.supports_hash(hashes.Whirlpool), + skip_message="Does not support Whirlpool", + ) + + test_whirlpool_long_string = generate_long_string_hash_test( + hashes.Whirlpool, + ("0c99005beb57eff50a7cf005560ddf5d29057fd86b2" + "0bfd62deca0f1ccea4af51fc15490eddc47af32bb2b" + "66c34ff9ad8c6008ad677f77126953b226e4ed8b01"), + only_if=lambda api: api.supports_hash(hashes.Whirlpool), + skip_message="Does not support Whirlpool", + ) -- cgit v1.2.3 From 36e7d0df315dca887f5b073e17209ee3eeb5a576 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Fri, 18 Oct 2013 18:54:40 -0500 Subject: MD5 support + documentation for all hashes --- tests/primitives/test_hash_vectors.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'tests/primitives/test_hash_vectors.py') 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", + ) -- cgit v1.2.3