From e686ac6177edccdcf05138a3a18efed9a4268ee1 Mon Sep 17 00:00:00 2001 From: Chen Yi-Cyuan Date: Fri, 27 Feb 2015 16:45:54 +0800 Subject: [PATCH] Improve performance. --- CHANGELOG.md | 4 ++ bower.json | 2 +- build/sha3.min.js | 28 ++++---- package.json | 2 +- src/sha3.js | 170 +++++++++++++++++++++++++++------------------- 5 files changed, 120 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0066bdc..c19ed72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# v0.1.2 / 2015-02-27 + +* Improve performance. + # v0.1.1 / 2015-02-26 * Improve performance. diff --git a/bower.json b/bower.json index 7ef8748..4309632 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "js-sha3", - "version": "0.1.1", + "version": "0.1.2", "main": ["build/sha3.min.js"], "ignore": [ "samples", diff --git a/build/sha3.min.js b/build/sha3.min.js index b47862c..c8d6948 100644 --- a/build/sha3.min.js +++ b/build/sha3.min.js @@ -1,5 +1,5 @@ /* - * js-sha3 v0.1.1 + * js-sha3 v0.1.2 * https://github.com/emn178/js-sha3 * * Copyright 2015, emn178@gmail.com @@ -7,16 +7,16 @@ * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ -(function(h,va){var qa="undefined"!=typeof module;qa&&(h=global);var b="0123456789abcdef".split(""),wa=[1,256,65536,16777216],y=[0,8,16,24],ra=[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],f=[],a=[], -sa=function(a){return l(a,224)},ta=function(a){return l(a,256)},ua=function(a){return l(a,384)},l=function(h,A){A===va&&(A=512);var g,k=!1,z=0,l=0,oa=h.length,c,d,e,m,n,p,q,r,t,u,v,w,x,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la,ma,na,B=(1600-2*A)/32,pa=4*B;for(c=0;50>c;++c)a[c]=0;g=0;do{f[0]=g;for(c=1;cg?f[c>>2]|=g<g?f[c>>2]|=(192|g>>6)<g||57344<=g?f[c>>2]|=(224|g>> -12)<>2]|=(240|g>>18)<>2]|=(128|g>>12&63)<>2]|=(128|g>>6&63)<>2]|=(128|g&63)<>2]|=wa[c&3],++z);g=f[B];z>oa&&cc;c+=2)m=a[0]^a[10]^a[20]^a[30]^a[40],n=a[1]^a[11]^a[21]^a[31]^a[41],p=a[2]^a[12]^a[22]^a[32]^a[42],q=a[3]^a[13]^a[23]^a[33]^a[43],r=a[4]^a[14]^a[24]^a[34]^a[44],t=a[5]^a[15]^a[25]^a[35]^a[45], -u=a[6]^a[16]^a[26]^a[36]^a[46],v=a[7]^a[17]^a[27]^a[37]^a[47],w=a[8]^a[18]^a[28]^a[38]^a[48],x=a[9]^a[19]^a[29]^a[39]^a[49],d=w^(p<<1|q>>>31),e=x^(q<<1|p>>>31),a[0]^=d,a[1]^=e,a[10]^=d,a[11]^=e,a[20]^=d,a[21]^=e,a[30]^=d,a[31]^=e,a[40]^=d,a[41]^=e,d=m^(r<<1|t>>>31),e=n^(t<<1|r>>>31),a[2]^=d,a[3]^=e,a[12]^=d,a[13]^=e,a[22]^=d,a[23]^=e,a[32]^=d,a[33]^=e,a[42]^=d,a[43]^=e,d=p^(u<<1|v>>>31),e=q^(v<<1|u>>>31),a[4]^=d,a[5]^=e,a[14]^=d,a[15]^=e,a[24]^=d,a[25]^=e,a[34]^=d,a[35]^=e,a[44]^=d,a[45]^=e,d=r^(w<< -1|x>>>31),e=t^(x<<1|w>>>31),a[6]^=d,a[7]^=e,a[16]^=d,a[17]^=e,a[26]^=d,a[27]^=e,a[36]^=d,a[37]^=e,a[46]^=d,a[47]^=e,d=u^(m<<1|n>>>31),e=v^(n<<1|m>>>31),a[8]^=d,a[9]^=e,a[18]^=d,a[19]^=e,a[28]^=d,a[29]^=e,a[38]^=d,a[39]^=e,a[48]^=d,a[49]^=e,d=a[0],e=a[1],W=a[11]<<4|a[10]>>>28,X=a[10]<<4|a[11]>>>28,E=a[20]<<3|a[21]>>>29,F=a[21]<<3|a[20]>>>29,ka=a[31]<<9|a[30]>>>23,la=a[30]<<9|a[31]>>>23,S=a[40]<<18|a[41]>>>14,T=a[41]<<18|a[40]>>>14,K=a[2]<<1|a[3]>>>31,L=a[3]<<1|a[2]>>>31,m=a[13]<<12|a[12]>>>20,n=a[12]<< -12|a[13]>>>20,Y=a[22]<<10|a[23]>>>22,Z=a[23]<<10|a[22]>>>22,G=a[33]<<13|a[32]>>>19,H=a[32]<<13|a[33]>>>19,ma=a[42]<<2|a[43]>>>30,na=a[43]<<2|a[42]>>>30,ea=a[5]<<30|a[4]>>>2,fa=a[4]<<30|a[5]>>>2,M=a[14]<<6|a[15]>>>26,N=a[15]<<6|a[14]>>>26,p=a[25]<<11|a[24]>>>21,q=a[24]<<11|a[25]>>>21,aa=a[34]<<15|a[35]>>>17,ba=a[35]<<15|a[34]>>>17,I=a[45]<<29|a[44]>>>3,J=a[44]<<29|a[45]>>>3,w=a[6]<<28|a[7]>>>4,x=a[7]<<28|a[6]>>>4,ga=a[17]<<23|a[16]>>>9,ha=a[16]<<23|a[17]>>>9,O=a[26]<<25|a[27]>>>7,P=a[27]<<25|a[26]>>> -7,r=a[36]<<21|a[37]>>>11,t=a[37]<<21|a[36]>>>11,ca=a[47]<<24|a[46]>>>8,da=a[46]<<24|a[47]>>>8,U=a[8]<<27|a[9]>>>5,V=a[9]<<27|a[8]>>>5,C=a[18]<<20|a[19]>>>12,D=a[19]<<20|a[18]>>>12,ia=a[29]<<7|a[28]>>>25,ja=a[28]<<7|a[29]>>>25,Q=a[38]<<8|a[39]>>>24,R=a[39]<<8|a[38]>>>24,u=a[48]<<14|a[49]>>>18,v=a[49]<<14|a[48]>>>18,a[0]=d^~m&p,a[1]=e^~n&q,a[10]=w^~C&E,a[11]=x^~D&F,a[20]=K^~M&O,a[21]=L^~N&P,a[30]=U^~W&Y,a[31]=V^~X&Z,a[40]=ea^~ga&ia,a[41]=fa^~ha&ja,a[2]=m^~p&r,a[3]=n^~q&t,a[12]=C^~E&G,a[13]=D^~F&H,a[22]= -M^~O&Q,a[23]=N^~P&R,a[32]=W^~Y&aa,a[33]=X^~Z&ba,a[42]=ga^~ia&ka,a[43]=ha^~ja&la,a[4]=p^~r&u,a[5]=q^~t&v,a[14]=E^~G&I,a[15]=F^~H&J,a[24]=O^~Q&S,a[25]=P^~R&T,a[34]=Y^~aa&ca,a[35]=Z^~ba&da,a[44]=ia^~ka&ma,a[45]=ja^~la&na,a[6]=r^~u&d,a[7]=t^~v&e,a[16]=G^~I&w,a[17]=H^~J&x,a[26]=Q^~S&K,a[27]=R^~T&L,a[36]=aa^~ca&U,a[37]=ba^~da&V,a[46]=ka^~ma&ea,a[47]=la^~na&fa,a[8]=u^~d&m,a[9]=v^~e&n,a[18]=I^~w&C,a[19]=J^~x&D,a[28]=S^~K&M,a[29]=T^~L&N,a[38]=ca^~U&W,a[39]=da^~V&X,a[48]=ma^~ea&ga,a[49]=na^~fa&ha,a[0]^=ra[c], -a[1]^=ra[c+1]}while(!k);k=""+(b[a[0]>>4&15]+b[a[0]&15]+b[a[0]>>12&15]+b[a[0]>>8&15]+b[a[0]>>20&15]+b[a[0]>>16&15]+b[a[0]>>28&15]+b[a[0]>>24&15]+b[a[1]>>4&15]+b[a[1]&15]+b[a[1]>>12&15]+b[a[1]>>8&15]+b[a[1]>>20&15]+b[a[1]>>16&15]+b[a[1]>>28&15]+b[a[1]>>24&15]+b[a[2]>>4&15]+b[a[2]&15]+b[a[2]>>12&15]+b[a[2]>>8&15]+b[a[2]>>20&15]+b[a[2]>>16&15]+b[a[2]>>28&15]+b[a[2]>>24&15]+b[a[3]>>4&15]+b[a[3]&15]+b[a[3]>>12&15]+b[a[3]>>8&15]+b[a[3]>>20&15]+b[a[3]>>16&15]+b[a[3]>>28&15]+b[a[3]>>24&15]+b[a[4]>>4&15]+b[a[4]& -15]+b[a[4]>>12&15]+b[a[4]>>8&15]+b[a[4]>>20&15]+b[a[4]>>16&15]+b[a[4]>>28&15]+b[a[4]>>24&15]+b[a[5]>>4&15]+b[a[5]&15]+b[a[5]>>12&15]+b[a[5]>>8&15]+b[a[5]>>20&15]+b[a[5]>>16&15]+b[a[5]>>28&15]+b[a[5]>>24&15]+b[a[6]>>4&15]+b[a[6]&15]+b[a[6]>>12&15]+b[a[6]>>8&15]+b[a[6]>>20&15]+b[a[6]>>16&15]+b[a[6]>>28&15]+b[a[6]>>24&15]);256<=A&&(k+=b[a[7]>>4&15]+b[a[7]&15]+b[a[7]>>12&15]+b[a[7]>>8&15]+b[a[7]>>20&15]+b[a[7]>>16&15]+b[a[7]>>28&15]+b[a[7]>>24&15]);384<=A&&(k+=b[a[8]>>4&15]+b[a[8]&15]+b[a[8]>>12&15]+ -b[a[8]>>8&15]+b[a[8]>>20&15]+b[a[8]>>16&15]+b[a[8]>>28&15]+b[a[8]>>24&15]+b[a[9]>>4&15]+b[a[9]&15]+b[a[9]>>12&15]+b[a[9]>>8&15]+b[a[9]>>20&15]+b[a[9]>>16&15]+b[a[9]>>28&15]+b[a[9]>>24&15]+b[a[10]>>4&15]+b[a[10]&15]+b[a[10]>>12&15]+b[a[10]>>8&15]+b[a[10]>>20&15]+b[a[10]>>16&15]+b[a[10]>>28&15]+b[a[10]>>24&15]+b[a[11]>>4&15]+b[a[11]&15]+b[a[11]>>12&15]+b[a[11]>>8&15]+b[a[11]>>20&15]+b[a[11]>>16&15]+b[a[11]>>28&15]+b[a[11]>>24&15]);512==A&&(k+=b[a[12]>>4&15]+b[a[12]&15]+b[a[12]>>12&15]+b[a[12]>>8&15]+ -b[a[12]>>20&15]+b[a[12]>>16&15]+b[a[12]>>28&15]+b[a[12]>>24&15]+b[a[13]>>4&15]+b[a[13]&15]+b[a[13]>>12&15]+b[a[13]>>8&15]+b[a[13]>>20&15]+b[a[13]>>16&15]+b[a[13]>>28&15]+b[a[13]>>24&15]+b[a[14]>>4&15]+b[a[14]&15]+b[a[14]>>12&15]+b[a[14]>>8&15]+b[a[14]>>20&15]+b[a[14]>>16&15]+b[a[14]>>28&15]+b[a[14]>>24&15]+b[a[15]>>4&15]+b[a[15]&15]+b[a[15]>>12&15]+b[a[15]>>8&15]+b[a[15]>>20&15]+b[a[15]>>16&15]+b[a[15]>>28&15]+b[a[15]>>24&15]);return k};!h.JS_SHA3_TEST&&qa?module.exports={sha3_512:l,sha3_384:ua,sha3_256:ta, -sha3_224:sa}:h&&(h.sha3_512=l,h.sha3_384=ua,h.sha3_256=ta,h.sha3_224=sa)})(this); +(function(u,ua){var E="undefined"!=typeof module;E&&(u=global,u.JS_SHA3_TEST&&(u.navigator={userAgent:"Chrome"}));var va=(u.JS_SHA3_TEST||!E)&&-1!=navigator.userAgent.indexOf("Chrome"),b="0123456789abcdef".split(""),wa=[1,256,65536,16777216],B=[0,8,16,24],qa=[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],e=[],a=[],ra=function(a){return A(a,224)},sa=function(a){return A(a,256)},ta=function(a){return A(a,384)},A=function(u,C){C===ua&&(C=512);var A,f,v=!1,D=0,E=0,oa=u.length,c,d,g,h,k,l,m,n,p,q,r,t,w,x,y,z,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la,ma,na,F=(1600-2*C)/32,pa=4*F;for(c=0;50>c;++c)a[c]=0;A=0;do{e[0]=A;for(c=1;cf?e[c>>2]|=f<f?e[c>>2]|=(192|f>>6)<f||57344<=f?e[c>>2]|=(224|f>>12)<>2]|=(240|f>>18)<>2]|=(128|f>>12&63)<>2]|=(128|f>>6&63)<>2]|=(128|f&63)<>2]|=wa[c&3],++D);A=e[F];D>oa&&cf;f+=2)g=a[0]^a[10]^a[20]^a[30]^a[40],h=a[1]^a[11]^a[21]^a[31]^a[41],k=a[2]^ +a[12]^a[22]^a[32]^a[42],l=a[3]^a[13]^a[23]^a[33]^a[43],m=a[4]^a[14]^a[24]^a[34]^a[44],n=a[5]^a[15]^a[25]^a[35]^a[45],p=a[6]^a[16]^a[26]^a[36]^a[46],q=a[7]^a[17]^a[27]^a[37]^a[47],r=a[8]^a[18]^a[28]^a[38]^a[48],t=a[9]^a[19]^a[29]^a[39]^a[49],d=r^(k<<1|l>>>31),c=t^(l<<1|k>>>31),a[0]^=d,a[1]^=c,a[10]^=d,a[11]^=c,a[20]^=d,a[21]^=c,a[30]^=d,a[31]^=c,a[40]^=d,a[41]^=c,d=g^(m<<1|n>>>31),c=h^(n<<1|m>>>31),a[2]^=d,a[3]^=c,a[12]^=d,a[13]^=c,a[22]^=d,a[23]^=c,a[32]^=d,a[33]^=c,a[42]^=d,a[43]^=c,d=k^(p<<1|q>>> +31),c=l^(q<<1|p>>>31),a[4]^=d,a[5]^=c,a[14]^=d,a[15]^=c,a[24]^=d,a[25]^=c,a[34]^=d,a[35]^=c,a[44]^=d,a[45]^=c,d=m^(r<<1|t>>>31),c=n^(t<<1|r>>>31),a[6]^=d,a[7]^=c,a[16]^=d,a[17]^=c,a[26]^=d,a[27]^=c,a[36]^=d,a[37]^=c,a[46]^=d,a[47]^=c,d=p^(g<<1|h>>>31),c=q^(h<<1|g>>>31),a[8]^=d,a[9]^=c,a[18]^=d,a[19]^=c,a[28]^=d,a[29]^=c,a[38]^=d,a[39]^=c,a[48]^=d,a[49]^=c,d=a[0],c=a[1],W=a[11]<<4|a[10]>>>28,X=a[10]<<4|a[11]>>>28,y=a[20]<<3|a[21]>>>29,z=a[21]<<3|a[20]>>>29,ka=a[31]<<9|a[30]>>>23,la=a[30]<<9|a[31]>>> +23,S=a[40]<<18|a[41]>>>14,T=a[41]<<18|a[40]>>>14,K=a[2]<<1|a[3]>>>31,L=a[3]<<1|a[2]>>>31,g=a[13]<<12|a[12]>>>20,h=a[12]<<12|a[13]>>>20,Y=a[22]<<10|a[23]>>>22,Z=a[23]<<10|a[22]>>>22,G=a[33]<<13|a[32]>>>19,H=a[32]<<13|a[33]>>>19,ma=a[42]<<2|a[43]>>>30,na=a[43]<<2|a[42]>>>30,ea=a[5]<<30|a[4]>>>2,fa=a[4]<<30|a[5]>>>2,M=a[14]<<6|a[15]>>>26,N=a[15]<<6|a[14]>>>26,k=a[25]<<11|a[24]>>>21,l=a[24]<<11|a[25]>>>21,aa=a[34]<<15|a[35]>>>17,ba=a[35]<<15|a[34]>>>17,I=a[45]<<29|a[44]>>>3,J=a[44]<<29|a[45]>>>3,r=a[6]<< +28|a[7]>>>4,t=a[7]<<28|a[6]>>>4,ga=a[17]<<23|a[16]>>>9,ha=a[16]<<23|a[17]>>>9,O=a[26]<<25|a[27]>>>7,P=a[27]<<25|a[26]>>>7,m=a[36]<<21|a[37]>>>11,n=a[37]<<21|a[36]>>>11,ca=a[47]<<24|a[46]>>>8,da=a[46]<<24|a[47]>>>8,U=a[8]<<27|a[9]>>>5,V=a[9]<<27|a[8]>>>5,w=a[18]<<20|a[19]>>>12,x=a[19]<<20|a[18]>>>12,ia=a[29]<<7|a[28]>>>25,ja=a[28]<<7|a[29]>>>25,Q=a[38]<<8|a[39]>>>24,R=a[39]<<8|a[38]>>>24,p=a[48]<<14|a[49]>>>18,q=a[49]<<14|a[48]>>>18,a[0]=d^~g&k,a[1]=c^~h&l,a[10]=r^~w&y,a[11]=t^~x&z,a[20]=K^~M&O,a[21]= +L^~N&P,a[30]=U^~W&Y,a[31]=V^~X&Z,a[40]=ea^~ga&ia,a[41]=fa^~ha&ja,a[2]=g^~k&m,a[3]=h^~l&n,a[12]=w^~y&G,a[13]=x^~z&H,a[22]=M^~O&Q,a[23]=N^~P&R,a[32]=W^~Y&aa,a[33]=X^~Z&ba,a[42]=ga^~ia&ka,a[43]=ha^~ja&la,a[4]=k^~m&p,a[5]=l^~n&q,a[14]=y^~G&I,a[15]=z^~H&J,a[24]=O^~Q&S,a[25]=P^~R&T,a[34]=Y^~aa&ca,a[35]=Z^~ba&da,a[44]=ia^~ka&ma,a[45]=ja^~la&na,a[6]=m^~p&d,a[7]=n^~q&c,a[16]=G^~I&r,a[17]=H^~J&t,a[26]=Q^~S&K,a[27]=R^~T&L,a[36]=aa^~ca&U,a[37]=ba^~da&V,a[46]=ka^~ma&ea,a[47]=la^~na&fa,a[8]=p^~d&g,a[9]=q^~c&h, +a[18]=I^~r&w,a[19]=J^~t&x,a[28]=S^~K&M,a[29]=T^~L&N,a[38]=ca^~U&W,a[39]=da^~V&X,a[48]=ma^~ea&ga,a[49]=na^~fa&ha,a[0]^=qa[f],a[1]^=qa[f+1]}while(!v);v="";if(va)d=a[0],c=a[1],g=a[2],h=a[3],k=a[4],l=a[5],m=a[6],n=a[7],p=a[8],q=a[9],r=a[10],t=a[11],w=a[12],x=a[13],y=a[14],z=a[15],v+=b[d>>4&15]+b[d&15]+b[d>>12&15]+b[d>>8&15]+b[d>>20&15]+b[d>>16&15]+b[d>>28&15]+b[d>>24&15]+b[c>>4&15]+b[c&15]+b[c>>12&15]+b[c>>8&15]+b[c>>20&15]+b[c>>16&15]+b[c>>28&15]+b[c>>24&15]+b[g>>4&15]+b[g&15]+b[g>>12&15]+b[g>>8&15]+ +b[g>>20&15]+b[g>>16&15]+b[g>>28&15]+b[g>>24&15]+b[h>>4&15]+b[h&15]+b[h>>12&15]+b[h>>8&15]+b[h>>20&15]+b[h>>16&15]+b[h>>28&15]+b[h>>24&15]+b[k>>4&15]+b[k&15]+b[k>>12&15]+b[k>>8&15]+b[k>>20&15]+b[k>>16&15]+b[k>>28&15]+b[k>>24&15]+b[l>>4&15]+b[l&15]+b[l>>12&15]+b[l>>8&15]+b[l>>20&15]+b[l>>16&15]+b[l>>28&15]+b[l>>24&15]+b[m>>4&15]+b[m&15]+b[m>>12&15]+b[m>>8&15]+b[m>>20&15]+b[m>>16&15]+b[m>>28&15]+b[m>>24&15],256<=C&&(v+=b[n>>4&15]+b[n&15]+b[n>>12&15]+b[n>>8&15]+b[n>>20&15]+b[n>>16&15]+b[n>>28&15]+b[n>> +24&15]),384<=C&&(v+=b[p>>4&15]+b[p&15]+b[p>>12&15]+b[p>>8&15]+b[p>>20&15]+b[p>>16&15]+b[p>>28&15]+b[p>>24&15]+b[q>>4&15]+b[q&15]+b[q>>12&15]+b[q>>8&15]+b[q>>20&15]+b[q>>16&15]+b[q>>28&15]+b[q>>24&15]+b[r>>4&15]+b[r&15]+b[r>>12&15]+b[r>>8&15]+b[r>>20&15]+b[r>>16&15]+b[r>>28&15]+b[r>>24&15]+b[t>>4&15]+b[t&15]+b[t>>12&15]+b[t>>8&15]+b[t>>20&15]+b[t>>16&15]+b[t>>28&15]+b[t>>24&15]),512==C&&(v+=b[w>>4&15]+b[w&15]+b[w>>12&15]+b[w>>8&15]+b[w>>20&15]+b[w>>16&15]+b[w>>28&15]+b[w>>24&15]+b[x>>4&15]+b[x&15]+ +b[x>>12&15]+b[x>>8&15]+b[x>>20&15]+b[x>>16&15]+b[x>>28&15]+b[x>>24&15]+b[y>>4&15]+b[y&15]+b[y>>12&15]+b[y>>8&15]+b[y>>20&15]+b[y>>16&15]+b[y>>28&15]+b[y>>24&15]+b[z>>4&15]+b[z&15]+b[z>>12&15]+b[z>>8&15]+b[z>>20&15]+b[z>>16&15]+b[z>>28&15]+b[z>>24&15]);else for(c=0,f=C/32;c>4&15]+b[d&15]+b[d>>12&15]+b[d>>8&15]+b[d>>20&15]+b[d>>16&15]+b[d>>28&15]+b[d>>24&15];return v};!u.JS_SHA3_TEST&&E?module.exports={sha3_512:A,sha3_384:ta,sha3_256:sa,sha3_224:ra}:u&&(u.sha3_512=A,u.sha3_384= +ta,u.sha3_256=sa,u.sha3_224=ra)})(this); diff --git a/package.json b/package.json index 2fd8f7c..88f1853 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-sha3", - "version": "0.1.1", + "version": "0.1.2", "description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.", "main": "src/sha3.js", "devDependencies": { diff --git a/src/sha3.js b/src/sha3.js index f140b7a..3a80fb8 100644 --- a/src/sha3.js +++ b/src/sha3.js @@ -1,5 +1,5 @@ /* - * js-sha3 v0.1.1 + * js-sha3 v0.1.2 * https://github.com/emn178/js-sha3 * * Copyright 2015, emn178@gmail.com @@ -13,7 +13,11 @@ var NODE_JS = typeof(module) != 'undefined'; if(NODE_JS) { root = global; + if(root.JS_SHA3_TEST) { + root.navigator = { userAgent: 'Chrome'}; + } } + var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; var HEX_CHARS = '0123456789abcdef'.split(''); var EXTRA = [1, 256, 65536, 16777216]; var SHIFT = [0, 8, 16, 24]; @@ -275,76 +279,102 @@ } while(!end); var hex = ''; - hex += HEX_CHARS[(s[0] >> 4) & 0x0F] + HEX_CHARS[s[0] & 0x0F] + - HEX_CHARS[(s[0] >> 12) & 0x0F] + HEX_CHARS[(s[0] >> 8) & 0x0F] + - HEX_CHARS[(s[0] >> 20) & 0x0F] + HEX_CHARS[(s[0] >> 16) & 0x0F] + - HEX_CHARS[(s[0] >> 28) & 0x0F] + HEX_CHARS[(s[0] >> 24) & 0x0F] + - HEX_CHARS[(s[1] >> 4) & 0x0F] + HEX_CHARS[s[1] & 0x0F] + - HEX_CHARS[(s[1] >> 12) & 0x0F] + HEX_CHARS[(s[1] >> 8) & 0x0F] + - HEX_CHARS[(s[1] >> 20) & 0x0F] + HEX_CHARS[(s[1] >> 16) & 0x0F] + - HEX_CHARS[(s[1] >> 28) & 0x0F] + HEX_CHARS[(s[1] >> 24) & 0x0F] + - HEX_CHARS[(s[2] >> 4) & 0x0F] + HEX_CHARS[s[2] & 0x0F] + - HEX_CHARS[(s[2] >> 12) & 0x0F] + HEX_CHARS[(s[2] >> 8) & 0x0F] + - HEX_CHARS[(s[2] >> 20) & 0x0F] + HEX_CHARS[(s[2] >> 16) & 0x0F] + - HEX_CHARS[(s[2] >> 28) & 0x0F] + HEX_CHARS[(s[2] >> 24) & 0x0F] + - HEX_CHARS[(s[3] >> 4) & 0x0F] + HEX_CHARS[s[3] & 0x0F] + - HEX_CHARS[(s[3] >> 12) & 0x0F] + HEX_CHARS[(s[3] >> 8) & 0x0F] + - HEX_CHARS[(s[3] >> 20) & 0x0F] + HEX_CHARS[(s[3] >> 16) & 0x0F] + - HEX_CHARS[(s[3] >> 28) & 0x0F] + HEX_CHARS[(s[3] >> 24) & 0x0F] + - HEX_CHARS[(s[4] >> 4) & 0x0F] + HEX_CHARS[s[4] & 0x0F] + - HEX_CHARS[(s[4] >> 12) & 0x0F] + HEX_CHARS[(s[4] >> 8) & 0x0F] + - HEX_CHARS[(s[4] >> 20) & 0x0F] + HEX_CHARS[(s[4] >> 16) & 0x0F] + - HEX_CHARS[(s[4] >> 28) & 0x0F] + HEX_CHARS[(s[4] >> 24) & 0x0F] + - HEX_CHARS[(s[5] >> 4) & 0x0F] + HEX_CHARS[s[5] & 0x0F] + - HEX_CHARS[(s[5] >> 12) & 0x0F] + HEX_CHARS[(s[5] >> 8) & 0x0F] + - HEX_CHARS[(s[5] >> 20) & 0x0F] + HEX_CHARS[(s[5] >> 16) & 0x0F] + - HEX_CHARS[(s[5] >> 28) & 0x0F] + HEX_CHARS[(s[5] >> 24) & 0x0F] + - HEX_CHARS[(s[6] >> 4) & 0x0F] + HEX_CHARS[s[6] & 0x0F] + - HEX_CHARS[(s[6] >> 12) & 0x0F] + HEX_CHARS[(s[6] >> 8) & 0x0F] + - HEX_CHARS[(s[6] >> 20) & 0x0F] + HEX_CHARS[(s[6] >> 16) & 0x0F] + - HEX_CHARS[(s[6] >> 28) & 0x0F] + HEX_CHARS[(s[6] >> 24) & 0x0F]; + if(CHROME) { + b0 = s[0]; + b1 = s[1]; + b2 = s[2]; + b3 = s[3]; + b4 = s[4]; + b5 = s[5]; + b6 = s[6]; + b7 = s[7]; + b8 = s[8]; + b9 = s[9]; + b10 = s[10]; + b11 = s[11]; + b12 = s[12]; + b13 = s[13]; + b14 = s[14]; + b15 = s[15]; + hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + + HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + + HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + + HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + + HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + + HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + + HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + + HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + + HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + + HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + + HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + + HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + + HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + + HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + + HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + + HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + + HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + + HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + + HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + + HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + + HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + + HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + + HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + + HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + + HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + + HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + + HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + + HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; - if(bits >= 256) { - hex += HEX_CHARS[(s[7] >> 4) & 0x0F] + HEX_CHARS[s[7] & 0x0F] + - HEX_CHARS[(s[7] >> 12) & 0x0F] + HEX_CHARS[(s[7] >> 8) & 0x0F] + - HEX_CHARS[(s[7] >> 20) & 0x0F] + HEX_CHARS[(s[7] >> 16) & 0x0F] + - HEX_CHARS[(s[7] >> 28) & 0x0F] + HEX_CHARS[(s[7] >> 24) & 0x0F]; - } - if(bits >= 384) { - hex += HEX_CHARS[(s[8] >> 4) & 0x0F] + HEX_CHARS[s[8] & 0x0F] + - HEX_CHARS[(s[8] >> 12) & 0x0F] + HEX_CHARS[(s[8] >> 8) & 0x0F] + - HEX_CHARS[(s[8] >> 20) & 0x0F] + HEX_CHARS[(s[8] >> 16) & 0x0F] + - HEX_CHARS[(s[8] >> 28) & 0x0F] + HEX_CHARS[(s[8] >> 24) & 0x0F] + - HEX_CHARS[(s[9] >> 4) & 0x0F] + HEX_CHARS[s[9] & 0x0F] + - HEX_CHARS[(s[9] >> 12) & 0x0F] + HEX_CHARS[(s[9] >> 8) & 0x0F] + - HEX_CHARS[(s[9] >> 20) & 0x0F] + HEX_CHARS[(s[9] >> 16) & 0x0F] + - HEX_CHARS[(s[9] >> 28) & 0x0F] + HEX_CHARS[(s[9] >> 24) & 0x0F] + - HEX_CHARS[(s[10] >> 4) & 0x0F] + HEX_CHARS[s[10] & 0x0F] + - HEX_CHARS[(s[10] >> 12) & 0x0F] + HEX_CHARS[(s[10] >> 8) & 0x0F] + - HEX_CHARS[(s[10] >> 20) & 0x0F] + HEX_CHARS[(s[10] >> 16) & 0x0F] + - HEX_CHARS[(s[10] >> 28) & 0x0F] + HEX_CHARS[(s[10] >> 24) & 0x0F] + - HEX_CHARS[(s[11] >> 4) & 0x0F] + HEX_CHARS[s[11] & 0x0F] + - HEX_CHARS[(s[11] >> 12) & 0x0F] + HEX_CHARS[(s[11] >> 8) & 0x0F] + - HEX_CHARS[(s[11] >> 20) & 0x0F] + HEX_CHARS[(s[11] >> 16) & 0x0F] + - HEX_CHARS[(s[11] >> 28) & 0x0F] + HEX_CHARS[(s[11] >> 24) & 0x0F]; - } - if(bits == 512) { - hex += HEX_CHARS[(s[12] >> 4) & 0x0F] + HEX_CHARS[s[12] & 0x0F] + - HEX_CHARS[(s[12] >> 12) & 0x0F] + HEX_CHARS[(s[12] >> 8) & 0x0F] + - HEX_CHARS[(s[12] >> 20) & 0x0F] + HEX_CHARS[(s[12] >> 16) & 0x0F] + - HEX_CHARS[(s[12] >> 28) & 0x0F] + HEX_CHARS[(s[12] >> 24) & 0x0F] + - HEX_CHARS[(s[13] >> 4) & 0x0F] + HEX_CHARS[s[13] & 0x0F] + - HEX_CHARS[(s[13] >> 12) & 0x0F] + HEX_CHARS[(s[13] >> 8) & 0x0F] + - HEX_CHARS[(s[13] >> 20) & 0x0F] + HEX_CHARS[(s[13] >> 16) & 0x0F] + - HEX_CHARS[(s[13] >> 28) & 0x0F] + HEX_CHARS[(s[13] >> 24) & 0x0F] + - HEX_CHARS[(s[14] >> 4) & 0x0F] + HEX_CHARS[s[14] & 0x0F] + - HEX_CHARS[(s[14] >> 12) & 0x0F] + HEX_CHARS[(s[14] >> 8) & 0x0F] + - HEX_CHARS[(s[14] >> 20) & 0x0F] + HEX_CHARS[(s[14] >> 16) & 0x0F] + - HEX_CHARS[(s[14] >> 28) & 0x0F] + HEX_CHARS[(s[14] >> 24) & 0x0F] + - HEX_CHARS[(s[15] >> 4) & 0x0F] + HEX_CHARS[s[15] & 0x0F] + - HEX_CHARS[(s[15] >> 12) & 0x0F] + HEX_CHARS[(s[15] >> 8) & 0x0F] + - HEX_CHARS[(s[15] >> 20) & 0x0F] + HEX_CHARS[(s[15] >> 16) & 0x0F] + - HEX_CHARS[(s[15] >> 28) & 0x0F] + HEX_CHARS[(s[15] >> 24) & 0x0F]; + if(bits >= 256) { + hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + + HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + + HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + + HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; + } + if(bits >= 384) { + hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + + HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + + HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + + HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + + HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + + HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + + HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + + HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + + HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + + HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + + HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + + HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + + HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + + HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + + HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + + HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; + } + if(bits == 512) { + hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + + HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + + HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + + HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + + HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + + HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + + HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + + HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + + HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + + HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + + HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + + HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + + HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + + HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + + HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + + HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; + } + } else { + for(i = 0, n = bits / 32;i < n;++i) { + h = s[i]; + hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + + HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + + HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + + HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; + } } return hex; };