diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/helpers/getCertificateInfo.ts | 31 | ||||
-rw-r--r-- | src/types.ts | 6 |
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, +}; |