UNPKG

@shockpkg/ria-packager

Version:

Package for creating Adobe AIR packages

195 lines (150 loc) 4.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.SecurityKeystorePkcs12 = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _nodeForge = _interopRequireDefault(require("node-forge")); var _x = require("../certificate/x509"); var _rsa = require("../key/private/rsa"); var _keystore = require("../keystore"); const forgeOidCertBag = _nodeForge.default.pki.oids.certBag; const forgeOidPkcs8ShroudedKeyBag = _nodeForge.default.pki.oids.pkcs8ShroudedKeyBag; /** * SecurityKeystorePkcs12 constructor. */ class SecurityKeystorePkcs12 extends _keystore.SecurityKeystore { /** * Certificate. */ /** * Private key. */ constructor() { super(); (0, _defineProperty2.default)(this, "_certificate", null); (0, _defineProperty2.default)(this, "_keyPrivate", null); } /** * Reset the internal state. */ reset() { this._certificate = null; this._keyPrivate = null; } /** * Get certificate or throw if none. * * @returns Certificate instance. */ getCertificate() { const r = this._certificate; if (!r) { throw new Error('No certificate'); } return r; } /** * Get private key or throw if none. * * @returns Private key instance. */ getKeyPrivate() { const r = this._keyPrivate; if (!r) { throw new Error('No private key'); } return r; } /** * Read data from buffer. * * @param data File data. * @param password The password if necessary. */ readData(data, password = null) { this.reset(); const der = _nodeForge.default.util.decode64(data.toString('base64')); const asn1 = _nodeForge.default.asn1.fromDer(der); const p12 = password ? _nodeForge.default.pkcs12.pkcs12FromAsn1(asn1, true, password) : _nodeForge.default.pkcs12.pkcs12FromAsn1(asn1, true); const certificates = []; const keyPrivates = []; for (const safeContent of p12.safeContents) { for (const safeBag of safeContent.safeBags) { switch (safeBag.type) { case forgeOidCertBag: { const { cert } = safeBag; if (!cert) { throw new Error('Internal error'); } certificates.push(cert); break; } case forgeOidPkcs8ShroudedKeyBag: { const { key } = safeBag; if (!key) { throw new Error('Internal error'); } keyPrivates.push(key); break; } default: {// Do nothing. } } } } if (certificates.length > 1) { throw new Error(`Found multiple certificates: ${certificates.length}`); } if (keyPrivates.length > 1) { throw new Error(`Found multiple private keys: ${keyPrivates.length}`); } const certificate = certificates.length ? this._createCertificateX509(certificates[0]) : null; const keyPrivate = keyPrivates.length ? this._SecurityKeyPrivateRsa(keyPrivates[0]) : null; this._certificate = certificate; this._keyPrivate = keyPrivate; } /** * Read data from file. * * @param path File path. * @param password The password if necessary. */ async readFile(path, password = null) { const data = await _fsExtra.default.readFile(path); this.readData(data, password); } /** * Create CertificateX509. * * @param certificate Force certificate. * @returns New CertificateX509. */ _createCertificateX509(certificate) { const r = new _x.SecurityCertificateX509(); r.readForgeCertificate(certificate); return r; } /** * Create KeyPrivateRsa. * * @param keyPrivate Force private key. * @returns New KeyPrivateRsa. */ _SecurityKeyPrivateRsa(keyPrivate) { const r = new _rsa.SecurityKeyPrivateRsa(); r.readForgeKeyPrivate(keyPrivate); return r; } } exports.SecurityKeystorePkcs12 = SecurityKeystorePkcs12; //# sourceMappingURL=pkcs12.js.map