1- ; Proof of Process (PoP) Evidence Schema
1+ ; Proof of Process (PoP) Evidence and Attestation Result Schema
22; draft-condrey-rats-pop-protocol-04 / draft-condrey-rats-pop-appraisal-03
33;
44; This schema defines the CBOR-encoded data structures for the
77; CBOR tag 1463894560 ("WAR ").
88;
99; All map keys use integer encoding per IETF CBOR conventions.
10+ ; All floating-point fields MUST use 32-bit IEEE 754 binary32.
11+ ; pop-timestamp values MUST use floating-point encoding with
12+ ; at least millisecond precision.
13+
14+ ; ============================================================
15+ ; CBOR Tag Wrappers
16+ ; ============================================================
17+
18+ pop-evidence = #6.1347571280(evidence-packet)
19+ pop-war = #6.1463894560(attestation-result)
1020
1121; ============================================================
1222; Evidence Packet (Protocol)
1323; ============================================================
1424
15- ; Top-level Evidence Packet (CBOR tag 1347571280)
1625evidence-packet = {
1726 1 => uint, ; version (MUST be 1)
1827 2 => tstr, ; profile-uri
1928 3 => uuid, ; packet-id
2029 4 => pop-timestamp, ; created
2130 5 => document-ref, ; document
22- 6 => [+ checkpoint], ; checkpoints
31+ 6 => [3* checkpoint], ; checkpoints (min 3)
2332 ? 7 => attestation-tier, ; T1-T4
2433 ? 8 => [* tstr], ; limitations
2534 ? 9 => profile-declaration, ; profile
2635 ? 10 => [+ presence-challenge], ; QR/OOB proofs
27- ? 18 => physical-liveness, ; CDCE markers
36+ ? 11 => channel-binding, ; TLS EKM binding
37+ ; keys 14-17 reserved for future use
38+ ? 13 => content-tier, ; Evidence Content Tier
39+ ? 18 => physical-liveness, ; physical-liveness markers
40+ * int => any, ; extension fields
2841}
2942
3043checkpoint = {
@@ -37,9 +50,10 @@ checkpoint = {
3750 7 => hash-value, ; prev-hash
3851 8 => hash-value, ; checkpoint-hash
3952 9 => process-proof, ; SWF proof
40- 10 => jitter-binding, ; behavioral-entropy
41- 11 => physical-state, ; CDCE Weave
42- 12 => bstr .size 32, ; entangled-mac
53+ ? 10 => jitter-binding, ; behavioral-entropy (ENHANCED+)
54+ ? 11 => physical-state, ; CDCE Weave (ENHANCED+)
55+ ? 12 => bstr .size 32, ; entangled-mac (ENHANCED+)
56+ * int => any, ; extension fields
4357}
4458
4559document-ref = {
@@ -48,7 +62,7 @@ document-ref = {
4862 3 => uint, ; byte-length
4963 4 => uint, ; char-count
5064 ? 5 => hash-salt-mode, ; salting mode
51- ? 6 => bstr, ; salt-commitment
65+ ? 6 => bstr .size 32, ; salt-commitment
5266}
5367
5468; ============================================================
@@ -58,10 +72,10 @@ document-ref = {
5872process-proof = {
5973 1 => proof-algorithm, ; algorithm id
6074 2 => proof-params, ; SWF params
61- 3 => bstr, ; input (seed)
62- 4 => bstr, ; output ( root)
75+ 3 => bstr .size 32, ; input (seed)
76+ 4 => bstr .size 32, ; merkle- root
6377 5 => [+ merkle-proof], ; sampled proofs
64- 6 => float32, ; claimed-duration
78+ 6 => float32, ; claimed-duration (seconds)
6579}
6680
6781proof-params = {
@@ -88,20 +102,20 @@ jitter-binding = {
88102}
89103
90104edit-delta = {
91- 1 => int, ; chars-added
92- 2 => int, ; chars-deleted
105+ 1 => uint, ; chars-added
106+ 2 => uint, ; chars-deleted
93107 3 => uint, ; op-count
94108 ? 4 => [* edit-position], ; positions
95109}
96110
97111edit-position = [
98112 uint, ; offset
99- int, ; change (+/-)
113+ int, ; change (+/-), MUST be non-zero
100114]
101115
102116physical-state = {
103117 1 => [+ float32], ; thermal (relative)
104- 2 => uint , ; entropy-delta
118+ 2 => int , ; entropy-delta (signed)
105119 ? 3 => bstr .size 32, ; kernel-commitment
106120}
107121
@@ -120,8 +134,8 @@ thermal-sample = [
120134; ============================================================
121135
122136presence-challenge = {
123- 1 => bstr, ; challenge-nonce
124- 2 => bstr, ; device-signature
137+ 1 => bstr .size (16..256), ; challenge-nonce (128+ bits)
138+ 2 => bstr, ; device-signature (MUST be COSE_Sign1)
125139 3 => pop-timestamp, ; response-time
126140}
127141
@@ -130,6 +144,15 @@ profile-declaration = {
130144 2 => [+ uint], ; feature-flags
131145}
132146
147+ binding-type = &(
148+ tls-exporter: 1,
149+ )
150+
151+ channel-binding = {
152+ 1 => binding-type, ; binding-type
153+ 2 => bstr .size 32, ; binding-value (EKM output)
154+ }
155+
133156; NOTE: Cross-session linking (continuation tokens) is deferred
134157; to a future revision. See draft-condrey-rats-pop-protocol.
135158
@@ -140,16 +163,18 @@ profile-declaration = {
140163
141164attestation-result = {
142165 1 => uint, ; version (MUST be 1)
143- 2 => bstr .size 32, ; evidence-ref (hash of packet chain)
166+ 2 => hash-value, ; evidence-ref
144167 3 => verdict, ; appraisal verdict
145168 4 => attestation-tier, ; assessed assurance level
146169 5 => uint, ; chain-length
147170 6 => uint, ; chain-duration (seconds)
148- 7 => entropy-report, ; entropy assessment
171+ ? 7 => entropy-report, ; entropy assessment (omit for CORE)
149172 ? 8 => forgery-cost-estimate, ; quantified forgery cost
150- ? 9 => [* absence-proof ], ; absence claims
173+ ? 9 => [+ absence-claim ], ; absence claims (1+ when present)
151174 ? 10 => [* tstr], ; warnings
152175 11 => bstr, ; verifier-signature (COSE_Sign1)
176+ 12 => pop-timestamp, ; created (appraisal timestamp)
177+ * int => any, ; extension fields
153178}
154179
155180verdict = &(
@@ -161,8 +186,8 @@ verdict = &(
161186
162187entropy-report = {
163188 1 => float32, ; timing-entropy (bits/sample)
164- 2 => float32, ; revision-entropy
165- 3 => float32, ; pause-entropy
189+ 2 => float32, ; revision-entropy (bits)
190+ 3 => float32, ; pause-entropy (bits)
166191 4 => bool, ; meets-threshold
167192}
168193
@@ -175,17 +200,24 @@ forgery-cost-estimate = {
175200 2 => float32, ; c-entropy
176201 3 => float32, ; c-hardware
177202 4 => float32, ; c-total
178- 5 => tstr , ; currency ("USD" / "CPU-hours")
203+ 5 => cost-unit , ; currency
179204}
180205
206+ cost-unit = &(
207+ usd: 1,
208+ cpu-hours: 2,
209+ )
210+
181211; ============================================================
182- ; Absence Proofs (Appraisal)
212+ ; Absence Claims (Appraisal)
183213; ============================================================
184214
185- absence-proof = {
215+ absence-claim = {
186216 1 => absence-type, ; proof category
187217 2 => time-window, ; claimed window
188- 3 => bstr, ; type-specific proof data
218+ 3 => tstr, ; claim-id
219+ ? 4 => any, ; threshold/parameter
220+ 5 => bool, ; assertion
189221}
190222
191223absence-type = &(
@@ -210,8 +242,14 @@ attestation-tier = &(
210242 hardware-hardened: 4, ; T4: LoA4
211243)
212244
245+ content-tier = &(
246+ core: 1,
247+ enhanced: 2,
248+ maximum: 3,
249+ )
250+
213251proof-algorithm = &(
214- sha256-chain: 1,
252+ ; 1 is reserved for future use
215253 pobst-argon2id: 20,
216254)
217255
@@ -231,7 +269,7 @@ hash-algorithm = &(
231269; ============================================================
232270
233271uuid = bstr .size 16
234- pop-timestamp = #6.1(number ) ; CBOR tag 1 (epoch-based date/time )
272+ pop-timestamp = #6.1(float32 ) ; CBOR tag 1 (epoch-based, float32 )
235273hash-value = {
236274 1 => hash-algorithm,
237275 2 => bstr,
0 commit comments