Skip to content

Commit 02da120

Browse files
Rico-van-Dongennashif
authored andcommitted
scripts: west_commands: zspdx: updating sbom data based on cpe reference
The PackageName, PackageVersionand and PackageSupplier in the generated SBOM will be updated based on the information passed in the external-references in the module.yml. This way packages are better recognized by vulnerability scanning tools like cve-bin-tool. Signed-off-by: Rico van Dongen <[email protected]>
1 parent 29750ac commit 02da120

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

scripts/west_commands/zspdx/datatypes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ class PackageConfig:
8181
# package revision
8282
revision: str = ""
8383

84+
# package supplier or vendor
85+
supplier: str = ""
86+
8487
# package external references
8588
externalReferences: list = field(default_factory=list)
8689

scripts/west_commands/zspdx/writer.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,22 @@ def generateDowloadUrl(url, revision):
7474
# 2) pkg: Package object being described
7575
# 3) spdx_version: SPDX specification version
7676
def writePackageSPDX(f, pkg, spdx_version=SPDX_VERSION_2_3):
77+
#update package meta data based on provided CPE reference
78+
for ref in pkg.cfg.externalReferences:
79+
if re.fullmatch(CPE23TYPE_REGEX, ref):
80+
metadata = ref.split(':',6)
81+
#metadata should now be array like:
82+
#[cpe,2.3,a,arm,mbed_tls,3.5.1,*:*:*:*:*:*:*]
83+
pkg.cfg.supplier = metadata[3]
84+
pkg.cfg.name = metadata[4]
85+
pkg.cfg.version = metadata[5]
86+
7787
spdx_normalized_name = _normalize_spdx_name(pkg.cfg.name)
7888
spdx_normalize_spdx_id = _normalize_spdx_name(pkg.cfg.spdxID)
7989

8090
f.write(f"""##### Package: {spdx_normalized_name}
8191
82-
PackageName: {spdx_normalized_name}
92+
PackageName: {pkg.cfg.name}
8393
SPDXID: {spdx_normalize_spdx_id}
8494
PackageLicenseConcluded: {pkg.concludedLicense}
8595
""")
@@ -102,6 +112,9 @@ def writePackageSPDX(f, pkg, spdx_version=SPDX_VERSION_2_3):
102112
elif len(pkg.cfg.revision) > 0:
103113
f.write(f"PackageVersion: {pkg.cfg.revision}\n")
104114

115+
if len(pkg.cfg.supplier) > 0:
116+
f.write(f"PackageSupplier: Organization: {pkg.cfg.supplier}\n")
117+
105118
for ref in pkg.cfg.externalReferences:
106119
if re.fullmatch(CPE23TYPE_REGEX, ref):
107120
f.write(f"ExternalRef: SECURITY cpe23Type {ref}\n")

0 commit comments

Comments
 (0)