You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.3 KiB
56 lines
2.3 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.findP12CertSerialNumber = findP12CertSerialNumber;
|
|
exports.getCertData = getCertData;
|
|
exports.getP12CertFingerprint = getP12CertFingerprint;
|
|
function _nodeForge() {
|
|
const data = _interopRequireDefault(require("node-forge"));
|
|
_nodeForge = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
function getP12CertFingerprint(p12Buffer, passwordRaw) {
|
|
const certData = getRawCertData(p12Buffer, passwordRaw);
|
|
const certAsn1 = _nodeForge().default.pki.certificateToAsn1(certData);
|
|
const certDer = _nodeForge().default.asn1.toDer(certAsn1).getBytes();
|
|
return _nodeForge().default.md.sha1.create().update(certDer).digest().toHex().toUpperCase();
|
|
}
|
|
function findP12CertSerialNumber(p12Buffer, passwordRaw) {
|
|
const {
|
|
serialNumber
|
|
} = getCertData(p12Buffer, passwordRaw);
|
|
return serialNumber;
|
|
}
|
|
function getCertData(p12Buffer, passwordRaw) {
|
|
const certData = getRawCertData(p12Buffer, passwordRaw);
|
|
return {
|
|
...certData,
|
|
serialNumber: certData.serialNumber.replace(/^0+/, '').toUpperCase()
|
|
};
|
|
}
|
|
function getRawCertData(p12Buffer, passwordRaw) {
|
|
var _p12$getBags, _p12$getBags$certBagT, _p12$getBags$certBagT2;
|
|
if (Buffer.isBuffer(p12Buffer)) {
|
|
p12Buffer = p12Buffer.toString('base64');
|
|
} else if (typeof p12Buffer !== 'string') {
|
|
throw new Error('getCertData only takes strings and buffers.');
|
|
}
|
|
const password = String(passwordRaw || '');
|
|
const p12Der = _nodeForge().default.util.decode64(p12Buffer);
|
|
const p12Asn1 = _nodeForge().default.asn1.fromDer(p12Der);
|
|
const p12 = _nodeForge().default.pkcs12.pkcs12FromAsn1(p12Asn1, password);
|
|
const certBagType = _nodeForge().default.pki.oids.certBag;
|
|
const certData = (_p12$getBags = p12.getBags({
|
|
bagType: certBagType
|
|
})) === null || _p12$getBags === void 0 ? void 0 : (_p12$getBags$certBagT = _p12$getBags[certBagType]) === null || _p12$getBags$certBagT === void 0 ? void 0 : (_p12$getBags$certBagT2 = _p12$getBags$certBagT[0]) === null || _p12$getBags$certBagT2 === void 0 ? void 0 : _p12$getBags$certBagT2.cert;
|
|
if (!certData) {
|
|
throw new Error("getRawCertData: couldn't find cert bag");
|
|
}
|
|
return certData;
|
|
}
|
|
//# sourceMappingURL=p12Certificate.js.map
|