Repository navigation
build(deps): bump sha2 from 0.10.9 to 0.11.0 - #2
Closed
dependabot[bot] wants to merge 57 commits into
Closed
dependabot[bot] wants to merge 57 commits into
dependabot[bot] wants to merge 57 commits into
Conversation
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.
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>
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 If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps sha2 from 0.10.9 to 0.11.0.
Commits
ffe0939Release sha2 0.11.0 (#806)8991b65Use the standard order of the[package]section fields (#807)3d2bc57sha2: refactor backends (#802)faa55fbsha3: bumpkeccakto v0.2 (#803)d3e6489sha3 v0.11.0-rc.9 (#801)bbf6f51sha2: tweak backend docs (#800)155dbbfsha3: add default value for theDSgeneric parameter onTurboShake128/256...ed514f2Use published version ofkeccakv0.2 (#799)702bcd8Migrate to closure-basedkeccak(#796)827c043sha3 v0.11.0-rc.8 (#794)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 rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill 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 versionwill 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 dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)