UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

2 lines 1.22 kB
/*! Copyright 2025 the gnablib contributors MPL-1.1 */ import{sLen as t}from"../safe/safe.js";import{APrng32 as s}from"./APrng32.js";export class Arc4 extends s{constructor(){super(...arguments),this._i=0,this._j=0,this.bitGen=8,this.safeBits=8}trueSave(){const t=new Uint8Array(258);return t.set(this._state),t[256]=this._i,t[257]=this._j,t}rawNext(){this._i=this._i+1&255,this._j=this._j+this._state[this._i]&255;const t=this._state[this._i];return this._state[this._i]=this._state[this._j],this._state[this._j]=t,this._state[this._state[this._i]+this._state[this._j]&255]}ksa(t){for(let t=0;t<this._state.length;t++)this._state[t]=t;for(let s=0,e=0;s<this._state.length;s++){e=e+this._state[s]+t[s%t.length]&255;const i=this._state[s];this._state[s]=this._state[e],this._state[e]=i}}get[Symbol.toStringTag](){return"arc4"}static new(t=!1){const s=new Arc4(new Uint8Array(256),t);return s.ksa(Uint8Array.of(146,202,47,14,60,214,227,243,27,20,125,204,76,8,29,191)),s}static seed(s,e=!1){t("key",s).atLeast(1).atMost(256).throwNot();const i=new Arc4(new Uint8Array(256),e);return i.ksa(s),i}static restore(s,e=!1){t("state",s).exactly(258).throwNot();const i=new Arc4(s.slice(0,256),e);return i._i=s[256],i._j=s[257],i}}