Security

Integrity, with explicit boundaries.

Avow is a small cryptographic primitive. The useful security review is not “is it encrypted?” but “what exactly does a valid receipt prove, and what is still the operator’s job?”

What a valid receipt proves

A receipt carries its own public_key for convenience. That field is not a trust anchor. A verifier must obtain the expected key through configuration or a distribution channel it already trusts; otherwise an attacker can supply both a forged payload and the matching key.

What it does not prove

Not providedWhy
ConfidentialityThe payload is plain text in the receipt. Encrypt or redact before signing.
Truth or correctnessA signature proves who signed, not whether the signed claim is true.
Freshness or wall-clock timeThere is no trusted timestamp in the receipt.
Replay protectionA valid receipt verifies every time it is presented.
Key managementThe operator generates, stores, rotates, and distributes keys.

Key handling

Python’s key loader refuses key files that are readable by group or others and reports avow.key_permissions_insecure. The TypeScript package does not read key files; the signing seed is unencrypted hex held by the caller, so storage is the integrating application’s responsibility.

Replay protection is caller-owned

A receipt carries no nonce, audience, or expiry that Avow enforces. If replay matters, sign your own nonce, audience, and expires_at claims into the payload, then check them after verify against your own trusted clock and seen-nonce store. The repository’s operations guide includes the recipe.

Supply chain

Release workflows use short-lived PyPI and npm OIDC identities rather than stored registry write tokens. Eligibility, tests, dependency and secret scans, artifact builds, and clean-install checks run before either publishing job can request an OIDC identity. Each registry is checked independently; an existing mismatch stops the workflow instead of overwriting it.

Supported versions

0.5.3 of both the Python package and @gainratio/avow is the supported release. Python releases 0.1.0 through 0.4.1 shipped stray top-level packages and are unsupported.

Report a vulnerability

Report suspected vulnerabilities privately through GitHub’s private vulnerability reporting for gainratio/avow. Include:

Do not include private keys, production payloads, or other secrets. Allow time to reproduce and assess before public disclosure.

Read next

Documentation · Examples · SECURITY.md · Operations guide