aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2013-11-05 16:18:45 -0800
committerAlex Gaynor <alex.gaynor@gmail.com>2013-11-05 16:18:45 -0800
commitdc043b1e15f8ed07c47baeecfb9ef04dea989fe7 (patch)
treecf61501a6c827078223b04d145015ebc3d981385
parent0b1e66358e368e5176b26a0af0b673cfca3a1e0e (diff)
downloadcryptography-dc043b1e15f8ed07c47baeecfb9ef04dea989fe7.tar.gz
cryptography-dc043b1e15f8ed07c47baeecfb9ef04dea989fe7.tar.bz2
cryptography-dc043b1e15f8ed07c47baeecfb9ef04dea989fe7.zip
Fixed
-rw-r--r--cryptography/hazmat/bindings/openssl/backend.py2
-rw-r--r--cryptography/hazmat/bindings/openssl/hmac.py25
2 files changed, 25 insertions, 2 deletions
diff --git a/cryptography/hazmat/bindings/openssl/backend.py b/cryptography/hazmat/bindings/openssl/backend.py
index 897697e6..69ffde16 100644
--- a/cryptography/hazmat/bindings/openssl/backend.py
+++ b/cryptography/hazmat/bindings/openssl/backend.py
@@ -340,7 +340,7 @@ class HMACs(object):
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 8202f80c..10e67141 100644
--- a/cryptography/hazmat/bindings/openssl/hmac.py
+++ b/cryptography/hazmat/bindings/openssl/hmac.py
@@ -27,7 +27,7 @@ int Cryptography_HMAC_Init_ex(HMAC_CTX *, const void *, int, const EVP_MD *,
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 @@ int Cryptography_HMAC_Final(HMAC_CTX *ctx, unsigned char *digest,
#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
+}
"""