summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src/helpers/getCertificateInfo.ts
blob: 4238bc2b296a438876ed1a74746265c0b75e8e29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import jsrsasign from 'jsrsasign';
import { CertificateInfo } from '@webauthntine/typescript-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,
  };
}