Fixed
diff --git a/cryptography/hazmat/bindings/openssl/backend.py b/cryptography/hazmat/bindings/openssl/backend.py
index 897697e..69ffde1 100644
--- a/cryptography/hazmat/bindings/openssl/backend.py
+++ b/cryptography/hazmat/bindings/openssl/backend.py
@@ -340,7 +340,7 @@
         self._backend.lib.HMAC_CTX_init(copied_ctx)
         copied_ctx = self._backend.ffi.gc(copied_ctx,
                                           self._backend.lib.HMAC_CTX_cleanup)
-        res = self._backend.lib.HMAC_CTX_copy(copied_ctx, ctx)
+        res = self._backend.lib.Cryptography_HMAC_CTX_copy(copied_ctx, ctx)
         assert res != 0
         return copied_ctx
 
diff --git a/cryptography/hazmat/bindings/openssl/hmac.py b/cryptography/hazmat/bindings/openssl/hmac.py
index 8202f80..10e6714 100644
--- a/cryptography/hazmat/bindings/openssl/hmac.py
+++ b/cryptography/hazmat/bindings/openssl/hmac.py
@@ -27,7 +27,7 @@
                               ENGINE *);
 int Cryptography_HMAC_Update(HMAC_CTX *, const unsigned char *, size_t);
 int Cryptography_HMAC_Final(HMAC_CTX *, unsigned char *, unsigned int *);
-int HMAC_CTX_copy(HMAC_CTX *, HMAC_CTX *);
+int Cryptography_HMAC_CTX_copy(HMAC_CTX *, HMAC_CTX *);
 """
 
 MACROS = """
@@ -64,4 +64,27 @@
 #endif
 }
 
+int Cryptography_HMAC_CTX_copy(HMAC_CTX *dst_ctx, HMAC_CTX *src_ctx) {
+#if OPENSSL_VERSION_NUMBER >= 0x010000000
+    return HMAC_CTX_copy(dst_ctx, src_ctx);
+#else
+    HMAC_CTX_init(dst_ctx);
+    if (!EVP_MD_CTX_copy_ex(&dst_ctx->i_ctx, &src_ctx->i_ctx)) {
+        goto err;
+    }
+    if (!EVP_MD_CTX_copy_ex(&dst_ctx->o_ctx, &src_ctx->o_ctx)) {
+        goto err;
+    }
+    if (!EVP_MD_CTX_copy_ex(&dst_ctx->md_ctx, &src_ctx->md_ctx)) {
+        goto err;
+    }
+    memcpy(dst_ctx->key, src_ctx->key, HMAC_MAX_MD_CBLOCK);
+    dst_ctx->key_length = src_ctx->key_length;
+    dst_ctx->md = src_ctx->md;
+    return 1;
+
+    err:
+        return 0;
+#endif
+}
 """