@oxdeai/conformance 1.3.1 → 2.0.0

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 (51) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE +213 -0
  3. package/README.md +217 -5
  4. package/dist/evidence-metadata.json +3489 -0
  5. package/dist/scripts/build-evidence-metadata.d.mts +1 -0
  6. package/dist/scripts/build-evidence-metadata.mjs +7 -0
  7. package/dist/scripts/build-evidence-metadata.mjs.map +1 -0
  8. package/dist/scripts/extract-vectors.js +228 -22
  9. package/dist/scripts/extract-vectors.js.map +1 -1
  10. package/dist/src/evidenceScope.d.mts +68 -0
  11. package/dist/src/evidenceScope.mjs +127 -0
  12. package/dist/src/evidenceScope.mjs.map +1 -0
  13. package/dist/src/fixtures/conformance-engine-secret.fixture.d.ts +5 -0
  14. package/dist/src/fixtures/conformance-engine-secret.fixture.js +7 -0
  15. package/dist/src/fixtures/conformance-engine-secret.fixture.js.map +1 -0
  16. package/dist/src/fixtures/ed25519.test-only.fixture.d.ts +1 -1
  17. package/dist/src/fixtures/ed25519.test-only.fixture.js +2 -1
  18. package/dist/src/fixtures/ed25519.test-only.fixture.js.map +1 -1
  19. package/dist/src/fixtures/krl-ed25519.test-only.fixture.d.ts +13 -0
  20. package/dist/src/fixtures/krl-ed25519.test-only.fixture.js +19 -0
  21. package/dist/src/fixtures/krl-ed25519.test-only.fixture.js.map +1 -0
  22. package/dist/src/trustedTimeConformance.d.ts +32 -0
  23. package/dist/src/trustedTimeConformance.js +484 -0
  24. package/dist/src/trustedTimeConformance.js.map +1 -0
  25. package/dist/src/validate-trusted-time.d.ts +1 -0
  26. package/dist/src/validate-trusted-time.js +14 -0
  27. package/dist/src/validate-trusted-time.js.map +1 -0
  28. package/dist/src/validate.d.ts +1 -0
  29. package/dist/src/validate.js +723 -31
  30. package/dist/src/validate.js.map +1 -1
  31. package/package.json +38 -8
  32. package/vectors/audit-chain.json +2 -2
  33. package/vectors/authorization-payload.json +46 -34
  34. package/vectors/authorization-signature-verification.json +39 -1
  35. package/vectors/authorization-verification.json +54 -1
  36. package/vectors/clock-semantics-verification.json +136 -0
  37. package/vectors/delegation-chain-verification.json +366 -0
  38. package/vectors/delegation-parent-hash.json +54 -0
  39. package/vectors/delegation-signature-verification.json +317 -0
  40. package/vectors/delegation-verification.json +252 -0
  41. package/vectors/envelope-verification.json +3 -3
  42. package/vectors/key-lifecycle-verification.json +131 -0
  43. package/vectors/profile-c-state-verification.json +217 -0
  44. package/vectors/signed-krl-verification.json +103 -0
  45. package/vectors/trusted-time.json +50 -0
  46. package/dist/extract-vectors.js +0 -416
  47. package/scripts/extract-vectors.ts +0 -466
  48. package/src/fixtures/README.md +0 -11
  49. package/src/fixtures/ed25519.test-only.fixture.ts +0 -14
  50. package/src/validate.ts +0 -828
  51. package/tsconfig.json +0 -14
@@ -0,0 +1,366 @@
1
+ {
2
+ "version": "1.3.0",
3
+ "description": "Conformance vectors for verifyDelegationChain() - chain-level checks: hash binding, delegator, parent expiry, expiry ceiling, single-hop, policy binding. Artifacts generated programmatically using test key material.",
4
+ "vectors": [
5
+ {
6
+ "id": "delegation-chain-001",
7
+ "mode": "valid",
8
+ "description": "valid chain - signature correct, hash bound, delegator matches, not expired",
9
+ "expected": {
10
+ "status": "ok",
11
+ "violations": []
12
+ },
13
+ "input": {
14
+ "parent": {
15
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
16
+ "issuer": "oxdeai.policy-engine",
17
+ "audience": "parent-agent",
18
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
19
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
20
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
21
+ "decision": "ALLOW",
22
+ "issued_at": 1000000,
23
+ "expiry": 1003000,
24
+ "kid": "2026-01",
25
+ "alg": "Ed25519",
26
+ "signature": "r2+gZu1GsLL4HpNAwD61IUTGax1C8GDADopFLgnr2ZCIjvlLZaob6kO5qnirYpgnJf+eF2YFj3zJNpw6RoVkCg=="
27
+ },
28
+ "delegation": {
29
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
30
+ "issuer": "parent-agent",
31
+ "audience": "child-agent",
32
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
33
+ "delegator": "parent-agent",
34
+ "delegatee": "child-agent",
35
+ "scope": {
36
+ "tools": [
37
+ "provision_gpu"
38
+ ]
39
+ },
40
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
41
+ "issued_at": 1000000,
42
+ "expiry": 1002000,
43
+ "alg": "Ed25519",
44
+ "kid": "2026-01",
45
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
46
+ },
47
+ "opts": {
48
+ "now": 1001000
49
+ }
50
+ }
51
+ },
52
+ {
53
+ "id": "delegation-chain-002",
54
+ "mode": "parent-hash-mismatch",
55
+ "description": "delegation.parent_auth_hash does not match computed hash of supplied parent",
56
+ "expected": {
57
+ "status": "invalid",
58
+ "violations": [
59
+ {
60
+ "code": "DELEGATION_PARENT_HASH_MISMATCH",
61
+ "message": "parent_auth_hash does not match computed hash of parent authorization"
62
+ }
63
+ ]
64
+ },
65
+ "input": {
66
+ "parent": {
67
+ "auth_id": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
68
+ "issuer": "oxdeai.policy-engine",
69
+ "audience": "parent-agent",
70
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
71
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
72
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
73
+ "decision": "ALLOW",
74
+ "issued_at": 1000000,
75
+ "expiry": 1003000,
76
+ "kid": "2026-01",
77
+ "alg": "Ed25519",
78
+ "signature": "O7KI55KHW8ofKMZo65eOlM+IMAAvdKYoiki5eqFjklZHMfgo/2T5XhCeovj1aC1WhEUufdLqqG85c2o5CB6GDQ=="
79
+ },
80
+ "delegation": {
81
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
82
+ "issuer": "parent-agent",
83
+ "audience": "child-agent",
84
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
85
+ "delegator": "parent-agent",
86
+ "delegatee": "child-agent",
87
+ "scope": {
88
+ "tools": [
89
+ "provision_gpu"
90
+ ]
91
+ },
92
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
93
+ "issued_at": 1000000,
94
+ "expiry": 1002000,
95
+ "alg": "Ed25519",
96
+ "kid": "2026-01",
97
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
98
+ },
99
+ "opts": {
100
+ "now": 1001000
101
+ }
102
+ }
103
+ },
104
+ {
105
+ "id": "delegation-chain-003",
106
+ "mode": "delegator-mismatch",
107
+ "description": "delegation.delegator does not match parent.audience",
108
+ "expected": {
109
+ "status": "invalid",
110
+ "violations": [
111
+ {
112
+ "code": "DELEGATION_DELEGATOR_MISMATCH",
113
+ "message": "delegator does not match parent.audience"
114
+ }
115
+ ]
116
+ },
117
+ "input": {
118
+ "parent": {
119
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
120
+ "issuer": "oxdeai.policy-engine",
121
+ "audience": "parent-agent",
122
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
123
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
124
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
125
+ "decision": "ALLOW",
126
+ "issued_at": 1000000,
127
+ "expiry": 1003000,
128
+ "kid": "2026-01",
129
+ "alg": "Ed25519",
130
+ "signature": "r2+gZu1GsLL4HpNAwD61IUTGax1C8GDADopFLgnr2ZCIjvlLZaob6kO5qnirYpgnJf+eF2YFj3zJNpw6RoVkCg=="
131
+ },
132
+ "delegation": {
133
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
134
+ "issuer": "parent-agent",
135
+ "audience": "child-agent",
136
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
137
+ "delegator": "wrong-agent",
138
+ "delegatee": "child-agent",
139
+ "scope": {
140
+ "tools": [
141
+ "provision_gpu"
142
+ ]
143
+ },
144
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
145
+ "issued_at": 1000000,
146
+ "expiry": 1002000,
147
+ "alg": "Ed25519",
148
+ "kid": "2026-01",
149
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
150
+ },
151
+ "opts": {
152
+ "now": 1001000
153
+ }
154
+ }
155
+ },
156
+ {
157
+ "id": "delegation-chain-004",
158
+ "mode": "parent-expired",
159
+ "description": "parent authorization has expired at verification time",
160
+ "expected": {
161
+ "status": "invalid",
162
+ "violations": [
163
+ {
164
+ "code": "DELEGATION_PARENT_EXPIRED",
165
+ "message": "parent authorization has expired"
166
+ }
167
+ ]
168
+ },
169
+ "input": {
170
+ "parent": {
171
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
172
+ "issuer": "oxdeai.policy-engine",
173
+ "audience": "parent-agent",
174
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
175
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
176
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
177
+ "decision": "ALLOW",
178
+ "issued_at": 1000000,
179
+ "expiry": 1003000,
180
+ "kid": "2026-01",
181
+ "alg": "Ed25519",
182
+ "signature": "r2+gZu1GsLL4HpNAwD61IUTGax1C8GDADopFLgnr2ZCIjvlLZaob6kO5qnirYpgnJf+eF2YFj3zJNpw6RoVkCg=="
183
+ },
184
+ "delegation": {
185
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
186
+ "issuer": "parent-agent",
187
+ "audience": "child-agent",
188
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
189
+ "delegator": "parent-agent",
190
+ "delegatee": "child-agent",
191
+ "scope": {
192
+ "tools": [
193
+ "provision_gpu"
194
+ ]
195
+ },
196
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
197
+ "issued_at": 1000000,
198
+ "expiry": 1002000,
199
+ "alg": "Ed25519",
200
+ "kid": "2026-01",
201
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
202
+ },
203
+ "opts": {
204
+ "now": 1003000
205
+ }
206
+ }
207
+ },
208
+ {
209
+ "id": "delegation-chain-005",
210
+ "mode": "expiry-exceeds-parent",
211
+ "description": "delegation.expiry is greater than parent.expiry",
212
+ "expected": {
213
+ "status": "invalid",
214
+ "violations": [
215
+ {
216
+ "code": "DELEGATION_EXPIRY_EXCEEDS_PARENT",
217
+ "message": "delegation expiry exceeds parent authorization expiry"
218
+ }
219
+ ]
220
+ },
221
+ "input": {
222
+ "parent": {
223
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
224
+ "issuer": "oxdeai.policy-engine",
225
+ "audience": "parent-agent",
226
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
227
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
228
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
229
+ "decision": "ALLOW",
230
+ "issued_at": 1000000,
231
+ "expiry": 1003000,
232
+ "kid": "2026-01",
233
+ "alg": "Ed25519",
234
+ "signature": "r2+gZu1GsLL4HpNAwD61IUTGax1C8GDADopFLgnr2ZCIjvlLZaob6kO5qnirYpgnJf+eF2YFj3zJNpw6RoVkCg=="
235
+ },
236
+ "delegation": {
237
+ "delegation_id": "d1d1d1d1-0000-0000-0000-ex1ry0verrun",
238
+ "issuer": "parent-agent",
239
+ "audience": "child-agent",
240
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
241
+ "delegator": "parent-agent",
242
+ "delegatee": "child-agent",
243
+ "scope": {},
244
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
245
+ "issued_at": 1000000,
246
+ "expiry": 1003001,
247
+ "alg": "Ed25519",
248
+ "kid": "2026-01",
249
+ "signature": "3qN638hL81WjfFKIQHTgaIySksn5BLZhkmrEcngzhiuGzLmhEkLvNgU2z+hp+88enneY4zFDrgMq+3lsFB9VCA=="
250
+ },
251
+ "opts": {
252
+ "now": 1001000
253
+ }
254
+ }
255
+ },
256
+ {
257
+ "id": "delegation-chain-006",
258
+ "mode": "multi-hop",
259
+ "description": "parent is a DelegationV1 (has delegation_id) - re-delegation is not permitted",
260
+ "expected": {
261
+ "status": "invalid",
262
+ "violations": [
263
+ {
264
+ "code": "DELEGATION_MULTIHOP_DENIED",
265
+ "message": "parent must be AuthorizationV1 — multi-hop delegation is not permitted"
266
+ }
267
+ ]
268
+ },
269
+ "input": {
270
+ "parent": {
271
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
272
+ "issuer": "parent-agent",
273
+ "audience": "child-agent",
274
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
275
+ "delegator": "parent-agent",
276
+ "delegatee": "child-agent",
277
+ "scope": {
278
+ "tools": [
279
+ "provision_gpu"
280
+ ]
281
+ },
282
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
283
+ "issued_at": 1000000,
284
+ "expiry": 1002000,
285
+ "alg": "Ed25519",
286
+ "kid": "2026-01",
287
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
288
+ },
289
+ "delegation": {
290
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
291
+ "issuer": "parent-agent",
292
+ "audience": "child-agent",
293
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
294
+ "delegator": "parent-agent",
295
+ "delegatee": "child-agent",
296
+ "scope": {
297
+ "tools": [
298
+ "provision_gpu"
299
+ ]
300
+ },
301
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
302
+ "issued_at": 1000000,
303
+ "expiry": 1002000,
304
+ "alg": "Ed25519",
305
+ "kid": "2026-01",
306
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
307
+ },
308
+ "opts": {
309
+ "now": 1001000
310
+ }
311
+ }
312
+ },
313
+ {
314
+ "id": "delegation-chain-007",
315
+ "mode": "policy-id-mismatch",
316
+ "description": "delegation.policy_id does not match parent.policy_id",
317
+ "expected": {
318
+ "status": "invalid",
319
+ "violations": [
320
+ {
321
+ "code": "DELEGATION_POLICY_ID_MISMATCH",
322
+ "message": "policy_id does not match parent.policy_id"
323
+ }
324
+ ]
325
+ },
326
+ "input": {
327
+ "parent": {
328
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
329
+ "issuer": "oxdeai.policy-engine",
330
+ "audience": "parent-agent",
331
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
332
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
333
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
334
+ "decision": "ALLOW",
335
+ "issued_at": 1000000,
336
+ "expiry": 1003000,
337
+ "kid": "2026-01",
338
+ "alg": "Ed25519",
339
+ "signature": "r2+gZu1GsLL4HpNAwD61IUTGax1C8GDADopFLgnr2ZCIjvlLZaob6kO5qnirYpgnJf+eF2YFj3zJNpw6RoVkCg=="
340
+ },
341
+ "delegation": {
342
+ "delegation_id": "d1d1d1d1-0000-0000-0000-c0nf0rm4nce",
343
+ "issuer": "parent-agent",
344
+ "audience": "child-agent",
345
+ "parent_auth_hash": "bc25c98576d0f7f7d674e7c3485cdce0597f7091a389b75a89daf831c649b80d",
346
+ "delegator": "parent-agent",
347
+ "delegatee": "child-agent",
348
+ "scope": {
349
+ "tools": [
350
+ "provision_gpu"
351
+ ]
352
+ },
353
+ "policy_id": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
354
+ "issued_at": 1000000,
355
+ "expiry": 1002000,
356
+ "alg": "Ed25519",
357
+ "kid": "2026-01",
358
+ "signature": "OKfqOEMyQpnd0HGwN8mMZTWMM84AOZvARgqM/ttrDCluAoROJxxPqN3Bhx5nsRt7uQYgM7FrOTXRh1ApowrFAQ=="
359
+ },
360
+ "opts": {
361
+ "now": 1001000
362
+ }
363
+ }
364
+ }
365
+ ]
366
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "version": "1.3.0",
3
+ "description": "Vectors for delegation_parent_hash = SHA256(canonical_json(AuthorizationV1)). Key insertion order must not affect the result (invariant I1).",
4
+ "hash_algorithm": "SHA256-utf8",
5
+ "vectors": [
6
+ {
7
+ "id": "delegation-ph-001",
8
+ "description": "parent hash of a baseline AuthorizationV1 object",
9
+ "input": {
10
+ "parent": {
11
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
12
+ "issuer": "oxdeai.policy-engine",
13
+ "audience": "parent-agent",
14
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
15
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
16
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
17
+ "decision": "ALLOW",
18
+ "issued_at": 1000000,
19
+ "expiry": 1003000,
20
+ "alg": "Ed25519",
21
+ "kid": "2026-01",
22
+ "signature": "placeholder"
23
+ }
24
+ },
25
+ "expected": {
26
+ "parent_auth_hash": "d00ce19cf7aed0764f6b553faeb92e7339b0ece63e4e0e8b7cd42e278b29a89f"
27
+ }
28
+ },
29
+ {
30
+ "id": "delegation-ph-002",
31
+ "description": "same parent with keys in different insertion order - hash must be identical (I1)",
32
+ "input": {
33
+ "parent": {
34
+ "signature": "placeholder",
35
+ "kid": "2026-01",
36
+ "alg": "Ed25519",
37
+ "expiry": 1003000,
38
+ "issued_at": 1000000,
39
+ "decision": "ALLOW",
40
+ "policy_id": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
41
+ "state_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
42
+ "intent_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
43
+ "audience": "parent-agent",
44
+ "issuer": "oxdeai.policy-engine",
45
+ "auth_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
46
+ }
47
+ },
48
+ "invariant": "equals delegation-ph-001",
49
+ "expected": {
50
+ "parent_auth_hash": "d00ce19cf7aed0764f6b553faeb92e7339b0ece63e4e0e8b7cd42e278b29a89f"
51
+ }
52
+ }
53
+ ]
54
+ }