ctjs
Version:
CTjs is a full set of classes necessary to work with any kind of Certificate Transparency log (V1 as from RFC6962, or V2 as from RFC6962-bis). In CTjs you could find all necessary validation/verification functions for all related data shipped with full-fe
155 lines (132 loc) • 5.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _pvutils = require("pvutils");
var _pkijs = require("pkijs");
var _BaseClass = require("./BaseClass.js");
var _TimestampedCertificateEntryDataV = require("./TimestampedCertificateEntryDataV2.js");
var _TimestampedCertificateEntryDataV2 = _interopRequireDefault(_TimestampedCertificateEntryDataV);
var _SignedCertificateTimestampDataV = require("./SignedCertificateTimestampDataV2.js");
var _SignedCertificateTimestampDataV2 = _interopRequireDefault(_SignedCertificateTimestampDataV);
var _SignedTreeHeadDataV = require("./SignedTreeHeadDataV2.js");
var _SignedTreeHeadDataV2 = _interopRequireDefault(_SignedTreeHeadDataV);
var _ConsistencyProofDataV = require("./ConsistencyProofDataV2.js");
var _ConsistencyProofDataV2 = _interopRequireDefault(_ConsistencyProofDataV);
var _InclusionProofDataV = require("./InclusionProofDataV2.js");
var _InclusionProofDataV2 = _interopRequireDefault(_InclusionProofDataV);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
//**************************************************************************************
class TransItem extends _BaseClass.BaseClass {
//**********************************************************************************
/**
* Constructor for TransItem class
* @param {Object} [parameters={}]
* @property {Object} [schema] asn1js parsed value
*/
constructor(parameters = {}) {
super(parameters);
//region Internal properties of the object
/**
* @type {Number}
* @description type
*/
this.type = (0, _pvutils.getParametersValue)(parameters, "type", TransItem.constants("type"));
/**
* @type {*}
* @description data
*/
this.data = (0, _pvutils.getParametersValue)(parameters, "data", TransItem.constants("data"));
//endregion
}
//**********************************************************************************
/**
* Return value for a constant by name
* @param {string} name String name for a constant
*/
static constants(name) {
switch (name) {
case "type":
return -1;
case "data":
return {};
case "x509_entry_v2":
return 1;
case "precert_entry_v2":
return 2;
case "x509_sct_v2":
return 3;
case "precert_sct_v2":
return 4;
case "signed_tree_head_v2":
return 5;
case "consistency_proof_v2":
return 6;
case "inclusion_proof_v2":
return 7;
default:
throw new Error(`Invalid constant name for TransItem class: ${name}`);
}
}
//**********************************************************************************
/**
* Convert SeqStream data into current class
* @param {!SeqStream} stream
*/
fromStream(stream) {
this.type = stream.getUint16();
switch (this.type) {
case TransItem.constants("x509_entry_v2"):
case TransItem.constants("precert_entry_v2"):
this.data = new _TimestampedCertificateEntryDataV2.default({ stream });
break;
case TransItem.constants("x509_sct_v2"):
case TransItem.constants("precert_sct_v2"):
this.data = new _SignedCertificateTimestampDataV2.default({ stream });
break;
case TransItem.constants("signed_tree_head_v2"):
this.data = new _SignedTreeHeadDataV2.default({ stream });
break;
case TransItem.constants("consistency_proof_v2"):
this.data = new _ConsistencyProofDataV2.default({ stream });
break;
case TransItem.constants("inclusion_proof_v2"):
this.data = new _InclusionProofDataV2.default({ stream });
break;
default:
throw new Error("Object's stream was not correct for TransItem");
}
}
//**********************************************************************************
/**
* Convert current object to SeqStream data
* @param {!SeqStream} stream
* @returns {boolean} Result of the function
*/
toStream(stream) {
stream.appendUint16(this.type);
this.data.toStream(stream);
return true;
}
//**********************************************************************************
/**
* Get hash value for the MerkleTreeLeaf
* @param {String} [hashName=SHA-256] Name of hashing function, default SHA-256
* @return {Promise<ArrayBuffer>}
*/
hash(hashName = "SHA-256") {
var _this = this;
return _asyncToGenerator(function* () {
//region Get a "crypto" extension
const crypto = (0, _pkijs.getCrypto)();
if (typeof crypto === "undefined") throw new Error("Unable to create WebCrypto object");
//endregion
const prefixedBuffer = (0, _pvutils.utilConcatBuf)(new Uint8Array([0x00]).buffer, _this.buffer);
return yield crypto.digest({ name: hashName }, prefixedBuffer);
})();
}
//**********************************************************************************
}
exports.default = TransItem; //**************************************************************************************
//# sourceMappingURL=TransItem.js.map