aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGeogeFI2021-11-06 23:02:29 +0100
committerGeogeFI2021-11-06 23:02:29 +0100
commit91ffa0fccdf4ea7d0bc99b3fc0f680de84ed3cad (patch)
tree0b83a328378856407d11d6d7d4051d3b54ee24ec
parentd490fa180ac48b73e7f22cf06b0e1026b73b8c70 (diff)
downloadsec-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.py50
-rw-r--r--sec_certs/model/dependency_finder.py29
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: