blob: 805d992baabadd2033f304f70b1463ec26c191a6 [file] [log] [blame]
Paul Kehrerbde6fb52013-10-18 18:08:49 -05001# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14from __future__ import absolute_import, division, print_function
15
Paul Kehrerd4cb34d2013-10-19 23:05:12 -050016import pytest
17
18import six
19
Paul Kehrerbde6fb52013-10-18 18:08:49 -050020from cryptography.primitives import hashes
21
22from .utils import generate_base_hash_test
23
24
Paul Kehrerd4cb34d2013-10-19 23:05:12 -050025class TestBaseHash(object):
26 def test_base_hash_reject_unicode(self, api):
27 m = hashes.SHA1(api=api)
28 with pytest.raises(TypeError):
29 m.update(six.u("\u00FC"))
30
31
Paul Kehrerbde6fb52013-10-18 18:08:49 -050032class TestSHA1(object):
33 test_SHA1 = generate_base_hash_test(
Paul Kehrerbb069c22013-10-18 19:51:01 -050034 hashes.SHA1,
Paul Kehrerbde6fb52013-10-18 18:08:49 -050035 digest_size=20,
36 block_size=64,
Paul Kehrerba3b4712013-10-18 20:53:04 -050037 only_if=lambda api: api.supports_hash(hashes.SHA1),
Paul Kehrerbde6fb52013-10-18 18:08:49 -050038 skip_message="Does not support SHA1",
39 )
Paul Kehrer7e5697c2013-10-18 21:07:36 -050040
41
42class TestSHA224(object):
43 test_SHA224 = generate_base_hash_test(
44 hashes.SHA224,
45 digest_size=28,
46 block_size=64,
47 only_if=lambda api: api.supports_hash(hashes.SHA224),
48 skip_message="Does not support SHA224",
49 )
50
51
52class TestSHA256(object):
53 test_SHA256 = generate_base_hash_test(
54 hashes.SHA256,
55 digest_size=32,
56 block_size=64,
57 only_if=lambda api: api.supports_hash(hashes.SHA256),
58 skip_message="Does not support SHA256",
59 )
60
61
62class TestSHA384(object):
63 test_SHA384 = generate_base_hash_test(
64 hashes.SHA384,
65 digest_size=48,
66 block_size=128,
67 only_if=lambda api: api.supports_hash(hashes.SHA384),
68 skip_message="Does not support SHA384",
69 )
70
71
72class TestSHA512(object):
73 test_SHA512 = generate_base_hash_test(
74 hashes.SHA512,
75 digest_size=64,
76 block_size=128,
77 only_if=lambda api: api.supports_hash(hashes.SHA512),
78 skip_message="Does not support SHA512",
79 )
Paul Kehrerc1794072013-10-18 21:42:57 -050080
81
82class TestRIPEMD160(object):
83 test_RIPEMD160 = generate_base_hash_test(
84 hashes.RIPEMD160,
85 digest_size=20,
86 block_size=64,
87 only_if=lambda api: api.supports_hash(hashes.RIPEMD160),
88 skip_message="Does not support RIPEMD160",
89 )
Paul Kehrer79ff8bf2013-10-18 22:07:29 -050090
91
92class TestWhirlpool(object):
93 test_Whirlpool = generate_base_hash_test(
94 hashes.Whirlpool,
95 digest_size=64,
96 block_size=64,
97 only_if=lambda api: api.supports_hash(hashes.Whirlpool),
98 skip_message="Does not support Whirlpool",
99 )
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500100
101
102class TestMD5(object):
103 test_MD5 = generate_base_hash_test(
104 hashes.MD5,
105 digest_size=16,
106 block_size=64,
107 only_if=lambda api: api.supports_hash(hashes.MD5),
108 skip_message="Does not support MD5",
109 )