Don't use self.__class__
diff --git a/cryptography/hazmat/bindings/openssl/backend.py b/cryptography/hazmat/bindings/openssl/backend.py
index 60d5130..4d1be3b 100644
--- a/cryptography/hazmat/bindings/openssl/backend.py
+++ b/cryptography/hazmat/bindings/openssl/backend.py
@@ -344,7 +344,7 @@
             copied_ctx, self._ctx
         )
         assert res != 0
-        return self.__class__(
+        return _HMACContext(
             self._backend, self._key, self.algorithm, ctx=copied_ctx
         )
 
diff --git a/cryptography/hazmat/primitives/hmac.py b/cryptography/hazmat/primitives/hmac.py
index 27bc0fe..57a908c 100644
--- a/cryptography/hazmat/primitives/hmac.py
+++ b/cryptography/hazmat/primitives/hmac.py
@@ -43,7 +43,7 @@
         self._ctx.update(msg)
 
     def copy(self):
-        return self.__class__(
+        return HMAC(
             self._key, self.algorithm, ctx=self._ctx.copy(),
             backend=self._backend
         )