Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
f7ef09c
Refactor storage object validation
hmirin Aug 14, 2026
f710233
Add comparative performance benchmarks
hmirin Aug 16, 2026
61d3935
Make fetch connectivity checks incremental
hmirin Aug 16, 2026
e55ed35
Clarify user-facing tool comparison
hmirin Aug 17, 2026
7f31d5d
Focus README performance conclusions
hmirin Aug 18, 2026
77ebdeb
Explain opaque pack performance tradeoff
hmirin Aug 18, 2026
818d776
Place performance caveat beside benchmark
hmirin Aug 18, 2026
8bdb786
Rewrite the README for newcomers and experts
hmirin Sep 30, 2026
5703be8
Merge main and point README links at the moved docs
hmirin Sep 30, 2026
5f3c513
Add verified_refs to the durability test fixture after merging main
hmirin Sep 30, 2026
2e897a5
Lead with fast, safe, and no-master-key differences
hmirin Sep 30, 2026
0ee73b1
Qualify the fast claim with the carrier re-clone caveat
hmirin Sep 30, 2026
aaa351d
Compare with git-crypt and git-remote-gcrypt only
hmirin Sep 30, 2026
d294857
Restore the no-master-key advantage with gcrypt's actual key model
hmirin Sep 30, 2026
17cb645
Frame no master key against file-level encryption
hmirin Sep 30, 2026
575c1ba
Design anonymous recipients for v5
hmirin Sep 30, 2026
40787f7
Implement v5 anonymous recipient envelopes
hmirin Oct 1, 2026
39574f6
Document the v5 anonymous recipient format
hmirin Oct 1, 2026
2bd76ff
Make padding envelopes genuine HPKE seals
hmirin Oct 1, 2026
823c76d
Drop the Japanese README
hmirin Oct 1, 2026
3348e33
Merge branch 'readme-rewrite' into anonymous-recipients
hmirin Oct 1, 2026
c1059a2
Point security reports at git-remote-e2ee@combinatrix.ai
hmirin Oct 1, 2026
d84c3db
Move the carrier download caveat out of the pitch; extend the roadmap
hmirin Oct 1, 2026
6d1ee97
Add persistent carrier object cache
hmirin Oct 1, 2026
5204053
Document persistent carrier cache
hmirin Oct 1, 2026
230a662
Tighten the comparison table and fold its notes
hmirin Oct 1, 2026
64d6937
Add read-only device role support
hmirin Oct 1, 2026
ea37b78
Document device role selection
hmirin Oct 1, 2026
fc91b4e
Handle unassigned roles in device listing
hmirin Oct 1, 2026
64e96cc
Mark roles as supported now that read-only devices exist
hmirin Oct 1, 2026
b0be9b6
Support tag and ref deletion manifests
hmirin Oct 1, 2026
4e89c2a
Expose tag and deletion support in Git helper
hmirin Oct 1, 2026
2234f02
Document tags and remote ref deletion
hmirin Oct 1, 2026
72d3733
Validate existing refs before publication
hmirin Oct 1, 2026
28c5c5c
Mark tags and branch deletion as supported
hmirin Oct 1, 2026
d798168
Reflow the status paragraph
hmirin Oct 1, 2026
ce0f281
State the security guarantees relative to authenticated history
hmirin Oct 1, 2026
81fd7d7
Advance client pins only after verified state
hmirin Oct 1, 2026
e051541
Document continuity pin advancement rules
hmirin Oct 1, 2026
c728bad
Design recovery from an unverifiable HEAD
hmirin Oct 1, 2026
93e695e
Pin fully connected states during listing
hmirin Oct 1, 2026
bb7a9db
Scope revocation and rollback claims to the continuity floor
hmirin Oct 1, 2026
bd4a96b
Rework the recovery design around an explicit recover command
hmirin Oct 1, 2026
8a28c94
Implement explicit encrypted HEAD recovery
hmirin Oct 1, 2026
c87c5a6
Test explicit recovery against carrier attacks
hmirin Oct 1, 2026
8fc1de1
Document explicit encrypted HEAD recovery
hmirin Oct 1, 2026
21a6543
Refuse carrier recovery across merge commits
hmirin Oct 1, 2026
ac97bc1
Mention explicit recovery in the README
hmirin Oct 1, 2026
469429b
Link the recovery FAQ to the guide section
hmirin Oct 1, 2026
e8a48ef
Add Git-backend benchmark harness
hmirin Oct 2, 2026
21de55c
Constrain Git benchmark temporary data
hmirin Oct 2, 2026
8bc931b
Document Git backend benchmark results
hmirin Oct 2, 2026
78389f6
Add opt-in helper phase tracing
hmirin Oct 2, 2026
3538872
Expose benchmark helper phase traces
hmirin Oct 2, 2026
35f51c5
Disable carrier ciphertext delta compression
hmirin Oct 2, 2026
3779a29
Cache carrier objects before publishing
hmirin Oct 2, 2026
cd7e423
Avoid materializing carrier history in helper checkouts
hmirin Oct 2, 2026
321f593
Configure bare benchmark receivers
hmirin Oct 2, 2026
8064ee3
Simplify carrier batch reader control flow
hmirin Oct 2, 2026
1893611
Trace carrier object staging writes
hmirin Oct 2, 2026
68398bc
Document carrier Git benchmark improvements
hmirin Oct 2, 2026
338d94e
Add carrier attribute benchmark mode
hmirin Oct 2, 2026
d8d72d9
Record carrier attribute sensitivity probe
hmirin Oct 2, 2026
1996ede
Rewrite the README performance section from the Git-backend benchmark
hmirin Oct 2, 2026
3dac4e3
Quote measured upload size in the fast claim
hmirin Oct 2, 2026
673cf03
Tighten the fast claim wording
hmirin Oct 2, 2026
7cd3475
Measure benchmark memory and repository sizes
hmirin Oct 2, 2026
3f7286c
Trace pack encryption stream phases
hmirin Oct 2, 2026
7036a37
Enable hardware accelerated pack crypto
hmirin Oct 2, 2026
9a2190a
docs: record initial encryption benchmark results
hmirin Oct 2, 2026
ab9d678
docs: clarify benchmark size rounding and variance
hmirin Oct 2, 2026
64ae6e4
Use automatic AArch64 ChaCha20 acceleration
hmirin Oct 2, 2026
a7b3b1a
Record cargo install crypto benchmark
hmirin Oct 2, 2026
586bd9b
Add memory and size rows to the README performance table
hmirin Oct 2, 2026
81e43c1
Add reproducible benchmark runner
hmirin Oct 5, 2026
14cfcfe
Print GPG setup failure details
hmirin Oct 5, 2026
74f6333
Use short GPG homes in benchmark runs
hmirin Oct 5, 2026
b5ba7b8
Match benchmark summary table formatting
hmirin Oct 5, 2026
3148ebb
Use disk-backed benchmark work space on Linux
hmirin Oct 5, 2026
3df44d6
Set default branch for benchmark Git commands
hmirin Oct 5, 2026
285be78
Count auxiliary cache in client disk total
hmirin Oct 5, 2026
a0b7330
Use singular label for one tiny push
hmirin Oct 5, 2026
f150d16
Detect ARM CPU model in benchmark metadata
hmirin Oct 8, 2026
1de5ec4
Document the Linux aarch64 cross-check and how to reproduce
hmirin Oct 8, 2026
f4526d8
Advance verified frontier after local publication
hmirin Oct 8, 2026
7e7a06c
Document verified frontier benchmark follow-up
hmirin Oct 8, 2026
971894a
Record the Linux first-push fix measurement
hmirin Oct 8, 2026
05d5575
Refresh the README performance table from the final reproduce run
hmirin Oct 8, 2026
cedc9fe
Set a Git identity in the read-only test clone
hmirin Oct 8, 2026
d8327db
Use the M1 Pro reproduce run for the README table
hmirin Oct 10, 2026
b21a571
Expand Why git-remote-e2ee and put the comparison right after it
hmirin Oct 10, 2026
daedd65
Show a performance excerpt after Why and move the comparison back
hmirin Oct 10, 2026
70db06e
Shorten Why end-to-end encryption with a diagram
hmirin Oct 10, 2026
1714691
Redraw the E2EE figure as a threat model
hmirin Oct 10, 2026
edd5b51
Illustrate an intruder finding locked boxes instead of readable files
hmirin Oct 10, 2026
d3d1fe5
Use Tabler Icons in the E2EE illustration
hmirin Oct 10, 2026
b4f4f28
Replace the crack mark with a labeled break-in arrow
hmirin Oct 10, 2026
75547a4
Redraw the why-E2EE figure with a hacker breaking in from outside
hmirin Oct 11, 2026
1854011
Repair README corrupted by the alt-text edit
hmirin Oct 12, 2026
4542e37
Bold the performance rows where git-remote-e2ee beats gcrypt
hmirin Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Contributing

Issues and pull requests are welcome. For security problems, follow
[SECURITY.md](SECURITY.md) instead of opening a public issue.

## Ground rules

- Keep the storage contract backend-neutral. Filesystem behavior must not leak
into encrypted repository semantics.
- Do not invent cryptographic primitives. Use established AEAD, signature,
hashing, and key-wrapping libraries.
- Treat storage as malicious for confidentiality and integrity, and document
availability, rollback, freeze, and equivocation limits precisely.
- Never commit key files or decrypted test data. Test secrets must live only in
temporary directories.
- Protocol changes must update [docs/spec.md](docs/spec.md) and, where relevant,
[docs/design.md](docs/design.md) in the same change.

## Build and test

```console
cargo test --all-targets
cargo clippy --all-targets -- -D warnings
cargo fmt --all -- --check
```

CI runs the same three commands. The ignored power-cut harness is not part of
the default run; its protocol, Windows commands, and durability limits are in
[docs/durability.md](docs/durability.md).

The test suite covers:

- incremental push and reconstruction into a fresh repository;
- native clone, fetch, pull, push, dry-run, refspec, and force-push behavior;
- rollback, same-generation fork, and ciphertext-tampering rejection;
- streaming-AEAD chunk boundaries, wrong keys or AAD, reordering, duplication,
truncation, trailing bytes, forged sizes, and legacy-format rejection;
- independent device add, read, and write, non-admin rejection,
genesis-substitution rejection, administrative rollback pinning, device
revocation without pack rewrites, and multi-generation offline catch-up;
- malformed predecessor-link, generation-key commitment, recipient-set, and
signed-but-incomplete Git object-graph rejection;
- two independent carrier writers racing real `git push` processes, with
exactly one winner;
- plaintext-absence checks across carrier history;
- applicable black-box scenarios independently reimplemented from Git
upstream's
[`t/t5801-remote-helpers.sh`](https://github.com/git/git/blob/master/t/t5801-remote-helpers.sh).

A local bare Git repository is enough for deterministic carrier concurrency
tests: local-path pushes still run Git's real `receive-pack`, ref locking, and
fast-forward checks. Hosted smoke tests remain useful for authentication,
request limits, and provider-specific policy.

## Benchmarks

The opt-in harness in `scripts/` measures encryption, reconstruction,
verification, and incremental updates. See [docs/benchmarks.md](docs/benchmarks.md).
Benchmark outputs, repository keys, and reconstructed data must not be
committed.
Loading
Loading