Skip to content

Commit 2884148

Browse files
committed
[ISV-5787] Remove child digests from externalRefs
- Updates build-time index SBOM creation script - Udpates tests accordingly
1 parent 63cd601 commit 2884148

File tree

2 files changed

+25
-43
lines changed

2 files changed

+25
-43
lines changed

sbom-utility-scripts/scripts/index-image-sbom-script/index_image_sbom_script.py

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -55,33 +55,26 @@ def digest_hex_val(self) -> str:
5555
_, val = self.digest.split(":")
5656
return val
5757

58-
def purls(self, index_digest: Optional[str] = None) -> list[str]:
59-
ans = []
60-
if index_digest and self.arch:
61-
ans.append(
62-
PackageURL(
63-
type="oci",
64-
name=self.name,
65-
version=index_digest,
66-
qualifiers={"arch": self.arch, "repository_url": self.repository},
67-
).to_string()
68-
)
69-
ans.append(
70-
PackageURL(
71-
type="oci",
72-
name=self.name,
73-
version=self.digest,
74-
qualifiers={"repository_url": self.repository},
75-
).to_string()
76-
)
77-
return ans
58+
def purl(self) -> str:
59+
qualifiers = {"repository_url": self.repository}
60+
if self.arch is not None:
61+
qualifiers["arch"] = self.arch
62+
63+
purl = PackageURL(
64+
type="oci",
65+
name=self.name,
66+
version=self.digest,
67+
qualifiers=qualifiers,
68+
).to_string()
69+
70+
return purl
7871

7972
def propose_spdx_id(self) -> str:
80-
purl_hex_digest = hashlib.sha256(self.purls()[0].encode()).hexdigest()
73+
purl_hex_digest = hashlib.sha256(self.purl().encode()).hexdigest()
8174
return f"SPDXRef-image-{self.name}-{purl_hex_digest}"
8275

8376

84-
def create_package(image: Image, spdxid: Optional[str] = None, image_index_digest: Optional[str] = None) -> dict:
77+
def create_package(image: Image, spdxid: Optional[str] = None) -> dict:
8578
return {
8679
"SPDXID": image.propose_spdx_id() if not spdxid else spdxid,
8780
"name": image.name if not image.arch else f"{image.name}_{image.arch}",
@@ -93,9 +86,8 @@ def create_package(image: Image, spdxid: Optional[str] = None, image_index_diges
9386
{
9487
"referenceCategory": "PACKAGE-MANAGER",
9588
"referenceType": "purl",
96-
"referenceLocator": purl,
89+
"referenceLocator": image.purl(),
9790
}
98-
for purl in image.purls(image_index_digest)
9991
],
10092
"checksums": [
10193
{
@@ -125,7 +117,7 @@ def create_sbom(
125117
image_index_obj = Image.from_image_index_url_and_digest(image_index_url, image_index_digest)
126118
sbom_name = f"{image_index_obj.repository}@{image_index_obj.digest}"
127119

128-
packages = [create_package(image_index_obj, "SPDXRef-image-index")]
120+
packages = [create_package(image_index_obj, spdxid="SPDXRef-image-index")]
129121
relationships = [
130122
{
131123
"spdxElementId": "SPDXRef-DOCUMENT",
@@ -141,11 +133,11 @@ def create_sbom(
141133
arch_image = Image(
142134
arch=manifest.get("platform", {}).get("architecture"),
143135
name=image_index_obj.name,
144-
digest=manifest.get("digest"),
136+
digest=image_index_digest,
145137
tag=image_index_obj.tag,
146138
repository=image_index_obj.repository,
147139
)
148-
packages.append(create_package(arch_image, image_index_digest=image_index_obj.digest))
140+
packages.append(create_package(arch_image))
149141
relationships.append(get_relationship(arch_image.propose_spdx_id(), "SPDXRef-image-index"))
150142

151143
sbom = {

sbom-utility-scripts/scripts/index-image-sbom-script/test_image_index_sbom_script.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
],
107107
},
108108
{
109-
"SPDXID": "SPDXRef-image-ubi9-micro-container-8358c7002e15f219c861227e97919d537e888874e7ca2b349979bc745f903195",
109+
"SPDXID": "SPDXRef-image-ubi9-micro-container-d57d132860ab3ff4eb64267c33897a8bf246ae1515df7d17cdf6e408c9f36b36",
110110
"name": "ubi9-micro-container_ppc64le",
111111
"versionInfo": "9.4-6.1716471860",
112112
"supplier": "NOASSERTION",
@@ -118,16 +118,11 @@
118118
"referenceType": "purl",
119119
"referenceLocator": "pkg:oci/ubi9-micro-container@sha256:1c8483e0fda0e990175eb9855a5f15e0910d2038dd397d9e2b357630f0321e6d?arch=ppc64le&repository_url=quay.io/ubi9-micro-container",
120120
},
121-
{
122-
"referenceCategory": "PACKAGE-MANAGER",
123-
"referenceType": "purl",
124-
"referenceLocator": "pkg:oci/ubi9-micro-container@sha256:f08722139c4da653b870272a192fac700960a3315baa1f79f83a4712a436d4?repository_url=quay.io/ubi9-micro-container",
125-
},
126121
],
127122
"checksums": [
128123
{
129124
"algorithm": "SHA256",
130-
"checksumValue": "f08722139c4da653b870272a192fac700960a3315baa1f79f83a4712a436d4",
125+
"checksumValue": "1c8483e0fda0e990175eb9855a5f15e0910d2038dd397d9e2b357630f0321e6d",
131126
}
132127
],
133128
},
@@ -139,7 +134,7 @@
139134
"relatedSpdxElement": "SPDXRef-image-index",
140135
},
141136
{
142-
"spdxElementId": "SPDXRef-image-ubi9-micro-container-8358c7002e15f219c861227e97919d537e888874e7ca2b349979bc745f903195",
137+
"spdxElementId": "SPDXRef-image-ubi9-micro-container-d57d132860ab3ff4eb64267c33897a8bf246ae1515df7d17cdf6e408c9f36b36",
143138
"relationshipType": "VARIANT_OF",
144139
"relatedSpdxElement": "SPDXRef-image-index",
145140
},
@@ -239,7 +234,7 @@ def test_main(
239234
"checksums": [{"algorithm": "SHA256", "checksumValue": "456"}],
240235
},
241236
{
242-
"SPDXID": "SPDXRef-image-bar-9adebc2aa46e921bcd2ff839697cf543a898d9b66e1cbf6dfc0626cf2845f716",
237+
"SPDXID": "SPDXRef-image-bar-c621206f7eb4159018ebf3fc192df8d270b15121bcdc653b468df1fe131860b1",
243238
"name": "bar_arm64",
244239
"versionInfo": "v1",
245240
"supplier": "NOASSERTION",
@@ -251,13 +246,8 @@ def test_main(
251246
"referenceType": "purl",
252247
"referenceLocator": "pkg:oci/bar@sha256:456?arch=arm64&repository_url=quay.io/foo/bar",
253248
},
254-
{
255-
"referenceCategory": "PACKAGE-MANAGER",
256-
"referenceType": "purl",
257-
"referenceLocator": "pkg:oci/bar@sha256:123?repository_url=quay.io/foo/bar",
258-
},
259249
],
260-
"checksums": [{"algorithm": "SHA256", "checksumValue": "123"}],
250+
"checksums": [{"algorithm": "SHA256", "checksumValue": "456"}],
261251
},
262252
],
263253
"relationships": [
@@ -267,7 +257,7 @@ def test_main(
267257
"relatedSpdxElement": "SPDXRef-image-index",
268258
},
269259
{
270-
"spdxElementId": "SPDXRef-image-bar-9adebc2aa46e921bcd2ff839697cf543a898d9b66e1cbf6dfc0626cf2845f716",
260+
"spdxElementId": "SPDXRef-image-bar-c621206f7eb4159018ebf3fc192df8d270b15121bcdc653b468df1fe131860b1",
271261
"relationshipType": "VARIANT_OF",
272262
"relatedSpdxElement": "SPDXRef-image-index",
273263
},

0 commit comments

Comments
 (0)