git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 07/12] pack-check: convert various uses of SHA-1 to abstract forms

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 1, 2018, 02:18 UTC
Message-ID
<20180201021848.533188-8-sandals@crustytoothpaste.net>
In-Reply-To
<20180201021848.533188-1-sandals@crustytoothpaste.net>

Convert various explicit calls to use SHA-1 functions and constants to references to the_hash_algo. Make several strings more generic with respect to the hash algorithm used.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 pack-check.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/pack-check.c b/pack-check.c
index 073c1fbd46..403a572567 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -41,7 +41,7 @@ int check_pack_crc(struct packed_git *p, struct pack_window **w_curs,
 	} while (len);
 
 	index_crc = p->index_data;
-	index_crc += 2 + 256 + p->num_objects * (20/4) + nr;
+	index_crc += 2 + 256 + p->num_objects * (the_hash_algo->rawsz/4) + nr;
 
 	return data_crc != ntohl(*index_crc);
 }
@@ -54,7 +54,7 @@ static int verify_packfile(struct packed_git *p,
 {
 	off_t index_size = p->index_size;
 	const unsigned char *index_base = p->index_data;
-	git_SHA_CTX ctx;
+	git_hash_ctx ctx;
 	unsigned char hash[GIT_MAX_RAWSZ], *pack_sig;
 	off_t offset = 0, pack_sig_ofs = 0;
 	uint32_t nr_objects, i;
@@ -64,24 +64,24 @@ static int verify_packfile(struct packed_git *p,
 	if (!is_pack_valid(p))
 		return error("packfile %s cannot be accessed", p->pack_name);
 
-	git_SHA1_Init(&ctx);
+	the_hash_algo->init_fn(&ctx);
 	do {
 		unsigned long remaining;
 		unsigned char *in = use_pack(p, w_curs, offset, &remaining);
 		offset += remaining;
 		if (!pack_sig_ofs)
-			pack_sig_ofs = p->pack_size - 20;
+			pack_sig_ofs = p->pack_size - the_hash_algo->rawsz;
 		if (offset > pack_sig_ofs)
 			remaining -= (unsigned int)(offset - pack_sig_ofs);
-		git_SHA1_Update(&ctx, in, remaining);
+		the_hash_algo->update_fn(&ctx, in, remaining);
 	} while (offset < pack_sig_ofs);
-	git_SHA1_Final(hash, &ctx);
+	the_hash_algo->final_fn(hash, &ctx);
 	pack_sig = use_pack(p, w_curs, pack_sig_ofs, NULL);
 	if (hashcmp(hash, pack_sig))
-		err = error("%s SHA1 checksum mismatch",
+		err = error("%s pack checksum mismatch",
 			    p->pack_name);
-	if (hashcmp(index_base + index_size - 40, pack_sig))
-		err = error("%s SHA1 does not match its index",
+	if (hashcmp(index_base + index_size - the_hash_algo->hexsz, pack_sig))
+		err = error("%s pack checksum does not match its index",
 			    p->pack_name);
 	unuse_pack(w_curs);
 
@@ -165,8 +165,8 @@ int verify_pack_index(struct packed_git *p)
 {
 	off_t index_size;
 	const unsigned char *index_base;
-	git_SHA_CTX ctx;
-	unsigned char sha1[20];
+	git_hash_ctx ctx;
+	unsigned char hash[GIT_MAX_RAWSZ];
 	int err = 0;
 
 	if (open_pack_index(p))
@@ -175,11 +175,11 @@ int verify_pack_index(struct packed_git *p)
 	index_base = p->index_data;
 
 	/* Verify SHA1 sum of the index file */
-	git_SHA1_Init(&ctx);
-	git_SHA1_Update(&ctx, index_base, (unsigned int)(index_size - 20));
-	git_SHA1_Final(sha1, &ctx);
-	if (hashcmp(sha1, index_base + index_size - 20))
-		err = error("Packfile index for %s SHA1 mismatch",
+	the_hash_algo->init_fn(&ctx);
+	the_hash_algo->update_fn(&ctx, index_base, (unsigned int)(index_size - the_hash_algo->rawsz));
+	the_hash_algo->final_fn(hash, &ctx);
+	if (hashcmp(hash, index_base + index_size - the_hash_algo->rawsz))
+		err = error("Packfile index for %s hash mismatch",
 			    p->pack_name);
 	return err;
 }
Previous: brian m. carlsonNext: brian m. carlson
Message 6 of 19 in “object_id part 11 (the_hash_algo)”
  1. 00/12 object_id part 11 (the_hash_algo)brian m. carlson, Feb 1, 2018
  2. 01/12 hash: move SHA-1 macros to hash.hbrian m. carlson, Feb 1, 2018
  3. Junio C HamanoFeb 2, 2018
  4. 02/12 hash: create union for hash context allocationbrian m. carlson, Feb 1, 2018
  5. 03/12 builtin/index-pack: improve hash function abstractionbrian m. carlson, Feb 1, 2018
  6. 07/12 pack-check: convert various uses of SHA-1 to abstract formsbrian m. carlson, Feb 1, 2018
  7. 06/12 fast-import: switch various uses of SHA-1 to the_hash_algobrian m. carlson, Feb 1, 2018
  8. 08/12 pack-write: switch various SHA-1 values to abstract formsbrian m. carlson, Feb 1, 2018
  9. 12/12 bulk-checkin: abstract SHA-1 usagebrian m. carlson, Feb 1, 2018
  10. 10/12 csum-file: rename sha1file to hashfilebrian m. carlson, Feb 1, 2018
  11. 11/12 csum-file: abstract uses of SHA-1brian m. carlson, Feb 1, 2018
  12. 09/12 read-cache: abstract away uses of SHA-1brian m. carlson, Feb 1, 2018
  13. 04/12 builtin/unpack-objects: switch uses of SHA-1 to the_hash_algobrian m. carlson, Feb 1, 2018
  14. 05/12 sha1_file: switch uses of SHA-1 to the_hash_algobrian m. carlson, Feb 1, 2018
  15. Stefan BellerFeb 1, 2018
  16. Junio C HamanoFeb 2, 2018
  17. brian m. carlsonFeb 6, 2018
  18. Junio C HamanoFeb 6, 2018
  19. hash: update obsolete reference to SHA1_HEADERbrian m. carlson, Feb 8, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.