provenance-gate-signer
Out-of-process Ed25519 signing extension that closes the in-process adversary gap in provenance-gate without modifying the core package.
The problem it solves
Core provenance-gate signs captured evidence with a process-local HMAC key
(see capture.py / SECURITY.md). Any code running inside the same process
can read that key and forge T1 evidence. provenance-gate-signer moves signing
to a separate privileged process that holds an Ed25519 private key the agent
process never sees.
How it works
agent process signing service (separate, privileged)
-------------- ---------------------------------------
CaptureClient --request--> SigningService
(pubkey only) <--signed-- runs cmd, signs with PRIVATE key
real output
- The signing service is the only place the private key exists.
- The agent can only request capture; it cannot mint a valid signature.
- Verification uses the service's public key (
ServiceVerifier), so verifiers never need the private key.
Usage
# terminal A — run the privileged signing service (key never leaves here)
from provenance_gate_signer import run_service
run_service("/tmp/sign.sock") # generates + holds Ed25519 key
# terminal B — agent side (public key only)
from provenance_gate_signer import CaptureClient, ServiceVerifier
client = CaptureClient(sock_path="/tmp/sign.sock")
cap = client.capture(["pytest", "-q"]) # runs in the service, signed
assert ServiceVerifier(cap.pubkey).verify(cap) # True
# drop into core's governance unchanged:
artifact = cap.to_t1_artifact() # core EvidenceArtifact(T1)
A compromised agent process holding only the client + public key cannot
forge a passing T1 capture: it lacks the private key (see
tests/test_signer.py::test_inprocess_adversary_cannot_forge).
Status
v0.1.0 — functional sketch, fully tested. Core provenance-gate is not
modified; this is a composable extension.
Metadata
Release files for provenance-gate-signer 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| provenance_gate_signer-0.1.5.tar.gz | 10.4 kB | Without provenance | Details for provenance_gate_signer-0.1.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| provenance_gate_signer-0.1.5-py3-none-any.whl | Python 3 | none | any | Details for provenance_gate_signer-0.1.5-py3-none-any.whl |
Total release size: 21.1 kB
Release files / provenance_gate_signer-0.1.5.tar.gz
| Download URL | provenance_gate_signer-0.1.5.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0e1b2f25ded0320899ecab33aa0de2ae313d51bca1f6b050f3829e0cc3064593
|
|
BLAKE2b-256 checksum How to use checksums |
342276fb47f5033615149e4e243b122ace2292bc20696bd35d75d3829d136a91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / provenance_gate_signer-0.1.5-py3-none-any.whl
| Download URL | provenance_gate_signer-0.1.5-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9fa2f4c5964335cd5e4ebe9b53d70f56cde3f97620a133d5e44ae6586203b782
|
|
BLAKE2b-256 checksum How to use checksums |
69ce3cb740a0d4ec3c1606bfe0e4a11b16a7f96e079e5ed562a3f996534e104c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for provenance-gate-signer 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.