gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 12.5 kB
JavaScript
/*! Copyright 2023-2026 the gnablib contributors MPL-1.1 */
var t,s,e,r=this&&this.__classPrivateFieldSet||function(t,s,e,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof s?t!==s||!o:!s.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(t,e):o?o.value=e:s.set(t,e),e},o=this&&this.__classPrivateFieldGet||function(t,s,e,r){if("a"===e&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof s?t!==s||!r:!s.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?r:"a"===e?r.call(t):r?r.value:s.get(t)};import{utf8 as i}from"../../codec/Utf8.js";import{sNum as n}from"../../safe/safe.js";import{U64 as a,U64Mut as h,U64MutArray as c}from"../../primitive/number/U64.js";import{asLE as u}from"../../endian/platform.js";const l=[0,1,0,32898,2147483648,32906,2147483648,2147516416,0,32907,0,2147483649,2147483648,2147516545,2147483648,32777,0,138,0,136,0,2147516425,0,2147483658,0,2147516555,2147483648,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,0,32778,2147483648,2147483658,2147483648,2147516545,2147483648,32896,0,2147483649,2147483648,2147516424],p=[1,3,6,10,15,21,28,36,45,55,2,14,27,41,56,8,25,43,62,18,39,61,20,44],g=[10,7,11,17,18,3,5,16,8,21,24,4,15,23,19,13,12,2,20,14,22,9,6,1],b=200,S=16,f=32,x=168,m=136;class k{get size(){return this._size}constructor(s,e,o=0,i=0){this.state=new Uint8Array(b),t.set(this,void 0),this.bPos=0,n("capacityBytes",o).unsigned().atMost(100).throwNot(),o<=0&&(o=e),o*=2,this.suffix=s,r(this,t,i,"f"),this._size=e,this.blockSize=b-o,this.block=new Uint8Array(b)}hash(){const s=this.block.slice();u.i64(s,0,25);const e=c.fromBytes(s.buffer),r=c.fromLen(5),i=h.fromI32s(0,0);for(let s=o(this,t,"f");s<24;s++){r.at(0).set(e.at(0)).xorEq(e.at(5)).xorEq(e.at(10)).xorEq(e.at(15)).xorEq(e.at(20)),r.at(1).set(e.at(1)).xorEq(e.at(6)).xorEq(e.at(11)).xorEq(e.at(16)).xorEq(e.at(21)),r.at(2).set(e.at(2)).xorEq(e.at(7)).xorEq(e.at(12)).xorEq(e.at(17)).xorEq(e.at(22)),r.at(3).set(e.at(3)).xorEq(e.at(8)).xorEq(e.at(13)).xorEq(e.at(18)).xorEq(e.at(23)),r.at(4).set(e.at(4)).xorEq(e.at(9)).xorEq(e.at(14)).xorEq(e.at(19)).xorEq(e.at(24));for(let t=0;t<5;t++)i.set(r.at((t+4)%5)).xorEq(r.at((t+1)%5).lRot(1)),e.at(t).xorEq(i),e.at(t+5).xorEq(i),e.at(t+10).xorEq(i),e.at(t+15).xorEq(i),e.at(t+20).xorEq(i);i.set(e.at(1));for(let t=0;t<24;t++){const s=g[t];r.at(0).set(e.at(s)),e.at(s).set(i.lRotEq(p[t])),i.set(r.at(0))}for(let t=0;t<25;t+=5)r.at(0).set(e.at(t)),r.at(1).set(e.at(t+1)),r.at(2).set(e.at(t+2)),r.at(3).set(e.at(t+3)),r.at(4).set(e.at(t+4)),e.at(t).xorEq(r.at(2).and(r.at(1).not())),e.at(t+1).xorEq(r.at(3).and(r.at(2).not())),e.at(t+2).xorEq(r.at(4).and(r.at(3).not())),e.at(t+3).xorEq(r.at(0).and(r.at(4).not())),e.at(t+4).xorEq(r.at(1).and(r.at(0).not()));e.at(0).xorEq(a.fromI32s(l[2*s+1],l[2*s]))}u.i64(s,0,25),this.block.set(s),this.bPos=0}write(t){for(let s=0;s<t.length;s++)this.block[this.bPos++]^=t[s],this.bPos===this.blockSize&&(this.hash(),this.bPos=0)}sum(){return this.clone().sumIn()}sumIn(){this.xorSuffix(),this.block[this.blockSize-1]^=128,this.hash();const t=new Uint8Array(this.size);let s=this.size,e=0;for(;s>this.blockSize;)t.set(this.block.slice(0,this.blockSize),e),e+=this.blockSize,s-=this.blockSize,this.hash();return t.set(this.block.slice(0,s),e),t}xorSuffix(){this.block[this.bPos]^=this.suffix}reset(){this.state.fill(0),this.block.fill(0),this.bPos=0}newEmpty(){return new k(this.suffix,this.size,(b-this.blockSize)/2,o(this,t,"f"))}clone(){const s=new k(this.suffix,this.size,(b-this.blockSize)/2,o(this,t,"f"));return s.state.set(this.state),s.block.set(this.block),s.bPos=this.bPos,s}_cloneHelp(t){t.state.set(this.state),t.block.set(this.block),t.bPos=this.bPos}}t=new WeakMap;export class Keccak extends k{constructor(t,s=0){super(1,t,s)}get[Symbol.toStringTag](){return"Keccak"}}export class Keccak224 extends k{constructor(t=0){super(1,28,t)}get[Symbol.toStringTag](){return"Keccak[224]"}}export class Keccak256 extends k{constructor(t=0){super(1,32,t)}get[Symbol.toStringTag](){return"Keccak[256]"}}export class Keccak384 extends k{constructor(t=0){super(1,48,t)}get[Symbol.toStringTag](){return"Keccak[384]"}}export class Keccak512 extends k{constructor(t=0){super(1,64,t)}get[Symbol.toStringTag](){return"Keccak[512]"}}export class Sha3_224 extends k{constructor(){super(6,28)}get[Symbol.toStringTag](){return"SHA3-224"}}export class Sha3_256 extends k{constructor(){super(6,32)}get[Symbol.toStringTag](){return"SHA3-256"}}export class Sha3_384 extends k{constructor(){super(6,48)}get[Symbol.toStringTag](){return"SHA3-384"}}export class Sha3_512 extends k{constructor(){super(6,64)}get[Symbol.toStringTag](){return"SHA3-512"}}export class Shake128 extends k{constructor(t){super(31,t,16)}get[Symbol.toStringTag](){return"SHAKE128"}}export class Shake256 extends k{constructor(t){super(31,t,32)}get[Symbol.toStringTag](){return"SHAKE256"}}function w(t){const s=new Uint8Array(7);let e=6;do{s[e--]=t,t=Math.floor(t/256)}while(t>0);return s[e]=6-e,s.subarray(e)}function _(t){const s=new Uint8Array(7);let e=5;do{s[e--]=t,t=Math.floor(t/256)}while(t>0);return s[6]=5-e,s.subarray(e+1)}function y(t){const s=null==t?new Uint8Array(0):t instanceof Uint8Array?t:i.toBytes(t),e=w(s.length<<3),r=new Uint8Array(e.length+s.length);return r.set(e),r.set(s,e.length),r}function d(t,...s){n("w",t).natural().throwNot();const e=w(t);let r=0;for(let t=0;t<s.length;t++)r+=s[t].length;let o=t;for(;o<r;)o+=t;const i=new Uint8Array(o);i.set(e);let a=e.length;for(let t=0;t<s.length;t++)i.set(s[t],a),a+=s[t].length;return i}class z{constructor(t,s,e,r="",o){this.cap=t,this.pad=s,this.functionName=r,0!=r.length||o&&0!=o.length?(this._keccak=new k(4,e,t),this.customization=null==o?new Uint8Array(0):o instanceof Uint8Array?o:i.toBytes(o),this._keccak.write(d(this.pad,y(this.functionName),y(this.customization)))):(this._keccak=new k(31,e,t),this.customization=new Uint8Array(0))}write(t){this._keccak.write(t)}sum(){return this.clone().sumIn()}sumIn(){return this._keccak.sumIn()}reset(){this._keccak.reset(),4===this._keccak.suffix&&this._keccak.write(d(this.pad,y(this.functionName),y(this.customization)))}newEmpty(){return new z(this.cap,this.pad,this.size,this.functionName,this.customization)}clone(){const t=new z(this.cap,this.pad,this.size,this.functionName,this.customization);return this._cloneHelp(t),t}_cloneHelp(t){t._keccak=this._keccak.clone()}get size(){return this._keccak.size}get blockSize(){return this._keccak.blockSize}}export class CShake128 extends z{constructor(t,s="",e){super(S,x,t,s,e)}get[Symbol.toStringTag](){return"cSHAKE128"}}export class CShake256 extends z{constructor(t,s="",e=""){super(f,m,t,s,e)}get[Symbol.toStringTag](){return"cSHAKE256"}}class T extends z{constructor(t,s,e,r,o,i){super(s,e,r,"KMAC",i),this.appendSize=t,this.write(d(e,y(o)))}sumIn(){return super.write(_(this.appendSize?this.size<<3:0)),super.sumIn()}clone(){const t=new T(this.appendSize,this.cap,this.pad,this.size,this.functionName,this.customization);return super._cloneHelp(t),t}}export class Kmac128 extends T{constructor(t=32,s,e){super(!0,S,x,t,s,e)}get[Symbol.toStringTag](){return"KMAC128"}}export class Kmac256 extends T{constructor(t=64,s,e){super(!0,f,m,t,s,e)}get[Symbol.toStringTag](){return"KMAC256"}}export class KmacXof128 extends T{constructor(t,s,e){super(!1,S,x,t,s,e)}get[Symbol.toStringTag](){return"KMACXOF128"}}export class KmacXof256 extends T{constructor(t,s,e){super(!1,f,m,t,s,e)}get[Symbol.toStringTag](){return"KMACXOF256"}}class H extends z{constructor(t,s,e,r,o){super(s,e,r,"TupleHash",o),this.appendSize=t}write(t){super.write(y(t))}sumIn(){return super.write(_(this.appendSize?this.size<<3:0)),super.sumIn()}clone(){const t=new H(this.appendSize,this.cap,this.pad,this.size,this.customization);return super._cloneHelp(t),t}}export class TupleHash128 extends H{constructor(t=32,s){super(!0,S,x,t,s)}get[Symbol.toStringTag](){return"TupleHash128"}}export class TupleHash256 extends H{constructor(t=64,s){super(!0,f,m,t,s)}get[Symbol.toStringTag](){return"TupleHash256"}}export class TupleHashXof128 extends H{constructor(t,s){super(!1,S,x,t,s)}get[Symbol.toStringTag](){return"TupleHashXOF128"}}export class TupleHashXof256 extends H{constructor(t,s){super(!1,f,m,t,s)}get[Symbol.toStringTag](){return"TupleHashXOF256"}}class E extends z{constructor(t,e,o,i,n,a){super(e,o,n,"ParallelHash",a),this.appendSize=t,s.set(this,void 0),this._obPos=0,this._obCount=0,r(this,s,new Uint8Array(i),"f"),this._subHash=new z(e,o,n,"",""),super.write(w(i))}write(t){let e=t.length,r=0,i=o(this,s,"f").length-this._obPos;for(;e>0;){if(i>e)return o(this,s,"f").set(t.subarray(r),this._obPos),void(this._obPos+=e);o(this,s,"f").set(t.subarray(r,r+o(this,s,"f").length),this._obPos),this._obPos+=i,this._subHash.reset(),this._subHash.write(o(this,s,"f")),super.write(this._subHash.sum()),this._obPos=0,this._obCount++,r+=i,e-=i,i=o(this,s,"f").length}}sumIn(){return this._obPos>0&&(this._subHash.reset(),this._subHash.write(o(this,s,"f").subarray(0,this._obPos)),super.write(this._subHash.sum())),super.write(_(this._obCount)),super.write(_(this.appendSize?this.size<<3:0)),super.sumIn()}reset(){super.reset(),super.write(w(o(this,s,"f").length)),o(this,s,"f").fill(0),this._obPos=0,this._obCount=0}clone(){const t=new E(this.appendSize,this.cap,this.pad,o(this,s,"f").length,this.size,this.customization);return this._cloneHelp(t),t}_cloneHelp(t){super._cloneHelp(t),o(t,s,"f").set(o(this,s,"f")),t._subHash=this._subHash.clone(),t._obPos=this._obPos,t._obCount=this._obCount}}s=new WeakMap;export class ParallelHash128 extends E{constructor(t,s=32,e){super(!0,S,x,t,s,e)}get[Symbol.toStringTag](){return"ParallelHash128"}}export class ParallelHash256 extends E{constructor(t,s=64,e){super(!0,f,m,t,s,e)}get[Symbol.toStringTag](){return"ParallelHash256"}}export class ParallelHashXof128 extends E{constructor(t,s,e){super(!1,S,x,t,s,e)}get[Symbol.toStringTag](){return"ParallelHashXOF128"}}export class ParallelHashXof256 extends E{constructor(t,s,e){super(!1,f,m,t,s,e)}get[Symbol.toStringTag](){return"ParallelHashXOF256"}}export class TurboShake128 extends k{constructor(t,s=31){super(s,t,16,12)}get[Symbol.toStringTag](){return"TurboSHAKE128"}}export class TurboShake256 extends k{constructor(t,s=31){super(s,t,32,12)}get[Symbol.toStringTag](){return"TurboSHAKE256"}}function P(t){const s=new Uint8Array(7);let e=5;for(;t>0;)s[e--]=t,t=Math.floor(t/256);return s[6]=5-e,s.subarray(e+1)}export class KangarooTwelve extends k{constructor(t,s){super(7,t,16,12),this.maxChunkSize=8192,this._chunks=[],this._ingestBlockBytes=0,this.customization=null==s?new Uint8Array(0):s instanceof Uint8Array?s:i.toBytes(s)}write(t){if(this._ingestBlockBytes+t.length>this.maxChunkSize){const s=this.maxChunkSize-this._ingestBlockBytes;0===this._chunks.length?super.write(t.subarray(0,s)):this._chunks[this._chunks.length-1].write(t.subarray(0,s)),this._chunks[this._chunks.length]=new TurboShake128(32,11),this._ingestBlockBytes=0,this.write(t.subarray(s))}else 0===this._chunks.length?(this._ingestBlockBytes+=t.length,super.write(t)):(this._ingestBlockBytes+=t.length,this._chunks[this._chunks.length-1].write(t))}xorSuffix(){if(this.write(this.customization),this.write(P(this.customization.length)),this._chunks.length>0){super.write(Uint8Array.of(3,0,0,0,0,0,0,0));for(let t=0;t<this._chunks.length;t++)super.write(this._chunks[t].sum());super.write(P(this._chunks.length)),super.write(Uint8Array.of(255,255)),this.block[this.bPos]^=6}else this.block[this.bPos]^=7}clone(){const t=new KangarooTwelve(this.size,this.customization);return this._cloneHelp(t),t}_cloneHelp(t){super._cloneHelp(t),t._chunks=this._chunks,t._ingestBlockBytes=this._ingestBlockBytes}get[Symbol.toStringTag](){return"KangarooTwelve"}}export class HopMac extends KangarooTwelve{constructor(t,s,o){super(32,o),e.set(this,void 0),this._outerSize=t,r(this,e,s instanceof Uint8Array?s:i.toBytes(s),"f")}get size(){return this._outerSize}sumIn(){const t=super.sumIn(),s=new KangarooTwelve(this._outerSize,t);return s.write(o(this,e,"f")),s.sumIn()}clone(){const t=new HopMac(this._outerSize,o(this,e,"f"),this.customization);return this._cloneHelp(t),t}get[(e=new WeakMap,Symbol.toStringTag)](){return"HopMac"}}