aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--notebooks/cc/dependency_analysis.ipynb523
1 files changed, 77 insertions, 446 deletions
diff --git a/notebooks/cc/dependency_analysis.ipynb b/notebooks/cc/dependency_analysis.ipynb
index 30ce1390..82b600b1 100644
--- a/notebooks/cc/dependency_analysis.ipynb
+++ b/notebooks/cc/dependency_analysis.ipynb
@@ -45,7 +45,7 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "a943f274",
+ "id": "f1e12b36",
"metadata": {},
"outputs": [],
"source": [
@@ -5641,7 +5641,7 @@
},
{
"cell_type": "markdown",
- "id": "d186e15f",
+ "id": "aab6cbec",
"metadata": {},
"source": [
"### Which schemes are directly affecting certs with other schemes"
@@ -5650,7 +5650,7 @@
{
"cell_type": "code",
"execution_count": 49,
- "id": "e51bc657",
+ "id": "dc154008",
"metadata": {
"scrolled": false
},
@@ -5690,7 +5690,7 @@
{
"cell_type": "code",
"execution_count": 54,
- "id": "47421124",
+ "id": "b5758f83",
"metadata": {
"scrolled": true
},
@@ -5710,437 +5710,8 @@
},
{
"cell_type": "code",
- "execution_count": 55,
- "id": "96b9810c",
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>cert_id</th>\n",
- " <th>name</th>\n",
- " <th>status</th>\n",
- " <th>category</th>\n",
- " <th>manufacturer</th>\n",
- " <th>scheme</th>\n",
- " <th>security_level</th>\n",
- " <th>not_valid_before</th>\n",
- " <th>not_valid_after</th>\n",
- " <th>report_link</th>\n",
- " <th>...</th>\n",
- " <th>cpe_matches</th>\n",
- " <th>verified_cpe_matches</th>\n",
- " <th>related_cves</th>\n",
- " <th>directly_affected_by</th>\n",
- " <th>indirectly_affected_by</th>\n",
- " <th>directly_affecting</th>\n",
- " <th>indirectly_affecting</th>\n",
- " <th>is_bsi_cert</th>\n",
- " <th>is_anssi_cert</th>\n",
- " <th>highest_security_level</th>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>dgst</th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>98c1ac41aedcdae2</th>\n",
- " <td>BSI-DSZ-CC-1142-2020</td>\n",
- " <td>genuscreen 7.0</td>\n",
- " <td>active</td>\n",
- " <td>Boundary Protection Devices and Systems</td>\n",
- " <td>genua GmbH</td>\n",
- " <td>DE</td>\n",
- " <td>[ALC_FLR.2, ASE_TSS.2, AVA_VAN.4, EAL4+]</td>\n",
- " <td>2020-08-18</td>\n",
- " <td>2025-08-17</td>\n",
- " <td>https://www.commoncriteriaportal.org/files/epf...</td>\n",
- " <td>...</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>{BSI-DSZ-CC-1085-2019}</td>\n",
- " <td>{BSI-DSZ-CC-1085-2019}</td>\n",
- " <td>True</td>\n",
- " <td>False</td>\n",
- " <td>EAL4+</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>0eff4063e68d7cd6</th>\n",
- " <td>BSI-DSZ-CC-0823-2014</td>\n",
- " <td>genuscreen 4.0</td>\n",
- " <td>active</td>\n",
- " <td>Boundary Protection Devices and Systems</td>\n",
- " <td>GeNUA mbH</td>\n",
- " <td>DE</td>\n",
- " <td>[ALC_FLR.2, ASE_TSS.2, AVA_VAN.4, EAL4+]</td>\n",
- " <td>2014-10-29</td>\n",
- " <td>NaT</td>\n",
- " <td>https://www.commoncriteriaportal.org/files/epf...</td>\n",
- " <td>...</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>[BSI-DSZ-CC-0966-2015]</td>\n",
- " <td>{BSI-DSZ-CC-0966-2015}</td>\n",
- " <td>{BSI-DSZ-CC-0565-2009}</td>\n",
- " <td>{BSI-DSZ-CC-0565-2009, BSI-DSZ-CC-0382-2007}</td>\n",
- " <td>True</td>\n",
- " <td>False</td>\n",
- " <td>EAL4+</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>e62f50581d828477</th>\n",
- " <td>BSI-DSZ-CC-0519-V3-2021</td>\n",
- " <td>ORGA 6141 online Version 3.7.2:1.2.0</td>\n",
- " <td>active</td>\n",
- " <td>ICs, Smart Cards and Smart Card-Related Device...</td>\n",
- " <td>Ingenico Healthcare GmbH</td>\n",
- " <td>DE</td>\n",
- " <td>[ADV_FSP.4, ADV_IMP.1, ADV_TDS.3, ALC_TAT.1, A...</td>\n",
- " <td>2021-03-22</td>\n",
- " <td>2026-03-22</td>\n",
- " <td>https://www.commoncriteriaportal.org/files/epf...</td>\n",
- " <td>...</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n",
- " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n",
- " <td>True</td>\n",
- " <td>False</td>\n",
- " <td>EAL3+</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6a5cb89e80f86ce9</th>\n",
- " <td>BSI-DSZ-CC-0977-V3-2021</td>\n",
- " <td>NXP Secure Smart Card Controller N7021 VA incl...</td>\n",
- " <td>active</td>\n",
- " <td>ICs, Smart Cards and Smart Card-Related Device...</td>\n",
- " <td>NXP Semiconductors Germany GmbH</td>\n",
- " <td>DE</td>\n",
- " <td>[ALC_FLR.1, ASE_TSS.2, EAL6+]</td>\n",
- " <td>2021-02-24</td>\n",
- " <td>2026-02-24</td>\n",
- " <td>https://www.commoncriteriaportal.org/files/epf...</td>\n",
- " <td>...</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>{BSI-DSZ-CC-0977-V2-2019, BSI-DSZ-CC-0977-V3}</td>\n",
- " <td>{BSI-DSZ-CC-0977-2017, BSI-DSZ-CC-0977-V2-2019...</td>\n",
- " <td>True</td>\n",
- " <td>False</td>\n",
- " <td>EAL6+</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>41fb9717f70d3037</th>\n",
- " <td>BSI-DSZ-CC-1052-V3-2021</td>\n",
- " <td>RISE Konnektor V3.0</td>\n",
- " <td>active</td>\n",
- " <td>ICs, Smart Cards and Smart Card-Related Device...</td>\n",
- " <td>Research Industrial Systems Engineering (RISE)...</td>\n",
- " <td>DE</td>\n",
- " <td>[ADV_FSP.4, ADV_INT.1, ADV_TDS.3, ALC_FLR.2, A...</td>\n",
- " <td>2021-02-22</td>\n",
- " <td>2026-03-21</td>\n",
- " <td>https://www.commoncriteriaportal.org/files/epf...</td>\n",
- " <td>...</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>NaN</td>\n",
- " <td>{BSI-DSZ-CC-1052-V2-2020, BSI-DSZ-CC-1052-V3}</td>\n",
- " <td>{BSI-DSZ-CC-1052-V2, BSI-DSZ-CC-1052-2018, BSI...</td>\n",
- " <td>True</td>\n",
- " <td>False</td>\n",
- " <td>EAL3+</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "<p>5 rows × 23 columns</p>\n",
- "</div>"
- ],
- "text/plain": [
- " cert_id \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 BSI-DSZ-CC-1142-2020 \n",
- "0eff4063e68d7cd6 BSI-DSZ-CC-0823-2014 \n",
- "e62f50581d828477 BSI-DSZ-CC-0519-V3-2021 \n",
- "6a5cb89e80f86ce9 BSI-DSZ-CC-0977-V3-2021 \n",
- "41fb9717f70d3037 BSI-DSZ-CC-1052-V3-2021 \n",
- "\n",
- " name status \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 genuscreen 7.0 active \n",
- "0eff4063e68d7cd6 genuscreen 4.0 active \n",
- "e62f50581d828477 ORGA 6141 online Version 3.7.2:1.2.0 active \n",
- "6a5cb89e80f86ce9 NXP Secure Smart Card Controller N7021 VA incl... active \n",
- "41fb9717f70d3037 RISE Konnektor V3.0 active \n",
- "\n",
- " category \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 Boundary Protection Devices and Systems \n",
- "0eff4063e68d7cd6 Boundary Protection Devices and Systems \n",
- "e62f50581d828477 ICs, Smart Cards and Smart Card-Related Device... \n",
- "6a5cb89e80f86ce9 ICs, Smart Cards and Smart Card-Related Device... \n",
- "41fb9717f70d3037 ICs, Smart Cards and Smart Card-Related Device... \n",
- "\n",
- " manufacturer scheme \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 genua GmbH DE \n",
- "0eff4063e68d7cd6 GeNUA mbH DE \n",
- "e62f50581d828477 Ingenico Healthcare GmbH DE \n",
- "6a5cb89e80f86ce9 NXP Semiconductors Germany GmbH DE \n",
- "41fb9717f70d3037 Research Industrial Systems Engineering (RISE)... DE \n",
- "\n",
- " security_level \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 [ALC_FLR.2, ASE_TSS.2, AVA_VAN.4, EAL4+] \n",
- "0eff4063e68d7cd6 [ALC_FLR.2, ASE_TSS.2, AVA_VAN.4, EAL4+] \n",
- "e62f50581d828477 [ADV_FSP.4, ADV_IMP.1, ADV_TDS.3, ALC_TAT.1, A... \n",
- "6a5cb89e80f86ce9 [ALC_FLR.1, ASE_TSS.2, EAL6+] \n",
- "41fb9717f70d3037 [ADV_FSP.4, ADV_INT.1, ADV_TDS.3, ALC_FLR.2, A... \n",
- "\n",
- " not_valid_before not_valid_after \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 2020-08-18 2025-08-17 \n",
- "0eff4063e68d7cd6 2014-10-29 NaT \n",
- "e62f50581d828477 2021-03-22 2026-03-22 \n",
- "6a5cb89e80f86ce9 2021-02-24 2026-02-24 \n",
- "41fb9717f70d3037 2021-02-22 2026-03-21 \n",
- "\n",
- " report_link ... \\\n",
- "dgst ... \n",
- "98c1ac41aedcdae2 https://www.commoncriteriaportal.org/files/epf... ... \n",
- "0eff4063e68d7cd6 https://www.commoncriteriaportal.org/files/epf... ... \n",
- "e62f50581d828477 https://www.commoncriteriaportal.org/files/epf... ... \n",
- "6a5cb89e80f86ce9 https://www.commoncriteriaportal.org/files/epf... ... \n",
- "41fb9717f70d3037 https://www.commoncriteriaportal.org/files/epf... ... \n",
- "\n",
- " cpe_matches verified_cpe_matches related_cves \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 NaN NaN NaN \n",
- "0eff4063e68d7cd6 NaN NaN NaN \n",
- "e62f50581d828477 NaN NaN NaN \n",
- "6a5cb89e80f86ce9 NaN NaN NaN \n",
- "41fb9717f70d3037 NaN NaN NaN \n",
- "\n",
- " directly_affected_by indirectly_affected_by \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 NaN NaN \n",
- "0eff4063e68d7cd6 [BSI-DSZ-CC-0966-2015] {BSI-DSZ-CC-0966-2015} \n",
- "e62f50581d828477 NaN NaN \n",
- "6a5cb89e80f86ce9 NaN NaN \n",
- "41fb9717f70d3037 NaN NaN \n",
- "\n",
- " directly_affecting \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 {BSI-DSZ-CC-1085-2019} \n",
- "0eff4063e68d7cd6 {BSI-DSZ-CC-0565-2009} \n",
- "e62f50581d828477 {BSI-DSZ-CC-0519-V2-2018} \n",
- "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-V2-2019, BSI-DSZ-CC-0977-V3} \n",
- "41fb9717f70d3037 {BSI-DSZ-CC-1052-V2-2020, BSI-DSZ-CC-1052-V3} \n",
- "\n",
- " indirectly_affecting \\\n",
- "dgst \n",
- "98c1ac41aedcdae2 {BSI-DSZ-CC-1085-2019} \n",
- "0eff4063e68d7cd6 {BSI-DSZ-CC-0565-2009, BSI-DSZ-CC-0382-2007} \n",
- "e62f50581d828477 {BSI-DSZ-CC-0519-V2-2018} \n",
- "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-2017, BSI-DSZ-CC-0977-V2-2019... \n",
- "41fb9717f70d3037 {BSI-DSZ-CC-1052-V2, BSI-DSZ-CC-1052-2018, BSI... \n",
- "\n",
- " is_bsi_cert is_anssi_cert highest_security_level \n",
- "dgst \n",
- "98c1ac41aedcdae2 True False EAL4+ \n",
- "0eff4063e68d7cd6 True False EAL4+ \n",
- "e62f50581d828477 True False EAL3+ \n",
- "6a5cb89e80f86ce9 True False EAL6+ \n",
- "41fb9717f70d3037 True False EAL3+ \n",
- "\n",
- "[5 rows x 23 columns]"
- ]
- },
- "execution_count": 55,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "scheme_df.head()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 76,
- "id": "a6ffaaa1",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'KR'"
- ]
- },
- "execution_count": 76,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df[df[\"cert_id\"] == \"KECS-CR-19-70\"][\"scheme\"].tolist()[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 85,
- "id": "4198aedb",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>cert_id</th>\n",
- " <th>name</th>\n",
- " <th>status</th>\n",
- " <th>category</th>\n",
- " <th>manufacturer</th>\n",
- " <th>scheme</th>\n",
- " <th>security_level</th>\n",
- " <th>not_valid_before</th>\n",
- " <th>not_valid_after</th>\n",
- " <th>report_link</th>\n",
- " <th>...</th>\n",
- " <th>cpe_matches</th>\n",
- " <th>verified_cpe_matches</th>\n",
- " <th>related_cves</th>\n",
- " <th>directly_affected_by</th>\n",
- " <th>indirectly_affected_by</th>\n",
- " <th>directly_affecting</th>\n",
- " <th>indirectly_affecting</th>\n",
- " <th>is_bsi_cert</th>\n",
- " <th>is_anssi_cert</th>\n",
- " <th>highest_security_level</th>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>dgst</th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " </tbody>\n",
- "</table>\n",
- "<p>0 rows × 23 columns</p>\n",
- "</div>"
- ],
- "text/plain": [
- "Empty DataFrame\n",
- "Columns: [cert_id, name, status, category, manufacturer, scheme, security_level, not_valid_before, not_valid_after, report_link, st_link, manufacturer_web, extracted_versions, cpe_matches, verified_cpe_matches, related_cves, directly_affected_by, indirectly_affected_by, directly_affecting, indirectly_affecting, is_bsi_cert, is_anssi_cert, highest_security_level]\n",
- "Index: []\n",
- "\n",
- "[0 rows x 23 columns]"
- ]
- },
- "execution_count": 85,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df[df[\"cert_id\"] == \"ANSSI-2009/2930\"]"
- ]
- },
- {
- "cell_type": "code",
"execution_count": 86,
- "id": "22be5183",
+ "id": "ec96a506",
"metadata": {},
"outputs": [],
"source": [
@@ -6156,22 +5727,19 @@
},
{
"cell_type": "code",
- "execution_count": 90,
- "id": "7160b788",
+ "execution_count": 91,
+ "id": "7c537844",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "{'US': Counter(), 'FR': Counter({'FR': 57, 'DE': 56, None: 25, 'KR': 17}), 'DE': Counter({'DE': 723, None: 134, 'FR': 22, 'KR': 14, 'ES': 13, 'NL': 9, 'TR': 7, 'US': 2}), 'JP': Counter({'DE': 2}), 'CA': Counter(), 'NL': Counter({'KR': 1, None: 1}), 'ES': Counter({'DE': 1}), 'KR': Counter({'KR': 3, None: 3, 'DE': 1}), 'UK': Counter(), 'AU': Counter(), 'NO': Counter(), 'SE': Counter(), 'MY': Counter(), 'TR': Counter(), 'IT': Counter(), 'IN': Counter(), 'SG': Counter()}\n",
- "Done\n"
+ "{'US': Counter(), 'FR': Counter({'FR': 57, 'DE': 56, None: 25, 'KR': 17}), 'DE': Counter({'DE': 723, None: 134, 'FR': 22, 'KR': 14, 'ES': 13, 'NL': 9, 'TR': 7, 'US': 2}), 'JP': Counter({'DE': 2}), 'CA': Counter(), 'NL': Counter({'KR': 1, None: 1}), 'ES': Counter({'DE': 1}), 'KR': Counter({'KR': 3, None: 3, 'DE': 1}), 'UK': Counter(), 'AU': Counter(), 'NO': Counter(), 'SE': Counter(), 'MY': Counter(), 'TR': Counter(), 'IT': Counter(), 'IN': Counter(), 'SG': Counter()}\n"
]
}
],
"source": [
- "# TODO - projit scheme - udelat si sub_df se vsema certi\n",
- "# TODO - projit u kazdeho certifikatu\n",
"CC_SCHEMES = [\"US\", \"FR\", \"DE\", \"JP\", \"CA\", \"NL\", \"ES\", \"KR\", \"UK\", \"AU\", \"NO\", \"SE\", \"MY\", \"TR\", \"IT\", \"IN\", \"SG\"]\n",
"result = {}\n",
"\n",
@@ -6191,17 +5759,80 @@
" \n",
" result[scheme] = counter \n",
"\n",
- "print(result)\n",
- "print(\"Done\")"
+ "print(result)"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "da1b111a",
+ "execution_count": 99,
+ "id": "67c2b3c7",
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "US Counter()\n",
+ "FR Counter({'FR': 57, 'DE': 56, None: 25, 'KR': 17})\n",
+ "DE Counter({'DE': 723, None: 134, 'FR': 22, 'KR': 14, 'ES': 13, 'NL': 9, 'TR': 7, 'US': 2})\n",
+ "JP Counter({'DE': 2})\n",
+ "CA Counter()\n",
+ "NL Counter({'KR': 1, None: 1})\n",
+ "ES Counter({'DE': 1})\n",
+ "KR Counter({'KR': 3, None: 3, 'DE': 1})\n",
+ "UK Counter()\n",
+ "AU Counter()\n",
+ "NO Counter()\n",
+ "SE Counter()\n",
+ "MY Counter()\n",
+ "TR Counter()\n",
+ "IT Counter()\n",
+ "IN Counter()\n",
+ "SG Counter()\n",
+ "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 57, 56, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 22, 723, 0, 0, 9, 13, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 21.5, 'Schemes affected by specific scheme')"
+ ]
+ },
+ "execution_count": 99,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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WlqWWvbWc1H7TIiIiKha0uQkaG9vb1y+fBnnzp3DuXPn0LBhQ+zatQtTp05Fbm4url27BgA4dOgQ+vfvDwDo0KFDqWVvo9UeICIiInp3VcZzfaRSKdavX49ly5YhLy8PjRs3xr///e+3lr2NSkthzJgxA19//XWx7b6+viVObKosXAqDqiouhUFEJdH2UhjTz81W+5gdLl9VeBwVQaUeoKtXr5a4/ddff63QYIioZExMiEgX6PKTndWlNAHavHkzAKCgoED8+ysPHz4scusZERERVW3VJgFKSUkB8HIV+Fd/f8XS0rLY/ftERERE7wKlCdDatWuhUChgY2ODwYMHw8DAQFtxERERkY6pSg8nfutt8FKpFGvXrq2Q5Kd169Z4/vx5kW0ODg5ITEwEAIwbNw7nz58HAMjlcvj7+2PKlCl48eJFudsmIiKi8pGW4aWrVIqtS5cuuHHjhoZD+T/5+fn49NNPkZOTg6+//ho1atTQWttERERUMm0shqotKt0F1qhRI0ybNg2urq5o2LBhkRP69NNPKzSgFy9ewMfHBw0bNsTKlSshk8kqtH4iIiIqm2ozCfqVvLw8cU2u11dw14Tly5ejZ8+eWL16tU5njkRERNVNtUuA1q5dq9EgXk90evTogStXriAuLg6tWrXSaLtERESkuqrUMaHy/KS4uDhs27YNK1asAAD873//w71799RqzNzcHFlZWeL7wsJCPHv2DObm5uK2AQMGYMGCBZg4cSLu37+vVv1ERESkOVJI1H7pKpUSoMjISIwZMwapqak4fvw4AOD58+f44osv1GqsW7duOHz4sPj+8OHD6NSpU7FJzp6enpg/fz6TICIiIh1S7SZBb9myBXv37kWbNm0QGRkJAGjTpo3aPUABAQFYvXo1PDw8IJVKYWlpifXr15e47+DBgwEAEydOxN69ezkcRkREVMmq3RygzMxMtG7dGsD/jf+VJbMzNzfHhg0bSi3/73//W+T94MGDxUSIiIiIKldVWpdQpSGw9u3bIywsrMi2U6dOwdraWiNBERERke6pdkNgAQEBmDJlCo4dO4acnBxMmTIFDx48wO7duzUdHxEREemIajcE1rJlS0RGRuL8+fPo2bMnLC0t0bNnT9SsWVPT8REREZGOkOj04hbqUSkBSk1NhZGREdzd3cVtT548QWpqKho0aKCx4IiIiEh3VKUe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\n",
+ "text/plain": [
+ "<Figure size 720x360 with 2 Axes>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure(figsize=(10,5))\n",
+ "plt.rcParams.update({'font.size': 20})\n",
+ "heatmap_result = []\n",
+ "\n",
+ "\n",
+ "for scheme, counter in result.items():\n",
+ " print(scheme, counter)\n",
+ " scheme_list = []\n",
+ " for scheme_key in CC_SCHEMES:\n",
+ " scheme_list.append(counter.get(scheme_key, 0))\n",
+ " \n",
+ " heatmap_result.append(scheme_list)\n",
+ " \n",
+ "print(heatmap_result)\n",
+ "sns.set(style=\"whitegrid\")\n",
+ "ax = sns.heatmap(heatmap_result, xticklabels=CC_SCHEMES, yticklabels=CC_SCHEMES,cmap=\"Greens\").set_title(\"Archived certs vs. active certs\")\n",
+ "plt.ylabel(\"Specific cert scheme\")\n",
+ "plt.xlabel(\"Schemes affected by specific scheme\")"
+ ]
}
],
"metadata": {