re-add some removed generators to simplify patch
diff --git a/tests/hazmat/primitives/test_hashes.py b/tests/hazmat/primitives/test_hashes.py
index d52021e..c907ef6 100644
--- a/tests/hazmat/primitives/test_hashes.py
+++ b/tests/hazmat/primitives/test_hashes.py
@@ -23,7 +23,7 @@
 from cryptography.exceptions import AlreadyFinalized, UnsupportedAlgorithm
 from cryptography.hazmat.primitives import hashes, interfaces
 
-from .utils import base_hash_test
+from .utils import generate_base_hash_test
 
 
 @utils.register_interface(interfaces.HashAlgorithm)
@@ -69,44 +69,69 @@
             hashes.Hash(UnsupportedDummyHash(), backend)
 
 
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA1),
+    skip_message="Does not support SHA1",
+)
 @pytest.mark.hash
-class TestHashes(object):
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hash_supported(hashes.SHA1),
-        skip_message="Does not support SHA1",
+class TestSHA1(object):
+    test_SHA1 = generate_base_hash_test(
+        hashes.SHA1(),
+        digest_size=20,
+        block_size=64,
     )
-    def test_SHA1(self, backend):
-        base_hash_test(backend, hashes.SHA1(), digest_size=20, block_size=64)
 
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hash_supported(hashes.SHA224),
-        skip_message="Does not support SHA224",
-    )
-    def test_SHA224(self, backend):
-        base_hash_test(backend, hashes.SHA224(), digest_size=28, block_size=64)
 
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hash_supported(hashes.SHA256),
-        skip_message="Does not support SHA256",
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA224),
+    skip_message="Does not support SHA224",
+)
+@pytest.mark.hash
+class TestSHA224(object):
+    test_SHA224 = generate_base_hash_test(
+        hashes.SHA224(),
+        digest_size=28,
+        block_size=64,
     )
-    def test_SHA256(self, backend):
-        base_hash_test(backend, hashes.SHA256(), digest_size=32, block_size=64)
 
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hash_supported(hashes.SHA384),
-        skip_message="Does not support SHA384",
-    )
-    def test_SHA384(self, backend):
-        base_hash_test(backend, hashes.SHA384(),
-                       digest_size=48, block_size=128)
 
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hash_supported(hashes.SHA512),
-        skip_message="Does not support SHA512",
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA256),
+    skip_message="Does not support SHA256",
+)
+@pytest.mark.hash
+class TestSHA256(object):
+    test_SHA256 = generate_base_hash_test(
+        hashes.SHA256(),
+        digest_size=32,
+        block_size=64,
     )
-    def test_SHA512(self, backend):
-        base_hash_test(backend, hashes.SHA512(),
-                       digest_size=64, block_size=128)
+
+
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA384),
+    skip_message="Does not support SHA384",
+)
+@pytest.mark.hash
+class TestSHA384(object):
+    test_SHA384 = generate_base_hash_test(
+        hashes.SHA384(),
+        digest_size=48,
+        block_size=128,
+    )
+
+
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA512),
+    skip_message="Does not support SHA512",
+)
+@pytest.mark.hash
+class TestSHA512(object):
+    test_SHA512 = generate_base_hash_test(
+        hashes.SHA512(),
+        digest_size=64,
+        block_size=128,
+    )
 
 
 @pytest.mark.supported(
@@ -115,9 +140,11 @@
 )
 @pytest.mark.hash
 class TestRIPEMD160(object):
-    def test_RIPEMD160(self, backend):
-        base_hash_test(backend, hashes.RIPEMD160(),
-                       digest_size=20, block_size=64)
+    test_RIPEMD160 = generate_base_hash_test(
+        hashes.RIPEMD160(),
+        digest_size=20,
+        block_size=64,
+    )
 
 
 @pytest.mark.supported(
@@ -126,9 +153,11 @@
 )
 @pytest.mark.hash
 class TestWhirlpool(object):
-    def test_Whirlpool(self, backend):
-        base_hash_test(backend, hashes.Whirlpool(),
-                       digest_size=64, block_size=64)
+    test_Whirlpool = generate_base_hash_test(
+        hashes.Whirlpool(),
+        digest_size=64,
+        block_size=64,
+    )
 
 
 @pytest.mark.supported(
@@ -137,6 +166,8 @@
 )
 @pytest.mark.hash
 class TestMD5(object):
-    def test_MD5(self, backend):
-        base_hash_test(backend, hashes.MD5(),
-                       digest_size=16, block_size=64)
+    test_MD5 = generate_base_hash_test(
+        hashes.MD5(),
+        digest_size=16,
+        block_size=64,
+    )
diff --git a/tests/hazmat/primitives/test_hmac.py b/tests/hazmat/primitives/test_hmac.py
index c216dd4..924e216 100644
--- a/tests/hazmat/primitives/test_hmac.py
+++ b/tests/hazmat/primitives/test_hmac.py
@@ -13,8 +13,6 @@
 
 from __future__ import absolute_import, division, print_function
 
-import binascii
-
 import pretend
 
 import pytest
@@ -25,25 +23,27 @@
 from cryptography.exceptions import AlreadyFinalized, UnsupportedAlgorithm
 from cryptography.hazmat.primitives import hashes, hmac, interfaces
 
+from .utils import generate_base_hmac_test
+
 
 @utils.register_interface(interfaces.HashAlgorithm)
 class UnsupportedDummyHash(object):
         name = "unsupported-dummy-hash"
 
 
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hmac_supported(hashes.MD5),
+    skip_message="Does not support MD5",
+)
+@pytest.mark.hmac
+class TestHMACCopy(object):
+    test_copy = generate_base_hmac_test(
+        hashes.MD5(),
+    )
+
+
 @pytest.mark.hmac
 class TestHMAC(object):
-    @pytest.mark.supported(
-        only_if=lambda backend: backend.hmac_supported(hashes.MD5),
-        skip_message="Does not support MD5",
-    )
-    def test_hmac_copy(self, backend):
-        key = b"ab"
-        h = hmac.HMAC(binascii.unhexlify(key), hashes.MD5(), backend=backend)
-        h_copy = h.copy()
-        assert h != h_copy
-        assert h._ctx != h_copy._ctx
-
     def test_hmac_reject_unicode(self, backend):
         h = hmac.HMAC(b"mykey", hashes.SHA1(), backend=backend)
         with pytest.raises(TypeError):
diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py
index 3c96275..cdcf84c 100644
--- a/tests/hazmat/primitives/utils.py
+++ b/tests/hazmat/primitives/utils.py
@@ -149,6 +149,12 @@
     assert m.finalize() == binascii.unhexlify(expected_md)
 
 
+def generate_base_hash_test(algorithm, digest_size, block_size):
+    def test_base_hash(self, backend):
+        base_hash_test(backend, algorithm, digest_size, block_size)
+    return test_base_hash
+
+
 def base_hash_test(backend, algorithm, digest_size, block_size):
     m = hashes.Hash(algorithm, backend=backend)
     assert m.algorithm.digest_size == digest_size
@@ -176,6 +182,20 @@
     assert m.finalize() == binascii.unhexlify(md.lower().encode("ascii"))
 
 
+def generate_base_hmac_test(hash_cls):
+    def test_base_hmac(self, backend):
+        base_hmac_test(backend, hash_cls)
+    return test_base_hmac
+
+
+def base_hmac_test(backend, algorithm):
+    key = b"ab"
+    h = hmac.HMAC(binascii.unhexlify(key), algorithm, backend=backend)
+    h_copy = h.copy()
+    assert h != h_copy
+    assert h._ctx != h_copy._ctx
+
+
 def generate_hmac_test(param_loader, path, file_names, algorithm):
     all_params = _load_all_params(path, file_names, param_loader)