diff options
| author | Stanislav Boboň | 2021-01-03 17:59:30 +0100 |
|---|---|---|
| committer | Stanislav Boboň | 2021-01-03 17:59:30 +0100 |
| commit | 41ec3b09b847611a41bc23f64b4850a45dd7535d (patch) | |
| tree | d4f019a43c370b5bffe4c993d788ba656f3aeb30 | |
| parent | 198d28ba5bce238ff0fd976cf80e323f78402770 (diff) | |
| download | sec-certs-41ec3b09b847611a41bc23f64b4850a45dd7535d.tar.gz sec-certs-41ec3b09b847611a41bc23f64b4850a45dd7535d.tar.zst sec-certs-41ec3b09b847611a41bc23f64b4850a45dd7535d.zip | |
normalization + description
| -rw-r--r-- | sec_certs/certificate.py | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/sec_certs/certificate.py b/sec_certs/certificate.py index 64d7d406..acb1fc79 100644 --- a/sec_certs/certificate.py +++ b/sec_certs/certificate.py @@ -51,7 +51,7 @@ class Certificate(ABC): @classmethod def from_dict(cls: Type[T], dct: dict) -> T: - return cls(*tuple(dct.values())) + return cls(*(tuple(dct.values()))) def to_json(self, output_path: Union[Path, str]): with Path(output_path).open('w') as handle: @@ -154,7 +154,9 @@ class FIPSCertificate(Certificate, ComplexSerializableType): txt_state: bool, keywords: Dict, revoked_reason: Optional[str], - revoked_link: Optional[str]): + revoked_link: Optional[str], + sw_versions: Optional[str], + product_url: Optional[str]): super().__init__() self.cert_id = cert_id @@ -194,6 +196,8 @@ class FIPSCertificate(Certificate, ComplexSerializableType): self.revoked_reason = revoked_reason self.revoked_link = revoked_link + self.sw_versions = sw_versions + self.product_url = product_url @staticmethod def download_html_page(cert: Tuple[str, Path]) -> None: @@ -218,7 +222,7 @@ class FIPSCertificate(Certificate, ComplexSerializableType): 'vendor': None, 'vendor_www': None, 'lab': None, 'lab_nvlap': None, 'historical_reason': None, 'revoked_reason': None, 'revoked_link': None, 'algorithms': [], 'mentioned_certs': [], 'tables_done': False, 'security_policy_www': None, 'certificate_www': None, - 'hw_versions': None, 'fw_versions': None} + 'hw_versions': None, 'fw_versions': None, 'sw_versions': None, 'product_url': None} return d @@ -279,8 +283,12 @@ class FIPSCertificate(Certificate, ComplexSerializableType): .replace('\n', '').replace('\t', '').replace(' ', ' ') if title in pairs: - if 'date' in pairs[title]: + if 'date_validation' == pairs[title]: html_items_found[pairs[title]] = [parser.parse(x) for x in content.split(';')] + + elif 'date_sunset' == pairs[title]: + html_items_found[pairs[title]] = parser.parse(content) + elif 'caveat' in pairs[title]: html_items_found[pairs[title]] = content html_items_found['mentioned_certs'] += FIPSCertificate.parse_caveat( @@ -292,6 +300,8 @@ class FIPSCertificate(Certificate, ComplexSerializableType): elif 'Algorithms' in title or 'Description' in title: html_items_found['algorithms'] += FIPSCertificate.extract_algorithm_certificates(content) + if 'Description' in title: + html_items_found['description'] = content elif 'tested_conf' in pairs[title]: html_items_found[pairs[title]] = [x.text for x in @@ -337,6 +347,11 @@ class FIPSCertificate(Certificate, ComplexSerializableType): if len(links) == 2: html_items_found['certificate_www'] = dataset.FIPSDataset.FIPS_BASE_URL + links[1].get('href') + @staticmethod + def normalize(items: Dict): + items['type'] = items['type'].lower().replace('-', ' ').title() + items['embodiment'] = items['embodiment'].lower().replace('-', ' ').replace('stand alone', 'standalone').title() + @classmethod def html_from_file(cls, file: Path, state: State, initialized: 'FIPSCertificate' = None) -> 'FIPSCertificate': pairs = { @@ -359,7 +374,9 @@ class FIPSCertificate(Certificate, ComplexSerializableType): 'Hardware Versions': 'hw_versions', 'Firmware Versions': 'fw_versions', 'Revoked Reason': 'revoked_reason', - 'Revoked Link': 'revoked_link' + 'Revoked Link': 'revoked_link', + 'Software Versions': 'sw_versions', + 'Product URL': 'product_url' } if not initialized: items_found = FIPSCertificate.initialize_dictionary() @@ -409,6 +426,8 @@ class FIPSCertificate(Certificate, ComplexSerializableType): items_found['algorithms'] = new_algs + FIPSCertificate.normalize(items_found) + return FIPSCertificate(items_found['cert_id'], items_found['module_name'], items_found['standard'], @@ -440,7 +459,9 @@ class FIPSCertificate(Certificate, ComplexSerializableType): False if not initialized else items_found['txt_state'], None if not initialized else items_found['keywords'], items_found['revoked_reason'], - items_found['revoked_link']) + items_found['revoked_link'], + items_found['sw_versions'], + items_found['product_url']) @staticmethod def convert_pdf_file(tup: Tuple['FIPSCertificate', Path, Path]) -> 'FIPSCertificate': |
