1use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
15#[serde(rename_all = "snake_case")]
16pub enum ConformanceStatus {
17 Implemented,
19 Partial,
22 Planned,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct ConformanceClaim {
29 pub class: &'static str,
31 pub description: &'static str,
33 pub status: ConformanceStatus,
35 pub implemented_in: &'static str,
37}
38
39pub fn conformance_claims() -> Vec<ConformanceClaim> {
41 use ConformanceStatus as S;
42 vec![
43 ConformanceClaim {
44 class: "/conf/basic-verifier",
45 description: "Verify artifacts offline against an anchor bundle: hard checks, coverage report, acceptance policy",
46 status: S::Implemented,
47 implemented_in: "confium_signatif::pipeline",
48 },
49 ConformanceClaim {
50 class: "/conf/full-verifier",
51 description: "Basic verifier plus trust-graph path-finding, multi-dimension verification, classification policies",
52 status: S::Implemented,
53 implemented_in: "confium_signatif::pipeline + graph + coverage",
54 },
55 ConformanceClaim {
56 class: "/conf/issuing-authority",
57 description: "Issue end certificates and produce trusted artifacts with dimension attestations",
58 status: S::Implemented,
59 implemented_in: "confium_signatif::artifact + ceremony",
60 },
61 ConformanceClaim {
62 class: "/conf/root-authority",
63 description: "Operate a root: anchor bundles, deployment manifests, cross-recognition",
64 status: S::Implemented,
65 implemented_in: "confium_signatif::bundle + confium_deployment::signatif",
66 },
67 ConformanceClaim {
68 class: "/conf/transparency-operator",
69 description: "Operate an append-only log with inclusion and consistency proofs",
70 status: S::Implemented,
71 implemented_in: "confium_transparency + confium-log-server",
72 },
73 ConformanceClaim {
74 class: "/conf/mirror",
75 description: "Mirror a log: verify append-only continuity, serve proofs",
76 status: S::Implemented,
77 implemented_in: "confium_transparency::witness + confium-log-monitor",
78 },
79 ConformanceClaim {
80 class: "/conf/device-signer",
81 description: "Device signs fresh nonce-bound artifacts under challenge",
82 status: S::Implemented,
83 implemented_in: "confium_signatif::passport (Challenge)",
84 },
85 ConformanceClaim {
86 class: "/conf/hierarchical",
87 description: "Single-root hierarchy topology",
88 status: S::Implemented,
89 implemented_in: "confium_signatif::graph + deployment::signatif",
90 },
91 ConformanceClaim {
92 class: "/conf/federated",
93 description: "Threshold groups of independent organizations",
94 status: S::Implemented,
95 implemented_in: "confium_signatif::fta",
96 },
97 ConformanceClaim {
98 class: "/conf/cross-recognized",
99 description: "Roots attesting each other via signed credentials",
100 status: S::Implemented,
101 implemented_in: "confium_deployment::signatif::CrossRecognition",
102 },
103 ConformanceClaim {
104 class: "/conf/mesh",
105 description: "Many-to-many peer recognition",
106 status: S::Implemented,
107 implemented_in: "confium_signatif::graph (multi-root, multi-path)",
108 },
109 ConformanceClaim {
110 class: "/conf/format-cose",
111 description: "COSE Sig_Structure envelope",
112 status: S::Implemented,
113 implemented_in: "confium_composite::cose",
114 },
115 ConformanceClaim {
116 class: "/conf/format-jws",
117 description: "JWS compact, detached content",
118 status: S::Implemented,
119 implemented_in: "confium_signatif::jws",
120 },
121 ConformanceClaim {
122 class: "/conf/format-xmldsig",
123 description: "XML Signature with Exclusive C14N",
124 status: S::Implemented,
125 implemented_in: "confium_pki::xmldsig",
126 },
127 ConformanceClaim {
128 class: "/conf/dimension-data",
129 description: "Data dimension attestation",
130 status: S::Implemented,
131 implemented_in: "confium_signatif::artifact + registry",
132 },
133 ConformanceClaim {
134 class: "/conf/dimension-person",
135 description: "Person dimension attestation",
136 status: S::Implemented,
137 implemented_in: "confium_signatif::artifact + registry",
138 },
139 ConformanceClaim {
140 class: "/conf/dimension-time",
141 description: "Time dimension with external anchor",
142 status: S::Implemented,
143 implemented_in: "confium_signatif::time",
144 },
145 ConformanceClaim {
146 class: "/conf/dimension-location",
147 description: "Location dimension attestation",
148 status: S::Implemented,
149 implemented_in: "confium_signatif::artifact + registry",
150 },
151 ConformanceClaim {
152 class: "/conf/dimension-environment",
153 description: "Environment dimension attestation",
154 status: S::Implemented,
155 implemented_in: "confium_signatif::artifact + registry",
156 },
157 ConformanceClaim {
158 class: "/conf/dimension-authorization",
159 description: "Authorization dimension attestation",
160 status: S::Implemented,
161 implemented_in: "confium_signatif::artifact + registry",
162 },
163 ConformanceClaim {
164 class: "/conf/dimension-identity",
165 description: "Identity dimension attestation",
166 status: S::Implemented,
167 implemented_in: "confium_signatif::artifact + registry",
168 },
169 ConformanceClaim {
170 class: "/conf/dimension-oracle",
171 description: "Oracle dimension attestation",
172 status: S::Implemented,
173 implemented_in: "confium_signatif::artifact + registry",
174 },
175 ConformanceClaim {
176 class: "/conf/multi-dimensional",
177 description: "Multiple independent dimensions converging on one artifact",
178 status: S::Implemented,
179 implemented_in: "confium_signatif::artifact (living artifacts)",
180 },
181 ConformanceClaim {
182 class: "/conf/post-quantum",
183 description: "ML-DSA-65 and SLH-DSA-128s verification, classical+PQC and PQC-only composites",
184 status: S::Implemented,
185 implemented_in: "confium_composite::pq (features pq, pq-slh)",
186 },
187 ]
188}
189
190pub fn conformance_report() -> serde_json::Value {
192 let claims = conformance_claims();
193 let implemented = claims
194 .iter()
195 .filter(|c| c.status == ConformanceStatus::Implemented)
196 .count();
197 serde_json::json!({
198 "framework": "SIGNATIF",
199 "implementation": "confium-signatif",
200 "version": env!("CARGO_PKG_VERSION"),
201 "classes_claimed": claims.len(),
202 "implemented": implemented,
203 "claims": claims,
204 })
205}
206
207#[cfg(test)]
208mod tests {
209 use super::*;
210
211 #[test]
212 fn all_24_classes_covered() {
213 let claims = conformance_claims();
214 assert_eq!(claims.len(), 24, "the SIGNATIF class hierarchy");
215 let mut ids: Vec<_> = claims.iter().map(|c| c.class).collect();
217 ids.sort();
218 ids.dedup();
219 assert_eq!(ids.len(), claims.len());
220 }
221
222 #[test]
223 fn core_verifier_classes_are_implemented() {
224 for class in ["/conf/basic-verifier", "/conf/full-verifier"] {
225 assert_eq!(
226 conformance_claims()
227 .iter()
228 .find(|c| c.class == class)
229 .expect(class)
230 .status,
231 ConformanceStatus::Implemented,
232 "{class} must be implemented โ it is the base of the hierarchy"
233 );
234 }
235 }
236
237 #[test]
238 fn report_is_serializable() {
239 let report = conformance_report();
240 assert!(report["claims"].as_array().unwrap().len() == 24);
241 assert_eq!(report["implemented"].as_u64().unwrap(), 24);
242 }
243}