diff --git a/.covignore b/.covignore index 016f806..c5e2446 100644 --- a/.covignore +++ b/.covignore @@ -1 +1,2 @@ +/node_modules/ /tests/ diff --git a/.gitignore b/.gitignore index c2658d7..856f74c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules/ +/node_modules/ +/covreporter/ diff --git a/.travis.yml b/.travis.yml index aabe614..4036a6f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,11 @@ language: node_js node_js: - - "0.11" - - "0.10" - - "0.8" + - "0.12.15" + - "4.5" + - "6.5.0" before_install: - - npm install mocha -g - - npm install coveralls -g - - npm install mocha-lcov-reporter -g + - npm install coveralls + - npm install mocha-lcov-reporter script: npm run-script coveralls branches: only: diff --git a/CHANGELOG.md b/CHANGELOG.md index 62ae794..670c5f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,34 +1,47 @@ -# v0.2.2 / 2015-02-09 - -* Improve performance. - -# v0.2.1 / 2015-02-08 - -* Remove ascii parameter. -* Improve performance. -* Add test cases. - -# v0.2.0 / 2015-02-02 - -* Add test cases. -* Improve performance. - -# v0.1.3 / 2015-01-26 - -* Add test cases. -* Improve performance. - -# v0.1.2 / 2015-01-07 - -* Add bower package. -* Fixed JSHint warnings. -* Add travis. -* Add coveralls. - -# v0.1.1 / 2014-07-27 - -Fixed accents bug - -# v0.1.0 / 2014-01-05 - -Initial release +# Change Log + +## v0.3.0 / 2017-01-23 +### Added +- AMD support. +### Fixed +- ArrayBuffer dosen't work in Webpack. + +## v0.2.2 / 2015-02-09 +### Improved +- performance. + +## v0.2.1 / 2015-02-08 +### Added +- test cases. +### Removed +- ascii parameter. +### Improved +- performance. + +## v0.2.0 / 2015-02-02 +### Added +- test cases. +### Improved +- performance. + +## v0.1.3 / 2015-01-26 +### Added +- test cases. +### Improved +- performance. + +## v0.1.2 / 2015-01-07 +### Added +- bower package. +- travis. +- coveralls. +### Fixed +- JSHint warnings. + +## v0.1.1 / 2014-07-27 +### Fixed +- accents bug. + +## v0.1.0 / 2014-01-05 +### Added +- initial release. diff --git a/LICENSE.txt b/LICENSE.txt index 58074d3..74ac20d 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright 2014-2015 emn178@gmail.com +Copyright 2014-2017 Chen, Yi-Cyuan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index c374eeb..b43f8d1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # js-sha512 [![Build Status](https://travis-ci.org/emn178/js-sha512.svg?branch=master)](https://travis-ci.org/emn178/js-sha512) [![Coverage Status](https://coveralls.io/repos/emn178/js-sha512/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha512?branch=master) -[![CDNJS](https://img.shields.io/cdnjs/v/js-sha512.svg)](https://cdnjs.com/libraries/js-sha512/) +[![CDNJS](https://img.shields.io/cdnjs/v/js-sha512.svg)](https://cdnjs.com/libraries/js-sha512/) [![NPM](https://nodei.co/npm/js-sha512.png?stars&downloads)](https://nodei.co/npm/js-sha512/) A simple SHA-512, SHA-384, SHA-512/224, SHA-512/256 hash functions for JavaScript supports UTF-8 encoding. @@ -34,112 +34,46 @@ sha512_224('Message to hash'); ``` If you use node.js, you should require the module first: ```JavaScript -sha512 = require('js-sha512'); +var sha512 = require('js-sha512'); ``` or ```JavaScript -sha512 = require('js-sha512').sha512; -sha384 = require('js-sha512').sha384; -sha512_256 = require('js-sha512').sha512_256; -sha512_224 = require('js-sha512').sha512_224; +var sha512 = require('js-sha512').sha512; +var sha384 = require('js-sha512').sha384; +var sha512_256 = require('js-sha512').sha512_256; +var sha512_224 = require('js-sha512').sha512_224; ``` -## Example -Code +It supports AMD: ```JavaScript -sha512(''); -sha512('The quick brown fox jumps over the lazy dog'); -sha512('The quick brown fox jumps over the lazy dog.'); -sha384(''); -sha384('The quick brown fox jumps over the lazy dog'); -sha384('The quick brown fox jumps over the lazy dog.'); -sha512_256(''); -sha512_256('The quick brown fox jumps over the lazy dog'); -sha512_256('The quick brown fox jumps over the lazy dog.'); -sha512_224(''); -sha512_224('The quick brown fox jumps over the lazy dog'); -sha512_224('The quick brown fox jumps over the lazy dog.'); +require(['your/path/sha512.js'], function(sha512) { +// ... +}); ``` -Output - - cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e - 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 - 91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed - 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b - ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 - ed892481d8272ca6df370bf706e4d7bc1b5739fa2177aae6c50e946678718fc67a7af2819a021c2fc34e91bdb63409d7 - c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a - dd9d67b371519c339ed8dbd25af90e976a1eeefd4ad3d889005e532fc5bef04d - 1546741840f8a492b959d9b8b2344b9b0eb51b004bba35c0aebaac86d45264c3 - 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 - 944cd2847fb54558d4775db0485a50003111c8e5daa63fe722c6aa37 - 6d6a9279495ec4061769752e7ff9c68b6b0b3c5a281b7917ce0572de - -It also supports UTF-8 encoding: - -Code -```JavaScript -sha512('中文'); -sha384('中文'); -sha512_256('中文'); -sha512_224('中文'); -``` -Output - - 8b88efc2ebbcbdad5ac2d65af05bec57bda25e71fd5fb25bbd892057a2755fbd05d8d8491cb2946febd5b0f124ffdfbaecf7e34946353c4f1b5ab29545895468 - 93422ceb8291a69b22f02dc1114c39a287493ad525dcebc77e4019a44eaee2633a85d0f29cd298ee6799048c33a4be0c - b6dab29c16ec35ab34a5d92ff135b58de96741dda78b1009a2181cf8b45d2f72 - 0f46a0ae7f226517dd66ece0ce1efa29ffb7ced05ac4566fdcaed188 - -## Benchmark -[UTF8](http://jsperf.com/sha-512/10) -[ASCII](http://jsperf.com/sha-512/9) - -## Extensions -### jQuery -If you prefer jQuery style, you can add following code to add a jQuery extension. - -Code -```JavaScript -jQuery.sha512 = sha512 -jQuery.sha384 = sha384 -jQuery.sha512_256 = sha512_256 -jQuery.sha512_224 = sha512_224 -``` -And then you could use like this: +## Example ```JavaScript -$.sha512('message'); -$.sha384('message'); -$.sha512_256('message'); -$.sha512_224('message'); +sha512(''); // cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e +sha512('The quick brown fox jumps over the lazy dog'); // 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 +sha512('The quick brown fox jumps over the lazy dog.'); // 91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed +sha384(''); // 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b +sha384('The quick brown fox jumps over the lazy dog'); // ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 +sha384('The quick brown fox jumps over the lazy dog.'); // ed892481d8272ca6df370bf706e4d7bc1b5739fa2177aae6c50e946678718fc67a7af2819a021c2fc34e91bdb63409d7 +sha512_256(''); // c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a +sha512_256('The quick brown fox jumps over the lazy dog'); // dd9d67b371519c339ed8dbd25af90e976a1eeefd4ad3d889005e532fc5bef04d +sha512_256('The quick brown fox jumps over the lazy dog.'); // 1546741840f8a492b959d9b8b2344b9b0eb51b004bba35c0aebaac86d45264c3 +sha512_224(''); // 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 +sha512_224('The quick brown fox jumps over the lazy dog'); // 944cd2847fb54558d4775db0485a50003111c8e5daa63fe722c6aa37 +sha512_224('The quick brown fox jumps over the lazy dog.'); // 6d6a9279495ec4061769752e7ff9c68b6b0b3c5a281b7917ce0572de + +// It also supports UTF-8 encoding +sha512('中文'); // 8b88efc2ebbcbdad5ac2d65af05bec57bda25e71fd5fb25bbd892057a2755fbd05d8d8491cb2946febd5b0f124ffdfbaecf7e34946353c4f1b5ab29545895468 +sha384('中文'); // 93422ceb8291a69b22f02dc1114c39a287493ad525dcebc77e4019a44eaee2633a85d0f29cd298ee6799048c33a4be0c +sha512_256('中文'); // b6dab29c16ec35ab34a5d92ff135b58de96741dda78b1009a2181cf8b45d2f72 +sha512_224('中文'); // 0f46a0ae7f226517dd66ece0ce1efa29ffb7ced05ac4566fdcaed188 ``` -### Prototype -If you prefer prototype style, you can add following code to add a prototype extension. -Code -```JavaScript -String.prototype.sha512 = function() { - return sha512(this); -}; -String.prototype.sha384 = function() { - return sha384(this); -}; -String.prototype.sha512_256 = function() { - return sha512_256(this); -}; -String.prototype.sha512_224 = function() { - return sha512_224(this); -}; -``` -And then you could use like this: -```JavaScript -'message'.sha512(); -'message'.sha384(); -'message'.sha512_256(); -'message'.sha512_224(); -``` ## License The project is released under the [MIT license](http://www.opensource.org/licenses/MIT). ## Contact The project's website is located at https://github.com/emn178/js-sha512 -Author: emn178@gmail.com +Author: Chen, Yi-Cyuan (emn178@gmail.com) diff --git a/bower.json b/bower.json index 800ed60..72f3798 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "js-sha512", - "version": "0.2.2", - "main": ["build/sha512.min.js"], + "version": "0.3.0", + "main": ["src/sha512.js"], "ignore": [ "samples", "tests" diff --git a/build/sha512.min.js b/build/sha512.min.js index 90c6c08..d965832 100644 --- a/build/sha512.min.js +++ b/build/sha512.min.js @@ -1,22 +1,9 @@ -(function(K,sa){var ka="undefined"!=typeof module;ka&&(K=global);var a="0123456789abcdef".split(""),ra=[-2147483648,8388608,32768,128],ea=[24,16,8,0],da=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401, -2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627, -2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298, -3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],e=[],oa=function(a){return Z(a,384)},pa=function(a){return Z(a,256)},qa=function(a){return Z(a,224)},Z=function(Z,K){var n,q,r,t,u,v,w,x,y,z,A,B,C,D, -E,F,p,ka=!1,g,fa=0,la=0,ma=0,na=Z.length,L,M,f,b,d,c,ia,ja,ga,ha,aa,ba,h,k,l,m,ca;384==K?(n=3418070365,q=3238371032,r=1654270250,t=914150663,u=2438529370,v=812702999,w=355462360,x=4144912697,y=1731405415,z=4290775857,A=2394180231,B=1750603025,C=3675008525,D=1694076839,E=1203062813,F=3204075428):256==K?(n=573645204,q=4230739756,r=2673172387,t=3360449730,u=596883563,v=1867755857,w=2520282905,x=1497426621,y=2519219938,z=2827943907,A=3193839141,B=1401305490,C=721525244,D=746961066,E=246885852,F=2177182882): -224==K?(n=2352822216,q=424955298,r=1944164710,t=2312950998,u=502970286,v=855612546,w=1738396948,x=1479516111,y=258812777,z=2077511080,A=2011393907,B=79989058,C=1067287976,D=1780299464,E=286451373,F=2446758561):(n=1779033703,q=4089235720,r=3144134277,t=2227873595,u=1013904242,v=4271175723,w=2773480762,x=1595750129,y=1359893119,z=2917565137,A=2600822924,B=725511199,C=528734635,D=4215389547,E=1541459225,F=327033209,K=512);p=0;do{e[0]=p;e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]= -e[14]=e[15]=e[16]=e[17]=e[18]=e[19]=e[20]=e[21]=e[22]=e[23]=e[24]=e[25]=e[26]=e[27]=e[28]=e[29]=e[30]=e[31]=e[32]=0;for(g=la;fag;++fa)p=Z.charCodeAt(fa),128>p?e[g>>2]|=p<p?e[g>>2]|=(192|p>>6)<p||57344<=p?e[g>>2]|=(224|p>>12)<>2]|=(240|p>>18)<>2]|=(128|p>>12&63)<>2]|=(128|p>>6&63)<>2]|=(128|p&63)<>2]|=ra[g& -3],++fa);p=e[32];fa>na&&112>g&&(e[31]=ma<<3,ka=!0);for(g=32;160>g;g+=2)h=e[g-30],k=e[g-29],L=(h>>>1|k<<31)^(h>>>8|k<<24)^h>>>7,M=(k>>>1|h<<31)^(k>>>8|h<<24)^(k>>>7|h<<25),h=e[g-4],k=e[g-3],f=(h>>>19|k<<13)^(k>>>29|h<<3)^h>>>6,b=(k>>>19|h<<13)^(h>>>29|k<<3)^(k>>>6|h<<26),h=e[g-32],k=e[g-31],l=e[g-14],m=e[g-13],d=(m&65535)+(k&65535)+(M&65535)+(b&65535),b=(m>>>16)+(k>>>16)+(M>>>16)+(b>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(L&65535)+(f&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(L>>>16)+(f>>>16)+(c>>>16),e[g]= -f<<16|c&65535,e[g+1]=b<<16|d&65535;var N=n,O=q,G=r,H=t,I=u,J=v,P=w,Q=x,R=y,S=z,T=A,U=B,V=C,W=D,X=E,Y=F;ga=G&I;ha=H&J;for(g=0;160>g;g+=8)L=(N>>>28|O<<4)^(O>>>2|N<<30)^(O>>>7|N<<25),M=(O>>>28|N<<4)^(N>>>2|O<<30)^(N>>>7|O<<25),f=(R>>>14|S<<18)^(R>>>18|S<<14)^(S>>>9|R<<23),b=(S>>>14|R<<18)^(S>>>18|R<<14)^(R>>>9|S<<23),ia=N&G,ja=O&H,aa=ia^N&I^ga,ba=ja^O&J^ha,ca=R&T^~R&V,c=S&U^~S&W,h=e[g],k=e[g+1],l=da[g],m=da[g+1],d=(m&65535)+(k&65535)+(c&65535)+(b&65535)+(Y&65535),b=(m>>>16)+(k>>>16)+(c>>>16)+(b>>>16)+ -(Y>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(ca&65535)+(f&65535)+(X&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(ca>>>16)+(f>>>16)+(X>>>16)+(c>>>16),h=f<<16|c&65535,k=b<<16|d&65535,d=(ba&65535)+(M&65535),b=(ba>>>16)+(M>>>16)+(d>>>16),c=(aa&65535)+(L&65535)+(b>>>16),f=(aa>>>16)+(L>>>16)+(c>>>16),l=f<<16|c&65535,m=b<<16|d&65535,d=(Q&65535)+(k&65535),b=(Q>>>16)+(k>>>16)+(d>>>16),c=(P&65535)+(h&65535)+(b>>>16),f=(P>>>16)+(h>>>16)+(c>>>16),X=f<<16|c&65535,Y=b<<16|d&65535,d=(m&65535)+(k&65535),b=(m>>>16)+(k>>>16)+ -(d>>>16),c=(l&65535)+(h&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(c>>>16),P=f<<16|c&65535,Q=b<<16|d&65535,L=(P>>>28|Q<<4)^(Q>>>2|P<<30)^(Q>>>7|P<<25),M=(Q>>>28|P<<4)^(P>>>2|Q<<30)^(P>>>7|Q<<25),f=(X>>>14|Y<<18)^(X>>>18|Y<<14)^(Y>>>9|X<<23),b=(Y>>>14|X<<18)^(Y>>>18|X<<14)^(X>>>9|Y<<23),ga=P&N,ha=Q&O,aa=ga^P&G^ia,ba=ha^Q&H^ja,ca=X&R^~X&T,c=Y&S^~Y&U,h=e[g+2],k=e[g+3],l=da[g+2],m=da[g+3],d=(m&65535)+(k&65535)+(c&65535)+(b&65535)+(W&65535),b=(m>>>16)+(k>>>16)+(c>>>16)+(b>>>16)+(W>>>16)+(d>>>16),c=(l&65535)+ -(h&65535)+(ca&65535)+(f&65535)+(V&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(ca>>>16)+(f>>>16)+(V>>>16)+(c>>>16),h=f<<16|c&65535,k=b<<16|d&65535,d=(ba&65535)+(M&65535),b=(ba>>>16)+(M>>>16)+(d>>>16),c=(aa&65535)+(L&65535)+(b>>>16),f=(aa>>>16)+(L>>>16)+(c>>>16),l=f<<16|c&65535,m=b<<16|d&65535,d=(J&65535)+(k&65535),b=(J>>>16)+(k>>>16)+(d>>>16),c=(I&65535)+(h&65535)+(b>>>16),f=(I>>>16)+(h>>>16)+(c>>>16),V=f<<16|c&65535,W=b<<16|d&65535,d=(m&65535)+(k&65535),b=(m>>>16)+(k>>>16)+(d>>>16),c=(l&65535)+(h&65535)+ -(b>>>16),f=(l>>>16)+(h>>>16)+(c>>>16),I=f<<16|c&65535,J=b<<16|d&65535,L=(I>>>28|J<<4)^(J>>>2|I<<30)^(J>>>7|I<<25),M=(J>>>28|I<<4)^(I>>>2|J<<30)^(I>>>7|J<<25),f=(V>>>14|W<<18)^(V>>>18|W<<14)^(W>>>9|V<<23),b=(W>>>14|V<<18)^(W>>>18|V<<14)^(V>>>9|W<<23),ia=I&P,ja=J&Q,aa=ia^I&N^ga,ba=ja^J&O^ha,ca=V&X^~V&R,c=W&Y^~W&S,h=e[g+4],k=e[g+5],l=da[g+4],m=da[g+5],d=(m&65535)+(k&65535)+(c&65535)+(b&65535)+(U&65535),b=(m>>>16)+(k>>>16)+(c>>>16)+(b>>>16)+(U>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(ca&65535)+(f&65535)+ -(T&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(ca>>>16)+(f>>>16)+(T>>>16)+(c>>>16),h=f<<16|c&65535,k=b<<16|d&65535,d=(ba&65535)+(M&65535),b=(ba>>>16)+(M>>>16)+(d>>>16),c=(aa&65535)+(L&65535)+(b>>>16),f=(aa>>>16)+(L>>>16)+(c>>>16),l=f<<16|c&65535,m=b<<16|d&65535,d=(H&65535)+(k&65535),b=(H>>>16)+(k>>>16)+(d>>>16),c=(G&65535)+(h&65535)+(b>>>16),f=(G>>>16)+(h>>>16)+(c>>>16),T=f<<16|c&65535,U=b<<16|d&65535,d=(m&65535)+(k&65535),b=(m>>>16)+(k>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(c>>> -16),G=f<<16|c&65535,H=b<<16|d&65535,L=(G>>>28|H<<4)^(H>>>2|G<<30)^(H>>>7|G<<25),M=(H>>>28|G<<4)^(G>>>2|H<<30)^(G>>>7|H<<25),f=(T>>>14|U<<18)^(T>>>18|U<<14)^(U>>>9|T<<23),b=(U>>>14|T<<18)^(U>>>18|T<<14)^(T>>>9|U<<23),ga=G&I,ha=H&J,aa=ga^G&P^ia,ba=ha^H&Q^ja,ca=T&V^~T&X,c=U&W^~U&Y,h=e[g+6],k=e[g+7],l=da[g+6],m=da[g+7],d=(m&65535)+(k&65535)+(c&65535)+(b&65535)+(S&65535),b=(m>>>16)+(k>>>16)+(c>>>16)+(b>>>16)+(S>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(ca&65535)+(f&65535)+(R&65535)+(b>>>16),f=(l>>>16)+(h>>> -16)+(ca>>>16)+(f>>>16)+(R>>>16)+(c>>>16),h=f<<16|c&65535,k=b<<16|d&65535,d=(ba&65535)+(M&65535),b=(ba>>>16)+(M>>>16)+(d>>>16),c=(aa&65535)+(L&65535)+(b>>>16),f=(aa>>>16)+(L>>>16)+(c>>>16),l=f<<16|c&65535,m=b<<16|d&65535,d=(O&65535)+(k&65535),b=(O>>>16)+(k>>>16)+(d>>>16),c=(N&65535)+(h&65535)+(b>>>16),f=(N>>>16)+(h>>>16)+(c>>>16),R=f<<16|c&65535,S=b<<16|d&65535,d=(m&65535)+(k&65535),b=(m>>>16)+(k>>>16)+(d>>>16),c=(l&65535)+(h&65535)+(b>>>16),f=(l>>>16)+(h>>>16)+(c>>>16),N=f<<16|c&65535,O=b<<16|d&65535; -d=(q&65535)+(O&65535);b=(q>>>16)+(O>>>16)+(d>>>16);c=(n&65535)+(N&65535)+(b>>>16);f=(n>>>16)+(N>>>16)+(c>>>16);n=f<<16|c&65535;q=b<<16|d&65535;d=(t&65535)+(H&65535);b=(t>>>16)+(H>>>16)+(d>>>16);c=(r&65535)+(G&65535)+(b>>>16);f=(r>>>16)+(G>>>16)+(c>>>16);r=f<<16|c&65535;t=b<<16|d&65535;d=(v&65535)+(J&65535);b=(v>>>16)+(J>>>16)+(d>>>16);c=(u&65535)+(I&65535)+(b>>>16);f=(u>>>16)+(I>>>16)+(c>>>16);u=f<<16|c&65535;v=b<<16|d&65535;d=(x&65535)+(Q&65535);b=(x>>>16)+(Q>>>16)+(d>>>16);c=(w&65535)+(P&65535)+ -(b>>>16);f=(w>>>16)+(P>>>16)+(c>>>16);w=f<<16|c&65535;x=b<<16|d&65535;d=(z&65535)+(S&65535);b=(z>>>16)+(S>>>16)+(d>>>16);c=(y&65535)+(R&65535)+(b>>>16);f=(y>>>16)+(R>>>16)+(c>>>16);y=f<<16|c&65535;z=b<<16|d&65535;d=(B&65535)+(U&65535);b=(B>>>16)+(U>>>16)+(d>>>16);c=(A&65535)+(T&65535)+(b>>>16);f=(A>>>16)+(T>>>16)+(c>>>16);A=f<<16|c&65535;B=b<<16|d&65535;d=(D&65535)+(W&65535);b=(D>>>16)+(W>>>16)+(d>>>16);c=(C&65535)+(V&65535)+(b>>>16);f=(C>>>16)+(V>>>16)+(c>>>16);C=f<<16|c&65535;D=b<<16|d&65535;d= -(F&65535)+(Y&65535);b=(F>>>16)+(Y>>>16)+(d>>>16);c=(E&65535)+(X&65535)+(b>>>16);f=(E>>>16)+(X>>>16)+(c>>>16);E=f<<16|c&65535;F=b<<16|d&65535}while(!ka);n=a[n>>28&15]+a[n>>24&15]+a[n>>20&15]+a[n>>16&15]+a[n>>12&15]+a[n>>8&15]+a[n>>4&15]+a[n&15]+a[q>>28&15]+a[q>>24&15]+a[q>>20&15]+a[q>>16&15]+a[q>>12&15]+a[q>>8&15]+a[q>>4&15]+a[q&15]+a[r>>28&15]+a[r>>24&15]+a[r>>20&15]+a[r>>16&15]+a[r>>12&15]+a[r>>8&15]+a[r>>4&15]+a[r&15]+a[t>>28&15]+a[t>>24&15]+a[t>>20&15]+a[t>>16&15]+a[t>>12&15]+a[t>>8&15]+a[t>>4& -15]+a[t&15]+a[u>>28&15]+a[u>>24&15]+a[u>>20&15]+a[u>>16&15]+a[u>>12&15]+a[u>>8&15]+a[u>>4&15]+a[u&15]+a[v>>28&15]+a[v>>24&15]+a[v>>20&15]+a[v>>16&15]+a[v>>12&15]+a[v>>8&15]+a[v>>4&15]+a[v&15]+a[w>>28&15]+a[w>>24&15]+a[w>>20&15]+a[w>>16&15]+a[w>>12&15]+a[w>>8&15]+a[w>>4&15]+a[w&15];256<=K&&(n+=a[x>>28&15]+a[x>>24&15]+a[x>>20&15]+a[x>>16&15]+a[x>>12&15]+a[x>>8&15]+a[x>>4&15]+a[x&15]);384<=K&&(n+=a[y>>28&15]+a[y>>24&15]+a[y>>20&15]+a[y>>16&15]+a[y>>12&15]+a[y>>8&15]+a[y>>4&15]+a[y&15]+a[z>>28&15]+a[z>> -24&15]+a[z>>20&15]+a[z>>16&15]+a[z>>12&15]+a[z>>8&15]+a[z>>4&15]+a[z&15]+a[A>>28&15]+a[A>>24&15]+a[A>>20&15]+a[A>>16&15]+a[A>>12&15]+a[A>>8&15]+a[A>>4&15]+a[A&15]+a[B>>28&15]+a[B>>24&15]+a[B>>20&15]+a[B>>16&15]+a[B>>12&15]+a[B>>8&15]+a[B>>4&15]+a[B&15]);512==K&&(n+=a[C>>28&15]+a[C>>24&15]+a[C>>20&15]+a[C>>16&15]+a[C>>12&15]+a[C>>8&15]+a[C>>4&15]+a[C&15]+a[D>>28&15]+a[D>>24&15]+a[D>>20&15]+a[D>>16&15]+a[D>>12&15]+a[D>>8&15]+a[D>>4&15]+a[D&15]+a[E>>28&15]+a[E>>24&15]+a[E>>20&15]+a[E>>16&15]+a[E>>12& -15]+a[E>>8&15]+a[E>>4&15]+a[E&15]+a[F>>28&15]+a[F>>24&15]+a[F>>20&15]+a[F>>16&15]+a[F>>12&15]+a[F>>8&15]+a[F>>4&15]+a[F&15]);return n};!K.JS_SHA512_TEST&&ka?(Z.sha512=Z,Z.sha384=oa,Z.sha512_256=pa,Z.sha512_224=qa,module.exports=Z):K&&(K.sha512=Z,K.sha384=oa,K.sha512_256=pa,K.sha512_224=qa)})(this); +/* + * [js-sha512]{@link https://github.com/emn178/js-sha512} + * + * @version 0.3.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2017 + * @license MIT + */ +!function(){"use strict";var e="object"==typeof window?window:{},o=!e.JS_SHA512_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;o&&(e=global);var n=!e.JS_SHA512_NO_COMMON_JS&&"object"==typeof module&&module.exports,r="function"==typeof define&&define.amd,t="0123456789abcdef".split(""),s=[-2147483648,8388608,32768,128],a=[24,16,8,0],f=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],c=[],i=function(e){return h(e,384)},u=function(e){return h(e,256)},d=function(e){return h(e,224)},h=function(e,o){var n,r,i,u,d,h,_,p,l,v,S,b,w,O,m,y,A,J,N,j,C,g,x,H,M,D,E,k,q,z,B,F,G,I,K,L,P,Q,R,T,U,V,W,X,Y=!1,Z=0,$=0,ee=0,oe=e.length;384==o?(n=3418070365,r=3238371032,i=1654270250,u=914150663,d=2438529370,h=812702999,_=355462360,p=4144912697,l=1731405415,v=4290775857,S=2394180231,b=1750603025,w=3675008525,O=1694076839,m=1203062813,y=3204075428):256==o?(n=573645204,r=4230739756,i=2673172387,u=3360449730,d=596883563,h=1867755857,_=2520282905,p=1497426621,l=2519219938,v=2827943907,S=3193839141,b=1401305490,w=721525244,O=746961066,m=246885852,y=2177182882):224==o?(n=2352822216,r=424955298,i=1944164710,u=2312950998,d=502970286,h=855612546,_=1738396948,p=1479516111,l=258812777,v=2077511080,S=2011393907,b=79989058,w=1067287976,O=1780299464,m=286451373,y=2446758561):(n=1779033703,r=4089235720,i=3144134277,u=2227873595,d=1013904242,h=4271175723,_=2773480762,p=1595750129,l=1359893119,v=2917565137,S=2600822924,b=725511199,w=528734635,O=4215389547,m=1541459225,y=327033209,o=512),A=0;do{for(c[0]=A,c[1]=c[2]=c[3]=c[4]=c[5]=c[6]=c[7]=c[8]=c[9]=c[10]=c[11]=c[12]=c[13]=c[14]=c[15]=c[16]=c[17]=c[18]=c[19]=c[20]=c[21]=c[22]=c[23]=c[24]=c[25]=c[26]=c[27]=c[28]=c[29]=c[30]=c[31]=c[32]=0,N=$;oe>Z&&128>N;++Z)J=e.charCodeAt(Z),128>J?c[N>>2]|=J<J?(c[N>>2]|=(192|J>>6)<>2]|=(128|63&J)<J||J>=57344?(c[N>>2]|=(224|J>>12)<>2]|=(128|J>>6&63)<>2]|=(128|63&J)<>2]|=(240|J>>18)<>2]|=(128|J>>12&63)<>2]|=(128|J>>6&63)<>2]|=(128|63&J)<>2]|=s[3&N],++Z),A=c[32],Z>oe&&112>N&&(c[31]=ee<<3,Y=!0),j=32;160>j;j+=2)R=c[j-30],T=c[j-29],C=(R>>>1|T<<31)^(R>>>8|T<<24)^R>>>7,g=(T>>>1|R<<31)^(T>>>8|R<<24)^(T>>>7|R<<25),R=c[j-4],T=c[j-3],x=(R>>>19|T<<13)^(T>>>29|R<<3)^R>>>6,H=(T>>>19|R<<13)^(R>>>29|T<<3)^(T>>>6|R<<26),R=c[j-32],T=c[j-31],U=c[j-14],V=c[j-13],M=(65535&V)+(65535&T)+(65535&g)+(65535&H),D=(V>>>16)+(T>>>16)+(g>>>16)+(H>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(65535&C)+(65535&x)+(D>>>16),k=(U>>>16)+(R>>>16)+(C>>>16)+(x>>>16)+(E>>>16),c[j]=k<<16|65535&E,c[j+1]=D<<16|65535&M;var ne=n,re=r,te=i,se=u,ae=d,fe=h,ce=_,ie=p,ue=l,de=v,he=S,_e=b,pe=w,le=O,ve=m,Se=y;for(K=te&ae,L=se&fe,j=0;160>j;j+=8)C=(ne>>>28|re<<4)^(re>>>2|ne<<30)^(re>>>7|ne<<25),g=(re>>>28|ne<<4)^(ne>>>2|re<<30)^(ne>>>7|re<<25),x=(ue>>>14|de<<18)^(ue>>>18|de<<14)^(de>>>9|ue<<23),H=(de>>>14|ue<<18)^(de>>>18|ue<<14)^(ue>>>9|de<<23),q=ne&te,z=re&se,P=q^ne&ae^K,Q=z^re&fe^L,W=ue&he^~ue&pe,X=de&_e^~de&le,R=c[j],T=c[j+1],U=f[j],V=f[j+1],M=(65535&V)+(65535&T)+(65535&X)+(65535&H)+(65535&Se),D=(V>>>16)+(T>>>16)+(X>>>16)+(H>>>16)+(Se>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(65535&W)+(65535&x)+(65535&ve)+(D>>>16),k=(U>>>16)+(R>>>16)+(W>>>16)+(x>>>16)+(ve>>>16)+(E>>>16),R=k<<16|65535&E,T=D<<16|65535&M,M=(65535&Q)+(65535&g),D=(Q>>>16)+(g>>>16)+(M>>>16),E=(65535&P)+(65535&C)+(D>>>16),k=(P>>>16)+(C>>>16)+(E>>>16),U=k<<16|65535&E,V=D<<16|65535&M,M=(65535&ie)+(65535&T),D=(ie>>>16)+(T>>>16)+(M>>>16),E=(65535&ce)+(65535&R)+(D>>>16),k=(ce>>>16)+(R>>>16)+(E>>>16),ve=k<<16|65535&E,Se=D<<16|65535&M,M=(65535&V)+(65535&T),D=(V>>>16)+(T>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(D>>>16),k=(U>>>16)+(R>>>16)+(E>>>16),ce=k<<16|65535&E,ie=D<<16|65535&M,C=(ce>>>28|ie<<4)^(ie>>>2|ce<<30)^(ie>>>7|ce<<25),g=(ie>>>28|ce<<4)^(ce>>>2|ie<<30)^(ce>>>7|ie<<25),x=(ve>>>14|Se<<18)^(ve>>>18|Se<<14)^(Se>>>9|ve<<23),H=(Se>>>14|ve<<18)^(Se>>>18|ve<<14)^(ve>>>9|Se<<23),B=ce&ne,F=ie&re,P=B^ce&te^q,Q=F^ie&se^z,W=ve&ue^~ve&he,X=Se&de^~Se&_e,R=c[j+2],T=c[j+3],U=f[j+2],V=f[j+3],M=(65535&V)+(65535&T)+(65535&X)+(65535&H)+(65535&le),D=(V>>>16)+(T>>>16)+(X>>>16)+(H>>>16)+(le>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(65535&W)+(65535&x)+(65535&pe)+(D>>>16),k=(U>>>16)+(R>>>16)+(W>>>16)+(x>>>16)+(pe>>>16)+(E>>>16),R=k<<16|65535&E,T=D<<16|65535&M,M=(65535&Q)+(65535&g),D=(Q>>>16)+(g>>>16)+(M>>>16),E=(65535&P)+(65535&C)+(D>>>16),k=(P>>>16)+(C>>>16)+(E>>>16),U=k<<16|65535&E,V=D<<16|65535&M,M=(65535&fe)+(65535&T),D=(fe>>>16)+(T>>>16)+(M>>>16),E=(65535&ae)+(65535&R)+(D>>>16),k=(ae>>>16)+(R>>>16)+(E>>>16),pe=k<<16|65535&E,le=D<<16|65535&M,M=(65535&V)+(65535&T),D=(V>>>16)+(T>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(D>>>16),k=(U>>>16)+(R>>>16)+(E>>>16),ae=k<<16|65535&E,fe=D<<16|65535&M,C=(ae>>>28|fe<<4)^(fe>>>2|ae<<30)^(fe>>>7|ae<<25),g=(fe>>>28|ae<<4)^(ae>>>2|fe<<30)^(ae>>>7|fe<<25),x=(pe>>>14|le<<18)^(pe>>>18|le<<14)^(le>>>9|pe<<23),H=(le>>>14|pe<<18)^(le>>>18|pe<<14)^(pe>>>9|le<<23),G=ae&ce,I=fe&ie,P=G^ae&ne^B,Q=I^fe&re^F,W=pe&ve^~pe&ue,X=le&Se^~le&de,R=c[j+4],T=c[j+5],U=f[j+4],V=f[j+5],M=(65535&V)+(65535&T)+(65535&X)+(65535&H)+(65535&_e),D=(V>>>16)+(T>>>16)+(X>>>16)+(H>>>16)+(_e>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(65535&W)+(65535&x)+(65535&he)+(D>>>16),k=(U>>>16)+(R>>>16)+(W>>>16)+(x>>>16)+(he>>>16)+(E>>>16),R=k<<16|65535&E,T=D<<16|65535&M,M=(65535&Q)+(65535&g),D=(Q>>>16)+(g>>>16)+(M>>>16),E=(65535&P)+(65535&C)+(D>>>16),k=(P>>>16)+(C>>>16)+(E>>>16),U=k<<16|65535&E,V=D<<16|65535&M,M=(65535&se)+(65535&T),D=(se>>>16)+(T>>>16)+(M>>>16),E=(65535&te)+(65535&R)+(D>>>16),k=(te>>>16)+(R>>>16)+(E>>>16),he=k<<16|65535&E,_e=D<<16|65535&M,M=(65535&V)+(65535&T),D=(V>>>16)+(T>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(D>>>16),k=(U>>>16)+(R>>>16)+(E>>>16),te=k<<16|65535&E,se=D<<16|65535&M,C=(te>>>28|se<<4)^(se>>>2|te<<30)^(se>>>7|te<<25),g=(se>>>28|te<<4)^(te>>>2|se<<30)^(te>>>7|se<<25),x=(he>>>14|_e<<18)^(he>>>18|_e<<14)^(_e>>>9|he<<23),H=(_e>>>14|he<<18)^(_e>>>18|he<<14)^(he>>>9|_e<<23),K=te&ae,L=se&fe,P=K^te&ce^G,Q=L^se&ie^I,W=he&pe^~he&ve,X=_e&le^~_e&Se,R=c[j+6],T=c[j+7],U=f[j+6],V=f[j+7],M=(65535&V)+(65535&T)+(65535&X)+(65535&H)+(65535&de),D=(V>>>16)+(T>>>16)+(X>>>16)+(H>>>16)+(de>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(65535&W)+(65535&x)+(65535&ue)+(D>>>16),k=(U>>>16)+(R>>>16)+(W>>>16)+(x>>>16)+(ue>>>16)+(E>>>16),R=k<<16|65535&E,T=D<<16|65535&M,M=(65535&Q)+(65535&g),D=(Q>>>16)+(g>>>16)+(M>>>16),E=(65535&P)+(65535&C)+(D>>>16),k=(P>>>16)+(C>>>16)+(E>>>16),U=k<<16|65535&E,V=D<<16|65535&M,M=(65535&re)+(65535&T),D=(re>>>16)+(T>>>16)+(M>>>16),E=(65535&ne)+(65535&R)+(D>>>16),k=(ne>>>16)+(R>>>16)+(E>>>16),ue=k<<16|65535&E,de=D<<16|65535&M,M=(65535&V)+(65535&T),D=(V>>>16)+(T>>>16)+(M>>>16),E=(65535&U)+(65535&R)+(D>>>16),k=(U>>>16)+(R>>>16)+(E>>>16),ne=k<<16|65535&E,re=D<<16|65535&M;M=(65535&r)+(65535&re),D=(r>>>16)+(re>>>16)+(M>>>16),E=(65535&n)+(65535&ne)+(D>>>16),k=(n>>>16)+(ne>>>16)+(E>>>16),n=k<<16|65535&E,r=D<<16|65535&M,M=(65535&u)+(65535&se),D=(u>>>16)+(se>>>16)+(M>>>16),E=(65535&i)+(65535&te)+(D>>>16),k=(i>>>16)+(te>>>16)+(E>>>16),i=k<<16|65535&E,u=D<<16|65535&M,M=(65535&h)+(65535&fe),D=(h>>>16)+(fe>>>16)+(M>>>16),E=(65535&d)+(65535&ae)+(D>>>16),k=(d>>>16)+(ae>>>16)+(E>>>16),d=k<<16|65535&E,h=D<<16|65535&M,M=(65535&p)+(65535&ie),D=(p>>>16)+(ie>>>16)+(M>>>16),E=(65535&_)+(65535&ce)+(D>>>16),k=(_>>>16)+(ce>>>16)+(E>>>16),_=k<<16|65535&E,p=D<<16|65535&M,M=(65535&v)+(65535&de),D=(v>>>16)+(de>>>16)+(M>>>16),E=(65535&l)+(65535&ue)+(D>>>16),k=(l>>>16)+(ue>>>16)+(E>>>16),l=k<<16|65535&E,v=D<<16|65535&M,M=(65535&b)+(65535&_e),D=(b>>>16)+(_e>>>16)+(M>>>16),E=(65535&S)+(65535&he)+(D>>>16),k=(S>>>16)+(he>>>16)+(E>>>16),S=k<<16|65535&E,b=D<<16|65535&M,M=(65535&O)+(65535&le),D=(O>>>16)+(le>>>16)+(M>>>16),E=(65535&w)+(65535&pe)+(D>>>16),k=(w>>>16)+(pe>>>16)+(E>>>16),w=k<<16|65535&E,O=D<<16|65535&M,M=(65535&y)+(65535&Se),D=(y>>>16)+(Se>>>16)+(M>>>16),E=(65535&m)+(65535&ve)+(D>>>16),k=(m>>>16)+(ve>>>16)+(E>>>16),m=k<<16|65535&E,y=D<<16|65535&M}while(!Y);var be=t[n>>28&15]+t[n>>24&15]+t[n>>20&15]+t[n>>16&15]+t[n>>12&15]+t[n>>8&15]+t[n>>4&15]+t[15&n]+t[r>>28&15]+t[r>>24&15]+t[r>>20&15]+t[r>>16&15]+t[r>>12&15]+t[r>>8&15]+t[r>>4&15]+t[15&r]+t[i>>28&15]+t[i>>24&15]+t[i>>20&15]+t[i>>16&15]+t[i>>12&15]+t[i>>8&15]+t[i>>4&15]+t[15&i]+t[u>>28&15]+t[u>>24&15]+t[u>>20&15]+t[u>>16&15]+t[u>>12&15]+t[u>>8&15]+t[u>>4&15]+t[15&u]+t[d>>28&15]+t[d>>24&15]+t[d>>20&15]+t[d>>16&15]+t[d>>12&15]+t[d>>8&15]+t[d>>4&15]+t[15&d]+t[h>>28&15]+t[h>>24&15]+t[h>>20&15]+t[h>>16&15]+t[h>>12&15]+t[h>>8&15]+t[h>>4&15]+t[15&h]+t[_>>28&15]+t[_>>24&15]+t[_>>20&15]+t[_>>16&15]+t[_>>12&15]+t[_>>8&15]+t[_>>4&15]+t[15&_];return o>=256&&(be+=t[p>>28&15]+t[p>>24&15]+t[p>>20&15]+t[p>>16&15]+t[p>>12&15]+t[p>>8&15]+t[p>>4&15]+t[15&p]),o>=384&&(be+=t[l>>28&15]+t[l>>24&15]+t[l>>20&15]+t[l>>16&15]+t[l>>12&15]+t[l>>8&15]+t[l>>4&15]+t[15&l]+t[v>>28&15]+t[v>>24&15]+t[v>>20&15]+t[v>>16&15]+t[v>>12&15]+t[v>>8&15]+t[v>>4&15]+t[15&v]+t[S>>28&15]+t[S>>24&15]+t[S>>20&15]+t[S>>16&15]+t[S>>12&15]+t[S>>8&15]+t[S>>4&15]+t[15&S]+t[b>>28&15]+t[b>>24&15]+t[b>>20&15]+t[b>>16&15]+t[b>>12&15]+t[b>>8&15]+t[b>>4&15]+t[15&b]),512==o&&(be+=t[w>>28&15]+t[w>>24&15]+t[w>>20&15]+t[w>>16&15]+t[w>>12&15]+t[w>>8&15]+t[w>>4&15]+t[15&w]+t[O>>28&15]+t[O>>24&15]+t[O>>20&15]+t[O>>16&15]+t[O>>12&15]+t[O>>8&15]+t[O>>4&15]+t[15&O]+t[m>>28&15]+t[m>>24&15]+t[m>>20&15]+t[m>>16&15]+t[m>>12&15]+t[m>>8&15]+t[m>>4&15]+t[15&m]+t[y>>28&15]+t[y>>24&15]+t[y>>20&15]+t[y>>16&15]+t[y>>12&15]+t[y>>8&15]+t[y>>4&15]+t[15&y]),be},_=h;_.sha512=h,_.sha384=i,_.sha512_256=u,_.sha512_224=d,n?module.exports=_:(e.sha512=h,e.sha384=i,e.sha512_256=u,e.sha512_224=d,r&&define(function(){return _}))}(); \ No newline at end of file diff --git a/package.json b/package.json index c3c73fc..b75d473 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,19 @@ { "name": "js-sha512", - "version": "0.2.2", + "version": "0.3.0", "description": "This is a simple SHA-512, SHA-384, SHA-512/224, SHA-512/256 hash functions for JavaScript supports UTF-8 encoding.", "main": "src/sha512.js", "devDependencies": { "expect.js": "~0.3.1", - "jscoverage": "~0.5.9" + "jscoverage": "~0.5.9", + "mocha": "~2.3.4", + "uglifyjs": "~2.4.10" }, "scripts": { "test": "mocha tests/node-test.js -r jscoverage", - "coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls" + "report": "mocha tests/node-test.js -r jscoverage --covout=html", + "coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls", + "build": "uglifyjs src/sha512.js --compress --mangle --comments --output build/sha512.min.js" }, "repository": { "type": "git", @@ -28,7 +32,7 @@ "HMAC" ], "license": "MIT", - "author": "emn178 ", + "author": "Chen, Yi-Cyuan ", "homepage": "https://github.com/emn178/js-sha512", "bugs": { "url": "https://github.com/emn178/js-sha512/issues" diff --git a/src/sha512.js b/src/sha512.js index 3bf3e90..3e32d96 100644 --- a/src/sha512.js +++ b/src/sha512.js @@ -1,86 +1,91 @@ /* - * js-sha512 v0.2.2 - * https://github.com/emn178/js-sha512 + * [js-sha512]{@link https://github.com/emn178/js-sha512} * - * Copyright 2014-2015, emn178@gmail.com - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT + * @version 0.3.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2017 + * @license MIT */ -;(function(root, undefined) { +/*jslint bitwise: true */ +(function () { 'use strict'; - var NODE_JS = typeof(module) != 'undefined'; - if(NODE_JS) { + var root = typeof window === 'object' ? window : {}; + var NODE_JS = !root.JS_SHA512_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; + if (NODE_JS) { root = global; } + var COMMON_JS = !root.JS_SHA512_NO_COMMON_JS && typeof module === 'object' && module.exports; + var AMD = typeof define === 'function' && define.amd; var HEX_CHARS = '0123456789abcdef'.split(''); var EXTRA = [-2147483648, 8388608, 32768, 128]; var SHIFT = [24, 16, 8, 0]; - var K =[0x428A2F98, 0xD728AE22, 0x71374491, 0x23EF65CD, - 0xB5C0FBCF, 0xEC4D3B2F, 0xE9B5DBA5, 0x8189DBBC, - 0x3956C25B, 0xF348B538, 0x59F111F1, 0xB605D019, - 0x923F82A4, 0xAF194F9B, 0xAB1C5ED5, 0xDA6D8118, - 0xD807AA98, 0xA3030242, 0x12835B01, 0x45706FBE, - 0x243185BE, 0x4EE4B28C, 0x550C7DC3, 0xD5FFB4E2, - 0x72BE5D74, 0xF27B896F, 0x80DEB1FE, 0x3B1696B1, - 0x9BDC06A7, 0x25C71235, 0xC19BF174, 0xCF692694, - 0xE49B69C1, 0x9EF14AD2, 0xEFBE4786, 0x384F25E3, - 0x0FC19DC6, 0x8B8CD5B5, 0x240CA1CC, 0x77AC9C65, - 0x2DE92C6F, 0x592B0275, 0x4A7484AA, 0x6EA6E483, - 0x5CB0A9DC, 0xBD41FBD4, 0x76F988DA, 0x831153B5, - 0x983E5152, 0xEE66DFAB, 0xA831C66D, 0x2DB43210, - 0xB00327C8, 0x98FB213F, 0xBF597FC7, 0xBEEF0EE4, - 0xC6E00BF3, 0x3DA88FC2, 0xD5A79147, 0x930AA725, - 0x06CA6351, 0xE003826F, 0x14292967, 0x0A0E6E70, - 0x27B70A85, 0x46D22FFC, 0x2E1B2138, 0x5C26C926, - 0x4D2C6DFC, 0x5AC42AED, 0x53380D13, 0x9D95B3DF, - 0x650A7354, 0x8BAF63DE, 0x766A0ABB, 0x3C77B2A8, - 0x81C2C92E, 0x47EDAEE6, 0x92722C85, 0x1482353B, - 0xA2BFE8A1, 0x4CF10364, 0xA81A664B, 0xBC423001, - 0xC24B8B70, 0xD0F89791, 0xC76C51A3, 0x0654BE30, - 0xD192E819, 0xD6EF5218, 0xD6990624, 0x5565A910, - 0xF40E3585, 0x5771202A, 0x106AA070, 0x32BBD1B8, - 0x19A4C116, 0xB8D2D0C8, 0x1E376C08, 0x5141AB53, - 0x2748774C, 0xDF8EEB99, 0x34B0BCB5, 0xE19B48A8, - 0x391C0CB3, 0xC5C95A63, 0x4ED8AA4A, 0xE3418ACB, - 0x5B9CCA4F, 0x7763E373, 0x682E6FF3, 0xD6B2B8A3, - 0x748F82EE, 0x5DEFB2FC, 0x78A5636F, 0x43172F60, - 0x84C87814, 0xA1F0AB72, 0x8CC70208, 0x1A6439EC, - 0x90BEFFFA, 0x23631E28, 0xA4506CEB, 0xDE82BDE9, - 0xBEF9A3F7, 0xB2C67915, 0xC67178F2, 0xE372532B, - 0xCA273ECE, 0xEA26619C, 0xD186B8C7, 0x21C0C207, - 0xEADA7DD6, 0xCDE0EB1E, 0xF57D4F7F, 0xEE6ED178, - 0x06F067AA, 0x72176FBA, 0x0A637DC5, 0xA2C898A6, - 0x113F9804, 0xBEF90DAE, 0x1B710B35, 0x131C471B, - 0x28DB77F5, 0x23047D84, 0x32CAAB7B, 0x40C72493, - 0x3C9EBE0A, 0x15C9BEBC, 0x431D67C4, 0x9C100D4C, - 0x4CC5D4BE, 0xCB3E42B6, 0x597F299C, 0xFC657E2A, - 0x5FCB6FAB, 0x3AD6FAEC, 0x6C44198C, 0x4A475817]; + var K =[ + 0x428A2F98, 0xD728AE22, 0x71374491, 0x23EF65CD, + 0xB5C0FBCF, 0xEC4D3B2F, 0xE9B5DBA5, 0x8189DBBC, + 0x3956C25B, 0xF348B538, 0x59F111F1, 0xB605D019, + 0x923F82A4, 0xAF194F9B, 0xAB1C5ED5, 0xDA6D8118, + 0xD807AA98, 0xA3030242, 0x12835B01, 0x45706FBE, + 0x243185BE, 0x4EE4B28C, 0x550C7DC3, 0xD5FFB4E2, + 0x72BE5D74, 0xF27B896F, 0x80DEB1FE, 0x3B1696B1, + 0x9BDC06A7, 0x25C71235, 0xC19BF174, 0xCF692694, + 0xE49B69C1, 0x9EF14AD2, 0xEFBE4786, 0x384F25E3, + 0x0FC19DC6, 0x8B8CD5B5, 0x240CA1CC, 0x77AC9C65, + 0x2DE92C6F, 0x592B0275, 0x4A7484AA, 0x6EA6E483, + 0x5CB0A9DC, 0xBD41FBD4, 0x76F988DA, 0x831153B5, + 0x983E5152, 0xEE66DFAB, 0xA831C66D, 0x2DB43210, + 0xB00327C8, 0x98FB213F, 0xBF597FC7, 0xBEEF0EE4, + 0xC6E00BF3, 0x3DA88FC2, 0xD5A79147, 0x930AA725, + 0x06CA6351, 0xE003826F, 0x14292967, 0x0A0E6E70, + 0x27B70A85, 0x46D22FFC, 0x2E1B2138, 0x5C26C926, + 0x4D2C6DFC, 0x5AC42AED, 0x53380D13, 0x9D95B3DF, + 0x650A7354, 0x8BAF63DE, 0x766A0ABB, 0x3C77B2A8, + 0x81C2C92E, 0x47EDAEE6, 0x92722C85, 0x1482353B, + 0xA2BFE8A1, 0x4CF10364, 0xA81A664B, 0xBC423001, + 0xC24B8B70, 0xD0F89791, 0xC76C51A3, 0x0654BE30, + 0xD192E819, 0xD6EF5218, 0xD6990624, 0x5565A910, + 0xF40E3585, 0x5771202A, 0x106AA070, 0x32BBD1B8, + 0x19A4C116, 0xB8D2D0C8, 0x1E376C08, 0x5141AB53, + 0x2748774C, 0xDF8EEB99, 0x34B0BCB5, 0xE19B48A8, + 0x391C0CB3, 0xC5C95A63, 0x4ED8AA4A, 0xE3418ACB, + 0x5B9CCA4F, 0x7763E373, 0x682E6FF3, 0xD6B2B8A3, + 0x748F82EE, 0x5DEFB2FC, 0x78A5636F, 0x43172F60, + 0x84C87814, 0xA1F0AB72, 0x8CC70208, 0x1A6439EC, + 0x90BEFFFA, 0x23631E28, 0xA4506CEB, 0xDE82BDE9, + 0xBEF9A3F7, 0xB2C67915, 0xC67178F2, 0xE372532B, + 0xCA273ECE, 0xEA26619C, 0xD186B8C7, 0x21C0C207, + 0xEADA7DD6, 0xCDE0EB1E, 0xF57D4F7F, 0xEE6ED178, + 0x06F067AA, 0x72176FBA, 0x0A637DC5, 0xA2C898A6, + 0x113F9804, 0xBEF90DAE, 0x1B710B35, 0x131C471B, + 0x28DB77F5, 0x23047D84, 0x32CAAB7B, 0x40C72493, + 0x3C9EBE0A, 0x15C9BEBC, 0x431D67C4, 0x9C100D4C, + 0x4CC5D4BE, 0xCB3E42B6, 0x597F299C, 0xFC657E2A, + 0x5FCB6FAB, 0x3AD6FAEC, 0x6C44198C, 0x4A475817 + ]; var blocks = []; - var sha384 = function(message) { + var sha384 = function (message) { return sha512(message, 384); }; - var sha512_256 = function(message) { + var sha512_256 = function (message) { return sha512(message, 256); }; - var sha512_224 = function(message) { + var sha512_224 = function (message) { return sha512(message, 224); }; - var sha512 = function(message, bits) { + var sha512 = function (message, bits) { var h0h, h0l, h1h, h1l, h2h, h2l, h3h, h3l, - h4h, h4l, h5h, h5l, h6h, h6l, h7h, h7l, block, code, end = false, - i, j, index = 0, start = 0, bytes = 0, length = message.length, - s0h, s0l, s1h, s1l, c1, c2, c3, c4, - abh, abl, dah, dal, cdh, cdl, bch, bcl, - majh, majl, t1h, t1l, t2h, t2l, chh, chl; + h4h, h4l, h5h, h5l, h6h, h6l, h7h, h7l, block, code, end = false, + i, j, index = 0, start = 0, bytes = 0, length = message.length, + s0h, s0l, s1h, s1l, c1, c2, c3, c4, + abh, abl, dah, dal, cdh, cdl, bch, bcl, + majh, majl, t1h, t1l, t2h, t2l, chh, chl; - if(bits == 384) { + if (bits == 384) { h0h = 0xCBBB9D5D; h0l = 0xC1059ED8; h1h = 0x629A292A; @@ -97,7 +102,7 @@ h6l = 0x64F98FA7; h7h = 0x47B5481D; h7l = 0xBEFA4FA4; - } else if(bits == 256) { + } else if (bits == 256) { h0h = 0x22312194; h0l = 0xFC2BF72C; h1h = 0x9F555FA3; @@ -114,7 +119,7 @@ h6l = 0x2C85B8AA; h7h = 0x0EB72DDC; h7l = 0x81C52CA2; - } else if(bits == 224) { + } else if (bits == 224) { h0h = 0x8C3D37C8; h0l = 0x19544DA2; h1h = 0x73E19966; @@ -161,7 +166,7 @@ blocks[21] = blocks[22] = blocks[23] = blocks[24] = blocks[25] = blocks[26] = blocks[27] = blocks[28] = blocks[29] = blocks[30] = blocks[31] = blocks[32] = 0; - for (i = start;index < length && i < 128; ++index) { + for (i = start; index < length && i < 128; ++index) { code = message.charCodeAt(index); if (code < 0x80) { blocks[i >> 2] |= code << SHIFT[i++ & 3]; @@ -182,17 +187,17 @@ } bytes += i - start; start = i - 128; - if(index == length) { + if (index == length) { blocks[i >> 2] |= EXTRA[i & 3]; ++index; } block = blocks[32]; - if(index > length && i < 112) { + if (index > length && i < 112) { blocks[31] = bytes << 3; end = true; } - for(j = 32;j < 160;j += 2) { + for (j = 32; j < 160; j += 2) { t1h = blocks[j - 30]; t1l = blocks[j - 29]; s0h = ((t1h >>> 1) | (t1l << 31)) ^ ((t1h >>> 8) | (t1l << 24)) ^ (t1h >>> 7); @@ -220,7 +225,7 @@ var ah = h0h, al = h0l, bh = h1h, bl = h1l, ch = h2h, cl = h2l, dh = h3h, dl = h3l, eh = h4h, el = h4l, fh = h5h, fl = h5l, gh = h6h, gl = h6l, hh = h7h, hl = h7l; bch = bh & ch; bcl = bl & cl; - for(j = 0;j < 160;j += 8) { + for (j = 0; j < 160; j += 8) { s0h = ((ah >>> 28) | (al << 4)) ^ ((al >>> 2) | (ah << 30)) ^ ((al >>> 7) | (ah << 25)); s0l = ((al >>> 28) | (ah << 4)) ^ ((ah >>> 2) | (al << 30)) ^ ((ah >>> 7) | (al << 25)); @@ -489,91 +494,98 @@ h7h = (c4 << 16) | (c3 & 0xFFFF); h7l = (c2 << 16) | (c1 & 0xFFFF); - } while(!end); + } while (!end); var hex = HEX_CHARS[(h0h >> 28) & 0x0F] + HEX_CHARS[(h0h >> 24) & 0x0F] + - HEX_CHARS[(h0h >> 20) & 0x0F] + HEX_CHARS[(h0h >> 16) & 0x0F] + - HEX_CHARS[(h0h >> 12) & 0x0F] + HEX_CHARS[(h0h >> 8) & 0x0F] + - HEX_CHARS[(h0h >> 4) & 0x0F] + HEX_CHARS[h0h & 0x0F] + - HEX_CHARS[(h0l >> 28) & 0x0F] + HEX_CHARS[(h0l >> 24) & 0x0F] + - HEX_CHARS[(h0l >> 20) & 0x0F] + HEX_CHARS[(h0l >> 16) & 0x0F] + - HEX_CHARS[(h0l >> 12) & 0x0F] + HEX_CHARS[(h0l >> 8) & 0x0F] + - HEX_CHARS[(h0l >> 4) & 0x0F] + HEX_CHARS[h0l & 0x0F] + - HEX_CHARS[(h1h >> 28) & 0x0F] + HEX_CHARS[(h1h >> 24) & 0x0F] + - HEX_CHARS[(h1h >> 20) & 0x0F] + HEX_CHARS[(h1h >> 16) & 0x0F] + - HEX_CHARS[(h1h >> 12) & 0x0F] + HEX_CHARS[(h1h >> 8) & 0x0F] + - HEX_CHARS[(h1h >> 4) & 0x0F] + HEX_CHARS[h1h & 0x0F] + - HEX_CHARS[(h1l >> 28) & 0x0F] + HEX_CHARS[(h1l >> 24) & 0x0F] + - HEX_CHARS[(h1l >> 20) & 0x0F] + HEX_CHARS[(h1l >> 16) & 0x0F] + - HEX_CHARS[(h1l >> 12) & 0x0F] + HEX_CHARS[(h1l >> 8) & 0x0F] + - HEX_CHARS[(h1l >> 4) & 0x0F] + HEX_CHARS[h1l & 0x0F] + - HEX_CHARS[(h2h >> 28) & 0x0F] + HEX_CHARS[(h2h >> 24) & 0x0F] + - HEX_CHARS[(h2h >> 20) & 0x0F] + HEX_CHARS[(h2h >> 16) & 0x0F] + - HEX_CHARS[(h2h >> 12) & 0x0F] + HEX_CHARS[(h2h >> 8) & 0x0F] + - HEX_CHARS[(h2h >> 4) & 0x0F] + HEX_CHARS[h2h & 0x0F] + - HEX_CHARS[(h2l >> 28) & 0x0F] + HEX_CHARS[(h2l >> 24) & 0x0F] + - HEX_CHARS[(h2l >> 20) & 0x0F] + HEX_CHARS[(h2l >> 16) & 0x0F] + - HEX_CHARS[(h2l >> 12) & 0x0F] + HEX_CHARS[(h2l >> 8) & 0x0F] + - HEX_CHARS[(h2l >> 4) & 0x0F] + HEX_CHARS[h2l & 0x0F] + - HEX_CHARS[(h3h >> 28) & 0x0F] + HEX_CHARS[(h3h >> 24) & 0x0F] + - HEX_CHARS[(h3h >> 20) & 0x0F] + HEX_CHARS[(h3h >> 16) & 0x0F] + - HEX_CHARS[(h3h >> 12) & 0x0F] + HEX_CHARS[(h3h >> 8) & 0x0F] + - HEX_CHARS[(h3h >> 4) & 0x0F] + HEX_CHARS[h3h & 0x0F]; - if(bits >= 256) { + HEX_CHARS[(h0h >> 20) & 0x0F] + HEX_CHARS[(h0h >> 16) & 0x0F] + + HEX_CHARS[(h0h >> 12) & 0x0F] + HEX_CHARS[(h0h >> 8) & 0x0F] + + HEX_CHARS[(h0h >> 4) & 0x0F] + HEX_CHARS[h0h & 0x0F] + + HEX_CHARS[(h0l >> 28) & 0x0F] + HEX_CHARS[(h0l >> 24) & 0x0F] + + HEX_CHARS[(h0l >> 20) & 0x0F] + HEX_CHARS[(h0l >> 16) & 0x0F] + + HEX_CHARS[(h0l >> 12) & 0x0F] + HEX_CHARS[(h0l >> 8) & 0x0F] + + HEX_CHARS[(h0l >> 4) & 0x0F] + HEX_CHARS[h0l & 0x0F] + + HEX_CHARS[(h1h >> 28) & 0x0F] + HEX_CHARS[(h1h >> 24) & 0x0F] + + HEX_CHARS[(h1h >> 20) & 0x0F] + HEX_CHARS[(h1h >> 16) & 0x0F] + + HEX_CHARS[(h1h >> 12) & 0x0F] + HEX_CHARS[(h1h >> 8) & 0x0F] + + HEX_CHARS[(h1h >> 4) & 0x0F] + HEX_CHARS[h1h & 0x0F] + + HEX_CHARS[(h1l >> 28) & 0x0F] + HEX_CHARS[(h1l >> 24) & 0x0F] + + HEX_CHARS[(h1l >> 20) & 0x0F] + HEX_CHARS[(h1l >> 16) & 0x0F] + + HEX_CHARS[(h1l >> 12) & 0x0F] + HEX_CHARS[(h1l >> 8) & 0x0F] + + HEX_CHARS[(h1l >> 4) & 0x0F] + HEX_CHARS[h1l & 0x0F] + + HEX_CHARS[(h2h >> 28) & 0x0F] + HEX_CHARS[(h2h >> 24) & 0x0F] + + HEX_CHARS[(h2h >> 20) & 0x0F] + HEX_CHARS[(h2h >> 16) & 0x0F] + + HEX_CHARS[(h2h >> 12) & 0x0F] + HEX_CHARS[(h2h >> 8) & 0x0F] + + HEX_CHARS[(h2h >> 4) & 0x0F] + HEX_CHARS[h2h & 0x0F] + + HEX_CHARS[(h2l >> 28) & 0x0F] + HEX_CHARS[(h2l >> 24) & 0x0F] + + HEX_CHARS[(h2l >> 20) & 0x0F] + HEX_CHARS[(h2l >> 16) & 0x0F] + + HEX_CHARS[(h2l >> 12) & 0x0F] + HEX_CHARS[(h2l >> 8) & 0x0F] + + HEX_CHARS[(h2l >> 4) & 0x0F] + HEX_CHARS[h2l & 0x0F] + + HEX_CHARS[(h3h >> 28) & 0x0F] + HEX_CHARS[(h3h >> 24) & 0x0F] + + HEX_CHARS[(h3h >> 20) & 0x0F] + HEX_CHARS[(h3h >> 16) & 0x0F] + + HEX_CHARS[(h3h >> 12) & 0x0F] + HEX_CHARS[(h3h >> 8) & 0x0F] + + HEX_CHARS[(h3h >> 4) & 0x0F] + HEX_CHARS[h3h & 0x0F]; + if (bits >= 256) { hex += HEX_CHARS[(h3l >> 28) & 0x0F] + HEX_CHARS[(h3l >> 24) & 0x0F] + - HEX_CHARS[(h3l >> 20) & 0x0F] + HEX_CHARS[(h3l >> 16) & 0x0F] + - HEX_CHARS[(h3l >> 12) & 0x0F] + HEX_CHARS[(h3l >> 8) & 0x0F] + - HEX_CHARS[(h3l >> 4) & 0x0F] + HEX_CHARS[h3l & 0x0F]; + HEX_CHARS[(h3l >> 20) & 0x0F] + HEX_CHARS[(h3l >> 16) & 0x0F] + + HEX_CHARS[(h3l >> 12) & 0x0F] + HEX_CHARS[(h3l >> 8) & 0x0F] + + HEX_CHARS[(h3l >> 4) & 0x0F] + HEX_CHARS[h3l & 0x0F]; } - if(bits >= 384) { + if (bits >= 384) { hex += HEX_CHARS[(h4h >> 28) & 0x0F] + HEX_CHARS[(h4h >> 24) & 0x0F] + - HEX_CHARS[(h4h >> 20) & 0x0F] + HEX_CHARS[(h4h >> 16) & 0x0F] + - HEX_CHARS[(h4h >> 12) & 0x0F] + HEX_CHARS[(h4h >> 8) & 0x0F] + - HEX_CHARS[(h4h >> 4) & 0x0F] + HEX_CHARS[h4h & 0x0F] + - HEX_CHARS[(h4l >> 28) & 0x0F] + HEX_CHARS[(h4l >> 24) & 0x0F] + - HEX_CHARS[(h4l >> 20) & 0x0F] + HEX_CHARS[(h4l >> 16) & 0x0F] + - HEX_CHARS[(h4l >> 12) & 0x0F] + HEX_CHARS[(h4l >> 8) & 0x0F] + - HEX_CHARS[(h4l >> 4) & 0x0F] + HEX_CHARS[h4l & 0x0F] + - HEX_CHARS[(h5h >> 28) & 0x0F] + HEX_CHARS[(h5h >> 24) & 0x0F] + - HEX_CHARS[(h5h >> 20) & 0x0F] + HEX_CHARS[(h5h >> 16) & 0x0F] + - HEX_CHARS[(h5h >> 12) & 0x0F] + HEX_CHARS[(h5h >> 8) & 0x0F] + - HEX_CHARS[(h5h >> 4) & 0x0F] + HEX_CHARS[h5h & 0x0F] + - HEX_CHARS[(h5l >> 28) & 0x0F] + HEX_CHARS[(h5l >> 24) & 0x0F] + - HEX_CHARS[(h5l >> 20) & 0x0F] + HEX_CHARS[(h5l >> 16) & 0x0F] + - HEX_CHARS[(h5l >> 12) & 0x0F] + HEX_CHARS[(h5l >> 8) & 0x0F] + - HEX_CHARS[(h5l >> 4) & 0x0F] + HEX_CHARS[h5l & 0x0F]; + HEX_CHARS[(h4h >> 20) & 0x0F] + HEX_CHARS[(h4h >> 16) & 0x0F] + + HEX_CHARS[(h4h >> 12) & 0x0F] + HEX_CHARS[(h4h >> 8) & 0x0F] + + HEX_CHARS[(h4h >> 4) & 0x0F] + HEX_CHARS[h4h & 0x0F] + + HEX_CHARS[(h4l >> 28) & 0x0F] + HEX_CHARS[(h4l >> 24) & 0x0F] + + HEX_CHARS[(h4l >> 20) & 0x0F] + HEX_CHARS[(h4l >> 16) & 0x0F] + + HEX_CHARS[(h4l >> 12) & 0x0F] + HEX_CHARS[(h4l >> 8) & 0x0F] + + HEX_CHARS[(h4l >> 4) & 0x0F] + HEX_CHARS[h4l & 0x0F] + + HEX_CHARS[(h5h >> 28) & 0x0F] + HEX_CHARS[(h5h >> 24) & 0x0F] + + HEX_CHARS[(h5h >> 20) & 0x0F] + HEX_CHARS[(h5h >> 16) & 0x0F] + + HEX_CHARS[(h5h >> 12) & 0x0F] + HEX_CHARS[(h5h >> 8) & 0x0F] + + HEX_CHARS[(h5h >> 4) & 0x0F] + HEX_CHARS[h5h & 0x0F] + + HEX_CHARS[(h5l >> 28) & 0x0F] + HEX_CHARS[(h5l >> 24) & 0x0F] + + HEX_CHARS[(h5l >> 20) & 0x0F] + HEX_CHARS[(h5l >> 16) & 0x0F] + + HEX_CHARS[(h5l >> 12) & 0x0F] + HEX_CHARS[(h5l >> 8) & 0x0F] + + HEX_CHARS[(h5l >> 4) & 0x0F] + HEX_CHARS[h5l & 0x0F]; } - if(bits == 512) { + if (bits == 512) { hex += HEX_CHARS[(h6h >> 28) & 0x0F] + HEX_CHARS[(h6h >> 24) & 0x0F] + - HEX_CHARS[(h6h >> 20) & 0x0F] + HEX_CHARS[(h6h >> 16) & 0x0F] + - HEX_CHARS[(h6h >> 12) & 0x0F] + HEX_CHARS[(h6h >> 8) & 0x0F] + - HEX_CHARS[(h6h >> 4) & 0x0F] + HEX_CHARS[h6h & 0x0F] + - HEX_CHARS[(h6l >> 28) & 0x0F] + HEX_CHARS[(h6l >> 24) & 0x0F] + - HEX_CHARS[(h6l >> 20) & 0x0F] + HEX_CHARS[(h6l >> 16) & 0x0F] + - HEX_CHARS[(h6l >> 12) & 0x0F] + HEX_CHARS[(h6l >> 8) & 0x0F] + - HEX_CHARS[(h6l >> 4) & 0x0F] + HEX_CHARS[h6l & 0x0F] + - HEX_CHARS[(h7h >> 28) & 0x0F] + HEX_CHARS[(h7h >> 24) & 0x0F] + - HEX_CHARS[(h7h >> 20) & 0x0F] + HEX_CHARS[(h7h >> 16) & 0x0F] + - HEX_CHARS[(h7h >> 12) & 0x0F] + HEX_CHARS[(h7h >> 8) & 0x0F] + - HEX_CHARS[(h7h >> 4) & 0x0F] + HEX_CHARS[h7h & 0x0F] + - HEX_CHARS[(h7l >> 28) & 0x0F] + HEX_CHARS[(h7l >> 24) & 0x0F] + - HEX_CHARS[(h7l >> 20) & 0x0F] + HEX_CHARS[(h7l >> 16) & 0x0F] + - HEX_CHARS[(h7l >> 12) & 0x0F] + HEX_CHARS[(h7l >> 8) & 0x0F] + - HEX_CHARS[(h7l >> 4) & 0x0F] + HEX_CHARS[h7l & 0x0F]; + HEX_CHARS[(h6h >> 20) & 0x0F] + HEX_CHARS[(h6h >> 16) & 0x0F] + + HEX_CHARS[(h6h >> 12) & 0x0F] + HEX_CHARS[(h6h >> 8) & 0x0F] + + HEX_CHARS[(h6h >> 4) & 0x0F] + HEX_CHARS[h6h & 0x0F] + + HEX_CHARS[(h6l >> 28) & 0x0F] + HEX_CHARS[(h6l >> 24) & 0x0F] + + HEX_CHARS[(h6l >> 20) & 0x0F] + HEX_CHARS[(h6l >> 16) & 0x0F] + + HEX_CHARS[(h6l >> 12) & 0x0F] + HEX_CHARS[(h6l >> 8) & 0x0F] + + HEX_CHARS[(h6l >> 4) & 0x0F] + HEX_CHARS[h6l & 0x0F] + + HEX_CHARS[(h7h >> 28) & 0x0F] + HEX_CHARS[(h7h >> 24) & 0x0F] + + HEX_CHARS[(h7h >> 20) & 0x0F] + HEX_CHARS[(h7h >> 16) & 0x0F] + + HEX_CHARS[(h7h >> 12) & 0x0F] + HEX_CHARS[(h7h >> 8) & 0x0F] + + HEX_CHARS[(h7h >> 4) & 0x0F] + HEX_CHARS[h7h & 0x0F] + + HEX_CHARS[(h7l >> 28) & 0x0F] + HEX_CHARS[(h7l >> 24) & 0x0F] + + HEX_CHARS[(h7l >> 20) & 0x0F] + HEX_CHARS[(h7l >> 16) & 0x0F] + + HEX_CHARS[(h7l >> 12) & 0x0F] + HEX_CHARS[(h7l >> 8) & 0x0F] + + HEX_CHARS[(h7l >> 4) & 0x0F] + HEX_CHARS[h7l & 0x0F]; } return hex; }; - if(!root.JS_SHA512_TEST && NODE_JS) { - sha512.sha512 = sha512; - sha512.sha384 = sha384; - sha512.sha512_256 = sha512_256; - sha512.sha512_224 = sha512_224; - module.exports = sha512; - } else if(root) { + var exports = sha512; + exports.sha512 = sha512; + exports.sha384 = sha384; + exports.sha512_256 = sha512_256; + exports.sha512_224 = sha512_224; + + if (COMMON_JS) { + module.exports = exports; + } else { root.sha512 = sha512; root.sha384 = sha384; root.sha512_256 = sha512_256; root.sha512_224 = sha512_224; + if (AMD) { + define(function () { + return exports; + }); + } } -}(this)); +})(); diff --git a/tests/node-test.js b/tests/node-test.js index 17b1a08..9248404 100644 --- a/tests/node-test.js +++ b/tests/node-test.js @@ -1,17 +1,59 @@ +// Node.js env +expect = require('expect.js'); sha512 = require('../src/sha512.js').sha512; sha384 = require('../src/sha512.js').sha384; sha512_256 = require('../src/sha512.js').sha512_256; sha512_224 = require('../src/sha512.js').sha512_224; -expect = require('expect.js'); require('./test.js'); -delete require.cache[require.resolve('../src/sha512.js')] -delete require.cache[require.resolve('./test.js')] +delete require.cache[require.resolve('../src/sha512.js')]; +delete require.cache[require.resolve('./test.js')]; sha512 = null; sha384 = null; sha512_256 = null; sha512_224 = null; -JS_SHA512_TEST = true; +// Webpack browser env +JS_SHA512_NO_NODE_JS = true; +window = global; +sha512 = require('../src/sha512.js').sha512; +sha384 = require('../src/sha512.js').sha384; +sha512_256 = require('../src/sha512.js').sha512_256; +sha512_224 = require('../src/sha512.js').sha512_224; +require('./test.js'); + +delete require.cache[require.resolve('../src/sha512.js')]; +delete require.cache[require.resolve('./test.js')]; +sha512 = null; +sha384 = null; +sha512_256 = null; +sha512_224 = null; + +// browser env +JS_SHA512_NO_NODE_JS = true; +JS_SHA512_NO_COMMON_JS = true; +window = global; require('../src/sha512.js'); require('./test.js'); + +delete require.cache[require.resolve('../src/sha512.js')]; +delete require.cache[require.resolve('./test.js')]; +sha512 = null; +sha384 = null; +sha512_256 = null; +sha512_224 = null; + +// browser AMD +JS_SHA512_NO_NODE_JS = true; +JS_SHA512_NO_COMMON_JS = true; +window = global; +define = function (func) { + sha512 = func(); + sha384 = sha512.sha384; + sha512_256 = sha512.sha512_256; + sha512_224 = sha512.sha512_224; + require('./test.js'); +}; +define.amd = true; + +require('../src/sha512.js'); diff --git a/tests/test.js b/tests/test.js index 28d5bfd..138d1d6 100644 --- a/tests/test.js +++ b/tests/test.js @@ -1,40 +1,40 @@ -(function(sha512, sha384, sha512_256, sha512_224) { - describe('sha512', function() { - describe('ascii', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { +(function (sha512, sha384, sha512_256, sha512_224) { + describe('sha512', function () { + describe('ascii', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512('')).to.be('cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'); expect(sha512('The quick brown fox jumps over the lazy dog')).to.be('07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6'); expect(sha512('The quick brown fox jumps over the lazy dog.')).to.be('91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('a8dedff31e3be9df6413ef5b4ecb93d62d3fbcb04297552eab5370e04afd45927854a4373037e81a50186e678d818c9ba824f4c850f3d0f02764af0252076979'); }); }); }); - describe('UTF8', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('UTF8', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512('中文')).to.be('8b88efc2ebbcbdad5ac2d65af05bec57bda25e71fd5fb25bbd892057a2755fbd05d8d8491cb2946febd5b0f124ffdfbaecf7e34946353c4f1b5ab29545895468'); expect(sha512('aécio')).to.be('e1c6925243db76985abacaf9fa85e22697f549e67f65a36c88e4046a2260990ff9eefc3402396ea8dcbe8c592d8d5671bea612156eda38d3708d394bbd17d493'); expect(sha512('𠜎')).to.be('f3e7ee9cdf7dbb52f7edd59ce3d49868c64f2b3aceceab060b8eaaebdf9de0dae5866d660e3319c5aad426a2176cb1703efc73eb24d1a90458ceda1b7f4e3940'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('6cb7f6d3381a187edadb43c7cdcfbbed4d2c213a7dce8ea08fe42b9882b64e643202b4974a6db94f94650ab9173d97c58bd59f6d19d27e01aab76d8d08855c65'); expect(sha512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('d24af1901aaf1458f089a6eddf784ce61c3012aee0df98bdb67ad2dc6b41a3b4051d40caac524373930ae396a2dde99a9204871b40892eea3e5f3c8d46da0c3c'); }); }); }); - describe('special length', function() { - it('should be successful', function() { + describe('special length', function () { + it('should be successful', function () { expect(sha512('012345678012345678012345678012345678012345678012345678012345012345678012345678012345678012345678012345678012345')).to.be('a58b6132677883b0ab565dfb4284a4441a35a0954738d90ad8c17800de5ee44f6482efd4c13e05a6e907fb830fc9d9039bd96f004e5e3e8d00802fb9448dec03'); expect(sha512('0123456780123456780123456780123456780123456780123456780123450123456780123456780123456780123456780123456780123456')).to.be('34a93615cbf314a799857dc9c1804ed04be60b481229ea3a53e00316e62ac7924ea7e65435cbd9fc7d8e10e0e52e56bd99ac571c1c470cbf9252bdd70b3fd8a3'); expect(sha512('123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567')).to.be('4555ce42c2e19f9a09a34b3e40f85178c22cde939ac42de4d33ca0e08e3c6a2e531a3abd9265a72cc22a19d085eb2c468c20d6cfb022d8914b53d6a2b485b7c9'); @@ -43,42 +43,42 @@ }); }); - describe('sha384', function() { - describe('ascii', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('sha384', function () { + describe('ascii', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha384('')).to.be('38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b'); expect(sha384('The quick brown fox jumps over the lazy dog')).to.be('ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1'); expect(sha384('The quick brown fox jumps over the lazy dog.')).to.be('ed892481d8272ca6df370bf706e4d7bc1b5739fa2177aae6c50e946678718fc67a7af2819a021c2fc34e91bdb63409d7'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha384('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('3ab853dee5785c19346e8578d9cdb3b7258a8212c15fdf25d3055b4fbbc892a529e552788992fdae68dfa34f13f0af4e'); }); }); }); - describe('UTF8', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('UTF8', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha384('中文')).to.be('93422ceb8291a69b22f02dc1114c39a287493ad525dcebc77e4019a44eaee2633a85d0f29cd298ee6799048c33a4be0c'); expect(sha384('aécio')).to.be('a2146805faafc45b0055b49386768811c803ef9fa8a85b648e114276c1bf49ef1092ec1bc2d3f7e036238a97eace2087'); expect(sha384('𠜎')).to.be('e929475cf9b4d73e2a2366146381ac779b17499c92ddf910e028eb9f30280878a2843643ed8a539af5dffed64143b93d'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('143f4bb1a89e576ea05bd8433a3903352c199bf6ef35bfa30afa1505d6fcef77476d1b1824105da160a5164b7c792328'); expect(sha384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('432a8d25efb1a8d463acc7bbbed57365cddc72de3cc19d42e1d260b1479770ecea9dd403fead2949d4fabb36939f263a'); }); }); }); - describe('special length', function() { - it('should be successful', function() { + describe('special length', function () { + it('should be successful', function () { expect(sha384('012345678012345678012345678012345678012345678012345678012345012345678012345678012345678012345678012345678012345')).to.be('a0ecc55799e1db4e7b30c2e78d445ada5ea2939d47e8aab51d6ae86cdcf93d5048b2666aa25fbaede7ec59ee59f46e88'); expect(sha384('0123456780123456780123456780123456780123456780123456780123450123456780123456780123456780123456780123456780123456')).to.be('484b51b9f03f453a08c823afea1a32434b6545fb682b0b91d94e1f4bf2812abc8a31387050a2e74909f862436b88c798'); expect(sha384('123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567')).to.be('e4c83d6e5e18b4391a0b2e5fab84234ce9fc1071d87a9dcf38ca050ca3635781ef1d65ad4f9a835df26d186384105eac'); @@ -87,42 +87,42 @@ }); }); - describe('sha512/256', function() { - describe('ascii', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('sha512/256', function () { + describe('ascii', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512_256('')).to.be('c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a'); expect(sha512_256('The quick brown fox jumps over the lazy dog')).to.be('dd9d67b371519c339ed8dbd25af90e976a1eeefd4ad3d889005e532fc5bef04d'); expect(sha512_256('The quick brown fox jumps over the lazy dog.')).to.be('1546741840f8a492b959d9b8b2344b9b0eb51b004bba35c0aebaac86d45264c3'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512_256('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('21e2e940930b23f1de6377086d07e22033c6bbf3fd9fbf4b62ec66e6c08c25be'); }); }); }); - describe('UTF8', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('UTF8', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512_256('中文')).to.be('b6dab29c16ec35ab34a5d92ff135b58de96741dda78b1009a2181cf8b45d2f72'); expect(sha512_256('aécio')).to.be('122802ca08e39c2ef46f6a81379dc5683bd8aa074dfb54259f0add4d8b5504bc'); expect(sha512_256('𠜎')).to.be('1032308151c0f4f5f8d4e0d96956352eb8ff87da98df8878d8795a858a7e7c08'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('d32a41d9858e45b68402f77cf9f3c3f992c36a4bffd230f78d666c87f97eaf7e'); expect(sha512_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('bd1abad59e6b8ad69bc17b6e05aa13f0cb725467fbeb45b83d3e4094332d1367'); }); }); }); - describe('special length', function() { - it('should be successful', function() { + describe('special length', function () { + it('should be successful', function () { expect(sha512_256('012345678012345678012345678012345678012345678012345678012345012345678012345678012345678012345678012345678012345')).to.be('b8bd1d6cae9992f8619904683d54cbed560ec3ef2a33d8bc225175ec27dc09a4'); expect(sha512_256('0123456780123456780123456780123456780123456780123456780123450123456780123456780123456780123456780123456780123456')).to.be('4edb8bb93b959f482ce2e434585f3e164f53b00c42c4c46797445b39d225cfe3'); expect(sha512_256('123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567')).to.be('44da7ca023996ec4b4ded88410e4acc209ca26c34dc0f26550d28503974fe2d1'); @@ -131,42 +131,42 @@ }); }); - describe('sha512/224', function() { - describe('ascii', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('sha512/224', function () { + describe('ascii', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512_224('')).to.be('6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4'); expect(sha512_224('The quick brown fox jumps over the lazy dog')).to.be('944cd2847fb54558d4775db0485a50003111c8e5daa63fe722c6aa37'); expect(sha512_224('The quick brown fox jumps over the lazy dog.')).to.be('6d6a9279495ec4061769752e7ff9c68b6b0b3c5a281b7917ce0572de'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512_224('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('2e962464977b198ee758d615bbc92251ad2e3c0960068e279fd21d2f'); }); }); }); - describe('UTF8', function() { - describe('less than 128 bytes', function() { - it('should be successful', function() { + describe('UTF8', function () { + describe('less than 128 bytes', function () { + it('should be successful', function () { expect(sha512_224('中文')).to.be('0f46a0ae7f226517dd66ece0ce1efa29ffb7ced05ac4566fdcaed188'); expect(sha512_224('aécio')).to.be('562f2e4ee7f7451d20dcc6a0ac1a1e1c4a75f09baaf1cf19af3e15f4'); expect(sha512_224('𠜎')).to.be('0533318c52b3d4ad355c2a6c7e727ae3d2efa749db480ac33560b059'); }); }); - describe('more than 128 bytes', function() { - it('should be successful', function() { + describe('more than 128 bytes', function () { + it('should be successful', function () { expect(sha512_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('f67e191a5d4ee67a272ccaf6cf597f0c4d6a0c46bd631be7cadb0944'); expect(sha512_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('009c3d1e3172d6df71344982eada855421592aea28acbf660ada7569'); }); }); }); - describe('special length', function() { - it('should be successful', function() { + describe('special length', function () { + it('should be successful', function () { expect(sha512_224('012345678012345678012345678012345678012345678012345678012345012345678012345678012345678012345678012345678012345')).to.be('36d6398ca22d885432e2fe3af53b9f83b2dc7a8e9284d65b81f7a879'); expect(sha512_224('0123456780123456780123456780123456780123456780123456780123450123456780123456780123456780123456780123456780123456')).to.be('d930407a742d10f70747f05271181ad6c1c92f87482ce6a494cb566a'); expect(sha512_224('123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567')).to.be('1d60954ce7bee0bf5d235fe6bfc928c0f32c0f1c4992451dbc0f4dbf');