crypto-conditions
Version:
Implementation of crypto-conditions in JavaScript
58 lines (45 loc) • 1.72 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _crypto = require("crypto");
var Mgf1 = /*#__PURE__*/function () {
function Mgf1(opts) {
(0, _classCallCheck2.default)(this, Mgf1);
opts = opts || {};
this.hashAlgorithm = opts.hashAlgorithm || 'sha256';
this.hashLength = (0, _crypto.createHash)(this.hashAlgorithm).digest().length;
this.saltLength = this.hashLength;
}
/**
* Generate MGF1 full domain hash.
*
* Implementation of RFC 3447, section B.2.1.
*
* @param {Buffer} seed Seed from which mask is generated.
* @param {Number} maskLength Intended length of the mask in bytes.
* @return {Buffer} Mask
*/
(0, _createClass2.default)(Mgf1, [{
key: "generate",
value: function generate(seed, maskLength) {
var result = Buffer.alloc(maskLength);
var len = Math.ceil(maskLength / this.hashLength);
for (var i = 0; i < len; i++) {
var counter = Buffer.alloc(4);
counter.writeInt32BE(i, 0);
var hash = (0, _crypto.createHash)(this.hashAlgorithm).update(seed).update(counter).digest();
hash.copy(result, i * this.hashLength);
}
return result;
}
}]);
return Mgf1;
}();
var _default = Mgf1;
exports.default = _default;