@@ -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" ,
@@ -145,7 +137,7 @@ def create_sbom(
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 = {
0 commit comments