diff options
| author | J08nY | 2024-02-03 15:41:11 +0100 |
|---|---|---|
| committer | J08nY | 2024-02-03 15:41:11 +0100 |
| commit | c60fece36b7e7c5300b25cf83b9e34d338675067 (patch) | |
| tree | 05583aee936bb5d85a2dcbf2afdadcf788f312ff | |
| parent | 67861ffd16f215f7d476e90bb8e480a5c60dc01b (diff) | |
| download | sec-certs-c60fece36b7e7c5300b25cf83b9e34d338675067.tar.gz sec-certs-c60fece36b7e7c5300b25cf83b9e34d338675067.tar.zst sec-certs-c60fece36b7e7c5300b25cf83b9e34d338675067.zip | |
Improve US scheme rules.
| -rw-r--r-- | src/sec_certs/rules.yaml | 7 | ||||
| -rw-r--r-- | src/sec_certs/sample/cc_certificate_id.py | 29 | ||||
| -rw-r--r-- | tests/cc/test_cc_misc.py | 6 |
3 files changed, 38 insertions, 4 deletions
diff --git a/src/sec_certs/rules.yaml b/src/sec_certs/rules.yaml index 5604b709..fa188052 100644 --- a/src/sec_certs/rules.yaml +++ b/src/sec_certs/rules.yaml @@ -34,7 +34,12 @@ cc_cert_id: # Examples: # SERTIT-101 US: - - "CCEVS-VR-(?:CC-|VID)?[0-9]+-[0-9]+[a-z]?(?:-[0-9]+)?" # US NSA (CCEVS-VR-10884-2018 CCEVS-VR-VID10877-2018) + - "CCEVS-VR-(?:(?P<cc>CC)-)?(?:(?P<VID>VID)-?)?(?P<year>[0-9]{2})-(?P<counter>[0-9]+)" + - "CCEVS-VR-(?:(?P<cc>CC)-)?(?:(?P<VID>VID)-?)?(?P<counter>[0-9]{4,5})-(?P<year>[0-9]{4})?" + # Examples: + # CCEVS-VR-VID10015-2008 + # CCEVS-VR-10880-2018 + # CCEVS-VR-04-0082 CA: # '[0-9][0-9\-]+?-CR', # Canada - "[0-9][0-9][0-9]-[347]-[0-9][0-9][0-9]?(?:-CR|P)?" # Canada xxx-{347}-xxx (383-4-438, 383-4-82-CR, 383-4-422P) diff --git a/src/sec_certs/sample/cc_certificate_id.py b/src/sec_certs/sample/cc_certificate_id.py index 188a2163..e84f6df2 100644 --- a/src/sec_certs/sample/cc_certificate_id.py +++ b/src/sec_certs/sample/cc_certificate_id.py @@ -10,7 +10,9 @@ def _parse_year(year: str | None) -> int | None: if year is None: return None y = int(year) - if y < 100: + if y < 50: + return y + 2000 + elif y < 100: return y + 1900 else: return y @@ -39,7 +41,7 @@ class CertificateId: new_cert_id += f"-{doc}" if version: new_cert_id += f"v{version}" - return new_cert_id + break return new_cert_id @@ -63,7 +65,27 @@ class CertificateId: new_cert_id += f"-{year}" if doc: new_cert_id += f"-{doc}" - return new_cert_id + break + + return new_cert_id + + def _canonical_us(self) -> str: + new_cert_id = self.clean + for rule in rules["cc_cert_id"]["US"]: + if match := re.match(rule, new_cert_id): + groups = match.groupdict() + year = _parse_year(groups["year"]) + counter = groups["counter"] + cc = groups.get("cc") + vid = groups.get("VID") + new_cert_id = "CCEVS-VR" + if cc: + new_cert_id += f"-{cc}" + if vid: + new_cert_id += f"-{vid}" + new_cert_id += f"-{counter}" + new_cert_id += f"-{year}" + break return new_cert_id @@ -147,6 +169,7 @@ class CertificateId: schemes = { "FR": self._canonical_fr, "DE": self._canonical_de, + "US": self._canonical_us, "ES": self._canonical_es, "IT": self._canonical_it, "IN": self._canonical_in, diff --git a/tests/cc/test_cc_misc.py b/tests/cc/test_cc_misc.py index b9654c91..6fde3339 100644 --- a/tests/cc/test_cc_misc.py +++ b/tests/cc/test_cc_misc.py @@ -13,6 +13,12 @@ def test_canonicalize_de(): assert canonicalize("BSI-DSZ-CC-0837-V2-2014-MA-01", "DE") == "BSI-DSZ-CC-0837-V2-2014-MA-01" +def test_canonicalize_us(): + assert canonicalize("CCEVS-VR-VID10015-2008", "US") == "CCEVS-VR-VID-10015-2008" + assert canonicalize("CCEVS-VR-10880-2018", "US") == "CCEVS-VR-10880-2018" + assert canonicalize("CCEVS-VR-04-0082", "US") == "CCEVS-VR-0082-2004" + + def test_canonicalize_es(): assert canonicalize("2011-14-INF-1095-v1", "ES") == "2011-14-INF-1095" |
