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