sign-and-verify
Python library implementing the
Sign-and-Verify methodology: SAVSigner (owns a KERI AID, issues Foreign Artifact
Wrapper and Dossier credentials, validates external AIDs' signatures) and SAVVerifier
(cryptographically verifies a presented Dossier CESR stream).
Install
pip install sign-and-verify
Requires Python 3.12+ and the native libsodium library (needed by keri).
Setup (development)
- Install dependencies:
uv sync --group dev - Run the test suite (no network/witness pool required):
uv run pytest - To actually issue credentials against a real keystore:
- Start a
kliwitness demo pool and a vlei-server serving the FAW/Dossier schemas (see thevLEIrepo'sschema/acdc/foreign-artifact-wrapper.jsonandschema/acdc/dossier.json— these must be saidified and published first). - Run
scripts/incept-signer-aid.shonce (withSIGNER_NAME,SIGNER_BASE,SIGNER_ALIAS,SIGNER_PASSset) to incept the signer's AID and its two credential registries. - See
examples/basic_usage.py.
- Start a
- To verify a presented Dossier CESR stream (built via
export_credential, see below):SAVVerifier(VerifierConfig(...)).verify_presentation(cesr, said)— a fresh, throwaway local KERI store; a verifier controls no AID and issues nothing, soVerifierConfigneeds onlyschema_oobisbeyond the keystore location.
Package layout
src/sign_and_verify/signer.py—SAVSigner, the issuance-side public facade.src/sign_and_verify/verifying.py—SAVVerifier:verify_presentation()(crypto validity via keripy'sParser/Verifier) andcheck_revocation()(direct witness TEL query; does not cryptographically verify the revocation event itself — see its docstring for why that's an intentional, precedented choice).src/sign_and_verify/utils.py—export_credential(): serializes a credential's full CESR proof (KEL + TEL + chained edge credentials, recursively, each edge fully introduced before anything that references it + the credential's own ACDC last) into one presentable stream.src/sign_and_verify/dossier.py— generic Dossier reading and checking (read_dossier,check_dossier,check_authority_edge) and file-to-FAW matching (match_files); no vLEI, no project policy.src/sign_and_verify/store.py—CredentialStoreprotocol and its keripy-backedKeriCredentialStore.src/sign_and_verify/vlei.py— optional vLEI ECR chain rules (verify_authority_chain); the core never imports it.src/sign_and_verify/environment.py,verifier_environment.py— open an existing signer/verifier keystore (never incepts an AID).src/sign_and_verify/doers.py,issuance.py,resolvers.py,validation.py— supporting modules for the issue-and-wait pattern, schema/OOBI resolution, and signature validation.src/sign_and_verify/config.py,verifier_config.py,errors.py— settings and error types.scripts/— kli-based AID/registry inception tooling.
Metadata
Release files for sign-and-verify 2.0.0
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 |
|---|---|---|---|---|
| sign_and_verify-2.0.0.tar.gz | 40.5 kB | With provenance | Details for sign_and_verify-2.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sign_and_verify-2.0.0-py3-none-any.whl | Python 3 | none | any | Details for sign_and_verify-2.0.0-py3-none-any.whl |
Total release size: 68.3 kB
Release files / sign_and_verify-2.0.0.tar.gz
| Download URL | sign_and_verify-2.0.0.tar.gz |
|---|---|
| Size | 40.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
328d9c056428be8b8a38bbe2cb8bc559fe8de26f6478d6b8b9b5f39ab03532f4
|
|
BLAKE2b-256 checksum How to use checksums |
8c81d8b1c29dc8714d00a6c6608969fca0ee4450b09e3f55af9cf10fe8b1f4ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / sign_and_verify-2.0.0-py3-none-any.whl
| Download URL | sign_and_verify-2.0.0-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
818ad6e846ff0936608e094cc1d4b13a958c62eef65de722cc2a002a1694bfb5
|
|
BLAKE2b-256 checksum How to use checksums |
1524b515d1935556e93fd769e69b979ac8fd590d71b0b42514dbf1050fb4c1fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logSecurity for sign-and-verify 2.0.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for sign_and_verify-2.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logA 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.