Skip to content

build(deps): bump sha2 from 0.10.9 to 0.11.0 - #2

Closed
dependabot[bot] wants to merge 57 commits into
mainfrom
dependabot/cargo/sha2-0.11.0
Closed

dependabot[bot] wants to merge 57 commits into
mainfrom
dependabot/cargo/sha2-0.11.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 30, 2026

Copy link
Copy Markdown

Bumps sha2 from 0.10.9 to 0.11.0.

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

An end-to-end encrypted git remote stored on an ordinary git host: age
encryption with SSH-key participants, SSH-signed manifest, incremental
transfer over a chained backend branch and compare-and-swap pushes.
Includes the design document, Nix-pinned reproducible build image, CI
and release pipeline.
The receiving repository's gc --auto can merge the packs a push stored,
which made transfers_are_incremental count fewer packs than pushes. The
transfers themselves were incremental.
…tion

The URL went to `git fetch` / `git push` as a positional argument
without `--`, so `enc::--upload-pack=<cmd>` ran <cmd>. Put `--` before
it, and refuse an empty URL or one starting with `-` when the remote is
opened.
…STSEC-2023-0071)

rsa 0.9 has an unfixed timing side channel. age's ssh feature still
pulls the crate in, so the advisory stays ignored, with the rationale
now that no RSA key ever reaches it. ssh-key no longer enables `rsa`.
Tags are mutable, and these actions run with the release job's write
token. Dependabot keeps the pins and the Cargo dependencies moving.
deny.toml admits permissive licences and crates.io only, and refuses
wildcard versions; duplicates are reported. Both crates are marked
publish = false, which the path-dependency exemption requires.
sbom.sh writes one SBOM per released platform from the pinned image's
cargo-cyclonedx. publish attests SLSA build provenance for every
archive and build manifest, and each SBOM against its archive, before
it writes to main, and publishes the provenance bundle as an asset.
Once a signer list is known (accepted state or configured participants)
the parser only sees authenticated text. Trust on first use still has
to parse first, since the signer list comes from the manifest itself.
…t use is set

A new clone or URL used to accept whoever signed the manifest, so the
host chose what it trusted. Now the signer must be in the configured
participants, or enc.trustOnFirstUse must opt in. A URL respelling of
a repository already known locally reuses its trust state, found by
repo id.
…ntly

The trust file now ends in an HMAC keyed from the first identity; a
tag that does not verify is refused. Missing trust while the tracking
ref exists is refused too, instead of a fresh first contact. The error
messages that advised deleting .git/enc/ point to a new
`git-remote-enc forget`, which clears the state and the tracking ref.
…memory

Pack keys, the manifest plaintext and envelope, passphrases and the
trust-state MAC key are held in zeroize wrappers or wiped on drop.
Memory is not locked; DESIGN.md §6.5 states that residual.
…s --apply`

Every push used to overwrite the remote's list with the pusher's
configured one, so a stale local list silently ejected participants.
A push now keeps the remote's list and warns when the configuration
differs; the new subcommand shows the difference and applies it.
Manifest format bumped to 2: new `admin <key>` items. A reader accepts
a change to the participant or admin list only if an admin of the
accepted manifest signed it, and refuses a manifest dropping every
admin. A new remote's admin defaults to its creator. Version 1 is still
read; the first push rewrites it as version 2, which 0.1 cannot read.
Backend commits are anonymous by design, so the audit trail comes from
the manifests: each push now records a `time` item (format 2, not yet
released), and `log` walks the backend branch printing each
generation's signer, time and ref, participant and admin changes.
A deterministic mutator (bit flips, insertions, deletions, truncation,
line duplication and removal) drives the manifest, envelope, refspec,
key, signature and trust-file parsers. They must not panic, what parses
must round-trip, and a verifying signature must be the original one.
Section 6.7 names the assets, actors, trust boundaries and data flows,
with a threat / mitigation / residual table. Section 6.4 now lists the
backend branch name, and that published forge keys let anyone match the
ssh recipient tags to participants, with the mitigations.
A trust file with its `mac` line cut off was read as pre-authentication
state and then re-signed, so stripping the tag defeated it. Such files,
including those written by 0.1.0, are now refused; `forget` recovers.
The host could squash or drop past backend commits unnoticed, and `log`
then credited the next remaining signer with every earlier change. Connect
now warns when the new tip does not descend from the one fetched before,
and `log` flags missing generations and says what each diff is relative to.
Packs from an encrypted remote are indexed by the helper, outside the
fetch path where git applies fetch.fsckObjects, so a hostile object (a
tree entry named .git) reached collaborators unchecked. index-pack now
runs with --fsck-objects unless fetch/transfer.fsckObjects is false,
passing git's fetch.fsck.* severities on.
…loor

With only the signer pinned, a host could serve a new clone an older
manifest (before a participant's removal) or another remote signed by the
same key. enc.repo and enc.minGeneration, handed out with the key, are
now checked against every manifest, and the first-contact message prints
both values.
LFS uploads tracked files from its pre-push hook to its own server, in
clear, and the push still succeeds. git asks the helper for `list
for-push` before running that hook, so the helper now refuses there when
a pre-push hook invokes Git LFS, unless enc.allowLfs is set.
…mits

A clone holding both an encrypted remote and the public one could publish
an embargoed fix with one `git push origin`. `install-hook` writes a
pre-push hook running `git-remote-enc pre-push`, which refuses any push
sharing history with another encrypted remote that the destination does
not already have; `--no-verify` is the deliberate disclosure.
State what the trust-file tag stops and what it does not, that a global
enc.trustOnFirstUse applies to every remote, that Git LFS is a flow
outside the helper, and list the new black-box tests.
vanackere and others added 22 commits September 24, 2026 18:01
log checked each historical signature against any key, and took the
signer's name from the manifest itself, so the host could insert forged
generations naming a participant. Manifests now carry `previous`, the
SHA-256 of their predecessor's text (format 2, not yet released); log
verifies the chain from the accepted manifest and flags the rest.
A participant could sign generation 2^64-1: readers accepted it, no push
could follow, and restoring the branch read as a rollback. Each push adds
one commit and one generation, so a manifest may now run ahead of the
accepted one only by the commits added since (recorded in the trust
state), or on first contact by the branch's length.
hmac 0.12 was already in the tree through age but needs sha2 0.10, so
the workspace moves to the sha2 line age and ssh-key build on. Same
output (RFC 4231 vectors), so existing trust files still verify.
The previous item joined format 2 after remotes had been written in it, so
a format 2 manifest without one could not tell an old remote from a broken
chain. Format 3 is written; 1 and 2 are still read. Older binaries cannot
read a remote once a version 3 writer has pushed to it.
…st only

Another tool can replace the guard at any time (git lfs install --force
does), after which a push to a plain remote publishes encrypted commits
silently. Every connect now reinstalls a missing guard and reports a
foreign, non-executable or core.hooksPath-shadowed one.
A backport whose diff context differed from the fix (a line added within
three lines of it) or whose removed lines changed in a conflict resolution
got a new blob and a new patch id, and was published. Patch ids are now
taken without context, and a pushed hunk adding what an encrypted-only hunk
adds, whitespace aside and at least 24 bytes, is refused too.
A manifest that forks from the accepted one was reported and then accepted,
so a host serving another view had every client follow it after one
warning. It is now refused; enc.refuseForks=false accepts the view the
participants settle on, which then becomes the baseline.
…output

run_input wrote all of stdin before reading stdout, so a command answering
as it reads deadlocked once both pipes filled: the guard's patch-id hung
past about 800 encrypted-only commits (64 KiB of output).
With only the guard as pre-push hook, LFS never runs, and the push carried
the pointers of LFS-tracked files without their content: the other
participants got files they could not resolve, and no error. Such a push
is now refused unless enc.allowLfs is set.
Bumps [sha2](https://github.com/RustCrypto/hashes) from 0.10.9 to 0.11.0.
- [Commits](RustCrypto/hashes@sha2-v0.10.9...sha2-v0.11.0)

---
updated-dependencies:
- dependency-name: sha2
  dependency-version: 0.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Sep 30, 2026
@vanackere vanackere closed this Oct 2, 2026
@dependabot @github

dependabot Bot commented on behalf of github Oct 2, 2026

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/cargo/sha2-0.11.0 branch October 2, 2026 02:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant