summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/helpers/getCertificateInfo.ts31
-rw-r--r--src/types.ts6
2 files changed, 37 insertions, 0 deletions
diff --git a/src/helpers/getCertificateInfo.ts b/src/helpers/getCertificateInfo.ts
new file mode 100644
index 0000000..b7a0ed0
--- /dev/null
+++ b/src/helpers/getCertificateInfo.ts
@@ -0,0 +1,31 @@
+import jsrsasign from 'jsrsasign';
+
+import { CertificateInfo } from '@types';
+
+/**
+ * Extract PEM certificate info
+ *
+ * @param pemCertificate Result from call to `convertASN1toPEM(x5c[0])`
+ */
+export default function getCertificateInfo(pemCertificate: string): CertificateInfo {
+ const subjectCert = new jsrsasign.X509();
+ subjectCert.readCertPEM(pemCertificate);
+
+ const subjectString = subjectCert.getSubjectString();
+ const subjectParts = subjectString.slice(1).split('/');
+
+ const subject: { [key: string]: string } = {};
+ subjectParts.forEach((field) => {
+ const [key, val] = field.split('=');
+ subject[key] = val;
+ });
+
+ const { getVersion } = subjectCert;
+ const basicConstraintsCA = !!subjectCert.getExtBasicConstraints().cA;
+
+ return {
+ subject,
+ version: getVersion(),
+ basicConstraintsCA,
+ };
+}
diff --git a/src/types.ts b/src/types.ts
index 927cdf4..0379ced 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -65,3 +65,9 @@ export type VerifiedAttestation = {
base64CredentialID: string,
},
};
+
+export type CertificateInfo = {
+ subject: { [key: string]: string },
+ version: number,
+ basicConstraintsCA: boolean,
+};