a2spa 2.4.1__tar.gz → 2.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {a2spa-2.4.1/sdk/a2spa.egg-info → a2spa-2.4.2}/PKG-INFO +1 -1
  2. {a2spa-2.4.1 → a2spa-2.4.2}/README.md +1 -1
  3. {a2spa-2.4.1 → a2spa-2.4.2}/pyproject.toml +1 -1
  4. {a2spa-2.4.1 → a2spa-2.4.2/sdk/a2spa.egg-info}/PKG-INFO +1 -1
  5. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_evidence.py +4 -0
  6. {a2spa-2.4.1 → a2spa-2.4.2}/LICENSE +0 -0
  7. {a2spa-2.4.1 → a2spa-2.4.2}/MANIFEST.in +0 -0
  8. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/README.md +0 -0
  9. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/__init__.py +0 -0
  10. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/delegation.py +0 -0
  11. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/ephemeral_agents.py +0 -0
  12. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/evidence.py +0 -0
  13. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/policy_constraints.py +0 -0
  14. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/py.typed +0 -0
  15. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa/state_integrity.py +0 -0
  16. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa.egg-info/SOURCES.txt +0 -0
  17. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa.egg-info/dependency_links.txt +0 -0
  18. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa.egg-info/requires.txt +0 -0
  19. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa.egg-info/top_level.txt +0 -0
  20. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_delegation.py +0 -0
  21. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_operation_ledger.py +0 -0
  22. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_policy_constraints.py +0 -0
  23. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_policy_usage_ledger.py +0 -0
  24. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_receipt_verifier.py +0 -0
  25. {a2spa-2.4.1 → a2spa-2.4.2}/sdk/a2spa_state_integrity.py +0 -0
  26. {a2spa-2.4.1 → a2spa-2.4.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: a2spa
3
- Version: 2.4.1
3
+ Version: 2.4.2
4
4
  Summary: A2SPA payload helper library for AI-agent runtime authorization
5
5
  Author: AI Modularity
6
6
  License-Expression: LicenseRef-Proprietary
@@ -16,7 +16,7 @@ A2SPA does not prove target-side execution, commit, or exactly-once effects unle
16
16
 
17
17
  ## Hosted Service 2.4
18
18
 
19
- The hosted GA contract uses product and Python/npm package version `2.4.1`, protocol `v1.0`, and canonical `/v1` API routes. Existing `/api` runtime routes remain compatibility aliases during the documented migration window. The machine-readable API contract is published at `/A2SPA/openapi.json`.
19
+ The hosted GA contract uses product and Python/npm package version `2.4.2`, protocol `v1.0`, and canonical `/v1` API routes. Existing `/api` runtime routes remain compatibility aliases during the documented migration window. The machine-readable API contract is published at `/A2SPA/openapi.json`.
20
20
 
21
21
  Enterprise/on-prem A2SPA is a separately sold product with its own release process and is not part of the hosted-service release contract.
22
22
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "a2spa"
7
- version = "2.4.1"
7
+ version = "2.4.2"
8
8
  description = "A2SPA payload helper library for AI-agent runtime authorization"
9
9
  readme = "sdk/README.md"
10
10
  requires-python = ">=3.11,<3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: a2spa
3
- Version: 2.4.1
3
+ Version: 2.4.2
4
4
  Summary: A2SPA payload helper library for AI-agent runtime authorization
5
5
  Author: AI Modularity
6
6
  License-Expression: LicenseRef-Proprietary
@@ -168,6 +168,10 @@ def _resolve_receipt_trust(
168
168
  receipt_key_id = str(receipt.get("key_id") or "") if isinstance(receipt, dict) else ""
169
169
  if not key and isinstance(key_registry, dict) and receipt_key_id:
170
170
  registered = key_registry.get(receipt_key_id)
171
+ if isinstance(registered, dict) and (
172
+ registered.get("revoked") is True or registered.get("status") in {"revoked", "disabled"}
173
+ ):
174
+ return None, "trusted receipt key is revoked or disabled"
171
175
  key = registered.get("public_key_pem") if isinstance(registered, dict) else registered
172
176
 
173
177
  pins = _receipt_fingerprint_pins(external_policy)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes