otdf-python 0.5.0__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.
Files changed (310) hide show
  1. otdf_python-0.6.0/.release-please-manifest.json +3 -0
  2. {otdf_python-0.5.0 → otdf_python-0.6.0}/CHANGELOG.md +7 -0
  3. {otdf_python-0.5.0 → otdf_python-0.6.0}/PKG-INFO +1 -1
  4. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/authorization/v2/authorization.proto +39 -15
  5. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/common/common.proto +24 -0
  6. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entityresolution/v2/entity_resolution.proto +11 -0
  7. otdf_python-0.6.0/otdf-python-proto/proto-files/kas/kas.proto +311 -0
  8. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/attributes/attributes.proto +21 -5
  9. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/kasregistry/key_access_server_registry.proto +5 -0
  10. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/keymanagement/key_management.proto +8 -1
  11. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/namespaces/namespaces.proto +50 -0
  12. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/objects.proto +50 -10
  13. otdf_python-0.6.0/otdf-python-proto/proto-files/policy/obligations/obligations.proto +412 -0
  14. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/selectors.proto +4 -1
  15. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/unsafe/unsafe.proto +7 -0
  16. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/pyproject.toml +2 -2
  17. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/scripts/generate_connect_proto.py +14 -10
  18. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +113 -0
  19. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.pyi +16 -8
  20. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +69 -0
  21. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/common/common_pb2.pyi +17 -0
  22. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +58 -0
  23. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.pyi +17 -4
  24. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/attributes_pb2_grpc.py +8 -3
  25. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/namespaces_pb2_grpc.py +91 -1
  26. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/obligations_pb2_grpc.py +43 -0
  27. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +235 -0
  28. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.pyi +7 -6
  29. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.py +46 -46
  30. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2.pyi +8 -4
  31. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +85 -0
  32. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.pyi +12 -6
  33. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py +130 -0
  34. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.py +42 -18
  35. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2.pyi +38 -0
  36. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +166 -0
  37. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.pyi +56 -16
  38. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_connect.py +69 -0
  39. otdf_python-0.6.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.py +197 -0
  40. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.pyi +65 -28
  41. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.py +44 -43
  42. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2.pyi +5 -2
  43. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/tests/test_generate_connect_proto.py +1 -1
  44. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/uv.lock +11 -11
  45. {otdf_python-0.5.0 → otdf_python-0.6.0}/pyproject.toml +1 -1
  46. {otdf_python-0.5.0 → otdf_python-0.6.0}/uv.lock +1 -1
  47. otdf_python-0.5.0/.release-please-manifest.json +0 -3
  48. otdf_python-0.5.0/otdf-python-proto/proto-files/kas/kas.proto +0 -160
  49. otdf_python-0.5.0/otdf-python-proto/proto-files/policy/obligations/obligations.proto +0 -260
  50. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2.py +0 -107
  51. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/common/common_pb2.py +0 -52
  52. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2.py +0 -55
  53. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2.py +0 -234
  54. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2.py +0 -79
  55. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/objects_pb2.py +0 -156
  56. otdf_python-0.5.0/otdf-python-proto/src/otdf_python_proto/policy/obligations/obligations_pb2.py +0 -110
  57. {otdf_python-0.5.0 → otdf_python-0.6.0}/.gemini/config.yaml +0 -0
  58. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/check_entitlements.sh +0 -0
  59. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/start_opentdf_docker.sh +0 -0
  60. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/workflows/build-python.yaml +0 -0
  61. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/workflows/platform-integration-test.yaml +0 -0
  62. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/workflows/release-please.yaml +0 -0
  63. {otdf_python-0.5.0 → otdf_python-0.6.0}/.github/workflows/test-suite.yaml +0 -0
  64. {otdf_python-0.5.0 → otdf_python-0.6.0}/.gitignore +0 -0
  65. {otdf_python-0.5.0 → otdf_python-0.6.0}/.pre-commit-config.yaml +0 -0
  66. {otdf_python-0.5.0 → otdf_python-0.6.0}/.release-please-config-develop.json +0 -0
  67. {otdf_python-0.5.0 → otdf_python-0.6.0}/.release-please-config.json +0 -0
  68. {otdf_python-0.5.0 → otdf_python-0.6.0}/.release-please-manifest-develop.json +0 -0
  69. {otdf_python-0.5.0 → otdf_python-0.6.0}/.vscode/extensions.json +0 -0
  70. {otdf_python-0.5.0 → otdf_python-0.6.0}/.vscode/settings.json +0 -0
  71. {otdf_python-0.5.0 → otdf_python-0.6.0}/LICENSE +0 -0
  72. {otdf_python-0.5.0 → otdf_python-0.6.0}/README.md +0 -0
  73. {otdf_python-0.5.0 → otdf_python-0.6.0}/conftest.py +0 -0
  74. {otdf_python-0.5.0 → otdf_python-0.6.0}/docs/CONNECT_RPC.md +0 -0
  75. {otdf_python-0.5.0 → otdf_python-0.6.0}/docs/DEVELOPING.md +0 -0
  76. {otdf_python-0.5.0 → otdf_python-0.6.0}/docs/LEGACY_VERSION.md +0 -0
  77. {otdf_python-0.5.0 → otdf_python-0.6.0}/docs/RELEASES.md +0 -0
  78. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/README.md +0 -0
  79. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/buf.gen.yaml +0 -0
  80. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/buf.lock +0 -0
  81. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/buf.yaml +0 -0
  82. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/generated/__init__.py +0 -0
  83. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/authorization/authorization.proto +0 -0
  84. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entity/entity.proto +0 -0
  85. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/entityresolution/entity_resolution.proto +0 -0
  86. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/logger/audit/test.proto +0 -0
  87. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/actions/actions.proto +0 -0
  88. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/registeredresources/registered_resources.proto +0 -0
  89. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/resourcemapping/resource_mapping.proto +0 -0
  90. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/policy/subjectmapping/subject_mapping.proto +0 -0
  91. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/proto-files/wellknownconfiguration/wellknown_configuration.proto +0 -0
  92. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/scripts/build_connect_proto.sh +0 -0
  93. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/scripts/setup_connect_rpc.py +0 -0
  94. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/__init__.py +0 -0
  95. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py +0 -0
  96. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py +0 -0
  97. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.py +0 -0
  98. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2.pyi +0 -0
  99. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/__init__.py +0 -0
  100. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py +0 -0
  101. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/common/__init__.py +0 -0
  102. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/__init__.py +0 -0
  103. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.py +0 -0
  104. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entity/entity_pb2.pyi +0 -0
  105. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py +0 -0
  106. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py +0 -0
  107. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.py +0 -0
  108. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2.pyi +0 -0
  109. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/__init__.py +0 -0
  110. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py +0 -0
  111. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/__init__.py +0 -0
  112. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py +0 -0
  113. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.py +0 -0
  114. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2.pyi +0 -0
  115. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/__init__.py +0 -0
  116. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/__init__.py +0 -0
  117. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/authorization_pb2_grpc.py +0 -0
  118. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/__init__.py +0 -0
  119. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/authorization/v2/authorization_pb2_grpc.py +0 -0
  120. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/__init__.py +0 -0
  121. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/common/common_pb2_grpc.py +0 -0
  122. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/__init__.py +0 -0
  123. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entity/entity_pb2_grpc.py +0 -0
  124. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/__init__.py +0 -0
  125. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/entity_resolution_pb2_grpc.py +0 -0
  126. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/__init__.py +0 -0
  127. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/entityresolution/v2/entity_resolution_pb2_grpc.py +0 -0
  128. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/__init__.py +0 -0
  129. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/kas/kas_pb2_grpc.py +0 -0
  130. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/__init__.py +0 -0
  131. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/__init__.py +0 -0
  132. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/logger/audit/test_pb2_grpc.py +0 -0
  133. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/__init__.py +0 -0
  134. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/__init__.py +0 -0
  135. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/actions/actions_pb2_grpc.py +0 -0
  136. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/attributes/__init__.py +0 -0
  137. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/__init__.py +0 -0
  138. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/kasregistry/key_access_server_registry_pb2_grpc.py +0 -0
  139. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/__init__.py +0 -0
  140. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/keymanagement/key_management_pb2_grpc.py +0 -0
  141. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/namespaces/__init__.py +0 -0
  142. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/objects_pb2_grpc.py +0 -0
  143. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/obligations/__init__.py +0 -0
  144. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/__init__.py +0 -0
  145. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/registeredresources/registered_resources_pb2_grpc.py +0 -0
  146. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/__init__.py +0 -0
  147. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/resourcemapping/resource_mapping_pb2_grpc.py +0 -0
  148. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/selectors_pb2_grpc.py +0 -0
  149. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/__init__.py +0 -0
  150. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/subjectmapping/subject_mapping_pb2_grpc.py +0 -0
  151. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/__init__.py +0 -0
  152. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/policy/unsafe/unsafe_pb2_grpc.py +0 -0
  153. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/__init__.py +0 -0
  154. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/legacy_grpc/wellknownconfiguration/wellknown_configuration_pb2_grpc.py +0 -0
  155. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/__init__.py +0 -0
  156. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/__init__.py +0 -0
  157. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.py +0 -0
  158. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/logger/audit/test_pb2.pyi +0 -0
  159. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/__init__.py +0 -0
  160. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py +0 -0
  161. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py +0 -0
  162. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.py +0 -0
  163. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2.pyi +0 -0
  164. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py +0 -0
  165. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py +0 -0
  166. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py +0 -0
  167. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py +0 -0
  168. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py +0 -0
  169. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py +0 -0
  170. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py +0 -0
  171. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/obligations/__init__.py +0 -0
  172. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py +0 -0
  173. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py +0 -0
  174. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.py +0 -0
  175. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2.pyi +0 -0
  176. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py +0 -0
  177. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py +0 -0
  178. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.py +0 -0
  179. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2.pyi +0 -0
  180. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.py +0 -0
  181. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/selectors_pb2.pyi +0 -0
  182. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py +0 -0
  183. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py +0 -0
  184. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.py +0 -0
  185. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2.pyi +0 -0
  186. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py +0 -0
  187. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py +0 -0
  188. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py +0 -0
  189. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py +0 -0
  190. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.py +0 -0
  191. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2.pyi +0 -0
  192. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/tests/__init__.py +0 -0
  193. {otdf_python-0.5.0 → otdf_python-0.6.0}/otdf-python-proto/tests/test_package_imports.py +0 -0
  194. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/__init__.py +0 -0
  195. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/__main__.py +0 -0
  196. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/address_normalizer.py +0 -0
  197. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/aesgcm.py +0 -0
  198. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/assertion_config.py +0 -0
  199. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/asym_crypto.py +0 -0
  200. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/auth_headers.py +0 -0
  201. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/autoconfigure_utils.py +0 -0
  202. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/cli.py +0 -0
  203. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/collection_store.py +0 -0
  204. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/collection_store_impl.py +0 -0
  205. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/config.py +0 -0
  206. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/connect_client.py +0 -0
  207. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/constants.py +0 -0
  208. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/crypto_utils.py +0 -0
  209. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/dpop.py +0 -0
  210. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/ecc_constants.py +0 -0
  211. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/ecc_mode.py +0 -0
  212. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/ecdh.py +0 -0
  213. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/eckeypair.py +0 -0
  214. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/header.py +0 -0
  215. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/invalid_zip_exception.py +0 -0
  216. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/kas_allowlist.py +0 -0
  217. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/kas_client.py +0 -0
  218. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/kas_connect_rpc_client.py +0 -0
  219. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/kas_info.py +0 -0
  220. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/kas_key_cache.py +0 -0
  221. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/key_type.py +0 -0
  222. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/key_type_constants.py +0 -0
  223. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/manifest.py +0 -0
  224. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/nanotdf.py +0 -0
  225. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/nanotdf_ecdsa_struct.py +0 -0
  226. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/nanotdf_type.py +0 -0
  227. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/policy_binding_serializer.py +0 -0
  228. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/policy_info.py +0 -0
  229. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/policy_object.py +0 -0
  230. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/policy_stub.py +0 -0
  231. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/resource_locator.py +0 -0
  232. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/sdk.py +0 -0
  233. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/sdk_builder.py +0 -0
  234. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/sdk_exceptions.py +0 -0
  235. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/symmetric_and_payload_config.py +0 -0
  236. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/tdf.py +0 -0
  237. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/tdf_reader.py +0 -0
  238. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/tdf_writer.py +0 -0
  239. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/token_source.py +0 -0
  240. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/version.py +0 -0
  241. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/zip_reader.py +0 -0
  242. {otdf_python-0.5.0 → otdf_python-0.6.0}/src/otdf_python/zip_writer.py +0 -0
  243. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/__init__.py +0 -0
  244. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/config_pydantic.py +0 -0
  245. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/conftest.py +0 -0
  246. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_only/test_otdfctl_generated_fixtures.py +0 -0
  247. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_comparison.py +0 -0
  248. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_decrypt.py +0 -0
  249. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_cli_inspect.py +0 -0
  250. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_nanotdf_cli_comparison.py +0 -0
  251. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_python_nanotdf_only.py +0 -0
  252. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/otdfctl_to_python/test_tdf_reader_integration.py +0 -0
  253. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/python_only/test_kas_client_integration.py +0 -0
  254. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/support_sdk.py +0 -0
  255. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_cli_integration.py +0 -0
  256. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_cli_tdf_validation.py +0 -0
  257. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_data/empty_file.txt +0 -0
  258. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_data/sample_binary.png +0 -0
  259. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_data/sample_text.txt +0 -0
  260. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_data/sample_with_attributes.txt +0 -0
  261. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/integration/test_pe_interaction.py +0 -0
  262. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/mock_crypto.py +0 -0
  263. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/server_logs.py +0 -0
  264. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/support_cli_args.py +0 -0
  265. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/support_common.py +0 -0
  266. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/support_otdfctl.py +0 -0
  267. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/support_otdfctl_args.py +0 -0
  268. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_address_normalizer.py +0 -0
  269. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_aesgcm.py +0 -0
  270. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_assertion_config.py +0 -0
  271. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_asym_encryption.py +0 -0
  272. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_autoconfigure_utils.py +0 -0
  273. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_cli.py +0 -0
  274. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_collection_store.py +0 -0
  275. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_config.py +0 -0
  276. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_crypto_utils.py +0 -0
  277. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_ecdh.py +0 -0
  278. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_eckeypair.py +0 -0
  279. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_header.py +0 -0
  280. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_inner_classes.py +0 -0
  281. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_kas_allowlist.py +0 -0
  282. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_kas_client.py +0 -0
  283. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_kas_key_cache.py +0 -0
  284. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_kas_key_management.py +0 -0
  285. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_key_type.py +0 -0
  286. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_log_collection.py +0 -0
  287. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_manifest.py +0 -0
  288. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_manifest_format.py +0 -0
  289. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_nanotdf.py +0 -0
  290. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_nanotdf_ecdh.py +0 -0
  291. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_nanotdf_ecdsa_struct.py +0 -0
  292. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_nanotdf_integration.py +0 -0
  293. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_nanotdf_type.py +0 -0
  294. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_policy_object.py +0 -0
  295. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_sdk.py +0 -0
  296. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_sdk_builder.py +0 -0
  297. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_sdk_exceptions.py +0 -0
  298. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_sdk_mock.py +0 -0
  299. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_sdk_tdf_integration.py +0 -0
  300. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_tdf.py +0 -0
  301. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_tdf_key_management.py +0 -0
  302. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_tdf_reader.py +0 -0
  303. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_tdf_writer.py +0 -0
  304. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_token_source.py +0 -0
  305. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_url_normalization.py +0 -0
  306. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_use_plaintext_flow.py +0 -0
  307. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_validate_otdf_python.py +0 -0
  308. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_version.py +0 -0
  309. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_zip_reader.py +0 -0
  310. {otdf_python-0.5.0 → otdf_python-0.6.0}/tests/test_zip_writer.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.6.0"
3
+ }
@@ -1,5 +1,12 @@
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
+
3
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)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: otdf-python
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Unofficial OpenTDF SDK for Python
5
5
  Project-URL: Homepage, https://github.com/b-long/opentdf-python-sdk
6
6
  Project-URL: Repository, https://github.com/b-long/opentdf-python-sdk
@@ -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.
@@ -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
 
@@ -84,12 +90,17 @@ message ResourceDecision {
84
90
  string ephemeral_resource_id = 1;
85
91
  // decision result
86
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;
87
96
  }
88
97
 
89
98
  // Can the identified entity/entities access?
90
99
  // 1. one entity reference (actor)
91
100
  // 2. one action
92
101
  // 3. one resource
102
+ //
103
+ // If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
93
104
  message GetDecisionRequest {
94
105
  // an entity must be identified for authorization decisioning
95
106
  EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true];
@@ -97,6 +108,14 @@ message GetDecisionRequest {
97
108
  policy.Action action = 2 [(buf.validate.field).required = true];
98
109
  Resource resource = 3 [(buf.validate.field).required = true];
99
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
+
100
119
  option (buf.validate.message).cel = {
101
120
  id: "get_decision_request.action_name_required"
102
121
  message: "action.name must be provided"
@@ -106,26 +125,33 @@ message GetDecisionRequest {
106
125
  message GetDecisionResponse {
107
126
  // decision on the resource
108
127
  ResourceDecision decision = 1;
109
- // optional list of obligations represented in URI format
110
- // repeated string obligations = 2;
111
128
  }
112
129
 
113
130
  // Can the identified entity/entities access?
114
131
  // 1. one entity reference (actor)
115
132
  // 2. one action
116
133
  // 3. multiple resources
134
+ //
135
+ // If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
136
+ //
117
137
  // Note: this is a more performant bulk request for multiple resource decisions, up to 1000 per request
118
138
  message GetDecisionMultiResourceRequest {
119
139
  // an entity must be identified for authorization decisioning
120
140
  EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true];
121
141
  // name on action is required
122
142
  policy.Action action = 2 [(buf.validate.field).required = true];
123
- repeated Resource resources = 3 [
124
- (buf.validate.field).repeated = {
125
- min_items: 1
126
- max_items: 1000
127
- }
128
- ];
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
+ }];
129
155
 
130
156
  option (buf.validate.message).cel = {
131
157
  id: "get_decision_multi_request.action_name_required"
@@ -145,12 +171,10 @@ message GetDecisionMultiResourceResponse {
145
171
  // This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on
146
172
  // multiple resources)
147
173
  message GetDecisionBulkRequest {
148
- repeated GetDecisionMultiResourceRequest decision_requests = 1 [
149
- (buf.validate.field).repeated = {
150
- min_items: 1
151
- max_items: 200
152
- }
153
- ];
174
+ repeated GetDecisionMultiResourceRequest decision_requests = 1 [(buf.validate.field).repeated = {
175
+ min_items: 1
176
+ max_items: 200
177
+ }];
154
178
  }
155
179
  message GetDecisionBulkResponse {
156
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
- // Optional
288
- // This attribute value selector is not used currently, but left here for future use.
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
  }
@@ -417,6 +417,8 @@ message CreateKeyRequest {
417
417
  PrivateKeyCtx private_key_ctx = 6; // Context or additional data specific to the private key, based on the key provider implementation
418
418
  // Optional
419
419
  string provider_config_id = 7; // Configuration ID for the key provider, if applicable
420
+ // Optional
421
+ bool legacy = 8; // Whether the key is a legacy key
420
422
  // Common metadata
421
423
  common.MetadataMutable metadata = 100; // Mutable metadata for the key
422
424
  }
@@ -457,6 +459,9 @@ message ListKeysRequest {
457
459
  }]; // Filter keys by the KAS URI
458
460
  }
459
461
 
462
+ // Optional
463
+ optional bool legacy = 8; // Filter for legacy keys
464
+
460
465
  // Optional
461
466
  policy.PageRequest pagination = 10; // Pagination request for the list of keys
462
467
  }
@@ -12,11 +12,14 @@ import "policy/selectors.proto";
12
12
  */
13
13
  message CreateProviderConfigRequest {
14
14
  // Required
15
- // The name of the key provider. (e.g. "AWS KMS", "Google Cloud KMS", "Azure Key Vault")
15
+ // The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")
16
16
  string name = 1 [(buf.validate.field).required = true];
17
17
  // Required
18
18
  // JSON configuration for the key provider. This is unique to individual key providers.
19
19
  bytes config_json = 2 [(buf.validate.field).required = true];
20
+ // Required
21
+ // The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")
22
+ string manager = 3 [(buf.validate.field).required = true];
20
23
 
21
24
  // Common metadata
22
25
  common.MetadataMutable metadata = 100;
@@ -32,6 +35,8 @@ message GetProviderConfigRequest {
32
35
  string id = 2 [(buf.validate.field).string.uuid = true];
33
36
  string name = 3 [(buf.validate.field).string.min_len = 1];
34
37
  }
38
+ // Optional - filter by manager type when searching by name
39
+ string manager = 4 [(buf.validate.field).required = false];
35
40
  }
36
41
  message GetProviderConfigResponse {
37
42
  KeyProviderConfig provider_config = 1;
@@ -54,6 +59,8 @@ message UpdateProviderConfigRequest {
54
59
  string name = 2 [(buf.validate.field).required = false];
55
60
  // Optional
56
61
  bytes config_json = 3 [(buf.validate.field).required = false];
62
+ // Optional
63
+ string manager = 4 [(buf.validate.field).required = false];
57
64
 
58
65
  // Optional
59
66
  // Common metadata