|
13 | 13 | from pathlib import Path
|
14 | 14 | from typing import IO, Any
|
15 | 15 |
|
16 |
| -from lib4sbom.data.package import SBOMPackage |
17 |
| -from lib4sbom.data.relationship import SBOMRelationship |
18 |
| -from lib4sbom.generator import SBOMGenerator |
19 |
| -from lib4sbom.sbom import SBOM |
20 |
| - |
21 |
| -from ..cve_scanner import CVEData |
22 |
| -from ..cvedb import CVEDB |
23 |
| -from ..error_handler import ErrorHandler, ErrorMode |
24 |
| -from ..log import LOGGER |
25 |
| -from ..util import ProductInfo, Remarks, VersionInfo |
26 |
| -from ..version import VERSION |
27 |
| -from .console import output_console |
28 |
| -from .html import output_html |
29 |
| -from .util import ( |
| 16 | +from cve_bin_tool.cve_scanner import CVEData |
| 17 | +from cve_bin_tool.cvedb import CVEDB |
| 18 | +from cve_bin_tool.error_handler import ErrorHandler, ErrorMode |
| 19 | +from cve_bin_tool.log import LOGGER |
| 20 | +from cve_bin_tool.output_engine.console import output_console |
| 21 | +from cve_bin_tool.output_engine.html import output_html |
| 22 | +from cve_bin_tool.output_engine.util import ( |
30 | 23 | add_extension_if_not,
|
31 | 24 | format_output,
|
32 | 25 | format_path,
|
|
35 | 28 | get_cve_summary,
|
36 | 29 | intermediate_output,
|
37 | 30 | )
|
| 31 | +from cve_bin_tool.sbom_manager.generate import SBOMGenerate |
| 32 | +from cve_bin_tool.util import ProductInfo, Remarks, VersionInfo |
| 33 | +from cve_bin_tool.version import VERSION |
38 | 34 |
|
39 | 35 |
|
40 | 36 | def output_json(
|
@@ -794,13 +790,15 @@ def output_cves(self, outfile, output_type="console"):
|
794 | 790 | if self.vex_filename != "":
|
795 | 791 | self.generate_vex(self.all_cve_data, self.vex_filename)
|
796 | 792 | if self.sbom_filename != "":
|
797 |
| - self.generate_sbom( |
| 793 | + sbomgen = SBOMGenerate( |
798 | 794 | self.all_product_data,
|
799 |
| - filename=self.sbom_filename, |
800 |
| - sbom_type=self.sbom_type, |
801 |
| - sbom_format=self.sbom_format, |
802 |
| - sbom_root=self.sbom_root, |
| 795 | + self.sbom_filename, |
| 796 | + self.sbom_type, |
| 797 | + self.sbom_format, |
| 798 | + self.sbom_root, |
| 799 | + self.logger, |
803 | 800 | )
|
| 801 | + sbomgen.generate_sbom() |
804 | 802 |
|
805 | 803 | def generate_vex(self, all_cve_data: dict[ProductInfo, CVEData], filename: str):
|
806 | 804 | """Generate a vex file and create vulnerability entry."""
|
@@ -906,78 +904,6 @@ def generate_vex(self, all_cve_data: dict[ProductInfo, CVEData], filename: str):
|
906 | 904 | with open(filename, "w") as outfile:
|
907 | 905 | json.dump(vex_output, outfile, indent=" ")
|
908 | 906 |
|
909 |
| - def generate_sbom( |
910 |
| - self, |
911 |
| - all_product_data, |
912 |
| - filename="", |
913 |
| - sbom_type="spdx", |
914 |
| - sbom_format="tag", |
915 |
| - sbom_root="CVE-SCAN", |
916 |
| - ): |
917 |
| - """Create SBOM package and generate SBOM file.""" |
918 |
| - # Create SBOM |
919 |
| - sbom_relationships = [] |
920 |
| - my_package = SBOMPackage() |
921 |
| - sbom_relationship = SBOMRelationship() |
922 |
| - |
923 |
| - # Create root package |
924 |
| - my_package.initialise() |
925 |
| - root_package = f'CVEBINTOOL-{Path(sbom_root).name.replace(".", "-")}' |
926 |
| - parent = f"SBOM_{root_package}" |
927 |
| - my_package.set_name(root_package) |
928 |
| - my_package.set_type("application") |
929 |
| - my_package.set_filesanalysis(False) |
930 |
| - my_package.set_downloadlocation(sbom_root) |
931 |
| - license = "NOASSERTION" |
932 |
| - my_package.set_licensedeclared(license) |
933 |
| - my_package.set_licenseconcluded(license) |
934 |
| - my_package.set_supplier("UNKNOWN", "NOASSERTION") |
935 |
| - |
936 |
| - # Store package data |
937 |
| - self.sbom_packages[(my_package.get_name(), my_package.get_value("version"))] = ( |
938 |
| - my_package.get_package() |
939 |
| - ) |
940 |
| - sbom_relationship.initialise() |
941 |
| - sbom_relationship.set_relationship(parent, "DESCRIBES", root_package) |
942 |
| - sbom_relationships.append(sbom_relationship.get_relationship()) |
943 |
| - |
944 |
| - # Add dependent products |
945 |
| - for product_data in all_product_data: |
946 |
| - my_package.initialise() |
947 |
| - my_package.set_name(product_data.product) |
948 |
| - my_package.set_version(product_data.version) |
949 |
| - if product_data.vendor.casefold() != "UNKNOWN".casefold(): |
950 |
| - my_package.set_supplier("Organization", product_data.vendor) |
951 |
| - my_package.set_licensedeclared(license) |
952 |
| - my_package.set_licenseconcluded(license) |
953 |
| - if not ( |
954 |
| - (my_package.get_name(), my_package.get_value("version")) |
955 |
| - in self.sbom_packages |
956 |
| - and product_data.vendor == "unknown" |
957 |
| - ): |
958 |
| - location = product_data.location |
959 |
| - my_package.set_evidence(location) # Set location directly |
960 |
| - self.sbom_packages[ |
961 |
| - (my_package.get_name(), my_package.get_value("version")) |
962 |
| - ] = my_package.get_package() |
963 |
| - sbom_relationship.initialise() |
964 |
| - sbom_relationship.set_relationship( |
965 |
| - root_package, "DEPENDS_ON", product_data.product |
966 |
| - ) |
967 |
| - sbom_relationships.append(sbom_relationship.get_relationship()) |
968 |
| - |
969 |
| - # Generate SBOM |
970 |
| - my_sbom = SBOM() |
971 |
| - my_sbom.add_packages(self.sbom_packages) |
972 |
| - my_sbom.add_relationships(sbom_relationships) |
973 |
| - my_generator = SBOMGenerator( |
974 |
| - sbom_type=sbom_type, |
975 |
| - format=sbom_format, |
976 |
| - application="cve-bin-tool", |
977 |
| - version=VERSION, |
978 |
| - ) |
979 |
| - my_generator.generate(parent, my_sbom.get_sbom(), filename=filename) |
980 |
| - |
981 | 907 | def output_file_wrapper(self, output_types=["console"]):
|
982 | 908 | """Call output_file method for all output types."""
|
983 | 909 | for output_type in output_types:
|
|
0 commit comments