UNPKG

gnablib

Version:

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

2 lines 8.67 kB
/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */ var t,s,i,e,h,r,o,a,f=this&&this.__classPrivateFieldSet||function(t,s,i,e,h){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!h)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof s?t!==s||!h:!s.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?h.call(t,i):h?h.value=i:s.set(t,i),i},n=this&&this.__classPrivateFieldGet||function(t,s,i,e){if("a"===i&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof s?t!==s||!e:!s.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?e:"a"===i?e.call(t):e?e.value:s.get(t)};import{asBE as l}from"../../endian/platform.js";import{U32 as c}from"../../primitive/number/U32Static.js";import{U64Mut as _,U64MutArray as b}from"../../primitive/number/U64.js";import{sLen as E}from"../../safe/safe.js";const m=16,u=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],q=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731,3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113],x=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],[11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4],[7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8],[9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13],[2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9],[12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11],[13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10],[6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5],[10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]];class g{constructor(h,r=10){this.size=32,this.blockSize=64,t.set(this,void 0),s.set(this,new Uint32Array(8)),i.set(this,new Uint8Array(64)),e.set(this,new Uint32Array(n(this,i,"f").buffer)),this._ingestBytes=0,this._bPos=0,h&&0!==h.length?(E("salt",h).exactly(4).throwNot(),f(this,t,h,"f")):f(this,t,new Uint32Array(4),"f"),this._nr=r,this.reset()}g(t,s,i,h,r,o){const a=3&t,f=t<<1,l=o[f],_=o[f+1],b=q[l],E=q[_],m=n(this,e,"f")[l],u=n(this,e,"f")[_];r[a]+=r[s]+(m^E),r[h]=c.rRot(r[h]^r[a],16),r[i]+=r[h],r[s]=c.rRot(r[s]^r[i],12),r[a]+=r[s]+(u^b),r[h]=c.rRot(r[h]^r[a],8),r[i]+=r[h],r[s]=c.rRot(r[s]^r[i],7)}hash(e){const h=(e=null!=e?e:this._ingestBytes)<<3,r=e/536870912|0,o=new Uint32Array(m);o.set(n(this,s,"f")),o[8]=q[0]^n(this,t,"f")[0],o[9]=q[1]^n(this,t,"f")[1],o[10]=q[2]^n(this,t,"f")[2],o[11]=q[3]^n(this,t,"f")[3],o[12]=q[4]^h,o[13]=q[5]^h,o[14]=q[6]^r,o[15]=q[7]^r;for(let t=0;t<64;t+=4)l.i32(n(this,i,"f"),t);for(let t=0;t<this._nr;t++){const s=x[t%10];this.g(0,4,8,12,o,s),this.g(1,5,9,13,o,s),this.g(2,6,10,14,o,s),this.g(3,7,11,15,o,s),this.g(4,5,10,15,o,s),this.g(5,6,11,12,o,s),this.g(6,7,8,13,o,s),this.g(7,4,9,14,o,s)}n(this,s,"f")[0]^=n(this,t,"f")[0]^o[0]^o[8],n(this,s,"f")[1]^=n(this,t,"f")[1]^o[1]^o[9],n(this,s,"f")[2]^=n(this,t,"f")[2]^o[2]^o[10],n(this,s,"f")[3]^=n(this,t,"f")[3]^o[3]^o[11],n(this,s,"f")[4]^=n(this,t,"f")[0]^o[4]^o[12],n(this,s,"f")[5]^=n(this,t,"f")[1]^o[5]^o[13],n(this,s,"f")[6]^=n(this,t,"f")[2]^o[6]^o[14],n(this,s,"f")[7]^=n(this,t,"f")[3]^o[7]^o[15],this._bPos=0}write(t){let s=t.length,e=0,h=this.blockSize-this._bPos;for(;s>0;){if(h>s){const h=t.subarray(e);return n(this,i,"f").set(h,this._bPos),this._bPos+=s,void(this._ingestBytes+=h.length)}n(this,i,"f").set(t.subarray(e,e+this.blockSize),this._bPos),this._ingestBytes+=this.blockSize,this.hash(),e+=h,s-=h,h=this.blockSize}}sum(){return this.clone().sumIn()}sumIn(){n(this,i,"f")[this._bPos]=128,this._bPos++;const t=this.blockSize-8;let h;this._bPos>t&&(n(this,i,"f").fill(0,this._bPos),this.hash(),h=0),n(this,i,"f").fill(0,this._bPos),n(this,i,"f")[t-1]|=1;const r=t>>2;n(this,e,"f")[r]=this._ingestBytes/536870912,n(this,e,"f")[r+1]=this._ingestBytes<<3,l.i32(n(this,i,"f"),t),l.i32(n(this,i,"f"),t+4),this.hash(h);const o=new Uint8Array(n(this,s,"f").buffer,n(this,s,"f").byteOffset);for(let t=0;t<this.size;t++)l.i32(o,4*t);return o.slice(0,this.size)}reset(){n(this,s,"f")[0]=u[0],n(this,s,"f")[1]=u[2],n(this,s,"f")[2]=u[4],n(this,s,"f")[3]=u[6],n(this,s,"f")[4]=u[8],n(this,s,"f")[5]=u[10],n(this,s,"f")[6]=u[12],n(this,s,"f")[7]=u[14],this._ingestBytes=0,this._bPos=0}newEmpty(){return new g(n(this,t,"f"),this._nr)}clone(){const e=new g(n(this,t,"f"),this._nr);return n(e,s,"f").set(n(this,s,"f")),n(e,i,"f").set(n(this,i,"f")),e._ingestBytes=this._ingestBytes,e._bPos=this._bPos,e}}t=new WeakMap,s=new WeakMap,i=new WeakMap,e=new WeakMap;class w{constructor(t,s=14){this.size=64,this.blockSize=128,h.set(this,void 0),r.set(this,b.fromLen(8)),o.set(this,new Uint8Array(128)),a.set(this,b.fromBytes(n(this,o,"f").buffer)),this._ingestBytes=0,this._bPos=0,t?(E("salt",t).exactly(4).throwNot(),f(this,h,t,"f")):f(this,h,b.fromLen(4),"f"),this._nr=s,this.reset()}g(t,s,i,e,h,r){const o=3&t,f=t<<1,l=r[f],c=r[f+1],b=_.fromI32s(q[2*l+1],q[2*l]),E=_.fromI32s(q[2*c+1],q[2*c]),m=n(this,a,"f").at(l),u=n(this,a,"f").at(c);h.at(o).addEq(h.at(s)).addEq(E.xorEq(m)),h.at(e).xorEq(h.at(o)).rRotEq(32),h.at(i).addEq(h.at(e)),h.at(s).xorEq(h.at(i)).rRotEq(25),h.at(o).addEq(h.at(s)).addEq(b.xorEq(u)),h.at(e).xorEq(h.at(o)).rRotEq(16),h.at(i).addEq(h.at(e)),h.at(s).xorEq(h.at(i)).rRotEq(11)}hash(t){t=null!=t?t:this._ingestBytes;const s=_.fromI32s(t<<3,t/536870912),i=b.fromLen(16);i.set(n(this,r,"f")),i.at(8).set(_.fromI32s(q[1],q[0]).xorEq(n(this,h,"f").at(0))),i.at(9).set(_.fromI32s(q[3],q[2]).xorEq(n(this,h,"f").at(1))),i.at(10).set(_.fromI32s(q[5],q[4]).xorEq(n(this,h,"f").at(2))),i.at(11).set(_.fromI32s(q[7],q[6]).xorEq(n(this,h,"f").at(3))),i.at(12).set(_.fromI32s(q[9],q[8]).xorEq(s)),i.at(13).set(_.fromI32s(q[11],q[10]).xorEq(s)),i.at(14).set(_.fromI32s(q[13],q[12])),i.at(15).set(_.fromI32s(q[15],q[14]));for(let t=0;t<n(this,o,"f").length;t+=8)l.i64(n(this,o,"f"),t);for(let t=0;t<this._nr;t++){const s=x[t%10];this.g(0,4,8,12,i,s),this.g(1,5,9,13,i,s),this.g(2,6,10,14,i,s),this.g(3,7,11,15,i,s),this.g(4,5,10,15,i,s),this.g(5,6,11,12,i,s),this.g(6,7,8,13,i,s),this.g(7,4,9,14,i,s)}n(this,r,"f").at(0).xorEq(n(this,h,"f").at(0)).xorEq(i.at(0)).xorEq(i.at(8)),n(this,r,"f").at(1).xorEq(n(this,h,"f").at(1)).xorEq(i.at(1)).xorEq(i.at(9)),n(this,r,"f").at(2).xorEq(n(this,h,"f").at(2)).xorEq(i.at(2)).xorEq(i.at(10)),n(this,r,"f").at(3).xorEq(n(this,h,"f").at(3)).xorEq(i.at(3)).xorEq(i.at(11)),n(this,r,"f").at(4).xorEq(n(this,h,"f").at(0)).xorEq(i.at(4)).xorEq(i.at(12)),n(this,r,"f").at(5).xorEq(n(this,h,"f").at(1)).xorEq(i.at(5)).xorEq(i.at(13)),n(this,r,"f").at(6).xorEq(n(this,h,"f").at(2)).xorEq(i.at(6)).xorEq(i.at(14)),n(this,r,"f").at(7).xorEq(n(this,h,"f").at(3)).xorEq(i.at(7)).xorEq(i.at(15)),this._bPos=0}write(t){let s=t.length,i=0,e=this.blockSize-this._bPos;for(;s>0;){if(e>s){const e=t.subarray(i);return n(this,o,"f").set(e,this._bPos),this._bPos+=s,void(this._ingestBytes+=e.length)}n(this,o,"f").set(t.subarray(i,i+this.blockSize),this._bPos),this._ingestBytes+=this.blockSize,this.hash(),i+=e,s-=e,e=this.blockSize}}sum(){return this.clone().sumIn()}sumIn(){n(this,o,"f")[this._bPos]=128,this._bPos++;const t=this.blockSize-16;let s;this._bPos>t&&(n(this,o,"f").fill(0,this._bPos),this.hash(),s=0),n(this,o,"f").fill(0,this._bPos),n(this,o,"f")[t-1]|=1;const i=t>>3;return n(this,a,"f").at(i+1).set(_.fromI32s(this._ingestBytes<<3,this._ingestBytes/536870912)),l.i64(n(this,o,"f"),t+8),this.hash(s),n(this,r,"f").toBytesBE()}reset(){n(this,r,"f").at(0).set(_.fromI32s(u[1],u[0])),n(this,r,"f").at(1).set(_.fromI32s(u[3],u[2])),n(this,r,"f").at(2).set(_.fromI32s(u[5],u[4])),n(this,r,"f").at(3).set(_.fromI32s(u[7],u[6])),n(this,r,"f").at(4).set(_.fromI32s(u[9],u[8])),n(this,r,"f").at(5).set(_.fromI32s(u[11],u[10])),n(this,r,"f").at(6).set(_.fromI32s(u[13],u[12])),n(this,r,"f").at(7).set(_.fromI32s(u[15],u[14])),this._ingestBytes=0,this._bPos=0}newEmpty(){return new w(n(this,h,"f"),this._nr)}clone(){const t=new w(n(this,h,"f"),this._nr);return n(t,r,"f").set(n(this,r,"f")),n(t,o,"f").set(n(this,o,"f")),t._ingestBytes=this._ingestBytes,t._bPos=this._bPos,t}}h=new WeakMap,r=new WeakMap,o=new WeakMap,a=new WeakMap;export class Blake32 extends g{constructor(t){super(t,10)}}export class Blake256 extends g{constructor(t){super(t,14)}}export class Blake64 extends w{constructor(t){super(t,14)}}export class Blake512 extends w{constructor(t){super(t,16)}}