From: "brian m. carlson" <sandals@crustytoothpaste.net> To: <git@vger.kernel.org> Cc: Eric Sunshine <sunshine@sunshineco.com> Subject: [PATCH v4 04/39] t3404: prepare 'short SHA-1 collision' tests for SHA-256 Date: Sun, 26 Jul 2020 19:53:49 +0000 [thread overview] Message-ID: <20200726195424.626969-5-sandals@crustytoothpaste.net> (raw) In-Reply-To: <20200726195424.626969-1-sandals@crustytoothpaste.net> From: Johannes Schindelin <johannes.schindelin@gmx.de> The idea of the magic value "ac4f2ee" in this test is to make the reworded commit `collide2` have the same shortened ID as the commit `collide3`. To port the same idea to the SHA-256 version of Git, we therefore need another magic value that causes the same collision, but this time with the SHA-256 version of the commit IDs. In this patch, we add code guarded by `GIT_TEST_FIND_COLLIDER` to do exactly that. Essentially, a large number of integers is appended to the commit message "collide2" to find such a collision. To make it easier to find such a collision, we reduce the number of digits to 4. The `t/oid-info/oid` file now lists the values found in that way, and the test cases are modified to use those values. As the tests are no longer dependent on SHA-1, we also rename their titles to talk about "commit IDs" instead of "SHA-1s". Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> --- t/t3404-rebase-interactive.sh | 50 ++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 4a7d21f898..2fb2c581cb 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -30,6 +30,7 @@ Initial setup: . "$TEST_DIRECTORY"/lib-rebase.sh test_expect_success 'setup' ' + test_oid_init && test_commit A file1 && test_commit B file1 && test_commit C file2 && @@ -1250,7 +1251,7 @@ test_expect_success 'rebase -i error on commits with \ in message' ' test_expect_code 1 grep " emp" error ' -test_expect_success SHA1 'short SHA-1 setup' ' +test_expect_success 'short commit ID setup' ' test_when_finished "git checkout master" && git checkout --orphan collide && git rm -rf . && @@ -1262,23 +1263,54 @@ test_expect_success SHA1 'short SHA-1 setup' ' ) ' -test_expect_success SHA1 'short SHA-1 collide' ' +if test -n "$GIT_TEST_FIND_COLLIDER" +then + author="$(unset test_tick; test_tick; git var GIT_AUTHOR_IDENT)" + committer="$(unset test_tick; test_tick; git var GIT_COMMITTER_IDENT)" + blob="$(git rev-parse collide2:collide)" + from="$(git rev-parse collide1^0)" + repl="commit refs/heads/collider-&\\n" + repl="${repl}author $author\\ncommitter $committer\\n" + repl="${repl}data <<EOF\\ncollide2 &\\nEOF\\n" + repl="${repl}from $from\\nM 100644 $blob collide\\n" + test_seq 1 32768 | sed "s|.*|$repl|" >script && + git fast-import <script && + git pack-refs && + git for-each-ref >refs && + grep "^$(test_oid t3404_collision)" <refs >matches && + cat matches && + test_line_count -gt 2 matches || { + echo "Could not find a collider" >&2 + exit 1 + } +fi + +test_expect_success 'short commit ID collide' ' + test_oid_cache <<-EOF && + # collision-related constants + t3404_collision sha1:6bcd + t3404_collision sha256:0161 + t3404_collider sha1:ac4f2ee + t3404_collider sha256:16697 + EOF test_when_finished "reset_rebase && git checkout master" && git checkout collide && - colliding_sha1=6bcda37 && - test $colliding_sha1 = "$(git rev-parse HEAD | cut -c 1-7)" && + colliding_id=$(test_oid t3404_collision) && + hexsz=$(test_oid hexsz) && + test $colliding_id = "$(git rev-parse HEAD | cut -c 1-4)" && + test_config core.abbrev 4 && ( unset test_tick && test_tick && set_fake_editor && - FAKE_COMMIT_MESSAGE="collide2 ac4f2ee" \ + FAKE_COMMIT_MESSAGE="collide2 $(test_oid t3404_collider)" \ FAKE_LINES="reword 1 break 2" git rebase -i HEAD~2 && - test $colliding_sha1 = "$(git rev-parse HEAD | cut -c 1-7)" && - grep "^pick $colliding_sha1 " \ + test $colliding_id = "$(git rev-parse HEAD | cut -c 1-4)" && + grep "^pick $colliding_id " \ .git/rebase-merge/git-rebase-todo.tmp && - grep "^pick [0-9a-f]\{40\}" \ + grep "^pick [0-9a-f]\{$hexsz\}" \ .git/rebase-merge/git-rebase-todo && - grep "^pick [0-9a-f]\{40\}" \ + grep "^pick [0-9a-f]\{$hexsz\}" \ .git/rebase-merge/git-rebase-todo.backup && git rebase --continue ) &&
next prev parent reply other threads:[~2020-07-26 19:55 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-26 19:53 [PATCH v4 00/39] SHA-256, part 3/3 brian m. carlson 2020-07-26 19:53 ` [PATCH v4 01/39] t: make test-bloom initialize repository brian m. carlson 2020-07-26 19:53 ` [PATCH v4 02/39] t1001: use $ZERO_OID brian m. carlson 2020-07-26 19:53 ` [PATCH v4 03/39] t3305: make hash agnostic brian m. carlson 2020-07-26 19:53 ` brian m. carlson [this message] 2020-07-26 22:31 ` [PATCH v4 04/39] t3404: prepare 'short SHA-1 collision' tests for SHA-256 Eric Sunshine 2020-07-26 19:53 ` [PATCH v4 05/39] t6100: make hash size independent brian m. carlson 2020-07-26 19:53 ` [PATCH v4 06/39] t6101: " brian m. carlson 2020-07-26 19:53 ` [PATCH v4 07/39] t6301: " brian m. carlson 2020-07-26 19:53 ` [PATCH v4 08/39] t6500: specify test values for SHA-256 brian m. carlson 2020-07-26 19:53 ` [PATCH v4 09/39] t6501: avoid hard-coded objects brian m. carlson 2020-07-26 19:53 ` [PATCH v4 10/39] t7003: compute appropriate length constant brian m. carlson 2020-07-26 19:53 ` [PATCH v4 11/39] t7063: make hash size independent brian m. carlson 2020-07-26 22:40 ` Eric Sunshine 2020-07-26 19:53 ` [PATCH v4 12/39] t7201: abstract away SHA-1-specific constants brian m. carlson 2020-07-26 22:54 ` Eric Sunshine 2020-07-26 19:53 ` [PATCH v4 13/39] t7102: " brian m. carlson 2020-07-26 19:53 ` [PATCH v4 14/39] t7400: make hash size independent brian m. carlson 2020-07-26 19:54 ` [PATCH v4 15/39] t7405: " brian m. carlson 2020-07-26 19:54 ` [PATCH v4 16/39] t7506: avoid checking for SHA-1-specific constants brian m. carlson 2020-07-26 19:54 ` [PATCH v4 17/39] t7508: use $ZERO_OID instead of hard-coded constant brian m. carlson 2020-07-26 19:54 ` [PATCH v4 18/39] t8002: make hash size independent brian m. carlson 2020-07-26 22:49 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 19/39] t8003: " brian m. carlson 2020-07-26 19:54 ` [PATCH v4 20/39] t8011: " brian m. carlson 2020-07-26 23:00 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 21/39] t9300: abstract away SHA-1-specific constants brian m. carlson 2020-07-26 23:14 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 22/39] t9300: use $ZERO_OID instead of hard-coded object ID brian m. carlson 2020-07-26 19:54 ` [PATCH v4 23/39] t9301: make hash size independent brian m. carlson 2020-07-26 19:54 ` [PATCH v4 24/39] t9350: " brian m. carlson 2020-07-26 19:54 ` [PATCH v4 25/39] t9500: ensure that algorithm info is preserved in config brian m. carlson 2020-07-26 19:54 ` [PATCH v4 26/39] t9700: make hash size independent brian m. carlson 2020-07-26 19:54 ` [PATCH v4 27/39] t5308: make test work with SHA-256 brian m. carlson 2020-07-26 19:54 ` [PATCH v4 28/39] t0410: mark test with SHA1 prerequisite brian m. carlson 2020-07-26 19:54 ` [PATCH v4 29/39] http-fetch: set up git directory before parsing pack hashes brian m. carlson 2020-07-26 23:28 ` Eric Sunshine 2020-07-26 23:30 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 30/39] builtin/verify-pack: implement an --object-format option brian m. carlson 2020-07-26 21:29 ` Eric Sunshine 2020-07-26 22:56 ` brian m. carlson 2020-07-26 19:54 ` [PATCH v4 31/39] bundle: add new version for use with SHA-256 brian m. carlson 2020-07-26 22:18 ` Eric Sunshine 2020-07-26 22:59 ` brian m. carlson 2020-07-26 19:54 ` [PATCH v4 32/39] setup: add support for reading extensions.objectformat brian m. carlson 2020-07-26 23:34 ` Eric Sunshine 2020-07-26 23:41 ` brian m. carlson 2020-07-26 19:54 ` [PATCH v4 33/39] Enable SHA-256 support by default brian m. carlson 2020-07-26 23:41 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 34/39] t: add test_oid option to select hash algorithm brian m. carlson 2020-07-26 19:54 ` [PATCH v4 35/39] t: allow testing different hash algorithms via environment brian m. carlson 2020-07-26 19:54 ` [PATCH v4 36/39] t: make SHA1 prerequisite depend on default hash brian m. carlson 2020-07-26 23:52 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 37/39] ci: run tests with SHA-256 brian m. carlson 2020-07-26 23:54 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 38/39] docs: add documentation for extensions.objectFormat brian m. carlson 2020-07-26 23:56 ` Eric Sunshine 2020-07-26 19:54 ` [PATCH v4 39/39] t: remove test_oid_init in tests brian m. carlson
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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200726195424.626969-5-sandals@crustytoothpaste.net \ --to=sandals@crustytoothpaste.net \ --cc=git@vger.kernel.org \ --cc=sunshine@sunshineco.com \ --subject='Re: [PATCH v4 04/39] t3404: prepare '\''short SHA-1 collision'\'' tests for SHA-256' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).