issuer: this.issuer, infoAccess: this.infoAccess, validFrom: this.validFrom, validTo: this.validTo, fingerprint: this.fingerprint, fingerprint256: this.fingerprint256, fingerprint512: this.fingerprint512, keyUsage: this.keyUsage, serialNumber: this.serialNumber, }, opts)}`; } [kClone]() { const handle = this[kHandle]; return { data: { handle }, deserializeInfo: 'internal/crypto/x509:InternalX509Certificate' }; } [kDeserialize]({ handle }) { this[kHandle] = handle; } get subject() { let value = this[kInternalState].get('subject'); if (value === undefined) { value = this[kHandle].subject(); this[kInternalState].set('subject', value); } return value; } get subjectAltName() { let value = this[kInternalState].get('subjectAltName'); if (value === undefined) { value = this[kHandle].subjectAltName(); this[kInternalState].set('subjectAltName', value); } return value; } get issuer() { let value = this[kInternalState].get('issuer'); if (value === undefined) { value = this[kHandle].issuer(); this[kInternalState].set('issuer', value); } return value; } get issuerCertificate() { let value = this[kInternalState].get('issuerCertificate'); if (value === undefined) { const cert = this[kHandle].getIssuerCert(); if (cert) value = new InternalX509Certificate(this[kHandle].getIssuerCert()); this[kInternalState].set('issuerCertificate', value); } return value; } get infoAccess() { let value = this[kInternalState].get('infoAccess'); if (value === undefined) { value = this[kHandle].infoAccess(); this[kInternalState].set('infoAccess', value); } return value; } get validFrom() { let value = this[kInternalState].get('validFrom'); if (value === undefined) { value = this[kHandle].validFrom(); this[kInternalState].set('validFrom', value); } return value; } get validTo() { let value = this[kInternalState].get('validTo'); if (value === undefined) { value = this[kHandle].validTo(); this[kInternalState].set('validTo', value); } return value; } get fingerprint() { let value = this[kInternalState].get('fingerprint'); if (value === undefined) { value = this[kHandle].fingerprint(); this[kInternalState].set('fingerprint', value); } return value; } get fingerprint256() { let value = this[kInternalState].get('fingerprint256'); if (value === undefined) { value = this[kHandle].fingerprint256(); this[kInternalState].set('fingerprint256', value); } return value; } get fingerprint512() { let value = this[kInternalState].get('fingerprint512'); if (value === undefined) { value = this[kHandle].fingerprint512(); this[kInternalState].set('fingerprint512', value); } return value; } get keyUsage() { let value = this[kInternalState].get('keyUsage'); if (value === undefined) { value = this[kHandle].keyUsage(); this[kInternalState].set('keyUsage', value); } return value; } get serialNumber() { let value = this[kInternalState].get('serialNumber'); if (value === undefined) { value = this[kHandle].serialNumber(); this[kInternalState].set('serialNumber', value); } return value; } get raw() { let value = this[kInternalState].get('raw'); if (value === undefined) { value = this[kHandle].raw(); this[kInternalState].set('raw', value); } return value; } get publicKey() { let value = this[kInternalState].get('publicKey'); if (value === undefined) { value = new PublicKeyObject(this[kHandle].publicKey()); this[kInternalState].set('publicKey', value); } return value; } toString() { let value = this[kInternalState].get('pem'); if (value === undefined) { value = this[kHandle].pem(); this[kInternalState].set('pem', value); } return value; } // There's no standardized JSON encoding for X509 certs so we // fallback to providing the PEM encoding as a string. toJSON() { return this.toString(); } get ca() { let value = this[kInternalState].get('ca'); if (value === undefined) { value = this[kHandle].checkCA(); this[kInternalState].set('ca', value); } return value; } checkHost(name, options) { validateString(name, 'name'); return this[kHandle].checkHost(name, getFlags(options)); } checkEmail(email, options) { validateString(email, 'email'); return this[kHandle].checkEmail(email, getFlags(options)); } checkIP(ip, options) { validateString(ip, 'ip'); // The options argument is currently undocumented since none of the options // have any effect on the behavior of this function. However, we still parse // the options argument in case OpenSSL adds flags in the future that do // affect the behavior of X509_check_ip. This ensures that no invalid values // are passed as the second argument in the meantime. return this[kHandle].checkIP(ip, getFlags(options)); } checkIssued(otherCert) { if (!isX509Certificate(otherCert)) throw new ERR_INVALID_ARG_TYPE('otherCert', 'X509Certificate', otherCert); return this[kHandle].checkIssued(otherCert[kHandle]); } checkPrivateKey(pkey) { if (!isKeyObject(pkey)) throw new ERR_INVALID_ARG_TYPE('pkey', 'KeyObject', pkey); if (pkey.type !== 'private') throw new ERR_INVALID_ARG_VALUE('pkey', pkey); return this[kHandle].checkPrivateKey(pkey[kHandle]); } verify(pkey) { if (!isKeyObject(pkey)) throw new ERR_INVALID_ARG_TYPE('pkey', 'KeyObject', pkey); if (pkey.type !== 'public') throw new ERR_INVALID_ARG_VALUE('pkey', pkey); return this[kHandle].verify(pkey[kHandle]); } toLegacyObject() { return this[kHandle].toLegacy(); } } InternalX509Certificate.prototype.constructor = X509Certificate; ObjectSetPrototypeOf( InternalX509Certificate.prototype, X509Certificate.prototype); module.exports = { X509Certificate, InternalX509Certificate, isX509Certificate, };