"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.getP12CertFingerprint = getP12CertFingerprint;
exports.findP12CertSerialNumber = findP12CertSerialNumber;

function _nodeForge() {
  const data = _interopRequireDefault(require("node-forge"));

  _nodeForge = function () {
    return data;
  };

  return data;
}

function _get() {
  const data = _interopRequireDefault(require("lodash/get"));

  _get = function () {
    return data;
  };

  return data;
}

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function getP12CertFingerprint(p12Buffer, passwordRaw) {
  const certData = _getCertData(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 certData = _getCertData(p12Buffer, passwordRaw);

  const {
    serialNumber
  } = certData;
  return serialNumber ? certData.serialNumber.replace(/^0+/, '').toUpperCase() : null;
}

function _getCertData(p12Buffer, passwordRaw) {
  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 = (0, _get().default)(p12.getBags({
    bagType: certBagType
  }), [certBagType, 0, 'cert']);

  if (!certData) {
    throw new Error("_getCertData: couldn't find cert bag");
  }

  return certData;
}
//# sourceMappingURL=../__sourcemaps__/detach/PKCS12Utils.js.map