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
125 lines (109 loc) • 4.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _pvutils = require("pvutils");
var _pkijs = require("pkijs");
var _TimestampedEntry = require("./TimestampedEntry.js");
var _TimestampedEntry2 = _interopRequireDefault(_TimestampedEntry);
var _BaseClass = require("./BaseClass.js");
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 MerkleTreeLeaf extends _BaseClass.BaseClass {
//**********************************************************************************
/**
* Constructor for MerkleTreeLeaf class
* @param {Object} [parameters={}]
* @property {Object} [schema] asn1js parsed value
*/
constructor(parameters = {}) {
super(parameters);
//region Internal properties of the object
/**
* @type {Number}
* @description version
*/
this.version = (0, _pvutils.getParametersValue)(parameters, "version", MerkleTreeLeaf.constants("version"));
/**
* @type {Number}
* @description leafType
*/
this.leafType = (0, _pvutils.getParametersValue)(parameters, "leafType", MerkleTreeLeaf.constants("leafType"));
/**
* @type {TimestampedEntry}
* @description entry
*/
this.entry = (0, _pvutils.getParametersValue)(parameters, "entry", MerkleTreeLeaf.constants("entry"));
//endregion
//region If input argument array contains "stream" for this object
if ("stream" in parameters) this.fromStream(parameters.stream);
//endregion
}
//**********************************************************************************
/**
* Return value for a constant by name
* @param {string} name String name for a constant
*/
static constants(name) {
switch (name) {
case "version":
return 0;
case "leafType":
return 0;
case "entry":
return new _TimestampedEntry2.default();
default:
throw new Error(`Invalid constant name for MerkleTreeLeaf class: ${name}`);
}
}
//**********************************************************************************
/**
* Convert SeqStream data into current class
* @param {!SeqStream} stream
*/
fromStream(stream) {
// struct {
// Version version;
// MerkleLeafType leaf_type;
// select (leaf_type) {
// case timestamped_entry: TimestampedEntry;
// }
// } MerkleTreeLeaf;
this.version = stream.getBlock(1)[0];
this.leafType = stream.getBlock(1)[0];
this.entry = new _TimestampedEntry2.default({ stream });
}
//**********************************************************************************
/**
* Convert current object to SeqStream data
* @param {!SeqStream} stream
* @returns {boolean} Result of the function
*/
toStream(stream) {
stream.appendChar(this.version);
stream.appendChar(this.leafType);
this.entry.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 = MerkleTreeLeaf; //**************************************************************************************
//# sourceMappingURL=MerkleTreeLeaf.js.map