mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Add a base implementation of SHA-256 support
SHA-1 is weak and we need to transition to a new hash function. For some time, we have referred to this new function as NewHash. Recently, we decided to pick SHA-256 as NewHash. The reasons behind the choice of SHA-256 are outlined in the thread starting at [1] and in the commit history for the hash function transition document. Add a basic implementation of SHA-256 based off libtomcrypt, which is in the public domain. Optimize it and restructure it to meet our coding standards. Pull in the update and final functions from the SHA-1 block implementation, as we know these function correctly with all compilers. This implementation is slower than SHA-1, but more performant implementations will be introduced in future commits. Wire up SHA-256 in the list of hash algorithms, and add a test that the algorithm works correctly. Note that with this patch, it is still not possible to switch to using SHA-256 in Git. Additional patches are needed to prepare the code to handle a larger hash algorithm and further test fixes are needed. [1] https://public-inbox.org/git/20180609224913.GC38834@genre.crustytoothpaste.net/ Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
c166599862
commit
13eeedb5d1
19
hash.h
19
hash.h
@@ -15,6 +15,8 @@
|
||||
#include "block-sha1/sha1.h"
|
||||
#endif
|
||||
|
||||
#include "sha256/block/sha256.h"
|
||||
|
||||
#ifndef platform_SHA_CTX
|
||||
/*
|
||||
* platform's underlying implementation of SHA-1; could be OpenSSL,
|
||||
@@ -34,6 +36,18 @@
|
||||
#define git_SHA1_Update platform_SHA1_Update
|
||||
#define git_SHA1_Final platform_SHA1_Final
|
||||
|
||||
#ifndef platform_SHA256_CTX
|
||||
#define platform_SHA256_CTX SHA256_CTX
|
||||
#define platform_SHA256_Init SHA256_Init
|
||||
#define platform_SHA256_Update SHA256_Update
|
||||
#define platform_SHA256_Final SHA256_Final
|
||||
#endif
|
||||
|
||||
#define git_SHA256_CTX platform_SHA256_CTX
|
||||
#define git_SHA256_Init platform_SHA256_Init
|
||||
#define git_SHA256_Update platform_SHA256_Update
|
||||
#define git_SHA256_Final platform_SHA256_Final
|
||||
|
||||
#ifdef SHA1_MAX_BLOCK_SIZE
|
||||
#include "compat/sha1-chunked.h"
|
||||
#undef git_SHA1_Update
|
||||
@@ -52,12 +66,15 @@
|
||||
#define GIT_HASH_UNKNOWN 0
|
||||
/* SHA-1 */
|
||||
#define GIT_HASH_SHA1 1
|
||||
/* SHA-256 */
|
||||
#define GIT_HASH_SHA256 2
|
||||
/* Number of algorithms supported (including unknown). */
|
||||
#define GIT_HASH_NALGOS (GIT_HASH_SHA1 + 1)
|
||||
#define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1)
|
||||
|
||||
/* A suitably aligned type for stack allocations of hash contexts. */
|
||||
union git_hash_ctx {
|
||||
git_SHA_CTX sha1;
|
||||
git_SHA256_CTX sha256;
|
||||
};
|
||||
typedef union git_hash_ctx git_hash_ctx;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user