Commit 30619d2
committed
feat: SBOM generation and OmniBOR build provenance (CRA compliance)
Adds two complementary supply chain transparency targets to the
wolfSSL autotools build, and documentation covering both as a unified
whole.
## make sbom
Generates a Software Bill of Materials for EU Cyber Resilience Act
(CRA) compliance. Produces three files in the build directory:
wolfssl-<version>.cdx.json CycloneDX 1.6 JSON
wolfssl-<version>.spdx.json SPDX 2.3 JSON
wolfssl-<version>.spdx SPDX 2.3 tag-value (validated)
The SPDX JSON is validated by pyspdxtools before the tag-value file
is written; make sbom fails if validation fails.
SBOM contents: package name/version, supplier, license (parsed from
LICENSING at generation time, not hardcoded), copyright, SHA-256 of
the installed library, CPE, PURL, download location, and build
configuration defines as a comment. Third-party dependencies
(liboqs, libz, libxmss, liblms) are included when enabled.
Implementation: scripts/gen-sbom (Python 3, stdlib only) stages a
make install into a temporary directory, hashes the installed
library, generates both SBOM formats, then removes the staging
directory. configure.ac detects python3, pyspdxtools, and git via
AC_PATH_PROG.
install-sbom / uninstall-sbom targets install the three files to
$(datadir)/doc/wolfssl/. make clean removes all generated files.
## make bomsh
Generates an OmniBOR artifact dependency graph using the Bomsh
project (https://github.com/omnibor/bomsh), providing cryptographic
traceability from every built binary back to the exact set of source
files that produced it.
Runs a full clean rebuild under bomtrace3 (a patched strace, userspace
only — no kernel modifications required). bomtrace3 intercepts every
compiler execve() syscall and records inputs and outputs; it cannot
post-process an already-built tree, hence the clean rebuild.
bomsh_create_bom.py processes the raw logfile to produce the OmniBOR
artifact objects and metadata in omnibor/.
If bomsh_sbom.py is available and wolfssl-<version>.spdx.json exists
(from make sbom), annotates that SPDX document with a PERSISTENT-ID
gitoid ExternalRef, producing omnibor.wolfssl-<version>.spdx.json.
This enriched SPDX bridges component identity and build provenance in
a single document.
configure.ac detects bomtrace3, bomsh_create_bom.py, and bomsh_sbom.py
via AC_PATH_PROG. The raw logfile and conf file are written to the
build directory (not /tmp/) to avoid concurrent-build collisions, and
removed by make clean.
install-bomsh / uninstall-bomsh targets install omnibor/ and the
enriched SPDX to $(datadir)/doc/wolfssl/.
## Documentation
doc/SBOM.md: unified reference covering both make sbom and make bomsh
as parts of a single supply chain transparency story — component
identity (what) and build provenance (how) — with a combined workflow
section and full output file reference.
doc/CRA.md: product-integrator guide covering how to incorporate
wolfSSL's SBOM artefacts into a downstream product SBOM (SPDX
ExternalDocumentRef and CycloneDX component reference patterns),
commercial license concluded-field guidance, OmniBOR gitoid meaning,
auditor handoff checklist, and links to OpenSSF CRA and SBOM Everywhere
SIG guidance pages.
INSTALL: sections 21 (make sbom) and 22 (make bomsh).
README.md: brief SBOM/CRA and OmniBOR/Bomsh sections.
doc/include.am: SBOM.md and CRA.md added to dist_doc_DATA.1 parent c098e53 commit 30619d2
8 files changed
Lines changed: 1123 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
322 | 322 | | |
323 | 323 | | |
324 | 324 | | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
350 | 350 | | |
351 | 351 | | |
352 | 352 | | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
33 | 45 | | |
34 | 46 | | |
35 | 47 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1989 | 1989 | | |
1990 | 1990 | | |
1991 | 1991 | | |
| 1992 | + | |
1992 | 1993 | | |
1993 | 1994 | | |
1994 | 1995 | | |
| |||
2051 | 2052 | | |
2052 | 2053 | | |
2053 | 2054 | | |
| 2055 | + | |
2054 | 2056 | | |
2055 | 2057 | | |
2056 | 2058 | | |
| |||
11756 | 11758 | | |
11757 | 11759 | | |
11758 | 11760 | | |
| 11761 | + | |
| 11762 | + | |
| 11763 | + | |
| 11764 | + | |
| 11765 | + | |
| 11766 | + | |
| 11767 | + | |
| 11768 | + | |
| 11769 | + | |
| 11770 | + | |
| 11771 | + | |
| 11772 | + | |
| 11773 | + | |
| 11774 | + | |
| 11775 | + | |
11759 | 11776 | | |
11760 | 11777 | | |
11761 | 11778 | | |
| |||
0 commit comments