aboutsummaryrefslogtreecommitdiff
path: root/openssl-sys/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2015-02-08 23:30:34 -0800
committerSteven Fackler <[email protected]>2015-02-08 23:31:46 -0800
commit6ef819f9718c3b43551461b72c531c2eeee878f9 (patch)
tree4788a3c2a2ac6f425ab1b7317bc88bd1ebfc57d1 /openssl-sys/src
parentMerge pull request #156 from s-panferov/patch-1 (diff)
downloadrust-openssl-6ef819f9718c3b43551461b72c531c2eeee878f9.tar.xz
rust-openssl-6ef819f9718c3b43551461b72c531c2eeee878f9.zip
Fix builds against 0.9.x OpenSSL
Namely builds on OSX
Diffstat (limited to 'openssl-sys/src')
-rw-r--r--openssl-sys/src/lib.rs8
-rw-r--r--openssl-sys/src/old_openssl_shim.c49
2 files changed, 57 insertions, 0 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs
index 70526fd5..5d4c4cb9 100644
--- a/openssl-sys/src/lib.rs
+++ b/openssl-sys/src/lib.rs
@@ -382,12 +382,20 @@ extern "C" {
pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
pub fn HMAC_CTX_init(ctx: *mut HMAC_CTX);
+ #[deprecated = "use HMAC_Init_ex_shim instead"]
pub fn HMAC_Init_ex(ctx: *mut HMAC_CTX, key: *const u8, keylen: c_int, md: *const EVP_MD, imple: *const ENGINE) -> c_int;
+ #[deprecated = "use HMAC_Final_shim instead"]
pub fn HMAC_Final(ctx: *mut HMAC_CTX, output: *mut u8, len: *mut c_uint) -> c_int;
+ #[deprecated = "use HMAC_Update_shim instead"]
pub fn HMAC_Update(ctx: *mut HMAC_CTX, input: *const u8, len: c_uint) -> c_int;
pub fn HMAC_CTX_cleanup(ctx: *mut HMAC_CTX);
pub fn HMAC_CTX_copy(dst: *mut HMAC_CTX, src: *const HMAC_CTX) -> c_int;
+ // Pre-1.0 versions of these didn't return anything, so the shims bridge that gap
+ pub fn HMAC_Init_ex_shim(ctx: *mut HMAC_CTX, key: *const u8, keylen: c_int, md: *const EVP_MD, imple: *const ENGINE) -> c_int;
+ pub fn HMAC_Final_shim(ctx: *mut HMAC_CTX, output: *mut u8, len: *mut c_uint) -> c_int;
+ pub fn HMAC_Update_shim(ctx: *mut HMAC_CTX, input: *const u8, len: c_uint) -> c_int;
+
pub fn PEM_read_bio_X509(bio: *mut BIO, out: *mut *mut X509, callback: Option<PasswordCallback>,
user_data: *mut c_void) -> *mut X509;
diff --git a/openssl-sys/src/old_openssl_shim.c b/openssl-sys/src/old_openssl_shim.c
new file mode 100644
index 00000000..473bd2ae
--- /dev/null
+++ b/openssl-sys/src/old_openssl_shim.c
@@ -0,0 +1,49 @@
+#include <openssl/hmac.h>
+
+#ifdef OLD_OPENSSL
+// Copied from openssl crypto/hmac/hmac.c
+int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx)
+ {
+ if (!EVP_MD_CTX_copy(&dctx->i_ctx, &sctx->i_ctx))
+ goto err;
+ if (!EVP_MD_CTX_copy(&dctx->o_ctx, &sctx->o_ctx))
+ goto err;
+ if (!EVP_MD_CTX_copy(&dctx->md_ctx, &sctx->md_ctx))
+ goto err;
+ memcpy(dctx->key, sctx->key, HMAC_MAX_MD_CBLOCK);
+ dctx->key_length = sctx->key_length;
+ dctx->md = sctx->md;
+ return 1;
+ err:
+ return 0;
+ }
+
+int HMAC_Init_ex_shim(HMAC_CTX *ctx, const void *key, int key_len, const EVP_MD *md, ENGINE *impl) {
+ HMAC_Init_ex(ctx, key, key_len, md, impl);
+ return 1;
+}
+
+int HMAC_Update_shim(HMAC_CTX *ctx, const unsigned char *data, int len) {
+ HMAC_Update(ctx, data, len);
+ return 1;
+}
+
+int HMAC_Final_shim(HMAC_CTX *ctx, unsigned char *md, unsigned int *len) {
+ HMAC_Final(ctx, md, len);
+ return 1;
+}
+
+#else /* OLD_OPENSSL */
+
+int HMAC_Init_ex_shim(HMAC_CTX *ctx, const void *key, int key_len, const EVP_MD *md, ENGINE *impl) {
+ return HMAC_Init_ex(ctx, key, key_len, md, impl);
+}
+
+int HMAC_Update_shim(HMAC_CTX *ctx, const unsigned char *data, int len) {
+ return HMAC_Update(ctx, data, len);
+}
+
+int HMAC_Final_shim(HMAC_CTX *ctx, unsigned char *md, unsigned int *len) {
+ return HMAC_Final(ctx, md, len);
+}
+#endif /* OLD_OPENSSL */