mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Atousa Pahlevan Duprat](/assets/img/avatar_default.png)
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 <apahlevan@ieee.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
23 lines
712 B
C
23 lines
712 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, unsigned long len);
|
|
void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *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
|