Your CBOM says you’re running ML-KEM-768. It doesn’t say what that costs.
A Cryptography Bill of Materials tells you which algorithms are in your estate. It has no field for how fast they are, how many bytes they add, or what they cost against the algorithm they replaced — so the inventory that’s meant to drive a migration budget can’t price one.
P-CBOM adds that field. Pick an algorithm below and get a record carrying a real, measured, cited number — ready to drop into the inventory you already have.
- 1Pick an algorithm
Every algorithm Q-Shield measures, with the operation you care about — keygen, encapsulation, signing, verification.
- 2Get a cited record
Native P-CBOM or CycloneDX-compatible, carrying the run it came from, the commit, and the date it was measured.
- 3Check the number
Every figure links back to the run that produced it. Nothing here is interpolated, estimated, or typed in by hand.
Generate a record, or annotate the inventory you already have.
Only algorithms Q-Shield has actually measured appear here. If something is missing, it is because no run has produced it — not because it was left out.
{
"cbom_version": "1.6",
"p_cbom_extension": "0.1",
"algorithm": {
"name": "ML-DSA-44",
"type": "digital-signature",
"standard": "NIST FIPS 204"
},
"implementation": {
"library": "liboqs",
"version": "0.15.0",
"build_flags": "OQS_DIST_BUILD dispatch · kyber768/falcon AVX2 · SHA3 AVX512VL"
},
"performance": {
"source": "q-advantage/q-shield",
"measurement_id": "ml-dsa-44/keygen/x86_64/2026-09-03",
"ref_url": "https://raw.githubusercontent.com/Q-Advantage/q-advantage/main/benchmark/results/protocols/sig-track-2026-09-03-ca4dd54.json",
"last_measured": "2026-09-03T12:31:47Z",
"commit": "ca4dd54",
"snapshot": {
"operation": "keygen",
"platform": "Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz (x86_64)",
"median_us": 32.386,
"p95_us": 50.082,
"throughput_ops_sec": 26872.82,
"signature_bytes": 2420,
"public_key_bytes": 1312
}
}
}Architecture: x86_64. Only algorithms Q-Shield has actually measured on this architecture appear above — nothing here is interpolated or guessed.
Algorithms, not whole handshakes — yet.
Stated plainly because it changes what you can do with the output.
A P-CBOM v0.1 record describes one algorithm doing one operation, which is the level a CBOM already inventories. A full hybrid handshake — X25519 together with ML-KEM-768, priced as one thing — is a protocol asset rather than an algorithm, and lands in v0.2. Q-Shield already measures those handshakes; this generator just doesn’t emit them yet.
Where a record compares against the classical algorithm being replaced, a negative pct_over_classical means the post-quantum one is faster. That happens more often than people expect, and the sign convention is the schema’s, not ours.
An extension to CycloneDX, not a fork of it.
Worth being precise about, because the alternative reading is that we invented a competing format.
P-CBOM extends the Cryptography Bill of Materials defined by CycloneDX 1.6 — the standard EO 14412 (June 2026) names in federal post-quantum work. The performance data rides as namespaced q-advantage:p-cbom:* entries in the component’s own properties array, which is CycloneDX’s sanctioned extension point. A document this tool returns is still a CycloneDX document, and any tool that has never heard of P-CBOM will read it unchanged.
The spec is CC0 and the tooling is Apache-2.0. Q-Advantage is not affiliated with CycloneDX or OWASP, and claims no endorsement from either.
Knowing what is in the estate is half of it.
An inventory tells you what you run. It does not tell you what changing it costs.
Once your inventory carries measured figures, the next question is what they add up to on your own traffic — latency, bytes on the wire, egress. That is a different calculation, and it has its own tool: the network cost calculator, built on the same measurements this page cites.
Where every number comes from.
- P-CBOM v0.1 spec (CC0) — the standard this tool implements.
- Q-Advantage/p-cbom — the reference implementation this page ports (Apache-2.0 tooling).
- CycloneDX 1.6 specification — the CBOM standard P-CBOM extends.
- Every generated record carries its own citation (
performance.source,ref_url,last_measured,commit) — rendered above the JSON, not only inside it.