xml-fiesta
Version:
Electronic signed document XML Protocol for Node & Browser
164 lines • 8.86 kB
JavaScript
"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