UNPKG

gnablib

Version:

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

2 lines 10 kB
/*! Copyright 2023-2026 the gnablib contributors MPL-1.1 */ var t,s,i,e,r,o,h,a,f=this&&this.__classPrivateFieldSet||function(t,s,i,e,r){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof s?t!==s||!r:!s.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?r.call(t,i):r?r.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{U32 as c}from"../../primitive/number/U32Static.js";import{asBE as m}from"../../endian/platform.js";import{U64 as l,U64MutArray as b}from"../../primitive/number/U64.js";const d=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],u=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428],_=[2352822216,424955298,1944164710,2312950998,502970286,855612546,1738396948,1479516111,258812777,2077511080,2011393907,79989058,1067287976,1780299464,286451373,2446758561],y=[573645204,4230739756,2673172387,3360449730,596883563,1867755857,2520282905,1497426621,2519219938,2827943907,3193839141,1401305490,721525244,746961066,246885852,2177182882],S=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];class w{constructor(r,o){this.blockSize=64,t.set(this,new Uint32Array(8)),s.set(this,new Uint8Array(64)),i.set(this,new Uint32Array(n(this,s,"f").buffer)),this._ingestBytes=0,this._bPos=0,e.set(this,void 0),this.size=r,f(this,e,o,"f"),this.reset()}hash(){const e=new Uint32Array(64);m.i32(n(this,s,"f"),0,16),e.set(n(this,i,"f"));let r=16;for(;r<e.length;r++){const t=e[r-15],s=e[r-2],i=c.rRot(t,7)^c.rRot(t,18)^t>>>3,o=c.rRot(s,17)^c.rRot(s,19)^s>>>10;e[r]=e[r-16]+i+e[r-7]+o}let o=n(this,t,"f")[0],h=n(this,t,"f")[1],a=n(this,t,"f")[2],f=n(this,t,"f")[3],l=n(this,t,"f")[4],b=n(this,t,"f")[5],d=n(this,t,"f")[6],u=n(this,t,"f")[7];for(r=0;r<e.length;r++){const t=u+(c.rRot(l,6)^c.rRot(l,11)^c.rRot(l,25))+(d^l&(b^d))+S[2*r]+e[r],s=(o^h)&a^o&h;u=d,d=b,b=l,l=f+t,f=a,a=h,h=o,o=t+((c.rRot(o,2)^c.rRot(o,13)^c.rRot(o,22))+s)}n(this,t,"f")[0]+=o,n(this,t,"f")[1]+=h,n(this,t,"f")[2]+=a,n(this,t,"f")[3]+=f,n(this,t,"f")[4]+=l,n(this,t,"f")[5]+=b,n(this,t,"f")[6]+=d,n(this,t,"f")[7]+=u,this._bPos=0}write(t){this._ingestBytes+=t.length;let i=t.length,e=0,r=this.blockSize-this._bPos;for(;i>0;){if(r>i)return n(this,s,"f").set(t.subarray(e),this._bPos),void(this._bPos+=i);n(this,s,"f").set(t.subarray(e,e+this.blockSize),this._bPos),this._bPos+=r,this.hash(),e+=r,i-=r,r=this.blockSize}}sum(){return this.clone().sumIn()}sumIn(){n(this,s,"f")[this._bPos]=128,this._bPos++;const e=this.blockSize-8;this._bPos>e&&(n(this,s,"f").fill(0,this._bPos),this.hash()),n(this,s,"f").fill(0,this._bPos);const r=e>>2;n(this,i,"f")[r]=this._ingestBytes/536870912,n(this,i,"f")[r+1]=this._ingestBytes<<3,m.i32(n(this,s,"f"),e),m.i32(n(this,s,"f"),e+4),this.hash();const o=new Uint8Array(n(this,t,"f").buffer,n(this,t,"f").byteOffset);for(let t=0;t<this.size;t++)m.i32(o,4*t);return o.slice(0,this.size)}reset(){n(this,e,"f").call(this,n(this,t,"f")),this._ingestBytes=0,this._bPos=0}newEmpty(){return new w(this.size,n(this,e,"f"))}clone(){const i=new w(this.size,n(this,e,"f"));return n(i,t,"f").set(n(this,t,"f")),n(i,s,"f").set(n(this,s,"f")),i._ingestBytes=this._ingestBytes,i._bPos=this._bPos,i}}t=new WeakMap,s=new WeakMap,i=new WeakMap,e=new WeakMap;class g{constructor(t,s){this.blockSize=128,r.set(this,b.fromLen(8)),o.set(this,new Uint8Array(128)),h.set(this,new Uint32Array(n(this,o,"f").buffer)),this._ingestBytes=0,this._bPos=0,a.set(this,void 0),this.size=t,f(this,a,s,"f"),this.reset()}hash(){const t=new Uint8Array(640),s=b.fromBytes(t.buffer);t.set(n(this,o,"f").subarray(0,128)),m.i64(t,0,16);let i=16;for(;i<80;i++){const t=s.at(i-15),e=s.at(i-2),r=t.mut().rRotEq(1).xorEq(t.rRot(8)).xorEq(t.rShift(7)),o=e.mut().rRotEq(19).xorEq(e.rRot(61)).xorEq(e.rShift(6));s.at(i).set(s.at(i-16)).addEq(r).addEq(s.at(i-7)).addEq(o)}let e=n(this,r,"f").at(0),h=n(this,r,"f").at(1),a=n(this,r,"f").at(2),f=n(this,r,"f").at(3),c=n(this,r,"f").at(4),d=n(this,r,"f").at(5),u=n(this,r,"f").at(6),_=n(this,r,"f").at(7);for(i=0;i<80;i++){const t=l.fromI32s(S[2*i+1],S[2*i]),r=c.mut().rRotEq(14).xorEq(c.rRot(18)).xorEq(c.rRot(41)),o=u.xor(c.and(d.xor(u))),n=_.mut().addEq(r).addEq(o).addEq(t).addEq(s.at(i)),m=e.rRot(28).xor(e.rRot(34)).xor(e.rRot(39)),b=e.xor(h).and(a).xor(e.and(h)),y=m.add(b);_=u,u=d,d=c,c=f.mut().addEq(n),f=a,a=h,h=e,e=n.addEq(y)}n(this,r,"f").at(0).addEq(e),n(this,r,"f").at(1).addEq(h),n(this,r,"f").at(2).addEq(a),n(this,r,"f").at(3).addEq(f),n(this,r,"f").at(4).addEq(c),n(this,r,"f").at(5).addEq(d),n(this,r,"f").at(6).addEq(u),n(this,r,"f").at(7).addEq(_),this._bPos=0}write(t){this._ingestBytes+=t.length;let s=t.length,i=0,e=this.blockSize-this._bPos;for(;s>0;){if(e>s)return n(this,o,"f").set(t.subarray(i),this._bPos),void(this._bPos+=s);n(this,o,"f").set(t.subarray(i,i+this.blockSize),this._bPos),this._bPos+=e,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;return this._bPos>t&&(n(this,o,"f").fill(0,this._bPos),this.hash()),n(this,o,"f").fill(0,this._bPos),n(this,h,"f")[(t+8)/4]=this._ingestBytes/536870912,n(this,h,"f")[(t+12)/4]=this._ingestBytes<<3,m.i32(n(this,o,"f"),t+8,2),this.hash(),n(this,r,"f").toBytesBE().subarray(0,this.size)}reset(){n(this,a,"f").call(this,n(this,r,"f")),this._ingestBytes=0,this._bPos=0}newEmpty(){return new g(this.size,n(this,a,"f"))}clone(){const t=new g(this.size,n(this,a,"f"));for(let s=0;s<8;s++)n(t,r,"f").at(s).set(n(this,r,"f").at(s));return n(t,o,"f").set(n(this,o,"f")),t._ingestBytes=this._ingestBytes,t._bPos=this._bPos,t}}r=new WeakMap,o=new WeakMap,h=new WeakMap,a=new WeakMap;export class Sha224 extends w{constructor(){super(28,Sha224.iv)}static iv(t){t[0]=u[1],t[1]=u[3],t[2]=u[5],t[3]=u[7],t[4]=u[9],t[5]=u[11],t[6]=u[13],t[7]=u[15]}get[Symbol.toStringTag](){return"SHA224"}}export class Sha256 extends w{constructor(){super(32,Sha256.iv)}static iv(t){t[0]=d[0],t[1]=d[2],t[2]=d[4],t[3]=d[6],t[4]=d[8],t[5]=d[10],t[6]=d[12],t[7]=d[14]}get[Symbol.toStringTag](){return"SHA256"}}export class Sha384 extends g{constructor(){super(48,Sha384.iv)}static iv(t){t.at(0).set(l.fromI32s(u[1],u[0])),t.at(1).set(l.fromI32s(u[3],u[2])),t.at(2).set(l.fromI32s(u[5],u[4])),t.at(3).set(l.fromI32s(u[7],u[6])),t.at(4).set(l.fromI32s(u[9],u[8])),t.at(5).set(l.fromI32s(u[11],u[10])),t.at(6).set(l.fromI32s(u[13],u[12])),t.at(7).set(l.fromI32s(u[15],u[14]))}get[Symbol.toStringTag](){return"SHA384"}}export class Sha512 extends g{constructor(){super(64,Sha512.iv)}static iv(t){t.at(0).set(l.fromI32s(d[1],d[0])),t.at(1).set(l.fromI32s(d[3],d[2])),t.at(2).set(l.fromI32s(d[5],d[4])),t.at(3).set(l.fromI32s(d[7],d[6])),t.at(4).set(l.fromI32s(d[9],d[8])),t.at(5).set(l.fromI32s(d[11],d[10])),t.at(6).set(l.fromI32s(d[13],d[12])),t.at(7).set(l.fromI32s(d[15],d[14]))}get[Symbol.toStringTag](){return"SHA512"}}export class Sha512_224 extends g{constructor(){super(28,Sha512_224.iv)}static iv(t){t.at(0).set(l.fromI32s(_[1],_[0])),t.at(1).set(l.fromI32s(_[3],_[2])),t.at(2).set(l.fromI32s(_[5],_[4])),t.at(3).set(l.fromI32s(_[7],_[6])),t.at(4).set(l.fromI32s(_[9],_[8])),t.at(5).set(l.fromI32s(_[11],_[10])),t.at(6).set(l.fromI32s(_[13],_[12])),t.at(7).set(l.fromI32s(_[15],_[14]))}get[Symbol.toStringTag](){return"SHA512/224"}}export class Sha512_256 extends g{constructor(){super(32,Sha512_256.iv)}static iv(t){t.at(0).set(l.fromI32s(y[1],y[0])),t.at(1).set(l.fromI32s(y[3],y[2])),t.at(2).set(l.fromI32s(y[5],y[4])),t.at(3).set(l.fromI32s(y[7],y[6])),t.at(4).set(l.fromI32s(y[9],y[8])),t.at(5).set(l.fromI32s(y[11],y[10])),t.at(6).set(l.fromI32s(y[13],y[12])),t.at(7).set(l.fromI32s(y[15],y[14]))}get[Symbol.toStringTag](){return"SHA512/256"}}