diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index 03d9549e..00000000
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 5e7a2362..6eaf0045 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,9 +2,11 @@
+
+
-
-
+
+
@@ -20,8 +22,8 @@
-
-
+
+
@@ -29,6 +31,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -48,8 +101,8 @@
-
+
@@ -66,18 +119,17 @@
-
-
-
+
+
+
-
+
-
@@ -85,15 +137,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -102,8 +174,11 @@
+
+
+
@@ -130,12 +205,17 @@
1577960280879
-
+
+
+
+
+
+
-
+
@@ -147,10 +227,10 @@
-
+
-
+
@@ -185,33 +265,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -223,13 +276,6 @@
-
-
-
-
-
-
-
@@ -338,13 +384,6 @@
-
-
-
-
-
-
-
@@ -373,9 +412,6 @@
-
-
-
@@ -398,10 +434,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/package-lock.json b/package-lock.json
index f4d5a058..d43f90b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11296,6 +11296,11 @@
"integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
"dev": true
},
+ "openssl-nodejs": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/openssl-nodejs/-/openssl-nodejs-1.0.5.tgz",
+ "integrity": "sha512-6+nxZBw96nK1WUk5yIjhv9NRjqtNTfklB508T64BG5TQ8fU1x1rJrc1I3iVW+31KjnYYYwInGTopYxFJa7wMqA=="
+ },
"opn": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
diff --git a/package.json b/package.json
index fe6b41be..9fa63406 100644
--- a/package.json
+++ b/package.json
@@ -137,6 +137,7 @@
"nodom": "^2.4.0",
"notepack.io": "^2.2.0",
"nwmatcher": "^1.4.4",
+ "openssl-nodejs": "^1.0.5",
"otp": "^0.1.3",
"popper.js": "^1.16.0",
"qr-image": "^3.2.0",
diff --git a/src/core/operations/ParseX509CertificateBundles.mjs b/src/core/operations/ParseX509CertificateBundles.mjs
index 27b84671..76b9f73b 100644
--- a/src/core/operations/ParseX509CertificateBundles.mjs
+++ b/src/core/operations/ParseX509CertificateBundles.mjs
@@ -6,9 +6,6 @@
import Operation from "../Operation.mjs";
import r from "jsrsasign";
-import {toHex} from "../lib/Hex";
-import {fromBase64} from "../lib/Base64";
-import Utils from "../Utils";
import {formatDnStr} from "../lib/PublicKey";
/**
@@ -32,7 +29,7 @@ class ParseX509CertificateBundles extends Operation {
{
"name": "Input format",
"type": "option",
- "value": ["PEM", "DER Hex", "Base64", "Raw"]
+ "value": ["PEM"]
}
];
this.patterns = [
@@ -51,32 +48,42 @@ class ParseX509CertificateBundles extends Operation {
* @param {Object[]} args
* @returns {string}
*/
+
run(input, args) {
+
if (!input.length) {
return "No input";
}
- const cert = new r.X509(),
- inputFormat = args[0];
+ const regex = /^-----BEGIN CERTIFICATE-----\r?\n((?:(?!-----).*\r?\n)*)-----END CERTIFICATE-----/gm;
- switch (inputFormat) {
- case "DER Hex":
- input = input.replace(/\s/g, "");
- cert.readCertHex(input);
- break;
- case "PEM":
- cert.readCertPEM(input);
- break;
- case "Base64":
- cert.readCertHex(toHex(fromBase64(input, null, "byteArray"), ""));
- break;
- case "Raw":
- cert.readCertHex(toHex(Utils.strToByteArray(input), ""));
- break;
- default:
- throw "Undefined input format";
+ let m;
+ let res = "";
+
+ while ((m = regex.exec(input)) !== null) {
+ // This is necessary to avoid infinite loops with zero-width matches
+ if (m.index === regex.lastIndex) {
+ regex.lastIndex++;
+ }
+
+ //console.log(m[1]);
+
+ res += "\nCertificate:\n" + parseCert("-----BEGIN CERTIFICATE-----" + "\n" + m[1] + "\n" + "-----END CERTIFICATE-----");
}
+
+ return "Parsed Certificates:\n" + res;
+
+ }
+}
+
+
+function parseCert(input) {
+
+
+ const cert = new r.X509();
+ cert.readCertPEM(input);
+
const issuer = cert.getIssuerString(),
subject = cert.getSubjectString();
@@ -85,8 +92,9 @@ class ParseX509CertificateBundles extends Operation {
// Extensions
try {
// extensions =cert.getInfo();
- extensions = cert.getInfo().split("basicConstraints :\n")[1].split("signature")[0];
- } catch (err) {}
+ extensions = cert.getInfo().split("X509v3 Extensions:\n")[1].split("signature")[0];
+ } catch (err) {
+ }
const issuerStr = formatDnStr(issuer, 2),
nbDate = formatDate(cert.getNotBefore()),
@@ -100,9 +108,8 @@ Issuer
${issuerStr}
Subject
${subjectStr}
-Extensions/basicConstraints
+Extensions/basicConstraints
${extensions}`;
- }
}
@@ -112,7 +119,7 @@ ${extensions}`;
* @param {string} dateStr
* @returns {string}
*/
-function formatDate (dateStr) {
+function formatDate(dateStr) {
if (dateStr.length === 13) { // UTC Time
dateStr = (dateStr[0] < "5" ? "20" : "19") + dateStr;
}
diff --git a/src/core/operations/sample.pem b/src/core/operations/sample.pem
new file mode 100644
index 00000000..d1ac11ad
--- /dev/null
+++ b/src/core/operations/sample.pem
@@ -0,0 +1,102 @@
+-----BEGIN CERTIFICATE-----
+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
+LDZQCAjQitsk
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF1TCCA72gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCREUx
+EDAOBgNVBAgMB0JhdmFyaWExDzANBgNVBAcMBk11bmljaDEhMB8GA1UECgwYR2ll
+c2Vja2VEZXZyaWVudCBQUyBHbWJIMQswCQYDVQQLDAJSRDEVMBMGA1UEAwwMVEVT
+VCBST09UIHYxMB4XDTE5MDQzMDA5MTY0N1oXDTI5MDQyNzA5MTY0N1owfDELMAkG
+A1UEBhMCREUxEDAOBgNVBAgMB0JhdmFyaWExITAfBgNVBAoMGEdpZXNlY2tlRGV2
+cmllbnQgUFMgR21iSDELMAkGA1UECwwCUkQxKzApBgNVBAMMIlRFU1QgVExTIENM
+SUVOVCBJTlRFUk1FRElBVEUgQ0EgdjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQCZ9eP1TSKPbF4TkXPSG1XE0tT54Qs6U7J+9HuYUPMeN5b962HP1Y+b
+HkljGHAcysihbfKnwgnFpOMcuxV5l4sZRwfAdf0jSfF+TMvO8WzIfF9V95g27WDV
+4PP9F/34jRW0do8isnqL48dWt58a09ICpgYWC+LrjuS5MXIF3B6mraLp9xVKcGuU
+1vAkQZaiWtwFFZWQAPkHk4uNg6GuY68++0ZqnltYBDkEDTZD+MuhgGmEJIEtIDiH
+mIzScIsMeC8wixcp+F3s0Ow6Ohk0WUGG5pN59igOM/vqp8yDUNXCwfUB16DZPtsw
+p0MJDuyjdQRDVn61oFYWS4y9VHg+N+yufl8jeMbXStk6JmW8hSWbB2chYPoFc2oN
+uVC66wgeaPgQLqgsvFluQmo9SdICNxcC0s1sQ/T64FUXmPvKQ7EUYb/x8tqnUPI0
+Xf/hgKdX+LTG27Z1v+mmWBzb5SEAbHfT6oGJDiQZ9IKlS3Skjnb77P10uT6iCUGT
+DBUDvHKwkmU2DGgzt8GQqdn+FpkaxW2mibCuJsrF8bbRnmVl6PszZmr6QJwVFBqE
+MqWbYNwFPFCngq1BmzSpmudJ1f0unbefXHLQb5b3femrFansSQVG7/FeSIzmB2L8
+eMyG6v6r8iZErs+aeXJIuAe3Zqb8k8Mql0Unmm/wLMO7roM1XjDAxQIDAQABo2Yw
+ZDAdBgNVHQ4EFgQUwECtfVvn6JwWmWYfFAdcU0Z8y24wHwYDVR0jBBgwFoAUH8uT
+W+5oxJnH6voZDKlQoyuBksYwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
+BAMCAYYwDQYJKoZIhvcNAQELBQADggIBAD7XoPAi5Q4IfttFvJxv5B8kM2KcKH46
+VFgQjgvsmYtWyp2R6S3Z/Iyq2VsqQeUufCh+i3jT8lCLIUcejaB2cNjNCfy8Fxtz
+EGBXIpi4ghlNEs6YK2kvYXJn225CsqVBVlWWuWzgE1vGFDdFDKY6OVqpVrSCqPJr
+5a6vk61SNFXY6JolbsSo5rObISs1V4jaBGvmz8YjUbfNGUOnuyKlQ7R4fhSUM3QZ
+NKYO0ErVyHhp05MkONdwP1NOYzPGtq1n40SHeC6vjpeGD2cR37JHfkJbRcVMkz5M
+RWzaDsfoTArxdrb7XfUgYMbfY+pK7P34WJ9lZcGR4Jiug06XyR8yrzCS0fCAk/5y
+ys8pK7H+p+P+vTEIxQD4X7zmiYINFAtvXbl+dOU5h/OEIZzNCadIfip8nk9V8ed1
+44nGSpDtJ3lU/47MOQ9qc2zyI4u5EqtKoHeOuMO+xHMy4db+X+9idLUc+3bz9Imt
+dpLjdtts5NkGt8BX3BpbIw/ae6xUzayGzaitwlJcbTbdOt07KQtjYptdYWlHLhKA
+pc5FXedtEZJ41a3mFV83d+FnO+26gLqN9bqM5lrr4p0ReENV154FXrPQS3Ns1Q8Z
+qDVECdhqABLagGcDrycj8pqliQOQyPSLyWeTCvAhlC9oWelZALBf/b/3Bx71prfd
+pTrJkmvrx3hA
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+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
+7hf7KmzprR1rsHU1FQYJydLBRA==
+-----END CERTIFICATE-----