Skip to content

Commit 0692c49

Browse files
committed
cra-kit: address Atwood round-2 review (regulatory accuracy + robustness)
Correct CRA references: default category (not "Class I") in classification docs, and the Art. 14(2)(c) final-report clock (14 days after a fix is available). Make _embedded_srcs word-split POSIX-safe, use mktemp for the defines temp file, zero-out the OmniBOR sample binary hash, drop a stray [DATE TO BE CONFIRMED] placeholder, qualify the product SPDX supplier, rename auditor-packet README for GitHub, and harden CI (least-privilege permissions + SHA-pinned actions). Signed-off-by: Sameeh Jubran <sameeh@wolfssl.com>
1 parent 8cb188f commit 0692c49

9 files changed

Lines changed: 37 additions & 18 deletions

File tree

.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
File renamed without changes.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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/scripts/generate-wolfssl-sbom.sh

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,16 @@ _run_embedded() {
8888
exit 1
8989
fi
9090

91-
# shellcheck disable=SC2046
92-
set -- $( _embedded_srcs )
91+
# Build the positional list of source files newline-safely so paths that
92+
# contain spaces survive (POSIX sh has no arrays; unquoted command
93+
# substitution would word-split and corrupt such paths).
94+
set --
95+
while IFS= read -r _src; do
96+
[ -n "$_src" ] || continue
97+
set -- "$@" "$_src"
98+
done <<EOF
99+
$(_embedded_srcs)
100+
EOF
93101

94102
# Optional commercial license override (LicenseRef-wolfSSL-Commercial etc).
95103
set -- "$@" --cdx-out "$CDX_OUT" --spdx-out "$SPDX_OUT"
@@ -116,9 +124,14 @@ _run_embedded() {
116124
echo " Cross builds: set CC=arm-none-eabi-gcc (or your target compiler) so the"
117125
echo " fallback reflects target macros, not the host's."
118126

119-
DEFINES_H="$OUT_DIR/.wolfssl-defines-$$.h"
127+
# Use mktemp so the temp filename is unpredictable: a fixed PID-based name in
128+
# a shared/CI directory could be pre-created or raced by another job.
129+
DEFINES_H=$(mktemp "${TMPDIR:-/tmp}/wolfssl-defines.XXXXXX") || {
130+
echo "ERROR: mktemp failed for the defines temp file." >&2
131+
exit 1
132+
}
120133
# Clean up the temp defines file on every exit path, including a failing
121-
# generator run (it previously leaked the dotfile under `set -e` if the
134+
# generator run (it previously leaked the file under `set -e` if the
122135
# final gen-sbom invocation failed before the manual `rm -f`).
123136
trap 'rm -f "$DEFINES_H"' EXIT
124137
CC=${CC:-cc}

cra-kit/wolfssl-inc-auditor-packet/00-INDEX.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| File | CRA reference | Status |
44
|------|---------------|--------|
5-
| [`classification-statement.md`](classification-statement.md) | Annex III / IV | ✅ Decided — Class I (default), self-certification |
5+
| [`classification-statement.md`](classification-statement.md) | Annex III / IV | ✅ Decided — default category (not Annex III/IV), self-certification |
66
| [`conformity-assessment-route.md`](conformity-assessment-route.md) | Art. 32, Annex VIII | ✅ Module A self-assessment |
77
| [`declaration-of-conformity.template.md`](declaration-of-conformity.template.md) | Art. 28 | 🟡 Template ready; signature pending product release alignment |
88
| [`eu-authorised-representative.md`](eu-authorised-representative.md) | Art. 18 | 🟠 In progress — appointment underway |

cra-kit/wolfssl-inc-auditor-packet/classification-statement.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
## Decision
77

8-
wolfSSL Inc. classifies the following products as **default class** ("Class I")
9-
for CRA purposes:
8+
wolfSSL Inc. classifies the following products as **default category** — neither
9+
Annex III "important" (class I / class II) nor Annex IV "critical" — for CRA
10+
purposes:
1011

1112
| Product | Classification | Rationale |
1213
|---------|----------------|-----------|

cra-kit/wolfssl-inc-auditor-packet/eu-authorised-representative.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ point of contact in the EU.
3030
Casa Group) offer AR-as-a-service across CE-marking regulations. Cost is
3131
typically EUR 1500–4000/year per regulation; lead time 4–6 weeks.
3232

33-
The internal call was made by wolfSSL leadership in [DATE TO BE CONFIRMED]. The
34-
written mandate will be in place before 11 Sep 2026 (Art. 14 vulnerability
35-
reporting onset) and certainly before 11 Dec 2027 (full CRA applicability).
33+
The internal decision is being finalised by wolfSSL leadership. The written
34+
mandate will be in place before 11 Sep 2026 (Art. 14 vulnerability reporting
35+
onset) and certainly before 11 Dec 2027 (full CRA applicability).
3636

3737
## Placeholder identity
3838

cra-kit/wolfssl-inc-auditor-packet/vulnerability-handling-process.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@
5858
|-------|--------|-------|
5959
| Acknowledgement of receipt | **24 hours** | From any channel listed in `security.txt`. Pending public approval to commit. |
6060
| Initial triage (severity, validity, fix plan) | **72 hours** | Pending public approval to commit. |
61-
| ENISA early-warning notification | **24 hours from awareness of active exploitation** (Art. 14(1)) | Hard regulatory deadline — not negotiable. |
62-
| ENISA follow-up report | **72 hours from awareness** (Art. 14(2)) | Hard regulatory deadline. |
63-
| ENISA final report | **14 days from CSIRT notification of CVE-published or vendor-published advisory** (Art. 14(3)) | Hard regulatory deadline. |
61+
| ENISA early-warning notification | **24 hours from awareness of active exploitation** (Art. 14(2)(a)) | Hard regulatory deadline — not negotiable. |
62+
| ENISA follow-up report | **72 hours from awareness** (Art. 14(2)(b)) | Hard regulatory deadline. |
63+
| ENISA final report | **14 days after a corrective or mitigating measure is available** (Art. 14(2)(c)) | Hard regulatory deadline. Clock runs from fix-availability, **not** from awareness or CVE publication. |
6464
| Coordinated public disclosure | Typically 90 days from triage; case-by-case | Negotiable with reporter. |
6565

6666
These targets are not yet publicly committed in the CVD policy. Once the

0 commit comments

Comments
 (0)