Skip to content

Commit 924c3d2

Browse files
committed
cra-kit: fix commercial-license SBOM generation and refresh samples
Plumb CRA_LICENSE_TEXT through generate-wolfssl-sbom.sh (gen-sbom/make sbom hard-fail on a LicenseRef-* override without it); scope the commercial relicense to the wolfssl package only; correct the stale pkg:generic PURL claim; validate the embedded output dir; regenerate pinned samples against gen-sbom 1.1 and re-pin product checksums. Signed-off-by: Sameeh Jubran <sameeh@wolfssl.com>
1 parent 8cb188f commit 924c3d2

19 files changed

Lines changed: 261 additions & 39 deletions

.github/workflows/cra-kit.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@ on:
1010
- 'cra-kit/**'
1111
- '.github/workflows/cra-kit.yml'
1212

13+
# Least-privilege default; this workflow only needs to read the repo contents.
14+
permissions:
15+
contents: read
16+
1317
jobs:
1418
validate-auditor-packet:
1519
runs-on: ubuntu-latest
1620
steps:
17-
- uses: actions/checkout@v4
18-
- uses: actions/setup-python@v5
21+
# Actions pinned to commit SHAs (supply-chain hygiene), not mutable tags.
22+
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
23+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
1924
with:
2025
python-version: '3.x'
2126
- name: Validate pinned auditor packet

cra-kit/README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,15 @@ SBOM = your job.
8686
|---------|-------|------------------------|
8787
| **A. Linux / server / Yocto / package** | `./configure && make` | `make sbom` in wolfSSL tree |
8888
| **B. Embedded / RTOS / IDE** | `user_settings.h` + your Makefile / Keil / Zephyr / ESP-IDF | `./scripts/generate-embedded-sbom.sh` (kit demo) or upstream `gen-sbom` |
89-
| **C. Commercial license** | Either | `CRA_LICENSE_OVERRIDE=LicenseRef-wolfSSL-Commercial ./scripts/generate-wolfssl-sbom.sh` |
89+
| **C. Commercial license** | Either | `CRA_LICENSE_OVERRIDE=LicenseRef-wolfSSL-Commercial CRA_LICENSE_TEXT=/path/to/commercial-license.txt ./scripts/generate-wolfssl-sbom.sh` |
90+
91+
> **Commercial (`LicenseRef-*`) overrides require `CRA_LICENSE_TEXT`** pointing at
92+
> the plain-text licence you received from wolfSSL. SPDX 2.3 §10.1 requires the
93+
> licence text to be embedded for any `LicenseRef-*`; both `gen-sbom` and
94+
> `make sbom` hard-fail without it. A stock SPDX id (e.g. `Apache-2.0`) needs no
95+
> text. If you don't have the text file handy, use
96+
> [`scripts/make-commercial-sample.sh`](scripts/make-commercial-sample.sh) to
97+
> derive a commercial sample from the pinned GPL samples instead.
9098
9199
**Every manufacturer still:**
92100

@@ -122,7 +130,8 @@ CRA_SBOM_MODE=embedded ./scripts/generate-wolfssl-sbom.sh # rarely used for pa
122130
./scripts/generate-embedded-sbom.sh # writes wolfssl-component-embedded/
123131

124132
CRA_LICENSE_OVERRIDE=LicenseRef-wolfSSL-Commercial \
125-
./scripts/generate-wolfssl-sbom.sh # commercial-license sample
133+
CRA_LICENSE_TEXT=/path/to/wolfssl-commercial-license.txt \
134+
./scripts/generate-wolfssl-sbom.sh # commercial-license sample (text required)
126135
./scripts/make-commercial-sample.sh # derive from pinned GPL samples (no rebuild)
127136
```
128137

cra-kit/ROADMAP.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ Honest status for customer conversations. This is **not** a commitment schedule.
77
| **SBOM** (SPDX 2.3 + CycloneDX 1.6) | **Available** | `make sbom` or `scripts/gen-sbom` |
88
| **Config-accurate build properties** | **Available** | Read `wolfssl:build:*` in `.cdx.json` |
99
| **Embedded source-merkle checksum** | **Available** | `gen-sbom` with `--srcs` (no `libwolfssl.a` required) |
10-
| **Commercial license in SBOM** | **Available** | `CRA_LICENSE_OVERRIDE=LicenseRef-wolfSSL-Commercial ./scripts/generate-wolfssl-sbom.sh` (or `make-commercial-sample.sh` to derive from pinned GPL samples) |
10+
| **Commercial license in SBOM** | **Available** | `CRA_LICENSE_OVERRIDE=LicenseRef-wolfSSL-Commercial CRA_LICENSE_TEXT=/path/to/commercial-license.txt ./scripts/generate-wolfssl-sbom.sh` (a `LicenseRef-*` override requires the licence text; or use `make-commercial-sample.sh` to derive from pinned GPL samples) |
1111
| **Reproducible SBOM timestamps** | **Available** | `SOURCE_DATE_EPOCH` |
1212
| **OmniBOR / `make bomsh`** | **Available** | Linux **build host** only; optional for CRA |
13-
| **`pkg:github` PURL** | **Available** | Auto-canonicalised by `generate-wolfssl-sbom.sh` post-process; resolves in OSV / GHSA / Snyk / Trivy without per-vendor mapping |
13+
| **`pkg:github` PURL** | **Available** | Emitted natively by `gen-sbom`; resolves in OSV / GHSA / Snyk / Trivy without per-vendor mapping |
1414
| **Cryptographic-asset draft** (CycloneDX 1.6) | **Draft sample** | Hand-rolled `wolfssl-<ver>.cbom-draft.cdx.json` alongside SBOM (4–6 starter entries); upstream automation: roadmap |
1515
| **Formal CBOM** (`cryptographic-asset` profile, all primitives) | **Roadmap** | Use draft sample + `wolfssl:build:*` properties |
1616
| **VEX templates / automation** | **Roadmap** | Your scanner + wolfSSL [advisories](https://www.wolfssl.com/docs/security-vulnerabilities/) |
File renamed without changes.

cra-kit/auditor-packet/product-acme-connect-gateway.cdx.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"hashes": [
3636
{
3737
"alg": "SHA-256",
38-
"content": "265cd1575f7a350295ba1414494f2cc93bb895223a9732dcfb231bcecb6d3bbd"
38+
"content": "bc8c6b9f5fbe829edb594dc74bcb95a202ca1b402ab1dca60f858aa9fe2ec6e3"
3939
}
4040
]
4141
}

cra-kit/auditor-packet/product-acme-connect-gateway.spdx.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"spdxDocument": "file:./wolfssl-component/wolfssl-5.9.1.spdx.json",
1717
"checksum": {
1818
"algorithm": "SHA256",
19-
"checksumValue": "36fdc0c8a192a0fadc4c5024ff75ecee3a56dd8a431dfb25bfa8afcf467cfdef"
19+
"checksumValue": "a60bda42e4e0c874f21abaed7b34e72ac6ea329662fbac33f8487608753042f2"
2020
}
2121
}
2222
],
@@ -25,7 +25,7 @@
2525
"SPDXID": "SPDXRef-Package-Product",
2626
"name": "acme-connect-gateway",
2727
"versionInfo": "1.0.0",
28-
"supplier": "Organization: Acme Industries",
28+
"supplier": "Organization: Acme Industries (fictional example)",
2929
"downloadLocation": "NOASSERTION",
3030
"filesAnalyzed": false
3131
}

cra-kit/auditor-packet/wolfssl-component/omnibor.wolfssl-5.9.1.spdx.json.sample

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
},
2929
{
3030
"algorithm": "SHA256",
31-
"checksumValue": "391e86477f5eee025e677a24b13e2d9a4d3e4c18d88e6359853ebf1c9932279e"
31+
"checksumValue": "0000000000000000000000000000000000000000000000000000000000000000"
3232
}
3333
],
34-
"comment": "OmniBOR identifier for the linked binary: gitoid:blob:sha1:0000000000000000000000000000000000000001 — sample placeholder. Real builds emit the actual gitoid covering all .o inputs."
34+
"comment": "SENTINEL VALUES — both the SHA-1 gitoid and the SHA-256 here are all-zero placeholders, NOT real digests. A compiled .so cannot share the source archive's hash, so this sample deliberately avoids any real-looking value a customer might copy. Real builds emit the actual binary digests and the gitoid covering all .o inputs."
3535
}
3636
],
3737
"files": [

cra-kit/auditor-packet/wolfssl-component/wolfssl-5.9.1.cdx.json

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"type": "application",
1313
"author": "wolfSSL Inc.",
1414
"name": "wolfssl-sbom-gen",
15-
"version": "1.0"
15+
"version": "1.1"
1616
}
1717
]
1818
},
@@ -44,6 +44,22 @@
4444
{
4545
"type": "vcs",
4646
"url": "https://github.com/wolfSSL/wolfssl"
47+
},
48+
{
49+
"type": "website",
50+
"url": "https://www.wolfssl.com/"
51+
},
52+
{
53+
"type": "issue-tracker",
54+
"url": "https://github.com/wolfSSL/wolfssl/issues"
55+
},
56+
{
57+
"type": "advisories",
58+
"url": "https://github.com/wolfSSL/wolfssl/security/advisories"
59+
},
60+
{
61+
"type": "security-contact",
62+
"url": "https://www.wolfssl.com/.well-known/security.txt"
4763
}
4864
],
4965
"properties": [
@@ -286,6 +302,26 @@
286302
{
287303
"name": "wolfssl:build:WOLFSSL_X86_64_BUILD",
288304
"value": "1"
305+
},
306+
{
307+
"name": "wolfssl:sbom:hash-kind",
308+
"value": "library-binary"
309+
}
310+
],
311+
"components": [
312+
{
313+
"type": "file",
314+
"name": "libwolfssl.44.dylib",
315+
"hashes": [
316+
{
317+
"alg": "SHA-1",
318+
"content": "def1d74ce45e708d8230084cdea4f45a9cad144c"
319+
},
320+
{
321+
"alg": "SHA-256",
322+
"content": "391e86477f5eee025e677a24b13e2d9a4d3e4c18d88e6359853ebf1c9932279e"
323+
}
324+
]
289325
}
290326
]
291327
}

cra-kit/auditor-packet/wolfssl-component/wolfssl-5.9.1.commercial.cdx.json

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
33
"bomFormat": "CycloneDX",
44
"specVersion": "1.6",
5-
"serialNumber": "urn:uuid:80b023d5-8a5d-4e17-9e18-f3d5c7c9762e",
5+
"serialNumber": "urn:uuid:554e996c-5c73-46f2-a642-5c1dc0c853d8",
66
"version": 1,
77
"metadata": {
88
"timestamp": "2026-05-12T16:59:40Z",
@@ -12,7 +12,7 @@
1212
"type": "application",
1313
"author": "wolfSSL Inc.",
1414
"name": "wolfssl-sbom-gen",
15-
"version": "1.0"
15+
"version": "1.1"
1616
}
1717
]
1818
},
@@ -44,6 +44,22 @@
4444
{
4545
"type": "vcs",
4646
"url": "https://github.com/wolfSSL/wolfssl"
47+
},
48+
{
49+
"type": "website",
50+
"url": "https://www.wolfssl.com/"
51+
},
52+
{
53+
"type": "issue-tracker",
54+
"url": "https://github.com/wolfSSL/wolfssl/issues"
55+
},
56+
{
57+
"type": "advisories",
58+
"url": "https://github.com/wolfSSL/wolfssl/security/advisories"
59+
},
60+
{
61+
"type": "security-contact",
62+
"url": "https://www.wolfssl.com/.well-known/security.txt"
4763
}
4864
],
4965
"properties": [
@@ -287,10 +303,30 @@
287303
"name": "wolfssl:build:WOLFSSL_X86_64_BUILD",
288304
"value": "1"
289305
},
306+
{
307+
"name": "wolfssl:sbom:hash-kind",
308+
"value": "library-binary"
309+
},
290310
{
291311
"name": "wolfssl:license:override",
292312
"value": "LicenseRef-wolfSSL-Commercial"
293313
}
314+
],
315+
"components": [
316+
{
317+
"type": "file",
318+
"name": "libwolfssl.44.dylib",
319+
"hashes": [
320+
{
321+
"alg": "SHA-1",
322+
"content": "def1d74ce45e708d8230084cdea4f45a9cad144c"
323+
},
324+
{
325+
"alg": "SHA-256",
326+
"content": "391e86477f5eee025e677a24b13e2d9a4d3e4c18d88e6359853ebf1c9932279e"
327+
}
328+
]
329+
}
294330
]
295331
}
296332
},

cra-kit/auditor-packet/wolfssl-component/wolfssl-5.9.1.commercial.spdx.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
"dataLicense": "CC0-1.0",
44
"SPDXID": "SPDXRef-DOCUMENT",
55
"name": "wolfssl-5.9.1",
6-
"documentNamespace": "urn:uuid:cedcdaaa-b983-4ce1-83e3-ed7337232a49",
6+
"documentNamespace": "urn:uuid:59b18c7a-8572-4743-85f2-ffeac74c310d",
77
"creationInfo": {
88
"creators": [
99
"Organization: wolfSSL Inc.",
10-
"Tool: wolfssl-sbom-gen-1.0"
10+
"Tool: wolfssl-sbom-gen-1.1"
1111
],
1212
"created": "2026-05-12T16:59:40Z"
1313
},
@@ -29,6 +29,14 @@
2929
"licenseDeclared": "LicenseRef-wolfSSL-Commercial",
3030
"copyrightText": "Copyright (C) 2006-2026 wolfSSL Inc.",
3131
"comment": "License override applied: LicenseRef-wolfSSL-Commercial. Build configuration defines: ECC_MIN_KEY_SZ, ECC_SHAMIR, ECC_TIMING_RESISTANT, ERROR_QUEUE_PER_THREAD, GCM_TABLE_4BIT, HAVE_AESGCM, HAVE_CHACHA, HAVE_C___ATOMIC, HAVE_DH_DEFAULT_PARAMS, HAVE_ECC, HAVE_ENCRYPT_THEN_MAC, HAVE_EXTENDED_MASTER, HAVE_FFDHE_2048, HAVE_GETPID, HAVE_HASHDRBG, HAVE_HKDF, HAVE_POLY1305, HAVE_SERVER_RENEGOTIATION_INFO, HAVE_SNI, HAVE_SUPPORTED_CURVES, HAVE_THREAD_LS, HAVE_TLS_EXTENSIONS, HAVE_WC_INTROSPECTION, HAVE___UINT128_T, NO_DES3, NO_DES3_TLS_SUITES, NO_DO178, NO_DSA, NO_MD4, NO_MD5, NO_OLD_TLS, NO_PSK, NO_RC4, TFM_TIMING_RESISTANT, WC_NO_ASYNC_THREADING, WC_RSA_BLINDING, WC_RSA_PSS, WOLFSSL_ARMASM_NO_HW_CRYPTO, WOLFSSL_ASN_PRINT, WOLFSSL_ASN_TEMPLATE, WOLFSSL_BASE64_ENCODE, WOLFSSL_DRBG_SHA512, WOLFSSL_HAVE_ASSERT_H, WOLFSSL_HAVE_ATOMIC_H, WOLFSSL_HAVE_MLKEM, WOLFSSL_PQC_HYBRIDS, WOLFSSL_PSS_LONG_SALT, WOLFSSL_SHA224, WOLFSSL_SHA3, WOLFSSL_SHA384, WOLFSSL_SHA512, WOLFSSL_SHAKE128, WOLFSSL_SHAKE256, WOLFSSL_SP_MATH_ALL, WOLFSSL_SP_X86_64, WOLFSSL_SYS_CA_CERTS, WOLFSSL_TLS13, WOLFSSL_TLS_NO_MLKEM_STANDALONE, WOLFSSL_USE_ALIGN, WOLFSSL_X86_64_BUILD",
32+
"annotations": [
33+
{
34+
"annotationDate": "2026-05-12T16:59:40Z",
35+
"annotationType": "OTHER",
36+
"annotator": "Tool: wolfssl-sbom-gen-1.1",
37+
"comment": "wolfssl:sbom:hash-kind=library-binary"
38+
}
39+
],
3240
"externalRefs": [
3341
{
3442
"referenceCategory": "SECURITY",
@@ -39,6 +47,11 @@
3947
"referenceCategory": "PACKAGE-MANAGER",
4048
"referenceType": "purl",
4149
"referenceLocator": "pkg:github/wolfSSL/wolfssl@v5.9.1"
50+
},
51+
{
52+
"referenceCategory": "SECURITY",
53+
"referenceType": "advisory",
54+
"referenceLocator": "https://github.com/wolfSSL/wolfssl/security/advisories"
4255
}
4356
]
4457
}

0 commit comments

Comments
 (0)