mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
4c61a1d040
Our in-tree SHA-1 wrappers all define platform_SHA_CTX and related macros to point at the opaque "context" type, init, update, and similar functions for each specific implementation. In hash.h, we use these platform_ variables to set up the function pointers for, e.g., the_hash_algo->init_fn(), etc. But while these header files have a header-specific macro that prevents them declaring their structs / functions multiple times, they unconditionally define the platform variables, making it impossible to load multiple SHA-1 implementations at once. As a prerequisite for loading a separate SHA-1 implementation for non-cryptographic uses, only define the platform_ variables if they have not already been defined. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
24 lines
737 B
C
24 lines
737 B
C
/*
|
|
* SHA1 routine optimized to do word accesses rather than byte accesses,
|
|
* and to avoid unnecessary copies into the context array.
|
|
*
|
|
* This was initially based on the Mozilla SHA1 implementation, although
|
|
* none of the original Mozilla code remains.
|
|
*/
|
|
|
|
typedef struct {
|
|
unsigned long long size;
|
|
unsigned int H[5];
|
|
unsigned int W[16];
|
|
} blk_SHA_CTX;
|
|
|
|
void blk_SHA1_Init(blk_SHA_CTX *ctx);
|
|
void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, size_t len);
|
|
void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx);
|
|
|
|
#ifndef platform_SHA_CTX
|
|
#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
|
|
#endif
|