Skip to content

SCITT v0.3.0: receipt compliance, JWKS endpoint, signing key persistence#2

Merged
pavanputhra merged 1 commit intomainfrom
feature/scitt-v0.3.0
Apr 18, 2026
Merged

SCITT v0.3.0: receipt compliance, JWKS endpoint, signing key persistence#2
pavanputhra merged 1 commit intomainfrom
feature/scitt-v0.3.0

Conversation

@pavanputhra
Copy link
Copy Markdown
Contributor

Summary

  • CON-526: create_receipt() now uses root_hash as the COSE Sign1 detached payload (compliance fix per IETF clarification); added GET /jwks endpoint (EC P-256 public key as JWK) and jwks_uri in /.well-known/transparency-configuration
  • CON-528: _load_or_create_signing_key() with three-tier priority — SCITT_SIGNING_KEY env var (base64 PEM, for k8s Secrets), SCITT_KEY_FILE path (load if exists, generate-and-persist if not), ephemeral fallback for dev

Files Changed

  • src/core/receipts.pycreate_receipt() accepts root_hash and uses it as detached payload
  • src/api/endpoints.pyPOST /entries and GET /entries/{id} compute root_hash via merkle_builder.get_root_sync(); added GET /jwks endpoint; jwks_uri in transparency-configuration
  • src/main.py_load_or_create_signing_key() with 3-tier priority; _ec2key_from_cryptography() helper
  • src/config.py — Added signing_key: Optional[str] = None (maps to SCITT_SIGNING_KEY)
  • docker-compose.yml./keys:/app/keys volume + SCITT_KEY_FILE=/app/keys/signing-key.pem
  • .gitignore — Added keys/, data/

Test Plan

  • Bulk end-to-end test: 35 vCons × 2 parties = 70 registrations; all cose_receipt verified against /jwks public key using RFC 9162 inclusion proof ✅
  • Signing key persists across container restarts (./keys/signing-key.pem volume mount)
  • Review _load_or_create_signing_key() key loading logic

Related vcon-server PR: vcon-dev/vcon-server#151

🤖 Generated with Claude Code

…nce (CON-526, CON-527, CON-528)

CON-526: root_hash used as COSE Sign1 detached payload in receipts (compliance fix);
added GET /jwks endpoint and jwks_uri in transparency-configuration.

CON-528: _load_or_create_signing_key() with three-tier priority — SCITT_SIGNING_KEY
env var (base64 PEM), SCITT_KEY_FILE path (load or generate+persist), ephemeral fallback;
docker-compose.yml mounts ./keys volume and sets SCITT_KEY_FILE.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pavanputhra pavanputhra merged commit 59fe7ec into main Apr 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant