Repository navigation
sbom-tools v0.3.0
Highlights
The CBOM fidelity release. v0.2.0 checked whether the tool told the truth; this release asks the same of cryptography inventories, prompted largely by people running real CBOMs through it. A CycloneDX 1.7 IPsec CBOM did not load at all. Crypto fields renamed between CycloneDX 1.6 and 1.7 were read in only one spelling, so an elliptic-curve key declared the 1.6 way, or a certificate linked the 1.7 way, slipped past the CNSA 2.0 and PQC gates. And a sparse IKE CBOM drew 31 findings for missing package versions, suppliers, licenses and hashes on its crypto assets, while the quality score undercounted its real problems — HMAC-SHA1, 3DES and a 1024-bit DH group.
All of those are fixed, and fixtures in both spec versions pin the behaviour.
Alongside the CBOM work: convert --to normalized exposes the full normalized model on the command line, byte-identical to the C ABI payload; CycloneDX 1.6+ manufacturer and authors now count as producer evidence across nine compliance standards; Yocto SPDX 3 documents parse; and a first, unsigned pipeline receipt contract lands under sbom-tools verify.
Please read Upgrade notes below — this release changes several compliance verdicts in both directions, the standard the CBOM quality profile reports, machine-readable output, and the Rust API.
What's New
Cryptography (CBOM)
- CycloneDX 1.7 IKEv2 transforms. Both the 1.6 bom-ref string and the 1.7 object parse, in JSON and XML. CNSA 2.0 and PQC
PROTO-002judge each transform by its algorithm reference, IANA name or key-exchange group, including the ML-KEM groups 35–37; a transform that cannot be identified reportsPROTO-UNKNOWNrather than passing. (#380) - Crypto fields are read in both their 1.6 and 1.7 spellings — the curve, a certificate's signature algorithm and public key, a key material's algorithm, and protocol refs (
cryptoRefArray/relatedCryptographicAssets). A 1.7 certificate that relates several algorithms has every candidate judged, failing closed. (#378) - Crypto assets are not packages. Version, supplier, license, hash and identifier checks no longer apply to
cryptographic-assetcomponents under NTIA, FDA, Standard, Comprehensive, CISA 2026, PCI DSS and FSCT, or in the quality metrics, andquality --profile cbomembeds NIST PQC compliance instead of Comprehensive, which ran no crypto checks. (#382) - One algorithm classifier for
qualityandvalidate, so the two agree:HMAC_SHA1counts as weak, and IKE groups (MODPnnnn,ECPnnn,curve25519,curve448) are classified. The CycloneDX 1.7 protocol typesike,quic,wpa,sstp,eap-aka,eap-aka-prime,prinsand5g-akaare recognised rather than falling through toOther. (#382)
CLI
convert --to normalizedprints the full normalized model — crypto, ML and dataset detail included — byte-identical to the payload the C ABI and language bindings return, which was previously reachable only by linking the library. (#367)- Pipeline receipts.
verify receipt,verify receipt-generateandverify receipt-aggregatevalidate, generate and aggregatepipeline-shard-receipt/v1documents against three versioned JSON Schemas. Receipts are unsigned and non-promotable diagnostics; seedocs/pipeline-receipts.md. (#353)
Compliance and AI-BOM
- Component
manufacturerandauthors(CycloneDX 1.6+) are parsed, emitted, and accepted as producer evidence by NTIA, FDA, CRA, CISA 2026, EO 14028, SSDF, both BSI profiles and PCI DSS. (#380) - AI-003 accepts nested dataset evidence — a
containschild carrying a CycloneDXdata[]block — alongsidemodelParameters.datasets; a bare nestedtype: datacomponent still does not count. A third-party AI-BOM corpus andscripts/test-aibom.shpin the behaviour. (#361)
Documentation
- JSON output contract in the README: which payloads are contractual, what is test-pinned, and that
view -o jsonis a curated projection without crypto, ML or dataset detail. (#364)
Bug Fixes
- CycloneDX 1.7 IPsec CBOMs failed to load — an IKEv2 transform written as a 1.7 object stopped the parser with exit
3. (#380, #379) - The CNSA 2.0 and PQC gates failed open across spec versions. A 1.6 EC key identified only by
curvereported an UNKNOWN Warning instead of a quantum-vulnerable Error, and 1.7 certificates linked throughrelatedCryptographicAssetswere skipped byCERT-001. (#378, #374) - CBOMs were graded on package fields — 31 package-only findings on a sparse IKE CBOM under
quality --profile cbom, 19 undervalidate --standard ntia— while the quality score undercounted weak crypto and could not classifymodp1024. (#382, #370) - The protocol warning claimed "documents no version" for protocols that declared one. It now names the fields that are actually missing. (#382, #370)
- Components that named a
manufacturerorauthorsfailed supplier rules as though they were anonymous. (#380) - Yocto SPDX 3 documents failed to parse because
suppliedBywas given as a single string rather than an array. (#349, #348) - The TUI Violation Detail overlay clipped its content at common terminal heights, cutting off remediation text and the close hint, and the CRA supply-chain rule's remediation gave dependency advice instead of naming the supplier fields. (#355, #347)
- Security. RUSTSEC-2026-0258 (
h2), RUSTSEC-2026-0221 (event-listener), RUSTSEC-2026-0253 (lru, use-after-free), RUSTSEC-2026-0285 (rustls) and RUSTSEC-2026-0338 through -0342 (quinn-proto) are cleared, with no advisory suppressions. (#352, #369, #388)
Upgrade notes
These behaviors changed in this release. CHANGELOG.md carries the full list with details.
- Some CBOM gates are stricter. A 1.6 EC asset identified only by
curvenow failsALG-006, 1.7 certificates and protocols linked throughrelatedCryptographicAssetsare now evaluated, and 1.7 IPsec CBOMs that failed to parse are now judged. A passingvalidaterun can now exit1. - Other gates are looser. Crypto assets no longer get package findings under NTIA, FDA, Standard, Comprehensive, CISA 2026, PCI DSS or FSCT, and a named
manufacturerorauthorsnow satisfies supplier rules. A failing run can now exit0. quality --profile cbomreports NIST PQC compliance instead of Comprehensive, and CBOM scores move in both directions — the #370 fixture goes from 42.1 to 37.2.- JSON gains fields, additively:
cryptography_metrics.protocols_with_algorithm_refsin quality output;related_crypto_assets, componentmanufacturer, and IKEv2authandtransformsin the normalized payload. - Library API:
ComponentgainsmanufacturerandIkev2TransformTypesgainsauthandtransforms; code that builds them with struct literals must add the fields.ProtocolTypegains eight variants.
Acknowledgments
Thanks to @lvlrSajjad (Sadjad (Mo) Asadi) for the issues behind the curve fix and the normalized-JSON work (#362, #366, #374), to @paul007ex for the CBOM evaluation in #370, to @iwanicki92 for reporting #347 and both reporting and fixing #348 (#349), and to @MChorfa (Mohamed Chorfa) for the pipeline-receipt contract (#350, #353) and the CI baseline, benchmark and security-gate repairs (#351, #369).
Install: cargo install sbom-tools
Homebrew: brew install sbom-tool/tap/sbom-tools
Crate: https://crates.io/crates/sbom-tools
Full changelog: v0.2.0...v0.3.0