From: Taylor Blau <me@ttaylorr.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>,
"brian m. carlson" <sandals@crustytoothpaste.net>,
Elijah Newren <newren@gmail.com>, Patrick Steinhardt <ps@pks.im>,
Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 0/4] hash.h: support choosing a separate SHA-1 for non-cryptographic uses
Date: Thu, 5 Sep 2024 11:11:36 -0400 [thread overview]
Message-ID: <cover.1725549065.git.me@ttaylorr.com> (raw)
In-Reply-To: <cover.1725206584.git.me@ttaylorr.com>
This series adds a build-time knob to allow selecting an alternative
SHA-1 implementation for non-cryptographic hashing within Git, starting
with the `hashwrite()` family of functions.
This version is a small reroll from the original round which addresses a
handful of suggestions made during review, and also fixes compiling with
OPENSSL_SHA1_FAST with older versions of OpenSSL (having
OPENSSL_API_LEVEL < 3).
Otherwise, the series is unchanged from the first round. But as always,
a range-diff is included below for convenience.
Thanks in advance for your review!
Taylor Blau (4):
sha1: do not redefine `platform_SHA_CTX` and friends
hash.h: scaffolding for _fast hashing variants
Makefile: allow specifying a SHA-1 for non-cryptographic uses
csum-file.c: use fast SHA-1 implementation when available
Makefile | 25 ++++++++++++++++
block-sha1/sha1.h | 2 ++
csum-file.c | 18 ++++++------
hash.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++
object-file.c | 42 +++++++++++++++++++++++++++
sha1/openssl.h | 2 ++
sha1dc_git.h | 3 ++
7 files changed, 155 insertions(+), 9 deletions(-)
Range-diff against v1:
1: e7cd23bf4c = 1: e7cd23bf4c sha1: do not redefine `platform_SHA_CTX` and friends
2: 6ac6f934c3 ! 2: 3b5f21e4a6 hash.h: scaffolding for _fast hashing variants
@@ hash.h
#endif
+#ifndef platform_SHA_CTX_fast
-+#define platform_SHA_CTX_fast platform_SHA_CTX
-+#define platform_SHA1_Init_fast platform_SHA1_Init
-+#define platform_SHA1_Update_fast platform_SHA1_Update
-+#define platform_SHA1_Final_fast platform_SHA1_Final
-+#ifdef platform_SHA1_Clone
-+#define platform_SHA1_Clone_fast platform_SHA1_Clone
-+#endif
++# define platform_SHA_CTX_fast platform_SHA_CTX
++# define platform_SHA1_Init_fast platform_SHA1_Init
++# define platform_SHA1_Update_fast platform_SHA1_Update
++# define platform_SHA1_Final_fast platform_SHA1_Final
++# ifdef platform_SHA1_Clone
++# define platform_SHA1_Clone_fast platform_SHA1_Clone
++# endif
+#endif
+
#define git_SHA_CTX platform_SHA_CTX
@@ hash.h
#define git_SHA1_Clone platform_SHA1_Clone
#endif
+#ifdef platform_SHA1_Clone_fast
-+#define git_SHA1_Clone_fast platform_SHA1_Clone_fast
++# define git_SHA1_Clone_fast platform_SHA1_Clone_fast
+#endif
#ifndef platform_SHA256_CTX
@@ hash.h: struct git_hash_algo {
/* The hash finalization function for object IDs. */
git_hash_final_oid_fn final_oid_fn;
-+ /* The fast hash initialization function. */
++ /* The fast / non-cryptographic hash initialization function. */
+ git_hash_init_fn fast_init_fn;
+
-+ /* The fast hash context cloning function. */
++ /* The fast / non-cryptographic hash context cloning function. */
+ git_hash_clone_fn fast_clone_fn;
+
-+ /* The fast hash update function. */
++ /* The fast / non-cryptographic hash update function. */
+ git_hash_update_fn fast_update_fn;
+
-+ /* The fast hash finalization function. */
++ /* The fast / non-cryptographic hash finalization function. */
+ git_hash_final_fn fast_final_fn;
+
-+ /* The fast hash finalization function for object IDs. */
++ /* The fast / non-cryptographic hash finalization function. */
+ git_hash_final_oid_fn fast_final_oid_fn;
+
/* The OID of the empty tree. */
3: 682e4c2cc3 ! 3: 02764de139 Makefile: allow specifying a SHA-1 for non-cryptographic uses
@@ hash.h
#endif
+#if defined(SHA1_APPLE_FAST)
-+#include <CommonCrypto/CommonDigest.h>
-+#define platform_SHA_CTX_fast CC_SHA1_CTX
-+#define platform_SHA1_Init_fast CC_SHA1_Init
-+#define platform_SHA1_Update_fast CC_SHA1_Update
-+#define platform_SHA1_Final_fast CC_SHA1_Final
++# include <CommonCrypto/CommonDigest.h>
++# define platform_SHA_CTX_fast CC_SHA1_CTX
++# define platform_SHA1_Init_fast CC_SHA1_Init
++# define platform_SHA1_Update_fast CC_SHA1_Update
++# define platform_SHA1_Final_fast CC_SHA1_Final
+#elif defined(SHA1_OPENSSL_FAST)
+# include <openssl/sha.h>
+# if defined(OPENSSL_API_LEVEL) && OPENSSL_API_LEVEL >= 3
+# define SHA1_NEEDS_CLONE_HELPER_FAST
+# include "sha1/openssl.h"
++# define platform_SHA_CTX_fast openssl_SHA1_CTX
++# define platform_SHA1_Init_fast openssl_SHA1_Init
++# define platform_SHA1_Clone_fast openssl_SHA1_Clone
++# define platform_SHA1_Update_fast openssl_SHA1_Update
++# define platform_SHA1_Final_fast openssl_SHA1_Final
++# else
++# define platform_SHA_CTX_fast SHA_CTX
++# define platform_SHA1_Init_fast SHA1_Init
++# define platform_SHA1_Update_fast SHA1_Update
++# define platform_SHA1_Final_fast SHA1_Final
+# endif
-+# define platform_SHA_CTX_fast openssl_SHA1_CTX
-+# define platform_SHA1_Init_fast openssl_SHA1_Init
-+# define platform_SHA1_Clone_fast openssl_SHA1_Clone
-+# define platform_SHA1_Update_fast openssl_SHA1_Update
-+# define platform_SHA1_Final_fast openssl_SHA1_Final
+#elif defined(SHA1_BLK_FAST)
-+#include "block-sha1/sha1.h"
-+#define platform_SHA_CTX_fast blk_SHA_CTX
-+#define platform_SHA1_Init_fast blk_SHA1_Init
-+#define platform_SHA1_Update_fast blk_SHA1_Update
-+#define platform_SHA1_Final_fast blk_SHA1_Final
++# include "block-sha1/sha1.h"
++# define platform_SHA_CTX_fast blk_SHA_CTX
++# define platform_SHA1_Init_fast blk_SHA1_Init
++# define platform_SHA1_Update_fast blk_SHA1_Update
++# define platform_SHA1_Final_fast blk_SHA1_Final
+#endif
+
#if defined(SHA256_NETTLE)
4: e8f5cbd280 = 4: 311fcc9596 csum-file.c: use fast SHA-1 implementation when available
--
2.46.0.426.g82754d92509.dirty
next prev parent reply other threads:[~2024-09-05 15:11 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-01 16:03 [PATCH 0/4] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Taylor Blau
2024-09-01 16:03 ` [PATCH 1/4] sha1: do not redefine `platform_SHA_CTX` and friends Taylor Blau
2024-09-02 13:41 ` Patrick Steinhardt
2024-09-03 19:34 ` Taylor Blau
2024-09-01 16:03 ` [PATCH 2/4] hash.h: scaffolding for _fast hashing variants Taylor Blau
2024-09-02 13:41 ` Patrick Steinhardt
2024-09-03 17:27 ` Junio C Hamano
2024-09-03 19:52 ` Taylor Blau
2024-09-03 20:47 ` Junio C Hamano
2024-09-03 21:24 ` Taylor Blau
2024-09-04 7:05 ` Patrick Steinhardt
2024-09-04 14:53 ` Junio C Hamano
2024-09-03 19:40 ` Taylor Blau
2024-09-01 16:03 ` [PATCH 3/4] Makefile: allow specifying a SHA-1 for non-cryptographic uses Taylor Blau
2024-09-02 13:41 ` Patrick Steinhardt
2024-09-03 19:43 ` Taylor Blau
2024-09-01 16:03 ` [PATCH 4/4] csum-file.c: use fast SHA-1 implementation when available Taylor Blau
2024-09-02 13:41 ` Patrick Steinhardt
2024-09-03 1:22 ` brian m. carlson
2024-09-03 19:50 ` Taylor Blau
2024-09-02 3:41 ` [PATCH 0/4] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Junio C Hamano
2024-09-03 19:48 ` Taylor Blau
2024-09-03 20:44 ` Junio C Hamano
2024-09-02 14:08 ` brian m. carlson
2024-09-03 19:47 ` Taylor Blau
2024-09-03 22:41 ` Junio C Hamano
2024-09-04 14:01 ` brian m. carlson
2024-09-05 10:37 ` Jeff King
2024-09-05 15:41 ` Junio C Hamano
2024-09-05 16:23 ` Taylor Blau
2024-09-05 16:51 ` Junio C Hamano
2024-09-05 17:04 ` Taylor Blau
2024-09-05 17:51 ` Taylor Blau
2024-09-05 20:21 ` Taylor Blau
2024-09-05 20:27 ` Jeff King
2024-09-05 21:27 ` Junio C Hamano
2024-09-05 15:11 ` Taylor Blau [this message]
2024-09-05 15:12 ` [PATCH v2 1/4] sha1: do not redefine `platform_SHA_CTX` and friends Taylor Blau
2024-09-05 15:12 ` [PATCH v2 2/4] hash.h: scaffolding for _fast hashing variants Taylor Blau
2024-09-05 15:12 ` [PATCH v2 3/4] Makefile: allow specifying a SHA-1 for non-cryptographic uses Taylor Blau
2024-09-05 15:12 ` [PATCH v2 4/4] csum-file.c: use fast SHA-1 implementation when available Taylor Blau
2024-09-06 19:46 ` [PATCH v3 0/9] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Taylor Blau
2024-09-06 19:46 ` [PATCH v3 1/9] finalize_object_file(): check for name collision before renaming Taylor Blau
2024-09-06 19:46 ` [PATCH v3 2/9] finalize_object_file(): refactor unlink_or_warn() placement Taylor Blau
2024-09-06 19:46 ` [PATCH v3 3/9] finalize_object_file(): implement collision check Taylor Blau
2024-09-06 21:44 ` Junio C Hamano
2024-09-06 21:51 ` Chris Torek
2024-09-10 6:53 ` Jeff King
2024-09-10 15:14 ` Junio C Hamano
2024-09-16 10:45 ` Patrick Steinhardt
2024-09-16 15:54 ` Taylor Blau
2024-09-16 16:03 ` Taylor Blau
2024-09-17 20:40 ` Junio C Hamano
2024-09-06 19:46 ` [PATCH v3 4/9] pack-objects: use finalize_object_file() to rename pack/idx/etc Taylor Blau
2024-09-06 19:46 ` [PATCH v3 5/9] i5500-git-daemon.sh: use compile-able version of Git without OpenSSL Taylor Blau
2024-09-11 6:10 ` Jeff King
2024-09-11 6:12 ` Jeff King
2024-09-12 20:28 ` Junio C Hamano
2024-09-11 15:28 ` Junio C Hamano
2024-09-11 21:23 ` Jeff King
2024-09-06 19:46 ` [PATCH v3 6/9] sha1: do not redefine `platform_SHA_CTX` and friends Taylor Blau
2024-09-06 19:46 ` [PATCH v3 7/9] hash.h: scaffolding for _fast hashing variants Taylor Blau
2024-09-06 19:46 ` [PATCH v3 8/9] Makefile: allow specifying a SHA-1 for non-cryptographic uses Taylor Blau
2024-09-06 19:46 ` [PATCH v3 9/9] csum-file.c: use fast SHA-1 implementation when available Taylor Blau
2024-09-06 21:50 ` [PATCH v3 0/9] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Junio C Hamano
2024-09-24 17:32 ` [PATCH v4 0/8] " Taylor Blau
2024-09-24 17:32 ` [PATCH v4 1/8] finalize_object_file(): check for name collision before renaming Taylor Blau
2024-09-25 17:02 ` Junio C Hamano
2024-09-24 17:32 ` [PATCH v4 2/8] finalize_object_file(): refactor unlink_or_warn() placement Taylor Blau
2024-09-24 17:32 ` [PATCH v4 3/8] finalize_object_file(): implement collision check Taylor Blau
2024-09-24 20:37 ` Jeff King
2024-09-24 21:59 ` Taylor Blau
2024-09-24 22:20 ` Jeff King
2024-09-25 18:06 ` Taylor Blau
2024-09-24 21:32 ` Junio C Hamano
2024-09-24 22:02 ` Taylor Blau
2024-09-24 17:32 ` [PATCH v4 4/8] pack-objects: use finalize_object_file() to rename pack/idx/etc Taylor Blau
2024-09-24 21:34 ` Junio C Hamano
2024-09-24 17:32 ` [PATCH v4 5/8] sha1: do not redefine `platform_SHA_CTX` and friends Taylor Blau
2024-09-24 17:32 ` [PATCH v4 6/8] hash.h: scaffolding for _unsafe hashing variants Taylor Blau
2024-09-24 17:32 ` [PATCH v4 7/8] Makefile: allow specifying a SHA-1 for non-cryptographic uses Taylor Blau
2024-09-24 17:32 ` [PATCH v4 8/8] csum-file.c: use unsafe SHA-1 implementation when available Taylor Blau
2024-09-24 20:52 ` [PATCH v4 0/8] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Jeff King
2024-09-25 16:58 ` Elijah Newren
2024-09-25 17:11 ` Junio C Hamano
2024-09-25 17:22 ` Taylor Blau
2024-09-25 17:22 ` Taylor Blau
2024-09-26 15:22 ` [PATCH v5 " Taylor Blau
2024-09-26 15:22 ` [PATCH v5 1/8] finalize_object_file(): check for name collision before renaming Taylor Blau
2024-09-26 15:22 ` [PATCH v5 2/8] finalize_object_file(): refactor unlink_or_warn() placement Taylor Blau
2024-09-26 15:22 ` [PATCH v5 3/8] finalize_object_file(): implement collision check Taylor Blau
2024-09-26 15:22 ` [PATCH v5 4/8] pack-objects: use finalize_object_file() to rename pack/idx/etc Taylor Blau
2024-09-26 15:22 ` [PATCH v5 5/8] sha1: do not redefine `platform_SHA_CTX` and friends Taylor Blau
2024-09-26 15:22 ` [PATCH v5 6/8] hash.h: scaffolding for _unsafe hashing variants Taylor Blau
2024-09-26 15:22 ` [PATCH v5 7/8] Makefile: allow specifying a SHA-1 for non-cryptographic uses Taylor Blau
2024-09-26 15:22 ` [PATCH v5 8/8] csum-file.c: use unsafe SHA-1 implementation when available Taylor Blau
2024-09-26 22:47 ` [PATCH v5 0/8] hash.h: support choosing a separate SHA-1 for non-cryptographic uses Elijah Newren
2024-09-27 0:44 ` Junio C Hamano
2024-09-27 3:57 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1725549065.git.me@ttaylorr.com \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.