UNPKG

@gandlaf21/bc-ur

Version:

A JS implementation of the Uniform Resources (UR) specification from Blockchain Commons

56 lines 2.82 kB
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