quantbom 0.6.0__py3-none-any.whl
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.
- quantbom/__init__.py +497 -0
- quantbom/_bitorder.py +121 -0
- quantbom/_circuit.py +77 -0
- quantbom/_collect.py +661 -0
- quantbom/_drift.py +333 -0
- quantbom/_fidelity.py +280 -0
- quantbom/_merge.py +187 -0
- quantbom/_qir.py +224 -0
- quantbom/_scan.py +118 -0
- quantbom/_sign.py +284 -0
- quantbom/_stats.py +125 -0
- quantbom/_verify.py +530 -0
- quantbom/actions/__init__.py +27 -0
- quantbom/actions/base.py +68 -0
- quantbom/actions/benchmark.py +53 -0
- quantbom/actions/bind_backend.py +71 -0
- quantbom/actions/capture.py +106 -0
- quantbom/actions/check_qir.py +44 -0
- quantbom/actions/check_results.py +75 -0
- quantbom/actions/compare_native.py +88 -0
- quantbom/actions/disclose_error_handling.py +66 -0
- quantbom/actions/execute.py +85 -0
- quantbom/actions/inventory.py +24 -0
- quantbom/actions/layout.py +118 -0
- quantbom/actions/prove_equivalence.py +225 -0
- quantbom/actions/record_provenance.py +49 -0
- quantbom/actions/verify_conversion.py +53 -0
- quantbom/attest.py +363 -0
- quantbom/cli.py +378 -0
- quantbom/frameworks/__init__.py +67 -0
- quantbom/frameworks/base.py +155 -0
- quantbom/frameworks/braket.py +132 -0
- quantbom/frameworks/cirq.py +106 -0
- quantbom/frameworks/cudaq.py +223 -0
- quantbom/frameworks/pennylane.py +116 -0
- quantbom/frameworks/qiskit.py +67 -0
- quantbom/frameworks/qrisp.py +267 -0
- quantbom/harness.json +1730 -0
- quantbom/harness.py +88 -0
- quantbom-0.6.0.dist-info/METADATA +207 -0
- quantbom-0.6.0.dist-info/RECORD +45 -0
- quantbom-0.6.0.dist-info/WHEEL +5 -0
- quantbom-0.6.0.dist-info/entry_points.txt +2 -0
- quantbom-0.6.0.dist-info/licenses/LICENSE +202 -0
- quantbom-0.6.0.dist-info/top_level.txt +1 -0
quantbom/harness.json
ADDED
|
@@ -0,0 +1,1730 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "secqdevops.harness-index/v1",
|
|
3
|
+
"harness_version": "0.16.0",
|
|
4
|
+
"schemes": {
|
|
5
|
+
"eu-cra": "EU-CRA",
|
|
6
|
+
"eu-ai-act-quantum": "EU-AI-ACT-QUANTUM"
|
|
7
|
+
},
|
|
8
|
+
"frameworks": {
|
|
9
|
+
"qiskit": {
|
|
10
|
+
"component": "qiskit",
|
|
11
|
+
"license": "Apache-2.0",
|
|
12
|
+
"bit_order": "qubit0_last",
|
|
13
|
+
"translation": null,
|
|
14
|
+
"inputs": [
|
|
15
|
+
"QuantumCircuit",
|
|
16
|
+
"QPY file",
|
|
17
|
+
"OpenQASM 2/3 file"
|
|
18
|
+
],
|
|
19
|
+
"requires": "qiskit>=2.0,<3",
|
|
20
|
+
"capabilities": {
|
|
21
|
+
"dynamic": true,
|
|
22
|
+
"parameters": "bind-before-collect",
|
|
23
|
+
"reference": "none",
|
|
24
|
+
"max_reference_qubits": null,
|
|
25
|
+
"max_statevector_qubits": null
|
|
26
|
+
},
|
|
27
|
+
"conformance": {
|
|
28
|
+
"status": "verified",
|
|
29
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
30
|
+
"versions": "qiskit 2.5.2",
|
|
31
|
+
"host": "linux x86_64, Python 3.11 (cloud container)",
|
|
32
|
+
"date": "2026-10-04"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"qrisp": {
|
|
36
|
+
"component": "qrisp",
|
|
37
|
+
"license": "EUPL-1.2",
|
|
38
|
+
"bit_order": "by-input",
|
|
39
|
+
"translation": "qrisp-to_qiskit",
|
|
40
|
+
"inputs": [
|
|
41
|
+
"QuantumCircuit",
|
|
42
|
+
"QuantumSession (qv.qs)",
|
|
43
|
+
"Jaspr (make_jaspr(f)(), argument-free)"
|
|
44
|
+
],
|
|
45
|
+
"requires": "qrisp>=0.8,<1",
|
|
46
|
+
"capabilities": {
|
|
47
|
+
"dynamic": true,
|
|
48
|
+
"parameters": "bind-before-collect",
|
|
49
|
+
"reference": "dense",
|
|
50
|
+
"max_reference_qubits": 10,
|
|
51
|
+
"max_statevector_qubits": 20
|
|
52
|
+
},
|
|
53
|
+
"conformance": {
|
|
54
|
+
"status": "verified",
|
|
55
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
56
|
+
"versions": "qrisp 0.9.10, qiskit 2.5.2, mqt.qcec 3.11",
|
|
57
|
+
"host": "macOS arm64, Python 3.13 (local)",
|
|
58
|
+
"date": "2026-10-23"
|
|
59
|
+
},
|
|
60
|
+
"bit_orders": {
|
|
61
|
+
"QuantumCircuit": "qubit0_last",
|
|
62
|
+
"QuantumSession": "qubit0_first",
|
|
63
|
+
"Jaspr": "qubit0_first"
|
|
64
|
+
},
|
|
65
|
+
"notes": "Three readings, pinned per input: QuantumCircuit.run() puts qubit 0 rightmost (Qiskit's order); QuantumVariable.get_measurement() puts qubit 0 leftmost; a Jasp program's measure() integer has bit 0 = qubit 0 and Jaspr.to_qc() allocates classical bits in reverse, so its lowered circuit's measured string reads qubit 0 first. Dynamic: classic Qrisp cannot express feed-forward (control(clbit) is refused by Qrisp); mid-circuit measurement and reset lower faithfully. Jasp feed-forward on a measured bit lowers to if_else. Real-time classical computation (repeat-until-success, arithmetic on results, measurement-bounded loops) is refused with the reason: Qrisp cannot convert it to a circuit (QIR route, K5). QCEC decides dynamic circuits that measure each qubit once and do not act on it afterwards; other shapes make QNT-05 unsupported (N-A) with QCEC's reason. Native support: the compiled Qrisp circuit is shipped in Qrisp's own terms (quantum/native-program.json, secqdevops.qrisp-program/v1: qubit identifiers, typed variables, instruction list with qb_alloc, Qrisp's own metrics), and QNT-06 checks Qrisp's to_qiskit() against Qrisp's own simulator (get_unitary up to 10 qubits, statevector_array up to 20). No decision-diagram method: Qrisp's OpenQASM exporters go through Qiskit. Qrisp < 0.9 simulates in complex64, so QNT-06 is inconclusive there with that reason."
|
|
66
|
+
},
|
|
67
|
+
"cirq": {
|
|
68
|
+
"component": "cirq-core",
|
|
69
|
+
"license": "Apache-2.0",
|
|
70
|
+
"bit_order": "qubit0_first",
|
|
71
|
+
"translation": "openqasm2",
|
|
72
|
+
"inputs": [
|
|
73
|
+
"cirq.Circuit"
|
|
74
|
+
],
|
|
75
|
+
"notes": "Qubits ordered by sorted LineQubit.",
|
|
76
|
+
"requires": "cirq-core>=1.4,<2",
|
|
77
|
+
"capabilities": {
|
|
78
|
+
"dynamic": false,
|
|
79
|
+
"parameters": "bind-before-collect",
|
|
80
|
+
"reference": "dense",
|
|
81
|
+
"max_reference_qubits": 10,
|
|
82
|
+
"max_statevector_qubits": 20
|
|
83
|
+
},
|
|
84
|
+
"conformance": {
|
|
85
|
+
"status": "verified",
|
|
86
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
87
|
+
"versions": "cirq-core 1.7.0, qiskit 2.5.2",
|
|
88
|
+
"host": "linux x86_64, Python 3.11 (cloud container)",
|
|
89
|
+
"date": "2026-10-04"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"braket": {
|
|
93
|
+
"component": "amazon-braket-sdk",
|
|
94
|
+
"license": "Apache-2.0",
|
|
95
|
+
"bit_order": "qubit0_first",
|
|
96
|
+
"translation": "openqasm3",
|
|
97
|
+
"inputs": [
|
|
98
|
+
"braket.circuits.Circuit"
|
|
99
|
+
],
|
|
100
|
+
"notes": "23 standard gates and the 14 hardware-native gates (iswap, pswap, xy, xx, yy, zz, ecr, cv, cphaseshift00/01/10, gpi, gpi2, prx) verified against Braket's own unitary; no silent mismatch. Native gates are defined in the OpenQASM header the adapter prepends.",
|
|
101
|
+
"gates_unsupported": [],
|
|
102
|
+
"requires": "amazon-braket-sdk>=1.80,<2",
|
|
103
|
+
"capabilities": {
|
|
104
|
+
"dynamic": false,
|
|
105
|
+
"parameters": "bind-before-collect",
|
|
106
|
+
"reference": "dense",
|
|
107
|
+
"max_reference_qubits": 10,
|
|
108
|
+
"max_statevector_qubits": 20
|
|
109
|
+
},
|
|
110
|
+
"conformance": {
|
|
111
|
+
"status": "verified",
|
|
112
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
113
|
+
"versions": "amazon-braket-sdk 1.127.3, qiskit 2.5.2",
|
|
114
|
+
"host": "linux x86_64, Python 3.11 (cloud container)",
|
|
115
|
+
"date": "2026-10-04"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"pennylane": {
|
|
119
|
+
"component": "pennylane",
|
|
120
|
+
"license": "Apache-2.0",
|
|
121
|
+
"bit_order": "qubit0_first",
|
|
122
|
+
"translation": "openqasm2",
|
|
123
|
+
"inputs": [
|
|
124
|
+
"QNode"
|
|
125
|
+
],
|
|
126
|
+
"notes": "Device wire order pinned for export and reference.",
|
|
127
|
+
"requires": "pennylane>=0.41,<1",
|
|
128
|
+
"capabilities": {
|
|
129
|
+
"dynamic": false,
|
|
130
|
+
"parameters": "bind-before-collect",
|
|
131
|
+
"reference": "dense",
|
|
132
|
+
"max_reference_qubits": 10,
|
|
133
|
+
"max_statevector_qubits": 20
|
|
134
|
+
},
|
|
135
|
+
"conformance": {
|
|
136
|
+
"status": "verified",
|
|
137
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
138
|
+
"versions": "pennylane 0.45.1, qiskit 2.5.2",
|
|
139
|
+
"host": "linux x86_64, Python 3.11 (cloud container)",
|
|
140
|
+
"date": "2026-10-04"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"cudaq": {
|
|
144
|
+
"component": "cudaq",
|
|
145
|
+
"license": "Apache-2.0",
|
|
146
|
+
"bit_order": "qubit0_first",
|
|
147
|
+
"translation": "openqasm2",
|
|
148
|
+
"inputs": [
|
|
149
|
+
"@cudaq.kernel kernel (no arguments)",
|
|
150
|
+
"cudaq.make_kernel() builder kernel (no arguments)"
|
|
151
|
+
],
|
|
152
|
+
"notes": "Linux only (CUDA-Q ships no macOS wheels); the cu12/cu13 wheels bundle NVIDIA libraries under their own licences. Verified on CUDA-Q 0.16 (K1): cudaq.get_unitary indexes the basis qubit-0-most-significant and cudaq.get_state qubit-0-least-significant, each pinned by its own probe; the compiler drops idle qubits from get_unitary (then the state-vector method decides); kernels that branch on a measurement are refused (CUDA-Q cannot export them); mid-circuit measurement is refused after lowering.",
|
|
153
|
+
"conformance": {
|
|
154
|
+
"status": "verified",
|
|
155
|
+
"suite": "tests/frameworks/test_conformance.py",
|
|
156
|
+
"versions": "cudaq 0.16.0.post1 (cuda-quantum-cu13), qiskit 2.5.2",
|
|
157
|
+
"host": "linux x86_64, Python 3.11, qpp-cpu target (cloud container, no GPU)",
|
|
158
|
+
"date": "2026-10-05",
|
|
159
|
+
"note": "K1 run on the CPU simulator; the nvidia (GPU) target is unverified — CUDAQ_RUNBOOK.md §6 lists what the run found and changed"
|
|
160
|
+
},
|
|
161
|
+
"requires": "cudaq>=0.9,<1",
|
|
162
|
+
"capabilities": {
|
|
163
|
+
"dynamic": false,
|
|
164
|
+
"parameters": "refused (kernel arguments)",
|
|
165
|
+
"reference": "dense",
|
|
166
|
+
"max_reference_qubits": 10,
|
|
167
|
+
"max_statevector_qubits": 20
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"actions": [
|
|
172
|
+
{
|
|
173
|
+
"id": "inventory",
|
|
174
|
+
"summary": "Pin the quantum stack, the normalized IR and the authoring framework as a component.",
|
|
175
|
+
"provider": "sdk",
|
|
176
|
+
"owner": "MOD-08",
|
|
177
|
+
"opt_in": false,
|
|
178
|
+
"evidence": [
|
|
179
|
+
"secqdevops:quantum-stack",
|
|
180
|
+
"secqdevops:normalized-ir",
|
|
181
|
+
"secqdevops:source-format",
|
|
182
|
+
"secqdevops:component-layer"
|
|
183
|
+
],
|
|
184
|
+
"framework_status": {
|
|
185
|
+
"qiskit": {
|
|
186
|
+
"status": "supported"
|
|
187
|
+
},
|
|
188
|
+
"qrisp": {
|
|
189
|
+
"status": "supported"
|
|
190
|
+
},
|
|
191
|
+
"cirq": {
|
|
192
|
+
"status": "supported"
|
|
193
|
+
},
|
|
194
|
+
"braket": {
|
|
195
|
+
"status": "supported"
|
|
196
|
+
},
|
|
197
|
+
"pennylane": {
|
|
198
|
+
"status": "supported"
|
|
199
|
+
},
|
|
200
|
+
"cudaq": {
|
|
201
|
+
"status": "supported"
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"controls": [
|
|
205
|
+
"CRA-ESR-01",
|
|
206
|
+
"CRA-ESR-02",
|
|
207
|
+
"CRA-ESR-05",
|
|
208
|
+
"QBOM-01",
|
|
209
|
+
"QNT-01",
|
|
210
|
+
"QBOM-BENCH-01",
|
|
211
|
+
"QNT-06"
|
|
212
|
+
],
|
|
213
|
+
"requirements": {
|
|
214
|
+
"eu-cra": [
|
|
215
|
+
"CRA-I-1",
|
|
216
|
+
"CRA-I-3b",
|
|
217
|
+
"CRA-I-3d",
|
|
218
|
+
"CRA-II-1",
|
|
219
|
+
"CRA-II-3"
|
|
220
|
+
],
|
|
221
|
+
"eu-ai-act-quantum": [
|
|
222
|
+
"AIA-11",
|
|
223
|
+
"AIA-15a"
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "record_outcomes",
|
|
229
|
+
"summary": "Record what every action did and why, as a hash-bound log the gate uses to explain each N-A.",
|
|
230
|
+
"provider": "sdk",
|
|
231
|
+
"owner": "MOD-08",
|
|
232
|
+
"opt_in": false,
|
|
233
|
+
"evidence": [
|
|
234
|
+
"secqdevops:harness-log-ref",
|
|
235
|
+
"secqdevops:harness-log-sha256"
|
|
236
|
+
],
|
|
237
|
+
"framework_status": {
|
|
238
|
+
"qiskit": {
|
|
239
|
+
"status": "supported"
|
|
240
|
+
},
|
|
241
|
+
"qrisp": {
|
|
242
|
+
"status": "supported"
|
|
243
|
+
},
|
|
244
|
+
"cirq": {
|
|
245
|
+
"status": "supported"
|
|
246
|
+
},
|
|
247
|
+
"braket": {
|
|
248
|
+
"status": "supported"
|
|
249
|
+
},
|
|
250
|
+
"pennylane": {
|
|
251
|
+
"status": "supported"
|
|
252
|
+
},
|
|
253
|
+
"cudaq": {
|
|
254
|
+
"status": "supported"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"controls": [
|
|
258
|
+
"CRA-INTEG-01",
|
|
259
|
+
"QBOM-01"
|
|
260
|
+
],
|
|
261
|
+
"requirements": {
|
|
262
|
+
"eu-cra": [
|
|
263
|
+
"CRA-I-3d",
|
|
264
|
+
"CRA-II-1"
|
|
265
|
+
],
|
|
266
|
+
"eu-ai-act-quantum": [
|
|
267
|
+
"AIA-11",
|
|
268
|
+
"AIA-15b"
|
|
269
|
+
]
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"id": "capture",
|
|
274
|
+
"summary": "Capture source and compiled circuit (QPY, OpenQASM 3, QIR via the QDK) with byte digests and the compile profile.",
|
|
275
|
+
"provider": "sdk",
|
|
276
|
+
"owner": "MOD-08",
|
|
277
|
+
"opt_in": false,
|
|
278
|
+
"limits": "QIR is compiled by Microsoft's QDK from the hash-bound OpenQASM 3 export — Base profile for a static circuit, Adaptive_RI for a dynamic one — when `quantbom[qir]` (qdk, pyqir, qirrunner) is installed; otherwise the harness log records why it is absent. The QIR is a derived format and is checked by check_qir (QNT-07) before it counts for anything.",
|
|
279
|
+
"evidence": [
|
|
280
|
+
"secqdevops:circuit-artifact-ref",
|
|
281
|
+
"secqdevops:circuit-sha256",
|
|
282
|
+
"secqdevops:circuit-format",
|
|
283
|
+
"secqdevops:circuit-layer",
|
|
284
|
+
"secqdevops:transpiled-circuit-ref",
|
|
285
|
+
"secqdevops:transpiled-circuit-sha256",
|
|
286
|
+
"secqdevops:transpiled-circuit-layer",
|
|
287
|
+
"secqdevops:qasm-program-ref",
|
|
288
|
+
"secqdevops:qasm-program-sha256",
|
|
289
|
+
"secqdevops:qir-program-ref",
|
|
290
|
+
"secqdevops:qir-program-sha256",
|
|
291
|
+
"secqdevops:ir-standard",
|
|
292
|
+
"secqdevops:transpile-profile-hash",
|
|
293
|
+
"secqdevops:circuit-dynamic",
|
|
294
|
+
"secqdevops:qir-profile"
|
|
295
|
+
],
|
|
296
|
+
"framework_status": {
|
|
297
|
+
"qiskit": {
|
|
298
|
+
"status": "supported"
|
|
299
|
+
},
|
|
300
|
+
"qrisp": {
|
|
301
|
+
"status": "supported"
|
|
302
|
+
},
|
|
303
|
+
"cirq": {
|
|
304
|
+
"status": "supported"
|
|
305
|
+
},
|
|
306
|
+
"braket": {
|
|
307
|
+
"status": "supported"
|
|
308
|
+
},
|
|
309
|
+
"pennylane": {
|
|
310
|
+
"status": "supported"
|
|
311
|
+
},
|
|
312
|
+
"cudaq": {
|
|
313
|
+
"status": "supported"
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
"controls": [
|
|
317
|
+
"CRA-INTEG-01",
|
|
318
|
+
"QBOM-01",
|
|
319
|
+
"QNT-02",
|
|
320
|
+
"QNT-03",
|
|
321
|
+
"QNT-05",
|
|
322
|
+
"QNT-06",
|
|
323
|
+
"QNT-07"
|
|
324
|
+
],
|
|
325
|
+
"requirements": {
|
|
326
|
+
"eu-cra": [
|
|
327
|
+
"CRA-I-1",
|
|
328
|
+
"CRA-I-3d",
|
|
329
|
+
"CRA-II-1",
|
|
330
|
+
"CRA-II-3"
|
|
331
|
+
],
|
|
332
|
+
"eu-ai-act-quantum": [
|
|
333
|
+
"AIA-11",
|
|
334
|
+
"AIA-12",
|
|
335
|
+
"AIA-15a",
|
|
336
|
+
"AIA-15b"
|
|
337
|
+
]
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "verify_conversion",
|
|
342
|
+
"summary": "Prove the framework-to-Qiskit translation faithful against the framework's own simulator, and ship the native program hash-bound.",
|
|
343
|
+
"provider": "sdk",
|
|
344
|
+
"owner": "MOD-08",
|
|
345
|
+
"opt_in": false,
|
|
346
|
+
"limits": "Up to QUANTBOM_FIDELITY_MAX_QUBITS (default 10): dense unitary comparison against the framework's own simulator. Beyond it (K3): a state-vector comparison on |0...0> against the framework's own simulator up to QUANTBOM_STATEVECTOR_MAX_QUBITS (default 20) — one input state, weaker — together with decision-diagram equivalence (mqt.qcec) of the hash-bound native export parsed by mqt-core, whose reference is the exported text, not the simulator. Any unfaithful method decides unfaithful; the method that decided is recorded on the report, the CSNAP and the certificate. Beyond both caps without mqt.qcec: inconclusive (N-A). The native program is written as quantum/native-program.qasm (an OpenQASM export) or quantum/native-program.json (Qrisp's compiled circuit in Qrisp's terms, secqdevops.qrisp-program/v1), the exact bytes recorded, hash-bound and bound to the report's own digest of them. Qrisp has no decision-diagram method (its OpenQASM exporters go through Qiskit), and Qrisp < 0.9 simulates in single precision: inconclusive there, with the reason.",
|
|
347
|
+
"evidence": [
|
|
348
|
+
"secqdevops:conversion-fidelity-ref",
|
|
349
|
+
"secqdevops:conversion-fidelity-sha256",
|
|
350
|
+
"secqdevops:conversion-fidelity-verdict",
|
|
351
|
+
"secqdevops:conversion-fidelity-method",
|
|
352
|
+
"secqdevops:native-program-ref",
|
|
353
|
+
"secqdevops:native-program-sha256",
|
|
354
|
+
"secqdevops:native-program-format"
|
|
355
|
+
],
|
|
356
|
+
"framework_status": {
|
|
357
|
+
"qiskit": {
|
|
358
|
+
"status": "not_applicable",
|
|
359
|
+
"reason": "no translation: Qiskit input already is the normalized IR"
|
|
360
|
+
},
|
|
361
|
+
"qrisp": {
|
|
362
|
+
"status": "supported"
|
|
363
|
+
},
|
|
364
|
+
"cirq": {
|
|
365
|
+
"status": "supported"
|
|
366
|
+
},
|
|
367
|
+
"braket": {
|
|
368
|
+
"status": "supported"
|
|
369
|
+
},
|
|
370
|
+
"pennylane": {
|
|
371
|
+
"status": "supported"
|
|
372
|
+
},
|
|
373
|
+
"cudaq": {
|
|
374
|
+
"status": "supported"
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
"controls": [
|
|
378
|
+
"CRA-INTEG-01",
|
|
379
|
+
"QBOM-01",
|
|
380
|
+
"QNT-06"
|
|
381
|
+
],
|
|
382
|
+
"requirements": {
|
|
383
|
+
"eu-cra": [
|
|
384
|
+
"CRA-I-3d",
|
|
385
|
+
"CRA-II-1"
|
|
386
|
+
],
|
|
387
|
+
"eu-ai-act-quantum": [
|
|
388
|
+
"AIA-11",
|
|
389
|
+
"AIA-15a",
|
|
390
|
+
"AIA-15b"
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"id": "compare_native",
|
|
396
|
+
"summary": "Run the native program on its own framework's simulator and check the shared-format run behaves the same.",
|
|
397
|
+
"provider": "sdk",
|
|
398
|
+
"owner": "MOD-08",
|
|
399
|
+
"opt_in": false,
|
|
400
|
+
"limits": "The native program is sampled on the framework's own simulator (Qrisp QuantumCircuit.run, cirq.Simulator, Braket LocalSimulator, PennyLane's device probabilities, cudaq.sample) with QUANTBOM_NATIVE_SHOTS shots (default 8192), keyed as the shared-format run's measured string, and compared with that run by total-variation distance with the two samples' joint sampling error at 95% confidence against QUANTBOM_NATIVE_TOLERANCE (default 0.15): agree, disagree or undecided. Statistical: it detects a translation that changes outcome probabilities, including dynamic programs QNT-06 cannot decide, not a phase alone. Up to QUANTBOM_STATEVECTOR_MAX_QUBITS (default 20); only when the shared-format run is on an ideal local simulator (a noisy device or hardware would make the difference measure noise). Written to quantum/native-result.json with Qrisp sessions' outcomes per typed variable; the gate re-derives the comparison from it and result-summary.json.",
|
|
401
|
+
"evidence": [
|
|
402
|
+
"secqdevops:native-result-ref",
|
|
403
|
+
"secqdevops:native-result-sha256",
|
|
404
|
+
"secqdevops:native-result-verdict",
|
|
405
|
+
"secqdevops:native-result-tvd"
|
|
406
|
+
],
|
|
407
|
+
"framework_status": {
|
|
408
|
+
"qiskit": {
|
|
409
|
+
"status": "not_applicable",
|
|
410
|
+
"reason": "Qiskit input is the shared format itself: there is no native program to compare"
|
|
411
|
+
},
|
|
412
|
+
"qrisp": {
|
|
413
|
+
"status": "supported"
|
|
414
|
+
},
|
|
415
|
+
"cirq": {
|
|
416
|
+
"status": "supported"
|
|
417
|
+
},
|
|
418
|
+
"braket": {
|
|
419
|
+
"status": "supported"
|
|
420
|
+
},
|
|
421
|
+
"pennylane": {
|
|
422
|
+
"status": "supported"
|
|
423
|
+
},
|
|
424
|
+
"cudaq": {
|
|
425
|
+
"status": "supported"
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
"controls": [
|
|
429
|
+
"CRA-INTEG-01",
|
|
430
|
+
"QBOM-01",
|
|
431
|
+
"QNT-09"
|
|
432
|
+
],
|
|
433
|
+
"requirements": {
|
|
434
|
+
"eu-cra": [
|
|
435
|
+
"CRA-I-3d",
|
|
436
|
+
"CRA-II-1"
|
|
437
|
+
],
|
|
438
|
+
"eu-ai-act-quantum": [
|
|
439
|
+
"AIA-11",
|
|
440
|
+
"AIA-15a",
|
|
441
|
+
"AIA-15b"
|
|
442
|
+
]
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"id": "prove_equivalence",
|
|
447
|
+
"summary": "Formally prove the compiled circuit computes the same function as the source (mqt.qcec).",
|
|
448
|
+
"provider": "sdk",
|
|
449
|
+
"owner": "MOD-08",
|
|
450
|
+
"opt_in": true,
|
|
451
|
+
"how": {
|
|
452
|
+
"cli": "quantbom certify --equivalence",
|
|
453
|
+
"sdk": "certify(..., equivalence=True)",
|
|
454
|
+
"install": "pip install 'quantbom[verify]'"
|
|
455
|
+
},
|
|
456
|
+
"requires": [
|
|
457
|
+
"mqt.qcec"
|
|
458
|
+
],
|
|
459
|
+
"limits": "Comfortable to roughly 20-30 qubits; beyond, or on timeout, the verdict is inconclusive (N-A). Dynamic circuits are checked with QCEC's dynamic-circuit transformation; a circuit QCEC cannot handle is `unsupported` (N-A), never an aborted collection. QCEC's dynamic-circuit transformation needs every measured qubit measured once and not acted on afterwards (reset-and-reuse is fine); a qubit measured then reused is `unsupported` (N-A) with QCEC's reason. A `not_equivalent` on a circuit whose measurements are all final is re-checked for observational equivalence (identical measurement statistics, QCEC partial equivalence); the kind of equivalence is evidence.",
|
|
460
|
+
"evidence": [
|
|
461
|
+
"secqdevops:equivalence-ref",
|
|
462
|
+
"secqdevops:equivalence-sha256",
|
|
463
|
+
"secqdevops:equivalence-verdict",
|
|
464
|
+
"secqdevops:equivalence-tool",
|
|
465
|
+
"secqdevops:equivalence-kind"
|
|
466
|
+
],
|
|
467
|
+
"framework_status": {
|
|
468
|
+
"qiskit": {
|
|
469
|
+
"status": "supported"
|
|
470
|
+
},
|
|
471
|
+
"qrisp": {
|
|
472
|
+
"status": "supported"
|
|
473
|
+
},
|
|
474
|
+
"cirq": {
|
|
475
|
+
"status": "supported"
|
|
476
|
+
},
|
|
477
|
+
"braket": {
|
|
478
|
+
"status": "supported"
|
|
479
|
+
},
|
|
480
|
+
"pennylane": {
|
|
481
|
+
"status": "supported"
|
|
482
|
+
},
|
|
483
|
+
"cudaq": {
|
|
484
|
+
"status": "supported"
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
"controls": [
|
|
488
|
+
"CRA-INTEG-01",
|
|
489
|
+
"QBOM-01",
|
|
490
|
+
"QNT-05"
|
|
491
|
+
],
|
|
492
|
+
"requirements": {
|
|
493
|
+
"eu-cra": [
|
|
494
|
+
"CRA-I-3d",
|
|
495
|
+
"CRA-II-1"
|
|
496
|
+
],
|
|
497
|
+
"eu-ai-act-quantum": [
|
|
498
|
+
"AIA-11",
|
|
499
|
+
"AIA-15a",
|
|
500
|
+
"AIA-15b"
|
|
501
|
+
]
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"id": "bind_backend",
|
|
506
|
+
"summary": "Bind the backend target and a calibration snapshot, both hash-verified.",
|
|
507
|
+
"provider": "sdk",
|
|
508
|
+
"owner": "MOD-08",
|
|
509
|
+
"opt_in": false,
|
|
510
|
+
"how": {
|
|
511
|
+
"cli": "quantbom certify --backend generic",
|
|
512
|
+
"sdk": "certify(..., backend='generic')",
|
|
513
|
+
"install": "pip install 'quantbom[sim]' for noise and dynamic circuits"
|
|
514
|
+
},
|
|
515
|
+
"limits": "Backends: `basic` (local ideal simulator; qiskit-aer for dynamic circuits), `generic` (Qiskit GenericBackendV2 — a synthetic, seeded device; its noise is simulated only with qiskit-aer, and the evidence says so), `ibm` (real hardware with credentials). Locally produced evidence always records execution-target `simulator`.",
|
|
516
|
+
"notes": "The snapshot records its capture time; with the provider's calibration_last_update the age at the run is evidence, bound to the snapshot. QNT-03 is N-A when the calibration was older than 24 h at the run (policy).",
|
|
517
|
+
"evidence": [
|
|
518
|
+
"secqdevops:backend-provider",
|
|
519
|
+
"secqdevops:backend-name",
|
|
520
|
+
"secqdevops:backend-target-ref",
|
|
521
|
+
"secqdevops:backend-target-sha256",
|
|
522
|
+
"secqdevops:backend-target-layer",
|
|
523
|
+
"secqdevops:calibration-ref",
|
|
524
|
+
"secqdevops:calibration-sha256",
|
|
525
|
+
"secqdevops:execution-mode",
|
|
526
|
+
"secqdevops:execution-target",
|
|
527
|
+
"secqdevops:calibration-captured-at",
|
|
528
|
+
"secqdevops:calibration-age-hours"
|
|
529
|
+
],
|
|
530
|
+
"framework_status": {
|
|
531
|
+
"qiskit": {
|
|
532
|
+
"status": "supported"
|
|
533
|
+
},
|
|
534
|
+
"qrisp": {
|
|
535
|
+
"status": "supported"
|
|
536
|
+
},
|
|
537
|
+
"cirq": {
|
|
538
|
+
"status": "supported"
|
|
539
|
+
},
|
|
540
|
+
"braket": {
|
|
541
|
+
"status": "supported"
|
|
542
|
+
},
|
|
543
|
+
"pennylane": {
|
|
544
|
+
"status": "supported"
|
|
545
|
+
},
|
|
546
|
+
"cudaq": {
|
|
547
|
+
"status": "supported"
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
"controls": [
|
|
551
|
+
"CRA-INTEG-01",
|
|
552
|
+
"QBOM-01",
|
|
553
|
+
"QNT-03",
|
|
554
|
+
"QNT-04"
|
|
555
|
+
],
|
|
556
|
+
"requirements": {
|
|
557
|
+
"eu-cra": [
|
|
558
|
+
"CRA-I-1",
|
|
559
|
+
"CRA-I-3d",
|
|
560
|
+
"CRA-II-1"
|
|
561
|
+
],
|
|
562
|
+
"eu-ai-act-quantum": [
|
|
563
|
+
"AIA-11",
|
|
564
|
+
"AIA-12",
|
|
565
|
+
"AIA-15b"
|
|
566
|
+
]
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"id": "disclose_error_handling",
|
|
571
|
+
"summary": "Record what the backend reports about error mitigation and suppression, as a hash-bound document with a bound status.",
|
|
572
|
+
"provider": "sdk",
|
|
573
|
+
"owner": "MOD-08",
|
|
574
|
+
"opt_in": false,
|
|
575
|
+
"limits": "The disclosure is what the provider reports (local simulators: raw counts, no mitigation; IBM SamplerV2: raw counts, dynamical decoupling and twirling listed when enabled). A backend that reports nothing yields `unknown` and QNT-08 N-A.",
|
|
576
|
+
"evidence": [
|
|
577
|
+
"secqdevops:error-handling-ref",
|
|
578
|
+
"secqdevops:error-handling-sha256",
|
|
579
|
+
"secqdevops:error-mitigation"
|
|
580
|
+
],
|
|
581
|
+
"framework_status": {
|
|
582
|
+
"qiskit": {
|
|
583
|
+
"status": "supported"
|
|
584
|
+
},
|
|
585
|
+
"qrisp": {
|
|
586
|
+
"status": "supported"
|
|
587
|
+
},
|
|
588
|
+
"cirq": {
|
|
589
|
+
"status": "supported"
|
|
590
|
+
},
|
|
591
|
+
"braket": {
|
|
592
|
+
"status": "supported"
|
|
593
|
+
},
|
|
594
|
+
"pennylane": {
|
|
595
|
+
"status": "supported"
|
|
596
|
+
},
|
|
597
|
+
"cudaq": {
|
|
598
|
+
"status": "supported"
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
"controls": [
|
|
602
|
+
"CRA-INTEG-01",
|
|
603
|
+
"QBOM-01",
|
|
604
|
+
"QNT-08"
|
|
605
|
+
],
|
|
606
|
+
"requirements": {
|
|
607
|
+
"eu-cra": [
|
|
608
|
+
"CRA-I-1",
|
|
609
|
+
"CRA-I-3d",
|
|
610
|
+
"CRA-II-1"
|
|
611
|
+
],
|
|
612
|
+
"eu-ai-act-quantum": [
|
|
613
|
+
"AIA-11",
|
|
614
|
+
"AIA-13",
|
|
615
|
+
"AIA-15a",
|
|
616
|
+
"AIA-15b"
|
|
617
|
+
]
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"id": "execute",
|
|
622
|
+
"summary": "Run the circuit and bind the job receipt.",
|
|
623
|
+
"provider": "sdk",
|
|
624
|
+
"owner": "MOD-08",
|
|
625
|
+
"opt_in": false,
|
|
626
|
+
"notes": "result-summary.json (measured counts) is hash-bound since harness 0.7.0: CRA-INTEG-01 re-derives the declared TVD and verdict from it and the hash-verified expectation, and QBOM-BENCH-02 is N-A when the summary carries no digest (bundles from older SDKs). A run that cannot happen (a dynamic circuit without qiskit-aer, a failed simulation) is recorded with its status and reason and reported `unsupported`; QNT-04 is then N-A and QBOM-BENCH-02 is not judged (K0). A hardware claim must carry the provider's job id.",
|
|
627
|
+
"evidence": [
|
|
628
|
+
"secqdevops:runtime-job-id",
|
|
629
|
+
"secqdevops:runtime-job-ref",
|
|
630
|
+
"secqdevops:runtime-job-sha256",
|
|
631
|
+
"secqdevops:runtime-job-layer",
|
|
632
|
+
"secqdevops:runtime-session-id",
|
|
633
|
+
"secqdevops:runtime-job-status",
|
|
634
|
+
"secqdevops:provider-job-id",
|
|
635
|
+
"secqdevops:result-summary-ref",
|
|
636
|
+
"secqdevops:result-summary-sha256"
|
|
637
|
+
],
|
|
638
|
+
"framework_status": {
|
|
639
|
+
"qiskit": {
|
|
640
|
+
"status": "supported"
|
|
641
|
+
},
|
|
642
|
+
"qrisp": {
|
|
643
|
+
"status": "supported"
|
|
644
|
+
},
|
|
645
|
+
"cirq": {
|
|
646
|
+
"status": "supported"
|
|
647
|
+
},
|
|
648
|
+
"braket": {
|
|
649
|
+
"status": "supported"
|
|
650
|
+
},
|
|
651
|
+
"pennylane": {
|
|
652
|
+
"status": "supported"
|
|
653
|
+
},
|
|
654
|
+
"cudaq": {
|
|
655
|
+
"status": "supported"
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
"controls": [
|
|
659
|
+
"CRA-INTEG-01",
|
|
660
|
+
"QBOM-01",
|
|
661
|
+
"QNT-04",
|
|
662
|
+
"QBOM-BENCH-02",
|
|
663
|
+
"QNT-08",
|
|
664
|
+
"QNT-09"
|
|
665
|
+
],
|
|
666
|
+
"requirements": {
|
|
667
|
+
"eu-cra": [
|
|
668
|
+
"CRA-I-1",
|
|
669
|
+
"CRA-I-3d",
|
|
670
|
+
"CRA-II-1",
|
|
671
|
+
"CRA-II-3"
|
|
672
|
+
],
|
|
673
|
+
"eu-ai-act-quantum": [
|
|
674
|
+
"AIA-11",
|
|
675
|
+
"AIA-12",
|
|
676
|
+
"AIA-13",
|
|
677
|
+
"AIA-15a",
|
|
678
|
+
"AIA-15b"
|
|
679
|
+
]
|
|
680
|
+
}
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
"id": "record_provenance",
|
|
684
|
+
"summary": "Record the build provenance and a manifest-digest record.",
|
|
685
|
+
"provider": "sdk",
|
|
686
|
+
"owner": "MOD-08",
|
|
687
|
+
"opt_in": false,
|
|
688
|
+
"notes": "The collector's signature-ref points to an UNSIGNED placeholder (signature_type manifest-digest/unsigned). CRA-ESR-04 (H3) and QNT-04 (Phase A, harness 0.7.0) report it as N-A unless a real signature (signing-pubkey-ref, written by sign_evidence.py and verified by CRA-SIGN-01) is present.",
|
|
689
|
+
"evidence": [
|
|
690
|
+
"secqdevops:provenance-ref",
|
|
691
|
+
"secqdevops:signature-ref"
|
|
692
|
+
],
|
|
693
|
+
"framework_status": {
|
|
694
|
+
"qiskit": {
|
|
695
|
+
"status": "supported"
|
|
696
|
+
},
|
|
697
|
+
"qrisp": {
|
|
698
|
+
"status": "supported"
|
|
699
|
+
},
|
|
700
|
+
"cirq": {
|
|
701
|
+
"status": "supported"
|
|
702
|
+
},
|
|
703
|
+
"braket": {
|
|
704
|
+
"status": "supported"
|
|
705
|
+
},
|
|
706
|
+
"pennylane": {
|
|
707
|
+
"status": "supported"
|
|
708
|
+
},
|
|
709
|
+
"cudaq": {
|
|
710
|
+
"status": "supported"
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
"controls": [
|
|
714
|
+
"CRA-ESR-04",
|
|
715
|
+
"CRA-SIGN-01",
|
|
716
|
+
"QNT-04"
|
|
717
|
+
],
|
|
718
|
+
"requirements": {
|
|
719
|
+
"eu-cra": [
|
|
720
|
+
"CRA-I-1",
|
|
721
|
+
"CRA-I-3b",
|
|
722
|
+
"CRA-I-3d",
|
|
723
|
+
"CRA-II-1",
|
|
724
|
+
"CRA-II-7"
|
|
725
|
+
],
|
|
726
|
+
"eu-ai-act-quantum": [
|
|
727
|
+
"AIA-11",
|
|
728
|
+
"AIA-12",
|
|
729
|
+
"AIA-15b"
|
|
730
|
+
]
|
|
731
|
+
}
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
"id": "benchmark",
|
|
735
|
+
"summary": "Record circuit metrics and a hash-verified benchmark report (Roadmap §8.5).",
|
|
736
|
+
"provider": "sdk",
|
|
737
|
+
"owner": "MOD-08",
|
|
738
|
+
"opt_in": false,
|
|
739
|
+
"evidence": [
|
|
740
|
+
"secqdevops:benchmark-ref",
|
|
741
|
+
"secqdevops:benchmark-sha256",
|
|
742
|
+
"secqdevops:qubit-count",
|
|
743
|
+
"secqdevops:circuit-depth",
|
|
744
|
+
"secqdevops:gate-count",
|
|
745
|
+
"secqdevops:two-qubit-depth",
|
|
746
|
+
"secqdevops:t-depth",
|
|
747
|
+
"secqdevops:cnot-depth"
|
|
748
|
+
],
|
|
749
|
+
"framework_status": {
|
|
750
|
+
"qiskit": {
|
|
751
|
+
"status": "supported"
|
|
752
|
+
},
|
|
753
|
+
"qrisp": {
|
|
754
|
+
"status": "supported"
|
|
755
|
+
},
|
|
756
|
+
"cirq": {
|
|
757
|
+
"status": "supported"
|
|
758
|
+
},
|
|
759
|
+
"braket": {
|
|
760
|
+
"status": "supported"
|
|
761
|
+
},
|
|
762
|
+
"pennylane": {
|
|
763
|
+
"status": "supported"
|
|
764
|
+
},
|
|
765
|
+
"cudaq": {
|
|
766
|
+
"status": "supported"
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
"controls": [
|
|
770
|
+
"CRA-INTEG-01",
|
|
771
|
+
"QBOM-01",
|
|
772
|
+
"QBOM-BENCH-01"
|
|
773
|
+
],
|
|
774
|
+
"requirements": {
|
|
775
|
+
"eu-cra": [
|
|
776
|
+
"CRA-I-1",
|
|
777
|
+
"CRA-I-3d",
|
|
778
|
+
"CRA-II-1",
|
|
779
|
+
"CRA-II-3"
|
|
780
|
+
],
|
|
781
|
+
"eu-ai-act-quantum": [
|
|
782
|
+
"AIA-11",
|
|
783
|
+
"AIA-15a",
|
|
784
|
+
"AIA-15b"
|
|
785
|
+
]
|
|
786
|
+
}
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
"id": "check_results",
|
|
790
|
+
"summary": "Compare measured outcomes to declared expected results, read in the framework's own bit order, with the sampling error of the comparison; undecided when the shots cannot decide the tolerance.",
|
|
791
|
+
"provider": "sdk",
|
|
792
|
+
"owner": "MOD-08",
|
|
793
|
+
"opt_in": true,
|
|
794
|
+
"how": {
|
|
795
|
+
"cli": "quantbom certify --expect 0101=1.0 --tolerance 0.05 --expected-order native",
|
|
796
|
+
"sdk": "certify(..., expected={'0101': 1.0}, tolerance=0.05, expected_order='native')"
|
|
797
|
+
},
|
|
798
|
+
"limits": "Native bit order on a translated framework measuring into several classical registers is rejected; declare in Qiskit order there. Shots are sized for the declared tolerance at 95% confidence (Weissman bound, outcomes outside the declared support collapsed into one class), capped at 65,536; QUANTBOM_SHOTS overrides and is recorded.",
|
|
799
|
+
"evidence": [
|
|
800
|
+
"secqdevops:expected-distribution-ref",
|
|
801
|
+
"secqdevops:expected-distribution-sha256",
|
|
802
|
+
"secqdevops:result-tvd",
|
|
803
|
+
"secqdevops:result-tolerance",
|
|
804
|
+
"secqdevops:result-fidelity-verdict",
|
|
805
|
+
"secqdevops:result-confidence",
|
|
806
|
+
"secqdevops:result-sampling-error",
|
|
807
|
+
"secqdevops:result-shots-required"
|
|
808
|
+
],
|
|
809
|
+
"framework_status": {
|
|
810
|
+
"qiskit": {
|
|
811
|
+
"status": "supported"
|
|
812
|
+
},
|
|
813
|
+
"qrisp": {
|
|
814
|
+
"status": "supported"
|
|
815
|
+
},
|
|
816
|
+
"cirq": {
|
|
817
|
+
"status": "supported"
|
|
818
|
+
},
|
|
819
|
+
"braket": {
|
|
820
|
+
"status": "supported"
|
|
821
|
+
},
|
|
822
|
+
"pennylane": {
|
|
823
|
+
"status": "supported"
|
|
824
|
+
},
|
|
825
|
+
"cudaq": {
|
|
826
|
+
"status": "supported"
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
"controls": [
|
|
830
|
+
"CRA-INTEG-01",
|
|
831
|
+
"QBOM-01",
|
|
832
|
+
"QBOM-BENCH-02"
|
|
833
|
+
],
|
|
834
|
+
"requirements": {
|
|
835
|
+
"eu-cra": [
|
|
836
|
+
"CRA-I-3d",
|
|
837
|
+
"CRA-II-1",
|
|
838
|
+
"CRA-II-3"
|
|
839
|
+
],
|
|
840
|
+
"eu-ai-act-quantum": [
|
|
841
|
+
"AIA-11",
|
|
842
|
+
"AIA-15a",
|
|
843
|
+
"AIA-15b"
|
|
844
|
+
]
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"id": "check_qir",
|
|
849
|
+
"summary": "Check the QIR derived from the source program against the program and the measured counts (second compiler, second check).",
|
|
850
|
+
"provider": "sdk",
|
|
851
|
+
"owner": "MOD-08",
|
|
852
|
+
"opt_in": false,
|
|
853
|
+
"limits": "Statistical where it must be: qirrunner's sample is compared with the measured counts at a tolerance of max(0.1, 1.5*sqrt(outcomes/shots)), recorded in the report. Qubit and result counts are exact. Gate inventories are recorded, not compared (the QDK rewrites p, u, cp). Needs the source circuit to declare measurements (otherwise `inconclusive`, N-A) and the QIR output order to be pinned by the probe.",
|
|
854
|
+
"evidence": [
|
|
855
|
+
"secqdevops:qir-consistency-ref",
|
|
856
|
+
"secqdevops:qir-consistency-sha256",
|
|
857
|
+
"secqdevops:qir-consistency-verdict"
|
|
858
|
+
],
|
|
859
|
+
"framework_status": {
|
|
860
|
+
"qiskit": {
|
|
861
|
+
"status": "supported"
|
|
862
|
+
},
|
|
863
|
+
"qrisp": {
|
|
864
|
+
"status": "supported"
|
|
865
|
+
},
|
|
866
|
+
"cirq": {
|
|
867
|
+
"status": "supported"
|
|
868
|
+
},
|
|
869
|
+
"braket": {
|
|
870
|
+
"status": "supported"
|
|
871
|
+
},
|
|
872
|
+
"pennylane": {
|
|
873
|
+
"status": "supported"
|
|
874
|
+
},
|
|
875
|
+
"cudaq": {
|
|
876
|
+
"status": "supported"
|
|
877
|
+
}
|
|
878
|
+
},
|
|
879
|
+
"controls": [
|
|
880
|
+
"CRA-INTEG-01",
|
|
881
|
+
"QBOM-01",
|
|
882
|
+
"QNT-07"
|
|
883
|
+
],
|
|
884
|
+
"requirements": {
|
|
885
|
+
"eu-cra": [
|
|
886
|
+
"CRA-I-3d",
|
|
887
|
+
"CRA-II-1"
|
|
888
|
+
],
|
|
889
|
+
"eu-ai-act-quantum": [
|
|
890
|
+
"AIA-11",
|
|
891
|
+
"AIA-15a",
|
|
892
|
+
"AIA-15b"
|
|
893
|
+
]
|
|
894
|
+
}
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"id": "scan_environment",
|
|
898
|
+
"summary": "Merge an environment SBOM (syft) and scan it for known vulnerabilities (grype).",
|
|
899
|
+
"provider": "sdk",
|
|
900
|
+
"owner": "MOD-08",
|
|
901
|
+
"opt_in": true,
|
|
902
|
+
"how": {
|
|
903
|
+
"cli": "quantbom certify --environment",
|
|
904
|
+
"sdk": "certify(..., environment=True)",
|
|
905
|
+
"install": "syft on PATH (or --syft-sbom FILE with a pre-generated CycloneDX SBOM)"
|
|
906
|
+
},
|
|
907
|
+
"requires": [
|
|
908
|
+
"syft",
|
|
909
|
+
"grype"
|
|
910
|
+
],
|
|
911
|
+
"evidence": [],
|
|
912
|
+
"framework_status": {
|
|
913
|
+
"qiskit": {
|
|
914
|
+
"status": "supported"
|
|
915
|
+
},
|
|
916
|
+
"qrisp": {
|
|
917
|
+
"status": "supported"
|
|
918
|
+
},
|
|
919
|
+
"cirq": {
|
|
920
|
+
"status": "supported"
|
|
921
|
+
},
|
|
922
|
+
"braket": {
|
|
923
|
+
"status": "supported"
|
|
924
|
+
},
|
|
925
|
+
"pennylane": {
|
|
926
|
+
"status": "supported"
|
|
927
|
+
},
|
|
928
|
+
"cudaq": {
|
|
929
|
+
"status": "supported"
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
"controls": [
|
|
933
|
+
"CRA-ESR-02",
|
|
934
|
+
"CRA-ESR-03",
|
|
935
|
+
"CRA-ESR-05"
|
|
936
|
+
],
|
|
937
|
+
"requirements": {
|
|
938
|
+
"eu-cra": [
|
|
939
|
+
"CRA-I-2",
|
|
940
|
+
"CRA-I-3b",
|
|
941
|
+
"CRA-II-1"
|
|
942
|
+
],
|
|
943
|
+
"eu-ai-act-quantum": [
|
|
944
|
+
"AIA-11",
|
|
945
|
+
"AIA-15b"
|
|
946
|
+
]
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"id": "protect",
|
|
951
|
+
"summary": "Strict privacy: withhold circuit IR, record digests as client-attested.",
|
|
952
|
+
"provider": "sdk",
|
|
953
|
+
"owner": "MOD-08",
|
|
954
|
+
"opt_in": true,
|
|
955
|
+
"how": {
|
|
956
|
+
"cli": "quantbom certify --privacy strict",
|
|
957
|
+
"sdk": "certify(..., privacy='strict')"
|
|
958
|
+
},
|
|
959
|
+
"evidence": [
|
|
960
|
+
"secqdevops:privacy-mode"
|
|
961
|
+
],
|
|
962
|
+
"framework_status": {
|
|
963
|
+
"qiskit": {
|
|
964
|
+
"status": "supported"
|
|
965
|
+
},
|
|
966
|
+
"qrisp": {
|
|
967
|
+
"status": "supported"
|
|
968
|
+
},
|
|
969
|
+
"cirq": {
|
|
970
|
+
"status": "supported"
|
|
971
|
+
},
|
|
972
|
+
"braket": {
|
|
973
|
+
"status": "supported"
|
|
974
|
+
},
|
|
975
|
+
"pennylane": {
|
|
976
|
+
"status": "supported"
|
|
977
|
+
},
|
|
978
|
+
"cudaq": {
|
|
979
|
+
"status": "supported"
|
|
980
|
+
}
|
|
981
|
+
},
|
|
982
|
+
"controls": [
|
|
983
|
+
"CRA-INTEG-01",
|
|
984
|
+
"QBOM-01"
|
|
985
|
+
],
|
|
986
|
+
"requirements": {
|
|
987
|
+
"eu-cra": [
|
|
988
|
+
"CRA-I-3d",
|
|
989
|
+
"CRA-II-1"
|
|
990
|
+
],
|
|
991
|
+
"eu-ai-act-quantum": [
|
|
992
|
+
"AIA-11",
|
|
993
|
+
"AIA-15b"
|
|
994
|
+
]
|
|
995
|
+
}
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"id": "sign",
|
|
999
|
+
"summary": "Producer signature: Ed25519 / in-toto DSSE over the evidence, by the releasing organisation — from the wheel (quantbom sign) or the repository tool.",
|
|
1000
|
+
"provider": "tool",
|
|
1001
|
+
"owner": "MOD-08",
|
|
1002
|
+
"opt_in": false,
|
|
1003
|
+
"how": {
|
|
1004
|
+
"cli": "quantbom sign --bundle {bundle}",
|
|
1005
|
+
"sdk": "certify(..., sign=True)",
|
|
1006
|
+
"install": "pip install 'quantbom[signing]'",
|
|
1007
|
+
"commands": [
|
|
1008
|
+
"python sign_evidence.py keygen --key-dir {keys}",
|
|
1009
|
+
"python sign_evidence.py sign --sbom {bundle}/sbom.cdx.json --private-key {keys}/signing.key --out-dir {bundle}"
|
|
1010
|
+
],
|
|
1011
|
+
"placeholders": {
|
|
1012
|
+
"bundle": "evidence bundle from `quantbom collect`",
|
|
1013
|
+
"keys": "directory holding the release signing key"
|
|
1014
|
+
},
|
|
1015
|
+
"note": "one-time `quantbom keygen` makes the key; `quantbom certify ... --sign` collects, signs and certifies in one step"
|
|
1016
|
+
},
|
|
1017
|
+
"notes": "Role 'producer' (quantbom sign, or sign_evidence.py --role producer, the default); the two make the same attestation and either verifies in the gate. CRA-SIGN-01 rests on this signature and fails without it; the service's countersignature is a receipt, never a substitute (hybrid model step 3, 17 Oct 2026).",
|
|
1018
|
+
"evidence": [
|
|
1019
|
+
"secqdevops:signature-ref",
|
|
1020
|
+
"secqdevops:signing-pubkey-ref",
|
|
1021
|
+
"secqdevops:signing-key-id"
|
|
1022
|
+
],
|
|
1023
|
+
"framework_status": {
|
|
1024
|
+
"qiskit": {
|
|
1025
|
+
"status": "supported"
|
|
1026
|
+
},
|
|
1027
|
+
"qrisp": {
|
|
1028
|
+
"status": "supported"
|
|
1029
|
+
},
|
|
1030
|
+
"cirq": {
|
|
1031
|
+
"status": "supported"
|
|
1032
|
+
},
|
|
1033
|
+
"braket": {
|
|
1034
|
+
"status": "supported"
|
|
1035
|
+
},
|
|
1036
|
+
"pennylane": {
|
|
1037
|
+
"status": "supported"
|
|
1038
|
+
},
|
|
1039
|
+
"cudaq": {
|
|
1040
|
+
"status": "supported"
|
|
1041
|
+
}
|
|
1042
|
+
},
|
|
1043
|
+
"controls": [
|
|
1044
|
+
"CRA-ESR-04",
|
|
1045
|
+
"CRA-SIGN-01",
|
|
1046
|
+
"QNT-04"
|
|
1047
|
+
],
|
|
1048
|
+
"requirements": {
|
|
1049
|
+
"eu-cra": [
|
|
1050
|
+
"CRA-I-1",
|
|
1051
|
+
"CRA-I-3b",
|
|
1052
|
+
"CRA-I-3d",
|
|
1053
|
+
"CRA-II-1",
|
|
1054
|
+
"CRA-II-7"
|
|
1055
|
+
],
|
|
1056
|
+
"eu-ai-act-quantum": [
|
|
1057
|
+
"AIA-11",
|
|
1058
|
+
"AIA-12",
|
|
1059
|
+
"AIA-15b"
|
|
1060
|
+
]
|
|
1061
|
+
}
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
"id": "countersign",
|
|
1065
|
+
"summary": "Service countersignature over the evidence as received — a timestamped receipt under its own properties; never replaces the producer's signature and never satisfies CRA-SIGN-01 on its own.",
|
|
1066
|
+
"provider": "service",
|
|
1067
|
+
"owner": "MOD-08",
|
|
1068
|
+
"opt_in": false,
|
|
1069
|
+
"how": {
|
|
1070
|
+
"note": "performed by the certifying service on receipt when MOD08_SIGNING_KEY is configured (sign_evidence.sign(role='service')); nothing for the producer to do"
|
|
1071
|
+
},
|
|
1072
|
+
"evidence": [
|
|
1073
|
+
"secqdevops:service-attestation-ref",
|
|
1074
|
+
"secqdevops:service-signing-pubkey-ref",
|
|
1075
|
+
"secqdevops:service-signing-key-id"
|
|
1076
|
+
],
|
|
1077
|
+
"framework_status": {
|
|
1078
|
+
"qiskit": {
|
|
1079
|
+
"status": "supported"
|
|
1080
|
+
},
|
|
1081
|
+
"qrisp": {
|
|
1082
|
+
"status": "supported"
|
|
1083
|
+
},
|
|
1084
|
+
"cirq": {
|
|
1085
|
+
"status": "supported"
|
|
1086
|
+
},
|
|
1087
|
+
"braket": {
|
|
1088
|
+
"status": "supported"
|
|
1089
|
+
},
|
|
1090
|
+
"pennylane": {
|
|
1091
|
+
"status": "supported"
|
|
1092
|
+
},
|
|
1093
|
+
"cudaq": {
|
|
1094
|
+
"status": "supported"
|
|
1095
|
+
}
|
|
1096
|
+
},
|
|
1097
|
+
"controls": [
|
|
1098
|
+
"CRA-SIGN-01"
|
|
1099
|
+
],
|
|
1100
|
+
"requirements": {
|
|
1101
|
+
"eu-cra": [
|
|
1102
|
+
"CRA-I-3b",
|
|
1103
|
+
"CRA-I-3d",
|
|
1104
|
+
"CRA-II-7"
|
|
1105
|
+
],
|
|
1106
|
+
"eu-ai-act-quantum": [
|
|
1107
|
+
"AIA-15b"
|
|
1108
|
+
]
|
|
1109
|
+
}
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
"id": "assess_crypto",
|
|
1113
|
+
"summary": "Cryptographic inventory (CBOM) and post-quantum migration readiness.",
|
|
1114
|
+
"provider": "tool",
|
|
1115
|
+
"owner": "MOD-03/MOD-09",
|
|
1116
|
+
"opt_in": true,
|
|
1117
|
+
"how": {
|
|
1118
|
+
"cli": "quantbom attest crypto --bundle {bundle}",
|
|
1119
|
+
"commands": [
|
|
1120
|
+
"python cbom_agility.py assess --cbom {bundle}/crypto/cbom.cdx.json --report-out {bundle}/crypto/cbom-agility.json --inject-sbom {bundle}/sbom.cdx.json"
|
|
1121
|
+
],
|
|
1122
|
+
"placeholders": {
|
|
1123
|
+
"bundle": "evidence bundle from `quantbom collect`; the CBOM is read from crypto/cbom.cdx.json inside it (`quantbom attest crypto --cbom FILE` copies one there)"
|
|
1124
|
+
}
|
|
1125
|
+
},
|
|
1126
|
+
"evidence": [
|
|
1127
|
+
"secqdevops:cbom-ref",
|
|
1128
|
+
"secqdevops:cbom-sha256",
|
|
1129
|
+
"secqdevops:crypto-agility-ref",
|
|
1130
|
+
"secqdevops:crypto-agility-sha256",
|
|
1131
|
+
"secqdevops:crypto-agility-score",
|
|
1132
|
+
"secqdevops:crypto-migration-readiness"
|
|
1133
|
+
],
|
|
1134
|
+
"framework_status": {
|
|
1135
|
+
"qiskit": {
|
|
1136
|
+
"status": "external",
|
|
1137
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1138
|
+
},
|
|
1139
|
+
"qrisp": {
|
|
1140
|
+
"status": "external",
|
|
1141
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1142
|
+
},
|
|
1143
|
+
"cirq": {
|
|
1144
|
+
"status": "external",
|
|
1145
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1146
|
+
},
|
|
1147
|
+
"braket": {
|
|
1148
|
+
"status": "external",
|
|
1149
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1150
|
+
},
|
|
1151
|
+
"pennylane": {
|
|
1152
|
+
"status": "external",
|
|
1153
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1154
|
+
},
|
|
1155
|
+
"cudaq": {
|
|
1156
|
+
"status": "external",
|
|
1157
|
+
"reason": "evidence supplied by MOD-03/MOD-09; framework-independent"
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
"controls": [
|
|
1161
|
+
"CRA-ESR-06",
|
|
1162
|
+
"CRA-INTEG-01",
|
|
1163
|
+
"CRA-CRYPTO-01"
|
|
1164
|
+
],
|
|
1165
|
+
"requirements": {
|
|
1166
|
+
"eu-cra": [
|
|
1167
|
+
"CRA-I-3c",
|
|
1168
|
+
"CRA-I-3d",
|
|
1169
|
+
"CRA-II-3"
|
|
1170
|
+
],
|
|
1171
|
+
"eu-ai-act-quantum": [
|
|
1172
|
+
"AIA-15b"
|
|
1173
|
+
]
|
|
1174
|
+
}
|
|
1175
|
+
},
|
|
1176
|
+
{
|
|
1177
|
+
"id": "prove_constant_time",
|
|
1178
|
+
"summary": "Side-channel (constant-time) proof for cryptographic components.",
|
|
1179
|
+
"provider": "tool",
|
|
1180
|
+
"owner": "MOD-09",
|
|
1181
|
+
"opt_in": true,
|
|
1182
|
+
"how": {
|
|
1183
|
+
"cli": "quantbom attest constant-time --bundle {bundle} --tool dudect --target {target} --measurements {timings}",
|
|
1184
|
+
"commands": [
|
|
1185
|
+
"python emit_ct_evidence.py --tool dudect --target {target} --measurements {timings} --report-out {bundle}/crypto/ct-proof.json --inject-sbom {bundle}/sbom.cdx.json"
|
|
1186
|
+
],
|
|
1187
|
+
"placeholders": {
|
|
1188
|
+
"bundle": "evidence bundle from `quantbom collect`",
|
|
1189
|
+
"target": "analysed component (purl or symbol)",
|
|
1190
|
+
"timings": "two-column dudect CSV (class,nanoseconds)"
|
|
1191
|
+
}
|
|
1192
|
+
},
|
|
1193
|
+
"evidence": [
|
|
1194
|
+
"secqdevops:ct-proof-ref",
|
|
1195
|
+
"secqdevops:ct-proof-sha256",
|
|
1196
|
+
"secqdevops:ct-target",
|
|
1197
|
+
"secqdevops:ct-tool",
|
|
1198
|
+
"secqdevops:ct-verdict"
|
|
1199
|
+
],
|
|
1200
|
+
"framework_status": {
|
|
1201
|
+
"qiskit": {
|
|
1202
|
+
"status": "external",
|
|
1203
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1204
|
+
},
|
|
1205
|
+
"qrisp": {
|
|
1206
|
+
"status": "external",
|
|
1207
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1208
|
+
},
|
|
1209
|
+
"cirq": {
|
|
1210
|
+
"status": "external",
|
|
1211
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1212
|
+
},
|
|
1213
|
+
"braket": {
|
|
1214
|
+
"status": "external",
|
|
1215
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1216
|
+
},
|
|
1217
|
+
"pennylane": {
|
|
1218
|
+
"status": "external",
|
|
1219
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1220
|
+
},
|
|
1221
|
+
"cudaq": {
|
|
1222
|
+
"status": "external",
|
|
1223
|
+
"reason": "evidence supplied by MOD-09; framework-independent"
|
|
1224
|
+
}
|
|
1225
|
+
},
|
|
1226
|
+
"controls": [
|
|
1227
|
+
"CRA-ESR-06",
|
|
1228
|
+
"CRA-INTEG-01"
|
|
1229
|
+
],
|
|
1230
|
+
"requirements": {
|
|
1231
|
+
"eu-cra": [
|
|
1232
|
+
"CRA-I-3c",
|
|
1233
|
+
"CRA-I-3d",
|
|
1234
|
+
"CRA-II-3"
|
|
1235
|
+
],
|
|
1236
|
+
"eu-ai-act-quantum": [
|
|
1237
|
+
"AIA-15b"
|
|
1238
|
+
]
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
{
|
|
1242
|
+
"id": "attest_tests",
|
|
1243
|
+
"summary": "Security test report from the testing module.",
|
|
1244
|
+
"provider": "tool",
|
|
1245
|
+
"owner": "MOD-05",
|
|
1246
|
+
"opt_in": true,
|
|
1247
|
+
"how": {
|
|
1248
|
+
"cli": "quantbom attest tests --bundle {bundle} --suite {suite} --outcome passed --passed {passed}",
|
|
1249
|
+
"commands": [
|
|
1250
|
+
"python emit_test_evidence.py emit --suite {suite} --outcome passed --passed {passed} --failed 0 --out {bundle}/evidence/mod05/test-report.json --inject-sbom {bundle}/sbom.cdx.json"
|
|
1251
|
+
],
|
|
1252
|
+
"placeholders": {
|
|
1253
|
+
"bundle": "evidence bundle from `quantbom collect`",
|
|
1254
|
+
"suite": "MOD-05 suite name",
|
|
1255
|
+
"passed": "number of passing tests"
|
|
1256
|
+
}
|
|
1257
|
+
},
|
|
1258
|
+
"evidence": [
|
|
1259
|
+
"secqdevops:test-outcome",
|
|
1260
|
+
"secqdevops:test-report-ref",
|
|
1261
|
+
"secqdevops:test-report-sha256"
|
|
1262
|
+
],
|
|
1263
|
+
"framework_status": {
|
|
1264
|
+
"qiskit": {
|
|
1265
|
+
"status": "external",
|
|
1266
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1267
|
+
},
|
|
1268
|
+
"qrisp": {
|
|
1269
|
+
"status": "external",
|
|
1270
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1271
|
+
},
|
|
1272
|
+
"cirq": {
|
|
1273
|
+
"status": "external",
|
|
1274
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1275
|
+
},
|
|
1276
|
+
"braket": {
|
|
1277
|
+
"status": "external",
|
|
1278
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1279
|
+
},
|
|
1280
|
+
"pennylane": {
|
|
1281
|
+
"status": "external",
|
|
1282
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1283
|
+
},
|
|
1284
|
+
"cudaq": {
|
|
1285
|
+
"status": "external",
|
|
1286
|
+
"reason": "evidence supplied by MOD-05; framework-independent"
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
"controls": [
|
|
1290
|
+
"CRA-INTEG-01",
|
|
1291
|
+
"QBOM-01",
|
|
1292
|
+
"MOD05-TEST-01"
|
|
1293
|
+
],
|
|
1294
|
+
"requirements": {
|
|
1295
|
+
"eu-cra": [
|
|
1296
|
+
"CRA-I-3d",
|
|
1297
|
+
"CRA-II-1",
|
|
1298
|
+
"CRA-II-3"
|
|
1299
|
+
],
|
|
1300
|
+
"eu-ai-act-quantum": [
|
|
1301
|
+
"AIA-11",
|
|
1302
|
+
"AIA-15b"
|
|
1303
|
+
]
|
|
1304
|
+
}
|
|
1305
|
+
},
|
|
1306
|
+
{
|
|
1307
|
+
"id": "attest_vulnerability_handling",
|
|
1308
|
+
"summary": "VEX over the release's findings and a coordinated-disclosure policy.",
|
|
1309
|
+
"provider": "tool",
|
|
1310
|
+
"owner": "MOD-07",
|
|
1311
|
+
"opt_in": true,
|
|
1312
|
+
"how": {
|
|
1313
|
+
"cli": "quantbom attest vulns --bundle {bundle} --policy-url {policy_url} --contact {contact}",
|
|
1314
|
+
"commands": [
|
|
1315
|
+
"python emit_vuln_evidence.py emit --sbom {bundle}/sbom.cdx.json --vex-out {bundle}/evidence/vex.cdx.json --cvd-out {bundle}/evidence/cvd-policy.json --cvd-policy-url {policy_url} --cvd-contact {contact} --inject-sbom {bundle}/sbom.cdx.json"
|
|
1316
|
+
],
|
|
1317
|
+
"placeholders": {
|
|
1318
|
+
"bundle": "evidence bundle from `quantbom collect`",
|
|
1319
|
+
"policy_url": "public CVD policy URL",
|
|
1320
|
+
"contact": "security contact (mailto: or URL)"
|
|
1321
|
+
}
|
|
1322
|
+
},
|
|
1323
|
+
"evidence": [
|
|
1324
|
+
"secqdevops:vex-ref",
|
|
1325
|
+
"secqdevops:vex-sha256",
|
|
1326
|
+
"secqdevops:cvd-contact",
|
|
1327
|
+
"secqdevops:cvd-policy-ref",
|
|
1328
|
+
"secqdevops:cvd-policy-sha256"
|
|
1329
|
+
],
|
|
1330
|
+
"framework_status": {
|
|
1331
|
+
"qiskit": {
|
|
1332
|
+
"status": "external",
|
|
1333
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1334
|
+
},
|
|
1335
|
+
"qrisp": {
|
|
1336
|
+
"status": "external",
|
|
1337
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1338
|
+
},
|
|
1339
|
+
"cirq": {
|
|
1340
|
+
"status": "external",
|
|
1341
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1342
|
+
},
|
|
1343
|
+
"braket": {
|
|
1344
|
+
"status": "external",
|
|
1345
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1346
|
+
},
|
|
1347
|
+
"pennylane": {
|
|
1348
|
+
"status": "external",
|
|
1349
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1350
|
+
},
|
|
1351
|
+
"cudaq": {
|
|
1352
|
+
"status": "external",
|
|
1353
|
+
"reason": "evidence supplied by MOD-07; framework-independent"
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
"controls": [
|
|
1357
|
+
"CRA-INTEG-01",
|
|
1358
|
+
"CRA-VULN-01",
|
|
1359
|
+
"CRA-VDP-01"
|
|
1360
|
+
],
|
|
1361
|
+
"requirements": {
|
|
1362
|
+
"eu-cra": [
|
|
1363
|
+
"CRA-I-3d",
|
|
1364
|
+
"CRA-II-2",
|
|
1365
|
+
"CRA-II-5"
|
|
1366
|
+
],
|
|
1367
|
+
"eu-ai-act-quantum": [
|
|
1368
|
+
"AIA-15b"
|
|
1369
|
+
]
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
],
|
|
1373
|
+
"controls": {
|
|
1374
|
+
"CRA-ESR-01": {
|
|
1375
|
+
"fed_by": [
|
|
1376
|
+
"inventory"
|
|
1377
|
+
],
|
|
1378
|
+
"requirements": {
|
|
1379
|
+
"eu-cra": [
|
|
1380
|
+
"CRA-II-1"
|
|
1381
|
+
],
|
|
1382
|
+
"eu-ai-act-quantum": [
|
|
1383
|
+
"AIA-11"
|
|
1384
|
+
]
|
|
1385
|
+
}
|
|
1386
|
+
},
|
|
1387
|
+
"CRA-ESR-02": {
|
|
1388
|
+
"fed_by": [
|
|
1389
|
+
"inventory",
|
|
1390
|
+
"scan_environment"
|
|
1391
|
+
],
|
|
1392
|
+
"requirements": {
|
|
1393
|
+
"eu-cra": [
|
|
1394
|
+
"CRA-I-3b"
|
|
1395
|
+
]
|
|
1396
|
+
}
|
|
1397
|
+
},
|
|
1398
|
+
"CRA-ESR-03": {
|
|
1399
|
+
"fed_by": [
|
|
1400
|
+
"scan_environment"
|
|
1401
|
+
],
|
|
1402
|
+
"requirements": {
|
|
1403
|
+
"eu-cra": [
|
|
1404
|
+
"CRA-I-2"
|
|
1405
|
+
],
|
|
1406
|
+
"eu-ai-act-quantum": [
|
|
1407
|
+
"AIA-15b"
|
|
1408
|
+
]
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
"CRA-ESR-04": {
|
|
1412
|
+
"fed_by": [
|
|
1413
|
+
"record_provenance",
|
|
1414
|
+
"sign"
|
|
1415
|
+
],
|
|
1416
|
+
"requirements": {
|
|
1417
|
+
"eu-cra": [
|
|
1418
|
+
"CRA-II-1"
|
|
1419
|
+
],
|
|
1420
|
+
"eu-ai-act-quantum": [
|
|
1421
|
+
"AIA-11"
|
|
1422
|
+
]
|
|
1423
|
+
}
|
|
1424
|
+
},
|
|
1425
|
+
"CRA-ESR-05": {
|
|
1426
|
+
"fed_by": [
|
|
1427
|
+
"inventory",
|
|
1428
|
+
"scan_environment"
|
|
1429
|
+
],
|
|
1430
|
+
"requirements": {
|
|
1431
|
+
"eu-cra": [
|
|
1432
|
+
"CRA-II-1"
|
|
1433
|
+
],
|
|
1434
|
+
"eu-ai-act-quantum": [
|
|
1435
|
+
"AIA-11"
|
|
1436
|
+
]
|
|
1437
|
+
}
|
|
1438
|
+
},
|
|
1439
|
+
"CRA-ESR-06": {
|
|
1440
|
+
"fed_by": [
|
|
1441
|
+
"assess_crypto",
|
|
1442
|
+
"prove_constant_time"
|
|
1443
|
+
],
|
|
1444
|
+
"requirements": {
|
|
1445
|
+
"eu-cra": [
|
|
1446
|
+
"CRA-I-3c",
|
|
1447
|
+
"CRA-II-3"
|
|
1448
|
+
],
|
|
1449
|
+
"eu-ai-act-quantum": [
|
|
1450
|
+
"AIA-15b"
|
|
1451
|
+
]
|
|
1452
|
+
}
|
|
1453
|
+
},
|
|
1454
|
+
"CRA-INTEG-01": {
|
|
1455
|
+
"fed_by": [
|
|
1456
|
+
"record_outcomes",
|
|
1457
|
+
"capture",
|
|
1458
|
+
"verify_conversion",
|
|
1459
|
+
"compare_native",
|
|
1460
|
+
"prove_equivalence",
|
|
1461
|
+
"bind_backend",
|
|
1462
|
+
"disclose_error_handling",
|
|
1463
|
+
"execute",
|
|
1464
|
+
"benchmark",
|
|
1465
|
+
"check_results",
|
|
1466
|
+
"check_qir",
|
|
1467
|
+
"protect",
|
|
1468
|
+
"assess_crypto",
|
|
1469
|
+
"prove_constant_time",
|
|
1470
|
+
"attest_tests",
|
|
1471
|
+
"attest_vulnerability_handling"
|
|
1472
|
+
],
|
|
1473
|
+
"requirements": {
|
|
1474
|
+
"eu-cra": [
|
|
1475
|
+
"CRA-I-3d"
|
|
1476
|
+
],
|
|
1477
|
+
"eu-ai-act-quantum": [
|
|
1478
|
+
"AIA-15b"
|
|
1479
|
+
]
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1482
|
+
"CRA-CRYPTO-01": {
|
|
1483
|
+
"fed_by": [
|
|
1484
|
+
"assess_crypto"
|
|
1485
|
+
],
|
|
1486
|
+
"requirements": {
|
|
1487
|
+
"eu-cra": [
|
|
1488
|
+
"CRA-I-3c"
|
|
1489
|
+
],
|
|
1490
|
+
"eu-ai-act-quantum": [
|
|
1491
|
+
"AIA-15b"
|
|
1492
|
+
]
|
|
1493
|
+
}
|
|
1494
|
+
},
|
|
1495
|
+
"QBOM-01": {
|
|
1496
|
+
"fed_by": [
|
|
1497
|
+
"inventory",
|
|
1498
|
+
"record_outcomes",
|
|
1499
|
+
"capture",
|
|
1500
|
+
"verify_conversion",
|
|
1501
|
+
"compare_native",
|
|
1502
|
+
"prove_equivalence",
|
|
1503
|
+
"bind_backend",
|
|
1504
|
+
"disclose_error_handling",
|
|
1505
|
+
"execute",
|
|
1506
|
+
"benchmark",
|
|
1507
|
+
"check_results",
|
|
1508
|
+
"check_qir",
|
|
1509
|
+
"protect",
|
|
1510
|
+
"attest_tests"
|
|
1511
|
+
],
|
|
1512
|
+
"requirements": {
|
|
1513
|
+
"eu-cra": [
|
|
1514
|
+
"CRA-II-1"
|
|
1515
|
+
],
|
|
1516
|
+
"eu-ai-act-quantum": [
|
|
1517
|
+
"AIA-11"
|
|
1518
|
+
]
|
|
1519
|
+
}
|
|
1520
|
+
},
|
|
1521
|
+
"CRA-SIGN-01": {
|
|
1522
|
+
"fed_by": [
|
|
1523
|
+
"record_provenance",
|
|
1524
|
+
"sign",
|
|
1525
|
+
"countersign"
|
|
1526
|
+
],
|
|
1527
|
+
"requirements": {
|
|
1528
|
+
"eu-cra": [
|
|
1529
|
+
"CRA-I-3b",
|
|
1530
|
+
"CRA-I-3d",
|
|
1531
|
+
"CRA-II-7"
|
|
1532
|
+
],
|
|
1533
|
+
"eu-ai-act-quantum": [
|
|
1534
|
+
"AIA-15b"
|
|
1535
|
+
]
|
|
1536
|
+
}
|
|
1537
|
+
},
|
|
1538
|
+
"QNT-01": {
|
|
1539
|
+
"fed_by": [
|
|
1540
|
+
"inventory"
|
|
1541
|
+
],
|
|
1542
|
+
"requirements": {
|
|
1543
|
+
"eu-cra": [
|
|
1544
|
+
"CRA-I-1"
|
|
1545
|
+
]
|
|
1546
|
+
}
|
|
1547
|
+
},
|
|
1548
|
+
"QNT-02": {
|
|
1549
|
+
"fed_by": [
|
|
1550
|
+
"capture"
|
|
1551
|
+
],
|
|
1552
|
+
"requirements": {
|
|
1553
|
+
"eu-cra": [
|
|
1554
|
+
"CRA-I-1",
|
|
1555
|
+
"CRA-II-3"
|
|
1556
|
+
]
|
|
1557
|
+
}
|
|
1558
|
+
},
|
|
1559
|
+
"QNT-03": {
|
|
1560
|
+
"fed_by": [
|
|
1561
|
+
"capture",
|
|
1562
|
+
"bind_backend"
|
|
1563
|
+
],
|
|
1564
|
+
"requirements": {
|
|
1565
|
+
"eu-cra": [
|
|
1566
|
+
"CRA-I-1"
|
|
1567
|
+
],
|
|
1568
|
+
"eu-ai-act-quantum": [
|
|
1569
|
+
"AIA-12"
|
|
1570
|
+
]
|
|
1571
|
+
}
|
|
1572
|
+
},
|
|
1573
|
+
"QNT-04": {
|
|
1574
|
+
"fed_by": [
|
|
1575
|
+
"bind_backend",
|
|
1576
|
+
"execute",
|
|
1577
|
+
"record_provenance",
|
|
1578
|
+
"sign"
|
|
1579
|
+
],
|
|
1580
|
+
"requirements": {
|
|
1581
|
+
"eu-cra": [
|
|
1582
|
+
"CRA-I-1"
|
|
1583
|
+
],
|
|
1584
|
+
"eu-ai-act-quantum": [
|
|
1585
|
+
"AIA-12"
|
|
1586
|
+
]
|
|
1587
|
+
}
|
|
1588
|
+
},
|
|
1589
|
+
"QBOM-BENCH-01": {
|
|
1590
|
+
"fed_by": [
|
|
1591
|
+
"inventory",
|
|
1592
|
+
"benchmark"
|
|
1593
|
+
],
|
|
1594
|
+
"requirements": {
|
|
1595
|
+
"eu-cra": [
|
|
1596
|
+
"CRA-I-1",
|
|
1597
|
+
"CRA-II-3"
|
|
1598
|
+
],
|
|
1599
|
+
"eu-ai-act-quantum": [
|
|
1600
|
+
"AIA-15a"
|
|
1601
|
+
]
|
|
1602
|
+
}
|
|
1603
|
+
},
|
|
1604
|
+
"QBOM-BENCH-02": {
|
|
1605
|
+
"fed_by": [
|
|
1606
|
+
"execute",
|
|
1607
|
+
"check_results"
|
|
1608
|
+
],
|
|
1609
|
+
"requirements": {
|
|
1610
|
+
"eu-cra": [
|
|
1611
|
+
"CRA-II-3"
|
|
1612
|
+
],
|
|
1613
|
+
"eu-ai-act-quantum": [
|
|
1614
|
+
"AIA-15a"
|
|
1615
|
+
]
|
|
1616
|
+
}
|
|
1617
|
+
},
|
|
1618
|
+
"QNT-05": {
|
|
1619
|
+
"fed_by": [
|
|
1620
|
+
"capture",
|
|
1621
|
+
"prove_equivalence"
|
|
1622
|
+
],
|
|
1623
|
+
"requirements": {
|
|
1624
|
+
"eu-cra": [
|
|
1625
|
+
"CRA-I-3d"
|
|
1626
|
+
],
|
|
1627
|
+
"eu-ai-act-quantum": [
|
|
1628
|
+
"AIA-15a"
|
|
1629
|
+
]
|
|
1630
|
+
}
|
|
1631
|
+
},
|
|
1632
|
+
"QNT-06": {
|
|
1633
|
+
"fed_by": [
|
|
1634
|
+
"inventory",
|
|
1635
|
+
"capture",
|
|
1636
|
+
"verify_conversion"
|
|
1637
|
+
],
|
|
1638
|
+
"requirements": {
|
|
1639
|
+
"eu-cra": [
|
|
1640
|
+
"CRA-I-3d"
|
|
1641
|
+
],
|
|
1642
|
+
"eu-ai-act-quantum": [
|
|
1643
|
+
"AIA-15a"
|
|
1644
|
+
]
|
|
1645
|
+
}
|
|
1646
|
+
},
|
|
1647
|
+
"QNT-07": {
|
|
1648
|
+
"fed_by": [
|
|
1649
|
+
"capture",
|
|
1650
|
+
"check_qir"
|
|
1651
|
+
],
|
|
1652
|
+
"requirements": {
|
|
1653
|
+
"eu-cra": [
|
|
1654
|
+
"CRA-I-3d"
|
|
1655
|
+
],
|
|
1656
|
+
"eu-ai-act-quantum": [
|
|
1657
|
+
"AIA-15a"
|
|
1658
|
+
]
|
|
1659
|
+
}
|
|
1660
|
+
},
|
|
1661
|
+
"MOD05-TEST-01": {
|
|
1662
|
+
"fed_by": [
|
|
1663
|
+
"attest_tests"
|
|
1664
|
+
],
|
|
1665
|
+
"requirements": {
|
|
1666
|
+
"eu-cra": [
|
|
1667
|
+
"CRA-II-3"
|
|
1668
|
+
],
|
|
1669
|
+
"eu-ai-act-quantum": [
|
|
1670
|
+
"AIA-15b"
|
|
1671
|
+
]
|
|
1672
|
+
}
|
|
1673
|
+
},
|
|
1674
|
+
"CRA-VULN-01": {
|
|
1675
|
+
"fed_by": [
|
|
1676
|
+
"attest_vulnerability_handling"
|
|
1677
|
+
],
|
|
1678
|
+
"requirements": {
|
|
1679
|
+
"eu-cra": [
|
|
1680
|
+
"CRA-II-2"
|
|
1681
|
+
],
|
|
1682
|
+
"eu-ai-act-quantum": [
|
|
1683
|
+
"AIA-15b"
|
|
1684
|
+
]
|
|
1685
|
+
}
|
|
1686
|
+
},
|
|
1687
|
+
"CRA-VDP-01": {
|
|
1688
|
+
"fed_by": [
|
|
1689
|
+
"attest_vulnerability_handling"
|
|
1690
|
+
],
|
|
1691
|
+
"requirements": {
|
|
1692
|
+
"eu-cra": [
|
|
1693
|
+
"CRA-II-5"
|
|
1694
|
+
],
|
|
1695
|
+
"eu-ai-act-quantum": [
|
|
1696
|
+
"AIA-15b"
|
|
1697
|
+
]
|
|
1698
|
+
}
|
|
1699
|
+
},
|
|
1700
|
+
"QNT-08": {
|
|
1701
|
+
"fed_by": [
|
|
1702
|
+
"disclose_error_handling",
|
|
1703
|
+
"execute"
|
|
1704
|
+
],
|
|
1705
|
+
"requirements": {
|
|
1706
|
+
"eu-cra": [
|
|
1707
|
+
"CRA-I-1"
|
|
1708
|
+
],
|
|
1709
|
+
"eu-ai-act-quantum": [
|
|
1710
|
+
"AIA-13",
|
|
1711
|
+
"AIA-15a"
|
|
1712
|
+
]
|
|
1713
|
+
}
|
|
1714
|
+
},
|
|
1715
|
+
"QNT-09": {
|
|
1716
|
+
"fed_by": [
|
|
1717
|
+
"compare_native",
|
|
1718
|
+
"execute"
|
|
1719
|
+
],
|
|
1720
|
+
"requirements": {
|
|
1721
|
+
"eu-cra": [
|
|
1722
|
+
"CRA-I-3d"
|
|
1723
|
+
],
|
|
1724
|
+
"eu-ai-act-quantum": [
|
|
1725
|
+
"AIA-15a"
|
|
1726
|
+
]
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
}
|