@lumeweb/js-sha3-browser
Version:
A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding.
10 lines • 9.69 kB
JavaScript
const Buffer=require("buffer-browserify").Buffer;
/**
* [js-sha3]{@link https://github.com/emn178/js-sha3}
*
* @version 0.8.0
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2015-2018
* @license MIT
*/
!function(){"use strict";for(var h="input is invalid type",t="object"==typeof window,e=t?window:{},t=!(t=e.JS_SHA3_NO_WINDOW?!1:t)&&"object"==typeof self,t=(!e.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?e=global:t&&(e=self),!e.JS_SHA3_NO_COMMON_JS&&"object"==typeof module&&module.exports),i="function"==typeof define&&define.amd,p=!e.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,f="0123456789abcdef".split(""),o=[4,1024,262144,67108864],d=[0,8,16,24],Z=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],s=[224,256,384,512],c=[128,256],l=["hex","buffer","arrayBuffer","array","digest"],y={128:168,256:136},b=(!e.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!p||!e.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer}),function(e,r,n){return function(t){return new u(e,r,e).update(t)[n]()}}),A=function(r,n,i){return function(t,e){return new u(r,n,e).update(t)[i]()}},w=function(i,t,o){return function(t,e,r,n){return a["cshake"+i].update(t,e,r,n)[o]()}},B=function(i,t,o){return function(t,e,r,n){return a["kmac"+i].update(t,e,r,n)[o]()}},v=function(t,e,r,n){for(var i=0;i<l.length;++i){var o=l[i];t[o]=e(r,n,o)}return t},g=function(t,e){var r=b(t,e,"hex");return r.create=function(){return new u(t,e,t)},r.update=function(t){return r.create().update(t)},v(r,b,t,e)},_=[{name:"keccak",padding:[1,256,65536,16777216],bits:s,createMethod:g},{name:"sha3",padding:[6,1536,393216,100663296],bits:s,createMethod:g},{name:"shake",padding:[31,7936,2031616,520093696],bits:c,createMethod:function(e,r){var n=A(e,r,"hex");return n.create=function(t){return new u(e,r,t)},n.update=function(t,e){return n.create(e).update(t)},v(n,A,e,r)}},{name:"cshake",padding:o,bits:c,createMethod:function(n,i){var o=y[n],s=w(n,0,"hex");return s.create=function(t,e,r){return e||r?new u(n,i,t).bytepad([e,r],o):a["shake"+n].create(t)},s.update=function(t,e,r,n){return s.create(e,r,n).update(t)},v(s,w,n,i)}},{name:"kmac",padding:o,bits:c,createMethod:function(n,i){var o=y[n],s=B(n,0,"hex");return s.create=function(t,e,r){return new E(n,i,e).bytepad(["KMAC",r],o).bytepad([t],o)},s.update=function(t,e,r,n){return s.create(t,r,n).update(e)},v(s,B,n,i)}}],a={},k=[],r=0;r<_.length;++r)for(var n=_[r],S=n.bits,C=0;C<S.length;++C){var x,m=n.name+"_"+S[C];k.push(m),a[m]=n.createMethod(S[C],n.padding),"sha3"!==n.name&&(x=n.name+S[C],k.push(x),a[x]=a[m])}function u(t,e,r){this.blocks=[],this.s=[],this.padding=e,this.outputBits=r,this.reset=!0,this.finalized=!1,this.block=0,this.start=0,this.blockCount=1600-(t<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var n=0;n<50;++n)this.s[n]=0}function E(t,e,r){u.call(this,t,e,r)}u.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var e,r=typeof t;if("string"!=r){if("object"!=r)throw new Error(h);if(null===t)throw new Error(h);if(!p||t.constructor!==ArrayBuffer&&t.constructor!==Buffer){if(!(Array.isArray(t)||p&&ArrayBuffer.isView(t)))throw new Error(h)}else t=new Uint8Array(t);e=!0}for(var n,i,o=this.blocks,s=this.byteCount,a=t.length,f=this.blockCount,u=0,c=this.s;u<a;){if(this.reset)for(this.reset=!1,o[0]=this.block,n=1;n<f+1;++n)o[n]=0;if(e)for(n=this.start;u<a&&n<s;++u)o[n>>2]|=t[u]<<d[3&n++];else for(n=this.start;u<a&&n<s;++u)(i=t.charCodeAt(u))<128?o[n>>2]|=i<<d[3&n++]:(i<2048?o[n>>2]|=(192|i>>6)<<d[3&n++]:(i<55296||57344<=i?o[n>>2]|=(224|i>>12)<<d[3&n++]:(i=65536+((1023&i)<<10|1023&t.charCodeAt(++u)),o[n>>2]|=(240|i>>18)<<d[3&n++],o[n>>2]|=(128|i>>12&63)<<d[3&n++]),o[n>>2]|=(128|i>>6&63)<<d[3&n++]),o[n>>2]|=(128|63&i)<<d[3&n++]);if(s<=(this.lastByteIndex=n)){for(this.start=n-s,this.block=o[f],n=0;n<f;++n)c[n]^=o[n];O(c),this.reset=!0}else this.start=n}return this},u.prototype.encode=function(t,e){for(var r=1,n=[i=255&t],i=255&(t>>=8);0<i;)n.unshift(i),i=255&(t>>=8),++r;return e?n.push(r):n.unshift(r),this.update(n),n.length},u.prototype.encodeString=function(t){var e,r=typeof t;if("string"!=r){if("object"!=r)throw new Error(h);if(null===t)throw new Error(h);if(p&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||p&&ArrayBuffer.isView(t)))throw new Error(h);e=!0}var n=0,r=t.length;if(e)n=r;else for(var i=0;i<t.length;++i){var o=t.charCodeAt(i);o<128?n+=1:o<2048?n+=2:o<55296||57344<=o?n+=3:(o=65536+((1023&o)<<10|1023&t.charCodeAt(++i)),n+=4)}return n+=this.encode(8*n),this.update(t),n},u.prototype.bytepad=function(t,e){for(var r=this.encode(e),n=0;n<t.length;++n)r+=this.encodeString(t[n]);var i=[];return i.length=e-r%e,this.update(i),this},u.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex,r=this.blockCount,n=this.s;if(t[e>>2]|=this.padding[3&e],this.lastByteIndex===this.byteCount)for(t[0]=t[r],e=1;e<r+1;++e)t[e]=0;for(t[r-1]|=2147483648,e=0;e<r;++e)n[e]^=t[e];O(n)}},u.prototype.toString=u.prototype.hex=function(){this.finalize();for(var t,e=this.blockCount,r=this.s,n=this.outputBlocks,i=this.extraBytes,o=0,s=0,a="";s<n;){for(o=0;o<e&&s<n;++o,++s)t=r[o],a+=f[t>>4&15]+f[15&t]+f[t>>12&15]+f[t>>8&15]+f[t>>20&15]+f[t>>16&15]+f[t>>28&15]+f[t>>24&15];s%e==0&&(O(r),o=0)}return i&&(t=r[o],a+=f[t>>4&15]+f[15&t],1<i&&(a+=f[t>>12&15]+f[t>>8&15]),2<i&&(a+=f[t>>20&15]+f[t>>16&15])),a},u.prototype.buffer=u.prototype.arrayBuffer=function(){this.finalize();for(var t=this.blockCount,e=this.s,r=this.outputBlocks,n=this.extraBytes,i=0,o=0,s=this.outputBits>>3,a=n?new ArrayBuffer(r+1<<2):new ArrayBuffer(s),f=new Uint32Array(a);o<r;){for(i=0;i<t&&o<r;++i,++o)f[o]=e[i];o%t==0&&O(e)}return n&&(f[i]=e[i],a=a.slice(0,s)),a},u.prototype.digest=u.prototype.array=function(){this.finalize();for(var t,e,r=this.blockCount,n=this.s,i=this.outputBlocks,o=this.extraBytes,s=0,a=0,f=[];a<i;){for(s=0;s<r&&a<i;++s,++a)e=n[s],f[t=a<<2]=255&e,f[t+1]=e>>8&255,f[t+2]=e>>16&255,f[t+3]=e>>24&255;a%r==0&&O(n)}return o&&(e=n[s],f[t=a<<2]=255&e,1<o&&(f[t+1]=e>>8&255),2<o&&(f[t+2]=e>>16&255)),f},(E.prototype=new u).finalize=function(){return this.encode(this.outputBits,!0),u.prototype.finalize.call(this)};var O=function(t){for(var e,r,c,h,p,d,l,y,b,A,w,B,v,g,n,_,k,S,C,x,i,o,m,E,O,z,N,j,s,a,J,M,f,u,H,I,R,U,V,F,D,W,Y,q,K,G,L,P,Q,T,X=0;X<48;X+=2)s=t[0]^t[10]^t[20]^t[30]^t[40],a=t[1]^t[11]^t[21]^t[31]^t[41],r=t[2]^t[12]^t[22]^t[32]^t[42],e=t[3]^t[13]^t[23]^t[33]^t[43],u=t[4]^t[14]^t[24]^t[34]^t[44],f=t[5]^t[15]^t[25]^t[35]^t[45],P=t[6]^t[16]^t[26]^t[36]^t[46],L=t[7]^t[17]^t[27]^t[37]^t[47],n=t[8]^t[18]^t[28]^t[38]^t[48],o=(_=t[9]^t[19]^t[29]^t[39]^t[49])^(e<<1|r>>>31),t[0]^=i=n^(r<<1|e>>>31),t[1]^=o,t[10]^=i,t[11]^=o,t[20]^=i,t[21]^=o,t[30]^=i,t[31]^=o,t[40]^=i,t[41]^=o,o=a^(f<<1|u>>>31),t[2]^=i=s^(u<<1|f>>>31),t[3]^=o,t[12]^=i,t[13]^=o,t[22]^=i,t[23]^=o,t[32]^=i,t[33]^=o,t[42]^=i,t[43]^=o,o=e^(L<<1|P>>>31),t[4]^=i=r^(P<<1|L>>>31),t[5]^=o,t[14]^=i,t[15]^=o,t[24]^=i,t[25]^=o,t[34]^=i,t[35]^=o,t[44]^=i,t[45]^=o,o=f^(_<<1|n>>>31),t[6]^=i=u^(n<<1|_>>>31),t[7]^=o,t[16]^=i,t[17]^=o,t[26]^=i,t[27]^=o,t[36]^=i,t[37]^=o,t[46]^=i,t[47]^=o,o=L^(a<<1|s>>>31),t[8]^=i=P^(s<<1|a>>>31),t[9]^=o,t[18]^=i,t[19]^=o,t[28]^=i,t[29]^=o,t[38]^=i,t[39]^=o,t[48]^=i,t[49]^=o,e=t[0],r=t[1],f=t[11]<<4|t[10]>>>28,u=t[10]<<4|t[11]>>>28,n=t[20]<<3|t[21]>>>29,_=t[21]<<3|t[20]>>>29,L=t[31]<<9|t[30]>>>23,P=t[30]<<9|t[31]>>>23,s=t[40]<<18|t[41]>>>14,a=t[41]<<18|t[40]>>>14,i=t[2]<<1|t[3]>>>31,o=t[3]<<1|t[2]>>>31,c=t[13]<<12|t[12]>>>20,h=t[12]<<12|t[13]>>>20,H=t[22]<<10|t[23]>>>22,I=t[23]<<10|t[22]>>>22,k=t[33]<<13|t[32]>>>19,S=t[32]<<13|t[33]>>>19,Q=t[42]<<2|t[43]>>>30,T=t[43]<<2|t[42]>>>30,D=t[5]<<30|t[4]>>>2,W=t[4]<<30|t[5]>>>2,m=t[14]<<6|t[15]>>>26,E=t[15]<<6|t[14]>>>26,p=t[25]<<11|t[24]>>>21,d=t[24]<<11|t[25]>>>21,R=t[34]<<15|t[35]>>>17,U=t[35]<<15|t[34]>>>17,C=t[45]<<29|t[44]>>>3,x=t[44]<<29|t[45]>>>3,w=t[6]<<28|t[7]>>>4,B=t[7]<<28|t[6]>>>4,Y=t[17]<<23|t[16]>>>9,q=t[16]<<23|t[17]>>>9,O=t[26]<<25|t[27]>>>7,z=t[27]<<25|t[26]>>>7,l=t[36]<<21|t[37]>>>11,y=t[37]<<21|t[36]>>>11,V=t[47]<<24|t[46]>>>8,F=t[46]<<24|t[47]>>>8,J=t[8]<<27|t[9]>>>5,M=t[9]<<27|t[8]>>>5,v=t[18]<<20|t[19]>>>12,g=t[19]<<20|t[18]>>>12,K=t[29]<<7|t[28]>>>25,G=t[28]<<7|t[29]>>>25,N=t[38]<<8|t[39]>>>24,j=t[39]<<8|t[38]>>>24,b=t[48]<<14|t[49]>>>18,A=t[49]<<14|t[48]>>>18,t[0]=e^~c&p,t[1]=r^~h&d,t[10]=w^~v&n,t[11]=B^~g&_,t[20]=i^~m&O,t[21]=o^~E&z,t[30]=J^~f&H,t[31]=M^~u&I,t[40]=D^~Y&K,t[41]=W^~q&G,t[2]=c^~p&l,t[3]=h^~d&y,t[12]=v^~n&k,t[13]=g^~_&S,t[22]=m^~O&N,t[23]=E^~z&j,t[32]=f^~H&R,t[33]=u^~I&U,t[42]=Y^~K&L,t[43]=q^~G&P,t[4]=p^~l&b,t[5]=d^~y&A,t[14]=n^~k&C,t[15]=_^~S&x,t[24]=O^~N&s,t[25]=z^~j&a,t[34]=H^~R&V,t[35]=I^~U&F,t[44]=K^~L&Q,t[45]=G^~P&T,t[6]=l^~b&e,t[7]=y^~A&r,t[16]=k^~C&w,t[17]=S^~x&B,t[26]=N^~s&i,t[27]=j^~a&o,t[36]=R^~V&J,t[37]=U^~F&M,t[46]=L^~Q&D,t[47]=P^~T&W,t[8]=b^~e&c,t[9]=A^~r&h,t[18]=C^~w&v,t[19]=x^~B&g,t[28]=s^~i&m,t[29]=a^~o&E,t[38]=V^~J&f,t[39]=F^~M&u,t[48]=Q^~D&Y,t[49]=T^~W&q,t[0]^=Z[X],t[1]^=Z[X+1]};if(t)module.exports=a;else{for(r=0;r<k.length;++r)e[k[r]]=a[k[r]];i&&define(function(){return a})}}();