UNPKG

js-randomness-predictor

Version:
134 lines (133 loc) 10.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _ChromeRandomnessPredictor_instances, _ChromeRandomnessPredictor_isInitialized, _ChromeRandomnessPredictor_mask, _ChromeRandomnessPredictor_concreteState0, _ChromeRandomnessPredictor_concreteState1, _ChromeRandomnessPredictor_context, _ChromeRandomnessPredictor_solver, _ChromeRandomnessPredictor_seState0, _ChromeRandomnessPredictor_seState1, _ChromeRandomnessPredictor_s0Ref, _ChromeRandomnessPredictor_s1Ref, _ChromeRandomnessPredictor_initialize, _ChromeRandomnessPredictor_xorShift128pSymbolic, _ChromeRandomnessPredictor_xorShift128pConcreteBackwards, _ChromeRandomnessPredictor_recoverMantissa, _ChromeRandomnessPredictor_toDouble; Object.defineProperty(exports, "__esModule", { value: true }); const z3 = __importStar(require("z3-solver")); const errors_js_1 = require("../errors.js"); class ChromeRandomnessPredictor { constructor(sequence) { _ChromeRandomnessPredictor_instances.add(this); _ChromeRandomnessPredictor_isInitialized.set(this, false); _ChromeRandomnessPredictor_mask.set(this, 0xffffffffffffffffn); _ChromeRandomnessPredictor_concreteState0.set(this, void 0); _ChromeRandomnessPredictor_concreteState1.set(this, void 0); _ChromeRandomnessPredictor_context.set(this, void 0); _ChromeRandomnessPredictor_solver.set(this, void 0); _ChromeRandomnessPredictor_seState0.set(this, void 0); _ChromeRandomnessPredictor_seState1.set(this, void 0); _ChromeRandomnessPredictor_s0Ref.set(this, void 0); _ChromeRandomnessPredictor_s1Ref.set(this, void 0); this.sequence = undefined; this.sequence = sequence; } async predictNext() { await __classPrivateFieldGet(this, _ChromeRandomnessPredictor_instances, "m", _ChromeRandomnessPredictor_initialize).call(this); if (__classPrivateFieldGet(this, _ChromeRandomnessPredictor_concreteState0, "f") === undefined || __classPrivateFieldGet(this, _ChromeRandomnessPredictor_concreteState1, "f") === undefined) { throw new Error(`[Chrome Predictor] Concrete states not defined! Something went wrong.`); } return __classPrivateFieldGet(this, _ChromeRandomnessPredictor_instances, "m", _ChromeRandomnessPredictor_toDouble).call(this, __classPrivateFieldGet(this, _ChromeRandomnessPredictor_instances, "m", _ChromeRandomnessPredictor_xorShift128pConcreteBackwards).call(this)); } } _ChromeRandomnessPredictor_isInitialized = new WeakMap(), _ChromeRandomnessPredictor_mask = new WeakMap(), _ChromeRandomnessPredictor_concreteState0 = new WeakMap(), _ChromeRandomnessPredictor_concreteState1 = new WeakMap(), _ChromeRandomnessPredictor_context = new WeakMap(), _ChromeRandomnessPredictor_solver = new WeakMap(), _ChromeRandomnessPredictor_seState0 = new WeakMap(), _ChromeRandomnessPredictor_seState1 = new WeakMap(), _ChromeRandomnessPredictor_s0Ref = new WeakMap(), _ChromeRandomnessPredictor_s1Ref = new WeakMap(), _ChromeRandomnessPredictor_instances = new WeakSet(), _ChromeRandomnessPredictor_initialize = async function _ChromeRandomnessPredictor_initialize() { if (__classPrivateFieldGet(this, _ChromeRandomnessPredictor_isInitialized, "f")) { return true; } try { const { Context } = await z3.init(); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_context, Context("main"), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_solver, new (__classPrivateFieldGet(this, _ChromeRandomnessPredictor_context, "f").Solver)(), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_seState0, __classPrivateFieldGet(this, _ChromeRandomnessPredictor_context, "f").BitVec.const("se_state0", 64), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_seState1, __classPrivateFieldGet(this, _ChromeRandomnessPredictor_context, "f").BitVec.const("se_state1", 64), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_s0Ref, __classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState0, "f"), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_s1Ref, __classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState1, "f"), "f"); const reversedSequence = [...(this.sequence || [])].reverse(); for (const value of reversedSequence) { __classPrivateFieldGet(this, _ChromeRandomnessPredictor_instances, "m", _ChromeRandomnessPredictor_xorShift128pSymbolic).call(this); const mantissa = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_instances, "m", _ChromeRandomnessPredictor_recoverMantissa).call(this, value); const state0Shifted = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_context, "f").BitVec.val(mantissa, 64); __classPrivateFieldGet(this, _ChromeRandomnessPredictor_solver, "f").add(__classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState0, "f").lshr(11).eq(state0Shifted)); } const result = await __classPrivateFieldGet(this, _ChromeRandomnessPredictor_solver, "f").check(); if (result !== "sat") { return Promise.reject(new errors_js_1.UnsatError()); } const model = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_solver, "f").model(); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_concreteState0, model.get(__classPrivateFieldGet(this, _ChromeRandomnessPredictor_s0Ref, "f")).value(), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_concreteState1, model.get(__classPrivateFieldGet(this, _ChromeRandomnessPredictor_s1Ref, "f")).value(), "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_isInitialized, true, "f"); return true; } catch (e) { return Promise.reject(e); } }, _ChromeRandomnessPredictor_xorShift128pSymbolic = function _ChromeRandomnessPredictor_xorShift128pSymbolic() { if (!__classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState0, "f") || !__classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState1, "f")) { throw new Error("[Chrome Predictor] Symbolic states not initialized"); } const se_s1 = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState0, "f"); const se_s0 = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_seState1, "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_seState0, se_s0, "f"); let newS1 = se_s1.xor(se_s1.shl(23)); newS1 = newS1.xor(newS1.lshr(17)); newS1 = newS1.xor(se_s0); newS1 = newS1.xor(se_s0.lshr(26)); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_seState1, newS1, "f"); }, _ChromeRandomnessPredictor_xorShift128pConcreteBackwards = function _ChromeRandomnessPredictor_xorShift128pConcreteBackwards() { const result = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_concreteState0, "f"); let ps1 = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_concreteState0, "f"); let ps0 = __classPrivateFieldGet(this, _ChromeRandomnessPredictor_concreteState1, "f") ^ (ps1 >> 26n); ps0 ^= ps1; ps0 = (ps0 ^ (ps0 >> 17n) ^ (ps0 >> 34n) ^ (ps0 >> 51n)) & __classPrivateFieldGet(this, _ChromeRandomnessPredictor_mask, "f"); ps0 = (ps0 ^ (ps0 << 23n) ^ (ps0 << 46n)) & __classPrivateFieldGet(this, _ChromeRandomnessPredictor_mask, "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_concreteState0, ps0, "f"); __classPrivateFieldSet(this, _ChromeRandomnessPredictor_concreteState1, ps1, "f"); return result; }, _ChromeRandomnessPredictor_recoverMantissa = function _ChromeRandomnessPredictor_recoverMantissa(double) { return BigInt(Math.floor(double * Number(1n << 53n))); }, _ChromeRandomnessPredictor_toDouble = function _ChromeRandomnessPredictor_toDouble(val) { return Number(val >> 11n) / Math.pow(2, 53); }; exports.default = ChromeRandomnessPredictor;