UNPKG

gnablib

Version:

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

2 lines 11.2 kB
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */ var t,s,e,r=this&&this.__classPrivateFieldSet||function(t,s,e,r,i){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof s?t!==s||!i:!s.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?i.call(t,e):i?i.value=e:s.set(t,e),e},i=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 o}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],f=[10,7,11,17,18,3,5,16,8,21,24,4,15,23,19,13,12,2,20,14,22,9,6,1],x=200,k=16,w=32,_=168,b=136;class d{get size(){return this._size}constructor(s,e,i=0,o=0){this.state=new Uint8Array(x),t.set(this,void 0),this.bPos=0,n("capacityBytes",i).unsigned().atMost(100).throwNot(),i<=0&&(i=e),i*=2,this.suffix=s,r(this,t,o,"f"),this._size=e,this.blockSize=x-i,this.block=new Uint8Array(x)}hash(){const s=this.block.slice();u.i64(s,0,25);const e=c.fromBytes(s.buffer),r=c.fromLen(5),o=h.fromI32s(0,0);for(let s=i(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++)o.set(r.at((t+4)%5)).xorEq(r.at((t+1)%5).lRot(1)),e.at(t).xorEq(o),e.at(t+5).xorEq(o),e.at(t+10).xorEq(o),e.at(t+15).xorEq(o),e.at(t+20).xorEq(o);o.set(e.at(1));for(let t=0;t<24;t++){const s=f[t];r.at(0).set(e.at(s)),e.at(s).set(o.lRotEq(p[t])),o.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 d(this.suffix,this.size,(x-this.blockSize)/2,i(this,t,"f"))}clone(){const s=new d(this.suffix,this.size,(x-this.blockSize)/2,i(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 d{constructor(t,s=0){super(1,t,s)}}export class Keccak224 extends d{constructor(t=0){super(1,28,t)}}export class Keccak256 extends d{constructor(t=0){super(1,32,t)}}export class Keccak384 extends d{constructor(t=0){super(1,48,t)}}export class Keccak512 extends d{constructor(t=0){super(1,64,t)}}export class Sha3_224 extends d{constructor(){super(6,28)}}export class Sha3_256 extends d{constructor(){super(6,32)}}export class Sha3_384 extends d{constructor(){super(6,48)}}export class Sha3_512 extends d{constructor(){super(6,64)}}export class Shake128 extends d{constructor(t){super(31,t,16)}}export class Shake256 extends d{constructor(t){super(31,t,32)}}function m(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 z(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:o.toBytes(t),e=m(s.length<<3),r=new Uint8Array(e.length+s.length);return r.set(e),r.set(s,e.length),r}function g(t,...s){n("w",t).natural().throwNot();const e=m(t);let r=0;for(let t=0;t<s.length;t++)r+=s[t].length;let i=t;for(;i<r;)i+=t;const o=new Uint8Array(i);o.set(e);let a=e.length;for(let t=0;t<s.length;t++)o.set(s[t],a),a+=s[t].length;return o}class S{constructor(t,s,e,r="",i){this.cap=t,this.pad=s,this.functionName=r,0!=r.length||i&&0!=i.length?(this._keccak=new d(4,e,t),this.customization=null==i?new Uint8Array(0):i instanceof Uint8Array?i:o.toBytes(i),this._keccak.write(g(this.pad,y(this.functionName),y(this.customization)))):(this._keccak=new d(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(g(this.pad,y(this.functionName),y(this.customization)))}newEmpty(){return new S(this.cap,this.pad,this.size,this.functionName,this.customization)}clone(){const t=new S(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 S{constructor(t,s="",e){super(k,_,t,s,e)}}export class CShake256 extends S{constructor(t,s="",e=""){super(w,b,t,s,e)}}class E extends S{constructor(t,s,e,r,i,o){super(s,e,r,"KMAC",o),this.appendSize=t,this.write(g(e,y(i)))}sumIn(){return super.write(z(this.appendSize?this.size<<3:0)),super.sumIn()}clone(){const t=new E(this.appendSize,this.cap,this.pad,this.size,this.functionName,this.customization);return super._cloneHelp(t),t}}export class Kmac128 extends E{constructor(t=32,s,e){super(!0,k,_,t,s,e)}}export class Kmac256 extends E{constructor(t=64,s,e){super(!0,w,b,t,s,e)}}export class KmacXof128 extends E{constructor(t,s,e){super(!1,k,_,t,s,e)}}export class KmacXof256 extends E{constructor(t,s,e){super(!1,w,b,t,s,e)}}class P extends S{constructor(t,s,e,r,i){super(s,e,r,"TupleHash",i),this.appendSize=t}write(t){super.write(y(t))}sumIn(){return super.write(z(this.appendSize?this.size<<3:0)),super.sumIn()}clone(){const t=new P(this.appendSize,this.cap,this.pad,this.size,this.customization);return super._cloneHelp(t),t}}export class TupleHash128 extends P{constructor(t=32,s){super(!0,k,_,t,s)}}export class TupleHash256 extends P{constructor(t=64,s){super(!0,w,b,t,s)}}export class TupleHashXof128 extends P{constructor(t,s){super(!1,k,_,t,s)}}export class TupleHashXof256 extends P{constructor(t,s){super(!1,w,b,t,s)}}class q extends S{constructor(t,e,i,o,n,a){super(e,i,n,"ParallelHash",a),this.appendSize=t,s.set(this,void 0),this._obPos=0,this._obCount=0,r(this,s,new Uint8Array(o),"f"),this._subHash=new S(e,i,n,"",""),super.write(m(o))}write(t){let e=t.length,r=0,o=i(this,s,"f").length-this._obPos;for(;e>0;){if(o>e)return i(this,s,"f").set(t.subarray(r),this._obPos),void(this._obPos+=e);i(this,s,"f").set(t.subarray(r,r+i(this,s,"f").length),this._obPos),this._obPos+=o,this._subHash.reset(),this._subHash.write(i(this,s,"f")),super.write(this._subHash.sum()),this._obPos=0,this._obCount++,r+=o,e-=o,o=i(this,s,"f").length}}sumIn(){return this._obPos>0&&(this._subHash.reset(),this._subHash.write(i(this,s,"f").subarray(0,this._obPos)),super.write(this._subHash.sum())),super.write(z(this._obCount)),super.write(z(this.appendSize?this.size<<3:0)),super.sumIn()}reset(){super.reset(),super.write(m(i(this,s,"f").length)),i(this,s,"f").fill(0),this._obPos=0,this._obCount=0}clone(){const t=new q(this.appendSize,this.cap,this.pad,i(this,s,"f").length,this.size,this.customization);return this._cloneHelp(t),t}_cloneHelp(t){super._cloneHelp(t),i(t,s,"f").set(i(this,s,"f")),t._subHash=this._subHash.clone(),t._obPos=this._obPos,t._obCount=this._obCount}}s=new WeakMap;export class ParallelHash128 extends q{constructor(t,s=32,e){super(!0,k,_,t,s,e)}}export class ParallelHash256 extends q{constructor(t,s=64,e){super(!0,w,b,t,s,e)}}export class ParallelHashXof128 extends q{constructor(t,s,e){super(!1,k,_,t,s,e)}}export class ParallelHashXof256 extends q{constructor(t,s,e){super(!1,w,b,t,s,e)}}export class TurboShake128 extends d{constructor(t,s=31){super(s,t,16,12)}}export class TurboShake256 extends d{constructor(t,s=31){super(s,t,32,12)}}function H(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 d{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:o.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(H(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(H(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}}export class HopMac extends KangarooTwelve{constructor(t,s,i){super(32,i),e.set(this,void 0),this._outerSize=t,r(this,e,s instanceof Uint8Array?s:o.toBytes(s),"f")}get size(){return this._outerSize}sumIn(){const t=super.sumIn(),s=new KangarooTwelve(this._outerSize,t);return s.write(i(this,e,"f")),s.sumIn()}clone(){const t=new HopMac(this._outerSize,i(this,e,"f"),this.customization);return this._cloneHelp(t),t}}e=new WeakMap;