8 lines
11 KiB
JavaScript
8 lines
11 KiB
JavaScript
/*!
|
|
* hash-wasm (https://www.npmjs.com/package/hash-wasm)
|
|
* (c) Dani Biro
|
|
* @license MIT
|
|
*/
|
|
|
|
!function(A,Q){"object"==typeof exports&&"undefined"!=typeof module?Q(exports):"function"==typeof define&&define.amd?define(["exports"],Q):Q((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var Q,e={name:"sha3",data:"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",hash:"fb24e536"};function I(A,Q,e,I){return new(e||(e=Promise))((function(g,t){function B(A){try{o(I.next(A))}catch(A){t(A)}}function i(A){try{o(I.throw(A))}catch(A){t(A)}}function o(A){var Q;A.done?g(A.value):(Q=A.value,Q instanceof e?Q:new e((function(A){A(Q)}))).then(B,i)}o((I=I.apply(A,Q||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class g{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((Q=>{A=Q}))}dispatch(A){return I(this,void 0,void 0,(function*(){const Q=yield this.lock();try{return yield Promise.resolve(A())}finally{Q()}}))}}const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,B=null!==(Q=t.Buffer)&&void 0!==Q?Q:null,i=t.TextEncoder?new t.TextEncoder:null;function o(A,Q){return(15&A)+(A>>6|A>>3&8)<<4|(15&Q)+(Q>>6|Q>>3&8)}const n="a".charCodeAt(0)-10,C="0".charCodeAt(0);function r(A,Q,e){let I=0;for(let g=0;g<e;g++){let e=Q[g]>>>4;A[I++]=e>9?e+n:e+C,e=15&Q[g],A[I++]=e>9?e+n:e+C}return String.fromCharCode.apply(null,A)}const s=null!==B?A=>{if("string"==typeof A){const Q=B.from(A,"utf8");return new Uint8Array(Q.buffer,Q.byteOffset,Q.length)}if(B.isBuffer(A))return new Uint8Array(A.buffer,A.byteOffset,A.length);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")}:A=>{if("string"==typeof A)return i.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",D=new Uint8Array(256);for(let A=0;A<E.length;A++)D[E.charCodeAt(A)]=A;function c(A){const Q=function(A){let Q=Math.floor(.75*A.length);const e=A.length;return"="===A[e-1]&&(Q-=1,"="===A[e-2]&&(Q-=1)),Q}(A),e=A.length,I=new Uint8Array(Q);let g=0;for(let Q=0;Q<e;Q+=4){const e=D[A.charCodeAt(Q)],t=D[A.charCodeAt(Q+1)],B=D[A.charCodeAt(Q+2)],i=D[A.charCodeAt(Q+3)];I[g]=e<<2|t>>4,g+=1,I[g]=(15&t)<<4|B>>2,g+=1,I[g]=(3&B)<<6|63&i,g+=1}return I}const a=16384,h=new g,f=new Map;function l(A,Q){return I(this,void 0,void 0,(function*(){let e=null,g=null,t=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const B=()=>new DataView(e.exports.memory.buffer).getUint32(e.exports.STATE_SIZE,!0),i=h.dispatch((()=>I(this,void 0,void 0,(function*(){if(!f.has(A.name)){const Q=c(A.data),e=WebAssembly.compile(Q);f.set(A.name,e)}const Q=yield f.get(A.name);e=yield WebAssembly.instantiate(Q,{})})))),n=(A=null)=>{t=!0,e.exports.Hash_Init(A)},C=A=>{if(!t)throw new Error("update() called before init()");(A=>{let Q=0;for(;Q<A.length;){const I=A.subarray(Q,Q+a);Q+=I.length,g.set(I),e.exports.Hash_Update(I.length)}})(s(A))},E=new Uint8Array(2*Q),D=(A,I=null)=>{if(!t)throw new Error("digest() called before init()");return t=!1,e.exports.Hash_Final(I),"binary"===A?g.slice(0,Q):r(E,g,Q)},l=A=>"string"==typeof A?A.length<4096:A.byteLength<a;let U=l;switch(A.name){case"argon2":case"scrypt":U=()=>!0;break;case"blake2b":case"blake2s":U=(A,Q)=>Q<=512&&l(A);break;case"blake3":U=(A,Q)=>0===Q&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":U=()=>!1}return yield(()=>I(this,void 0,void 0,(function*(){e||(yield i);const A=e.exports.Hash_GetBuffer(),Q=e.exports.memory.buffer;g=new Uint8Array(Q,A,a)})))(),{getMemory:()=>g,writeMemory:(A,Q=0)=>{g.set(A,Q)},getExports:()=>e.exports,setMemorySize:A=>{e.exports.Hash_SetMemorySize(A);const Q=e.exports.Hash_GetBuffer(),I=e.exports.memory.buffer;g=new Uint8Array(I,Q,A)},init:n,update:C,digest:D,save:()=>{if(!t)throw new Error("save() can only be called after init() and before digest()");const Q=e.exports.Hash_GetState(),I=B(),g=e.exports.memory.buffer,i=new Uint8Array(g,Q,I),n=new Uint8Array(4+I);return function(A,Q){const e=Q.length>>1;for(let I=0;I<e;I++){const e=I<<1;A[I]=o(Q.charCodeAt(e),Q.charCodeAt(e+1))}}(n,A.hash),n.set(i,4),n},load:Q=>{if(!(Q instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const I=e.exports.Hash_GetState(),g=B(),i=4+g,n=e.exports.memory.buffer;if(Q.length!==i)throw new Error(`Bad state length (expected ${i} bytes, got ${Q.length})`);if(!function(A,Q){if(A.length!==2*Q.length)return!1;for(let e=0;e<Q.length;e++){const I=e<<1;if(Q[e]!==o(A.charCodeAt(I),A.charCodeAt(I+1)))return!1}return!0}(A.hash,Q.subarray(0,4)))throw new Error("This state was written by an incompatible hash implementation");const C=Q.subarray(4);new Uint8Array(n,I,g).set(C),t=!0},calculate:(A,I=null,t=null)=>{if(!U(A,I))return n(I),C(A),D("hex",t);const B=s(A);return g.set(B),e.exports.Hash_Calculate(B.length,I,t),r(E,g,Q)},hashLength:Q}}))}const U=new g;let u=null;function y(A){return[224,256,384,512].includes(A)?null:new Error("Invalid variant! Valid values: 224, 256, 384, 512")}A.createSHA3=function(A=512){if(y(A))return Promise.reject(y(A));const Q=A/8;return l(e,Q).then((e=>{e.init(A);const I={init:()=>(e.init(A),I),update:A=>(e.update(A),I),digest:A=>e.digest(A,6),save:()=>e.save(),load:A=>(e.load(A),I),blockSize:200-2*Q,digestSize:Q};return I}))},A.sha3=function(A,Q=512){if(y(Q))return Promise.reject(y(Q));const g=Q/8;if(null===u||u.hashLength!==g)return function(A,Q,e){return I(this,void 0,void 0,(function*(){const I=yield A.lock(),g=yield l(Q,e);return I(),g}))}(U,e,g).then((e=>(u=e,u.calculate(A,Q,6))));try{const e=u.calculate(A,Q,6);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}}));
|