UNPKG

@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
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 };