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

[PATCH v3 0/2] help: include SHA build options in version info

From
Justin Tobler <jltobler@gmail.com>
Date
Apr 3, 2025, 14:05 UTC
Message-ID
<20250403140529.497876-1-jltobler@gmail.com>
In-Reply-To
<20250401203630.285451-1-jltobler@gmail.com>
Greetings,

Additional information regarding how Git was built can be found via the `--build-options` flag for git-version(1). This currently does not include information about the SHA-1 and SHA-256 implementations Git is built with.

This short series adds build option info for the SHA-1, SHA-256, and non-crypto-SHA-1 (if any) implementations which may be useful for diagnostic purposes

Changes since V2:
  - Updates to documentation to provide additional context.
  - Inlined `get_sha_impl()` function.
Changes since V1:
  - Each SHA backend is expected to define either `SHA1_BACKEND`,
    `SHA1_UNSAFE_BACKEND`, or `SHA256_BACKEND` as appropriate.
    These symbols are then used to print the SHA build options in
    the additional version info.
  - The names of the build options are used instead of
    human-readable names.
  - Appended "(No collision detection)" to warn about SHA1
    backends without collision detection.
  - Renamed "unsafe-SHA-1" to "non-crypto-SHA-1" in the printed
    build options.
  - Small updates to documentation.

Thanks, -Justin

Justin Tobler (2):
  help: include SHA implementation in version info
  help: include unsafe SHA-1 build info in version
 Documentation/git-version.adoc |  8 ++++++++
 hash.h                         | 11 +++++++++++
 help.c                         |  7 +++++++
 3 files changed, 26 insertions(+)
Range-diff against v2:
1:  aa0f464c52 ! 1:  b01e5a18cb help: include SHA implementation in version info
    @@ Documentation/git-version.adoc: OPTIONS
      	Include additional information about how git was built for diagnostic
      	purposes.
     ++
    -+Note that the SHA1 options `SHA1_APPLE`, `SHA1_OPENSSL`, and `SHA1_BLK` do not
    -+have collision detection.
    ++The libraries used to implement the SHA-1 and SHA-256 algorithms are displayed
    ++in the form `SHA-1: <option>` and `SHA-256: <option>`. Note that the SHA-1
    ++options `SHA1_APPLE`, `SHA1_OPENSSL`, and `SHA1_BLK` do not use a collision
    ++detection algorithm and thus may be vulnerable to known SHA-1 collision
    ++attacks.
      
      GIT
      ---
    @@ help.c
      #include "help.h"
      #include "command-list.h"
      #include "string-list.h"
    -@@ help.c: char *help_unknown_cmd(const char *cmd)
    - 	exit(1);
    - }
    - 
    -+static void get_sha_impl(struct strbuf *buf)
    -+{
    -+	strbuf_addf(buf, "SHA-1: %s\n", SHA1_BACKEND);
    -+	strbuf_addf(buf, "SHA-256: %s\n", SHA256_BACKEND);
    -+}
    -+
    - void get_version_info(struct strbuf *buf, int show_build_options)
    - {
    - 	/*
     @@ help.c: void get_version_info(struct strbuf *buf, int show_build_options)
      #elif defined ZLIB_VERSION
      		strbuf_addf(buf, "zlib: %s\n", ZLIB_VERSION);
      #endif
    -+		get_sha_impl(buf);
    ++		strbuf_addf(buf, "SHA-1: %s\n", SHA1_BACKEND);
    ++		strbuf_addf(buf, "SHA-256: %s\n", SHA256_BACKEND);
      	}
      }
      
2:  95c92a05df ! 2:  cf33e4ac9e help: include unsafe SHA-1 build info in version
    @@ Commit message
         Signed-off-by: Justin Tobler <jltobler@gmail.com>
     
      ## Documentation/git-version.adoc ##
    -@@ Documentation/git-version.adoc: OPTIONS
    - +
    - Note that the SHA1 options `SHA1_APPLE`, `SHA1_OPENSSL`, and `SHA1_BLK` do not
    - have collision detection.
    -++
    -+If built to use a faster SHA-1 implementation for non-cryptographic purposes,
    -+that implementation is denoted as "non-crypto-SHA-1".
    +@@ Documentation/git-version.adoc: The libraries used to implement the SHA-1 and SHA-256 algorithms are displayed
    + in the form `SHA-1: <option>` and `SHA-256: <option>`. Note that the SHA-1
    + options `SHA1_APPLE`, `SHA1_OPENSSL`, and `SHA1_BLK` do not use a collision
    + detection algorithm and thus may be vulnerable to known SHA-1 collision
    +-attacks.
    ++attacks. When a faster SHA-1 implementation without collision detection is used
    ++for only non-cryptographic purposes, the algorithm is displayed in the form
    ++`non-collision-detecting-SHA-1: <option>`.
      
      GIT
      ---
    @@ hash.h
      #  define platform_SHA1_Init_unsafe blk_SHA1_Init
     
      ## help.c ##
    -@@ help.c: char *help_unknown_cmd(const char *cmd)
    - static void get_sha_impl(struct strbuf *buf)
    - {
    - 	strbuf_addf(buf, "SHA-1: %s\n", SHA1_BACKEND);
    -+
    -+#if defined(SHA1_UNSAFE_BACKEND)
    -+	strbuf_addf(buf, "non-crypto-SHA-1: %s\n", SHA1_UNSAFE_BACKEND);
    +@@ help.c: void get_version_info(struct strbuf *buf, int show_build_options)
    + 		strbuf_addf(buf, "zlib: %s\n", ZLIB_VERSION);
    + #endif
    + 		strbuf_addf(buf, "SHA-1: %s\n", SHA1_BACKEND);
    ++#if defined SHA1_UNSAFE_BACKEND
    ++		strbuf_addf(buf, "non-collision-detecting-SHA-1: %s\n",
    ++			    SHA1_UNSAFE_BACKEND);
     +#endif
    -+
    - 	strbuf_addf(buf, "SHA-256: %s\n", SHA256_BACKEND);
    + 		strbuf_addf(buf, "SHA-256: %s\n", SHA256_BACKEND);
    + 	}
      }
    - 
base-commit: 683c54c999c301c2cd6f715c411407c413b1d84e
-- 
2.49.0
Previous: Patrick SteinhardtNext: Justin Tobler
Message 22 of 27 in “help: include SHA build options in version info”
  1. 0/2 help: include SHA build options in version infoJustin Tobler, Mar 28, 2025
  2. 1/2 help: include SHA implementation in version infoJustin Tobler, Mar 28, 2025
  3. Junio C HamanoMar 29, 2025
  4. Patrick SteinhardtMar 31, 2025
  5. Justin ToblerMar 31, 2025
  6. Junio C HamanoApr 1, 2025
  7. Justin ToblerMar 31, 2025
  8. 2/2 help: include unsafe SHA-1 build info in versionJustin Tobler, Mar 28, 2025
  9. Christian CouderMar 29, 2025
  10. Christian CouderMar 29, 2025
  11. Justin ToblerMar 31, 2025
  12. 0/2 help: include SHA build options in version infoJustin Tobler, Apr 1, 2025
  13. 1/2 help: include SHA implementation in version infoJustin Tobler, Apr 1, 2025
  14. Patrick SteinhardtApr 2, 2025
  15. Christian CouderApr 2, 2025
  16. Christian CouderApr 2, 2025
  17. Justin ToblerApr 2, 2025
  18. 2/2 help: include unsafe SHA-1 build info in versionJustin Tobler, Apr 1, 2025
  19. Patrick SteinhardtApr 2, 2025
  20. Justin ToblerApr 2, 2025
  21. Patrick SteinhardtApr 3, 2025
  22. 0/2 help: include SHA build options in version infoJustin Tobler, Apr 3, 2025
  23. 1/2 help: include SHA implementation in version infoJustin Tobler, Apr 3, 2025
  24. 2/2 help: include unsafe SHA-1 build info in versionJustin Tobler, Apr 3, 2025
  25. Patrick SteinhardtApr 4, 2025
  26. Christian CouderApr 4, 2025
  27. Junio C HamanoApr 8, 2025

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.