~ober/jerboa-pgp
Imported from ~/mine/jerboa-pgp
about
# jerboa-pgp A modern, friendlier file crypto tool, written in [Jerboa] with a pure-Rust crypto backend. **No C dependencies.** ``` jpg keygen jpg encrypt -r alice.pub.jpgp -i secret.txt -o secret.txt.age jpg decrypt -i secret.txt.age jpg sign -i release.tar.gz -o release.tar.gz.sig jpg verify release.tar.gz.sig -i release.tar.gz --pubkey release-signer.pub.jpgp ``` Native crypto is [age]-style (X25519 + ChaCha20-Poly1305) for encryption and Ed25519 for signing. OpenPGP/GnuPG interop is disabled in production builds. The Rust OpenPGP backend currently pulls an unfixed `rsa` RustSec advisory, so this repo fails closed and rejects OpenPGP armor until a clean dependency graph is available. ## Status v1 implements: - `keygen` / `pubkey` / `list` / `fingerprint` (SSH-style `SHA256:`) - `encrypt` / `decrypt` (age, multi-recipient, symmetric) - `sign` / `verify` (Ed25519 native) - Self-contained `jpg-bin` (Chez `compile-program` + boot-embedded) - Strict native dependency audit with `cargo audit -D warnings` See [`docs/`](docs/) for the architecture, FFI surface, on-disk formats, disabled interop decision, build internals, and threat model. [`PLAN.md`](PLAN.md) is the original design sketch. ## Why GPG has been around for two decades and almost nobody uses it. The data model, the CLI surface, and the agent socket dance make it practically inaccessible. `jerboa-pgp` keeps the *use cases* of GPG and discards its *artifacts*. - **One identity file, one passphrase.** No keyring directory, no agent. - **Recipients are public-key strings**, not email addresses. Paste them into Slack like an SSH key. - **Pure Rust crypto, no C.** `age`, `ed25519-dalek`, `zeroize`. - **Jerboa for the human side.** CLI parsing, file I/O, formatting. ## Build Requires Rust/Cargo and Jerboa. `make test` and `make run` use `jerbuild`; if no local Jerboa checkout/tool is available, CI installs the pinned release toolchain with `support/ensure-jerboa.sh`. ``` make run ARGS='version' # interpreter mode make test # smoke tests make audit # cargo-audit for the Rust backend make test-interop # reports OpenPGP interop disabled/skipped make binary # native `jpg` binary (5MB Mach-O / ELF) make release-evidence # tests, audit, SBOM, reproducibility make install # → ~/.local/bin/jpg (native crypto is linked in) ``` Release evidence is documented in [`docs/release-evidence.md`](docs/release-evidence.md), with dependency provenance in [`docs/dependency-provenance.md`](docs/dependency-provenance.md). The release gate fails closed on RustSec advisories, secret-scan findings, test failures, or reproducibility mismatches. ## Interop with gpg OpenPGP interop is currently rejected. See [`docs/INTEROP.md`](docs/INTEROP.md) and [`docs/dependency-provenance.md`](docs/dependency-provenance.md) for the release decision. ## License Apache License 2.0. [Jerboa]: https://git.jerboa.sh/ober/jerboa [age]: https://github.com/FiloSottile/age
recent commits
- Document local mine repository authority 3551b97 Jaime Fournier
- Use FreeBSD Forgejo CI runner d45e14a user
- Set up Forgejo CI/CD policy 03a2b90 Jaime Fournier
- Update Jerboa release references 89ae812 Jaime Fournier
- Update jpkg metadata for Forgejo dc7af4f Jaime Fournier
- docs: remove jerboa-emacs restriction 084d579 Jaime Fournier
- Remove GitHub workflow metadata 899b0b5 Jaime Fournier
- jpkg: complete binary package setup 6acb510 Jaime Fournier
- update AGENTS.md 3078208 Jaime Fournier
- ci: set umask 022 in package/verify tasks too (jerbuild creates group-writable cache dirs during pkg operations) dc09383 Jaime Fournier