diff --git a/CHANGELOG.md b/CHANGELOG.md index 460695c..862da1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,54 +1,66 @@ -# v0.5.4 / 2016-09-12 - -* Added CommonJS detection. - -# v0.5.3 / 2016-09-08 - -* Added some files to npm package. - -# v0.5.2 / 2016-06-06 - -* Fixed shake output incorrect in the special length. - -# v0.5.1 / 2015-10-27 - -* Update package.json and bower.json. - -# v0.5.0 / 2015-09-23 - -* Support update interface. - -# v0.4.1 / 2015-09-18 - -* Support to output Integer Array. -* Fixed shake output incorrect when it's greater than 1088. - -# v0.4.0 / 2015-09-17 - -* Support to output ArrayBuffer. -* Add shake alogirthms. - -# v0.3.1 / 2015-05-22 - -* Fixed bugs. - -# v0.3.0 / 2015-05-21 - -* Support byte array and ArrayBuffer input. - -# v0.2.0 / 2015-04-04 - -* Implement NIST's May 2014 SHA-3 version. -* Rename original methods to keccak. - -# v0.1.2 / 2015-02-27 - -* Improve performance. - -# v0.1.1 / 2015-02-26 - -* Improve performance. - -# v0.1.0 / 2015-02-23 - -* Initial release +# Change Log + +## v0.5.5 / 2016-09-26 +### Added +- TypeScript support. +- ArrayBuffer method. +### Deprecated +- Buffer method. + +## v0.5.4 / 2016-09-12 +### Fixed +- CommonJS detection. + +## v0.5.3 / 2016-09-08 +### Added +- Some missing files to npm package. + +## v0.5.2 / 2016-06-06 +### Fixed +- Shake output incorrect in the special length. + +## v0.5.1 / 2015-10-27 +### Fixed +- Version in package.json and bower.json. + +## v0.5.0 / 2015-09-23 +### Added +- Hash object with create/update interface. + +## v0.4.1 / 2015-09-18 +### Added +- Integer array output. +### Fixed +- Shake output incorrect when it's greater than 1088. + +## v0.4.0 / 2015-09-17 +### Added +- ArrayBuffer output. +- Shake alogirthms. + +## v0.3.1 / 2015-05-22 +### Fixed +- Some bugs. + +## v0.3.0 / 2015-05-21 +### Added +- Integer array input. +- ArrayBuffer input. + +## v0.2.0 / 2015-04-04 +### Added +- NIST's May 2014 SHA-3 version. +### Changed +- Rename original methods to keccak. + +## v0.1.2 / 2015-02-27 +### Changed +- Improve performance. + +## v0.1.1 / 2015-02-26 +### Changed +- Improve performance. + +## v0.1.0 / 2015-02-23 +### Added +- First version implementation. diff --git a/README.md b/README.md index fd99ed7..bdb85a4 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # js-sha3 [![Build Status](https://travis-ci.org/emn178/js-sha3.svg?branch=master)](https://travis-ci.org/emn178/js-sha3) -[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) +[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) +[![NPM](https://nodei.co/npm/js-sha3.png?stars&downloads)](https://nodei.co/npm/js-sha3/) A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding. ## Notice -Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later. +* Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later. +* `buffer` method is deprecated. This maybe confuse with Buffer in node.js. Please use `arrayBuffer` instead. ## Demo [SHA3-512 Online](http://emn178.github.io/online-tools/sha3_512.html) @@ -17,6 +19,8 @@ Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods [Keccak-384 Online](http://emn178.github.io/online-tools/keccak_384.html) [Keccak-256 Online](http://emn178.github.io/online-tools/keccak_256.html) [Keccak-224 Online](http://emn178.github.io/online-tools/keccak_224.html) +[Shake-128 Online](http://emn178.github.io/online-tools/shake_128.html) +[Shake-256 Online](http://emn178.github.io/online-tools/shake_256.html) ## Download [Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js) diff --git a/bower.json b/bower.json index ee901a1..86f09f5 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "js-sha3", - "version": "0.5.4", + "version": "0.5.5", "main": ["src/sha3.js"], "ignore": [ "samples", diff --git a/build/sha3.min.js b/build/sha3.min.js index ba8a9db..7e6cf95 100644 --- a/build/sha3.min.js +++ b/build/sha3.min.js @@ -1,22 +1,22 @@ /** * [js-sha3]{@link https://github.com/emn178/js-sha3} * - * @version 0.5.4 + * @version 0.5.5 * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2015-2016 * @license MIT */ (function(r){function n(a,b,c){this.blocks=[];this.s=[];this.padding=b;this.outputBits=c;this.reset=!0;this.start=this.block=0;this.blockCount=1600-(a<<1)>>5;this.byteCount=this.blockCount<<2;this.outputBlocks=c>>5;this.extraBytes=(c&31)>>3;for(a=0;50>a;++a)this.s[a]=0}"object"==typeof process&&process.versions&&process.versions.node&&(r=global);for(var ka=!r.JS_SHA3_TEST&&"object"==typeof module&&module.exports,l="0123456789abcdef".split(""),p=[0,8,16,24],ga=[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],t=[224,256,384,512],w=["hex","buffer","array"],ha=function(a,b,c){return function(e){return(new n(a,b,a)).update(e)[c]()}},ia=function(a,b,c){return function(e,g){return(new n(a,b,g)).update(e)[c]()}}, -q=function(a,b){var c=ha(a,b,"hex");c.create=function(){return new n(a,b,a)};c.update=function(a){return c.create().update(a)};for(var e=0;e>2]|=a[h]<m?e[d>>2]|=m<m?e[d>>2]|=(192|m>>6)<m||57344<=m?e[d>>2]|=(224|m>>12)<>2]|=(240|m>>18)<>2]|=(128|m>>12&63)<>2]|=(128|m>>6&63)<>2]|=(128|m&63)<=g){this.start=d-g;this.block=e[k];for(d=0;d>2]|=this.padding[b&3];if(this.lastByteIndex==this.byteCount)for(a[0]=a[c],b=1;b> -4&15]+l[f&15]+l[f>>12&15]+l[f>>8&15]+l[f>>20&15]+l[f>>16&15]+l[f>>28&15]+l[f>>24&15];0==k%a&&(v(b),g=0)}e&&(f=b[g],0>4&15]+l[f&15]),1>12&15]+l[f>>8&15]),2>20&15]+l[f>>16&15]));return h};n.prototype.buffer=function(){this.finalize();var a=this.blockCount,b=this.s,c=this.outputBlocks,e=this.extraBytes,g=0,k=0,h=this.outputBits>>3,f;f=e?new ArrayBuffer(c+1<<2):new ArrayBuffer(h);for(var d=new Uint32Array(f);k>8&255,h[f+2]=d>>16&255,h[f+3]=d>>24&255;0==k%a&&v(b)}e&&(f=k<<2,d=b[g],0>8&255),2>16&255));return h};var v=function(a){var b,c,e,g,k,h,f,d,m,l,n,p,q,r,t,u,v,w,x,y,z,A,B,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;for(e=0;48>e;e+=2)g=a[0]^a[10]^a[20]^a[30]^a[40],k=a[1]^a[11]^a[21]^a[31]^a[41],h=a[2]^a[12]^a[22]^a[32]^a[42],f=a[3]^a[13]^a[23]^a[33]^a[43],d=a[4]^a[14]^a[24]^a[34]^a[44],m=a[5]^a[15]^a[25]^a[35]^a[45],l=a[6]^a[16]^a[26]^a[36]^a[46],n=a[7]^a[17]^a[27]^a[37]^a[47],p=a[8]^a[18]^a[28]^a[38]^a[48],q=a[9]^a[19]^a[29]^a[39]^a[49],b=p^(h<<1|f>>>31),c=q^(f<<1|h>>>31),a[0]^=b,a[1]^=c,a[10]^=b,a[11]^=c,a[20]^=b,a[21]^=c,a[30]^=b,a[31]^=c,a[40]^=b,a[41]^=c,b=g^(d<<1|m>>>31),c= -k^(m<<1|d>>>31),a[2]^=b,a[3]^=c,a[12]^=b,a[13]^=c,a[22]^=b,a[23]^=c,a[32]^=b,a[33]^=c,a[42]^=b,a[43]^=c,b=h^(l<<1|n>>>31),c=f^(n<<1|l>>>31),a[4]^=b,a[5]^=c,a[14]^=b,a[15]^=c,a[24]^=b,a[25]^=c,a[34]^=b,a[35]^=c,a[44]^=b,a[45]^=c,b=d^(p<<1|q>>>31),c=m^(q<<1|p>>>31),a[6]^=b,a[7]^=c,a[16]^=b,a[17]^=c,a[26]^=b,a[27]^=c,a[36]^=b,a[37]^=c,a[46]^=b,a[47]^=c,b=l^(g<<1|k>>>31),c=n^(k<<1|g>>>31),a[8]^=b,a[9]^=c,a[18]^=b,a[19]^=c,a[28]^=b,a[29]^=c,a[38]^=b,a[39]^=c,a[48]^=b,a[49]^=c,b=a[0],c=a[1],M=a[11]<<4| -a[10]>>>28,N=a[10]<<4|a[11]>>>28,u=a[20]<<3|a[21]>>>29,v=a[21]<<3|a[20]>>>29,aa=a[31]<<9|a[30]>>>23,ba=a[30]<<9|a[31]>>>23,I=a[40]<<18|a[41]>>>14,J=a[41]<<18|a[40]>>>14,A=a[2]<<1|a[3]>>>31,B=a[3]<<1|a[2]>>>31,g=a[13]<<12|a[12]>>>20,k=a[12]<<12|a[13]>>>20,O=a[22]<<10|a[23]>>>22,P=a[23]<<10|a[22]>>>22,w=a[33]<<13|a[32]>>>19,x=a[32]<<13|a[33]>>>19,ca=a[42]<<2|a[43]>>>30,da=a[43]<<2|a[42]>>>30,U=a[5]<<30|a[4]>>>2,V=a[4]<<30|a[5]>>>2,C=a[14]<<6|a[15]>>>26,D=a[15]<<6|a[14]>>>26,h=a[25]<<11|a[24]>>>21,f= -a[24]<<11|a[25]>>>21,Q=a[34]<<15|a[35]>>>17,R=a[35]<<15|a[34]>>>17,y=a[45]<<29|a[44]>>>3,z=a[44]<<29|a[45]>>>3,p=a[6]<<28|a[7]>>>4,q=a[7]<<28|a[6]>>>4,W=a[17]<<23|a[16]>>>9,X=a[16]<<23|a[17]>>>9,E=a[26]<<25|a[27]>>>7,F=a[27]<<25|a[26]>>>7,d=a[36]<<21|a[37]>>>11,m=a[37]<<21|a[36]>>>11,S=a[47]<<24|a[46]>>>8,T=a[46]<<24|a[47]>>>8,K=a[8]<<27|a[9]>>>5,L=a[9]<<27|a[8]>>>5,r=a[18]<<20|a[19]>>>12,t=a[19]<<20|a[18]>>>12,Y=a[29]<<7|a[28]>>>25,Z=a[28]<<7|a[29]>>>25,G=a[38]<<8|a[39]>>>24,H=a[39]<<8|a[38]>>>24, -l=a[48]<<14|a[49]>>>18,n=a[49]<<14|a[48]>>>18,a[0]=b^~g&h,a[1]=c^~k&f,a[10]=p^~r&u,a[11]=q^~t&v,a[20]=A^~C&E,a[21]=B^~D&F,a[30]=K^~M&O,a[31]=L^~N&P,a[40]=U^~W&Y,a[41]=V^~X&Z,a[2]=g^~h&d,a[3]=k^~f&m,a[12]=r^~u&w,a[13]=t^~v&x,a[22]=C^~E&G,a[23]=D^~F&H,a[32]=M^~O&Q,a[33]=N^~P&R,a[42]=W^~Y&aa,a[43]=X^~Z&ba,a[4]=h^~d&l,a[5]=f^~m&n,a[14]=u^~w&y,a[15]=v^~x&z,a[24]=E^~G&I,a[25]=F^~H&J,a[34]=O^~Q&S,a[35]=P^~R&T,a[44]=Y^~aa&ca,a[45]=Z^~ba&da,a[6]=d^~l&b,a[7]=m^~n&c,a[16]=w^~y&p,a[17]=x^~z&q,a[26]=G^~I&A,a[27]= -H^~J&B,a[36]=Q^~S&K,a[37]=R^~T&L,a[46]=aa^~ca&U,a[47]=ba^~da&V,a[8]=l^~b&g,a[9]=n^~c&k,a[18]=y^~p&r,a[19]=z^~q&t,a[28]=I^~A&C,a[29]=J^~B&D,a[38]=S^~K&M,a[39]=T^~L&N,a[48]=ca^~U&W,a[49]=da^~V&X,a[0]^=ga[e],a[1]^=ga[e+1]};if(ka)module.exports=x;else if(r)for(var ja in x)r[ja]=x[ja]})(this); +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],t=[224,256,384,512],v=["hex","buffer","arrayBuffer","array"],ha=function(a,b,c){return function(e){return(new n(a,b,a)).update(e)[c]()}},ia=function(a,b,c){return function(e,g){return(new n(a,b, +g)).update(e)[c]()}},q=function(a,b){var c=ha(a,b,"hex");c.create=function(){return new n(a,b,a)};c.update=function(a){return c.create().update(a)};for(var e=0;e>2]|=a[h]<m?e[d>>2]|=m<m?e[d>>2]|=(192|m>>6)<m||57344<=m?e[d>>2]|=(224|m>>12)<>2]|=(240|m>>18)<>2]|=(128|m>>12&63)<>2]|=(128|m>>6&63)<>2]|=(128|m&63)<=g){this.start=d-g;this.block=e[k];for(d=0;d>2]|=this.padding[b&3];if(this.lastByteIndex==this.byteCount)for(a[0]=a[c],b=1;b> +4&15]+l[f&15]+l[f>>12&15]+l[f>>8&15]+l[f>>20&15]+l[f>>16&15]+l[f>>28&15]+l[f>>24&15];0==k%a&&(u(b),g=0)}e&&(f=b[g],0>4&15]+l[f&15]),1>12&15]+l[f>>8&15]),2>20&15]+l[f>>16&15]));return h};n.prototype.arrayBuffer=function(){this.finalize();var a=this.blockCount,b=this.s,c=this.outputBlocks,e=this.extraBytes,g=0,k=0,h=this.outputBits>>3,f;f=e?new ArrayBuffer(c+1<<2):new ArrayBuffer(h);for(var d=new Uint32Array(f);k>8&255,h[f+2]=d>>16&255,h[f+3]=d>>24&255;0==k%a&&u(b)}e&&(f=k<<2,d=b[g],0>8&255),2>16&255));return h};var u=function(a){var b,c,e,g,k,h,f,d,m,l,n,p,y,q,r,t, +u,v,w,x,z,A,B,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;for(e=0;48>e;e+=2)g=a[0]^a[10]^a[20]^a[30]^a[40],k=a[1]^a[11]^a[21]^a[31]^a[41],h=a[2]^a[12]^a[22]^a[32]^a[42],f=a[3]^a[13]^a[23]^a[33]^a[43],d=a[4]^a[14]^a[24]^a[34]^a[44],m=a[5]^a[15]^a[25]^a[35]^a[45],l=a[6]^a[16]^a[26]^a[36]^a[46],n=a[7]^a[17]^a[27]^a[37]^a[47],p=a[8]^a[18]^a[28]^a[38]^a[48],y=a[9]^a[19]^a[29]^a[39]^a[49],b=p^(h<<1|f>>>31),c=y^(f<<1|h>>>31),a[0]^=b,a[1]^=c,a[10]^=b,a[11]^=c,a[20]^=b,a[21]^=c,a[30]^=b,a[31]^= +c,a[40]^=b,a[41]^=c,b=g^(d<<1|m>>>31),c=k^(m<<1|d>>>31),a[2]^=b,a[3]^=c,a[12]^=b,a[13]^=c,a[22]^=b,a[23]^=c,a[32]^=b,a[33]^=c,a[42]^=b,a[43]^=c,b=h^(l<<1|n>>>31),c=f^(n<<1|l>>>31),a[4]^=b,a[5]^=c,a[14]^=b,a[15]^=c,a[24]^=b,a[25]^=c,a[34]^=b,a[35]^=c,a[44]^=b,a[45]^=c,b=d^(p<<1|y>>>31),c=m^(y<<1|p>>>31),a[6]^=b,a[7]^=c,a[16]^=b,a[17]^=c,a[26]^=b,a[27]^=c,a[36]^=b,a[37]^=c,a[46]^=b,a[47]^=c,b=l^(g<<1|k>>>31),c=n^(k<<1|g>>>31),a[8]^=b,a[9]^=c,a[18]^=b,a[19]^=c,a[28]^=b,a[29]^=c,a[38]^=b,a[39]^=c,a[48]^= +b,a[49]^=c,b=a[0],c=a[1],M=a[11]<<4|a[10]>>>28,N=a[10]<<4|a[11]>>>28,t=a[20]<<3|a[21]>>>29,u=a[21]<<3|a[20]>>>29,aa=a[31]<<9|a[30]>>>23,ba=a[30]<<9|a[31]>>>23,I=a[40]<<18|a[41]>>>14,J=a[41]<<18|a[40]>>>14,A=a[2]<<1|a[3]>>>31,B=a[3]<<1|a[2]>>>31,g=a[13]<<12|a[12]>>>20,k=a[12]<<12|a[13]>>>20,O=a[22]<<10|a[23]>>>22,P=a[23]<<10|a[22]>>>22,v=a[33]<<13|a[32]>>>19,w=a[32]<<13|a[33]>>>19,ca=a[42]<<2|a[43]>>>30,da=a[43]<<2|a[42]>>>30,U=a[5]<<30|a[4]>>>2,V=a[4]<<30|a[5]>>>2,C=a[14]<<6|a[15]>>>26,D=a[15]<<6| +a[14]>>>26,h=a[25]<<11|a[24]>>>21,f=a[24]<<11|a[25]>>>21,Q=a[34]<<15|a[35]>>>17,R=a[35]<<15|a[34]>>>17,x=a[45]<<29|a[44]>>>3,z=a[44]<<29|a[45]>>>3,p=a[6]<<28|a[7]>>>4,y=a[7]<<28|a[6]>>>4,W=a[17]<<23|a[16]>>>9,X=a[16]<<23|a[17]>>>9,E=a[26]<<25|a[27]>>>7,F=a[27]<<25|a[26]>>>7,d=a[36]<<21|a[37]>>>11,m=a[37]<<21|a[36]>>>11,S=a[47]<<24|a[46]>>>8,T=a[46]<<24|a[47]>>>8,K=a[8]<<27|a[9]>>>5,L=a[9]<<27|a[8]>>>5,q=a[18]<<20|a[19]>>>12,r=a[19]<<20|a[18]>>>12,Y=a[29]<<7|a[28]>>>25,Z=a[28]<<7|a[29]>>>25,G=a[38]<< +8|a[39]>>>24,H=a[39]<<8|a[38]>>>24,l=a[48]<<14|a[49]>>>18,n=a[49]<<14|a[48]>>>18,a[0]=b^~g&h,a[1]=c^~k&f,a[10]=p^~q&t,a[11]=y^~r&u,a[20]=A^~C&E,a[21]=B^~D&F,a[30]=K^~M&O,a[31]=L^~N&P,a[40]=U^~W&Y,a[41]=V^~X&Z,a[2]=g^~h&d,a[3]=k^~f&m,a[12]=q^~t&v,a[13]=r^~u&w,a[22]=C^~E&G,a[23]=D^~F&H,a[32]=M^~O&Q,a[33]=N^~P&R,a[42]=W^~Y&aa,a[43]=X^~Z&ba,a[4]=h^~d&l,a[5]=f^~m&n,a[14]=t^~v&x,a[15]=u^~w&z,a[24]=E^~G&I,a[25]=F^~H&J,a[34]=O^~Q&S,a[35]=P^~R&T,a[44]=Y^~aa&ca,a[45]=Z^~ba&da,a[6]=d^~l&b,a[7]=m^~n&c,a[16]= +v^~x&p,a[17]=w^~z&y,a[26]=G^~I&A,a[27]=H^~J&B,a[36]=Q^~S&K,a[37]=R^~T&L,a[46]=aa^~ca&U,a[47]=ba^~da&V,a[8]=l^~b&g,a[9]=n^~c&k,a[18]=x^~p&q,a[19]=z^~y&r,a[28]=I^~A&C,a[29]=J^~B&D,a[38]=S^~K&M,a[39]=T^~L&N,a[48]=ca^~U&W,a[49]=da^~V&X,a[0]^=ga[e],a[1]^=ga[e+1]};if(ka)module.exports=q;else if(r)for(var ja in q)r[ja]=q[ja]})(this); diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..d339742 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,92 @@ +type Message = string | number[] | ArrayBuffer | Uint8Array; + +interface Hasher { + /** + * Update hash + * + * @param message The message you want to hash. + */ + update(message: Message): Hasher; + + /** + * Return hash in hex string. + */ + hex(): string; + + /** + * Return hash in hex string. + */ + toString(): string; + + /** + * Return hash in ArrayBuffer. + */ + arrayBuffer(): ArrayBuffer; + + /** + * Return hash in integer array. + */ + digest(): number[]; + + /** + * Return hash in integer array. + */ + array(): number[]; +} + +interface Hash { + /** + * Hash and return hex string. + * + * @param message The message you want to hash. + */ + (message: Message): string; + + /** + * Create a hash object. + */ + create(): Hasher; + + /** + * Create a hash object and hash message. + * + * @param message The message you want to hash. + */ + update(message: Message): Hasher; +} + +interface ShakeHash { + /** + * Hash and return hex string. + * + * @param message The message you want to hash. + * @param outputBits The length of output. + */ + (message: Message, outputBits: number): string; + + /** + * Create a hash object. + * + * @param outputBits The length of output. + */ + create(outputBits: number): Hasher; + + /** + * Create a hash object and hash message. + * + * @param message The message you want to hash. + * @param outputBits The length of output. + */ + update(message: Message, outputBits: number): Hasher; +} + +export var sha3_512: Hash; +export var sha3_384: Hash; +export var sha3_256: Hash; +export var sha3_224: Hash; +export var keccak_512: Hash; +export var keccak_384: Hash; +export var keccak_256: Hash; +export var keccak_224: Hash; +export var shake_128: ShakeHash; +export var shake_256: ShakeHash; diff --git a/package.json b/package.json index dcace41..a8a50e6 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { "name": "js-sha3", - "version": "0.5.4", + "version": "0.5.5", "description": "A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding.", "main": "src/sha3.js", + "typings": "index", "devDependencies": { "expect.js": "~0.3.1", "jscoverage": "~0.5.9", diff --git a/src/sha3.js b/src/sha3.js index c4b468f..3235233 100644 --- a/src/sha3.js +++ b/src/sha3.js @@ -1,7 +1,7 @@ /** * [js-sha3]{@link https://github.com/emn178/js-sha3} * - * @version 0.5.4 + * @version 0.5.5 * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2015-2016 * @license MIT @@ -26,7 +26,7 @@ 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; var BITS = [224, 256, 384, 512]; var SHAKE_BITS = [128, 256]; - var OUTPUT_TYPES = ['hex', 'buffer', 'array']; + var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array']; var createOutputMethod = function (bits, padding, outputType) { return function (message) { @@ -81,10 +81,8 @@ for (var i = 0;i < algorithms.length;++i) { var algorithm = algorithms[i]; var bits = algorithm.bits; - var createMethod = algorithm.createMethod; for (var j = 0;j < bits.length;++j) { - var method = algorithm.createMethod(bits[j], algorithm.padding); - methods[algorithm.name +'_' + bits[j]] = method; + methods[algorithm.name +'_' + bits[j]] = algorithm.createMethod(bits[j], algorithm.padding); } } @@ -213,7 +211,7 @@ return hex; }; - Keccak.prototype.buffer = function () { + Keccak.prototype.arrayBuffer = function () { this.finalize(); var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, @@ -241,6 +239,8 @@ return buffer; }; + Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; + Keccak.prototype.digest = Keccak.prototype.array = function () { this.finalize(); diff --git a/tests/test.js b/tests/test.js index 46571c8..1151407 100644 --- a/tests/test.js +++ b/tests/test.js @@ -239,8 +239,9 @@ runTestCases(methods, testCases); describe('sha3_512', function () { - context('#buffer', function () { + context('#arrayBuffer', function () { it('should be equal', function () { + expect(sha3_512.arrayBuffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); expect(sha3_512.buffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); }); }); @@ -300,6 +301,7 @@ context('when output ArrayBuffer', function () { it('should be equal', function () { + expect(keccak_512.arrayBuffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); expect(keccak_512.buffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); }); });