Skip to content

Instantly share code, notes, and snippets.

@flarn2006
Created July 1, 2017 08:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save flarn2006/0a71e05912a26a42e76b122ba6ce12b7 to your computer and use it in GitHub Desktop.
Save flarn2006/0a71e05912a26a42e76b122ba6ce12b7 to your computer and use it in GitHub Desktop.
Patch for Git to use one-byte "SHA1" hashes
diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c
index 3a1735e..67cf753 100644
--- a/sha1dc/sha1.c
+++ b/sha1dc/sha1.c
@@ -1829,25 +1829,9 @@ int SHA1DCFinal(unsigned char output[20], SHA1_CTX *ctx)
ctx->buffer[63] = (unsigned char)(total);
sha1_process(ctx, (uint32_t*)(ctx->buffer));
output[0] = (unsigned char)(ctx->ihv[0] >> 24);
- output[1] = (unsigned char)(ctx->ihv[0] >> 16);
- output[2] = (unsigned char)(ctx->ihv[0] >> 8);
- output[3] = (unsigned char)(ctx->ihv[0]);
- output[4] = (unsigned char)(ctx->ihv[1] >> 24);
- output[5] = (unsigned char)(ctx->ihv[1] >> 16);
- output[6] = (unsigned char)(ctx->ihv[1] >> 8);
- output[7] = (unsigned char)(ctx->ihv[1]);
- output[8] = (unsigned char)(ctx->ihv[2] >> 24);
- output[9] = (unsigned char)(ctx->ihv[2] >> 16);
- output[10] = (unsigned char)(ctx->ihv[2] >> 8);
- output[11] = (unsigned char)(ctx->ihv[2]);
- output[12] = (unsigned char)(ctx->ihv[3] >> 24);
- output[13] = (unsigned char)(ctx->ihv[3] >> 16);
- output[14] = (unsigned char)(ctx->ihv[3] >> 8);
- output[15] = (unsigned char)(ctx->ihv[3]);
- output[16] = (unsigned char)(ctx->ihv[4] >> 24);
- output[17] = (unsigned char)(ctx->ihv[4] >> 16);
- output[18] = (unsigned char)(ctx->ihv[4] >> 8);
- output[19] = (unsigned char)(ctx->ihv[4]);
+ int i; for (i=1; i<20; ++i) {
+ output[i] = 0;
+ }
return ctx->found_collision;
}
@flarn2006
Copy link
Author

flarn2006 commented Sep 23, 2018

Obviously for any practical use this will just break Git. I just wanted to see how Git handled hash collisions, and more specifically recursive trees, and I don't have a computer powerful enough to break SHA-1 yet. ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment