ca2a-runtime 0.3.1__tar.gz → 0.4.0__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.
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/codeql.yml +3 -3
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/scorecard.yml +1 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/CHANGELOG.md +26 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/Dockerfile +2 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/PKG-INFO +3 -3
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/attestation.md +8 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/mutual-attestation.md +40 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/transport.md +7 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/index.md +2 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/pyproject.toml +3 -3
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/dev.in +2 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/dev.txt +56 -56
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/docs.txt +37 -18
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/release.txt +3 -3
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/runtime.in +1 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/runtime.txt +31 -31
- ca2a_runtime-0.4.0/src/ca2a_runtime/attestation.py +383 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/hardware_acceptance.py +7 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/node.py +9 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/peer.py +65 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/base.py +15 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/binding.py +46 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/sev_snp.py +14 -5
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/software.py +5 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/tdx.py +14 -5
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/tpm.py +10 -7
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/a2a_adapter.py +17 -2
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/client.py +34 -7
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/constants.py +6 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/wire.py +13 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/sev_snp.py +2 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/tpm.py +5 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/conftest.py +58 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_a2a_sdk_bridge.py +6 -11
- ca2a_runtime-0.4.0/tests/unit/test_caller_offer_relay.py +449 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_container_release.py +1 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_holder_binding.py +16 -11
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_live_call.py +3 -1
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_mutual_attestation.py +19 -15
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_release_artifacts.py +1 -1
- ca2a_runtime-0.3.1/src/ca2a_runtime/attestation.py +0 -163
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/Dockerfile +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/build.sh +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/fuzz_attestation_parsers.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/fuzz_canonical_json.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.clusterfuzzlite/fuzz_wire_documents.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.dockerignore +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/CODEOWNERS +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/dependabot.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/actionlint.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/cflite_batch.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/cflite_pr.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/ci.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/contributor-check.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/docker.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/docs.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/limitations-parity.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/release-drafter.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/release.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/require-maintainer-approval.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/sbom.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/vouch-check.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.github/workflows/vouch-command.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/.gitignore +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/ADOPTERS.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/CHARTER.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/CNAME +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/CONTRIBUTING.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/GOVERNANCE.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/LICENSE +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/LIMITATIONS.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/MAINTAINERS.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/NOTICE +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/PRIVACY.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/ROADMAP.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/SECURITY.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/SPONSORS.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/benchmarks/.gitkeep +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/SPEC.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/assets/icon.svg +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/assets/og.png +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/concepts.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/configuration.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/hardware-validation.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/mutual-hardware-acceptance.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/quickstart.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/call-graph.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/cedar-policy.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/component-model.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/conformance.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/delegation-chain.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/error-codes.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/failure-modes.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/profile.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/provenance-dag.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/response-authentication.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/response-binding-requirements.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/sealed-channel.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/threat-model.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/trace-a2a-profile.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/spec/verification-library.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/tutorials/authoring-a-delegation-credential.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/tutorials/emit-and-verify-provenance.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/tutorials/integrating-with-a2a.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/tutorials/reproducing-the-claims.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/docs/tutorials/verify-a-delegation-chain.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/a2a-sdk/loopback.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/a2a-sdk/requirements.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/ca2a-config.yaml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/demo.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/cross-operator-delegation/policy.cedar +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/minimal/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/minimal/ca2a-config.yaml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/minimal/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/rejection-with-proof/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/rejection-with-proof/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/rejection-with-proof/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/rejection-with-proof/demo.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/trace-dag/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/examples/trace-dag/demo.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim1-attenuation-soundness/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim1-attenuation-soundness/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim2-cross-chain-replay/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim2-cross-chain-replay/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim3-scope-policy-intersection/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim3-scope-policy-intersection/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim4-sealed-payload-confidentiality/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim4-sealed-payload-confidentiality/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim5-provenance-dag-integrity/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim5-provenance-dag-integrity/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim6-cross-operator-attestation/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/claim6-cross-operator-attestation/run.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/bridge.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/transcript.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/snp_client.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/tdx_peer.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/transcript.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/mutual-snp-2026-09-17/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/mutual-snp-2026-09-17/a-to-b.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/mutual-snp-2026-09-17/b-to-a.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/experiments/hardware-validation/mutual-snp-2026-09-17/controls.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/governance/ca2a-enforcement.yaml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/hooks/seo.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/mkdocs.yml +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/overrides/main.html +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/agt-overrides.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/agt.in +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/agt.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/build.in +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/build.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements/release.in +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/requirements-docs.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/robots.txt +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/scripts/gen_action_fixtures.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/scripts/gen_agt_evidence.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/scripts/gen_example_chain.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/agent_manifest.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/benchmarks.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/bootstrap.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/canonical.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/cedar.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/challenge.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/channel/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/channel/sealed.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/cli.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/config.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/delegation/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/delegation/credential.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/delegation/holder.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/delegation/revocation.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/errors.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/policy.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/provenance.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/response.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/tee/tsm.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/trace_binding.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/_b64url.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/a2a_sdk.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_runtime/transport/server.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/dag.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/tdx.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/tpm_roots.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/src/ca2a_verify/verify.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/committed_blobs.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conformance/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conformance/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conformance/conftest.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conformance/test_action_fixture_bundles.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conformance/test_profile_conformance.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/conftest.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/a2a/send_message_ca2a.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-001-verified/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-001-verified/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-001-verified/expected.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-002-parent-hash-mismatch/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-002-parent-hash-mismatch/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-002-parent-hash-mismatch/expected.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-006-policy-denial/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-006-policy-denial/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-006-policy-denial/expected.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-010-scope-escalation/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-010-scope-escalation/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-010-scope-escalation/expected.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-012-credential-expired/chain.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-012-credential-expired/dag.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/action/action-012-credential-expired/expected.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/ak.pub +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/akcert_0x01C101D0.der +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/nonce.hex +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/pcrs.bin +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.msg +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.sig +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/response-mac-v1.json +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/sev_snp/amd_milan_cert_chain.pem +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tdx/intel_sgx_root_ca.pem +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tpm/bare-rsa-prefix-0016/README.md +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tpm/bare-rsa-prefix-0016/ak-chain.pem +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tpm/bare-rsa-prefix-0016/attest.hex +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tpm/bare-rsa-prefix-0016/signature.hex +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/fixtures/tpm/bare-rsa-prefix-0016/trusted-root.pem +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/__init__.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_a2a_adapter.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_a2a_sdk_loopback.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_agent_manifest_cose.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_bootstrap.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_canonical.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_cedar.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_challenge.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_channel_and_tee.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim1_attenuation.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim2_replay.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim3_scope_policy.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim4_sealed.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim5_provenance.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_claim6_cross_operator.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_cli_start.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_committed_examples_verify.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_config.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_delegation.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_dependency_security_floors.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_docs_quickstart.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_documented_experiments.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_errors.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_example_rejection_with_proof.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_hardware_acceptance.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_lineage_cli.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_peer.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_peer_request.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_provenance.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_response_authentication.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_revocation.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_sealed_channel.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_sev_snp.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_snp_tdx_attest.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_tdx.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_tpm.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_tpm_attest.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_trace_binding.py +0 -0
- {ca2a_runtime-0.3.1 → ca2a_runtime-0.4.0}/tests/unit/test_verify.py +0 -0
|
@@ -28,16 +28,16 @@ jobs:
|
|
|
28
28
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
29
29
|
|
|
30
30
|
- name: Initialize CodeQL
|
|
31
|
-
uses: github/codeql-action/init@
|
|
31
|
+
uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
32
32
|
with:
|
|
33
33
|
languages: python
|
|
34
34
|
queries: +security-extended
|
|
35
35
|
|
|
36
36
|
- name: Autobuild
|
|
37
|
-
uses: github/codeql-action/autobuild@
|
|
37
|
+
uses: github/codeql-action/autobuild@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
38
38
|
|
|
39
39
|
- name: Perform CodeQL Analysis
|
|
40
|
-
uses: github/codeql-action/analyze@
|
|
40
|
+
uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
41
41
|
continue-on-error: true
|
|
42
42
|
with:
|
|
43
43
|
category: /language:python
|
|
@@ -38,6 +38,6 @@ jobs:
|
|
|
38
38
|
publish_results: true
|
|
39
39
|
|
|
40
40
|
- name: Upload SARIF
|
|
41
|
-
uses: github/codeql-action/upload-sarif@
|
|
41
|
+
uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
42
42
|
with:
|
|
43
43
|
sarif_file: scorecard-results.sarif
|
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-09-30
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- A delegate with no enclave could be recorded as `caller_attestation="hardware"`
|
|
15
|
+
by relaying an honest hardware peer's attestation: it asked that peer's public
|
|
16
|
+
`/.well-known/ca2a/channel` endpoint to attest under the target's challenge and
|
|
17
|
+
presented the result as its `caller_offer`. Caller offers are now minted in a
|
|
18
|
+
separate role, signed under their own binding prefixes (`ca2a-*-caller-v2|`),
|
|
19
|
+
and the handshake endpoint only mints callee-role offers. The caller must also
|
|
20
|
+
send `caller_possession`, a MAC over the request transcript keyed from X25519
|
|
21
|
+
between its attested channel key and the callee's, which the callee verifies
|
|
22
|
+
before recording any outcome.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **Breaking for callers that send `caller_offer`** (`ca2a-caller-offer-v2`). A
|
|
27
|
+
pre-v2 caller offer has no `role` and no `caller_possession` and is refused with
|
|
28
|
+
`ATTESTATION_FAILED`. Callers that send no offer, and the handshake response,
|
|
29
|
+
are unchanged on the wire. `BaseProvider.attest` and the binding helpers
|
|
30
|
+
(`tpm_qualifying_data`, `snp_report_data`, `tdx_report_data`) take a keyword
|
|
31
|
+
`role`, defaulting to the callee role; a custom `Verifier` must derive the
|
|
32
|
+
binding under `report.role`.
|
|
33
|
+
|
|
10
34
|
## [0.3.1] - 2026-09-26
|
|
11
35
|
|
|
12
36
|
### Fixed
|
|
@@ -410,7 +434,8 @@ built/stubbed boundary.
|
|
|
410
434
|
- The sealed channel does not by itself establish the enclave-held-private-key property; that is a hardware attestation guarantee that lands with real-hardware validation.
|
|
411
435
|
- Alpha schemas: the delegation credential and TRACE link schemas are not yet stable or versioned, and peer attestation evidence is not yet RATS/EAT conformant.
|
|
412
436
|
|
|
413
|
-
[Unreleased]: https://github.com/agentrust-io/ca2a/compare/v0.
|
|
437
|
+
[Unreleased]: https://github.com/agentrust-io/ca2a/compare/v0.4.0...main
|
|
438
|
+
[0.4.0]: https://github.com/agentrust-io/ca2a/compare/v0.3.1...v0.4.0
|
|
414
439
|
[0.3.1]: https://github.com/agentrust-io/ca2a/compare/v0.3.0...v0.3.1
|
|
415
440
|
[0.3.0]: https://github.com/agentrust-io/ca2a/compare/v0.2.0...v0.3.0
|
|
416
441
|
[0.2.0]: https://github.com/agentrust-io/ca2a/compare/v0.1.0a1...v0.2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Base image pinned by its multi-arch index digest, so a re-pushed tag cannot
|
|
2
2
|
# change what is built. Refresh the digest and the tag together.
|
|
3
|
-
FROM python:3.11.
|
|
3
|
+
FROM python:3.11.16-slim-bookworm@sha256:a36c24f9cbdf4fd0f52d67f0823eeac19c2028c637cecc392d97f980d4fec56b AS builder
|
|
4
4
|
|
|
5
5
|
ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
6
6
|
PIP_NO_CACHE_DIR=1
|
|
@@ -14,7 +14,7 @@ COPY pyproject.toml README.md LICENSE NOTICE ./
|
|
|
14
14
|
COPY src ./src
|
|
15
15
|
RUN python -m pip wheel --no-deps --no-build-isolation --wheel-dir /wheels .
|
|
16
16
|
|
|
17
|
-
FROM python:3.11.
|
|
17
|
+
FROM python:3.11.16-slim-bookworm@sha256:a36c24f9cbdf4fd0f52d67f0823eeac19c2028c637cecc392d97f980d4fec56b AS runtime
|
|
18
18
|
|
|
19
19
|
ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
20
20
|
PIP_NO_CACHE_DIR=1 \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ca2a-runtime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentrust-io/ca2a
|
|
6
6
|
Project-URL: Repository, https://github.com/agentrust-io/ca2a
|
|
@@ -22,7 +22,7 @@ Classifier: Topic :: Security
|
|
|
22
22
|
Requires-Python: >=3.11
|
|
23
23
|
Requires-Dist: agent-manifest>=0.11.1
|
|
24
24
|
Requires-Dist: agentrust-trace>=0.5
|
|
25
|
-
Requires-Dist: cedarpy==4.
|
|
25
|
+
Requires-Dist: cedarpy==4.12.1
|
|
26
26
|
Requires-Dist: cryptography>=50.0
|
|
27
27
|
Requires-Dist: pyyaml>=6.0
|
|
28
28
|
Requires-Dist: rfc8785>=0.1
|
|
@@ -30,7 +30,7 @@ Provides-Extra: a2a-sdk
|
|
|
30
30
|
Requires-Dist: a2a-sdk<2,>=1.1; extra == 'a2a-sdk'
|
|
31
31
|
Requires-Dist: aiohttp>=3.14.3; extra == 'a2a-sdk'
|
|
32
32
|
Provides-Extra: dev
|
|
33
|
-
Requires-Dist: a2a-sdk[http-server]==1.1.
|
|
33
|
+
Requires-Dist: a2a-sdk[http-server]==1.1.5; extra == 'dev'
|
|
34
34
|
Requires-Dist: agentrust-trace-tests<0.6,>=0.4; extra == 'dev'
|
|
35
35
|
Requires-Dist: aiohttp>=3.14.3; extra == 'dev'
|
|
36
36
|
Requires-Dist: bandit[toml]>=1.7; extra == 'dev'
|
|
@@ -23,13 +23,20 @@ binding = sha256(prefix || len32(public_key) || public_key || len32(nonce) || no
|
|
|
23
23
|
| AMD SEV-SNP | `ca2a-snp-v1\|` | `REPORT_DATA` (64 bytes) | the binding, zero-padded on the right |
|
|
24
24
|
| Intel TDX | `ca2a-tdx-v1\|` | `REPORTDATA` (64 bytes) | the binding, zero-padded on the right |
|
|
25
25
|
|
|
26
|
+
Those are the **callee-role** prefixes: what the handshake endpoint signs. A caller
|
|
27
|
+
offer (see [mutual attestation](mutual-attestation.md)) is signed under its own
|
|
28
|
+
prefix per platform, `ca2a-tpm-caller-v2|`, `ca2a-snp-caller-v2|` and
|
|
29
|
+
`ca2a-tdx-caller-v2|`, selected by the report's `role`. A verifier MUST derive the
|
|
30
|
+
binding under the report's role, so an offer relabelled from one role to the other
|
|
31
|
+
recomputes different bytes and is rejected.
|
|
32
|
+
|
|
26
33
|
Committing the nonce alone would sign for freshness only, leaving `public_key` an unsigned assertion, so sealing a payload "to a key from a verified report" would not actually be rooted in hardware. A verifier re-derives this value from the report's own fields and requires equality, which is what promotes `public_key` and `nonce` from claim to signed fact. A report whose key was substituted after collection is rejected.
|
|
27
34
|
|
|
28
35
|
Three encoding details are load-bearing, and each prefix is versioned because this is wire format: a peer and its verifier MUST derive identical bytes.
|
|
29
36
|
|
|
30
37
|
- **Hashed, not raw.** `TPM2B_DATA` is capped below 64 bytes on some platforms (Azure returns `TPM_RC_SIZE`), and 32 bytes always fits. SEV-SNP and TDX reserve 64, so the digest is left-aligned and zero-padded, which is the convention the kernel's own callers and `agent-manifest` use; a report collected by either runtime is then byte-comparable.
|
|
31
38
|
- **Length-prefixed, not delimiter-joined.** With a delimiter a value containing it shifts the split without changing the digest, so `("a|b", "c")` and `("a", "b|c")` would commit identical bytes and a peer could bind a key other than the one it appears to offer. `nonce` is an arbitrary caller-supplied string, so that is reachable rather than theoretical.
|
|
32
|
-
- **Domain-separated per platform.** The
|
|
39
|
+
- **Domain-separated per platform and per role.** The prefixes differ so a report collected on one platform cannot be replayed as another's evidence, and so a callee offer, which anybody can obtain from the public handshake endpoint under a nonce of their choosing, cannot be presented as a caller offer.
|
|
33
40
|
|
|
34
41
|
`ca2a_runtime.tee.binding` holds the single derivation the three providers share.
|
|
35
42
|
|
|
@@ -71,6 +71,43 @@ property. An earlier draft of this document claimed the key would be ceremonial
|
|
|
71
71
|
unless the response were sealed to it; see the withdrawn decision below for why
|
|
72
72
|
that was wrong in this protocol.
|
|
73
73
|
|
|
74
|
+
**The caller must prove it holds that key (`ca2a-caller-offer-v2`).** An
|
|
75
|
+
appraised offer shows that *some* enclave holds the offered key, not that the
|
|
76
|
+
party presenting it is that enclave. Before v2 nothing joined the two: the handshake
|
|
77
|
+
endpoint attests its node's key under any nonce anybody sends, and callee and
|
|
78
|
+
caller offers were signed over the same binding, so a delegate with no enclave
|
|
79
|
+
could take challenge C from target T, fetch honest hardware peer V's
|
|
80
|
+
`/channel?nonce=C` offer, present it as its own, and be recorded as
|
|
81
|
+
`caller_attestation="hardware"`. Two changes close that, each sufficient against
|
|
82
|
+
that relay on its own:
|
|
83
|
+
|
|
84
|
+
- *Role separation.* Every offer is minted for a role, carried as
|
|
85
|
+
`attestation.role` and folded into the signed binding prefix
|
|
86
|
+
([attestation.md](attestation.md#the-signed-key-and-nonce-binding)). The handshake
|
|
87
|
+
endpoint only ever mints `callee` offers; a callee accepts only `caller` offers
|
|
88
|
+
as `caller_offer`, and a caller accepts only `callee` offers from a handshake. A
|
|
89
|
+
node mints a caller offer only for its own outbound call.
|
|
90
|
+
- *Proof of possession.* With every `caller_offer` the caller sends
|
|
91
|
+
`caller_possession = {"version": "ca2a-caller-offer-v2", "mac": <hex>}`. The
|
|
92
|
+
MAC is HMAC-SHA256 over the JCS-canonical transcript (version, challenge, callee
|
|
93
|
+
channel key, caller channel key, `credential_id`, `subject`,
|
|
94
|
+
`requested_capability`, `record_id`, `payload_sha256`, `parent_record_hash`, the
|
|
95
|
+
holder proof's signature), keyed by HKDF-SHA256 (info
|
|
96
|
+
`ca2a/caller-possession/v2/key`) over caller key, callee key and
|
|
97
|
+
X25519(caller channel private key, callee channel public key). The callee
|
|
98
|
+
recomputes it with its own channel private key and the key the caller's report
|
|
99
|
+
attests, and compares in constant time. A relayed offer, even a genuine
|
|
100
|
+
caller-role one, fails because the presenter lacks that private key; a captured
|
|
101
|
+
offer and proof fail on any other request or callee because the transcript and
|
|
102
|
+
the key differ.
|
|
103
|
+
|
|
104
|
+
A missing, malformed, wrong-version or non-verifying proof is refused whenever a
|
|
105
|
+
`caller_offer` is present, at every rung including `"none"`, with the denial
|
|
106
|
+
record stating `failed`. This is a breaking change for callers that send
|
|
107
|
+
`caller_offer`: a pre-v2 offer has no `role` and no `caller_possession`, parses as
|
|
108
|
+
a callee offer, and is refused with an error naming `ca2a-caller-offer-v2`. Callers
|
|
109
|
+
that send no offer, and handshake responses, are unchanged on the wire.
|
|
110
|
+
|
|
74
111
|
## Decisions taken 2026-08-09
|
|
75
112
|
|
|
76
113
|
1. **Stateless HMAC challenge** (option B below). Works across instances with no
|
|
@@ -181,9 +218,11 @@ The same rung is reachable from a config file. `ca2a start` reads
|
|
|
181
218
|
|---|---|
|
|
182
219
|
| Stateless challenge (`v1.<expiry>.<random>.<mac>`) | `ca2a_runtime.challenge` |
|
|
183
220
|
| Callee-side appraisal, challenge then offer | `attestation.appraise_caller` |
|
|
221
|
+
| Role-separated binding prefixes | `tee.binding.role_prefix` |
|
|
222
|
+
| Caller proof of possession | `attestation.prove_caller_possession`, `attestation.verify_caller_possession` |
|
|
184
223
|
| Requirement ladder and the refusal records | `peer.appraise_caller_runtime` |
|
|
185
224
|
| Ordering: appraise before `open_sealed` | `peer.handle_peer_request` |
|
|
186
|
-
| `caller_offer` on the wire | `transport.constants`, `transport.a2a_adapter` |
|
|
225
|
+
| `caller_offer` and `caller_possession` on the wire | `transport.constants`, `transport.a2a_adapter` |
|
|
187
226
|
| Challenge on the handshake response | `transport.server`, `transport.wire` |
|
|
188
227
|
| Caller-side opt-in | `transport.client.send_task(caller_provider=...)` |
|
|
189
228
|
|
|
@@ -97,13 +97,18 @@ Namespaced keys on A2A `metadata` (message and/or params):
|
|
|
97
97
|
| `https://agentrust-io.com/extensions/ca2a/v0.1/record_id` | string | Provenance record id for this hop |
|
|
98
98
|
| `https://agentrust-io.com/extensions/ca2a/v0.1/parent_record_hash` | string or `null` | Parent TRACE/provenance hash; `null` for a root hop |
|
|
99
99
|
| `https://agentrust-io.com/extensions/ca2a/v0.1/sealed_payload` | string (base64url) or omitted | Opaque sealed ciphertext only, not a verified measurement binding |
|
|
100
|
-
| `https://agentrust-io.com/extensions/ca2a/v0.1/caller_offer` | channel-offer object or omitted | The caller's own attested channel key, bound to a challenge the callee issued ([mutual attestation](mutual-attestation.md)) |
|
|
100
|
+
| `https://agentrust-io.com/extensions/ca2a/v0.1/caller_offer` | channel-offer object or omitted | The caller's own attested channel key, bound to a challenge the callee issued, with `attestation.role` set to `"caller"` ([mutual attestation](mutual-attestation.md)) |
|
|
101
|
+
| `https://agentrust-io.com/extensions/ca2a/v0.1/caller_possession` | `{"version": "ca2a-caller-offer-v2", "mac": <hex>}` or omitted | The caller's proof that it holds the private half of `caller_offer`'s channel key. Required whenever `caller_offer` is present |
|
|
101
102
|
|
|
102
103
|
`caller_offer` is **optional**, unlike `parent_record_hash`: a caller that cannot
|
|
103
104
|
attest omits the key entirely rather than sending `null`, and a callee serves it
|
|
104
105
|
by default. A key that is present but is not a well-formed offer is malformed and
|
|
105
106
|
fails closed, so a caller cannot get itself treated as unattested by sending
|
|
106
|
-
rubbish. Its object shape is the same one the handshake endpoint returns
|
|
107
|
+
rubbish. Its object shape is the same one the handshake endpoint returns, plus
|
|
108
|
+
`attestation.role: "caller"`. The handshake endpoint omits `role`, which reads as
|
|
109
|
+
`"callee"`, and a callee refuses a callee-role offer presented as `caller_offer`.
|
|
110
|
+
An offer without `caller_possession`, or whose proof does not verify, is refused
|
|
111
|
+
([mutual attestation](mutual-attestation.md)).
|
|
107
112
|
|
|
108
113
|
Constants and helpers live in `ca2a_runtime.transport`.
|
|
109
114
|
|
|
@@ -16,7 +16,7 @@ cA2A is a profile on A2A that adds signed attenuated delegation, peer appraisal,
|
|
|
16
16
|
[What this proves, and what it does not](LIMITATIONS.md){ .md-button }
|
|
17
17
|
|
|
18
18
|
!!! tip "TL;DR"
|
|
19
|
-
[ca2a-runtime](https://pypi.org/project/ca2a-runtime/) 0.
|
|
19
|
+
[ca2a-runtime](https://pypi.org/project/ca2a-runtime/) 0.4.0 (MIT developer preview; the PyPI name `ca2a` belongs to an unrelated project) rejects scope escalation offline with no hardware or running peer. SEV-SNP and TDX appraisal ran on real Azure and GCP evidence, including an Azure SEV-SNP peer calling a GCP TDX peer on 2026-07-27, but peer appraisal is one-directional so far and binding the seal to a verified measurement on a live call is on the roadmap.
|
|
20
20
|
|
|
21
21
|
<div class="grid cards" markdown>
|
|
22
22
|
|
|
@@ -71,4 +71,4 @@ Software and hardware modes provide different assurance. Peer appraisal has been
|
|
|
71
71
|
|
|
72
72
|
For the architecture and trust boundaries, read [How It Works](docs/concepts.md). The normative profile, with the delegation chain, sealed channel, and conformance rules, is in [Profile](docs/spec/profile.md).
|
|
73
73
|
|
|
74
|
-
**Status:** ca2a-runtime 0.
|
|
74
|
+
**Status:** ca2a-runtime 0.4.0 developer preview · MIT · hosting at the Agentic AI Foundation proposed, not accepted · Sponsored by OPAQUE, which funds the engineering, infrastructure and confidential-computing work behind these projects.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ca2a-runtime"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
description = "Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -26,7 +26,7 @@ requires-python = ">=3.11"
|
|
|
26
26
|
dependencies = [
|
|
27
27
|
"cryptography>=50.0",
|
|
28
28
|
"pyyaml>=6.0",
|
|
29
|
-
"cedarpy==4.
|
|
29
|
+
"cedarpy==4.12.1",
|
|
30
30
|
# TRACE record models + RFC 8785 signing, reused rather than reimplemented
|
|
31
31
|
# (see ROADMAP Tier 0). Pin a compatible minor; cross-repo skew is a known
|
|
32
32
|
# risk documented in LIMITATIONS.md.
|
|
@@ -63,7 +63,7 @@ dev = [
|
|
|
63
63
|
"agentrust-trace-tests>=0.4,<0.6",
|
|
64
64
|
# The bridge and real HTTP loopback run in the normal CI matrix. Pin the
|
|
65
65
|
# tested SDK/server surface here; the public a2a-sdk extra remains a range.
|
|
66
|
-
"a2a-sdk[http-server]==1.1.
|
|
66
|
+
"a2a-sdk[http-server]==1.1.5",
|
|
67
67
|
"uvicorn==0.53.0",
|
|
68
68
|
"aiohttp>=3.14.3",
|
|
69
69
|
]
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# --python-version 3.11 -o requirements/dev.txt
|
|
9
9
|
cryptography>=50.0
|
|
10
10
|
pyyaml>=6.0
|
|
11
|
-
cedarpy==4.
|
|
11
|
+
cedarpy==4.12.1
|
|
12
12
|
agentrust-trace>=0.5
|
|
13
13
|
agent-manifest>=0.11.1
|
|
14
14
|
rfc8785>=0.1
|
|
@@ -21,7 +21,7 @@ types-pyyaml
|
|
|
21
21
|
bandit[toml]>=1.7
|
|
22
22
|
pip-audit>=2.6
|
|
23
23
|
agentrust-trace-tests>=0.4,<0.6
|
|
24
|
-
a2a-sdk[http-server]==1.1.
|
|
24
|
+
a2a-sdk[http-server]==1.1.5
|
|
25
25
|
uvicorn==0.53.0
|
|
26
26
|
aiohttp>=3.14.3
|
|
27
27
|
setuptools>=83.0.0
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# This file was autogenerated by uv via the following command:
|
|
2
2
|
# uv pip compile requirements/dev.in --generate-hashes --universal --python-version 3.11 -o requirements/dev.txt
|
|
3
|
-
a2a-sdk==1.1.
|
|
4
|
-
--hash=sha256:
|
|
5
|
-
--hash=sha256:
|
|
3
|
+
a2a-sdk==1.1.5 \
|
|
4
|
+
--hash=sha256:c1d63d36b79a097c62dd9be001fce21d5939f5a811a9c5afd0ba8082f13f68bf \
|
|
5
|
+
--hash=sha256:f81837f86a9bbb3ed4909539be642d61e8539ce8300a6578fa71dc901ee65b97
|
|
6
6
|
# via -r requirements/dev.in
|
|
7
7
|
agent-manifest==0.12.0 \
|
|
8
8
|
--hash=sha256:ad8380f39d906054ff07852386bb5caeb3525c82126ccc6b5d463656ba41a8e1 \
|
|
@@ -289,37 +289,37 @@ cbor2==6.1.4 \
|
|
|
289
289
|
--hash=sha256:e8097e8259b78c8feb5dd5b833b23f83ed588e821ef44cf1455082cfc9434440 \
|
|
290
290
|
--hash=sha256:f3fc7d15cba4174373df2496070faa4a927fe3ed772130d281808120aec7b61c
|
|
291
291
|
# via agent-manifest
|
|
292
|
-
cedarpy==4.
|
|
293
|
-
--hash=sha256:
|
|
294
|
-
--hash=sha256:
|
|
295
|
-
--hash=sha256:
|
|
296
|
-
--hash=sha256:
|
|
297
|
-
--hash=sha256:
|
|
298
|
-
--hash=sha256:
|
|
299
|
-
--hash=sha256:
|
|
300
|
-
--hash=sha256:
|
|
301
|
-
--hash=sha256:
|
|
302
|
-
--hash=sha256:
|
|
303
|
-
--hash=sha256:
|
|
304
|
-
--hash=sha256:
|
|
305
|
-
--hash=sha256:
|
|
306
|
-
--hash=sha256:
|
|
307
|
-
--hash=sha256:
|
|
308
|
-
--hash=sha256:
|
|
309
|
-
--hash=sha256:
|
|
310
|
-
--hash=sha256:
|
|
311
|
-
--hash=sha256:
|
|
312
|
-
--hash=sha256:
|
|
313
|
-
--hash=sha256:
|
|
314
|
-
--hash=sha256:
|
|
315
|
-
--hash=sha256:
|
|
316
|
-
--hash=sha256:
|
|
317
|
-
--hash=sha256:
|
|
318
|
-
--hash=sha256:
|
|
319
|
-
--hash=sha256:
|
|
320
|
-
--hash=sha256:
|
|
321
|
-
--hash=sha256:
|
|
322
|
-
--hash=sha256:
|
|
292
|
+
cedarpy==4.12.1 \
|
|
293
|
+
--hash=sha256:14630de081249519d76a6c9aca9f677251aa5aa722a056ac4e1f365db392f1ed \
|
|
294
|
+
--hash=sha256:1c765643cc3c1472d85324f42147f3732b1c8dd47f71ff066386e7c8afe109b7 \
|
|
295
|
+
--hash=sha256:2609aaa1e2041599592a821de3741c56b2a778b9c20e87ac97c84a0531120dbd \
|
|
296
|
+
--hash=sha256:28f99b8c3f8faf0cd78a82c2a845360f60f47d54ab8b97ba64e19b04a42e70d5 \
|
|
297
|
+
--hash=sha256:3010ab38bd691387944d57d925aab6b743694a89a1cd3de4295421161bad1609 \
|
|
298
|
+
--hash=sha256:333e89642a5914037bead6ddc16ad4d246d7a27f227856c5636db5524d16e27c \
|
|
299
|
+
--hash=sha256:34316ad5eb18d5ed34beb5b00398b1928f9add67dca6fef7f12f6bf11eb86e8d \
|
|
300
|
+
--hash=sha256:357002b436d06ad00cd24c1dc27287933af9c45af0541b0cd9d52036cccfe8c2 \
|
|
301
|
+
--hash=sha256:35e7446894bf8889e5c04118391b8720afee7dcd2e9d4ebecfa646674301fb96 \
|
|
302
|
+
--hash=sha256:3c216ce8e4e9f8edb03154424dd99611e99533c3fb2f552147f61b0fcde5ac22 \
|
|
303
|
+
--hash=sha256:42e238d25695f92898d4249cd659b67e6d9cde0c3f5ab1403cc642af5e4f5b85 \
|
|
304
|
+
--hash=sha256:46429641712af012e1b2579cc1083eb5ab1ea7df2e7117d94b965cfe515255ba \
|
|
305
|
+
--hash=sha256:547fda0b8f9948634a8b4445a449d4736de4312c11a2133aa5df7deb1d2b99fb \
|
|
306
|
+
--hash=sha256:6f814415d96eed4d724b2ea34f1017217a7022a958307986eb009d5878d482c9 \
|
|
307
|
+
--hash=sha256:7047ff6368a9e52453dbd2ac33f8d7d062a67ff1ee3f3a887f41c0a857f3f6e4 \
|
|
308
|
+
--hash=sha256:74b3d6deb0d482f9645b7709016ab81dc7405be83270b10790b646a60f475518 \
|
|
309
|
+
--hash=sha256:7f71d2285a4cd048866bd66aac36c0cff791554d6755f4230a71987f0b601b71 \
|
|
310
|
+
--hash=sha256:80dca63da4cea16969d023daff31a15665ba54a769f633fb26ac5594b7ffd291 \
|
|
311
|
+
--hash=sha256:832bdcd9586bd9597e52b6adf248adc77c1e2b0c55f3cfc10259feb6627bcd96 \
|
|
312
|
+
--hash=sha256:84aaac429b3cae8b9d496aef9ef99426c130bde390767f46738dea04b7a05714 \
|
|
313
|
+
--hash=sha256:869e4318dbd827aea996fe0b858592866fb7ad1888484b71b5fdd15334eaf8a0 \
|
|
314
|
+
--hash=sha256:91410cbd0027a91a1a3dadf919f1d54bc75a62705247b833a004c5e24add1803 \
|
|
315
|
+
--hash=sha256:9497da64835f431a0acdc6f393a841235bc0657188978238badae2ded3653b02 \
|
|
316
|
+
--hash=sha256:970ecd03259e691d8b947c972b03d3ae34c7dd1d3e9e39d03fbe62dccc03227f \
|
|
317
|
+
--hash=sha256:a935e3ed9e5873f88348469eb917e816335f62387d0f9ebed7058fac76c9a547 \
|
|
318
|
+
--hash=sha256:bbcfb99ef9dc0c155677473d7e5bea8baac6ff2abe27b89a530a7cabb184e3e0 \
|
|
319
|
+
--hash=sha256:c5eea3a4ce98862f1dc06bef1038ae8edf52c74d36980e8e75b59a38168f53ab \
|
|
320
|
+
--hash=sha256:d00d151a1b2bd3697d778fd89597cc16aa1fca11da25594d7a000c725477f151 \
|
|
321
|
+
--hash=sha256:e8ed70991b958f344017663f753f044070cd0e61dfd4ffe408ba05d48c48dea4 \
|
|
322
|
+
--hash=sha256:f164ca11999e1d3a1641548d17755c3c45a5385b2590a642ef3122a1196947ca
|
|
323
323
|
# via -r requirements/dev.in
|
|
324
324
|
certifi==2026.7.22 \
|
|
325
325
|
--hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \
|
|
@@ -2034,25 +2034,25 @@ rpds-py==2026.6.3 \
|
|
|
2034
2034
|
# via
|
|
2035
2035
|
# jsonschema
|
|
2036
2036
|
# referencing
|
|
2037
|
-
ruff==0.16.
|
|
2038
|
-
--hash=sha256:
|
|
2039
|
-
--hash=sha256:
|
|
2040
|
-
--hash=sha256:
|
|
2041
|
-
--hash=sha256:
|
|
2042
|
-
--hash=sha256:
|
|
2043
|
-
--hash=sha256:
|
|
2044
|
-
--hash=sha256:
|
|
2045
|
-
--hash=sha256:
|
|
2046
|
-
--hash=sha256:
|
|
2047
|
-
--hash=sha256:
|
|
2048
|
-
--hash=sha256:
|
|
2049
|
-
--hash=sha256:
|
|
2050
|
-
--hash=sha256:
|
|
2051
|
-
--hash=sha256:
|
|
2052
|
-
--hash=sha256:
|
|
2053
|
-
--hash=sha256:
|
|
2054
|
-
--hash=sha256:
|
|
2055
|
-
--hash=sha256:
|
|
2037
|
+
ruff==0.16.9 \
|
|
2038
|
+
--hash=sha256:0e1dbc2073624dee6618d41d0098690a7244654af746704b64759e12b6b6b385 \
|
|
2039
|
+
--hash=sha256:12b625c6cfba78d285d9f48eda5f053374f1e53cb10ef17342a383750db99161 \
|
|
2040
|
+
--hash=sha256:1632eb1d6197f33bd00b1acbc5b71009e89a8895c158e2d2b03a834fac964ab6 \
|
|
2041
|
+
--hash=sha256:41e3870277694177429b56406d65dfbdb2c2802c52b715edaf6a0b829c69d4ee \
|
|
2042
|
+
--hash=sha256:447fc07e1573afff7cb02803462b12b6c8ece7cf10e2cd78565fa6d7a1c0bf8d \
|
|
2043
|
+
--hash=sha256:4684dded7db60aa57cb118fa158630f5feade4af5782903b6053484bdf9bd129 \
|
|
2044
|
+
--hash=sha256:6bd40fec8cd4c8a3d4dd589bd8ad4e6320c13c29234159bfd959a40d529d597b \
|
|
2045
|
+
--hash=sha256:7baa24ef5fc8e77aa93879e1d3f43754a01ae488e869f1ae30cf431afd4d2452 \
|
|
2046
|
+
--hash=sha256:8a3e039a6a40ed976c491722b60e0ae4a4aa1a86057f540ee7a37a5d19ae9120 \
|
|
2047
|
+
--hash=sha256:8adbe4e58af167f767d7b2ba5e83c42e878350796cf78c2f5e14ab9903a92588 \
|
|
2048
|
+
--hash=sha256:95e6f022090368ab3b824c36276839c53b2adf1a3f4c09fefc33dfc400f6da96 \
|
|
2049
|
+
--hash=sha256:a21713e629d3e5bdb2f5c2def1cc7f04f47fa8e1a7eb0571b4a28e1da64bc728 \
|
|
2050
|
+
--hash=sha256:a41aac6230aadfaa133bdfa1614488531ffa3e0837567ae04c0da2058a9c0f9e \
|
|
2051
|
+
--hash=sha256:a5f27be168556594a86d2f415db0cf43f5291917849318f873c7e2791f7a8c67 \
|
|
2052
|
+
--hash=sha256:b3f951b14d865d5952c89d40a5ca07e87abe24fa5453299878411e127748fb1c \
|
|
2053
|
+
--hash=sha256:c2529fb5896d49115b0e9aa8f887490b34bbe76baf879ec2264ac59406869ce7 \
|
|
2054
|
+
--hash=sha256:d29c934357e45642fda2f34c0b1f4025b4a6c01e15e4bf0016879d60078a142c \
|
|
2055
|
+
--hash=sha256:ed1a252039200f57a59eebc063b54beabea67bfbaaca0eeaa7f54b5fbcda2284
|
|
2056
2056
|
# via -r requirements/dev.in
|
|
2057
2057
|
setuptools==84.0.0 \
|
|
2058
2058
|
--hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \
|
|
@@ -2161,9 +2161,9 @@ typing-inspection==0.4.4 \
|
|
|
2161
2161
|
--hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \
|
|
2162
2162
|
--hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147
|
|
2163
2163
|
# via pydantic
|
|
2164
|
-
urllib3==2.
|
|
2165
|
-
--hash=sha256:
|
|
2166
|
-
--hash=sha256:
|
|
2164
|
+
urllib3==2.8.0 \
|
|
2165
|
+
--hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \
|
|
2166
|
+
--hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63
|
|
2167
2167
|
# via requests
|
|
2168
2168
|
uvicorn==0.53.0 \
|
|
2169
2169
|
--hash=sha256:a9356f0cb89b3b8621529c5d5eebd69bfe154f4c3f68b4cf2de47e45fa855c2e \
|
|
@@ -232,9 +232,9 @@ griffelib==2.3.0 \
|
|
|
232
232
|
htmlmin2==0.1.13 \
|
|
233
233
|
--hash=sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2
|
|
234
234
|
# via mkdocs-minify-plugin
|
|
235
|
-
idna==3.
|
|
236
|
-
--hash=sha256:
|
|
237
|
-
--hash=sha256:
|
|
235
|
+
idna==3.20 \
|
|
236
|
+
--hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \
|
|
237
|
+
--hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c
|
|
238
238
|
# via requests
|
|
239
239
|
jinja2==3.1.6 \
|
|
240
240
|
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
|
|
@@ -246,9 +246,9 @@ jinja2==3.1.6 \
|
|
|
246
246
|
jsmin==3.0.1 \
|
|
247
247
|
--hash=sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc
|
|
248
248
|
# via mkdocs-minify-plugin
|
|
249
|
-
markdown==3.
|
|
250
|
-
--hash=sha256:
|
|
251
|
-
--hash=sha256:
|
|
249
|
+
markdown==3.11 \
|
|
250
|
+
--hash=sha256:180224db6aed87ba9ce1f2781ebcd5826253de8ff637112090e24b84502bbf9f \
|
|
251
|
+
--hash=sha256:cd6c89e7eb308c8b332ed673215a52d208a43f8bacc030b1419376129408719e
|
|
252
252
|
# via
|
|
253
253
|
# mkdocs
|
|
254
254
|
# mkdocs-autorefs
|
|
@@ -419,9 +419,9 @@ mkdocstrings==1.0.6 \
|
|
|
419
419
|
# via
|
|
420
420
|
# -r requirements-docs.txt
|
|
421
421
|
# mkdocstrings-python
|
|
422
|
-
mkdocstrings-python==2.0.
|
|
423
|
-
--hash=sha256:
|
|
424
|
-
--hash=sha256:
|
|
422
|
+
mkdocstrings-python==2.0.9 \
|
|
423
|
+
--hash=sha256:ae945637dc0618c6beedbee169f10c0234b77f322c53db3fc9fb4c29b3013038 \
|
|
424
|
+
--hash=sha256:c0233eff3f84d78110df50541918e7ec2bcff8e1614faddea34290a90321a416
|
|
425
425
|
# via mkdocstrings
|
|
426
426
|
packaging==26.3 \
|
|
427
427
|
--hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \
|
|
@@ -435,9 +435,9 @@ pathspec==1.1.1 \
|
|
|
435
435
|
--hash=sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a \
|
|
436
436
|
--hash=sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189
|
|
437
437
|
# via mkdocs
|
|
438
|
-
platformdirs==4.11.
|
|
439
|
-
--hash=sha256:
|
|
440
|
-
--hash=sha256:
|
|
438
|
+
platformdirs==4.11.12 \
|
|
439
|
+
--hash=sha256:b1ba966ac76153d9985a0787ffab951e7c18416189873d4e4ddb2c8a04a0a254 \
|
|
440
|
+
--hash=sha256:e8dc1cb58f1153fd7f61db1374317770baababec2480b37b8f01c6cc25b45267
|
|
441
441
|
# via mkdocs-get-deps
|
|
442
442
|
pygments==2.21.0 \
|
|
443
443
|
--hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \
|
|
@@ -547,9 +547,9 @@ six==1.17.0 \
|
|
|
547
547
|
# via
|
|
548
548
|
# markdownify
|
|
549
549
|
# python-dateutil
|
|
550
|
-
soupsieve==2.
|
|
551
|
-
--hash=sha256:
|
|
552
|
-
--hash=sha256:
|
|
550
|
+
soupsieve==2.10 \
|
|
551
|
+
--hash=sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0 \
|
|
552
|
+
--hash=sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502
|
|
553
553
|
# via beautifulsoup4
|
|
554
554
|
typing-extensions==4.16.0 \
|
|
555
555
|
--hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \
|
|
@@ -591,7 +591,26 @@ watchdog==6.0.0 \
|
|
|
591
591
|
--hash=sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c \
|
|
592
592
|
--hash=sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2
|
|
593
593
|
# via mkdocs
|
|
594
|
-
wcwidth==0.
|
|
595
|
-
--hash=sha256:
|
|
596
|
-
--hash=sha256:
|
|
594
|
+
wcwidth==0.9.1 \
|
|
595
|
+
--hash=sha256:03cfca3dcbffa86564290fe3c9978a6191ba003e8ced7f7dbda315fcb3fbe725 \
|
|
596
|
+
--hash=sha256:0665ee822ea04e25801e6e82e5407528be0863e88a17b0e7ca038843a4a3ac0c \
|
|
597
|
+
--hash=sha256:0d68a30d504c68cfdff2a5f804675c1e7ab4c0bbe878024c8b680ec5579cde67 \
|
|
598
|
+
--hash=sha256:10b00ba23482e352f874d2e8135e7ace9da838646c7dd800566246bbd46125ff \
|
|
599
|
+
--hash=sha256:356376852357b8fca71fe5415808ec421679e04b4a98eb7c9cb6a7984b911a05 \
|
|
600
|
+
--hash=sha256:40d936d72c9bdc10df43f93a8be502bc5024b487259139f66a328722c07f34a9 \
|
|
601
|
+
--hash=sha256:5823209b0d43af322ce698c689380d7c15ca31fa8e6e3be8459f27031bef0af5 \
|
|
602
|
+
--hash=sha256:61bd7aef9cafb6cb77a37a169998d7928ce82a51522146d11f60db9e7d1cb43a \
|
|
603
|
+
--hash=sha256:69bb970cf5652b88cfdb9d3fdd1764fc15e5f8ad531643e7bb3e894cd969740e \
|
|
604
|
+
--hash=sha256:6e1272b7986cefe79783737e38bdb9eaae0682b333c7bd132024441193dd5ce7 \
|
|
605
|
+
--hash=sha256:708158c082364af442f9983de7b6ec9ac0d2e1b825ada25f0911b1f138d55405 \
|
|
606
|
+
--hash=sha256:747fb724223f417a17541a95a17c1dac3a8ef9a0cf41684950f0eab191a35f65 \
|
|
607
|
+
--hash=sha256:991d1c8834f548e9c1f16432075ee84638e122312556bbf1ed595ea8fffc4673 \
|
|
608
|
+
--hash=sha256:9f1636c5075ffd5c2e835b4561874f6e5dd2bbeba3c6c2c99f067d0d16883af8 \
|
|
609
|
+
--hash=sha256:b5da43d6967668982e44a52fb551967d293f86d26cd86036ac95bbdd34394ed9 \
|
|
610
|
+
--hash=sha256:bcb9ed4a367cc025bf1092ac679a156759605182d60b7ed3c28f7221a42ddf55 \
|
|
611
|
+
--hash=sha256:c4cead196551112cb8f43cdd1f80c235ef2456e34b1a9955c424537ec99961b2 \
|
|
612
|
+
--hash=sha256:dc10e262c3ac0abbfd0a2a51e45a848b1b7f500b21ff512630277973ba25674d \
|
|
613
|
+
--hash=sha256:e0c3a1c45c5b9550c6919a4449e95f5b177f6e165786376981db8f1addae9b21 \
|
|
614
|
+
--hash=sha256:eab587e18e7cadf1a750b0098fc8bebfb62c125eb9306f2268f0443a282a3d78 \
|
|
615
|
+
--hash=sha256:fe021c4d8de9d36c31a0cb41d0d2546dadd3b0708a301f1a0c66ce200851831f
|
|
597
616
|
# via mdformat-tables
|
|
@@ -475,9 +475,9 @@ twine==7.0.0 \
|
|
|
475
475
|
--hash=sha256:85cdb29c518efef867360ae4acd4b0dfd61c8654a22fca08e6f8539f05022177 \
|
|
476
476
|
--hash=sha256:b854164df26db268af05f49aa5c0344b10e27a494343ff05b1e0bad3b135f5a7
|
|
477
477
|
# via -r requirements/release.in
|
|
478
|
-
urllib3==2.
|
|
479
|
-
--hash=sha256:
|
|
480
|
-
--hash=sha256:
|
|
478
|
+
urllib3==2.8.0 \
|
|
479
|
+
--hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \
|
|
480
|
+
--hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63
|
|
481
481
|
# via
|
|
482
482
|
# id
|
|
483
483
|
# requests
|
|
@@ -69,37 +69,37 @@ cbor2==6.1.4 \
|
|
|
69
69
|
--hash=sha256:e8097e8259b78c8feb5dd5b833b23f83ed588e821ef44cf1455082cfc9434440 \
|
|
70
70
|
--hash=sha256:f3fc7d15cba4174373df2496070faa4a927fe3ed772130d281808120aec7b61c
|
|
71
71
|
# via agent-manifest
|
|
72
|
-
cedarpy==4.
|
|
73
|
-
--hash=sha256:
|
|
74
|
-
--hash=sha256:
|
|
75
|
-
--hash=sha256:
|
|
76
|
-
--hash=sha256:
|
|
77
|
-
--hash=sha256:
|
|
78
|
-
--hash=sha256:
|
|
79
|
-
--hash=sha256:
|
|
80
|
-
--hash=sha256:
|
|
81
|
-
--hash=sha256:
|
|
82
|
-
--hash=sha256:
|
|
83
|
-
--hash=sha256:
|
|
84
|
-
--hash=sha256:
|
|
85
|
-
--hash=sha256:
|
|
86
|
-
--hash=sha256:
|
|
87
|
-
--hash=sha256:
|
|
88
|
-
--hash=sha256:
|
|
89
|
-
--hash=sha256:
|
|
90
|
-
--hash=sha256:
|
|
91
|
-
--hash=sha256:
|
|
92
|
-
--hash=sha256:
|
|
93
|
-
--hash=sha256:
|
|
94
|
-
--hash=sha256:
|
|
95
|
-
--hash=sha256:
|
|
96
|
-
--hash=sha256:
|
|
97
|
-
--hash=sha256:
|
|
98
|
-
--hash=sha256:
|
|
99
|
-
--hash=sha256:
|
|
100
|
-
--hash=sha256:
|
|
101
|
-
--hash=sha256:
|
|
102
|
-
--hash=sha256:
|
|
72
|
+
cedarpy==4.12.1 \
|
|
73
|
+
--hash=sha256:14630de081249519d76a6c9aca9f677251aa5aa722a056ac4e1f365db392f1ed \
|
|
74
|
+
--hash=sha256:1c765643cc3c1472d85324f42147f3732b1c8dd47f71ff066386e7c8afe109b7 \
|
|
75
|
+
--hash=sha256:2609aaa1e2041599592a821de3741c56b2a778b9c20e87ac97c84a0531120dbd \
|
|
76
|
+
--hash=sha256:28f99b8c3f8faf0cd78a82c2a845360f60f47d54ab8b97ba64e19b04a42e70d5 \
|
|
77
|
+
--hash=sha256:3010ab38bd691387944d57d925aab6b743694a89a1cd3de4295421161bad1609 \
|
|
78
|
+
--hash=sha256:333e89642a5914037bead6ddc16ad4d246d7a27f227856c5636db5524d16e27c \
|
|
79
|
+
--hash=sha256:34316ad5eb18d5ed34beb5b00398b1928f9add67dca6fef7f12f6bf11eb86e8d \
|
|
80
|
+
--hash=sha256:357002b436d06ad00cd24c1dc27287933af9c45af0541b0cd9d52036cccfe8c2 \
|
|
81
|
+
--hash=sha256:35e7446894bf8889e5c04118391b8720afee7dcd2e9d4ebecfa646674301fb96 \
|
|
82
|
+
--hash=sha256:3c216ce8e4e9f8edb03154424dd99611e99533c3fb2f552147f61b0fcde5ac22 \
|
|
83
|
+
--hash=sha256:42e238d25695f92898d4249cd659b67e6d9cde0c3f5ab1403cc642af5e4f5b85 \
|
|
84
|
+
--hash=sha256:46429641712af012e1b2579cc1083eb5ab1ea7df2e7117d94b965cfe515255ba \
|
|
85
|
+
--hash=sha256:547fda0b8f9948634a8b4445a449d4736de4312c11a2133aa5df7deb1d2b99fb \
|
|
86
|
+
--hash=sha256:6f814415d96eed4d724b2ea34f1017217a7022a958307986eb009d5878d482c9 \
|
|
87
|
+
--hash=sha256:7047ff6368a9e52453dbd2ac33f8d7d062a67ff1ee3f3a887f41c0a857f3f6e4 \
|
|
88
|
+
--hash=sha256:74b3d6deb0d482f9645b7709016ab81dc7405be83270b10790b646a60f475518 \
|
|
89
|
+
--hash=sha256:7f71d2285a4cd048866bd66aac36c0cff791554d6755f4230a71987f0b601b71 \
|
|
90
|
+
--hash=sha256:80dca63da4cea16969d023daff31a15665ba54a769f633fb26ac5594b7ffd291 \
|
|
91
|
+
--hash=sha256:832bdcd9586bd9597e52b6adf248adc77c1e2b0c55f3cfc10259feb6627bcd96 \
|
|
92
|
+
--hash=sha256:84aaac429b3cae8b9d496aef9ef99426c130bde390767f46738dea04b7a05714 \
|
|
93
|
+
--hash=sha256:869e4318dbd827aea996fe0b858592866fb7ad1888484b71b5fdd15334eaf8a0 \
|
|
94
|
+
--hash=sha256:91410cbd0027a91a1a3dadf919f1d54bc75a62705247b833a004c5e24add1803 \
|
|
95
|
+
--hash=sha256:9497da64835f431a0acdc6f393a841235bc0657188978238badae2ded3653b02 \
|
|
96
|
+
--hash=sha256:970ecd03259e691d8b947c972b03d3ae34c7dd1d3e9e39d03fbe62dccc03227f \
|
|
97
|
+
--hash=sha256:a935e3ed9e5873f88348469eb917e816335f62387d0f9ebed7058fac76c9a547 \
|
|
98
|
+
--hash=sha256:bbcfb99ef9dc0c155677473d7e5bea8baac6ff2abe27b89a530a7cabb184e3e0 \
|
|
99
|
+
--hash=sha256:c5eea3a4ce98862f1dc06bef1038ae8edf52c74d36980e8e75b59a38168f53ab \
|
|
100
|
+
--hash=sha256:d00d151a1b2bd3697d778fd89597cc16aa1fca11da25594d7a000c725477f151 \
|
|
101
|
+
--hash=sha256:e8ed70991b958f344017663f753f044070cd0e61dfd4ffe408ba05d48c48dea4 \
|
|
102
|
+
--hash=sha256:f164ca11999e1d3a1641548d17755c3c45a5385b2590a642ef3122a1196947ca
|
|
103
103
|
# via -r requirements/runtime.in
|
|
104
104
|
cffi==2.1.1 ; platform_python_implementation != 'PyPy' \
|
|
105
105
|
--hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \
|