diff options
| author | GeogeFI | 2021-11-06 23:02:29 +0100 |
|---|---|---|
| committer | GeogeFI | 2021-11-06 23:02:29 +0100 |
| commit | 91ffa0fccdf4ea7d0bc99b3fc0f680de84ed3cad (patch) | |
| tree | 0b83a328378856407d11d6d7d4051d3b54ee24ec | |
| parent | d490fa180ac48b73e7f22cf06b0e1026b73b8c70 (diff) | |
| download | sec-certs-91ffa0fccdf4ea7d0bc99b3fc0f680de84ed3cad.tar.gz sec-certs-91ffa0fccdf4ea7d0bc99b3fc0f680de84ed3cad.tar.zst sec-certs-91ffa0fccdf4ea7d0bc99b3fc0f680de84ed3cad.zip | |
feat: Created inner structure for dependencies
| -rw-r--r-- | sec_certs/dataset/common_criteria.py | 50 | ||||
| -rw-r--r-- | sec_certs/model/dependency_finder.py | 29 |
2 files changed, 51 insertions, 28 deletions
diff --git a/sec_certs/dataset/common_criteria.py b/sec_certs/dataset/common_criteria.py index bb45cc7f..2a3e8196 100644 --- a/sec_certs/dataset/common_criteria.py +++ b/sec_certs/dataset/common_criteria.py @@ -624,41 +624,39 @@ class CCDataset(Dataset, ComplexSerializableType): self._compute_cert_labs() self._compute_cert_ids() self._compute_dependencies() - #self._compute_affected_ids() - #self._compute_affecting_ids() def _compute_dependencies(self): finder = DependencyFinder() - finder.fit([x for x in self]) + finder.fit(self.certs) def _populate_dependencies(self, finder): self.CCHeuristics.directly_affecting = finder.some_method1() self.CCHeuristics.indirectly_affecting = finder.some_method2() self.CCHeuristics.directly_affected_by = finder.some_method3() self.CCHeuristics.indirectly_affected_by = finder.some_method4() - - def _compute_affected_ids(self): - referenced_by_direct, referenced_by_indirect = helpers.build_cert_references(self.certs) - - for cert in self: - current_cert_id = cert.pdf_data.cert_id - if current_cert_id is not None: - cert.CCHeuristics.directly_affected_by = CCDataset._get_affected_directly(current_cert_id, - referenced_by_direct) - - cert.CCHeuristics.indirectly_affected_by = CCDataset._get_affected_indirectly(current_cert_id, - referenced_by_indirect) - - def _compute_affecting_ids(self) -> None: - # referenced_by_direct, referenced_by_indirect = helpers.build_cert_references(self.certs) - - for cert in self: - current_cert_id = cert.pdf_data.cert_id - if current_cert_id is not None: - cert.CCHeuristics.directly_affecting = CCDataset._get_affecting_directly(current_cert_id, - referenced_by_direct) - cert.CCHeuristics.indirectly_affecting = CCDataset._get_affecting_indirectly(current_cert_id, - referenced_by_indirect) + # + # def _compute_affected_ids(self): + # # referenced_by_direct, referenced_by_indirect = helpers.build_cert_references(self.certs) + # + # for cert in self: + # current_cert_id = cert.pdf_data.cert_id + # if current_cert_id is not None: + # cert.CCHeuristics.directly_affected_by = CCDataset._get_affected_directly(current_cert_id, + # referenced_by_direct) + # + # cert.CCHeuristics.indirectly_affected_by = CCDataset._get_affected_indirectly(current_cert_id, + # referenced_by_indirect) + # + # def _compute_affecting_ids(self) -> None: + # # referenced_by_direct, referenced_by_indirect = helpers.build_cert_references(self.certs) + # + # for cert in self: + # current_cert_id = cert.pdf_data.cert_id + # if current_cert_id is not None: + # cert.CCHeuristics.directly_affecting = CCDataset._get_affecting_directly(current_cert_id, + # referenced_by_direct) + # cert.CCHeuristics.indirectly_affecting = CCDataset._get_affecting_indirectly(current_cert_id, + # referenced_by_indirect) @serialize def analyze_certificates(self, fresh: bool = True): diff --git a/sec_certs/model/dependency_finder.py b/sec_certs/model/dependency_finder.py index 7f2abc1f..6540f5ff 100644 --- a/sec_certs/model/dependency_finder.py +++ b/sec_certs/model/dependency_finder.py @@ -1,7 +1,10 @@ -from typing import List, Set +from typing import List, Set, Dict class DependencyFinder: + + dependencies = {} + @staticmethod def _update_direct_references(referenced_by: Dict, cert_id: str, this_cert_id: str) -> None: if cert_id not in referenced_by: @@ -24,7 +27,7 @@ class DependencyFinder: # Direct reference for cert_id in cert_obj.pdf_data.report_keywords["rules_cert_id"]: if cert_id != this_cert_id and this_cert_id is not None: - _update_direct_references(referenced_by, cert_id, this_cert_id) + DependencyFinder._update_direct_references(referenced_by, cert_id, this_cert_id) referenced_by_indirect = {} @@ -82,7 +85,29 @@ class DependencyFinder: def fit(certificates: Dict) -> None: referenced_by_direct, referenced_by_indirect = DependencyFinder._build_cert_references(certificates) + for dgst in certificates: + cert_id = certificates[dgst].pdf_data.cert_id + + if not cert_id: + continue + + # init + DependencyFinder.dependencies[dgst] = {} + + DependencyFinder.dependencies[dgst]["directly_affected_by"] = \ + DependencyFinder._get_affected_directly(cert_id, referenced_by_direct) + + DependencyFinder.dependencies[dgst]["indirectly_affected_by"] = \ + DependencyFinder._get_affected_indirectly(cert_id, referenced_by_indirect) + + DependencyFinder.dependencies[dgst]["directly_affecting"] = \ + DependencyFinder._get_affecting_directly(cert_id, referenced_by_direct) + + DependencyFinder.dependencies[dgst]["indirectly_affecting"] = \ + DependencyFinder._get_affecting_indirectly(cert_id, referenced_by_indirect) + print() + @staticmethod def predict(cert) -> Set: |
