diff options
| author | GeogeFI | 2021-12-09 15:29:34 +0100 |
|---|---|---|
| committer | GeogeFI | 2021-12-09 15:29:34 +0100 |
| commit | baedb32ccdce1f7dc3c8f915d7c622bd2a53f686 (patch) | |
| tree | 33aafe92cf5cd91e9c01fcea8c9fb84589d3dcc8 | |
| parent | 46ae6d114cd0479a2d177e5fdf8b84a1eba5bbd2 (diff) | |
| download | sec-certs-baedb32ccdce1f7dc3c8f915d7c622bd2a53f686.tar.gz sec-certs-baedb32ccdce1f7dc3c8f915d7c622bd2a53f686.tar.zst sec-certs-baedb32ccdce1f7dc3c8f915d7c622bd2a53f686.zip | |
fix: Changed colormap of heatmap, added axis labels
| -rw-r--r-- | notebooks/cc/dependency_analysis.ipynb | 368 |
1 files changed, 166 insertions, 202 deletions
diff --git a/notebooks/cc/dependency_analysis.ipynb b/notebooks/cc/dependency_analysis.ipynb index 9ef96ba9..b68197bb 100644 --- a/notebooks/cc/dependency_analysis.ipynb +++ b/notebooks/cc/dependency_analysis.ipynb @@ -13,7 +13,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "73494a27", + "id": "7f375402", "metadata": {}, "outputs": [], "source": [ @@ -887,7 +887,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "37735cdc", + "id": "4e94393f", "metadata": {}, "outputs": [ { @@ -1826,7 +1826,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 27, "id": "8613862c", "metadata": {}, "outputs": [ @@ -1869,8 +1869,8 @@ " <th>indirectly_affected_by</th>\n", " <th>directly_affecting</th>\n", " <th>indirectly_affecting</th>\n", - " <th>depends_on_archived</th>\n", " <th>is_bsi_cert</th>\n", + " <th>is_anssi_cert</th>\n", " <th>is_affecting_anssi</th>\n", " </tr>\n", " <tr>\n", @@ -1917,10 +1917,10 @@ " <td>NaN</td>\n", " <td>[BSI-DSZ-CC-1065-2020]</td>\n", " <td>{BSI-DSZ-CC-1065-2020}</td>\n", - " <td>{BSI-DSZ-CC-0995-2018, ANSSI-CC-2019/12}</td>\n", - " <td>{BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", - " <td>False</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0995-2018}</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", @@ -1942,9 +1942,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1064-2020}</td>\n", - " <td>{BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", - " <td>False</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", @@ -1965,10 +1965,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ...</td>\n", - " <td>{BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1074-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", @@ -1989,10 +1989,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ...</td>\n", - " <td>{BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1073-2019, BSI-DSZ-CC-1074-V2, ANS...</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", @@ -2013,10 +2013,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{BSI-DSZ-CC-0891-V2-2016, ANSSI-CC-2017/54}</td>\n", - " <td>{BSI-DSZ-CC-0891-2015, BSI-DSZ-CC-0782-2012, B...</td>\n", - " <td>False</td>\n", + " <td>{ANSSI-CC-2017/54, BSI-DSZ-CC-0891-V2-2016}</td>\n", + " <td>{ANSSI-CC-2017/54, BSI-DSZ-CC-0891-V2-2016, BS...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>True</td>\n", " </tr>\n", " </tbody>\n", @@ -2099,32 +2099,32 @@ "\n", " directly_affecting \\\n", "dgst \n", - "424f6d496746258b {BSI-DSZ-CC-0995-2018, ANSSI-CC-2019/12} \n", + "424f6d496746258b {ANSSI-CC-2019/12, BSI-DSZ-CC-0995-2018} \n", "b8437dbfeeaf0f04 {ANSSI-CC-2019/12, BSI-DSZ-CC-1064-2020} \n", - "4832a44c0df0bad2 {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ... \n", - "7f9eb1b8217d15ad {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ... \n", - "06e505abb8dad1b8 {BSI-DSZ-CC-0891-V2-2016, ANSSI-CC-2017/54} \n", + "4832a44c0df0bad2 {BSI-DSZ-CC-1074-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", + "7f9eb1b8217d15ad {BSI-DSZ-CC-1073-2019, BSI-DSZ-CC-1074-V2, ANS... \n", + "06e505abb8dad1b8 {ANSSI-CC-2017/54, BSI-DSZ-CC-0891-V2-2016} \n", "\n", " indirectly_affecting \\\n", "dgst \n", - "424f6d496746258b {BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", - "b8437dbfeeaf0f04 {BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", - "4832a44c0df0bad2 {BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI... \n", - "7f9eb1b8217d15ad {BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI... \n", - "06e505abb8dad1b8 {BSI-DSZ-CC-0891-2015, BSI-DSZ-CC-0782-2012, B... \n", + "424f6d496746258b {ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D... \n", + "b8437dbfeeaf0f04 {ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D... \n", + "4832a44c0df0bad2 {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D... \n", + "7f9eb1b8217d15ad {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D... \n", + "06e505abb8dad1b8 {ANSSI-CC-2017/54, BSI-DSZ-CC-0891-V2-2016, BS... \n", "\n", - " depends_on_archived is_bsi_cert is_affecting_anssi \n", - "dgst \n", - "424f6d496746258b False True True \n", - "b8437dbfeeaf0f04 False True True \n", - "4832a44c0df0bad2 False True True \n", - "7f9eb1b8217d15ad False True True \n", - "06e505abb8dad1b8 False True True \n", + " is_bsi_cert is_anssi_cert is_affecting_anssi \n", + "dgst \n", + "424f6d496746258b True False True \n", + "b8437dbfeeaf0f04 True False True \n", + "4832a44c0df0bad2 True False True \n", + "7f9eb1b8217d15ad True False True \n", + "06e505abb8dad1b8 True False True \n", "\n", "[5 rows x 23 columns]" ] }, - "execution_count": 21, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -2143,63 +2143,22 @@ }, { "cell_type": "code", - "execution_count": 60, - "id": "45b3a8d1", + "execution_count": 29, + "id": "0c9df7ea", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing 1/646 certificate\n", - "Processing 2/646 certificate\n", - "Processing 3/646 certificate\n", - "Processing 4/646 certificate\n", - "Processing 5/646 certificate\n", - "Processing 6/646 certificate\n", - "Processing 7/646 certificate\n", - "Processing 8/646 certificate\n", - "Processing 9/646 certificate\n", - "Processing 10/646 certificate\n", - "Processing 11/646 certificate\n", - "Processing 12/646 certificate\n", - "Processing 13/646 certificate\n", - "Processing 14/646 certificate\n", - "Processing 15/646 certificate\n", - "Processing 16/646 certificate\n", - "Processing 17/646 certificate\n", - "Processing 18/646 certificate\n", - "Processing 19/646 certificate\n", - "Processing 20/646 certificate\n", - "Processing 21/646 certificate\n", - "Processing 22/646 certificate\n", - "Processing 23/646 certificate\n", - "Processing 24/646 certificate\n" - ] - }, - { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_4664/3894676254.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mcerts_set\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manother_cert_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manother_cert_id\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0manother_cert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcert_id\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_already_involved\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcross_reference_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcerts_set\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0mcross_reference_list\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcerts_set\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/tmp/ipykernel_4664/3894676254.py\u001b[0m in \u001b[0;36mis_cert_affecting_other_cert\u001b[0;34m(root_cert_id, affected_cert_id)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mroot_cert_id\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maffected_cert_id\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mbool\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0maffected_cert_id\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcross_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcross_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"cert_id\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mroot_cert_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"directly_affecting\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mcross_reference_list\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mSet\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2895\u001b[0m \u001b[0;31m# Do we have a (boolean) 1d indexer?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2896\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_bool_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2897\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_bool_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2898\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2899\u001b[0m \u001b[0;31m# We are left with two options: a single key, and a collection of keys,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_bool_array\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2949\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_bool_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2950\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnonzero\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2951\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_take_with_is_copy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2952\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2953\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_take_with_is_copy\u001b[0;34m(self, indices, axis)\u001b[0m\n\u001b[1;32m 3361\u001b[0m \u001b[0mSee\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mdocstring\u001b[0m \u001b[0mof\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfull\u001b[0m \u001b[0mexplanation\u001b[0m \u001b[0mof\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mparameters\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3362\u001b[0m \"\"\"\n\u001b[0;32m-> 3363\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3364\u001b[0m \u001b[0;31m# Maybe set copy if we didn't actually change the index.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3365\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mequals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mtake\u001b[0;34m(self, indices, axis, is_copy, **kwargs)\u001b[0m\n\u001b[1;32m 3348\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_consolidate_inplace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3349\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3350\u001b[0;31m new_data = self._mgr.take(\n\u001b[0m\u001b[1;32m 3351\u001b[0m \u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_block_manager_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverify\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3352\u001b[0m )\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mtake\u001b[0;34m(self, indexer, axis, verify, convert)\u001b[0m\n\u001b[1;32m 1445\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1446\u001b[0m \u001b[0mnew_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1447\u001b[0;31m return self.reindex_indexer(\n\u001b[0m\u001b[1;32m 1448\u001b[0m \u001b[0mnew_axis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnew_labels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_dups\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1449\u001b[0m )\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mreindex_indexer\u001b[0;34m(self, new_axis, indexer, axis, fill_value, allow_dups, copy, consolidate)\u001b[0m\n\u001b[1;32m 1282\u001b[0m \u001b[0mnew_blocks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slice_take_blocks_ax0\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1283\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1284\u001b[0;31m new_blocks = [\n\u001b[0m\u001b[1;32m 1285\u001b[0m blk.take_nd(\n\u001b[1;32m 1286\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1283\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1284\u001b[0m new_blocks = [\n\u001b[0;32m-> 1285\u001b[0;31m blk.take_nd(\n\u001b[0m\u001b[1;32m 1286\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1287\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/internals/blocks.py\u001b[0m in \u001b[0;36mtake_nd\u001b[0;34m(self, indexer, axis, new_mgr_locs, fill_value)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[0;31m# but are passed the axis depending on the calling routing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1723\u001b[0m \u001b[0;31m# if its REALLY axis 0, then this will be a reindex and not a take\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1724\u001b[0;31m \u001b[0mnew_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1725\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1726\u001b[0m \u001b[0;31m# Called from three places in managers, all of which satisfy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py\u001b[0m in \u001b[0;36mtake\u001b[0;34m(self, indexer, allow_fill, fill_value)\u001b[0m\n\u001b[1;32m 1808\u001b[0m \u001b[0mwill\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0ma\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mValueError\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1809\u001b[0m \"\"\"\n\u001b[0;32m-> 1810\u001b[0;31m return NDArrayBackedExtensionArray.take(\n\u001b[0m\u001b[1;32m 1811\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_fill\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1812\u001b[0m )\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/arrays/_mixins.py\u001b[0m in \u001b[0;36mtake\u001b[0;34m(self, indices, allow_fill, fill_value)\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0mfill_value\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_fill_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m new_data = take(\n\u001b[0m\u001b[1;32m 43\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_ndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_fill\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m )\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/algorithms.py\u001b[0m in \u001b[0;36mtake\u001b[0;34m(arr, indices, axis, allow_fill, fill_value)\u001b[0m\n\u001b[1;32m 1605\u001b[0m \u001b[0;31m# Pandas style, -1 means NA\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1606\u001b[0m \u001b[0mvalidate_indices\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1607\u001b[0;31m result = take_1d(\n\u001b[0m\u001b[1;32m 1608\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1609\u001b[0m )\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/algorithms.py\u001b[0m in \u001b[0;36mtake_nd\u001b[0;34m(arr, indexer, axis, out, fill_value, allow_fill)\u001b[0m\n\u001b[1;32m 1667\u001b[0m \u001b[0;31m# check for promotion based on types only (do this first because\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1668\u001b[0m \u001b[0;31m# it's faster than computing a mask)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1669\u001b[0;31m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmaybe_promote\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1670\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1671\u001b[0m \u001b[0;31m# check if promotion is actually required based on indexer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/dtypes/cast.py\u001b[0m in \u001b[0;36mmaybe_promote\u001b[0;34m(dtype, fill_value)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobject_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 522\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 523\u001b[0;31m \u001b[0;32melif\u001b[0m \u001b[0mis_extension_array_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 524\u001b[0m \u001b[0mfill_value\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mna_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 525\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/dtypes/common.py\u001b[0m in \u001b[0;36mis_extension_array_dtype\u001b[0;34m(arr_or_dtype)\u001b[0m\n\u001b[1;32m 1503\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1504\u001b[0m \"\"\"\n\u001b[0;32m-> 1505\u001b[0;31m \u001b[0mdtype\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr_or_dtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"dtype\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr_or_dtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1506\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mExtensionDtype\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1507\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/tmp/ipykernel_12426/2090391999.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mcerts_set\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manother_cert_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manother_cert_id\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0manother_cert_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcert_id\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_already_involved\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcross_reference_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcerts_set\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0mcross_reference_list\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcerts_set\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/tmp/ipykernel_12426/2090391999.py\u001b[0m in \u001b[0;36mis_cert_affecting_other_cert\u001b[0;34m(root_cert_id, affected_cert_id)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mis_cert_affecting_other_cert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mroot_cert_id\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maffected_cert_id\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mbool\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0maffected_cert_id\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcross_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcross_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"cert_id\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mroot_cert_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"directly_affecting\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mcross_reference_list\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mSet\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 880\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 881\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mkey_is_scalar\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 882\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 883\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 884\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m_get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 987\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 988\u001b[0m \u001b[0;31m# Similar to Index.get_value, but we do not fall back to positional\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 989\u001b[0;31m \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 990\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_values_for_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 991\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/ohmygit/sec-certs/notebooks/cc/env/lib/python3.8/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2893\u001b[0m \u001b[0mcasted_key\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2894\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2895\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2896\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2897\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } @@ -2217,8 +2176,6 @@ "total = cross_df.shape[0]\n", "\n", "for cert_record in cross_df.itertuples():\n", - " print(f\"Processing {count}/{total} certificate\") # TODO - delete this line\n", - "\n", " cert_id = cert_record.cert_id\n", " \n", " for another_cert_record in cross_df.itertuples():\n", @@ -2229,6 +2186,7 @@ " continue\n", " \n", " certs_set = set([cert_id, another_cert_id])\n", + " \n", " if is_cert_affecting_other_cert(cert_id, another_cert_id) and is_cert_affecting_other_cert(another_cert_id, cert_id) and not is_already_involved(cross_reference_list, certs_set):\n", " cross_reference_list.append(certs_set)\n", " count += 1 \n", @@ -2541,7 +2499,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 32, "id": "c23e0981", "metadata": {}, "outputs": [], @@ -2555,7 +2513,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 33, "id": "faa13c35", "metadata": { "scrolled": true @@ -2600,8 +2558,8 @@ " <th>indirectly_affected_by</th>\n", " <th>directly_affecting</th>\n", " <th>indirectly_affecting</th>\n", - " <th>depends_on_archived</th>\n", " <th>is_bsi_cert</th>\n", + " <th>is_anssi_cert</th>\n", " <th>highest_security_level</th>\n", " </tr>\n", " <tr>\n", @@ -2650,8 +2608,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1085-2019}</td>\n", " <td>{BSI-DSZ-CC-1085-2019}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " </tr>\n", " <tr>\n", @@ -2675,7 +2633,7 @@ " <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>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " </tr>\n", " <tr>\n", @@ -2698,8 +2656,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n", " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL3+</td>\n", " </tr>\n", " <tr>\n", @@ -2721,9 +2679,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0977-V3, BSI-DSZ-CC-0977-V2-2019}</td>\n", - " <td>{BSI-DSZ-CC-0977-2017, BSI-DSZ-CC-0977-V3, BSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-0977-V2, BSI-DSZ-CC-0977-2017, BSI...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " </tr>\n", " <tr>\n", @@ -2744,10 +2702,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{BSI-DSZ-CC-1052-V3, BSI-DSZ-CC-1052-V2-2020}</td>\n", - " <td>{BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2, BSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1052-V2-2020, BSI-DSZ-CC-1052-V3}</td>\n", + " <td>{BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2-2020...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL3+</td>\n", " </tr>\n", " </tbody>\n", @@ -2834,28 +2792,28 @@ "0eff4063e68d7cd6 {BSI-DSZ-CC-0565-2009} \n", "e62f50581d828477 {BSI-DSZ-CC-0519-V2-2018} \n", "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-V3, BSI-DSZ-CC-0977-V2-2019} \n", - "41fb9717f70d3037 {BSI-DSZ-CC-1052-V3, BSI-DSZ-CC-1052-V2-2020} \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-V3, BSI... \n", - "41fb9717f70d3037 {BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2, BSI... \n", + "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-V2, BSI-DSZ-CC-0977-2017, BSI... \n", + "41fb9717f70d3037 {BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2-2020... \n", "\n", - " depends_on_archived is_bsi_cert highest_security_level \n", - "dgst \n", - "98c1ac41aedcdae2 False True EAL4+ \n", - "0eff4063e68d7cd6 True True EAL4+ \n", - "e62f50581d828477 False True EAL3+ \n", - "6a5cb89e80f86ce9 False True EAL6+ \n", - "41fb9717f70d3037 False True EAL3+ \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": 25, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2867,7 +2825,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 34, "id": "2238bb57", "metadata": {}, "outputs": [ @@ -2909,8 +2867,8 @@ " <th>indirectly_affected_by</th>\n", " <th>directly_affecting</th>\n", " <th>indirectly_affecting</th>\n", - " <th>depends_on_archived</th>\n", " <th>is_bsi_cert</th>\n", + " <th>is_anssi_cert</th>\n", " <th>highest_security_level</th>\n", " <th>affecting_security_levels</th>\n", " </tr>\n", @@ -2959,8 +2917,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1085-2019}</td>\n", " <td>{BSI-DSZ-CC-1085-2019}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{}</td>\n", " </tr>\n", @@ -2984,7 +2942,7 @@ " <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>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL4+': 1}</td>\n", " </tr>\n", @@ -3007,8 +2965,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n", " <td>{BSI-DSZ-CC-0519-V2-2018}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL3+</td>\n", " <td>{}</td>\n", " </tr>\n", @@ -3030,9 +2988,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0977-V3, BSI-DSZ-CC-0977-V2-2019}</td>\n", - " <td>{BSI-DSZ-CC-0977-2017, BSI-DSZ-CC-0977-V3, BSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-0977-V2, BSI-DSZ-CC-0977-2017, BSI...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " <td>{'EAL6+': 1}</td>\n", " </tr>\n", @@ -3053,10 +3011,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{BSI-DSZ-CC-1052-V3, BSI-DSZ-CC-1052-V2-2020}</td>\n", - " <td>{BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2, BSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1052-V2-2020, BSI-DSZ-CC-1052-V3}</td>\n", + " <td>{BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2-2020...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL3+</td>\n", " <td>{'EAL3': 1}</td>\n", " </tr>\n", @@ -3077,12 +3035,12 @@ " <td>NaN</td>\n", " <td>[BSI-DSZ-CC-1148-2020]</td>\n", " <td>{BSI-DSZ-CC-1148-2020}</td>\n", - " <td>{BSI-DSZ-CC-1033-2019, BSI-DSZ-CC-1040-2019}</td>\n", - " <td>{BSI-DSZ-CC-0891-V3-2018, BSI-DSZ-CC-1040-2019...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-1033-2019}</td>\n", + " <td>{BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-0891-V3-2018...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL5+</td>\n", - " <td>{'EAL5+': 1, 'EAL6+': 1}</td>\n", + " <td>{'EAL6+': 1, 'EAL5+': 1}</td>\n", " </tr>\n", " <tr>\n", " <th>a69ec271f8651d1b</th>\n", @@ -3101,12 +3059,12 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{BSI-DSZ-CC-1147-2020, BSI-DSZ-CC-1040-2019}</td>\n", - " <td>{BSI-DSZ-CC-0891-V3-2018, BSI-DSZ-CC-1040-2019...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-1147-2020}</td>\n", + " <td>{BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-0891-V2-2016...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", - " <td>{'EAL5+': 1, 'EAL6+': 1}</td>\n", + " <td>{'EAL6+': 1, 'EAL5+': 1}</td>\n", " </tr>\n", " <tr>\n", " <th>dc45c7a6ef17f8b5</th>\n", @@ -3127,8 +3085,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1125-2019}</td>\n", " <td>{BSI-DSZ-CC-1125-2019}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL3</td>\n", " <td>{'EAL3': 1}</td>\n", " </tr>\n", @@ -3150,9 +3108,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0782-V4-2018}</td>\n", - " <td>{BSI-DSZ-CC-0782-V2, BSI-DSZ-CC-0782-2012, BSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-0782-V2-2015, BSI-DSZ-CC-0782-V4-2...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " <td>{'EAL6+': 1}</td>\n", " </tr>\n", @@ -3173,10 +3131,10 @@ " <td>NaN</td>\n", " <td>[BSI-DSZ-CC-1065-2020]</td>\n", " <td>{BSI-DSZ-CC-1065-2020}</td>\n", - " <td>{BSI-DSZ-CC-0995-2018, ANSSI-CC-2019/12}</td>\n", - " <td>{BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", - " <td>False</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0995-2018}</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL5+</td>\n", " <td>{'EAL5+': 2}</td>\n", " </tr>\n", @@ -3198,9 +3156,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1064-2020}</td>\n", - " <td>{BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", - " <td>False</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL5+': 2}</td>\n", " </tr>\n", @@ -3222,9 +3180,9 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0961-V4-2019}</td>\n", - " <td>{BSI-DSZ-CC-0891-2015, BSI-DSZ-CC-0891-V2-2016...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-0782-2012, BSI-DSZ-CC-0961-V4-2019...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " <td>{'EAL6+': 1}</td>\n", " </tr>\n", @@ -3247,8 +3205,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL5+': 1}</td>\n", " </tr>\n", @@ -3271,8 +3229,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL5+': 1}</td>\n", " </tr>\n", @@ -3295,8 +3253,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", " <td>{BSI-DSZ-CC-1110-V3-2020}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL5+': 1}</td>\n", " </tr>\n", @@ -3317,10 +3275,10 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ...</td>\n", - " <td>{BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1074-V2, ANSSI-CC-2019/12, BSI-DSZ...</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", " <td>{'EAL5+': 1, 'EAL4+': 1}</td>\n", " </tr>\n", @@ -3341,12 +3299,12 @@ " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", - " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ...</td>\n", - " <td>{BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-1073-2019, BSI-DSZ-CC-1074-V2, ANS...</td>\n", + " <td>{ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL4+</td>\n", - " <td>{'EAL5+': 1, 'EAL4+': 1}</td>\n", + " <td>{'EAL4+': 1, 'EAL5+': 1}</td>\n", " </tr>\n", " <tr>\n", " <th>59b026d889aa0309</th>\n", @@ -3367,8 +3325,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-1025-V2-2019}</td>\n", " <td>{BSI-DSZ-CC-1025-V2-2019, BSI-DSZ-CC-1025-2018}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " <td>{'EAL6+': 1}</td>\n", " </tr>\n", @@ -3390,9 +3348,9 @@ " <td>[BSI-DSZ-CC-1158-2020]</td>\n", " <td>{BSI-DSZ-CC-1158-2020}</td>\n", " <td>{BSI-DSZ-CC-0827-V7-2018}</td>\n", - " <td>{BSI-DSZ-CC-0827-V5-2017, BSI-DSZ-CC-0827-V3-2...</td>\n", - " <td>False</td>\n", + " <td>{BSI-DSZ-CC-0827-V4-2016, BSI-DSZ-CC-0827-V3-2...</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL5+</td>\n", " <td>{'EAL5+': 1}</td>\n", " </tr>\n", @@ -3415,8 +3373,8 @@ " <td>NaN</td>\n", " <td>{BSI-DSZ-CC-0891-V4-2018}</td>\n", " <td>{BSI-DSZ-CC-0891-V4-2018}</td>\n", - " <td>False</td>\n", " <td>True</td>\n", + " <td>False</td>\n", " <td>EAL6+</td>\n", " <td>{}</td>\n", " </tr>\n", @@ -3639,19 +3597,19 @@ "0eff4063e68d7cd6 {BSI-DSZ-CC-0565-2009} \n", "e62f50581d828477 {BSI-DSZ-CC-0519-V2-2018} \n", "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-V3, BSI-DSZ-CC-0977-V2-2019} \n", - "41fb9717f70d3037 {BSI-DSZ-CC-1052-V3, BSI-DSZ-CC-1052-V2-2020} \n", - "cc533c087f06ad0d {BSI-DSZ-CC-1033-2019, BSI-DSZ-CC-1040-2019} \n", - "a69ec271f8651d1b {BSI-DSZ-CC-1147-2020, BSI-DSZ-CC-1040-2019} \n", + "41fb9717f70d3037 {BSI-DSZ-CC-1052-V2-2020, BSI-DSZ-CC-1052-V3} \n", + "cc533c087f06ad0d {BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-1033-2019} \n", + "a69ec271f8651d1b {BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-1147-2020} \n", "dc45c7a6ef17f8b5 {BSI-DSZ-CC-1125-2019} \n", "15d68159595eae09 {BSI-DSZ-CC-0782-V4-2018} \n", - "424f6d496746258b {BSI-DSZ-CC-0995-2018, ANSSI-CC-2019/12} \n", + "424f6d496746258b {ANSSI-CC-2019/12, BSI-DSZ-CC-0995-2018} \n", "b8437dbfeeaf0f04 {ANSSI-CC-2019/12, BSI-DSZ-CC-1064-2020} \n", "90c290ed4ded479d {BSI-DSZ-CC-0961-V4-2019} \n", "05a8a84b60a30ceb {BSI-DSZ-CC-1110-V3-2020} \n", "598b6c745cdcd404 {BSI-DSZ-CC-1110-V3-2020} \n", "96d69242a699323d {BSI-DSZ-CC-1110-V3-2020} \n", - "4832a44c0df0bad2 {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ... \n", - "7f9eb1b8217d15ad {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-V2, BSI-DSZ... \n", + "4832a44c0df0bad2 {BSI-DSZ-CC-1074-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", + "7f9eb1b8217d15ad {BSI-DSZ-CC-1073-2019, BSI-DSZ-CC-1074-V2, ANS... \n", "59b026d889aa0309 {BSI-DSZ-CC-1025-V2-2019} \n", "87286bdc06061018 {BSI-DSZ-CC-0827-V7-2018} \n", "4750f5114dcaa60d {BSI-DSZ-CC-0891-V4-2018} \n", @@ -3661,46 +3619,46 @@ "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-V3, BSI... \n", - "41fb9717f70d3037 {BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2, BSI... \n", - "cc533c087f06ad0d {BSI-DSZ-CC-0891-V3-2018, BSI-DSZ-CC-1040-2019... \n", - "a69ec271f8651d1b {BSI-DSZ-CC-0891-V3-2018, BSI-DSZ-CC-1040-2019... \n", + "6a5cb89e80f86ce9 {BSI-DSZ-CC-0977-V2, BSI-DSZ-CC-0977-2017, BSI... \n", + "41fb9717f70d3037 {BSI-DSZ-CC-1052-2018, BSI-DSZ-CC-1052-V2-2020... \n", + "cc533c087f06ad0d {BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-0891-V3-2018... \n", + "a69ec271f8651d1b {BSI-DSZ-CC-1040-2019, BSI-DSZ-CC-0891-V2-2016... \n", "dc45c7a6ef17f8b5 {BSI-DSZ-CC-1125-2019} \n", - "15d68159595eae09 {BSI-DSZ-CC-0782-V2, BSI-DSZ-CC-0782-2012, BSI... \n", - "424f6d496746258b {BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", - "b8437dbfeeaf0f04 {BSI-DSZ-CC-0973-V2, ANSSI-CC-2019/12, BSI-DSZ... \n", - "90c290ed4ded479d {BSI-DSZ-CC-0891-2015, BSI-DSZ-CC-0891-V2-2016... \n", + "15d68159595eae09 {BSI-DSZ-CC-0782-V2-2015, BSI-DSZ-CC-0782-V4-2... \n", + "424f6d496746258b {ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D... \n", + "b8437dbfeeaf0f04 {ANSSI-CC-2019/12, BSI-DSZ-CC-0973-2016, BSI-D... \n", + "90c290ed4ded479d {BSI-DSZ-CC-0782-2012, BSI-DSZ-CC-0961-V4-2019... \n", "05a8a84b60a30ceb {BSI-DSZ-CC-1110-V3-2020} \n", "598b6c745cdcd404 {BSI-DSZ-CC-1110-V3-2020} \n", "96d69242a699323d {BSI-DSZ-CC-1110-V3-2020} \n", - "4832a44c0df0bad2 {BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI... \n", - "7f9eb1b8217d15ad {BSI-DSZ-CC-1074-2019, ANSSI-CC-2017/61, ANSSI... \n", + "4832a44c0df0bad2 {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D... \n", + "7f9eb1b8217d15ad {ANSSI-CC-2019/12, BSI-DSZ-CC-1074-2019, BSI-D... \n", "59b026d889aa0309 {BSI-DSZ-CC-1025-V2-2019, BSI-DSZ-CC-1025-2018} \n", - "87286bdc06061018 {BSI-DSZ-CC-0827-V5-2017, BSI-DSZ-CC-0827-V3-2... \n", + "87286bdc06061018 {BSI-DSZ-CC-0827-V4-2016, BSI-DSZ-CC-0827-V3-2... \n", "4750f5114dcaa60d {BSI-DSZ-CC-0891-V4-2018} \n", "\n", - " depends_on_archived is_bsi_cert highest_security_level \\\n", - "dgst \n", - "98c1ac41aedcdae2 False True EAL4+ \n", - "0eff4063e68d7cd6 True True EAL4+ \n", - "e62f50581d828477 False True EAL3+ \n", - "6a5cb89e80f86ce9 False True EAL6+ \n", - "41fb9717f70d3037 False True EAL3+ \n", - "cc533c087f06ad0d False True EAL5+ \n", - "a69ec271f8651d1b False True EAL4+ \n", - "dc45c7a6ef17f8b5 False True EAL3 \n", - "15d68159595eae09 False True EAL6+ \n", - "424f6d496746258b False True EAL5+ \n", - "b8437dbfeeaf0f04 False True EAL4+ \n", - "90c290ed4ded479d False True EAL6+ \n", - "05a8a84b60a30ceb False True EAL4+ \n", - "598b6c745cdcd404 False True EAL4+ \n", - "96d69242a699323d False True EAL4+ \n", - "4832a44c0df0bad2 False True EAL4+ \n", - "7f9eb1b8217d15ad False True EAL4+ \n", - "59b026d889aa0309 False True EAL6+ \n", - "87286bdc06061018 False True EAL5+ \n", - "4750f5114dcaa60d False True EAL6+ \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", + "cc533c087f06ad0d True False EAL5+ \n", + "a69ec271f8651d1b True False EAL4+ \n", + "dc45c7a6ef17f8b5 True False EAL3 \n", + "15d68159595eae09 True False EAL6+ \n", + "424f6d496746258b True False EAL5+ \n", + "b8437dbfeeaf0f04 True False EAL4+ \n", + "90c290ed4ded479d True False EAL6+ \n", + "05a8a84b60a30ceb True False EAL4+ \n", + "598b6c745cdcd404 True False EAL4+ \n", + "96d69242a699323d True False EAL4+ \n", + "4832a44c0df0bad2 True False EAL4+ \n", + "7f9eb1b8217d15ad True False EAL4+ \n", + "59b026d889aa0309 True False EAL6+ \n", + "87286bdc06061018 True False EAL5+ \n", + "4750f5114dcaa60d True False EAL6+ \n", "\n", " affecting_security_levels \n", "dgst \n", @@ -3709,8 +3667,8 @@ "e62f50581d828477 {} \n", "6a5cb89e80f86ce9 {'EAL6+': 1} \n", "41fb9717f70d3037 {'EAL3': 1} \n", - "cc533c087f06ad0d {'EAL5+': 1, 'EAL6+': 1} \n", - "a69ec271f8651d1b {'EAL5+': 1, 'EAL6+': 1} \n", + "cc533c087f06ad0d {'EAL6+': 1, 'EAL5+': 1} \n", + "a69ec271f8651d1b {'EAL6+': 1, 'EAL5+': 1} \n", "dc45c7a6ef17f8b5 {'EAL3': 1} \n", "15d68159595eae09 {'EAL6+': 1} \n", "424f6d496746258b {'EAL5+': 2} \n", @@ -3720,7 +3678,7 @@ "598b6c745cdcd404 {'EAL5+': 1} \n", "96d69242a699323d {'EAL5+': 1} \n", "4832a44c0df0bad2 {'EAL5+': 1, 'EAL4+': 1} \n", - "7f9eb1b8217d15ad {'EAL5+': 1, 'EAL4+': 1} \n", + "7f9eb1b8217d15ad {'EAL4+': 1, 'EAL5+': 1} \n", "59b026d889aa0309 {'EAL6+': 1} \n", "87286bdc06061018 {'EAL5+': 1} \n", "4750f5114dcaa60d {} \n", @@ -3728,7 +3686,7 @@ "[20 rows x 24 columns]" ] }, - "execution_count": 26, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -3765,7 +3723,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 35, "id": "79b1d0da", "metadata": {}, "outputs": [ @@ -3779,10 +3737,10 @@ "Certs with security level EAL2+ are directly affecting other certificates with levels: {'EAL2+': 8}\n", "Certs with security level EAL3 are directly affecting other certificates with levels: {'EAL3': 8, 'EAL5+': 1}\n", "Certs with security level EAL3+ are directly affecting other certificates with levels: {'EAL3': 1, 'EAL3+': 14}\n", - "Certs with security level EAL4 are directly affecting other certificates with levels: {'EAL4+': 5, 'EAL5+': 1, 'EAL4': 3, 'EAL6+': 1}\n", - "Certs with security level EAL4+ are directly affecting other certificates with levels: {'EAL4+': 274, 'EAL5+': 238, 'EAL6+': 41, 'EAL4': 2, 'EAL3+': 3}\n", + "Certs with security level EAL4 are directly affecting other certificates with levels: {'EAL5+': 1, 'EAL4+': 5, 'EAL4': 3, 'EAL6+': 1}\n", + "Certs with security level EAL4+ are directly affecting other certificates with levels: {'EAL4+': 274, 'EAL6+': 41, 'EAL5+': 238, 'EAL4': 2, 'EAL3+': 3}\n", "Certs with security level EAL5 are directly affecting other certificates with levels: {'EAL5+': 1, 'EAL5': 3, 'EAL4+': 1}\n", - "Certs with security level EAL5+ are directly affecting other certificates with levels: {'EAL5+': 187, 'EAL6+': 34, 'EAL4+': 44}\n", + "Certs with security level EAL5+ are directly affecting other certificates with levels: {'EAL6+': 34, 'EAL5+': 187, 'EAL4+': 44}\n", "Certs with security level EAL6+ are directly affecting other certificates with levels: {'EAL6+': 38, 'EAL5+': 6, 'EAL4+': 5}\n", "Certs with security level EAL7 are directly affecting other certificates with levels: {}\n", "Certs with security level EAL7+ are directly affecting other certificates with levels: {}\n" @@ -3807,7 +3765,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 71, "id": "e3701a93", "metadata": { "scrolled": false @@ -3816,16 +3774,16 @@ { "data": { "text/plain": [ - "Text(0.5, 1.0, 'Archived certs vs. active certs')" + "Text(66.5, 0.5, 'Affected by security level')" ] }, - "execution_count": 28, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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FyLF0aN20NbWpvPBFBERYdJxn3zyCSZPnmx0v7lN92Ink8kQEhKC8vJypKenY/Xq1dp9nf8QGxpp1Tl5WblyJVasWGHydTW3C/qazs95/vz5WLduncnHdh7d2ZW131ceHh5IT0/HH/7wB2zbtg3ffvst8vPz8csvv6CyshIbN27Exo0b8cILL2DDhg0WXcPLywsPPfQQPv/8c8jlcpw/f177R3fPnj3aZNzYKD0nJye89957eO6557B161Z88803UKlUuHHjBi5evIjPP/8cn3/+ORITE5Geng4XFxfLKqMbarUajz76qLbFeNmyZVi0aBHGjh0Lf39/uLm5ab+shISEoKKios/8YV26dCk2b96M9vZ2fPHFF9rbtmq1Wjtf3p133olRo0bpHdv5ff71118jMDDQPkFbQBNrUFCQWfMOdveF2Baf8y+//DKWLVuGbdu2QS6XIzc3F5cuXcL169exc+dO7Ny5EzKZDJmZmRgwYIDVr0+WY9JmB3v37tV+EJvj3//+N9577z24ublZdN3OfZy6frsVI4lEgqSkJLz11lsoKirCDz/8gClTpqC1tRVbtmwB0HFLUrPsV2dd+3OZmhh3peljAgAXLlzotmxP+03h5+eHiooKi14fX19fSCQSCIKAlpYWi5+zvWhakFJTU6FWq3HkyBHs2rULGzduxI0bN/CXv/wF4eHh+NWvfmXR+ZcuXYrPP/8cbW1t+OKLL/C73/0OwH9bctzd3XucpmX48OH4/e9/j9///vdob29HQUEBvvrqK3z00Ue4cOECtm3bhlGjRpmVIJvq22+/1fa7e/XVV/HWW28ZLXv16lWj+3rznrKVuLg4DBs2DBUVFUhPT9cmbfv27dO2bhm7A9H5d9vHx8em73PNtQRBwPnz581urfTz80NJSQmuX7+O8PBwo9PPiIG/vz9WrVqFVatWAQCKi4uxd+9epKWloaysDNnZ2fjtb3+r0+BAjsfbo3aguTXq7OyMzZs3Y8uWLd0+NH9srl69iszMTIuvO3XqVO3P3377ba+eg710/uDWtK7t379fe9vB2Af7iBEjtP3qNHNxWWLChAnan/Py8rot29N+U2heo59++sno6g7GuLi4aONVqVRQq9W9jsdUvf1j5OLigjvvvBN/+tOftPOjAdBbpcAcmhUEgP++d65evapdQeCBBx6Aj4+PyedzcnLC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\n", + "image/png": "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EredO3cOs2bNwoABA/D000/j4MGD4raysjKsW7cOw4cPR79+/fDss8+irKwMx44dg6+vr9457o89KioKixcvRt++fZGQkIB3330XixcvBgBMmzYNANC/f394enoiOzsbAwYMwE8//STWd/36dXh4eODGjRt13r/aruG7777D4MGDUVVVJe57+PBhBAUFAUCd946ImgYmVEQykZSUhKCgIAQFBeHLL7/EtWvXAABpaWno0qULtm7dipycHGzcuBFBQUF4/vnnkZOTg6eeegr//ve/kZaWht27d+OLL77AAw88gDVr1gAArly5gjlz5mDatGn4+uuvkZiYiF69euGZZ57Rq2fr1q01xpWRkYGxY8fixIkT8PPzw+uvvw4A0Gq1iIyMREhICLKzsxEYGIi0tLRar2/z5s0YPHgwjh8/jqNHj4oJTWlpKZ577jkEBgbiv//9LzZt2oTXXnsNv/76KwBg/fr1+OGHH7Bv3z5kZ2djyZIlsLEx7q+u9PR0jB49GidOnBATmLt2794NADh+/DhycnIwYMAAjBkzBgcOHBD30Wg0GDRoEDp06GDwPIauwcPDA61atcI333wj7p+cnCzGY+jeEVHTwYSKSAZOnDiBvLw8BAQE4IknnkC3bt2g0WiMPn7fvn144YUX0LlzZyiVSkRGRuLQoUOorKyERqPBU089hcDAQLRs2RIPPvggevXqZXTd/fr1w9ChQ2Fra4vg4GDk5uYCuNPzUllZiRkzZqBly5bw9/fHk08+WWs9LVq0QF5eHgoKCmBnZwcvLy8AQGZmJrp27YoJEyagRYsW6N27N55++ml89tln0Ol0UKlUWL58OZycnGBra4u+ffvqzS8zpE+fPhg5ciRsbGxgb29f5/4hISFISUkRV5xOSkrCuHHj6jzO0DUAdyb6372ft27dwtGjRzF27FgAhu8dETUdnIlJJAOJiYkYPHiw2BMSGBiIhIQE/OMf/zDq+Ly8PMyfP1+v58bGxgbXr1/H1atX8fDDD9c7to4dO4o/29vbo7y8HJWVlSgoKICTk5PePC5nZ+da61myZAk2b96MiRMn4oEHHsCsWbMwceJEXLlyBadPnxYTLACoqqrCuHHjcPPmTZSXl6Nbt271ir1z584m7e/h4QF7e3scO3YMjo6OuHjxIkaMGFHncYauAQCCgoIwefJkvPbaazh8+DB69+6Nrl27AjB874io6WBCRSSxsrIypKamQqfTYfDgwQDuDKeVlJQgNzcXPXv2rLOOzp07480330S/fv2qbXN2dsbp06drPK4hk9odHR2Rn58PQRDEeq5evVpr8uPo6IiYmBgAd3rkZs2ahf79+8PZ2Rn9+/fHjh07qh2j0+lgZ2eHS5cuVWuHVq1aoaysTPy9qqqq2lwnQ9dX27aQkBAcOHAAjo6OePrpp2FnZ1drHXcZugYA+Nvf/oYuXbrg6NGj0Gg0CAwMFLcZuneXL1+u89xEJA8c8iOSWFpaGmxtbZGSkoLExEQkJibi4MGD8PLy0pucbsizzz6Ld955B1euXAEA3LhxQ5zPFBQUhP/+9784ePAgKisrcfPmTZw9exYA8NBDD9X7H+0+ffrA1tYWu3fvRmVlJdLS0vQmrN8vNTUVf/zxBwDggQcegEKhgI2NDYYNG4bz588jMTERFRUVqKiowOnTp3Hu3DnY2NhgwoQJWLt2LfLz81FVVYWcnBxotVq4urqivLwcmZmZqKiowPvvvw+tVmt0/B06dICNjQ0uXbqkVz5u3DikpaXhwIEDGD9+vFF1GbqGuwIDA7Fz504cP34co0ePFssN3TsiajqYUBFJLCEhAaGhoejSpQscHR3Fz9SpU5GcnGzUXJoZM2bAz88Pzz33HDw9PREWFib2SnXp0gUffvghduzYgQEDBmD8+PHiPKiJEyfi119/hZeXFyIiIkyKW6lU4t1330V8fDz69++PAwcOYNiwYbXObzpz5gwmTZoET09PhIeHY/ny5ejWrRvatGmDjz/+GAcPHoSPjw+GDBmCt99+W0yOli5dih49emDixIkYMGAA3n77beh0OrRt2xarV6/GihUr4Ovri1atWpk0xNeqVSvMmzcPzz77LLy8vHDq1CkAd3qbevfuDYVCoTeEZ0hd1wDcSaiOHz8Ob29vvUnuhu4dETUdfDkyETWaSZMmYfLkyZgwYYLUoTTIyy+/jE6dOukteEpEZAh7qIio3rKzs1FYWIjKykokJCTgp59+go+Pj9RhNcjly5dx+PBhTJw4UepQiKgJ4aR0Iqq333//HYsWLcLt27fh4uKC2NhYdOrUSeqw6u2dd97Bzp07MXfu3Ho/WUhEzROH/IiIiIgaiEN+RERERA3EhIqIiIiogZhQERERETUQEyoiIiKiBmJCRURERNRATKiIiIiIGuj/Aegx79/XMp3IAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 720x360 with 2 Axes>" ] @@ -3840,14 +3798,20 @@ "plt.rcParams.update({'font.size': 20})\n", "heatmap_result = []\n", "\n", + "\n", "for security_level, counter in result.items():\n", " security_level_list = []\n", " for security_level_key in eals:\n", " security_level_list.append(counter.get(security_level_key, 0))\n", " \n", " heatmap_result.append(security_level_list)\n", - "\n", - "sns.heatmap(heatmap_result, xticklabels=eals, yticklabels=eals).set_title(\"Archived certs vs. active certs\")" + " \n", + "#sns.light_palette(\"seagreen\", as_cmap=True)\n", + "#sns.set_style()\n", + "sns.set(style=\"whitegrid\")\n", + "ax = sns.heatmap(heatmap_result, xticklabels=eals, yticklabels=eals,cmap=\"Greens\").set_title(\"Archived certs vs. active certs\")\n", + "plt.xlabel(\"Affecting security level\")\n", + "plt.ylabel(\"Affected by security level\")" ] }, { |
