aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam Janovsky2020-10-25 08:11:55 +0100
committerAdam Janovsky2020-10-25 08:11:55 +0100
commit86d0705e820d24ffa32e4da233c8d494c6e9a745 (patch)
treebdb4265fd1f7c8c5a4954711c45458df1783e971
parentdb224335ee39873ec1908f2629e8a9cbcb3c78fe (diff)
downloadsec-certs-86d0705e820d24ffa32e4da233c8d494c6e9a745.tar.gz
sec-certs-86d0705e820d24ffa32e4da233c8d494c6e9a745.tar.zst
sec-certs-86d0705e820d24ffa32e4da233c8d494c6e9a745.zip
further advances on mockup classes, meta (csv, html) parsers introduced
-rw-r--r--sec_certs/certificate.py16
-rw-r--r--sec_certs/dataset.py37
-rw-r--r--sec_certs/meta_parser.py28
3 files changed, 72 insertions, 9 deletions
diff --git a/sec_certs/certificate.py b/sec_certs/certificate.py
index 3e66f278..d00e1b05 100644
--- a/sec_certs/certificate.py
+++ b/sec_certs/certificate.py
@@ -29,3 +29,19 @@ class Certificate:
def __eq__(self, other: 'Certificate') -> bool:
return self.sha256 == other.sha256
+
+ @classmethod
+ def from_dict(cls, dct):
+ raise NotImplementedError('Mot meant to be implemented')
+
+
+class CommonCriteriaCert(Certificate):
+ @classmethod
+ def from_dict(cls, dct):
+ return CommonCriteriaCert()
+
+
+class FIPSCertificate(Certificate):
+ @classmethod
+ def from_dict(cls, dct):
+ return FIPSCertificate()
diff --git a/sec_certs/dataset.py b/sec_certs/dataset.py
index 278dfae9..4c008ba1 100644
--- a/sec_certs/dataset.py
+++ b/sec_certs/dataset.py
@@ -1,12 +1,17 @@
+from .meta_parser import CCMetaParser
+from .certificate import CommonCriteriaCert
+from . import constants
+
+
class Dataset:
- def __init__(self):
- self.certs = {}
- self.framework = None
- self.data_dir = None
+ def __init__(self, certs, framework, data_dir, name='dataset name', description='dataset_description'):
+ self.certs = certs
+ self.framework = framework
+ self.data_dir = data_dir
self.sha256_digest = 'not implemented' # TODO: Implement as hash of all certs
- self.name = 'not implemented' # TODO: Allow for naming of the datasets
- self.description = 'not implemented' # Allow for descriptions of the dataset
+ self.name = name # TODO: Allow for naming of the datasets
+ self.description = description # Allow for descriptions of the dataset
# The idea is to iterate over dataset as: `for cert in Dataset: ... `
def __iter__(self):
@@ -38,10 +43,24 @@ class Dataset:
def __str__(self):
return 'Not implemented' # TODO: Prepare some meaningful representation of the dataset
+ @classmethod
+ def init_from_meta(cls, data_dir, name, description):
+ pass
-class DatasetCC(Dataset):
- pass
+
+class CCDataset(Dataset):
+ @classmethod
+ def init_from_meta(cls, data_dir, name, description):
+ parser = CCMetaParser()
+ records = parser.parse_meta()
+ certs = {}
+
+ for r in records:
+ cert = CommonCriteriaCert.from_dict(r)
+ certs[cert.sha256] = cert
+
+ return CCDataset(certs, constants.CertFramework.CC, data_dir, name, description)
-class DatasetFIPS(Dataset):
+class FIPSDataset(Dataset):
pass
diff --git a/sec_certs/meta_parser.py b/sec_certs/meta_parser.py
new file mode 100644
index 00000000..bd72bae7
--- /dev/null
+++ b/sec_certs/meta_parser.py
@@ -0,0 +1,28 @@
+class MetaParser:
+ def parse_certs_from_html(self):
+ raise NotImplementedError('Meant to be provided by child classes')
+
+ def parse_certs_from_csv(self):
+ raise NotImplementedError('Meant to be provided by child classes')
+
+
+class CCMetaParser(MetaParser):
+ def __init__(self):
+ self.records = {}
+
+ def parse_meta(self):
+ self.parse_certs_from_csv()
+ self.parse_certs_from_html()
+
+ return self.records
+
+ def parse_certs_from_csv(self):
+ pass
+
+ def parse_certs_from_html(self):
+ pass
+
+
+class FIPSMetaParser(MetaParser):
+ def __init__(self):
+ pass \ No newline at end of file