1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
from __future__ import annotations
import pytest
from sec_certs.dataset.fips import FIPSDataset
@pytest.mark.parametrize(
"input_dgst, expected_refs",
[
("3095", {"3093", "3094", "3096"}),
("3093", {"3090", "3091"}),
("3197", {"3195", "3096", "3196", "3644", "3651"}),
],
)
def test_html_modules_directly_referencing(processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str]):
crt = processed_dataset[input_dgst]
if not crt.state.module_extract_ok:
pytest.xfail(reason="Data from module not extracted")
assert crt.heuristics.module_processed_references.directly_referencing == expected_refs
@pytest.mark.parametrize("input_dgst, expected_refs", [("3095", {"3093", "3094", "3096"}), ("3093", {"3090", "3091"})])
def test_pdf_policies_directly_referencing(processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str]):
crt = processed_dataset[input_dgst]
if not crt.state.policy_extract_ok:
pytest.xfail(reason="Data from policy not extracted")
assert crt.heuristics.policy_processed_references.directly_referencing == expected_refs
@pytest.mark.parametrize(
"input_dgst, expected_refs",
[
(
"3093",
{
"3090",
"3091",
},
),
("3095", {"3090", "3091", "3093", "3094", "3096"}),
],
)
def test_html_modules_indirectly_referencing(processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str]):
crt = processed_dataset[input_dgst]
if not crt.state.module_extract_ok:
pytest.xfail(reason="Data from module not extracted")
assert crt.heuristics.module_processed_references.indirectly_referencing == expected_refs
@pytest.mark.parametrize(
"input_dgst, expected_refs",
[("3095", {"3090", "3091", "3093", "3094", "3096"}), ("3093", {"3090", "3091"})],
)
def test_pdf_policies_indirectly_referencing(processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str]):
crt = processed_dataset[input_dgst]
if not crt.state.policy_extract_ok:
pytest.xfail(reason="Data from policy not extracted")
assert crt.heuristics.policy_processed_references.indirectly_referencing == expected_refs
@pytest.mark.parametrize("input_dgst, expected_refs", [("3095", None), ("3093", {"3095"})])
def test_html_modules_directly_referenced_by(
processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str] | None
):
crt = processed_dataset[input_dgst]
if not crt.state.module_extract_ok:
pytest.xfail(reason="Data from module not extracted")
assert crt.heuristics.module_processed_references.directly_referenced_by == expected_refs
@pytest.mark.parametrize("input_dgst, expected_refs", [("3095", None), ("3093", {"3095"})])
def test_pdf_policies_directly_referenced_by(
processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str] | None
):
crt = processed_dataset[input_dgst]
if not crt.state.policy_extract_ok:
pytest.xfail(reason="Data from policy not extracted")
assert crt.heuristics.policy_processed_references.directly_referenced_by == expected_refs
@pytest.mark.parametrize("input_dgst, expected_refs", [("3095", None), ("3093", {"3095"})])
def test_html_modules_indirectly_referenced_by(
processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str] | None
):
crt = processed_dataset[input_dgst]
if not crt.state.module_extract_ok:
pytest.xfail(reason="Data from module not extracted")
assert crt.heuristics.module_processed_references.indirectly_referenced_by == expected_refs
@pytest.mark.parametrize("input_dgst, expected_refs", [("3095", None), ("3093", {"3095"})])
def test_pdf_policies_indirectly_referenced_by(
processed_dataset: FIPSDataset, input_dgst: str, expected_refs: set[str] | None
):
crt = processed_dataset[input_dgst]
if not crt.state.policy_extract_ok:
pytest.xfail(reason="Data from module not extracted")
assert crt.heuristics.module_processed_references.indirectly_referenced_by == expected_refs
def test_match_cpe(processed_dataset: FIPSDataset):
assert processed_dataset["2441"].heuristics.cpe_matches == {"cpe:2.3:o:redhat:enterprise_linux:7.1:*:*:*:*:*:*:*"}
def test_find_related_cves(processed_dataset: FIPSDataset):
assert processed_dataset.auxiliary_datasets.cve_dset
processed_dataset.auxiliary_datasets.cve_dset._cpe_uri_to_cve_ids_lookup[
"cpe:2.3:o:redhat:enterprise_linux:7.1:*:*:*:*:*:*:*"
] = {"CVE-123456"}
processed_dataset.compute_related_cves()
assert processed_dataset["2441"].heuristics.related_cves == {"CVE-123456"}
def test_find_related_cves_criteria_configuration(processed_dataset: FIPSDataset):
processed_dataset["2441"].heuristics.cpe_matches = {
"cpe:2.3:a:nalin_dahyabhai:vte:0.11.21:*:*:*:*:*:*:*",
"cpe:2.3:a:gnome:gnome-terminal:2.2:*:*:*:*:*:*:*",
}
processed_dataset.compute_related_cves()
assert processed_dataset["2441"].heuristics.related_cves == {"CVE-2003-0070"}
def test_keywords_heuristics(processed_dataset: FIPSDataset):
keywords = processed_dataset["2441"].pdf_data.keywords
assert keywords
assert keywords["symmetric_crypto"]["AES_competition"]["AES"]["AES"] == 53
assert not keywords["pq_crypto"]
assert keywords["crypto_library"]["OpenSSL"]["OpenSSL"] == 83
assert keywords["side_channel_analysis"]["SCA"]["timing attacks"] == 1
|