From badb03c35d9f908edfeb0396053e7f443654e055 Mon Sep 17 00:00:00 2001 From: Adam Janovsky Date: Mon, 1 Nov 2021 17:26:51 +0100 Subject: Rename Heuristics to FIPSHeuristics, CCHeuristics --- sec_certs/certificate/cc_maintenance_update.py | 2 +- sec_certs/certificate/certificate.py | 2 +- sec_certs/certificate/common_criteria.py | 6 +++--- sec_certs/certificate/fips.py | 6 +++--- sec_certs/dataset/fips.py | 2 +- sec_certs/serialization.py | 5 ++++- tests/data/test_cc_oop/fictional_cert.json | 2 +- tests/data/test_cc_oop/toy_dataset.json | 4 ++-- tests/data/test_cpe_cve/vulnerable_dataset.json | 2 +- 9 files changed, 17 insertions(+), 14 deletions(-) diff --git a/sec_certs/certificate/cc_maintenance_update.py b/sec_certs/certificate/cc_maintenance_update.py index 7e4db349..4f87e836 100644 --- a/sec_certs/certificate/cc_maintenance_update.py +++ b/sec_certs/certificate/cc_maintenance_update.py @@ -16,7 +16,7 @@ class CommonCriteriaMaintenanceUpdate(CommonCriteriaCert, ComplexSerializableTyp def __init__(self, name: str, report_link: str, st_link: str, state: Optional[CommonCriteriaCert.InternalState], pdf_data: Optional[CommonCriteriaCert.PdfData], - heuristics: Optional[CommonCriteriaCert.Heuristics], + heuristics: Optional[CommonCriteriaCert.CCHeuristics], related_cert_digest: str, maintenance_date: date): super().__init__('', '', name, '', '', '', None, None, diff --git a/sec_certs/certificate/certificate.py b/sec_certs/certificate/certificate.py index 36ba709a..ddcd2cb7 100644 --- a/sec_certs/certificate/certificate.py +++ b/sec_certs/certificate/certificate.py @@ -52,7 +52,7 @@ class Certificate(ABC, ComplexSerializableType): @classmethod def from_json(cls, input_path: Union[Path, str]): with Path(input_path).open('r') as handle: - return json.load(handle, csl=CustomJSONDecoder) + return json.load(handle, cls=CustomJSONDecoder) @abstractmethod def compute_heuristics_version(self): diff --git a/sec_certs/certificate/common_criteria.py b/sec_certs/certificate/common_criteria.py index af1935d2..f6470231 100644 --- a/sec_certs/certificate/common_criteria.py +++ b/sec_certs/certificate/common_criteria.py @@ -186,7 +186,7 @@ class CommonCriteriaCert(Certificate, ComplexSerializableType): return processed if (processed := self.processed_cert_id) else self.keywords_cert_id @dataclass - class Heuristics(ComplexSerializableType): + class CCHeuristics(ComplexSerializableType): extracted_versions: List[str] = field(default=None) cpe_matches: Optional[List[Tuple[float, CPE]]] = field(default=None) labeled: bool = field(default=False) @@ -227,7 +227,7 @@ class CommonCriteriaCert(Certificate, ComplexSerializableType): maintainance_updates: Set[MaintainanceReport], state: Optional[InternalState], pdf_data: Optional[PdfData], - heuristics: Optional[Heuristics]): + heuristics: Optional[CCHeuristics]): super().__init__() self.status = status @@ -254,7 +254,7 @@ class CommonCriteriaCert(Certificate, ComplexSerializableType): self.pdf_data = pdf_data if heuristics is None: - heuristics = self.Heuristics() + heuristics = self.CCHeuristics() self.heuristics = heuristics @property diff --git a/sec_certs/certificate/fips.py b/sec_certs/certificate/fips.py index d90fe835..e6438ec9 100644 --- a/sec_certs/certificate/fips.py +++ b/sec_certs/certificate/fips.py @@ -142,7 +142,7 @@ class FIPSCertificate(Certificate, ComplexSerializableType): return str(self.cert_id) @dataclass(eq=True) - class Heuristics(ComplexSerializableType): + class FIPSHeuristics(ComplexSerializableType): keywords: Optional[Dict[str, Dict]] algorithms: List[Dict[str, Dict]] connections: List[str] @@ -195,7 +195,7 @@ class FIPSCertificate(Certificate, ComplexSerializableType): def __init__(self, cert_id: str, web_scan: 'FIPSCertificate.WebScan', pdf_scan: 'FIPSCertificate.PdfScan', - heuristics: 'FIPSCertificate.Heuristics', + heuristics: 'FIPSCertificate.FIPSHeuristics', state: State): super().__init__() self.cert_id = cert_id @@ -456,7 +456,7 @@ class FIPSCertificate(Certificate, ComplexSerializableType): [] if not initialized else initialized.pdf_scan.algorithms, [] # connections ), - FIPSCertificate.Heuristics(None, {}, [], 0), + FIPSCertificate.FIPSHeuristics(None, {}, [], 0), state ) diff --git a/sec_certs/dataset/fips.py b/sec_certs/dataset/fips.py index 354aec8d..f13e3059 100644 --- a/sec_certs/dataset/fips.py +++ b/sec_certs/dataset/fips.py @@ -268,7 +268,7 @@ class FIPSDataset(Dataset, ComplexSerializableType): logger.info("Removing 'processed' field. This dataset can be used to be uploaded and later downloaded using latest_snapshot() or something") cert: FIPSCertificate for cert in self.certs.values(): - cert.heuristics = FIPSCertificate.Heuristics(None, {}, [], 0) + cert.heuristics = FIPSCertificate.FIPSHeuristics(None, {}, [], 0) self.match_algs() diff --git a/sec_certs/serialization.py b/sec_certs/serialization.py index e24138a8..f63b6cba 100644 --- a/sec_certs/serialization.py +++ b/sec_certs/serialization.py @@ -20,7 +20,10 @@ class ComplexSerializableType: @classmethod def from_dict(cls, dct: Dict): - return cls(*(tuple(dct.values()))) + try: + return cls(*(tuple(dct.values()))) + except TypeError as e: + raise TypeError(f'Dict: {dct} with mro: {cls.__mro__}') from e # Decorator for serialization diff --git a/tests/data/test_cc_oop/fictional_cert.json b/tests/data/test_cc_oop/fictional_cert.json index 9305d2a2..4cf5729e 100644 --- a/tests/data/test_cc_oop/fictional_cert.json +++ b/tests/data/test_cc_oop/fictional_cert.json @@ -52,7 +52,7 @@ "st_keywords": null }, "heuristics": { - "_type": "Heuristics", + "_type": "CCHeuristics", "extracted_versions": null, "cpe_matches": null, "labeled": false, diff --git a/tests/data/test_cc_oop/toy_dataset.json b/tests/data/test_cc_oop/toy_dataset.json index 67420b45..cb54514f 100644 --- a/tests/data/test_cc_oop/toy_dataset.json +++ b/tests/data/test_cc_oop/toy_dataset.json @@ -53,7 +53,7 @@ "st_keywords": null }, "heuristics": { - "_type": "Heuristics", + "_type": "CCHeuristics", "extracted_versions": null, "cpe_matches": null, "labeled": false, @@ -111,7 +111,7 @@ "st_keywords": null }, "heuristics": { - "_type": "Heuristics", + "_type": "CCHeuristics", "extracted_versions": null, "cpe_matches": null, "labeled": false, diff --git a/tests/data/test_cpe_cve/vulnerable_dataset.json b/tests/data/test_cpe_cve/vulnerable_dataset.json index 0d01e60f..eb0625a3 100644 --- a/tests/data/test_cpe_cve/vulnerable_dataset.json +++ b/tests/data/test_cpe_cve/vulnerable_dataset.json @@ -53,7 +53,7 @@ "st_keywords": null }, "heuristics": { - "_type": "Heuristics", + "_type": "CCHeuristics", "extracted_versions": [ "8.2" ], -- cgit v1.3.1 From e48a5bdf9883fed6ffc5878636dee0d21646e93e Mon Sep 17 00:00:00 2001 From: Adam Janovsky Date: Mon, 1 Nov 2021 17:27:44 +0100 Subject: fix typo in template test dataset --- tests/data/test_cc_oop/toy_dataset.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/data/test_cc_oop/toy_dataset.json b/tests/data/test_cc_oop/toy_dataset.json index cb54514f..2872f5e9 100644 --- a/tests/data/test_cc_oop/toy_dataset.json +++ b/tests/data/test_cc_oop/toy_dataset.json @@ -62,7 +62,7 @@ "cert_lab": null, "cert_id": null, "directly_affected_by": null, - "indirecly_affected_by": null, + "indirectly_affected_by": null, "directly_affecting": null, "indirectly_affecting": null } @@ -120,7 +120,7 @@ "cert_lab": null, "cert_id": null, "directly_affected_by": null, - "indirecly_affected_by": null, + "indirectly_affected_by": null, "directly_affecting": null, "indirectly_affecting": null } -- cgit v1.3.1