diff options
| author | Adam Janovsky | 2020-10-25 08:11:55 +0100 |
|---|---|---|
| committer | Adam Janovsky | 2020-10-25 08:11:55 +0100 |
| commit | 86d0705e820d24ffa32e4da233c8d494c6e9a745 (patch) | |
| tree | bdb4265fd1f7c8c5a4954711c45458df1783e971 | |
| parent | db224335ee39873ec1908f2629e8a9cbcb3c78fe (diff) | |
| download | sec-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.py | 16 | ||||
| -rw-r--r-- | sec_certs/dataset.py | 37 | ||||
| -rw-r--r-- | sec_certs/meta_parser.py | 28 |
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 |
