All notable changes to the sovp Python package are documented here. Protocol specification: draft-litzki-sovp-03
sovp/core.py—verify_identity()no longer fails open whenintegrity_proof.createdis missing; withcheck_timestamp=Truea missingcreatedis now a rejection (Psi_core = 0), closing a replay bypass of draft Section 7.2sovp/core.py—verify_identity()no longer raisesAttributeErrorwhenintegrity_proofis a non-dict value (attacker-controlled since it's excluded from the signed payload); now returnsFalseper the documentedbool-only contract
pyproject.toml— capped the unpinnedcryptographydependency to>=38.0.0,!=40.0.0,!=40.0.1,<42. A globalpip install sovpon a server also runningcertbot/pyOpenSSL(OS-packaged) could pull acryptographyrelease newer than pyOpenSSL supports, shadow the OS-packaged version, and break certbot withAttributeError: module 'lib' has no attribute 'GEN_EMAIL'. The cap matches the range pyOpenSSL 23.x (Ubuntu 24.04's apt version) actually declares support for.
- Packaging:
sovpsource modules are now included in the built wheel ([tool.setuptools.packages.find] include = ["sovp*"]), sopip install sovpships the importablesovp.core,sovp.cli, andsovp.resolvermodules.
workers/sovp-identity/— Cloudflare Worker reference deployment for spec-compliant SOVP identity endpointworkers/sovp-identity/README.md— deployment guide with signing instructions
sovp-bridge.mjs— spec-compliant Ed25519 signing in identity document (draft-litzki-sovp-02 Section 4). Signature now covers JCS-canonicalized non-proof fields, not certification token payloadsovp-bridge.mjs—canonicalizedefault import fixed (.defaultinstead of named destructuring)sovp-identity-worker/index.mjs— deployed new spec-compliant document, Psi_core = 1 confirmed end-to-end against litzki-systems.com- DNS TXT record updated to
v=SOVP1; k=<raw-Ed25519-base64>format per draft Section 6.1
sovp/resolver.py— full DNS TXT resolution (_sovp.{domain}) and HTTP fetch (/.well-known/sovp-identity.json) pipelinevalidate_domain()— single-call full validation: fetch + resolve + verifyfetch_identity_document()— HTTP fetch with fallback pathresolve_dns_pubkey()— DNS TXT resolution, parsesv=SOVP1; k=<base64>formatSOVPResolverError— resolver-specific exception classtests/test_vectors.py— RFC conformance test vectors (6 vectors, deterministic)dnspythonandrequestsadded as package dependencies
- IETF Draft version references in README updated to
draft-litzki-sovp-02 pyproject.tomlversion corrected from0.1.0-alphato1.0.1readme = "README.md"added topyproject.toml— PyPI now renders full documentation- Parameter count corrected to 268+ across all references
- Initial release
sovp.coreprimitives:generate_keypair(),sign_identity(),verify_identity()generate_identity_document()— builds completesovp-identity.json- CLI:
sovp generate-keypair,sovp sign,sovp verify - Replay protection via timestamp validation (
check_timestamp=True, 600s window) - Apache 2.0 license