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,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A="undefined"!=typeof globalThis?globalThis:A||self).hashwasm=A.hashwasm||{})}(this,(function(A){"use strict";var e,Q={name:"sm3",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMIBwABAgIBAAIFBAEBAgIGDgJ/AUHwiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCtodBwUAQYAJC1EAQQBCzdy3nO7Jw/2wfzcCoIkBQQBCvOG8y6qVzpgWNwKYiQFBAELXhZG5gcCBxVo3ApCJAUEAQu+sgJyX16yKyQA3AoiJAUEAQgA3AoCJAQvvAwEIfwJAIABFDQBBACEBQQBBACgCgIkBIgIgAGoiAzYCgIkBIAJBP3EhBAJAIAMgAk8NAEEAQQAoAoSJAUEBajYChIkBC0GACSECAkAgBEUNAAJAIABBwAAgBGsiBU8NACAEIQEMAQsgBEE/cyEGIARBqIkBaiECQYAJIQMCQAJAIAVBB3EiBw0AIAUhCAwBCyAHIQgDQCACIAMtAAA6AAAgAkEBaiECIANBAWohAyAIQX9qIggNAAtBwAAgByAEamshCAsCQCAGQQdJDQADQCACIAMpAAA3AAAgAkEIaiECIANBCGohAyAIQXhqIggNAAsLQaiJARADIAVBgAlqIQIgACAFayEACwJAIABBwABJDQADQCACEAMgAkHAAGohAiAAQUBqIgBBP0sNAAsLIABFDQAgAUGoiQFqIQMCQAJAIABBB3EiCA0AIAAhBAwBCyAAQThxIQQDQCADIAItAAA6AAAgA0EBaiEDIAJBAWohAiAIQX9qIggNAAsLIABBCEkNAANAIAMgAi0AADoAACADIAItAAE6AAEgAyACLQACOgACIAMgAi0AAzoAAyADIAItAAQ6AAQgAyACLQAFOgAFIAMgAi0ABjoABiADIAItAAc6AAcgA0EIaiEDIAJBCGohAiAEQXhqIgQNAAsLC+wLARl/IwBBkAJrIgEkACABIAAoAhgiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiAzYCGCABIAAoAhQiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiBDYCFCABIAAoAggiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiBTYCCCABIAAoAhAiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiBjYCECABIAAoAiAiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiBzYCICABIAAoAgQiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiCDYCBCABIAAoAgwiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiCTYCDCABIAAoAhwiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiCjYCHCABIAAoAgAiAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIiCzYCACAAKAIkIQIgASAAKAI0IgxBGHQgDEGA/gNxQQh0ciAMQQh2QYD+A3EgDEEYdnJyIg02AjQgASAAKAIoIgxBGHQgDEGA/gNxQQh0ciAMQQh2QYD+A3EgDEEYdnJyIg42AiggASALIA1BD3dzIApzIgxBF3cgDEEPd3MgCUEHd3MgDnMgDHMiCjYCQCABIAAoAjgiDEEYdCAMQYD+A3FBCHRyIAxBCHZBgP4DcSAMQRh2cnIiCzYCOCABIAAoAiwiDEEYdCAMQYD+A3FBCHRyIAxBCHZBgP4DcSAMQRh2cnIiDzYCLCABIAggC0EPd3MgB3MiDEEXdyAMQQ93cyAGQQd3cyAPcyAMczYCRCABIAAoAjwiDEEYdCAMQYD+A3FBCHRyIAxBCHZBgP4DcSAMQRh2cnIiDDYCPCABIAJBGHQgAkGA/gNxQQh0ciACQQh2QYD+A3EgAkEYdnJyIgI2AiQgASAAKAIwIgBBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyIgY2AjAgASAFIAxBD3dzIAJzIgBBF3cgAEEPd3MgBEEHd3MgBnMgAHM2AkggASAOIApBD3dzIAlzIgBBF3cgAEEPd3MgA0EHd3MgDXMgAHM2AkxBACEGQSAhByABIQxBACgCiIkBIhAhCUEAKAKkiQEiESEPQQAoAqCJASISIQ1BACgCnIkBIhMhCEEAKAKYiQEiFCEOQQAoApSJASIVIRZBACgCkIkBIhchA0EAKAKMiQEiGCELA0AgCCAOIgJzIA0iBHMgD2ogCSIAQQx3Ig0gAmpBmYqxzgcgB3ZBmYqxzgcgBnRyakEHdyIPaiAMKAIAIhlqIglBEXcgCUEJd3MgCXMhDiADIgUgC3MgAHMgFmogDyANc2ogDEEQaigCACAZc2ohCSAMQQRqIQwgB0F/aiEHIAhBE3chDSALQQl3IQMgBCEPIAIhCCAFIRYgACELIAZBAWoiBkEQRw0AC0EAIQZBECEHA0AgASAGaiIMQdAAaiAMQThqKAIAIAxBLGooAgAgDEEQaigCAHMgDEHEAGooAgAiFkEPd3MiCEEXd3MgCEEPd3MgDEEcaigCAEEHd3MgCHMiGTYCACANIg8gDiIMQX9zcSACIAxxciAEaiAJIghBDHciDSAMakGKu57UByAHd2pBB3ciBGogCmoiCUERdyAJQQl3cyAJcyEOIAggAyILIABycSALIABxciAFaiAEIA1zaiAZIApzaiEJIAZBBGohBiACQRN3IQ0gAEEJdyEDIBYhCiAPIQQgDCECIAshBSAIIQAgB0EBaiIHQcAARw0AC0EAIA8gEXM2AqSJAUEAIA0gEnM2AqCJAUEAIAwgE3M2ApyJAUEAIA4gFHM2ApiJAUEAIAsgFXM2ApSJAUEAIAMgF3M2ApCJAUEAIAggGHM2AoyJAUEAIAkgEHM2AoiJASABQZACaiQAC4ILAQp/IwBBEGsiACQAIABBACgCgIkBIgFBG3QgAUELdEGAgPwHcXIgAUEFdkGA/gNxIAFBA3RBGHZycjYCDCAAQQAoAoSJASICQQN0IgMgAUEddnIiBEEYdCAEQYD+A3FBCHRyIAJBBXZBgP4DcSADQRh2cnI2AggCQEE4QfgAIAFBP3EiBUE4SRsgBWsiA0UNAEEAIAMgAWoiATYCgIkBAkAgASADTw0AQQAgAkEBajYChIkBC0GQCCEBQQAhBgJAIAVFDQACQCADQcAAIAVrIgdPDQAgBSEGDAELIAVBP3MhCCAFQaiJAWohAUGQCCECAkACQCAHQQdxIgkNACAHIQQMAQsgCSEEA0AgASACLQAAOgAAIAFBAWohASACQQFqIQIgBEF/aiIEDQALQcAAIAkgBWprIQQLAkAgCEEHSQ0AA0AgASACKQAANwAAIAFBCGohASACQQhqIQIgBEF4aiIEDQALC0GoiQEQAyAHQZAIaiEBIAMgB2shAwsCQCADQcAASQ0AA0AgARADIAFBwABqIQEgA0FAaiIDQT9LDQALCyADRQ0AIAZBqIkBaiECAkACQCADQQdxIgQNACADIQUMAQsgA0E4cSEFA0AgAiABLQAAOgAAIAJBAWohAiABQQFqIQEgBEF/aiIEDQALCyADQQhJDQADQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAiABLQAEOgAEIAIgAS0ABToABSACIAEtAAY6AAYgAiABLQAHOgAHIAJBCGohAiABQQhqIQEgBUF4aiIFDQALC0EAQQAoAoCJASICQQhqNgKAiQEgAkE/cSEBAkAgAkF4SQ0AQQBBACgChIkBQQFqNgKEiQELAkACQAJAAkAgAQ0AQQAhAQwBCyABQThJDQAgAUGoiQFqIAAtAAg6AAACQCABQT9GDQAgAUGpiQFqIAAtAAk6AAAgAUE+Rg0AIAFBqokBaiAALQAKOgAAIAFBPUYNACABQauJAWogAC0ACzoAACABQTxGDQAgAUGsiQFqIAAtAAw6AAAgAUE7Rg0AIAFBrYkBaiAALQANOgAAIAFBOkYNACABQa6JAWogAC0ADjoAACABQTlGDQAgAUGviQFqIAAtAA86AABBqIkBEAMMAwtBqIkBEAMgAkEHcSIERQ0CIAFBR2ohBSAAQQhqQcAAIAFraiECIAFBSGohBkGoiQEhASAEIQMDQCABIAItAAA6AAAgAUEBaiEBIAJBAWohAiADQX9qIgMNAAsgBUEHSQ0CIAYgBGshAwwBCyABQaiJAWohASAAQQhqIQJBCCEDCwNAIAEgAikAADcAACABQQhqIQEgAkEIaiECIANBeGoiAw0ACwtBAEEAKAKIiQEiAUEYdCABQYD+A3FBCHRyIAFBCHZBgP4DcSABQRh2cnI2AoAJQQBBACgCjIkBIgFBGHQgAUGA/gNxQQh0ciABQQh2QYD+A3EgAUEYdnJyNgKECUEAQQAoApCJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCiAlBAEEAKAKUiQEiAUEYdCABQYD+A3FBCHRyIAFBCHZBgP4DcSABQRh2cnI2AowJQQBBACgCmIkBIgFBGHQgAUGA/gNxQQh0ciABQQh2QYD+A3EgAUEYdnJyNgKQCUEAQQAoApyJASIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYClAlBAEEAKAKgiQEiAUEYdCABQYD+A3FBCHRyIAFBCHZBgP4DcSABQRh2cnI2ApgJQQBBACgCpIkBIgFBGHQgAUGA/gNxQQh0ciABQQh2QYD+A3EgAUEYdnJyNgKcCSAAQRBqJAALBgBBgIkBC5UCAQR/QQBCzdy3nO7Jw/2wfzcCoIkBQQBCvOG8y6qVzpgWNwKYiQFBAELXhZG5gcCBxVo3ApCJAUEAQu+sgJyX16yKyQA3AoiJAUEAQgA3AoCJAQJAIABFDQBBACAANgKAiQFBgAkhAQJAIABBwABJDQBBgAkhAQNAIAEQAyABQcAAaiEBIABBQGoiAEE/Sw0ACyAARQ0BCyAAQX9qIQICQAJAIABBB3EiAw0AQaiJASEEDAELIABBeHEhAEGoiQEhBANAIAQgAS0AADoAACAEQQFqIQQgAUEBaiEBIANBf2oiAw0ACwsgAkEHSQ0AA0AgBCABKQAANwAAIARBCGohBCABQQhqIQEgAEF4aiIADQALCxAECwtRAgBBgAgLBGgAAAAAQZAIC0CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",hash:"b6fb4b8e"};function B(A,e,Q,B){return new(Q||(Q=Promise))((function(t,g){function i(A){try{I(B.next(A))}catch(A){g(A)}}function C(A){try{I(B.throw(A))}catch(A){g(A)}}function I(A){var e;A.done?t(A.value):(e=A.value,e instanceof Q?e:new Q((function(A){A(e)}))).then(i,C)}I((B=B.apply(A,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(){this.mutex=Promise.resolve()}lock(){let A=()=>{};return this.mutex=this.mutex.then((()=>new Promise(A))),new Promise((e=>{A=e}))}dispatch(A){return B(this,void 0,void 0,(function*(){const e=yield this.lock();try{return yield Promise.resolve(A())}finally{e()}}))}}const g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,i=null!==(e=g.Buffer)&&void 0!==e?e:null,C=g.TextEncoder?new g.TextEncoder:null;function I(A,e){return(15&A)+(A>>6|A>>3&8)<<4|(15&e)+(e>>6|e>>3&8)}const n="a".charCodeAt(0)-10,o="0".charCodeAt(0);function E(A,e,Q){let B=0;for(let t=0;t<Q;t++){let Q=e[t]>>>4;A[B++]=Q>9?Q+n:Q+o,Q=15&e[t],A[B++]=Q>9?Q+n:Q+o}return String.fromCharCode.apply(null,A)}const r=null!==i?A=>{if("string"==typeof A){const e=i.from(A,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.length)}if(i.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 C.encode(A);if(ArrayBuffer.isView(A))return new Uint8Array(A.buffer,A.byteOffset,A.byteLength);throw new Error("Invalid data type!")},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=new Uint8Array(256);for(let A=0;A<h.length;A++)a[h.charCodeAt(A)]=A;function c(A){const e=function(A){let e=Math.floor(.75*A.length);const Q=A.length;return"="===A[Q-1]&&(e-=1,"="===A[Q-2]&&(e-=1)),e}(A),Q=A.length,B=new Uint8Array(e);let t=0;for(let e=0;e<Q;e+=4){const Q=a[A.charCodeAt(e)],g=a[A.charCodeAt(e+1)],i=a[A.charCodeAt(e+2)],C=a[A.charCodeAt(e+3)];B[t]=Q<<2|g>>4,t+=1,B[t]=(15&g)<<4|i>>2,t+=1,B[t]=(3&i)<<6|63&C,t+=1}return B}const s=16384,d=new t,y=new Map;function l(A,e){return B(this,void 0,void 0,(function*(){let Q=null,t=null,g=!1;if("undefined"==typeof WebAssembly)throw new Error("WebAssembly is not supported in this environment!");const i=()=>new DataView(Q.exports.memory.buffer).getUint32(Q.exports.STATE_SIZE,!0),C=d.dispatch((()=>B(this,void 0,void 0,(function*(){if(!y.has(A.name)){const e=c(A.data),Q=WebAssembly.compile(e);y.set(A.name,Q)}const e=yield y.get(A.name);Q=yield WebAssembly.instantiate(e,{})})))),n=(A=null)=>{g=!0,Q.exports.Hash_Init(A)},o=A=>{if(!g)throw new Error("update() called before init()");(A=>{let e=0;for(;e<A.length;){const B=A.subarray(e,e+s);e+=B.length,t.set(B),Q.exports.Hash_Update(B.length)}})(r(A))},h=new Uint8Array(2*e),a=(A,B=null)=>{if(!g)throw new Error("digest() called before init()");return g=!1,Q.exports.Hash_Final(B),"binary"===A?t.slice(0,e):E(h,t,e)},l=A=>"string"==typeof A?A.length<4096:A.byteLength<s;let D=l;switch(A.name){case"argon2":case"scrypt":D=()=>!0;break;case"blake2b":case"blake2s":D=(A,e)=>e<=512&&l(A);break;case"blake3":D=(A,e)=>0===e&&l(A);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":D=()=>!1}return yield(()=>B(this,void 0,void 0,(function*(){Q||(yield C);const A=Q.exports.Hash_GetBuffer(),e=Q.exports.memory.buffer;t=new Uint8Array(e,A,s)})))(),{getMemory:()=>t,writeMemory:(A,e=0)=>{t.set(A,e)},getExports:()=>Q.exports,setMemorySize:A=>{Q.exports.Hash_SetMemorySize(A);const e=Q.exports.Hash_GetBuffer(),B=Q.exports.memory.buffer;t=new Uint8Array(B,e,A)},init:n,update:o,digest:a,save:()=>{if(!g)throw new Error("save() can only be called after init() and before digest()");const e=Q.exports.Hash_GetState(),B=i(),t=Q.exports.memory.buffer,C=new Uint8Array(t,e,B),n=new Uint8Array(4+B);return function(A,e){const Q=e.length>>1;for(let B=0;B<Q;B++){const Q=B<<1;A[B]=I(e.charCodeAt(Q),e.charCodeAt(Q+1))}}(n,A.hash),n.set(C,4),n},load:e=>{if(!(e instanceof Uint8Array))throw new Error("load() expects an Uint8Array generated by save()");const B=Q.exports.Hash_GetState(),t=i(),C=4+t,n=Q.exports.memory.buffer;if(e.length!==C)throw new Error(`Bad state length (expected ${C} bytes, got ${e.length})`);if(!function(A,e){if(A.length!==2*e.length)return!1;for(let Q=0;Q<e.length;Q++){const B=Q<<1;if(e[Q]!==I(A.charCodeAt(B),A.charCodeAt(B+1)))return!1}return!0}(A.hash,e.subarray(0,4)))throw new Error("This state was written by an incompatible hash implementation");const o=e.subarray(4);new Uint8Array(n,B,t).set(o),g=!0},calculate:(A,B=null,g=null)=>{if(!D(A,B))return n(B),o(A),a("hex",g);const i=r(A);return t.set(i),Q.exports.Hash_Calculate(i.length,B,g),E(h,t,e)},hashLength:e}}))}const D=new t;let f=null;A.createSM3=function(){return l(Q,32).then((A=>{A.init();const e={init:()=>(A.init(),e),update:Q=>(A.update(Q),e),digest:e=>A.digest(e),save:()=>A.save(),load:Q=>(A.load(Q),e),blockSize:64,digestSize:32};return e}))},A.sm3=function(A){if(null===f)return function(A,e,Q){return B(this,void 0,void 0,(function*(){const B=yield A.lock(),t=yield l(e,Q);return B(),t}))}(D,Q,32).then((e=>(f=e,f.calculate(A))));try{const e=f.calculate(A);return Promise.resolve(e)}catch(A){return Promise.reject(A)}}}));
|