diff options
author | Brian Turek <brian.turek@gmail.com> | 2012-11-22 12:44:50 -0500 |
---|---|---|
committer | Brian Turek <brian.turek@gmail.com> | 2012-11-22 12:44:50 -0500 |
commit | eb34495a2d67fc3147c81837cc856efdb4c9037a (patch) | |
tree | 81ac9e68639ee82861f8a27b61b3cb2400f028d4 | |
parent | 69c6ec326a6bbf51655dea80039289ad6bd374f0 (diff) | |
download | jsSHA-eb34495a2d67fc3147c81837cc856efdb4c9037a.zip jsSHA-eb34495a2d67fc3147c81837cc856efdb4c9037a.tar.gz jsSHA-eb34495a2d67fc3147c81837cc856efdb4c9037a.tar.bz2 |
Possible fix for 64-bit Safari issue
-rwxr-xr-x | CHANGELOG | 1 | ||||
-rwxr-xr-x | src/sha.js | 46 | ||||
-rwxr-xr-x | src/sha512.js | 2 | ||||
-rwxr-xr-x | src/sha_dev.js | 10 | ||||
-rwxr-xr-x | test/test.html | 2 |
5 files changed, 31 insertions, 30 deletions
@@ -26,6 +26,7 @@ - Significantly changed the test/test.html to make it easier to understand and to allow for easier adding of test cases - Replaced previous error returning code with thrown exceptions +- Possible fix for 64-bit Safari issue (thanks Ron Garret!) * This library misused the term ASCII so input type of TEXT was added with the intention of deprecating ASCII @@ -9,31 +9,31 @@ Several functions taken from Paul Johnson */ -function o(a){throw a;}var p=null;function q(a,b){this.a=a;this.b=b}function w(a,b){var c=[],g=(1<<b)-1,f=a.length*b,h;for(h=0;h<f;h+=b)c[h>>>5]|=(a.charCodeAt(h/b)&g)<<32-b-h%32;return{value:c,binLen:f}}function x(a){var b=[],c=a.length,g,f;0!==c%2&&o("String of HEX type must be in byte increments");for(g=0;g<c;g+=2)f=parseInt(a.substr(g,2),16),isNaN(f)&&o("String of HEX type contains invalid characters"),b[g>>>3]|=f<<24-4*(g%8);return{value:b,binLen:4*c}} -function z(a){var b=[],c=0,g,f,h,i,k;-1===a.search(/^[a-zA-Z0-9=+\/]+$/)&&o("Invalid character in base-64 string");g=a.indexOf("=");a=a.replace(/\=/g,"");-1!==g&&g<a.length&&o("Invalid '=' found in base-64 string");for(f=0;f<a.length;f+=4){k=a.substr(f,4);for(h=i=0;h<k.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(k[h]),i|=g<<18-6*h;for(h=0;h<k.length-1;h+=1)b[c>>2]|=(i>>>16-8*h&255)<<24-8*(c%4),c+=1}return{value:b,binLen:8*c}} -function C(a,b){var c="",g=4*a.length,f,h;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),c+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(h&15);return b.outputUpper?c.toUpperCase():c} -function D(a,b){var c="",g=4*a.length,f,h,i;for(f=0;f<g;f+=3){i=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255;for(h=0;4>h;h+=1)c=8*f+6*h<=32*a.length?c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(i>>>6*(3-h)&63):c+b.b64Pad}return c} -function G(a){var b={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(b.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(b.b64Pad=a.b64Pad)}catch(c){}"boolean"!==typeof b.outputUpper&&o("Invalid outputUpper formatting option");"string"!==typeof b.b64Pad&&o("Invalid b64Pad formatting option");return b}function I(a,b){return a>>>b|a<<32-b}function P(a,b){var c=p;return c=32>=b?new q(a.a>>>b|a.b<<32-b,a.b>>>b|a.a<<32-b):new q(a.b>>>b-32|a.a<<64-b,a.a>>>b-32|a.b<<64-b)} -function Q(a,b){var c=p;return c=32>=b?new q(a.a>>>b,a.b>>>b|a.a<<32-b):new q(0,a.a>>>b-32)}function R(a,b,c){return a&b^~a&c}function S(a,b,c){return new q(a.a&b.a^~a.a&c.a,a.b&b.b^~a.b&c.b)}function T(a,b,c){return a&b^a&c^b&c}function U(a,b,c){return new q(a.a&b.a^a.a&c.a^b.a&c.a,a.b&b.b^a.b&c.b^b.b&c.b)}function V(a){return I(a,2)^I(a,13)^I(a,22)}function aa(a){var b=P(a,28),c=P(a,34),a=P(a,39);return new q(b.a^c.a^a.a,b.b^c.b^a.b)}function ba(a){return I(a,6)^I(a,11)^I(a,25)} -function ca(a){var b=P(a,14),c=P(a,18),a=P(a,41);return new q(b.a^c.a^a.a,b.b^c.b^a.b)}function da(a){return I(a,7)^I(a,18)^a>>>3}function ea(a){var b=P(a,1),c=P(a,8),a=Q(a,7);return new q(b.a^c.a^a.a,b.b^c.b^a.b)}function fa(a){return I(a,17)^I(a,19)^a>>>10}function ga(a){var b=P(a,19),c=P(a,61),a=Q(a,6);return new q(b.a^c.a^a.a,b.b^c.b^a.b)}function X(a,b){var c=(a&65535)+(b&65535);return((a>>>16)+(b>>>16)+(c>>>16)&65535)<<16|c&65535} -function ha(a,b,c,g){var f=(a&65535)+(b&65535)+(c&65535)+(g&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(g>>>16)+(f>>>16)&65535)<<16|f&65535}function Y(a,b,c,g,f){var h=(a&65535)+(b&65535)+(c&65535)+(g&65535)+(f&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|h&65535} -function ia(a,b){var c,g,f;c=(a.b&65535)+(b.b&65535);g=(a.b>>>16)+(b.b>>>16)+(c>>>16);f=(g&65535)<<16|c&65535;c=(a.a&65535)+(b.a&65535)+(g>>>16);g=(a.a>>>16)+(b.a>>>16)+(c>>>16);return new q((g&65535)<<16|c&65535,f)} -function ja(a,b,c,g){var f,h,i;f=(a.b&65535)+(b.b&65535)+(c.b&65535)+(g.b&65535);h=(a.b>>>16)+(b.b>>>16)+(c.b>>>16)+(g.b>>>16)+(f>>>16);i=(h&65535)<<16|f&65535;f=(a.a&65535)+(b.a&65535)+(c.a&65535)+(g.a&65535)+(h>>>16);h=(a.a>>>16)+(b.a>>>16)+(c.a>>>16)+(g.a>>>16)+(f>>>16);return new q((h&65535)<<16|f&65535,i)} -function ka(a,b,c,g,f){var h,i,k;h=(a.b&65535)+(b.b&65535)+(c.b&65535)+(g.b&65535)+(f.b&65535);i=(a.b>>>16)+(b.b>>>16)+(c.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16);k=(i&65535)<<16|h&65535;h=(a.a&65535)+(b.a&65535)+(c.a&65535)+(g.a&65535)+(f.a&65535)+(i>>>16);i=(a.a>>>16)+(b.a>>>16)+(c.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16);return new q((i&65535)<<16|h&65535,k)} -function Z(a,b){var c=[],g,f,h,i,k,m,n,j,l,e=[1732584193,4023233417,2562383102,271733878,3285377520],y=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393, -1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];a[b>>>5]|=128<<24-b%32;a[(b+ -65>>>9<<4)+15]=b;l=a.length;for(n=0;n<l;n+=16){g=e[0];f=e[1];h=e[2];i=e[3];k=e[4];for(j=0;80>j;j+=1)c[j]=16>j?a[j+n]:(c[j-3]^c[j-8]^c[j-14]^c[j-16])<<1|(c[j-3]^c[j-8]^c[j-14]^c[j-16])>>>31,m=20>j?Y(g<<5|g>>>27,f&h^~f&i,k,y[j],c[j]):40>j?Y(g<<5|g>>>27,f^h^i,k,y[j],c[j]):60>j?Y(g<<5|g>>>27,T(f,h,i),k,y[j],c[j]):Y(g<<5|g>>>27,f^h^i,k,y[j],c[j]),k=i,i=h,h=f<<30|f>>>2,f=g,g=m;e[0]=X(g,e[0]);e[1]=X(f,e[1]);e[2]=X(h,e[2]);e[3]=X(i,e[3]);e[4]=X(k,e[4])}return e} -function $(a,b,c){var g,f,h,i,k,m,n,j,l,e,y,E,r,J,u,s,K,L,v,A,B,t,M,N,d,O,F=[],W,H;"SHA-224"===c||"SHA-256"===c?(y=64,g=(b+65>>>9<<4)+15,J=16,u=1,d=Number,s=X,K=ha,L=Y,v=da,A=fa,B=V,t=ba,N=T,M=R,O=[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],e="SHA-224"===c?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277, -1013904242,2773480762,1359893119,2600822924,528734635,1541459225]):"SHA-384"===c||"SHA-512"===c?(y=80,g=(b+128>>>10<<5)+31,J=32,u=2,d=q,s=ia,K=ja,L=ka,v=ea,A=ga,B=aa,t=ca,N=U,M=S,O=[new d(1116352408,3609767458),new d(1899447441,602891725),new d(3049323471,3964484399),new d(3921009573,2173295548),new d(961987163,4081628472),new d(1508970993,3053834265),new d(2453635748,2937671579),new d(2870763221,3664609560),new d(3624381080,2734883394),new d(310598401,1164996542),new d(607225278,1323610764),new d(1426881987, +function o(a){throw a;}var p=null;function q(a,c){this.a=a;this.b=c}function w(a,c){var b=[],g=(1<<c)-1,f=a.length*c,h;for(h=0;h<f;h+=c)b[h>>>5]|=(a.charCodeAt(h/c)&g)<<32-c-h%32;return{value:b,binLen:f}}function x(a){var c=[],b=a.length,g,f;0!==b%2&&o("String of HEX type must be in byte increments");for(g=0;g<b;g+=2)f=parseInt(a.substr(g,2),16),isNaN(f)&&o("String of HEX type contains invalid characters"),c[g>>>3]|=f<<24-4*(g%8);return{value:c,binLen:4*b}} +function z(a){var c=[],b=0,g,f,h,i,k;-1===a.search(/^[a-zA-Z0-9=+\/]+$/)&&o("Invalid character in base-64 string");g=a.indexOf("=");a=a.replace(/\=/g,"");-1!==g&&g<a.length&&o("Invalid '=' found in base-64 string");for(f=0;f<a.length;f+=4){k=a.substr(f,4);for(h=i=0;h<k.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(k[h]),i|=g<<18-6*h;for(h=0;h<k.length-1;h+=1)c[b>>2]|=(i>>>16-8*h&255)<<24-8*(b%4),b+=1}return{value:c,binLen:8*b}} +function C(a,c){var b="",g=4*a.length,f,h;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),b+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(h&15);return c.outputUpper?b.toUpperCase():b} +function D(a,c){var b="",g=4*a.length,f,h,i;for(f=0;f<g;f+=3){i=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255;for(h=0;4>h;h+=1)b=8*f+6*h<=32*a.length?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(i>>>6*(3-h)&63):b+c.b64Pad}return b} +function G(a){var c={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(c.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(c.b64Pad=a.b64Pad)}catch(b){}"boolean"!==typeof c.outputUpper&&o("Invalid outputUpper formatting option");"string"!==typeof c.b64Pad&&o("Invalid b64Pad formatting option");return c}function I(a,c){return a>>>c|a<<32-c} +function P(a,c){var b=p,b=new q(a.a,a.b);return b=32>=c?new q(b.a>>>c|b.b<<32-c,b.b>>>c|b.a<<32-c):new q(b.b>>>c-32|b.a<<64-c,b.a>>>c-32|b.b<<64-c)}function Q(a,c){var b=p;return b=32>=c?new q(a.a>>>c,a.b>>>c|a.a<<32-c):new q(0,a.a>>>c-32)}function R(a,c,b){return a&c^~a&b}function S(a,c,b){return new q(a.a&c.a^~a.a&b.a,a.b&c.b^~a.b&b.b)}function T(a,c,b){return a&c^a&b^c&b}function U(a,c,b){return new q(a.a&c.a^a.a&b.a^c.a&b.a,a.b&c.b^a.b&b.b^c.b&b.b)} +function V(a){return I(a,2)^I(a,13)^I(a,22)}function aa(a){var c=P(a,28),b=P(a,34),a=P(a,39);return new q(c.a^b.a^a.a,c.b^b.b^a.b)}function ba(a){return I(a,6)^I(a,11)^I(a,25)}function ca(a){var c=P(a,14),b=P(a,18),a=P(a,41);return new q(c.a^b.a^a.a,c.b^b.b^a.b)}function da(a){return I(a,7)^I(a,18)^a>>>3}function ea(a){var c=P(a,1),b=P(a,8),a=Q(a,7);return new q(c.a^b.a^a.a,c.b^b.b^a.b)}function fa(a){return I(a,17)^I(a,19)^a>>>10} +function ga(a){var c=P(a,19),b=P(a,61),a=Q(a,6);return new q(c.a^b.a^a.a,c.b^b.b^a.b)}function X(a,c){var b=(a&65535)+(c&65535);return((a>>>16)+(c>>>16)+(b>>>16)&65535)<<16|b&65535}function ha(a,c,b,g){var f=(a&65535)+(c&65535)+(b&65535)+(g&65535);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)&65535)<<16|f&65535}function Y(a,c,b,g,f){var h=(a&65535)+(c&65535)+(b&65535)+(g&65535)+(f&65535);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|h&65535} +function ia(a,c){var b,g,f;b=(a.b&65535)+(c.b&65535);g=(a.b>>>16)+(c.b>>>16)+(b>>>16);f=(g&65535)<<16|b&65535;b=(a.a&65535)+(c.a&65535)+(g>>>16);g=(a.a>>>16)+(c.a>>>16)+(b>>>16);return new q((g&65535)<<16|b&65535,f)} +function ja(a,c,b,g){var f,h,i;f=(a.b&65535)+(c.b&65535)+(b.b&65535)+(g.b&65535);h=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f>>>16);i=(h&65535)<<16|f&65535;f=(a.a&65535)+(c.a&65535)+(b.a&65535)+(g.a&65535)+(h>>>16);h=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f>>>16);return new q((h&65535)<<16|f&65535,i)} +function ka(a,c,b,g,f){var h,i,k;h=(a.b&65535)+(c.b&65535)+(b.b&65535)+(g.b&65535)+(f.b&65535);i=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16);k=(i&65535)<<16|h&65535;h=(a.a&65535)+(c.a&65535)+(b.a&65535)+(g.a&65535)+(f.a&65535)+(i>>>16);i=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16);return new q((i&65535)<<16|h&65535,k)} +function Z(a,c){var b=[],g,f,h,i,k,m,n,j,l,e=[1732584193,4023233417,2562383102,271733878,3285377520],y=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393, +1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];a[c>>>5]|=128<<24-c%32;a[(c+ +65>>>9<<4)+15]=c;l=a.length;for(n=0;n<l;n+=16){g=e[0];f=e[1];h=e[2];i=e[3];k=e[4];for(j=0;80>j;j+=1)b[j]=16>j?a[j+n]:(b[j-3]^b[j-8]^b[j-14]^b[j-16])<<1|(b[j-3]^b[j-8]^b[j-14]^b[j-16])>>>31,m=20>j?Y(g<<5|g>>>27,f&h^~f&i,k,y[j],b[j]):40>j?Y(g<<5|g>>>27,f^h^i,k,y[j],b[j]):60>j?Y(g<<5|g>>>27,T(f,h,i),k,y[j],b[j]):Y(g<<5|g>>>27,f^h^i,k,y[j],b[j]),k=i,i=h,h=f<<30|f>>>2,f=g,g=m;e[0]=X(g,e[0]);e[1]=X(f,e[1]);e[2]=X(h,e[2]);e[3]=X(i,e[3]);e[4]=X(k,e[4])}return e} +function $(a,c,b){var g,f,h,i,k,m,n,j,l,e,y,E,r,J,u,s,K,L,v,A,B,t,M,N,d,O,F=[],W,H;"SHA-224"===b||"SHA-256"===b?(y=64,g=(c+65>>>9<<4)+15,J=16,u=1,d=Number,s=X,K=ha,L=Y,v=da,A=fa,B=V,t=ba,N=T,M=R,O=[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],e="SHA-224"===b?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277, +1013904242,2773480762,1359893119,2600822924,528734635,1541459225]):"SHA-384"===b||"SHA-512"===b?(y=80,g=(c+128>>>10<<5)+31,J=32,u=2,d=q,s=ia,K=ja,L=ka,v=ea,A=ga,B=aa,t=ca,N=U,M=S,O=[new d(1116352408,3609767458),new d(1899447441,602891725),new d(3049323471,3964484399),new d(3921009573,2173295548),new d(961987163,4081628472),new d(1508970993,3053834265),new d(2453635748,2937671579),new d(2870763221,3664609560),new d(3624381080,2734883394),new d(310598401,1164996542),new d(607225278,1323610764),new d(1426881987, 3590304994),new d(1925078388,4068182383),new d(2162078206,991336113),new d(2614888103,633803317),new d(3248222580,3479774868),new d(3835390401,2666613458),new d(4022224774,944711139),new d(264347078,2341262773),new d(604807628,2007800933),new d(770255983,1495990901),new d(1249150122,1856431235),new d(1555081692,3175218132),new d(1996064986,2198950837),new d(2554220882,3999719339),new d(2821834349,766784016),new d(2952996808,2566594879),new d(3210313671,3203337956),new d(3336571891,1034457026),new d(3584528711, 2466948901),new d(113926993,3758326383),new d(338241895,168717936),new d(666307205,1188179964),new d(773529912,1546045734),new d(1294757372,1522805485),new d(1396182291,2643833823),new d(1695183700,2343527390),new d(1986661051,1014477480),new d(2177026350,1206759142),new d(2456956037,344077627),new d(2730485921,1290863460),new d(2820302411,3158454273),new d(3259730800,3505952657),new d(3345764771,106217008),new d(3516065817,3606008344),new d(3600352804,1432725776),new d(4094571909,1467031594),new d(275423344, 851169720),new d(430227734,3100823752),new d(506948616,1363258195),new d(659060556,3750685593),new d(883997877,3785050280),new d(958139571,3318307427),new d(1322822218,3812723403),new d(1537002063,2003034995),new d(1747873779,3602036899),new d(1955562222,1575990012),new d(2024104815,1125592928),new d(2227730452,2716904306),new d(2361852424,442776044),new d(2428436474,593698344),new d(2756734187,3733110249),new d(3204031479,2999351573),new d(3329325298,3815920427),new d(3391569614,3928383900),new d(3515267271, -566280711),new d(3940187606,3454069534),new d(4118630271,4000239992),new d(116418474,1914138554),new d(174292421,2731055270),new d(289380356,3203993006),new d(460393269,320620315),new d(685471733,587496836),new d(852142971,1086792851),new d(1017036298,365543100),new d(1126000580,2618297676),new d(1288033470,3409855158),new d(1501505948,4234509866),new d(1607167915,987167468),new d(1816402316,1246189591)],e="SHA-384"===c?[new d(3418070365,3238371032),new d(1654270250,914150663),new d(2438529370,812702999), -new d(355462360,4144912697),new d(1731405415,4290775857),new d(41048885895,1750603025),new d(3675008525,1694076839),new d(1203062813,3204075428)]:[new d(1779033703,4089235720),new d(3144134277,2227873595),new d(1013904242,4271175723),new d(2773480762,1595750129),new d(1359893119,2917565137),new d(2600822924,725511199),new d(528734635,4215389547),new d(1541459225,327033209)]):o("Unexpected error in SHA-2 implementation");a[b>>>5]|=128<<24-b%32;a[g]=b;W=a.length;for(E=0;E<W;E+=J){b=e[0];g=e[1];f=e[2]; -h=e[3];i=e[4];k=e[5];m=e[6];n=e[7];for(r=0;r<y;r+=1)F[r]=16>r?new d(a[r*u+E],a[r*u+E+1]):K(A(F[r-2]),F[r-7],v(F[r-15]),F[r-16]),j=L(n,t(i),M(i,k,m),O[r],F[r]),l=s(B(b),N(b,g,f)),n=m,m=k,k=i,i=s(h,j),h=f,f=g,g=b,b=s(j,l);e[0]=s(b,e[0]);e[1]=s(g,e[1]);e[2]=s(f,e[2]);e[3]=s(h,e[3]);e[4]=s(i,e[4]);e[5]=s(k,e[5]);e[6]=s(m,e[6]);e[7]=s(n,e[7])}"SHA-224"===c?H=[e[0],e[1],e[2],e[3],e[4],e[5],e[6]]:"SHA-256"===c?H=e:"SHA-384"===c?H=[e[0].a,e[0].b,e[1].a,e[1].b,e[2].a,e[2].b,e[3].a,e[3].b,e[4].a,e[4].b,e[5].a, -e[5].b]:"SHA-512"===c?H=[e[0].a,e[0].b,e[1].a,e[1].b,e[2].a,e[2].b,e[3].a,e[3].b,e[4].a,e[4].b,e[5].a,e[5].b,e[6].a,e[6].b,e[7].a,e[7].b]:o("Unexpected error in SHA-2 implementation");return H} -window.jsSHA=function(a,b,c){var g=p,f=p,h=p,i=p,k=p,m=0,n=[0],j=0,l=p,j="undefined"!==typeof c?c:8;8===j||16===j||o("charSize must be 8 or 16");"HEX"===b?(0!==a.length%2&&o("srcString of HEX type must be in byte increments"),l=x(a),m=l.binLen,n=l.value):"ASCII"===b||"TEXT"===b?(l=w(a,j),m=l.binLen,n=l.value):"B64"===b?(l=z(a),m=l.binLen,n=l.value):o("inputFormat must be HEX, TEXT, ASCII, or B64");this.getHash=function(a,b,c){var j=p,l=n.slice(),u="";switch(b){case "HEX":j=C;break;case "B64":j=D; -break;default:o("format must be HEX or B64")}if("SHA-1"===a){p===g&&(g=Z(l,m));u=j(g,G(c))}else if("SHA-224"===a){p===f&&(f=$(l,m,a));u=j(f,G(c))}else if("SHA-256"===a){p===h&&(h=$(l,m,a));u=j(h,G(c))}else if("SHA-384"===a){p===i&&(i=$(l,m,a));u=j(i,G(c))}else if("SHA-512"===a){p===k&&(k=$(l,m,a));u=j(k,G(c))}else o("Chosen SHA variant is not supported");return u};this.getHMAC=function(a,b,c,f,g){var h,i,k,l,v,A=[],B=[],t=p;switch(f){case "HEX":h=C;break;case "B64":h=D;break;default:o("outputFormat must be HEX or B64")}if("SHA-1"=== +566280711),new d(3940187606,3454069534),new d(4118630271,4000239992),new d(116418474,1914138554),new d(174292421,2731055270),new d(289380356,3203993006),new d(460393269,320620315),new d(685471733,587496836),new d(852142971,1086792851),new d(1017036298,365543100),new d(1126000580,2618297676),new d(1288033470,3409855158),new d(1501505948,4234509866),new d(1607167915,987167468),new d(1816402316,1246189591)],e="SHA-384"===b?[new d(3418070365,3238371032),new d(1654270250,914150663),new d(2438529370,812702999), +new d(355462360,4144912697),new d(1731405415,4290775857),new d(41048885895,1750603025),new d(3675008525,1694076839),new d(1203062813,3204075428)]:[new d(1779033703,4089235720),new d(3144134277,2227873595),new d(1013904242,4271175723),new d(2773480762,1595750129),new d(1359893119,2917565137),new d(2600822924,725511199),new d(528734635,4215389547),new d(1541459225,327033209)]):o("Unexpected error in SHA-2 implementation");a[c>>>5]|=128<<24-c%32;a[g]=c;W=a.length;for(E=0;E<W;E+=J){c=e[0];g=e[1];f=e[2]; +h=e[3];i=e[4];k=e[5];m=e[6];n=e[7];for(r=0;r<y;r+=1)F[r]=16>r?new d(a[r*u+E],a[r*u+E+1]):K(A(F[r-2]),F[r-7],v(F[r-15]),F[r-16]),j=L(n,t(i),M(i,k,m),O[r],F[r]),l=s(B(c),N(c,g,f)),n=m,m=k,k=i,i=s(h,j),h=f,f=g,g=c,c=s(j,l);e[0]=s(c,e[0]);e[1]=s(g,e[1]);e[2]=s(f,e[2]);e[3]=s(h,e[3]);e[4]=s(i,e[4]);e[5]=s(k,e[5]);e[6]=s(m,e[6]);e[7]=s(n,e[7])}"SHA-224"===b?H=[e[0],e[1],e[2],e[3],e[4],e[5],e[6]]:"SHA-256"===b?H=e:"SHA-384"===b?H=[e[0].a,e[0].b,e[1].a,e[1].b,e[2].a,e[2].b,e[3].a,e[3].b,e[4].a,e[4].b,e[5].a, +e[5].b]:"SHA-512"===b?H=[e[0].a,e[0].b,e[1].a,e[1].b,e[2].a,e[2].b,e[3].a,e[3].b,e[4].a,e[4].b,e[5].a,e[5].b,e[6].a,e[6].b,e[7].a,e[7].b]:o("Unexpected error in SHA-2 implementation");return H} +window.jsSHA=function(a,c,b){var g=p,f=p,h=p,i=p,k=p,m=0,n=[0],j=0,l=p,j="undefined"!==typeof b?b:8;8===j||16===j||o("charSize must be 8 or 16");"HEX"===c?(0!==a.length%2&&o("srcString of HEX type must be in byte increments"),l=x(a),m=l.binLen,n=l.value):"ASCII"===c||"TEXT"===c?(l=w(a,j),m=l.binLen,n=l.value):"B64"===c?(l=z(a),m=l.binLen,n=l.value):o("inputFormat must be HEX, TEXT, ASCII, or B64");this.getHash=function(a,c,b){var j=p,l=n.slice(),u="";switch(c){case "HEX":j=C;break;case "B64":j=D; +break;default:o("format must be HEX or B64")}if("SHA-1"===a){p===g&&(g=Z(l,m));u=j(g,G(b))}else if("SHA-224"===a){p===f&&(f=$(l,m,a));u=j(f,G(b))}else if("SHA-256"===a){p===h&&(h=$(l,m,a));u=j(h,G(b))}else if("SHA-384"===a){p===i&&(i=$(l,m,a));u=j(i,G(b))}else if("SHA-512"===a){p===k&&(k=$(l,m,a));u=j(k,G(b))}else o("Chosen SHA variant is not supported");return u};this.getHMAC=function(a,b,c,f,g){var h,i,k,l,v,A=[],B=[],t=p;switch(f){case "HEX":h=C;break;case "B64":h=D;break;default:o("outputFormat must be HEX or B64")}if("SHA-1"=== c){k=64;v=160}else if("SHA-224"===c){k=64;v=224}else if("SHA-256"===c){k=64;v=256}else if("SHA-384"===c){k=128;v=384}else if("SHA-512"===c){k=128;v=512}else o("Chosen SHA variant is not supported");if("HEX"===b){t=x(a);l=t.binLen;i=t.value}else if("ASCII"===b||"TEXT"===b){t=w(a,j);l=t.binLen;i=t.value}else if("B64"===b){t=z(a);l=t.binLen;i=t.value}else o("inputFormat must be HEX, TEXT, ASCII, or B64");a=k*8;b=k/4-1;if(k<l/8){i="SHA-1"===c?Z(i,l):$(i,l,c);i[b]=i[b]&4294967040}else k>l/8&&(i[b]=i[b]& 4294967040);for(k=0;k<=b;k=k+1){A[k]=i[k]^909522486;B[k]=i[k]^1549556828}c="SHA-1"===c?Z(B.concat(Z(A.concat(n),a+m)),a+v):$(B.concat($(A.concat(n),a+m,c)),a+v,c);return h(c,G(g))}};})(); diff --git a/src/sha512.js b/src/sha512.js index 5d60943..f829644 100755 --- a/src/sha512.js +++ b/src/sha512.js @@ -13,7 +13,7 @@ function m(a){throw a;}var o=null;function q(a,b){this.a=a;this.b=b}function s(a function z(a){var b=[],d=0,h,f,g,j,l;-1===a.search(/^[a-zA-Z0-9=+\/]+$/)&&m("Invalid character in base-64 string");h=a.indexOf("=");a=a.replace(/\=/g,"");-1!==h&&h<a.length&&m("Invalid '=' found in base-64 string");for(f=0;f<a.length;f+=4){l=a.substr(f,4);for(g=j=0;g<l.length;g+=1)h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(l[g]),j|=h<<18-6*g;for(g=0;g<l.length-1;g+=1)b[d>>2]|=(j>>>16-8*g&255)<<24-8*(d%4),d+=1}return{value:b,binLen:8*d}} function C(a,b){var d="",h=4*a.length,f,g;for(f=0;f<h;f+=1)g=a[f>>>2]>>>8*(3-f%4),d+="0123456789abcdef".charAt(g>>>4&15)+"0123456789abcdef".charAt(g&15);return b.outputUpper?d.toUpperCase():d} function D(a,b){var d="",h=4*a.length,f,g,j;for(f=0;f<h;f+=3){j=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255;for(g=0;4>g;g+=1)d=8*f+6*g<=32*a.length?d+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j>>>6*(3-g)&63):d+b.b64Pad}return d} -function E(a){var b={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(b.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(b.b64Pad=a.b64Pad)}catch(d){}"boolean"!==typeof b.outputUpper&&m("Invalid outputUpper formatting option");"string"!==typeof b.b64Pad&&m("Invalid b64Pad formatting option");return b}function F(a,b){var d=o;return d=32>=b?new q(a.a>>>b|a.b<<32-b,a.b>>>b|a.a<<32-b):new q(a.b>>>b-32|a.a<<64-b,a.a>>>b-32|a.b<<64-b)} +function E(a){var b={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(b.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(b.b64Pad=a.b64Pad)}catch(d){}"boolean"!==typeof b.outputUpper&&m("Invalid outputUpper formatting option");"string"!==typeof b.b64Pad&&m("Invalid b64Pad formatting option");return b}function F(a,b){var d=o,d=new q(a.a,a.b);return d=32>=b?new q(d.a>>>b|d.b<<32-b,d.b>>>b|d.a<<32-b):new q(d.b>>>b-32|d.a<<64-b,d.a>>>b-32|d.b<<64-b)} function G(a,b){var d=o;return d=32>=b?new q(a.a>>>b,a.b>>>b|a.a<<32-b):new q(0,a.a>>>b-32)}function H(a,b,d){return new q(a.a&b.a^~a.a&d.a,a.b&b.b^~a.b&d.b)}function S(a,b,d){return new q(a.a&b.a^a.a&d.a^b.a&d.a,a.b&b.b^a.b&d.b^b.b&d.b)}function T(a){var b=F(a,28),d=F(a,34),a=F(a,39);return new q(b.a^d.a^a.a,b.b^d.b^a.b)}function U(a){var b=F(a,14),d=F(a,18),a=F(a,41);return new q(b.a^d.a^a.a,b.b^d.b^a.b)}function V(a){var b=F(a,1),d=F(a,8),a=G(a,7);return new q(b.a^d.a^a.a,b.b^d.b^a.b)} function W(a){var b=F(a,19),d=F(a,61),a=G(a,6);return new q(b.a^d.a^a.a,b.b^d.b^a.b)}function X(a,b){var d,h,f;d=(a.b&65535)+(b.b&65535);h=(a.b>>>16)+(b.b>>>16)+(d>>>16);f=(h&65535)<<16|d&65535;d=(a.a&65535)+(b.a&65535)+(h>>>16);h=(a.a>>>16)+(b.a>>>16)+(d>>>16);return new q((h&65535)<<16|d&65535,f)} function Y(a,b,d,h){var f,g,j;f=(a.b&65535)+(b.b&65535)+(d.b&65535)+(h.b&65535);g=(a.b>>>16)+(b.b>>>16)+(d.b>>>16)+(h.b>>>16)+(f>>>16);j=(g&65535)<<16|f&65535;f=(a.a&65535)+(b.a&65535)+(d.a&65535)+(h.a&65535)+(g>>>16);g=(a.a>>>16)+(b.a>>>16)+(d.a>>>16)+(h.a>>>16)+(f>>>16);return new q((g&65535)<<16|f&65535,j)} diff --git a/src/sha_dev.js b/src/sha_dev.js index 0262904..7d08763 100755 --- a/src/sha_dev.js +++ b/src/sha_dev.js @@ -285,20 +285,20 @@ var SUPPORTED_ALGS = 4 | 2 | 1; */ function rotr_64(x, n) { - var retVal = null; + var retVal = null, tmp = new Int_64(x.highOrder, x.lowOrder); if (32 >= n) { retVal = new Int_64( - (x.highOrder >>> n) | (x.lowOrder << (32 - n)), - (x.lowOrder >>> n) | (x.highOrder << (32 - n)) + (tmp.highOrder >>> n) | (tmp.lowOrder << (32 - n)), + (tmp.lowOrder >>> n) | (tmp.highOrder << (32 - n)) ); } else { retVal = new Int_64( - (x.lowOrder >>> (n - 32)) | (x.highOrder << (64 - n)), - (x.highOrder >>> (n - 32)) | (x.lowOrder << (64 - n)) + (tmp.lowOrder >>> (n - 32)) | (tmp.highOrder << (64 - n)), + (tmp.highOrder >>> (n - 32)) | (tmp.lowOrder << (64 - n)) ); } diff --git a/test/test.html b/test/test.html index 8307d9d..fefe8cc 100755 --- a/test/test.html +++ b/test/test.html @@ -2,7 +2,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>jsSHA (http://caligatio.github.com/jsSHA/) - Test</title>
- <script type="text/javascript" src="../src/sha.js"></script>
+ <script type="text/javascript" src="../src/sha_dev.js"></script>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
table
|