From 3bc72fde3f35b988c902abf5a0bc027f2e54d0c1 Mon Sep 17 00:00:00 2001 From: Atousa Pahlevan Duprat Date: Wed, 4 Nov 2015 22:38:41 -0800 Subject: sha1: provide another level of indirection for the SHA-1 functions The git source uses git_SHA1_Update() and friends to call into the code that computes the hashes. Traditionally, we used to map these directly to underlying implementation of the SHA-1 hash (e.g. SHA1_Update() from OpenSSL or blk_SHA1_Update() from block-sha1/). This arrangement however makes it hard to tweak behaviour of the underlying implementation without fully replacing. If we want to introduce a tweaked_SHA1_Update() wrapper to implement the "Update" in a slightly different way, for example, the implementation of the wrapper still would want to call into the underlying implementation, but tweaked_SHA1_Update() cannot call git_SHA1_Update() to get to the underlying implementation (often but not always SHA1_Update()). Add another level of indirection that maps platform_SHA1_Update() and friends to their underlying implementations, and by default make git_SHA1_Update() and friends map to platform_SHA1_* functions. Doing it this way will later allow us to map git_SHA1_Update() to tweaked_SHA1_Update(), and the latter can use platform_SHA1_Update() in its implementation. Signed-off-by: Atousa Pahlevan Duprat Signed-off-by: Junio C Hamano diff --git a/block-sha1/sha1.h b/block-sha1/sha1.h index b864df6..4df6747 100644 --- a/block-sha1/sha1.h +++ b/block-sha1/sha1.h @@ -16,7 +16,7 @@ void blk_SHA1_Init(blk_SHA_CTX *ctx); void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, unsigned long len); void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx); -#define git_SHA_CTX blk_SHA_CTX -#define git_SHA1_Init blk_SHA1_Init -#define git_SHA1_Update blk_SHA1_Update -#define git_SHA1_Final blk_SHA1_Final +#define platform_SHA_CTX blk_SHA_CTX +#define platform_SHA1_Init blk_SHA1_Init +#define platform_SHA1_Update blk_SHA1_Update +#define platform_SHA1_Final blk_SHA1_Final diff --git a/cache.h b/cache.h index 22b7b81..0d89ad8 100644 --- a/cache.h +++ b/cache.h @@ -11,13 +11,25 @@ #include "string-list.h" #include SHA1_HEADER -#ifndef git_SHA_CTX -#define git_SHA_CTX SHA_CTX -#define git_SHA1_Init SHA1_Init -#define git_SHA1_Update SHA1_Update -#define git_SHA1_Final SHA1_Final +#ifndef platform_SHA_CTX +/* + * platform's underlying implementation of SHA-1; could be OpenSSL, + * blk_SHA, Apple CommonCrypto, etc... Note that including + * SHA1_HEADER may have already defined platform_SHA_CTX for our + * own implementations like block-sha1 and ppc-sha1, so we list + * the default for OpenSSL compatible SHA-1 implementations here. + */ +#define platform_SHA_CTX SHA_CTX +#define platform_SHA1_Init SHA1_Init +#define platform_SHA1_Update SHA1_Update +#define platform_SHA1_Final SHA1_Final #endif +#define git_SHA_CTX platform_SHA_CTX +#define git_SHA1_Init platform_SHA1_Init +#define git_SHA1_Update platform_SHA1_Update +#define git_SHA1_Final platform_SHA1_Final + #include typedef struct git_zstream { z_stream z; diff --git a/ppc/sha1.h b/ppc/sha1.h index c405f73..9b24b32 100644 --- a/ppc/sha1.h +++ b/ppc/sha1.h @@ -19,7 +19,7 @@ int ppc_SHA1_Init(ppc_SHA_CTX *c); int ppc_SHA1_Update(ppc_SHA_CTX *c, const void *p, unsigned long n); int ppc_SHA1_Final(unsigned char *hash, ppc_SHA_CTX *c); -#define git_SHA_CTX ppc_SHA_CTX -#define git_SHA1_Init ppc_SHA1_Init -#define git_SHA1_Update ppc_SHA1_Update -#define git_SHA1_Final ppc_SHA1_Final +#define platform_SHA_CTX ppc_SHA_CTX +#define platform_SHA1_Init ppc_SHA1_Init +#define platform_SHA1_Update ppc_SHA1_Update +#define platform_SHA1_Final ppc_SHA1_Final -- cgit v0.10.2-6-g49f6