otdf-python 0.4.4__tar.gz → 0.6.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.
- otdf_python-0.6.0/.gemini/config.yaml +4 -0
- otdf_python-0.6.0/.release-please-manifest.json +3 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/CHANGELOG.md +14 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/PKG-INFO +1 -1
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/authorization/v2/authorization.proto +47 -14
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/common/common.proto +24 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entityresolution/v2/entity_resolution.proto +11 -0
- otdf_python-0.6.0/otdf-python-proto/proto-files/kas/kas.proto +311 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/attributes/attributes.proto +21 -5
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/kasregistry/key_access_server_registry.proto +41 -4
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/keymanagement/key_management.proto +8 -1
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/namespaces/namespaces.proto +50 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/objects.proto +94 -10
- otdf_python-0.6.0/otdf-python-proto/proto-files/policy/obligations/obligations.proto +412 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/selectors.proto +4 -1
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/unsafe/unsafe.proto +15 -1
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/pyproject.toml +4 -3
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/scripts/generate_connect_proto.py +33 -24
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/__init__.py +83 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py +1 -1
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +113 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.pyi +16 -8
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +69 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.pyi +17 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py +1 -1
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +58 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.pyi +17 -4
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py +1 -1
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/attributes_pb2_grpc.py +8 -3
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/key_access_server_registry_pb2_grpc.py +44 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/namespaces_pb2_grpc.py +91 -1
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/obligations_pb2_grpc.py +723 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/logger/audit/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +235 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.pyi +7 -6
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py +65 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.py +53 -41
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.pyi +48 -4
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +85 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.pyi +12 -6
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py +130 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.py +42 -18
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.pyi +38 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +166 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.pyi +90 -10
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/__init__.py +0 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_connect.py +989 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.py +197 -0
- otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.pyi +261 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.py +48 -43
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.pyi +13 -6
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py +1 -1
- otdf_python-0.6.0/otdf-python-proto/tests/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/tests/test_generate_connect_proto.py +1 -1
- otdf_python-0.6.0/otdf-python-proto/tests/test_package_imports.py +66 -0
- otdf_python-0.6.0/otdf-python-proto/uv.lock +465 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/pyproject.toml +1 -1
- otdf_python-0.6.0/tests/integration/test_data/empty_file.txt +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/uv.lock +1 -1
- otdf_python-0.4.4/.release-please-manifest.json +0 -3
- otdf_python-0.4.4/otdf-python-proto/proto-files/kas/kas.proto +0 -160
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/__init__.py +0 -33
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +0 -105
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +0 -52
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +0 -55
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +0 -234
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +0 -79
- otdf_python-0.4.4/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +0 -150
- otdf_python-0.4.4/otdf-python-proto/uv.lock +0 -1065
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/check_entitlements.sh +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/start_opentdf_docker.sh +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/workflows/build-python.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/workflows/platform-integration-test.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/workflows/release-please.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.github/workflows/test-suite.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.gitignore +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.pre-commit-config.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.release-please-config-develop.json +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.release-please-config.json +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.release-please-manifest-develop.json +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.vscode/extensions.json +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/.vscode/settings.json +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/LICENSE +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/README.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/conftest.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/docs/CONNECT_RPC.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/docs/DEVELOPING.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/docs/LEGACY_VERSION.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/docs/RELEASES.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/README.md +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/buf.gen.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/buf.lock +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/buf.yaml +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/generated/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/authorization/authorization.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entity/entity.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entityresolution/entity_resolution.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/logger/audit/test.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/actions/actions.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/registeredresources/registered_resources.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/resourcemapping/resource_mapping.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/subjectmapping/subject_mapping.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/proto-files/wellknownconfiguration/wellknown_configuration.proto +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/scripts/build_connect_proto.sh +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/scripts/setup_connect_rpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.pyi +0 -0
- {otdf_python-0.4.4/otdf-python-proto/tests → otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/authorization/v2}/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/common/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.pyi +0 -0
- /otdf_python-0.4.4/tests/integration/test_data/empty_file.txt → /otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/authorization_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/authorization_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/common_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/entity_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/entity_resolution_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/entity_resolution_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/kas_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/test_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/actions_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/key_management_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/objects_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/registered_resources_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/resource_mapping_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/selectors_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/subject_mapping_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/unsafe_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/wellknown_configuration_pb2_grpc.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.pyi +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/__main__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/address_normalizer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/aesgcm.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/assertion_config.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/asym_crypto.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/auth_headers.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/autoconfigure_utils.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/cli.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/collection_store.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/collection_store_impl.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/config.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/connect_client.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/constants.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/crypto_utils.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/dpop.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/ecc_constants.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/ecc_mode.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/ecdh.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/eckeypair.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/header.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/invalid_zip_exception.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/kas_allowlist.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/kas_client.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/kas_connect_rpc_client.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/kas_info.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/kas_key_cache.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/key_type.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/key_type_constants.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/manifest.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/nanotdf.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/nanotdf_ecdsa_struct.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/nanotdf_type.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/policy_binding_serializer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/policy_info.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/policy_object.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/policy_stub.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/resource_locator.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/sdk.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/sdk_builder.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/sdk_exceptions.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/symmetric_and_payload_config.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/tdf.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/tdf_reader.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/tdf_writer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/token_source.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/version.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/zip_reader.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/src/otdf_python/zip_writer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/__init__.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/config_pydantic.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/conftest.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_only/test_otdfctl_generated_fixtures.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_comparison.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_decrypt.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_inspect.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_nanotdf_cli_comparison.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_python_nanotdf_only.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_tdf_reader_integration.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/python_only/test_kas_client_integration.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/support_sdk.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_cli_integration.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_cli_tdf_validation.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_data/sample_binary.png +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_data/sample_text.txt +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_data/sample_with_attributes.txt +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/integration/test_pe_interaction.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/mock_crypto.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/server_logs.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/support_cli_args.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/support_common.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/support_otdfctl.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/support_otdfctl_args.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_address_normalizer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_aesgcm.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_assertion_config.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_asym_encryption.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_autoconfigure_utils.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_cli.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_collection_store.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_config.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_crypto_utils.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_ecdh.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_eckeypair.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_header.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_inner_classes.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_kas_allowlist.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_kas_client.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_kas_key_cache.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_kas_key_management.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_key_type.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_log_collection.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_manifest.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_manifest_format.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_nanotdf.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_nanotdf_ecdh.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_nanotdf_ecdsa_struct.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_nanotdf_integration.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_nanotdf_type.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_policy_object.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_sdk.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_sdk_builder.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_sdk_exceptions.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_sdk_mock.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_sdk_tdf_integration.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_tdf.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_tdf_key_management.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_tdf_reader.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_tdf_writer.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_token_source.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_url_normalization.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_use_plaintext_flow.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_validate_otdf_python.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_version.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_zip_reader.py +0 -0
- {otdf_python-0.4.4 → otdf_python-0.6.0}/tests/test_zip_writer.py +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.0](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.5.0...otdf-python-v0.6.0) (2026-05-21)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **main:** update to service v 0.12.0 ([#139](https://github.com/b-long/opentdf-python-sdk/issues/139)) ([125b12b](https://github.com/b-long/opentdf-python-sdk/commit/125b12b24aa89fceeca56e5878728ac329dd8659))
|
|
9
|
+
|
|
10
|
+
## [0.5.0](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.4.4...otdf-python-v0.5.0) (2026-05-08)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **main:** update proto GIT_TAG to service/v0.8.0 ([#137](https://github.com/b-long/opentdf-python-sdk/issues/137)) ([05ea9a4](https://github.com/b-long/opentdf-python-sdk/commit/05ea9a4c2dcf23d2a709e421802f45ddb89d2ace))
|
|
16
|
+
|
|
3
17
|
## [0.4.4](https://github.com/b-long/opentdf-python-sdk/compare/otdf-python-v0.4.3...otdf-python-v0.4.4) (2026-04-30)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -11,7 +11,6 @@ enum Decision {
|
|
|
11
11
|
DECISION_UNSPECIFIED = 0;
|
|
12
12
|
DECISION_DENY = 1;
|
|
13
13
|
DECISION_PERMIT = 2;
|
|
14
|
-
// DECISION_OBLIGATED = 3;
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
// The EntityIdentifier specifies the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.
|
|
@@ -21,11 +20,11 @@ message EntityIdentifier {
|
|
|
21
20
|
oneof identifier {
|
|
22
21
|
option (buf.validate.oneof).required = true;
|
|
23
22
|
|
|
24
|
-
// chain of one or more entities
|
|
23
|
+
// chain of one or more entities and at most 10
|
|
25
24
|
entity.EntityChain entity_chain = 1 [(buf.validate.field).cel = {
|
|
26
25
|
id: "entity_chain_required"
|
|
27
|
-
message: "entities must be provided"
|
|
28
|
-
expression: "has(this.entities) && this.entities.size() > 0"
|
|
26
|
+
message: "entities must be provided and between 1 and 10 in count"
|
|
27
|
+
expression: "has(this.entities) && this.entities.size() > 0 && this.entities.size() <= 10"
|
|
29
28
|
}];
|
|
30
29
|
|
|
31
30
|
// fully qualified name of the registered resource value stored in platform policy, where in
|
|
@@ -41,6 +40,13 @@ message EntityIdentifier {
|
|
|
41
40
|
message: "token must be provided"
|
|
42
41
|
expression: "has(this.jwt) && this.jwt.size() > 0"
|
|
43
42
|
}];
|
|
43
|
+
|
|
44
|
+
// derive the entity from the request's authorization access token JWT, rather than passing in the body
|
|
45
|
+
google.protobuf.BoolValue with_request_token = 4 [(buf.validate.field).cel = {
|
|
46
|
+
id: "with_request_token_must_be_true"
|
|
47
|
+
message: "with_request_token must be true when set"
|
|
48
|
+
expression: "this == true"
|
|
49
|
+
}];
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
52
|
|
|
@@ -65,11 +71,13 @@ message Resource {
|
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
oneof resource {
|
|
74
|
+
// a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
|
|
68
75
|
AttributeValues attribute_values = 2 [(buf.validate.field).cel = {
|
|
69
76
|
id: "attribute_values_required"
|
|
70
|
-
message: "if provided, resource.attribute_values must
|
|
71
|
-
expression: "this.fqns.size() > 0 && this.fqns.all(item, item.isUri())"
|
|
77
|
+
message: "if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs"
|
|
78
|
+
expression: "this.fqns.size() > 0 && this.fqns.size() <= 20 && this.fqns.all(item, item.isUri())"
|
|
72
79
|
}];
|
|
80
|
+
// fully qualified name of the registered resource value stored in platform policy
|
|
73
81
|
string registered_resource_value_fqn = 3 [(buf.validate.field).string = {
|
|
74
82
|
min_len: 1
|
|
75
83
|
uri: true
|
|
@@ -82,12 +90,17 @@ message ResourceDecision {
|
|
|
82
90
|
string ephemeral_resource_id = 1;
|
|
83
91
|
// decision result
|
|
84
92
|
Decision decision = 2;
|
|
93
|
+
// obligations (fully qualified values) the PEP is required to fulfill on the given resource
|
|
94
|
+
// i.e. https://<namespace>/obl/<definition name>/value/<value>
|
|
95
|
+
repeated string required_obligations = 3;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
// Can the identified entity/entities access?
|
|
88
99
|
// 1. one entity reference (actor)
|
|
89
100
|
// 2. one action
|
|
90
101
|
// 3. one resource
|
|
102
|
+
//
|
|
103
|
+
// If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
|
|
91
104
|
message GetDecisionRequest {
|
|
92
105
|
// an entity must be identified for authorization decisioning
|
|
93
106
|
EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true];
|
|
@@ -95,6 +108,14 @@ message GetDecisionRequest {
|
|
|
95
108
|
policy.Action action = 2 [(buf.validate.field).required = true];
|
|
96
109
|
Resource resource = 3 [(buf.validate.field).required = true];
|
|
97
110
|
|
|
111
|
+
// obligations (fully qualified values) the requester is capable of fulfilling
|
|
112
|
+
// i.e. https://<namespace>/obl/<definition name>/value/<value>
|
|
113
|
+
repeated string fulfillable_obligation_fqns = 4 [(buf.validate.field).cel = {
|
|
114
|
+
id: "obligation_value_fqns_valid"
|
|
115
|
+
message: "if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs"
|
|
116
|
+
expression: "this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))"
|
|
117
|
+
}];
|
|
118
|
+
|
|
98
119
|
option (buf.validate.message).cel = {
|
|
99
120
|
id: "get_decision_request.action_name_required"
|
|
100
121
|
message: "action.name must be provided"
|
|
@@ -104,24 +125,33 @@ message GetDecisionRequest {
|
|
|
104
125
|
message GetDecisionResponse {
|
|
105
126
|
// decision on the resource
|
|
106
127
|
ResourceDecision decision = 1;
|
|
107
|
-
// optional list of obligations represented in URI format
|
|
108
|
-
// repeated string obligations = 2;
|
|
109
128
|
}
|
|
110
129
|
|
|
111
130
|
// Can the identified entity/entities access?
|
|
112
131
|
// 1. one entity reference (actor)
|
|
113
132
|
// 2. one action
|
|
114
133
|
// 3. multiple resources
|
|
115
|
-
//
|
|
134
|
+
//
|
|
135
|
+
// If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
|
|
136
|
+
//
|
|
137
|
+
// Note: this is a more performant bulk request for multiple resource decisions, up to 1000 per request
|
|
116
138
|
message GetDecisionMultiResourceRequest {
|
|
117
139
|
// an entity must be identified for authorization decisioning
|
|
118
140
|
EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true];
|
|
119
141
|
// name on action is required
|
|
120
142
|
policy.Action action = 2 [(buf.validate.field).required = true];
|
|
121
|
-
repeated Resource resources = 3 [
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
];
|
|
143
|
+
repeated Resource resources = 3 [(buf.validate.field).repeated = {
|
|
144
|
+
min_items: 1
|
|
145
|
+
max_items: 1000
|
|
146
|
+
}];
|
|
147
|
+
|
|
148
|
+
// obligations (fully qualified values) the requester is capable of fulfilling
|
|
149
|
+
// i.e. https://<namespace>/obl/<definition name>/value/<value>
|
|
150
|
+
repeated string fulfillable_obligation_fqns = 4 [(buf.validate.field).cel = {
|
|
151
|
+
id: "obligation_value_fqns_valid"
|
|
152
|
+
message: "if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs"
|
|
153
|
+
expression: "this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))"
|
|
154
|
+
}];
|
|
125
155
|
|
|
126
156
|
option (buf.validate.message).cel = {
|
|
127
157
|
id: "get_decision_multi_request.action_name_required"
|
|
@@ -141,7 +171,10 @@ message GetDecisionMultiResourceResponse {
|
|
|
141
171
|
// This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on
|
|
142
172
|
// multiple resources)
|
|
143
173
|
message GetDecisionBulkRequest {
|
|
144
|
-
repeated GetDecisionMultiResourceRequest decision_requests = 1
|
|
174
|
+
repeated GetDecisionMultiResourceRequest decision_requests = 1 [(buf.validate.field).repeated = {
|
|
175
|
+
min_items: 1
|
|
176
|
+
max_items: 200
|
|
177
|
+
}];
|
|
145
178
|
}
|
|
146
179
|
message GetDecisionBulkResponse {
|
|
147
180
|
repeated GetDecisionMultiResourceResponse decision_responses = 1;
|
|
@@ -3,6 +3,30 @@ syntax = "proto3";
|
|
|
3
3
|
package common;
|
|
4
4
|
|
|
5
5
|
import "google/protobuf/timestamp.proto";
|
|
6
|
+
import "buf/validate/validate.proto";
|
|
7
|
+
|
|
8
|
+
message IdNameIdentifier {
|
|
9
|
+
option (buf.validate.message).oneof = { fields: ["id", "name"], required: true };
|
|
10
|
+
string id = 1 [(buf.validate.field).string.uuid = true];
|
|
11
|
+
string name = 2 [
|
|
12
|
+
(buf.validate.field).string.min_len = 1,
|
|
13
|
+
(buf.validate.field).string.max_len = 253,
|
|
14
|
+
(buf.validate.field).cel = {
|
|
15
|
+
id: "name_format"
|
|
16
|
+
message: "Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case."
|
|
17
|
+
expression: "this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')"
|
|
18
|
+
}
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
message IdFqnIdentifier {
|
|
23
|
+
option (buf.validate.message).oneof = { fields: ["id", "fqn"], required: true };
|
|
24
|
+
string id = 1 [(buf.validate.field).string.uuid = true];
|
|
25
|
+
string fqn = 2 [(buf.validate.field).string = {
|
|
26
|
+
min_len: 1
|
|
27
|
+
uri: true
|
|
28
|
+
}];
|
|
29
|
+
}
|
|
6
30
|
|
|
7
31
|
// Struct to uniquely identify a resource with optional additional metadata
|
|
8
32
|
message Metadata {
|
|
@@ -6,11 +6,20 @@ import "buf/validate/validate.proto";
|
|
|
6
6
|
import "entity/entity.proto";
|
|
7
7
|
import "google/protobuf/any.proto";
|
|
8
8
|
import "google/protobuf/struct.proto";
|
|
9
|
+
import "authorization/v2/authorization.proto";
|
|
10
|
+
|
|
11
|
+
// Entity Entitlements that do not require subject mappings (experimental)
|
|
12
|
+
message DirectEntitlement {
|
|
13
|
+
string attribute_value_fqn = 1;
|
|
14
|
+
repeated string actions = 2;
|
|
15
|
+
}
|
|
9
16
|
|
|
10
17
|
message EntityRepresentation {
|
|
11
18
|
// ephemeral entity id from the request
|
|
12
19
|
string original_id = 1;
|
|
13
20
|
repeated google.protobuf.Struct additional_props = 2;
|
|
21
|
+
// direct entitlements applied to Entity (experimental)
|
|
22
|
+
repeated DirectEntitlement direct_entitlements = 3;
|
|
14
23
|
}
|
|
15
24
|
|
|
16
25
|
// Resolve a set of entities to their representations.
|
|
@@ -34,6 +43,8 @@ message EntityNotFoundError {
|
|
|
34
43
|
// Create an entity chain for each token (JWT) in the request.
|
|
35
44
|
message CreateEntityChainsFromTokensRequest {
|
|
36
45
|
repeated entity.Token tokens = 1;
|
|
46
|
+
// resources to consider for direct entitlements (experimental)
|
|
47
|
+
repeated authorization.v2.Resource resources = 2;
|
|
37
48
|
}
|
|
38
49
|
|
|
39
50
|
message CreateEntityChainsFromTokensResponse {
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package kas;
|
|
4
|
+
|
|
5
|
+
import "google/api/annotations.proto";
|
|
6
|
+
import "google/protobuf/struct.proto";
|
|
7
|
+
import "google/protobuf/wrappers.proto";
|
|
8
|
+
import "protoc-gen-openapiv2/options/annotations.proto";
|
|
9
|
+
|
|
10
|
+
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
|
|
11
|
+
info: {
|
|
12
|
+
title: "OpenTDF Key Access Service";
|
|
13
|
+
version: "1.5.0";
|
|
14
|
+
license: {
|
|
15
|
+
name: "BSD 3-Clause Clear";
|
|
16
|
+
url: "https://github.com/opentdf/backend/blob/master/LICENSE";
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
message InfoRequest {
|
|
22
|
+
// Intentionally empty. May include features later.
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Service application level metadata
|
|
26
|
+
message InfoResponse {
|
|
27
|
+
string version = 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
message LegacyPublicKeyRequest {
|
|
31
|
+
string algorithm = 1;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Policy binding ensures cryptographic integrity between policy and wrapped key
|
|
35
|
+
// Prevents policy tampering by binding the policy hash to the encrypted key
|
|
36
|
+
message PolicyBinding {
|
|
37
|
+
// Cryptographic hashing algorithm used for policy binding
|
|
38
|
+
// Optional: ZTDF (when policy_binding is an object)
|
|
39
|
+
// Value: Always "HS256" (HMAC-SHA256) - other algorithms not supported
|
|
40
|
+
// Example: "HS256"
|
|
41
|
+
string algorithm = 1 [json_name = "alg"];
|
|
42
|
+
|
|
43
|
+
// HMAC-SHA256 hash of the base64-encoded policy using the DEK as the secret key
|
|
44
|
+
// 4.2.2 TDFs are hex and base64 encoded before HMAC computation
|
|
45
|
+
// Required: ZTDF (when policy_binding is an object)
|
|
46
|
+
// Links the policy content to the wrapped DEK cryptographically via HMAC
|
|
47
|
+
// Computed as HMAC-SHA256(DEK, base64_policy) then hex-encoded and base64-encoded
|
|
48
|
+
string hash = 2;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Key Access Object containing cryptographic material and metadata for TDF decryption
|
|
52
|
+
message KeyAccess {
|
|
53
|
+
// Base64-encoded encrypted metadata containing additional key information
|
|
54
|
+
// Optional: Not used during KAS rewrap operations (client-side only)
|
|
55
|
+
// KAS service passes this through without processing or validation
|
|
56
|
+
string encrypted_metadata = 1;
|
|
57
|
+
|
|
58
|
+
// Policy binding ensuring cryptographic integrity between policy and wrapped key
|
|
59
|
+
// Required: ZTDF (contains hash and algorithm)
|
|
60
|
+
// Links the policy to the wrapped key cryptographically
|
|
61
|
+
PolicyBinding policy_binding = 2;
|
|
62
|
+
|
|
63
|
+
// Protocol identifier for the key access mechanism
|
|
64
|
+
// Optional: Defaults to 'kas'
|
|
65
|
+
// Typically: 'kas' for standard Key Access Service protocol
|
|
66
|
+
// Example: "kas"
|
|
67
|
+
string protocol = 3;
|
|
68
|
+
|
|
69
|
+
// Type of key wrapping used for the data encryption key
|
|
70
|
+
// Required: Always
|
|
71
|
+
// Values: 'wrapped' (RSA-wrapped for ZTDF), 'ec-wrapped' (experimental ECDH-wrapped)
|
|
72
|
+
string key_type = 4 [json_name = "type"];
|
|
73
|
+
|
|
74
|
+
// URL of the Key Access Server that can unwrap this key
|
|
75
|
+
// Optional: May be omitted if KAS URL is known from context
|
|
76
|
+
// Used to route rewrap requests to the correct KAS instance
|
|
77
|
+
// Example: "https://kas.example.com"
|
|
78
|
+
string kas_url = 5 [json_name = "url"];
|
|
79
|
+
|
|
80
|
+
// Key identifier for the KAS public key used for wrapping
|
|
81
|
+
// Optional: ZTDF (may specify which KAS key to use, required if present in the TDF)
|
|
82
|
+
// References a specific public key in the KAS key storage (either local keyring or KAS Registry service)
|
|
83
|
+
// Example: "k1", "ec-key-2024"
|
|
84
|
+
string kid = 6;
|
|
85
|
+
|
|
86
|
+
// Split identifier for key splitting scenarios
|
|
87
|
+
// Optional: ZTDF (used in advanced key splitting configurations)
|
|
88
|
+
// Used when keys are split across multiple parties for enhanced security
|
|
89
|
+
string split_id = 7 [json_name = "sid"];
|
|
90
|
+
|
|
91
|
+
// Client-generated data encryption key wrapped by KAS
|
|
92
|
+
// Required: Always
|
|
93
|
+
// Contains the actual DEK encrypted with KAS's public key
|
|
94
|
+
// This is the core cryptographic material needed for TDF decryption
|
|
95
|
+
bytes wrapped_key = 8;
|
|
96
|
+
|
|
97
|
+
// Complete header containing all metadata and policy information (for formats that embed it)
|
|
98
|
+
// Optional: Not used by ZTDF (policy and metadata are separate)
|
|
99
|
+
// Contains magic bytes, version, algorithm, policy, and ephemeral key information
|
|
100
|
+
bytes header = 9;
|
|
101
|
+
|
|
102
|
+
// Ephemeral public key for ECDH key derivation (ec-wrapped type only)
|
|
103
|
+
// Required: When key_type="ec-wrapped" (experimental ECDH-based ZTDF)
|
|
104
|
+
// Omitted: When key_type="wrapped" (RSA-based ZTDF)
|
|
105
|
+
// Should be a PEM-encoded PKCS#8 (ASN.1) formatted public key
|
|
106
|
+
// Used to derive the symmetric key for unwrapping the DEK
|
|
107
|
+
string ephemeral_public_key = 10;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Bulk-style Rewrap request structure that is serialized into JSON and signed
|
|
111
|
+
// within a Rewrap flow. This message represents the unsigned payload that gets
|
|
112
|
+
// embedded in a JWT as the 'requestBody' claim and signed with a DPoP key.
|
|
113
|
+
message UnsignedRewrapRequest {
|
|
114
|
+
// Policy metadata and content for a group of KeyAccessObjects
|
|
115
|
+
message WithPolicy {
|
|
116
|
+
// An identifier unique within the scope of the rewrap request
|
|
117
|
+
// Used for mapping between request and response items.
|
|
118
|
+
// Required: Always
|
|
119
|
+
// Example: "policy", "policy-0", "policy-1"
|
|
120
|
+
string id = 1;
|
|
121
|
+
|
|
122
|
+
// Policy content - format varies by TDF type:
|
|
123
|
+
// ZTDF: Base64-encoded JSON policy object containing attributes and other policy data
|
|
124
|
+
// Required: ZTDF (base64-encoded policy JSON)
|
|
125
|
+
string body = 2;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Key Access Object wrapper with identifier
|
|
129
|
+
message WithKeyAccessObject {
|
|
130
|
+
// Ephemeral, unique identifier for this KAO within the request
|
|
131
|
+
// Required: Always
|
|
132
|
+
// Example: "kao-0", "kao-1", "key-access-object-uuid"
|
|
133
|
+
string key_access_object_id = 1;
|
|
134
|
+
|
|
135
|
+
// The actual Key Access Object containing cryptographic material and metadata
|
|
136
|
+
// Required: Always
|
|
137
|
+
KeyAccess key_access_object = 2;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Request grouping policy with associated key access objects
|
|
141
|
+
message WithPolicyRequest {
|
|
142
|
+
// List of Key Access Objects associated with this policy
|
|
143
|
+
// Required: Always (at least one)
|
|
144
|
+
// Some formats require exactly one KAO per policy
|
|
145
|
+
repeated WithKeyAccessObject key_access_objects = 1;
|
|
146
|
+
|
|
147
|
+
// Policy information for this group of KAOs
|
|
148
|
+
// Required: Always
|
|
149
|
+
WithPolicy policy = 2;
|
|
150
|
+
|
|
151
|
+
// Cryptographic algorithm identifier for the TDF type
|
|
152
|
+
// Optional: Defaults to rsa:2048 if omitted
|
|
153
|
+
// Values: "ec:secp256r1" (EC-based), "rsa:2048" (RSA-based), "" (defaults to rsa:2048)
|
|
154
|
+
// Example: "ec:secp256r1"
|
|
155
|
+
string algorithm = 3;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Client's public key in PEM format for establishing a session key
|
|
159
|
+
// Required: Always
|
|
160
|
+
// Used by KAS to generate an ephemeral session key for secure key exchange
|
|
161
|
+
string client_public_key = 1;
|
|
162
|
+
|
|
163
|
+
// List of policy requests to be processed
|
|
164
|
+
// Required: Always (at least one)
|
|
165
|
+
// Each request represents a policy with its associated key access objects
|
|
166
|
+
repeated WithPolicyRequest requests = 2;
|
|
167
|
+
|
|
168
|
+
// Deprecated: Legacy single Key Access Object
|
|
169
|
+
// Used for legacy non-bulk requests (v1 API)
|
|
170
|
+
// Modern clients should use the 'requests' field instead
|
|
171
|
+
KeyAccess key_access = 3 [deprecated = true];
|
|
172
|
+
|
|
173
|
+
// Deprecated: Legacy single policy
|
|
174
|
+
// Used for legacy non-bulk requests (v1 API)
|
|
175
|
+
// Modern clients should use the 'requests' field instead
|
|
176
|
+
string policy = 4 [deprecated = true];
|
|
177
|
+
|
|
178
|
+
// Deprecated: Legacy algorithm specification
|
|
179
|
+
// Used for legacy non-bulk requests (v1 API)
|
|
180
|
+
// Modern clients should use the 'requests' field instead
|
|
181
|
+
string algorithm = 5 [deprecated = true];
|
|
182
|
+
}
|
|
183
|
+
message PublicKeyRequest {
|
|
184
|
+
string algorithm = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "algorithm type rsa:<keysize> or ec:<curvename>"}];
|
|
185
|
+
string fmt = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "response format"}];
|
|
186
|
+
string v = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "request version"}];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
message PublicKeyResponse {
|
|
190
|
+
string public_key = 1;
|
|
191
|
+
string kid = 2;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Request to rewrap (decrypt and re-encrypt) TDF keys for client access
|
|
195
|
+
message RewrapRequest {
|
|
196
|
+
reserved 2;
|
|
197
|
+
reserved "bearer";
|
|
198
|
+
|
|
199
|
+
// A JWT signed by the DPoP (Demonstration of Proof of Possession) private key
|
|
200
|
+
// Required: Always
|
|
201
|
+
// Version differences:
|
|
202
|
+
// - v1 (legacy): Uses existing TDF spec schema in requestBody
|
|
203
|
+
// - v2 (bulk): Uses UnsignedRewrapRequest proto serialized as JSON in requestBody
|
|
204
|
+
string signed_request_token = 1;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
// Result of a key access object rewrap operation
|
|
209
|
+
message KeyAccessRewrapResult {
|
|
210
|
+
// Metadata associated with this KAO result (e.g., required obligations)
|
|
211
|
+
// Optional: May contain obligation requirements or other policy metadata
|
|
212
|
+
// Common keys: "X-Required-Obligations" with array of obligation FQNs
|
|
213
|
+
map<string, google.protobuf.Value> metadata = 1;
|
|
214
|
+
|
|
215
|
+
// Identifier matching the key_access_object_id from the request
|
|
216
|
+
// Required: Always matches the ID from UnsignedRewrapRequest_WithKeyAccessObject
|
|
217
|
+
string key_access_object_id = 2;
|
|
218
|
+
|
|
219
|
+
// Status of the rewrap operation for this KAO
|
|
220
|
+
// Required: Always
|
|
221
|
+
// Values: "permit" (success), "fail" (failure)
|
|
222
|
+
string status = 3;
|
|
223
|
+
|
|
224
|
+
// Result of the rewrap operation - either success or error
|
|
225
|
+
oneof result {
|
|
226
|
+
// Successfully rewrapped key encrypted with the session key
|
|
227
|
+
// Present when status="permit"
|
|
228
|
+
// Contains the DEK encrypted with the ephemeral session key
|
|
229
|
+
bytes kas_wrapped_key = 4;
|
|
230
|
+
|
|
231
|
+
// Error message when rewrap failed
|
|
232
|
+
// Present when status="fail"
|
|
233
|
+
// Human-readable description of the failure reason
|
|
234
|
+
string error = 5;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Result for all KAOs associated with a single policy
|
|
239
|
+
message PolicyRewrapResult {
|
|
240
|
+
// Policy identifier matching the policy.id from the request
|
|
241
|
+
// Required: Always matches the ID from UnsignedRewrapRequest_WithPolicy
|
|
242
|
+
string policy_id = 1;
|
|
243
|
+
|
|
244
|
+
// Results for each KAO under this policy
|
|
245
|
+
// Required: One result per KAO in the original request
|
|
246
|
+
repeated KeyAccessRewrapResult results = 2;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Response containing rewrapped keys and session information
|
|
250
|
+
message RewrapResponse {
|
|
251
|
+
// Deprecated: Legacy metadata field
|
|
252
|
+
// Modern responses use metadata in individual KeyAccessRewrapResult
|
|
253
|
+
map<string, google.protobuf.Value> metadata = 1 [deprecated = true];
|
|
254
|
+
|
|
255
|
+
// Deprecated: Legacy single entity wrapped key
|
|
256
|
+
// Modern responses use kas_wrapped_key in KeyAccessRewrapResult
|
|
257
|
+
bytes entity_wrapped_key = 2 [deprecated = true];
|
|
258
|
+
|
|
259
|
+
// KAS's ephemeral session public key in PEM format
|
|
260
|
+
// Required: For EC-based operations (key_type="ec-wrapped")
|
|
261
|
+
// Optional: Empty for RSA-based ZTDF (key_type="wrapped")
|
|
262
|
+
// Used by client to perform ECDH key agreement and decrypt the kas_wrapped_key values
|
|
263
|
+
string session_public_key = 3;
|
|
264
|
+
|
|
265
|
+
// Deprecated: Legacy schema version identifier
|
|
266
|
+
// Modern responses use implicit versioning
|
|
267
|
+
string schema_version = 4 [deprecated = true];
|
|
268
|
+
|
|
269
|
+
// Policy-grouped rewrap results for the bulk API
|
|
270
|
+
// Required: Modern v2 API responses
|
|
271
|
+
// Each PolicyRewrapResult contains results for all KAOs under that policy
|
|
272
|
+
repeated PolicyRewrapResult responses = 5;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Get app info from the root path
|
|
276
|
+
service AccessService {
|
|
277
|
+
rpc PublicKey(PublicKeyRequest) returns (PublicKeyResponse) {
|
|
278
|
+
option (google.api.http) = {get: "/kas/v2/kas_public_key"};
|
|
279
|
+
|
|
280
|
+
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
|
281
|
+
responses: {key: "200"}
|
|
282
|
+
};
|
|
283
|
+
option idempotency_level = NO_SIDE_EFFECTS;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Endpoint intended for gRPC Gateway's REST endpoint to provide v1 compatibility with older TDF clients
|
|
287
|
+
//
|
|
288
|
+
// This endpoint is not recommended for use in new applications, prefer the v2 endpoint ('PublicKey') instead.
|
|
289
|
+
//
|
|
290
|
+
// buf:lint:ignore RPC_RESPONSE_STANDARD_NAME
|
|
291
|
+
rpc LegacyPublicKey(LegacyPublicKeyRequest) returns (google.protobuf.StringValue) {
|
|
292
|
+
option (google.api.http) = {get: "/kas/kas_public_key"};
|
|
293
|
+
|
|
294
|
+
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
|
295
|
+
responses: {key: "200"}
|
|
296
|
+
};
|
|
297
|
+
option idempotency_level = NO_SIDE_EFFECTS;
|
|
298
|
+
option deprecated = true;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
rpc Rewrap(RewrapRequest) returns (RewrapResponse) {
|
|
302
|
+
option (google.api.http) = {
|
|
303
|
+
post: "/kas/v2/rewrap"
|
|
304
|
+
body: "*";
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
|
308
|
+
responses: {key: "200"}
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
@@ -5,6 +5,7 @@ package policy.attributes;
|
|
|
5
5
|
import "buf/validate/validate.proto";
|
|
6
6
|
import "common/common.proto";
|
|
7
7
|
import "google/api/annotations.proto";
|
|
8
|
+
import "google/protobuf/wrappers.proto";
|
|
8
9
|
import "policy/objects.proto";
|
|
9
10
|
import "policy/selectors.proto";
|
|
10
11
|
|
|
@@ -93,7 +94,7 @@ message GetAttributeRequest {
|
|
|
93
94
|
message: "Either id or one of attribute_id or fqn must be set"
|
|
94
95
|
};
|
|
95
96
|
|
|
96
|
-
// Deprecated
|
|
97
|
+
// Deprecated: utilize identifier
|
|
97
98
|
string id = 1 [
|
|
98
99
|
deprecated = true,
|
|
99
100
|
(buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
|
|
@@ -145,6 +146,14 @@ message CreateAttributeRequest {
|
|
|
145
146
|
}
|
|
146
147
|
}];
|
|
147
148
|
|
|
149
|
+
// Optional
|
|
150
|
+
// Setting allow_traversal=true allows TDF creation to be front-loaded, meaning a customer
|
|
151
|
+
// can create encrypted content with an attribute definitions key mapping before
|
|
152
|
+
// creating the attribute values needed to decrypt.
|
|
153
|
+
// Content will be able to be encrypted with missing attribute values,
|
|
154
|
+
// but will not be able to be decrypted until such attribute values exist.
|
|
155
|
+
google.protobuf.BoolValue allow_traversal = 5;
|
|
156
|
+
|
|
148
157
|
// Optional
|
|
149
158
|
common.MetadataMutable metadata = 100;
|
|
150
159
|
}
|
|
@@ -189,7 +198,7 @@ message GetAttributeValueRequest {
|
|
|
189
198
|
message: "Either id or one of value_id or fqn must be set"
|
|
190
199
|
};
|
|
191
200
|
|
|
192
|
-
// Deprecated
|
|
201
|
+
// Deprecated: utilize identifier
|
|
193
202
|
string id = 1 [
|
|
194
203
|
deprecated = true,
|
|
195
204
|
(buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
|
|
@@ -284,9 +293,8 @@ message GetAttributeValuesByFqnsRequest {
|
|
|
284
293
|
max_items: 250
|
|
285
294
|
}];
|
|
286
295
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
policy.AttributeValueSelector with_value = 2;
|
|
296
|
+
reserved 2;
|
|
297
|
+
reserved "with_value";
|
|
290
298
|
}
|
|
291
299
|
message GetAttributeValuesByFqnsResponse {
|
|
292
300
|
message AttributeAndValue {
|
|
@@ -301,6 +309,7 @@ message GetAttributeValuesByFqnsResponse {
|
|
|
301
309
|
Assign Key Access Server (KAS Grant) to Attribute and Value
|
|
302
310
|
*/
|
|
303
311
|
|
|
312
|
+
// Deprecated: utilize AssignPublicKeyToAttributeRequest
|
|
304
313
|
message AssignKeyAccessServerToAttributeRequest {
|
|
305
314
|
option deprecated = true;
|
|
306
315
|
|
|
@@ -313,6 +322,7 @@ message AssignKeyAccessServerToAttributeResponse {
|
|
|
313
322
|
AttributeKeyAccessServer attribute_key_access_server = 1;
|
|
314
323
|
}
|
|
315
324
|
|
|
325
|
+
// Deprecated: utilize RemovePublicKeyFromAttributeRequest
|
|
316
326
|
message RemoveKeyAccessServerFromAttributeRequest {
|
|
317
327
|
option deprecated = true;
|
|
318
328
|
// Required
|
|
@@ -324,6 +334,7 @@ message RemoveKeyAccessServerFromAttributeResponse {
|
|
|
324
334
|
AttributeKeyAccessServer attribute_key_access_server = 1;
|
|
325
335
|
}
|
|
326
336
|
|
|
337
|
+
// Deprecated: utilize AssignPublicKeyToValueRequest
|
|
327
338
|
message AssignKeyAccessServerToValueRequest {
|
|
328
339
|
option deprecated = true;
|
|
329
340
|
// Required
|
|
@@ -335,6 +346,7 @@ message AssignKeyAccessServerToValueResponse {
|
|
|
335
346
|
ValueKeyAccessServer value_key_access_server = 1;
|
|
336
347
|
}
|
|
337
348
|
|
|
349
|
+
// Deprecated: utilize RemovePublicKeyFromValueRequest
|
|
338
350
|
message RemoveKeyAccessServerFromValueRequest {
|
|
339
351
|
option deprecated = true;
|
|
340
352
|
// Required
|
|
@@ -434,18 +446,22 @@ service AttributesService {
|
|
|
434
446
|
/*--------------------------------------*
|
|
435
447
|
* Attribute <> Key Access Server RPCs
|
|
436
448
|
*---------------------------------------*/
|
|
449
|
+
// Deprecated: utilize AssignPublicKeyToAttribute
|
|
437
450
|
rpc AssignKeyAccessServerToAttribute(AssignKeyAccessServerToAttributeRequest) returns (AssignKeyAccessServerToAttributeResponse) {
|
|
438
451
|
option deprecated = true;
|
|
439
452
|
}
|
|
440
453
|
|
|
454
|
+
// Deprecated: utilize RemovePublicKeyFromAttribute
|
|
441
455
|
rpc RemoveKeyAccessServerFromAttribute(RemoveKeyAccessServerFromAttributeRequest) returns (RemoveKeyAccessServerFromAttributeResponse) {
|
|
442
456
|
option deprecated = true;
|
|
443
457
|
}
|
|
444
458
|
|
|
459
|
+
// Deprecated: utilize AssignPublicKeyToValue
|
|
445
460
|
rpc AssignKeyAccessServerToValue(AssignKeyAccessServerToValueRequest) returns (AssignKeyAccessServerToValueResponse) {
|
|
446
461
|
option deprecated = true;
|
|
447
462
|
}
|
|
448
463
|
|
|
464
|
+
// Deprecated: utilize RemovePublicKeyFromValue
|
|
449
465
|
rpc RemoveKeyAccessServerFromValue(RemoveKeyAccessServerFromValueRequest) returns (RemoveKeyAccessServerFromValueResponse) {
|
|
450
466
|
option deprecated = true;
|
|
451
467
|
}
|