* Fixed special length bug.

* Add test cases.
pull/5/head v0.2.1
Chen Yi-Cyuan 11 years ago
parent 8754ac17ef
commit 009d7b6070

@ -1,3 +1,8 @@
# v0.2.1 / 2015-02-05
* Fixed special length bug.
* Add test cases.
# v0.2.0 / 2015-02-03
* Remove ascii parameter.

@ -1,6 +1,6 @@
{
"name": "js-sha256",
"version": "0.2.0",
"version": "0.2.1",
"main": ["build/sha256.min.js"],
"ignore": [
"samples",

@ -1,8 +1,8 @@
(function(B,P){var H="undefined"!=typeof module;H&&(B=global);var a="0123456789abcdef".split(""),O=[-2147483648,8388608,32768,128],D=[24,16,8,0],I=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,
773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],b=[],C=function(a){return M(a,!0)},N=function(a){return M(a,!1)},M=function(B,C){var k,n,p,q,r,t,u,v,e,H=!1,d,E=0,J=0,K=0,L=B.length,h,c,f,g,G,F;C?(k=1779033703,n=3144134277,
p=1013904242,q=2773480762,r=1359893119,t=2600822924,u=528734635,v=1541459225):(k=3238371032,n=914150663,p=812702999,q=4144912697,r=4290775857,t=1750603025,u=1694076839,v=3204075428);b[64]=0;do{b[0]=b[64];b[16]=b[1]=b[2]=b[3]=b[4]=b[5]=b[6]=b[7]=b[8]=b[9]=b[10]=b[11]=b[12]=b[13]=b[14]=b[15]=0;for(d=J;E<L&&64>d;++E)e=B.charCodeAt(E),128>e?b[d>>2]|=e<<D[d++&3]:(2048>e?b[d>>2]|=(192|e>>6)<<D[d++&3]:(55296>e||57344<=e?b[d>>2]|=(224|e>>12)<<D[d++&3]:(e=65536+((e&1023)<<10|B.charCodeAt(++E)&1023),b[d>>2]|=
(240|e>>18)<<D[d++&3],b[d>>2]|=(128|e>>12&63)<<D[d++&3]),b[d>>2]|=(128|e>>6&63)<<D[d++&3]),b[d>>2]|=(128|e&63)<<D[d++&3]);b[64]=b[16];K+=d-J;J=d-64;E==L&&(b[d>>2]|=O[d&3],++E);E>L&&56>d&&(b[15]=K<<3,H=!0);d=k;var l=n,m=p,w=q,x=r,y=t,z=u,A=v;for(e=16;64>e;++e)f=c=b[e-15],f=f>>>7|f<<25,c=c>>>18|c<<14,h=f^c^b[e-15]>>>3,f=c=b[e-2],f=f>>>17|f<<15,c=c>>>19|c<<13,c=f^c^b[e-2]>>>10,b[e]=b[e-16]+h+b[e-7]+c<<0;F=l&m;for(e=0;64>e;e+=4)f=d>>>2|d<<30,c=d>>>13|d<<19,g=d>>>22|d<<10,h=f^c^g,f=x>>>6|x<<26,c=x>>>11|
(240|e>>18)<<D[d++&3],b[d>>2]|=(128|e>>12&63)<<D[d++&3]),b[d>>2]|=(128|e>>6&63)<<D[d++&3]),b[d>>2]|=(128|e&63)<<D[d++&3]);K+=d-J;J=d-64;E==L&&(b[d>>2]|=O[d&3],++E);b[64]=b[16];E>L&&56>d&&(b[15]=K<<3,H=!0);d=k;var l=n,m=p,w=q,x=r,y=t,z=u,A=v;for(e=16;64>e;++e)f=c=b[e-15],f=f>>>7|f<<25,c=c>>>18|c<<14,h=f^c^b[e-15]>>>3,f=c=b[e-2],f=f>>>17|f<<15,c=c>>>19|c<<13,c=f^c^b[e-2]>>>10,b[e]=b[e-16]+h+b[e-7]+c<<0;F=l&m;for(e=0;64>e;e+=4)f=d>>>2|d<<30,c=d>>>13|d<<19,g=d>>>22|d<<10,h=f^c^g,f=x>>>6|x<<26,c=x>>>11|
x<<21,g=x>>>25|x<<7,c=f^c^g,G=d&l,f=G^d&m^F,g=x&y^~x&z,c=A+c+g+I[e]+b[e]<<0,h=h+f<<0,A=w+c<<0,w=c+h<<0,f=w>>>2|w<<30,c=w>>>13|w<<19,g=w>>>22|w<<10,h=f^c^g,f=A>>>6|A<<26,c=A>>>11|A<<21,g=A>>>25|A<<7,c=f^c^g,F=w&d,f=F^w&l^G,g=A&x^~A&y,c=z+c+g+I[e+1]+b[e+1]<<0,h=h+f<<0,z=m+c<<0,m=c+h<<0,f=m>>>2|m<<30,c=m>>>13|m<<19,g=m>>>22|m<<10,h=f^c^g,f=z>>>6|z<<26,c=z>>>11|z<<21,g=z>>>25|z<<7,c=f^c^g,G=m&w,f=G^m&d^F,g=z&A^~z&x,c=y+c+g+I[e+2]+b[e+2]<<0,h=h+f<<0,y=l+c<<0,l=c+h<<0,f=l>>>2|l<<30,c=l>>>13|l<<19,g=l>>>
22|l<<10,h=f^c^g,f=y>>>6|y<<26,c=y>>>11|y<<21,g=y>>>25|y<<7,c=f^c^g,F=l&m,f=F^l&w^G,g=y&z^~y&A,c=x+c+g+I[e+3]+b[e+3]<<0,h=h+f<<0,x=d+c<<0,d=c+h<<0;k=k+d<<0;n=n+l<<0;p=p+m<<0;q=q+w<<0;r=r+x<<0;t=t+y<<0;u=u+z<<0;v=v+A<<0}while(!H);k=a[k>>28&15]+a[k>>24&15]+a[k>>20&15]+a[k>>16&15]+a[k>>12&15]+a[k>>8&15]+a[k>>4&15]+a[k&15]+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[p>>28&15]+a[p>>24&15]+a[p>>20&15]+a[p>>16&15]+a[p>>12&15]+a[p>>8&15]+a[p>>4&15]+a[p&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];C&&(k+=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]);return k};!B.JS_SHA256_TEST&&H?(C.sha256=C,
C.sha224=N,module.exports=C):B&&(B.sha256=C,B.sha224=N)})(this);
C.sha224=N,module.exports=C):B&&(B.sha256=C,B.sha224=N)})(this);

@ -1,6 +1,6 @@
{
"name": "js-sha256",
"version": "0.2.0",
"version": "0.2.1",
"description": "A simple SHA-256 / SHA-224 hash function for JavaScript supports UTF-8 encoding.",
"main": "src/sha256.js",
"devDependencies": {

@ -1,5 +1,5 @@
/*
* js-sha256 v0.2.0
* js-sha256 v0.2.1
* https://github.com/emn178/js-sha256
*
* Copyright 2014-2015, emn178@gmail.com
@ -86,13 +86,13 @@
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
}
}
blocks[64] = blocks[16];
bytes += i - start;
start = i - 64;
if(index == length) {
blocks[i >> 2] |= EXTRA[i & 3];
++index;
}
blocks[64] = blocks[16];
if(index > length && i < 56) {
blocks[15] = bytes << 3;
end = true;

@ -5,16 +5,12 @@ describe('sha256', function() {
expect(sha256('')).to.be('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
expect(sha256('The quick brown fox jumps over the lazy dog')).to.be('d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592');
expect(sha256('The quick brown fox jumps over the lazy dog.')).to.be('ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c');
expect(sha256('0123456780123456780123456780123456780123456780123456780')).to.be('5e6b963e2b6444dab8544beab8532850cef2a9d143872a6a5384abe37e61b3db');
expect(sha256('01234567801234567801234567801234567801234567801234567801')).to.be('85d240a4a03a0710423fc4f701da51e8785c9eaa96d718ab1c7991d6afd60d62');
});
});
describe('more than 64 bytes', function() {
it('should be successful', function() {
expect(sha256('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('54e73d89e1924fdcd056390266a983924b6d6d461e9470b6cd50bbaf69b5c54c');
expect(sha256('01234567801234567801234567801234567801234567801234567801234567801234567')).to.be('74b51c6911f9a8b5e7c499effe7604e43b672166818873c27752c248de434841');
expect(sha256('012345678012345678012345678012345678012345678012345678012345678012345678')).to.be('6fba9e623ae6abf028a1b195748814aa95eebfb22e3ec5e15d2444cd6c48186a');
});
});
});
@ -35,6 +31,16 @@ describe('sha256', function() {
});
});
});
describe('special length', function() {
it('should be successful', function() {
expect(sha256('0123456780123456780123456780123456780123456780123456780')).to.be('5e6b963e2b6444dab8544beab8532850cef2a9d143872a6a5384abe37e61b3db');
expect(sha256('01234567801234567801234567801234567801234567801234567801')).to.be('85d240a4a03a0710423fc4f701da51e8785c9eaa96d718ab1c7991d6afd60d62');
expect(sha256('0123456780123456780123456780123456780123456780123456780123456780')).to.be('c3ee464d5620eb2dde3dfda4c7955dbd9e9e2e9b113c13983fc67b0dfd892a53');
expect(sha256('01234567801234567801234567801234567801234567801234567801234567801234567')).to.be('74b51c6911f9a8b5e7c499effe7604e43b672166818873c27752c248de434841');
expect(sha256('012345678012345678012345678012345678012345678012345678012345678012345678')).to.be('6fba9e623ae6abf028a1b195748814aa95eebfb22e3ec5e15d2444cd6c48186a');
});
});
});
describe('sha224', function() {
@ -44,16 +50,12 @@ describe('sha224', function() {
expect(sha224('')).to.be('d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f');
expect(sha224('The quick brown fox jumps over the lazy dog')).to.be('730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525');
expect(sha224('The quick brown fox jumps over the lazy dog.')).to.be('619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c');
expect(sha224('0123456780123456780123456780123456780123456780123456780')).to.be('bc4a354d66f3cff4bc6dd6a88fbb0435cede7fd5fe94da0760cb1924');
expect(sha224('01234567801234567801234567801234567801234567801234567801')).to.be('2f148f757d1295784a7c69bf328b8bf827a536669e132234cd6f50e7');
});
});
describe('more than 64 bytes', function() {
it('should be successful', function() {
expect(sha224('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('4d97e15967391d2e846ea7d21bb480efadbae5868b731e7cc6267006');
expect(sha224('01234567801234567801234567801234567801234567801234567801234567801234567')).to.be('16ee1b101fe0e0d8dd156d598931ec19d75b0f8dc0a0455733c168c8');
expect(sha224('012345678012345678012345678012345678012345678012345678012345678012345678')).to.be('04c7a30079c640e440d884cdf0d7ab04fd05501d4498cb21be29ca1f');
});
});
});
@ -74,4 +76,14 @@ describe('sha224', function() {
});
});
});
describe('special length', function() {
it('should be successful', function() {
expect(sha224('0123456780123456780123456780123456780123456780123456780')).to.be('bc4a354d66f3cff4bc6dd6a88fbb0435cede7fd5fe94da0760cb1924');
expect(sha224('01234567801234567801234567801234567801234567801234567801')).to.be('2f148f757d1295784a7c69bf328b8bf827a536669e132234cd6f50e7');
expect(sha224('0123456780123456780123456780123456780123456780123456780123456780')).to.be('496275a96bf41aa27ce89c3ae0fc63c3a3eab063887a8ea075bd091b');
expect(sha224('01234567801234567801234567801234567801234567801234567801234567801234567')).to.be('16ee1b101fe0e0d8dd156d598931ec19d75b0f8dc0a0455733c168c8');
expect(sha224('012345678012345678012345678012345678012345678012345678012345678012345678')).to.be('04c7a30079c640e440d884cdf0d7ab04fd05501d4498cb21be29ca1f');
});
});
});

Loading…
Cancel
Save