|
| 1 | +# CRA & Supply Chain Terminology — Customer Cheat Sheet |
| 2 | + |
| 3 | +One-page reference for teams shipping products that include wolfSSL. |
| 4 | +**Not legal advice.** Map obligations to your product class and role with counsel. |
| 5 | + |
| 6 | +This kit is **self-contained** in [wolfssl-examples `cra-evidence/`](https://github.com/wolfSSL/wolfssl-examples/tree/master/cra-evidence). |
| 7 | +Upstream wolfSSL integration detail (requires a wolfSSL source tree with SBOM support): |
| 8 | + |
| 9 | +- [CRA.md](https://github.com/wolfSSL/wolfssl/blob/master/doc/CRA.md) |
| 10 | +- [SBOM.md](https://github.com/wolfSSL/wolfssl/blob/master/doc/SBOM.md) |
| 11 | + |
| 12 | +CRA shortlist (3 pillars): [`CRA-Compliance-Shortlist.md`](CRA-Compliance-Shortlist.md) · Evidence Map: [`CRA-Cheat-Sheet.md`](CRA-Cheat-Sheet.md) · AI playbook: [`SKILL.md`](SKILL.md) · Worked example: [`auditor-packet/`](auditor-packet/) |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +## The big picture (30 seconds) |
| 17 | + |
| 18 | +```mermaid |
| 19 | +flowchart LR |
| 20 | + subgraph you["Your company (manufacturer)"] |
| 21 | + PSBOM["Product SBOM\n(all components)"] |
| 22 | + end |
| 23 | + subgraph wolf["wolfSSL (component)"] |
| 24 | + WSBOM["wolfSSL SBOM\n(SPDX + CycloneDX)"] |
| 25 | + BOMSH["OmniBOR / bomsh\n(optional)"] |
| 26 | + end |
| 27 | + PSBOM -->|"references or contains"| WSBOM |
| 28 | + WSBOM -.->|"optional deeper proof"| BOMSH |
| 29 | +``` |
| 30 | + |
| 31 | +| Question | Short answer | |
| 32 | +|----------|--------------| |
| 33 | +| Do we need **our own** SBOM? | **Yes** — for the **whole product** you place on the EU market. | |
| 34 | +| Is wolfSSL’s SBOM enough by itself? | **No** (unless you only redistribute wolfSSL). Use it **inside** your product SBOM. | |
| 35 | +| Do we need **bomsh**? | **Usually no.** SBOM alone covers most CRA transparency needs; bomsh adds build traceability if you want it. | |
| 36 | +| SPDX or CycloneDX? | **Both are fine.** wolfSSL ships both; use whichever your tools expect (many teams keep both). | |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +## Glossary |
| 41 | + |
| 42 | +| Term | Stands for / means | Plain English | |
| 43 | +|------|-------------------|---------------| |
| 44 | +| **CRA** | EU **Cyber Resilience Act** | EU law for products with digital elements: inventory, security, vulnerability handling. | |
| 45 | +| **SBOM** | **Software Bill of Materials** | Machine-readable “ingredients list” of software in a product (name, version, supplier, license, IDs, relationships). | |
| 46 | +| **Product SBOM** | — | **Yours:** every OSS/third-party component in the **shipped product**. | |
| 47 | +| **Component SBOM** | — | **wolfSSL’s:** inventory of **wolfSSL only** (`make sbom` or `gen-sbom`). | |
| 48 | +| **SPDX** | **Software Package Data Exchange** | A standard **format** for SBOMs (Linux Foundation). Files: `*.spdx.json`, `*.spdx`. | |
| 49 | +| **CycloneDX** | (project name) | Another standard **format** for SBOMs (OWASP ecosystem). File: `*.cdx.json`. | |
| 50 | +| **NTIA minimum elements** | US NTIA guidance | Checklist of what a “good” SBOM must include (supplier, name, version, unique ID, deps, author, timestamp). CRA practice aligns with this. | |
| 51 | +| **PURL** | **Package URL** | Standard ID like `pkg:generic/wolfssl@5.9.1` — helps tools match components. | |
| 52 | +| **CPE** | **Common Platform Enumeration** | Standard ID like `cpe:2.3:a:wolfssl:wolfssl:…` — used by many vulnerability databases. | |
| 53 | +| **VEX** | **Vulnerability Exploitability eXchange** | CycloneDX-side signal: “this CVE does/doesn’t apply to our build.” Often layered on top of SBOM in security tools. | |
| 54 | +| **CBOM** | **Cryptographic Bill of Materials** | Inventory of **crypto algorithms/keys/modules** (beyond generic SBOM). Today: `wolfssl:build:*` in CycloneDX; formal CBOM: see [`ROADMAP.md`](ROADMAP.md). | |
| 55 | +| **bomsh** | wolfSSL **make** target | Runs **OmniBOR** provenance: proves **how** the library binary was built from sources (**Linux host only**). | |
| 56 | +| **OmniBOR** | Omni **Bill of Resources** | Merkle DAG of build inputs/outputs; stored under `omnibor/`. | |
| 57 | +| **gitoid** | Git-object-style ID | Hash pointer (`gitoid:blob:sha1:…`) into the OmniBOR graph; appears in `omnibor.*.spdx.json`. | |
| 58 | +| **Manufacturer** | CRA role | Entity that places the product on the EU market — **owns** product SBOM and vulnerability process. | |
| 59 | +| **Integrator / OEM** | Industry term | You build a device/app containing wolfSSL → you typically act as **manufacturer** for your product. | |
| 60 | +| **externalDocumentRefs** | SPDX feature | Your product SPDX **points to** wolfSSL’s SPDX file without copying every file entry. | |
| 61 | +| **SOURCE_DATE_EPOCH** | Reproducible builds | Fixed timestamp so two `make sbom` runs produce **byte-identical** SBOMs (useful in CI/attestation). | |
| 62 | + |
| 63 | +--- |
| 64 | + |
| 65 | +## wolfSSL artefacts (what we ship) |
| 66 | + |
| 67 | +| Command | Outputs | Answers | |
| 68 | +|---------|---------|---------| |
| 69 | +| `make sbom` | `wolfssl-<ver>.spdx.json`, `.cdx.json`, `.spdx` | **What** is in wolfSSL (version, license, hashes, config flags). | |
| 70 | +| `make bomsh` *(optional)* | `omnibor/`, `omnibor.wolfssl-<ver>.spdx.json` | **How** wolfSSL was built (source → binary traceability). | |
| 71 | + |
| 72 | +Embedded/custom builds: `scripts/gen-sbom` with **your** `user_settings.h` and source list — see kit |
| 73 | +[`scripts/generate-embedded-sbom.sh`](scripts/generate-embedded-sbom.sh) and upstream [SBOM.md §1](https://github.com/wolfSSL/wolfssl/blob/master/doc/SBOM.md). |
| 74 | + |
| 75 | +--- |
| 76 | + |
| 77 | +## Your checklist |
| 78 | + |
| 79 | +1. **Product SBOM** in release CI (SPDX and/or CycloneDX). |
| 80 | +2. **wolfSSL component** — reference our SBOM (`externalDocumentRefs` / CycloneDX `bom` ref) or copy the package entry; link with `STATIC_LINK` / `DYNAMIC_LINK` / `CONTAINS`. |
| 81 | +3. **Match your build** — if `user_settings.h` or source set differs from stock, regenerate wolfSSL’s SBOM for **your** build. |
| 82 | +4. **Commercial license** — override GPL in SBOM (`SBOM_LICENSE_OVERRIDE`) or in **your** product SBOM entry for wolfSSL; see upstream [CRA.md](https://github.com/wolfSSL/wolfssl/blob/master/doc/CRA.md). |
| 83 | +5. **Vulnerabilities** — document your process; wolfSSL disclosure: [SECURITY-POLICY.md](https://github.com/wolfSSL/wolfssl/blob/master/SECURITY-POLICY.md). |
| 84 | +6. **bomsh** — only if auditors or contracts ask for build-level proof beyond the SBOM (Linux CI). |
| 85 | + |
| 86 | +--- |
| 87 | + |
| 88 | +## SPDX vs CycloneDX (same job, different tools) |
| 89 | + |
| 90 | +| | **SPDX** | **CycloneDX** | |
| 91 | +|---|----------|----------------| |
| 92 | +| **Typical use** | License compliance, legal review, nested documents | Security scanners, VEX, commercial SBOM platforms | |
| 93 | +| **wolfSSL file** | `wolfssl-<ver>.spdx.json` | `wolfssl-<ver>.cdx.json` | |
| 94 | +| **Nesting wolfSSL** | `externalDocumentRefs` + relationship | Component + `externalReferences` type `bom` | |
| 95 | + |
| 96 | +You do **not** choose “CRA format” — you provide an SBOM that meets NTIA-style expectations; SPDX and CycloneDX are both widely accepted encodings. |
| 97 | + |
| 98 | +--- |
| 99 | + |
| 100 | +## Who provides what to an auditor |
| 101 | + |
| 102 | +| Evidence | Provided by | |
| 103 | +|----------|-------------| |
| 104 | +| Product SBOM (full inventory) | **Customer** | |
| 105 | +| wolfSSL SBOM files | **wolfSSL** (customer integrates or references) | |
| 106 | +| OmniBOR / bomsh bundle | **wolfSSL** *(optional)* | |
| 107 | +| Vulnerability disclosure & advisories | **wolfSSL** ([security page](https://www.wolfssl.com/docs/security-vulnerabilities/)); **customer** owns product incident process | |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +*wolfSSL · Part of the [CRA Evidence Kit](README.md). Questions: support@wolfssl.com* |
0 commit comments