UNPKG

xml-fiesta

Version:

Electronic signed document XML Protocol for Node & Browser

164 lines 8.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var jsrsasign = require('jsrsasign'); var common_1 = require("./common"); var certificate_1 = require("./certificate"); var errors_1 = require("./errors"); var ConservancyRecordNom2016 = (function () { function ConservancyRecordNom2016(caCert, record, timestamp, signedHash) { this.caCert = caCert; this.record = record; this.timestamp = timestamp; this.signedHash = signedHash; if (!this.record) { throw new errors_1.ArgumentError('Conservancy must have record'); } this.recordHex = common_1.b64toHex(this.record); if (!jsrsasign.ASN1HEX.isASN1HEX(this.recordHex)) { throw new errors_1.InvalidRecordError('The record provided is invalid'); } this.positions = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.recordHex, 0); try { this.rootCertificate = new certificate_1.default(null, this.rootCertificateHex()); } catch (err) { this.rootCertificate = null; } this.tsaCertificate = new certificate_1.default(null, common_1.b64toHex(this.caCert)); var inCert = new certificate_1.default(null, this.caCertificateHex()); if (this.tsaCertificate.toHex() !== inCert.toHex()) { throw new errors_1.ArgumentError('Tsa certificates are not equals'); } } ConservancyRecordNom2016.prototype.rootCertificateHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.certificatesHex(), 0); return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.certificatesHex(), ar_pos[1]); }; ConservancyRecordNom2016.prototype.caCertificateHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.certificatesHex(), 0); return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.certificatesHex(), ar_pos[0]); }; ConservancyRecordNom2016.prototype.certificatesHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.archiveHex(), ar_pos[3]); }; ConservancyRecordNom2016.prototype.caName = function () { if (this.tsaCertificate) { return this.tsaCertificate.getSubject().O; } }; ConservancyRecordNom2016.prototype.rootName = function () { if (this.rootCertificate) { return this.rootCertificate.getSubject().O; } }; ConservancyRecordNom2016.prototype.messageDigest = function () { var pkcs9 = this.signedAttributesHex(); var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[2]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[1]); return jsrsasign.ASN1HEX.getHexOfV_AtObj(pkcs9, ar_pos[0]); }; ConservancyRecordNom2016.prototype.signedTimeStamp = function () { var pkcs9 = this.signedAttributesHex(); var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[1]); var date = jsrsasign.ASN1HEX.getHexOfV_AtObj(pkcs9, ar_pos[0]); return common_1.parseDate(common_1.hextoAscii(date)); }; ConservancyRecordNom2016.prototype.signingCertificateV2 = function () { var pkcs9 = this.signedAttributesHex(); var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[3]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[0]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[0]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(pkcs9, ar_pos[0]); return jsrsasign.ASN1HEX.getHexOfV_AtObj(pkcs9, ar_pos[1]); }; ConservancyRecordNom2016.prototype.tSTInfoHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[2]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.archiveHex(), ar_pos[0]); }; ConservancyRecordNom2016.prototype.contentAttributesHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.archiveHex(), ar_pos[4]); }; ConservancyRecordNom2016.prototype.signedAttributesHex = function () { var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[1]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[4]); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.archiveHex(), ar_pos[0]); var hex = jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.archiveHex(), ar_pos[3]); if (!hex.startsWith('31')) { return hex = '31' + hex.slice(2, hex.length); } }; ConservancyRecordNom2016.prototype.archiveHex = function () { return jsrsasign.ASN1HEX.getHexOfTLV_AtObj(this.recordHex, this.positions[1]); }; ConservancyRecordNom2016.prototype.archiveSignature = function () { var info = this.contentAttributesHex(); var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(info, 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(info, ar_pos[0]); return jsrsasign.ASN1HEX.getHexOfV_AtObj(info, ar_pos[5]); }; ConservancyRecordNom2016.prototype.archiveSignedHash = function () { var tSTInfo = this.tSTInfoHex(); var ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(tSTInfo, 0); ar_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(tSTInfo, ar_pos[2]); return jsrsasign.ASN1HEX.getHexOfV_AtObj(tSTInfo, ar_pos[1]); }; ConservancyRecordNom2016.prototype.validArchiveHash = function () { if (this.signedHash !== this.archiveSignedHash()) { return false; } if (!this.tsaCertificate.isValidOn(this.signedTimeStamp())) { return false; } if (this.messageDigest() !== common_1.sha256hex(this.tSTInfoHex())) { return false; } if (!this.equalTimestamps()) { return false; } if (!this.signingCertificateV2()) { return false; } return this.tsaCertificate.verifyHexString(this.signedAttributesHex(), this.archiveSignature()); }; ConservancyRecordNom2016.prototype.recordTimestamp = function () { var ts_pos = jsrsasign.ASN1HEX.getPosArrayOfChildren_AtObj(this.tSTInfoHex(), 0); var date = jsrsasign.ASN1HEX.getHexOfV_AtObj(this.tSTInfoHex(), ts_pos[4]); return common_1.parseDate(common_1.hextoAscii(date)); }; ConservancyRecordNom2016.prototype.equalTimestamps = function () { var middle; return Date.parse(this.timestamp) === (middle = this.recordTimestamp().getTime()) && middle === this.signedTimeStamp().getTime(); }; ConservancyRecordNom2016.prototype.valid = function () { if (!this.rootCertificate) { return false; } return this.tsaCertificate.isCa(this.rootCertificate.toPem()); }; ConservancyRecordNom2016.prototype.isCa = function (caPemCert) { if (this.rootCertificate) { return this.rootCertificate.isCa(caPemCert); } }; return ConservancyRecordNom2016; }()); exports.default = ConservancyRecordNom2016; //# sourceMappingURL=conservancyRecordNom2016.js.map