aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJ08nY2022-10-19 17:39:32 +0200
committerJ08nY2022-10-19 17:39:32 +0200
commit6ccdf21ef34e9532e518ed6ae3a4dabb8565d290 (patch)
treedf5892fe8398844b1d2d03a67fa54bb51a32a7c5
parent943a26e782573bf9efc36017b08c82a1adb5dc37 (diff)
downloadsec-certs-6ccdf21ef34e9532e518ed6ae3a4dabb8565d290.tar.gz
sec-certs-6ccdf21ef34e9532e518ed6ae3a4dabb8565d290.tar.zst
sec-certs-6ccdf21ef34e9532e518ed6ae3a4dabb8565d290.zip
Add a way to get the full MIP and IUT datasets from web.
-rw-r--r--sec_certs/config/settings.yaml6
-rw-r--r--sec_certs/dataset/fips_iut.py16
-rw-r--r--sec_certs/dataset/fips_mip.py16
-rw-r--r--tests/data/settings_test.yaml6
-rw-r--r--tests/test_fips_iut.py4
-rw-r--r--tests/test_fips_mip.py4
6 files changed, 52 insertions, 0 deletions
diff --git a/sec_certs/config/settings.yaml b/sec_certs/config/settings.yaml
index 3c9ef2b8..c823181c 100644
--- a/sec_certs/config/settings.yaml
+++ b/sec_certs/config/settings.yaml
@@ -39,9 +39,15 @@ cert_threshold:
fips_latest_snapshot:
description: URL for the latest snapshot of FIPS dataset
value: https://seccerts.org/fips/dataset.json
+fips_iut_dataset:
+ description: URL for the dataset of FIPS IUT data
+ value: https://seccerts.org/fips/iut/dataset.json
fips_iut_latest_snapshot:
description: URL for the latest snapshot of FIPS IUT data
value: https://seccerts.org/fips/iut/latest.json
+fips_mip_dataset:
+ description: URL for the dataset of FIPS MIP data
+ value: https://seccerts.org/fips/mip/dataset.json
fips_mip_latest_snapshot:
description: URL for the latest snapshot of FIPS MIP data
value: https://seccerts.org/fips/mip/latest.json
diff --git a/sec_certs/dataset/fips_iut.py b/sec_certs/dataset/fips_iut.py
index b731115c..791d108c 100644
--- a/sec_certs/dataset/fips_iut.py
+++ b/sec_certs/dataset/fips_iut.py
@@ -1,7 +1,11 @@
from dataclasses import dataclass
from pathlib import Path
+from tempfile import NamedTemporaryFile
from typing import Dict, Iterator, List, Mapping, Union
+import requests
+
+from sec_certs.config.configuration import config
from sec_certs.dataset.dataset import logger
from sec_certs.sample.fips_iut import IUTSnapshot
from sec_certs.serialization.json import ComplexSerializableType
@@ -39,3 +43,15 @@ class IUTDataset(ComplexSerializableType):
@classmethod
def from_dict(cls, dct: Mapping) -> "IUTDataset":
return cls(dct["snapshots"])
+
+ @classmethod
+ def from_web_latest(cls) -> "IUTDataset":
+ """
+ Get the IUTDataset from seccerts.org
+ """
+ iut_resp = requests.get(config.fips_mip_dataset)
+ if iut_resp.status_code != 200:
+ raise ValueError(f"Getting IUT dataset failed: {iut_resp.status_code}")
+ with NamedTemporaryFile() as tmpfile:
+ tmpfile.write(iut_resp.content)
+ return cls.from_json(tmpfile.name)
diff --git a/sec_certs/dataset/fips_mip.py b/sec_certs/dataset/fips_mip.py
index 91d8120c..78455171 100644
--- a/sec_certs/dataset/fips_mip.py
+++ b/sec_certs/dataset/fips_mip.py
@@ -1,7 +1,11 @@
from dataclasses import dataclass
from pathlib import Path
+from tempfile import NamedTemporaryFile
from typing import Dict, Iterator, List, Mapping, Union
+import requests
+
+from sec_certs.config.configuration import config
from sec_certs.dataset.dataset import logger
from sec_certs.sample.fips_mip import MIPSnapshot
from sec_certs.serialization.json import ComplexSerializableType
@@ -39,3 +43,15 @@ class MIPDataset(ComplexSerializableType):
@classmethod
def from_dict(cls, dct: Mapping) -> "MIPDataset":
return cls(dct["snapshots"])
+
+ @classmethod
+ def from_web_latest(cls) -> "MIPDataset":
+ """
+ Get the MIPDataset from seccerts.org
+ """
+ mip_resp = requests.get(config.fips_mip_dataset)
+ if mip_resp.status_code != 200:
+ raise ValueError(f"Getting MIP dataset failed: {mip_resp.status_code}")
+ with NamedTemporaryFile() as tmpfile:
+ tmpfile.write(mip_resp.content)
+ return cls.from_json(tmpfile.name)
diff --git a/tests/data/settings_test.yaml b/tests/data/settings_test.yaml
index 03ddbb62..82da0540 100644
--- a/tests/data/settings_test.yaml
+++ b/tests/data/settings_test.yaml
@@ -39,9 +39,15 @@ cert_threshold:
fips_latest_snapshot:
description: URL for the latest snapshot of FIPS dataset
value: https://seccerts.org/fips/dataset.json
+fips_iut_dataset:
+ description: URL for the dataset of FIPS IUT data
+ value: https://seccerts.org/fips/iut/dataset.json
fips_iut_latest_snapshot:
description: URL for the latest snapshot of FIPS IUT data
value: https://seccerts.org/fips/iut/latest.json
+fips_mip_dataset:
+ description: URL for the dataset of FIPS MIP data
+ value: https://seccerts.org/fips/mip/dataset.json
fips_mip_latest_snapshot:
description: URL for the latest snapshot of FIPS MIP data
value: https://seccerts.org/fips/mip/latest.json
diff --git a/tests/test_fips_iut.py b/tests/test_fips_iut.py
index 61761f27..2d8311c3 100644
--- a/tests/test_fips_iut.py
+++ b/tests/test_fips_iut.py
@@ -15,6 +15,10 @@ class TestFIPSIUT(TestCase):
self.assertIsNotNone(dset)
self.assertEqual(len(dset), 2)
+ def test_from_dataset_latest(self):
+ dset = IUTDataset.from_web_latest()
+ self.assertIsNotNone(dset)
+
def test_from_dump(self):
snap = IUTSnapshot.from_dump(self.test_data_dump)
self.assertIsNotNone(snap)
diff --git a/tests/test_fips_mip.py b/tests/test_fips_mip.py
index 170cfc4b..2f891035 100644
--- a/tests/test_fips_mip.py
+++ b/tests/test_fips_mip.py
@@ -15,6 +15,10 @@ class TestFIPSMIP(TestCase):
self.assertIsNotNone(dset)
self.assertEqual(len(dset), 3)
+ def test_from_dataset_latest(self):
+ dset = MIPDataset.from_web_latest()
+ self.assertIsNotNone(dset)
+
def test_from_dump(self):
snap = MIPSnapshot.from_dump(self.test_data_dump)
self.assertIsNotNone(snap)