"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0; const node_crypto_1 = require("node:crypto"); const node_buffer_1 = require("node:buffer"); const webcrypto_js_1 = require("./webcrypto.js"); const is_key_object_js_1 = require("./is_key_object.js"); const invalid_key_input_js_1 = require("../lib/invalid_key_input.js"); const is_key_like_js_1 = require("./is_key_like.js"); const genericExport = (keyType, keyFormat, key) => { let keyObject; if ((0, webcrypto_js_1.isCryptoKey)(key)) { if (!key.extractable) { throw new TypeError('CryptoKey is not extractable'); } keyObject = node_crypto_1.KeyObject.from(key); } else if ((0, is_key_object_js_1.default)(key)) { keyObject = key; } else { throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types)); } if (keyObject.type !== keyType) { throw new TypeError(`key is not a ${keyType} key`); } return keyObject.export({ format: 'pem', type: keyFormat }); }; const toSPKI = (key) => { return genericExport('public', 'spki', key); }; exports.toSPKI = toSPKI; const toPKCS8 = (key) => { return genericExport('private', 'pkcs8', key); }; exports.toPKCS8 = toPKCS8; const fromPKCS8 = (pem) => (0, node_crypto_1.createPrivateKey)({ key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'), type: 'pkcs8', format: 'der', }); exports.fromPKCS8 = fromPKCS8; const fromSPKI = (pem) => (0, node_crypto_1.createPublicKey)({ key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'), type: 'spki', format: 'der', }); exports.fromSPKI = fromSPKI; const fromX509 = (pem) => (0, node_crypto_1.createPublicKey)({ key: pem, type: 'spki', format: 'pem', }); exports.fromX509 = fromX509;