@simplewebauthn/server
Version:
SimpleWebAuthn for Servers
72 lines (71 loc) • 2.57 kB
JavaScript
import { convertCertBufferToPEM } from '../helpers/convertCertBufferToPEM.js';
import { GlobalSign_Root_CA } from './defaultRootCerts/android-safetynet.js';
import { Google_Hardware_Attestation_Root_1, Google_Hardware_Attestation_Root_2, Google_Hardware_Attestation_Root_3, Google_Hardware_Attestation_Root_4, } from './defaultRootCerts/android-key.js';
import { Apple_WebAuthn_Root_CA } from './defaultRootCerts/apple.js';
import { GlobalSign_Root_CA_R3 } from './defaultRootCerts/mds.js';
class BaseSettingsService {
constructor() {
// Certificates are stored as PEM-formatted strings
Object.defineProperty(this, "pemCertificates", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.pemCertificates = new Map();
}
setRootCertificates(opts) {
const { identifier, certificates } = opts;
const newCertificates = [];
for (const cert of certificates) {
if (cert instanceof Uint8Array) {
newCertificates.push(convertCertBufferToPEM(cert));
}
else {
newCertificates.push(cert);
}
}
this.pemCertificates.set(identifier, newCertificates);
}
getRootCertificates(opts) {
const { identifier } = opts;
return this.pemCertificates.get(identifier) ?? [];
}
}
/**
* A basic service for specifying acceptable root certificates for all supported attestation
* statement formats.
*
* In addition, default root certificates are included for the following statement formats:
*
* - `'android-key'`
* - `'android-safetynet'`
* - `'apple'`
* - `'android-mds'`
*
* These can be overwritten as needed by setting alternative root certificates for their format
* identifier using `setRootCertificates()`.
*/
export const SettingsService = new BaseSettingsService();
// Initialize default certificates
SettingsService.setRootCertificates({
identifier: 'android-key',
certificates: [
Google_Hardware_Attestation_Root_1,
Google_Hardware_Attestation_Root_2,
Google_Hardware_Attestation_Root_3,
Google_Hardware_Attestation_Root_4,
],
});
SettingsService.setRootCertificates({
identifier: 'android-safetynet',
certificates: [GlobalSign_Root_CA],
});
SettingsService.setRootCertificates({
identifier: 'apple',
certificates: [Apple_WebAuthn_Root_CA],
});
SettingsService.setRootCertificates({
identifier: 'mds',
certificates: [GlobalSign_Root_CA_R3],
});