diff options
Diffstat (limited to 'src/sha256.js')
-rwxr-xr-x | src/sha256.js | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/sha256.js b/src/sha256.js index ada5da4..8c95abe 100755 --- a/src/sha256.js +++ b/src/sha256.js @@ -9,17 +9,17 @@ Several functions taken from Paul Johnson */ -function m(a){throw a;}var p=null;function r(a,b){var c=[],f=(1<<b)-1,d=a.length*b,e;for(e=0;e<d;e+=b)c[e>>>5]|=(a.charCodeAt(e/b)&f)<<32-b-e%32;return{value:c,binLen:d}}function u(a){var b=[],c=a.length,f,d;0!==c%2&&m("String of HEX type must be in byte increments");for(f=0;f<c;f+=2)d=parseInt(a.substr(f,2),16),isNaN(d)&&m("String of HEX type contains invalid characters"),b[f>>>3]|=d<<24-4*(f%8);return{value:b,binLen:4*c}} -function y(a){var b=[],c=0,f,d,e,j,k;-1===a.search(/^[a-zA-Z0-9=+\/]+$/)&&m("Invalid character in base-64 string");f=a.indexOf("=");a=a.replace(/\=/g,"");-1!==f&&f<a.length&&m("Invalid '=' found in base-64 string");for(d=0;d<a.length;d+=4){k=a.substr(d,4);for(e=j=0;e<k.length;e+=1)f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(k[e]),j|=f<<18-6*e;for(e=0;e<k.length-1;e+=1)b[c>>2]|=(j>>>16-8*e&255)<<24-8*(c%4),c+=1}return{value:b,binLen:8*c}} -function B(a,b){var c="",f=4*a.length,d,e;for(d=0;d<f;d+=1)e=a[d>>>2]>>>8*(3-d%4),c+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(e&15);return b.outputUpper?c.toUpperCase():c} -function C(a,b){var c="",f=4*a.length,d,e,j;for(d=0;d<f;d+=3){j=(a[d>>>2]>>>8*(3-d%4)&255)<<16|(a[d+1>>>2]>>>8*(3-(d+1)%4)&255)<<8|a[d+2>>>2]>>>8*(3-(d+2)%4)&255;for(e=0;4>e;e+=1)c=8*d+6*e<=32*a.length?c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j>>>6*(3-e)&63):c+b.b64Pad}return c} -function D(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&&m("Invalid outputUpper formatting option");"string"!==typeof b.b64Pad&&m("Invalid b64Pad formatting option");return b}function E(a,b){return a>>>b|a<<32-b}function F(a,b,c){return a&b^~a&c}function Q(a,b,c){return a&b^a&c^b&c}function R(a){return E(a,2)^E(a,13)^E(a,22)} -function S(a){return E(a,6)^E(a,11)^E(a,25)}function T(a){return E(a,7)^E(a,18)^a>>>3}function U(a){return E(a,17)^E(a,19)^a>>>10}function V(a,b){var c=(a&65535)+(b&65535);return((a>>>16)+(b>>>16)+(c>>>16)&65535)<<16|c&65535}function W(a,b,c,f){var d=(a&65535)+(b&65535)+(c&65535)+(f&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(f>>>16)+(d>>>16)&65535)<<16|d&65535} -function X(a,b,c,f,d){var e=(a&65535)+(b&65535)+(c&65535)+(f&65535)+(d&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(f>>>16)+(d>>>16)+(e>>>16)&65535)<<16|e&65535} -function Y(a,b,c){var f,d,e,j,k,i,x,z,G,g,H,s,h,l,q,n,v,w,o,I,J,K,L,M,N,O,t=[],P,A;"SHA-224"===c||"SHA-256"===c?(H=64,l=16,q=1,N=Number,n=V,v=W,w=X,o=T,I=U,J=R,K=S,M=Q,L=F,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, +function m(a){throw a;}var q=null;function s(a,b){var c=[],f=(1<<b)-1,d=a.length*b,e;for(e=0;e<d;e+=b)c[e>>>5]|=(a.charCodeAt(e/b)&f)<<32-b-e%32;return{value:c,binLen:d}}function v(a){var b=[],c=a.length,f,d;0!==c%2&&m("String of HEX type must be in byte increments");for(f=0;f<c;f+=2)d=parseInt(a.substr(f,2),16),isNaN(d)&&m("String of HEX type contains invalid characters"),b[f>>>3]|=d<<24-4*(f%8);return{value:b,binLen:4*c}} +function z(a){var b=[],c=0,f,d,e,j,k;-1===a.search(/^[a-zA-Z0-9=+\/]+$/)&&m("Invalid character in base-64 string");f=a.indexOf("=");a=a.replace(/\=/g,"");-1!==f&&f<a.length&&m("Invalid '=' found in base-64 string");for(d=0;d<a.length;d+=4){k=a.substr(d,4);for(e=j=0;e<k.length;e+=1)f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(k[e]),j|=f<<18-6*e;for(e=0;e<k.length-1;e+=1)b[c>>2]|=(j>>>16-8*e&255)<<24-8*(c%4),c+=1}return{value:b,binLen:8*c}} +function C(a,b){var c="",f=4*a.length,d,e;for(d=0;d<f;d+=1)e=a[d>>>2]>>>8*(3-d%4),c+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(e&15);return b.outputUpper?c.toUpperCase():c} +function D(a,b){var c="",f=4*a.length,d,e,j;for(d=0;d<f;d+=3){j=(a[d>>>2]>>>8*(3-d%4)&255)<<16|(a[d+1>>>2]>>>8*(3-(d+1)%4)&255)<<8|a[d+2>>>2]>>>8*(3-(d+2)%4)&255;for(e=0;4>e;e+=1)c=8*d+6*e<=32*a.length?c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j>>>6*(3-e)&63):c+b.b64Pad}return c} +function E(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&&m("Invalid outputUpper formatting option");"string"!==typeof b.b64Pad&&m("Invalid b64Pad formatting option");return b}function F(a,b){return a>>>b|a<<32-b}function G(a,b,c){return a&b^~a&c}function R(a,b,c){return a&b^a&c^b&c}function S(a){return F(a,2)^F(a,13)^F(a,22)} +function T(a){return F(a,6)^F(a,11)^F(a,25)}function U(a){return F(a,7)^F(a,18)^a>>>3}function V(a){return F(a,17)^F(a,19)^a>>>10}function W(a,b){var c=(a&65535)+(b&65535);return((a>>>16)+(b>>>16)+(c>>>16)&65535)<<16|c&65535}function X(a,b,c,f){var d=(a&65535)+(b&65535)+(c&65535)+(f&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(f>>>16)+(d>>>16)&65535)<<16|d&65535} +function Y(a,b,c,f,d){var e=(a&65535)+(b&65535)+(c&65535)+(f&65535)+(d&65535);return((a>>>16)+(b>>>16)+(c>>>16)+(f>>>16)+(d>>>16)+(e>>>16)&65535)<<16|e&65535} +function Z(a,b,c){var f,d,e,j,k,i,y,A,H,g,I,t,h,l,r,n,w,x,p,J,K,L,M,N,O,P,u=[],Q,B;"SHA-224"===c||"SHA-256"===c?(I=64,l=16,r=1,O=Number,n=W,w=X,x=Y,p=U,J=V,K=S,L=T,N=R,M=G,P=[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],g="SHA-224"===c?[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]:[1779033703,3144134277,1013904242,2773480762, -1359893119,2600822924,528734635,1541459225]):m("Unexpected error in SHA-2 implementation");a[b>>>5]|=128<<24-b%32;a[(b+65>>>9<<4)+15]=b;P=a.length;for(s=0;s<P;s+=l){b=g[0];f=g[1];d=g[2];e=g[3];j=g[4];k=g[5];i=g[6];x=g[7];for(h=0;h<H;h+=1)t[h]=16>h?new N(a[h*q+s],a[h*q+s+1]):v(I(t[h-2]),t[h-7],o(t[h-15]),t[h-16]),z=w(x,K(j),L(j,k,i),O[h],t[h]),G=n(J(b),M(b,f,d)),x=i,i=k,k=j,j=n(e,z),e=d,d=f,f=b,b=n(z,G);g[0]=n(b,g[0]);g[1]=n(f,g[1]);g[2]=n(d,g[2]);g[3]=n(e,g[3]);g[4]=n(j,g[4]);g[5]=n(k,g[5]);g[6]= -n(i,g[6]);g[7]=n(x,g[7])}"SHA-224"===c?A=[g[0],g[1],g[2],g[3],g[4],g[5],g[6]]:"SHA-256"===c?A=g:m("Unexpected error in SHA-2 implementation");return A} -window.jsSHA=function(a,b,c){var f=p,d=p,e=0,j=[0],k=0,i=p,k="undefined"!==typeof c?c:8;8===k||16===k||m("charSize must be 8 or 16");"HEX"===b?(0!==a.length%2&&m("srcString of HEX type must be in byte increments"),i=u(a),e=i.binLen,j=i.value):"ASCII"===b||"TEXT"===b?(i=r(a,k),e=i.binLen,j=i.value):"B64"===b?(i=y(a),e=i.binLen,j=i.value):m("inputFormat must be HEX, TEXT, ASCII, or B64");this.getHash=function(a,b,c){var g=p,k=j.slice(),i="";switch(b){case "HEX":g=B;break;case "B64":g=C;break;default:m("format must be HEX or B64")}if("SHA-224"=== -a){p===f&&(f=Y(k,e,a));i=g(f,D(c))}else if("SHA-256"===a){p===d&&(d=Y(k,e,a));i=g(d,D(c))}else m("Chosen SHA variant is not supported");return i};this.getHMAC=function(a,b,c,d,f){var i,h,l,q,n,v=[],w=[],o=p;switch(d){case "HEX":i=B;break;case "B64":i=C;break;default:m("outputFormat must be HEX or B64")}if("SHA-224"===c){l=64;n=224}else if("SHA-256"===c){l=64;n=256}else m("Chosen SHA variant is not supported");if("HEX"===b){o=u(a);q=o.binLen;h=o.value}else if("ASCII"===b||"TEXT"===b){o=r(a,k);q=o.binLen; -h=o.value}else if("B64"===b){o=y(a);q=o.binLen;h=o.value}else m("inputFormat must be HEX, TEXT, ASCII, or B64");a=l*8;b=l/4-1;if(l<q/8){h=Y(h,q,c);h[b]=h[b]&4294967040}else l>q/8&&(h[b]=h[b]&4294967040);for(l=0;l<=b;l=l+1){v[l]=h[l]^909522486;w[l]=h[l]^1549556828}c=Y(w.concat(Y(v.concat(j),a+e,c)),a+n,c);return i(c,D(f))}};})(); +1359893119,2600822924,528734635,1541459225]):m("Unexpected error in SHA-2 implementation");a[b>>>5]|=128<<24-b%32;a[(b+65>>>9<<4)+15]=b;Q=a.length;for(t=0;t<Q;t+=l){b=g[0];f=g[1];d=g[2];e=g[3];j=g[4];k=g[5];i=g[6];y=g[7];for(h=0;h<I;h+=1)u[h]=16>h?new O(a[h*r+t],a[h*r+t+1]):w(J(u[h-2]),u[h-7],p(u[h-15]),u[h-16]),A=x(y,L(j),M(j,k,i),P[h],u[h]),H=n(K(b),N(b,f,d)),y=i,i=k,k=j,j=n(e,A),e=d,d=f,f=b,b=n(A,H);g[0]=n(b,g[0]);g[1]=n(f,g[1]);g[2]=n(d,g[2]);g[3]=n(e,g[3]);g[4]=n(j,g[4]);g[5]=n(k,g[5]);g[6]= +n(i,g[6]);g[7]=n(y,g[7])}"SHA-224"===c?B=[g[0],g[1],g[2],g[3],g[4],g[5],g[6]]:"SHA-256"===c?B=g:m("Unexpected error in SHA-2 implementation");return B} +window.jsSHA=function(a,b,c){var f=q,d=q,e=0,j=[0],k=0,i=q,k="undefined"!==typeof c?c:8;8===k||16===k||m("charSize must be 8 or 16");"HEX"===b?(0!==a.length%2&&m("srcString of HEX type must be in byte increments"),i=v(a),e=i.binLen,j=i.value):"ASCII"===b||"TEXT"===b?(i=s(a,k),e=i.binLen,j=i.value):"B64"===b?(i=z(a),e=i.binLen,j=i.value):m("inputFormat must be HEX, TEXT, ASCII, or B64");this.getHash=function(a,b,c){var g=q,k=j.slice(),i="";switch(b){case "HEX":g=C;break;case "B64":g=D;break;default:m("format must be HEX or B64")}"SHA-224"=== +a?(q===f&&(f=Z(k,e,a)),i=g(f,E(c))):"SHA-256"===a?(q===d&&(d=Z(k,e,a)),i=g(d,E(c))):m("Chosen SHA variant is not supported");return i};this.getHMAC=function(a,b,c,d,f){var i,h,l,r,n,w=[],x=[],p=q;switch(d){case "HEX":i=C;break;case "B64":i=D;break;default:m("outputFormat must be HEX or B64")}"SHA-224"===c?(l=64,n=224):"SHA-256"===c?(l=64,n=256):m("Chosen SHA variant is not supported");"HEX"===b?(p=v(a),r=p.binLen,h=p.value):"ASCII"===b||"TEXT"===b?(p=s(a,k),r=p.binLen,h=p.value):"B64"===b?(p=z(a), +r=p.binLen,h=p.value):m("inputFormat must be HEX, TEXT, ASCII, or B64");a=8*l;b=l/4-1;l<r/8?(h=Z(h,r,c),h[b]&=4294967040):l>r/8&&(h[b]&=4294967040);for(l=0;l<=b;l+=1)w[l]=h[l]^909522486,x[l]=h[l]^1549556828;c=Z(x.concat(Z(w.concat(j),a+e,c)),a+n,c);return i(c,E(f))}};})(); |