@syncfusion/ej2-pdf
Version:
Feature-rich JavaScript PDF library with built-in support for loading and manipulating PDF document.
107 lines (106 loc) • 4.41 kB
JavaScript
import { _PdfPublicKeyCryptographyCertificate } from './pdf-cryptography-certificate';
import { _PdfX509Certificate } from './x509/x509-certificate';
/**
* High-level certificate wrapper providing convenient accessors and loaders.
*
* @private
*/
var _PdfCertificate = /** @class */ (function () {
function _PdfCertificate(certificate, password) {
/**
* Chain of parsed X.509 certificate objects.
*
* @private
* @type {_PdfX509Certificate[]}
*/
this._chains = [];
/**
* Common OID -> attribute short-name mapping used when extracting names.
*
* @private
* @type {Record<string,string>}
*/
this._objectIdentifierToAttributeMap = {
'2.5.4.3': 'CN',
'2.5.4.6': 'C',
'2.5.4.7': 'L',
'2.5.4.8': 'ST',
'2.5.4.10': 'O',
'2.5.4.11': 'OU'
};
if (certificate instanceof Uint8Array && password !== null && typeof password !== 'undefined') {
this._initializePublicKeyCryptographyCertificate(certificate, password);
}
else if (certificate instanceof _PdfX509Certificate) {
this._loadDetailsFromCertificate(certificate);
}
}
/**
* Initialize from PKCS#12/PKCS#7 container bytes using the provided password.
*
* @private
* @param {Uint8Array} certificateBytes - PKCS container bytes.
* @param {string} password - Password used to decrypt the container.
* @returns {void}
*/
_PdfCertificate.prototype._initializePublicKeyCryptographyCertificate = function (certificateBytes, password) {
var pkcsCertificate = new _PdfPublicKeyCryptographyCertificate(certificateBytes, password);
if (pkcsCertificate) {
this._publicKeyCryptographyCertificate = pkcsCertificate;
var certificateAlias_1 = '';
pkcsCertificate._keys.forEach(function (keyEntry, alias) {
if (keyEntry && certificateAlias_1 === '') {
certificateAlias_1 = alias;
}
});
var certificates = pkcsCertificate._getCertificate(certificateAlias_1);
if (certificates) {
this._loadDetailsFromCertificate(certificates._certificate);
}
}
};
/**
* Populate wrapper fields from a parsed `_PdfX509Certificate` instance.
*
* @private
* @param {_PdfX509Certificate} certificate - Parsed X.509 certificate.
* @returns {void}
*/
_PdfCertificate.prototype._loadDetailsFromCertificate = function (certificate) {
var structure = certificate._structure;
var signature = structure._getSignedCertificate();
this._issuerName = this._getUniqueAttributes(signature._issuer, 'CN');
if (this._issuerName === '') {
this._issuerName = this._getUniqueAttributes(signature._issuer, 'OU');
}
this._subjectName = this._getUniqueAttributes(signature._subject, 'CN');
this._validFrom = signature._startDate._toDate();
this._validTo = signature._endDate._toDate();
this._version = signature._getVersion();
var serialNumberBytes = signature._serialNumber;
this._serialNumber = serialNumberBytes;
this._isPublicKeyCryptographyCertificate = true;
};
/**
* Extract a single attribute value (e.g., CN) from an `_PdfX509Name` instance.
*
* @private
* @param {_PdfX509Name} x509Name - Parsed distinguished name.
* @param {string} attribute - Attribute short name or OID to look up.
* @returns {string} The attribute value or empty string when not present.
*/
_PdfCertificate.prototype._getUniqueAttributes = function (x509Name, attribute) {
var _this = this;
var targetOid = Object.keys(this._objectIdentifierToAttributeMap).find(function (oid) { return _this._objectIdentifierToAttributeMap[oid] === attribute || oid === attribute; }) || attribute;
for (var i = 0; i < x509Name._ordering.length; i++) {
var oid = x509Name._ordering[i];
if (oid.toString() === targetOid) {
var val = x509Name._values[i];
return val ? val.trim() : '';
}
}
return '';
};
return _PdfCertificate;
}());
export { _PdfCertificate };