@gandlaf21/bc-ur
Version:
A JS implementation of the Uniform Resources (UR) specification from Blockchain Commons
56 lines • 2.82 kB
JavaScript
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
import { sha256Hash } from "./utils";
import BigNumber from 'bignumber.js';
import JSBI from 'jsbi';
var MAX_UINT64 = 0xFFFFFFFFFFFFFFFF;
var rotl = function (x, k) { return JSBI.bitwiseXor(JSBI.asUintN(64, JSBI.leftShift(x, JSBI.BigInt(k))), JSBI.BigInt(JSBI.asUintN(64, JSBI.signedRightShift(x, (JSBI.subtract(JSBI.BigInt(64), JSBI.BigInt(k))))))); };
var Xoshiro = /** @class */ (function () {
function Xoshiro(seed) {
var _this = this;
this.next = function () {
return new BigNumber(_this.roll().toString());
};
this.nextDouble = function () {
return new BigNumber(_this.roll().toString()).div(MAX_UINT64 + 1);
};
this.nextInt = function (low, high) {
return Math.floor((_this.nextDouble().toNumber() * (high - low + 1)) + low);
};
this.nextByte = function () { return _this.nextInt(0, 255); };
this.nextData = function (count) { return (__spreadArrays(new Array(count)).map(function () { return _this.nextByte(); })); };
var digest = sha256Hash(seed);
this.s = [JSBI.BigInt(0), JSBI.BigInt(0), JSBI.BigInt(0), JSBI.BigInt(0)];
this.setS(digest);
}
Xoshiro.prototype.setS = function (digest) {
for (var i = 0; i < 4; i++) {
var o = i * 8;
var v = JSBI.BigInt(0);
for (var n = 0; n < 8; n++) {
v = JSBI.asUintN(64, JSBI.leftShift(v, JSBI.BigInt(8)));
v = JSBI.asUintN(64, JSBI.bitwiseOr(v, JSBI.BigInt(digest[o + n])));
}
this.s[i] = JSBI.asUintN(64, v);
}
};
Xoshiro.prototype.roll = function () {
var result = JSBI.asUintN(64, JSBI.multiply(rotl(JSBI.asUintN(64, JSBI.multiply(this.s[1], JSBI.BigInt(5))), 7), JSBI.BigInt(9)));
var t = JSBI.asUintN(64, JSBI.leftShift(this.s[1], JSBI.BigInt(17)));
this.s[2] = JSBI.asUintN(64, JSBI.bitwiseXor(this.s[2], JSBI.BigInt(this.s[0])));
this.s[3] = JSBI.asUintN(64, JSBI.bitwiseXor(this.s[3], JSBI.BigInt(this.s[1])));
this.s[1] = JSBI.asUintN(64, JSBI.bitwiseXor(this.s[1], JSBI.BigInt(this.s[2])));
this.s[0] = JSBI.asUintN(64, JSBI.bitwiseXor(this.s[0], JSBI.BigInt(this.s[3])));
this.s[2] = JSBI.asUintN(64, JSBI.bitwiseXor(this.s[2], JSBI.BigInt(t)));
this.s[3] = JSBI.asUintN(64, rotl(this.s[3], 45));
return result;
};
return Xoshiro;
}());
export default Xoshiro;
//# sourceMappingURL=xoshiro.js.map