UNPKG

falcotura-atv-sdk

Version:

Librería (SDK) de Javascript/NodeJS para acceder al API de Administración Tributaria Virtual (ATV) del Ministerio de Hacienda.

72 lines 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.genKeysAndCert = void 0; const node_forge_1 = __importDefault(require("node-forge")); function getBags(pkcs12) { const keyData = pkcs12.getBags({ bagType: node_forge_1.default.pki.oids.pkcs8ShroudedKeyBag })[node_forge_1.default.pki.oids.pkcs8ShroudedKeyBag].concat(pkcs12.getBags({ bagType: node_forge_1.default.pki.oids.keyBag })[node_forge_1.default.pki.oids.keyBag]); const certBags = pkcs12.getBags({ bagType: node_forge_1.default.pki.oids.certBag })[node_forge_1.default.pki.oids.certBag]; return { keyData, certBags }; } function preparePem(pem) { return pem .replace(/-----(BEGIN|END)[\w\d\s]+-----/g, '') .replace(/[\r\n]/g, ''); } function preparePems(privatePem, publicPem, certPem) { const privatePem64 = preparePem(privatePem); const publicPem64 = preparePem(publicPem); const certPem64 = preparePem(certPem); return { privatePem64, publicPem64, certPem64 }; } function fromBase64(base64Text) { base64Text = base64Text.replace(/\n/g, '').replace(/\r/g, '').replace(/\t/g, '').replace(/\s/g, ''); return new Uint8Array(Buffer.from(base64Text, 'base64')).buffer; } function convertFromBase64(pems) { const { privatePem64, publicPem64, certPem64 } = pems; const privateKeyDer = fromBase64(privatePem64); const publicKeyDer = fromBase64(publicPem64); const certDer = fromBase64(certPem64); return { privateKeyDer, publicKeyDer, certDer }; } function getPrivatePem(keyData) { const rsaPrivateKey = node_forge_1.default.pki.privateKeyToAsn1(keyData[0].key); const privateKeyInfo = node_forge_1.default.pki.wrapRsaPrivateKey(rsaPrivateKey); return node_forge_1.default.pki.privateKeyInfoToPem(privateKeyInfo); } function getPublicPem(privatePem) { const preprivateKey = node_forge_1.default.pki.privateKeyFromPem(privatePem); const prepublicKey = node_forge_1.default.pki.setRsaPublicKey(preprivateKey.n, preprivateKey.e); return node_forge_1.default.pki.publicKeyToPem(prepublicKey); } function getKeysAndCert(keyStr, password) { const pkcs12Asn1 = node_forge_1.default.asn1.fromDer(keyStr, false); const pkcs12 = node_forge_1.default.pkcs12.pkcs12FromAsn1(pkcs12Asn1, password); const { keyData, certBags } = getBags(pkcs12); const privatePem = getPrivatePem(keyData); const publicPem = getPublicPem(privatePem); const certPem = node_forge_1.default.pki.certificateToPem(certBags[0].cert); const pems64 = preparePems(privatePem, publicPem, certPem); return pems64; } function genKeysAndCert(crypto, opts) { const alg = opts.algorithm; const pems = getKeysAndCert(opts.keyStr, opts.password); const ders = convertFromBase64(pems); const { privateKeyDer, publicKeyDer, certDer } = ders; const pKey = crypto.subtle.importKey('pkcs8', privateKeyDer, alg, false, ['sign']); const pbKey = crypto.subtle.importKey('spki', publicKeyDer, alg, true, ['verify']); return { privateKey: pKey, publicKey: pbKey, cert: { certDer, certPem: pems.certPem64 } }; } exports.genKeysAndCert = genKeysAndCert; //# sourceMappingURL=genKeysAndCert.js.map