diff options
-rw-r--r-- | cache.h | 1 | ||||
-rw-r--r-- | read-cache.c | 11 |
2 files changed, 12 insertions, 0 deletions
@@ -82,6 +82,7 @@ extern int write_sha1_buffer(unsigned char *sha1, void *buf, unsigned int size); /* Read and unpack a sha1 file into memory, write memory to a sha1 file */ extern void * map_sha1_file(unsigned char *sha1, unsigned long *size); +extern void * unpack_sha1_file(void *map, unsigned long mapsize, char *type, unsigned long *size); extern void * read_sha1_file(unsigned char *sha1, char *type, unsigned long *size); extern int write_sha1_file(char *buf, unsigned len); extern int check_sha1_signature(unsigned char *sha1, void *buf, unsigned long size); diff --git a/read-cache.c b/read-cache.c index 4d750506e9..2ede67dbe1 100644 --- a/read-cache.c +++ b/read-cache.c @@ -84,6 +84,17 @@ char *sha1_file_name(unsigned char *sha1) return base; } +int check_sha1_signature(unsigned char *sha1, void *map, unsigned long size) +{ + unsigned char real_sha1[20]; + SHA_CTX c; + + SHA1_Init(&c); + SHA1_Update(&c, map, size); + SHA1_Final(real_sha1, &c); + return memcmp(sha1, real_sha1, 20) ? -1 : 0; +} + void *map_sha1_file(unsigned char *sha1, unsigned long *size) { char *filename = sha1_file_name(sha1); |