@shockpkg/ria-packager
Version:
Package for creating Adobe AIR packages
195 lines (150 loc) • 4.33 kB
JavaScript
;
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