satroot 3.0.1__tar.gz → 3.0.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.
- {satroot-3.0.1/src/satroot.egg-info → satroot-3.0.2}/PKG-INFO +1 -1
- {satroot-3.0.1 → satroot-3.0.2}/pyproject.toml +1 -1
- {satroot-3.0.1 → satroot-3.0.2/src/satroot.egg-info}/PKG-INFO +1 -1
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_export.py +29 -8
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_export_verifier.py +56 -0
- {satroot-3.0.1 → satroot-3.0.2}/LICENSE +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/NOTICE +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/README.md +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/README.md +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/__init__.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/ai_compute_bundle_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/ai_compute_bundle_index_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/machine_compute_bundle_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/machine_compute_bundle_index_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/stable_reference_bundle_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/stable_reference_bundle_index_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/ai_compute_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/ai_compute_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/event_stream_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/identity_authority_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/identity_authority_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/license_usage_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/license_usage_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/machine_compute_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/machine_compute_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/receipt_invoice_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/receipt_invoice_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/stable_reference_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/stable_reference_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_apicredit1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_event1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_floor1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_identity1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_license1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_receipt1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/events_usdroot1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_apicredit1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_event1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_floor1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_identity1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_license1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_receipt1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_usdroot1.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network_publish.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network_publish.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/stable_reference_publication_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/stable_reference_publication_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/ai_compute_publication_catalog_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/ai_compute_publication_catalog_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/machine_compute_publication_catalog_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/machine_compute_publication_catalog_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/stable_reference_publication_catalog_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/stable_reference_publication_catalog_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/ai_compute_publication_descriptor_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/machine_compute_publication_descriptor_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/stable_reference_publication_descriptor_index.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/ai_compute_publication_metadata_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/ai_compute_publication_metadata_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/machine_compute_publication_metadata_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/machine_compute_publication_metadata_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/stable_reference_publication_metadata_catalog.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/stable_reference_publication_metadata_catalog_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_workspace_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/identity_authority_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/license_usage_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_workspace_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/receipt_invoice_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_workspace_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/identity_authority_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/license_usage_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/receipt_invoice_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/ai_compute_catalog_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/ai_compute_catalog_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/machine_compute_catalog_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/machine_compute_catalog_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/stable_reference_catalog_network.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/stable_reference_catalog_network_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/ai_compute_release_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/ai_compute_release_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/machine_compute_release_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/machine_compute_release_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/stable_reference_release_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/stable_reference_release_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack_publish.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack_publish.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/stable_reference_publication_stack.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/stable_reference_publication_stack_collection_backed.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/__init__.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.bundle-index.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.bundle-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.demo-catalog-summary.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.profile-registry.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-descriptor-index-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-descriptor-index.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-catalog-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-catalog.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-network-summary.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-registry-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-registry.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-stack-summary.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-index-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-index.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-manifest.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.schema.json +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/setup.cfg +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/SOURCES.txt +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/dependency_links.txt +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/entry_points.txt +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/requires.txt +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/top_level.txt +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot1.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_anchored_demo_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_anchored_publication_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_collection_lint.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_commitment.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_cose.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_bundle_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_release_catalog_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_release_catalog_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_envelope_verification_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_event_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_federated_registry_collection_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_jcs.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_onchain_envelope_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_operator_proof_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_profile_federation_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_profile_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_publication_ladder_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_release_gate_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_bundle_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_catalog_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_catalog_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_smoke_support.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_publication_ladder_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_test.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/src/satroot_tsa.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_anchored_demo_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_anchored_publication_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_canonicalisation_vs_jcs.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_commitment_backends.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_conformance_vectors.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_cose_statements.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_bundle_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_release_catalog_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_release_catalog_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_envelope_verification_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_event_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_federated_registry_collection_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_jcs_n_interop.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_jcs_n_vectors.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_kernel_adversarial.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_onchain_envelope_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_operator_proof_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_packaging_config.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_profile_federation_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_profile_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_publication_ladder_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_release_gate_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_rfc8785_official_vectors.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_run_pytest_chunked.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_satroot1.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_bundle_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_release_catalog_index_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_release_catalog_matrix_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_publication_ladder_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_spec_matches_reference.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_bundle_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_release_catalog_index_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_release_catalog_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_profile_smoke.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_unbound_ledger_helpers.py +0 -0
- {satroot-3.0.1 → satroot-3.0.2}/tests/test_vector_runner.py +0 -0
|
@@ -290,10 +290,24 @@ def verify_export(
|
|
|
290
290
|
events = _read_json(export_path / "bundle" / "signed_events.json")
|
|
291
291
|
verifier = sr.make_ed25519_verifier(public_keys)
|
|
292
292
|
|
|
293
|
+
# The order of the records is not evidence, so it is reported, not
|
|
294
|
+
# enforced. Each anchor is checked on its own below: its state hash
|
|
295
|
+
# against the ledger prefix it names, its action-log head against the log,
|
|
296
|
+
# its token against its checkpoint - which is what detects rewriting and
|
|
297
|
+
# truncation, in any order. Requiring a strictly rising event_count made
|
|
298
|
+
# three honest histories unverifiable for good: two anchors at one
|
|
299
|
+
# event_count because only the action log had moved (a new checkpoint),
|
|
300
|
+
# repeated records of one checkpoint written by a scheduler before the
|
|
301
|
+
# producer stopped re-anchoring unchanged states, and two overlapping
|
|
302
|
+
# anchor runs whose timestamps returned in the opposite order. A token's
|
|
303
|
+
# genTime, not a line number, is when a checkpoint existed.
|
|
293
304
|
published = 0
|
|
294
305
|
pinned_count = 0
|
|
295
|
-
previous_count = -1
|
|
296
306
|
pinned_event_count = 0
|
|
307
|
+
present_event_count = 0
|
|
308
|
+
in_order = True
|
|
309
|
+
repeated = 0
|
|
310
|
+
previous_position = None
|
|
297
311
|
attestations = []
|
|
298
312
|
for index, anchor in enumerate(anchors):
|
|
299
313
|
for field in ("root_id", "state_hash", "event_count"):
|
|
@@ -303,12 +317,16 @@ def verify_export(
|
|
|
303
317
|
raise VerificationError(f"anchor {index}: root_id does not match")
|
|
304
318
|
|
|
305
319
|
count = anchor["event_count"]
|
|
306
|
-
if count
|
|
307
|
-
raise VerificationError(
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
320
|
+
if not isinstance(count, int) or isinstance(count, bool) or count < 1:
|
|
321
|
+
raise VerificationError(f"anchor {index}: event_count {count!r} is not a positive integer")
|
|
322
|
+
position = (count, anchor.get("action_log_entries"), anchor.get("action_log_head"))
|
|
323
|
+
if previous_position is not None:
|
|
324
|
+
if position == previous_position:
|
|
325
|
+
repeated += 1
|
|
326
|
+
elif (count, position[1] or 0) < (previous_position[0], previous_position[1] or 0):
|
|
327
|
+
in_order = False
|
|
328
|
+
previous_position = position
|
|
329
|
+
present_event_count = max(present_event_count, count)
|
|
312
330
|
if count > len(events):
|
|
313
331
|
raise VerificationError(
|
|
314
332
|
f"anchor {index} commits to {count} events but the ledger holds "
|
|
@@ -460,6 +478,9 @@ def verify_export(
|
|
|
460
478
|
# itself carries.
|
|
461
479
|
"token_signature_verified": published > 0,
|
|
462
480
|
"signers_pinned": pinned_count,
|
|
481
|
+
# Reported, not enforced: see the comment above the loop.
|
|
482
|
+
"in_file_order": in_order,
|
|
483
|
+
"repeated_checkpoints": repeated,
|
|
463
484
|
# The only field that means third-party evidence.
|
|
464
485
|
"third_party_timestamp_verified": pinned_count == published > 0,
|
|
465
486
|
"attestations": attestations,
|
|
@@ -480,7 +501,7 @@ def verify_export(
|
|
|
480
501
|
"ledger_completeness_checked": False,
|
|
481
502
|
# Only anchors that actually carry a verified signature count.
|
|
482
503
|
"history_pinned_to_event": pinned_event_count,
|
|
483
|
-
"anchors_present_pin_to_event":
|
|
504
|
+
"anchors_present_pin_to_event": present_event_count,
|
|
484
505
|
}
|
|
485
506
|
|
|
486
507
|
|
|
@@ -85,3 +85,59 @@ def test_run_isolated_from_inside_the_export_planted_code_never_runs(export):
|
|
|
85
85
|
|
|
86
86
|
def test_exports_no_longer_need_to_carry_code():
|
|
87
87
|
assert not (FIXTURE / "verify_export.py").exists() and not (FIXTURE / "tokenverify.py").exists()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# ---- 3.0.2: the order of anchor records is reported, not enforced ---------------------------
|
|
91
|
+
|
|
92
|
+
def _offline_anchor(export, entries):
|
|
93
|
+
"""An unpublished anchor at event 1 attesting the first `entries` action-log entries."""
|
|
94
|
+
import satroot1 as sr
|
|
95
|
+
from satroot_onchain_envelope_smoke import CONTENT_TYPE, build_envelope_payload, build_envelope_script
|
|
96
|
+
|
|
97
|
+
events = json.loads((export / "bundle" / "signed_events.json").read_text(encoding="utf-8"))
|
|
98
|
+
keys = json.loads((export / "bundle" / "public_keys.json").read_text(encoding="utf-8"))
|
|
99
|
+
state_hash = sr.replay(events[:1], verifier=sr.make_ed25519_verifier(keys), allow_unbound_keys=True).state_hash()
|
|
100
|
+
log = [json.loads(line) for line in (export / "action_log.jsonl").read_text(encoding="utf-8").splitlines() if line.strip()]
|
|
101
|
+
payload = build_envelope_payload(events[0]["root_id"], state_hash)
|
|
102
|
+
return {"content_type": CONTENT_TYPE, "root_id": events[0]["root_id"], "state_hash": state_hash,
|
|
103
|
+
"envelope_script_hex": build_envelope_script(CONTENT_TYPE, payload).hex(),
|
|
104
|
+
"payload_json": payload.decode("utf-8"), "event_count": 1, "published": False,
|
|
105
|
+
"action_log_entries": entries, "action_log_head": log[entries - 1]["entry_hash"] if entries else "genesis"}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _write_anchors(export, anchors):
|
|
109
|
+
(export / "anchor_commitments.json").write_text(json.dumps(anchors, indent=2) + "\n", encoding="utf-8")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_anchors_at_one_event_count_verify_when_only_the_action_log_moved(export):
|
|
113
|
+
"""Found on a production ledger: an action recorded between two anchors gives a new
|
|
114
|
+
checkpoint at the same event_count, and the strictly-rising rule refused the export for good."""
|
|
115
|
+
_write_anchors(export, [_offline_anchor(export, 0), _offline_anchor(export, 1)])
|
|
116
|
+
result = sx.verify_export(export)
|
|
117
|
+
assert result["anchors"]["count"] == 2
|
|
118
|
+
assert result["anchors"]["in_file_order"] is True and result["anchors"]["repeated_checkpoints"] == 0
|
|
119
|
+
assert result["anchors_present_pin_to_event"] == 1
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_repeated_and_reordered_anchor_records_are_reported_not_refused(export):
|
|
123
|
+
first, second = _offline_anchor(export, 0), _offline_anchor(export, 1)
|
|
124
|
+
_write_anchors(export, [second, second, first])
|
|
125
|
+
result = sx.verify_export(export)
|
|
126
|
+
assert result["anchors"]["repeated_checkpoints"] == 1
|
|
127
|
+
assert result["anchors"]["in_file_order"] is False
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def test_order_does_not_rescue_a_rewritten_anchor(export):
|
|
131
|
+
forged = _offline_anchor(export, 1)
|
|
132
|
+
forged["state_hash"] = "sha256:" + "99" * 32
|
|
133
|
+
_write_anchors(export, [_offline_anchor(export, 0), forged])
|
|
134
|
+
with pytest.raises(sx.VerificationError):
|
|
135
|
+
sx.verify_export(export)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_an_anchor_event_count_must_be_a_positive_integer(export):
|
|
139
|
+
bad = _offline_anchor(export, 0)
|
|
140
|
+
bad["event_count"] = 0
|
|
141
|
+
_write_anchors(export, [bad])
|
|
142
|
+
with pytest.raises(sx.VerificationError, match="positive integer"):
|
|
143
|
+
sx.verify_export(export)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/machine_compute_bundle_index.json
RENAMED
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/stable_reference_bundle_index.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/ai_compute_catalog_collection_backed.json
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network.json
RENAMED
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network_publish.json
RENAMED
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/stable_reference_publication_network.json
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry.json
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/ai_compute_release_stack.json
RENAMED
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/machine_compute_release_stack.json
RENAMED
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/stable_reference_release_stack.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack_publish.json
RENAMED
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/stable_reference_publication_stack.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-descriptor-index-manifest.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-catalog-manifest.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-index-manifest.schema.json
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_catalog_index_matrix_smoke.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_release_catalog_index_matrix_smoke.py
RENAMED
|
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
|
|
File without changes
|