Added count of parsed certificated and changed regex

This commit is contained in:
Neha Gopinath 2020-01-29 12:16:12 +01:00
parent 6940469e50
commit 84505c1d7a
3 changed files with 84 additions and 249 deletions

167
.idea/workspace.xml generated
View file

@ -2,11 +2,9 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="be3b9f74-a124-47bf-9f48-a21e4aa8061c" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/core/operations/ParseX509CertificateBundles.mjs" beforeDir="false" afterPath="$PROJECT_DIR$/src/core/operations/ParseX509CertificateBundles.mjs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/core/operations/sample.pem" beforeDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@ -18,71 +16,7 @@
<option name="isMigrated" value="true" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509CertificateBundles.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="967">
<caret line="94" column="95" selection-start-line="94" selection-start-column="95" selection-end-line="94" selection-end-column="95" />
<folding>
<element signature="e#115#156#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/Dish.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1035">
<caret line="82" column="22" selection-start-line="82" selection-start-column="18" selection-end-line="82" selection-end-column="22" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509Certificate.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="629">
<caret line="171" column="95" selection-start-line="171" selection-start-column="12" selection-end-line="171" selection-end-column="95" />
<folding>
<element signature="e#108#134#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseUDP.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseSSHHostKey.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseQRCode.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseIPv6Address.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseIPv4Header.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseColourCode.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
</leaf>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
@ -119,17 +53,18 @@
</list>
</option>
</component>
<component name="ProjectFrameBounds" fullScreen="true">
<option name="x" value="-245" />
<option name="y" value="-1200" />
<option name="width" value="1920" />
<option name="height" value="1200" />
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="180" />
<option name="y" value="125" />
<option name="width" value="1080" />
<option name="height" value="619" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<expand>
@ -137,29 +72,10 @@
<item name="CyberChef" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberChef" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="CyberChef" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberChef" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="CyberChef" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberChef" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="core" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="CyberChef" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberChef" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="core" type="462c0819:PsiDirectoryNode" />
<item name="operations" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
@ -210,12 +126,14 @@
<workItem from="1578650640199" duration="321000" />
<workItem from="1578659764129" duration="593000" />
<workItem from="1578993508965" duration="10512000" />
<workItem from="1579618672801" duration="2515000" />
<workItem from="1579618672801" duration="2731000" />
<workItem from="1579700398326" duration="642000" />
<workItem from="1580295075999" duration="1309000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="28449000" />
<option name="totallyTimeSpent" value="30616000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
@ -227,10 +145,9 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="-245" y="-1200" width="1920" height="1200" extended-state="0" />
<editor active="true" />
<frame x="0" y="23" width="1440" height="823" extended-state="6" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.15069222" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.35622317" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Image Layers" order="2" />
<window_info id="Designer" order="3" />
@ -431,9 +348,6 @@
<entry file="file://$PROJECT_DIR$/src/core/operations/OR.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/build/prod/modules/Code.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
@ -471,6 +385,23 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/Operation.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="12" column="6" selection-start-line="12" selection-start-column="6" selection-end-line="12" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509CertificateBundles.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="409">
<caret line="74" column="51" selection-start-line="74" selection-start-column="51" selection-end-line="74" selection-end-column="51" />
<folding>
<element signature="e#115#156#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/Dish.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1035">
@ -478,6 +409,16 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509Certificate.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="660">
<caret line="49" column="2" selection-start-line="49" selection-start-column="2" selection-end-line="52" selection-end-column="7" />
<folding>
<element signature="e#108#134#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseUDP.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
@ -496,30 +437,10 @@
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseColourCode.mjs">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/core/Operation.mjs">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="12" column="6" selection-start-line="12" selection-start-column="6" selection-end-line="12" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509Certificate.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="629">
<caret line="171" column="95" selection-start-line="171" selection-start-column="12" selection-end-line="171" selection-end-column="95" />
<folding>
<element signature="e#108#134#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/core/operations/ParseX509CertificateBundles.mjs">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="967">
<caret line="94" column="95" selection-start-line="94" selection-start-column="95" selection-end-line="94" selection-end-column="95" />
<folding>
<element signature="e#115#156#0" expanded="true" />
</folding>
<state relative-caret-position="45">
<caret line="3" column="5" selection-start-line="3" selection-end-line="3" selection-end-column="5" />
</state>
</provider>
</entry>

View file

@ -48,60 +48,76 @@ class ParseX509CertificateBundles extends Operation {
* @param {Object[]} args
* @returns {string}
*/
run(input, args) {
if (!input.length) {
return "No input";
}
const regex = /^-----BEGIN CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END CERTIFICATE-----/gm;
const regex1 = /^-----BEGIN CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END CERTIFICATE-----/gm;
const regex2 = /^-----BEGIN TRUSTED CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END TRUSTED CERTIFICATE-----/gm;
let m;
let res = "";
let count = 0;
while ((m = regex.exec(input)) !== null) {
while ((m = regex1.exec(input)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
if (m.index === regex1.lastIndex) {
regex1.lastIndex++;
}
//console.log(m[1]);
count++;
res += "\nCertificate:\n" + parseCert("-----BEGIN CERTIFICATE-----" + "\n" + m[1] + "\n" + "-----END CERTIFICATE-----");
}
while ((m = regex2.exec(input)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex2.lastIndex) {
regex2.lastIndex++;
return "Parsed Certificates:\n" + res;
}
count++;
res += "\nCertificate:\n" + parseCert("-----BEGIN TRUSTED CERTIFICATE-----" + "\n" + m[1] + "\n" + "-----END TRUSTED CERTIFICATE-----");
}
return "Parsed Certificates =" + count + ":\n" + res;
}
}
/**
* parses individual certificates.
*
* @param {string} input
* @returns {string}
*/
function parseCert(input) {
const cert = new r.X509();
cert.readCertPEM(input);
const issuer = cert.getIssuerString(),
subject = cert.getSubjectString();
const issuer = cert.getIssuerString(),
subject = cert.getSubjectString();
let extensions = "";
let extensions = "";
// Extensions
try {
// extensions =cert.getInfo();
extensions = cert.getInfo().split("X509v3 Extensions:\n")[1].split("signature")[0];
} catch (err) {
}
// Extensions
try {
// extensions =cert.getInfo();
extensions = cert.getInfo().split("X509v3 Extensions:\n")[1].split("signature")[0];
} catch (err) {
}
const issuerStr = formatDnStr(issuer, 2),
nbDate = formatDate(cert.getNotBefore()),
naDate = formatDate(cert.getNotAfter()),
subjectStr = formatDnStr(subject, 2);
const issuerStr = formatDnStr(issuer, 2),
nbDate = formatDate(cert.getNotBefore()),
naDate = formatDate(cert.getNotAfter()),
subjectStr = formatDnStr(subject, 2);
return `Validity
return `Validity
Not Before: ${nbDate} (dd-mm-yyyy hh:mm:ss) (${cert.getNotBefore()})
Not After: ${naDate} (dd-mm-yyyy hh:mm:ss) (${cert.getNotAfter()})
Issuer

View file

@ -1,102 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIF1TCCA72gAwIBAgIJAMEg6HbM2iQ2MA0GCSqGSIb3DQEBBQUAMIGAMQswCQYD
VQQGEwJERTEQMA4GA1UECAwHQmF2YXJpYTEPMA0GA1UEBwwGTXVuaWNoMQ8wDQYD
VQQKDAZHJkQgM1MxGDAWBgNVBAsMD01vYmlsZSBTZWN1cml0eTEjMCEGA1UEAwwa
SVNTVUVSLS1UT1dBUkRTLS1DUFNTRVJWRVIwHhcNMTkwMzE5MTU1NzU4WhcNMjkw
MzI1MTU1NzU4WjCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWExDzAN
BgNVBAcMBk11bmljaDEPMA0GA1UECgwGRyZEIDNTMRgwFgYDVQQLDA9Nb2JpbGUg
U2VjdXJpdHkxIzAhBgNVBAMMGklTU1VFUi0tVE9XQVJEUy0tQ1BTU0VSVkVSMIIC
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6vslYbfDkhx3B0uZKYKfs0eW
qrSJn9w3sWhaLfp1xuSRDP6A6QW4cUs5yy6PKd0MfvvF7nuj8WvE0yQutvkVrvCp
9Fw325+dv2SPfsb9UkGoaygj3GRblvJbDbFVlOZzjmRJM1YAkA1Ej/kHzj5bCbRl
JCyAaCGAU1QMwIPEQ0BMKOC9/cSuWbD1N0PiTlPrddmqaH7370geTzRjYzMIjtNo
T/0CnqWc78j/SLceeNrtU0k8xpvNJG4gs4I6P26tByQK3LMkl0P9didVz6bopCx1
BEGEzDBpP2UeOM8ve7FJYn2HtY7OBDnrQso8/9FkSPzSLAPzfEgLSHBToIwtvnTh
Z+brEsU8FFGAIpu07JTiN0ghvBgURIbzUC8Quv1cHU++dDyAGOPb8ErnoxbSZWEF
714NJ7sH+m4VrqVOfQhk7SvEohNQXrFF9J89ZBqr1LQObr0szhNKfFjmFT6QcwFz
Jqpk8vb6uWpvm681qIr3eYebdqC78RpeHpXcPIDazs9uEv3slJW/ryhwUUnC/9zR
D9a7PCdxuga2nF734KuIfrjnrQn7xGt5TDSCYHe310j4oL9xclRuIdldtlQ8i89c
oE5OxiWmkz6Pk9wAl0I9MNIvA7sjiL+Lq11gkHOWoIdcPFw/SuZIwtx1x6dEW0gA
THw3WOoHiBTB8WFNKLECAwEAAaNQME4wHQYDVR0OBBYEFFRDjUbv+x59OyzzYCTh
uzUiHT4DMB8GA1UdIwQYMBaAFFRDjUbv+x59OyzzYCThuzUiHT4DMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADggIBAFw8qefbisFva0CYOXBJW+zIUbbQuGG+
EwjbdQ4t3ufsFH3lE5yFM84fTlDMvexmZq0ljBWaLFu6dGd0AXX/B2j7NnXCTr5+
8969/Jlx8B8zCKIlUkckTWBI8qXkmyUbwjcrIvQ2iCNhEBzRzjyh1DQyfmtFk2Bl
H8aTAz2tfaW9FsIa96cyk6SPfPxC9plRKpPuJpOEWGPboJJQAAnLv+qzntdt8feR
EejAFdoyzzUg3nykLKVkSPkDWzRjkjK5XNJYeKsjSD8UPnUtgK31f+LltpeBuyo7
7aHgA7OkP2EDWBxmpAhyITWHX886nIi9T3SYvqIscKZ/w5+ZiTM1c4XbkWKuU9Pd
ImZqaJYyMsinsgs2LpEZ/rKzQBcSDkuD9O6w+iXxUSzWgEAyTbUpVYV7su7EBrk1
5vB4UPRvrZfwfjnK6x+Quu4mjZnEg1+/N0+DehAoMVskXSDepwSBkEIIX3ZdP3ak
LfV0G8Oc1GUf5RlWxnDzjDKOL09yLlJHzE5UlGn4VBcYNXkVouKwGgo8qm71nNsc
eokToj2/DaDSM0tB+Ot1TgPRGUH3ro0izZ8+2yhd+cRE7XJYsCdLkfY4ixe+Dq5M
u7KDjQXew1LxEaTD4CJ2T3aOfjCHEAo6JspqO1Z0VuVU+TRgViJzFVNiFlHCLu3N
LDZQCAjQitsk
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
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
pTrJkmvrx3hA
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
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
7hf7KmzprR1rsHU1FQYJydLBRA==
-----END CERTIFICATE-----