summaryrefslogtreecommitdiffstats
path: root/src/sha1.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/sha1.js')
-rw-r--r--src/sha1.js24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/sha1.js b/src/sha1.js
index 66592e6..d70cce0 100644
--- a/src/sha1.js
+++ b/src/sha1.js
@@ -9,15 +9,15 @@
Several functions taken from Paul Johnston
*/
-'use strict';(function(E){function p(e,c,d){var g=0,b=[],a=0,f,l,m,h,k,u,q,v=!1,n=[],r=[],t,p=!1;d=d||{};f=d.encoding||"UTF8";t=d.numRounds||1;m=y(c,f);if(t!==parseInt(t,10)||1>t)throw Error("numRounds must a integer >= 1");if("SHA-1"===e)k=512,u=z,q=F,h=160;else throw Error("Chosen SHA variant is not supported");l=w(e);this.setHMACKey=function(b,a,c){var d;if(!0===v)throw Error("HMAC key already set");if(!0===p)throw Error("Cannot set HMAC key after calling update");f=(c||{}).encoding||"UTF8";a=
-y(a,f)(b);b=a.binLen;a=a.value;d=k>>>3;c=d/4-1;if(d<b/8){for(a=q(a,b,0,w(e));a.length<=c;)a.push(0);a[c]&=4294967040}else if(d>b/8){for(;a.length<=c;)a.push(0);a[c]&=4294967040}for(b=0;b<=c;b+=1)n[b]=a[b]^909522486,r[b]=a[b]^1549556828;l=u(n,l);g=k;v=!0};this.update=function(c){var e,d,f,h=0,q=k>>>5;e=m(c,b,a);c=e.binLen;d=e.value;e=c>>>5;for(f=0;f<e;f+=q)h+k<=c&&(l=u(d.slice(f,f+q),l),h+=k);g+=h;b=d.slice(h>>>5);a=c%k;p=!0};this.getHash=function(c,d){var f,k,m,n;if(!0===v)throw Error("Cannot call getHash after setting HMAC key");
-m=A(d);switch(c){case "HEX":f=function(a){return B(a,m)};break;case "B64":f=function(a){return C(a,m)};break;case "BYTES":f=D;break;default:throw Error("format must be HEX, B64, or BYTES");}n=q(b,a,g,l);for(k=1;k<t;k+=1)n=q(n,h,0,w(e));return f(n)};this.getHMAC=function(c,d){var f,m,n,p;if(!1===v)throw Error("Cannot call getHMAC without first setting HMAC key");n=A(d);switch(c){case "HEX":f=function(a){return B(a,n)};break;case "B64":f=function(a){return C(a,n)};break;case "BYTES":f=D;break;default:throw Error("outputFormat must be HEX, B64, or BYTES");
-}m=q(b,a,g,l);p=u(r,w(e));p=q(m,h,k,p);return f(p)}}function G(e,c,d){var g=e.length,b,a,f,l,m;c=c||[0];d=d||0;m=d>>>3;if(0!==g%2)throw Error("String of HEX type must be in byte increments");for(b=0;b<g;b+=2){a=parseInt(e.substr(b,2),16);if(isNaN(a))throw Error("String of HEX type contains invalid characters");l=(b>>>1)+m;for(f=l>>>2;c.length<=f;)c.push(0);c[f]|=a<<8*(3-l%4)}return{value:c,binLen:4*g+d}}function H(e,c,d){var g=[],b,a,f,l,g=c||[0];d=d||0;a=d>>>3;for(b=0;b<e.length;b+=1)c=e.charCodeAt(b),
-l=b+a,f=l>>>2,g.length<=f&&g.push(0),g[f]|=c<<8*(3-l%4);return{value:g,binLen:8*e.length+d}}function I(e,c,d){var g=[],b=0,a,f,l,m,h,k,g=c||[0];d=d||0;c=d>>>3;if(-1===e.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");f=e.indexOf("=");e=e.replace(/\=/g,"");if(-1!==f&&f<e.length)throw Error("Invalid '=' found in base-64 string");for(f=0;f<e.length;f+=4){h=e.substr(f,4);for(l=m=0;l<h.length;l+=1)a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(h[l]),
-m|=a<<18-6*l;for(l=0;l<h.length-1;l+=1){k=b+c;for(a=k>>>2;g.length<=a;)g.push(0);g[a]|=(m>>>16-8*l&255)<<8*(3-k%4);b+=1}}return{value:g,binLen:8*b+d}}function B(e,c){var d="",g=4*e.length,b,a;for(b=0;b<g;b+=1)a=e[b>>>2]>>>8*(3-b%4),d+="0123456789abcdef".charAt(a>>>4&15)+"0123456789abcdef".charAt(a&15);return c.outputUpper?d.toUpperCase():d}function C(e,c){var d="",g=4*e.length,b,a,f;for(b=0;b<g;b+=3)for(f=b+1>>>2,a=e.length<=f?0:e[f],f=b+2>>>2,f=e.length<=f?0:e[f],f=(e[b>>>2]>>>8*(3-b%4)&255)<<16|
-(a>>>8*(3-(b+1)%4)&255)<<8|f>>>8*(3-(b+2)%4)&255,a=0;4>a;a+=1)8*b+6*a<=32*e.length?d+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(f>>>6*(3-a)&63):d+=c.b64Pad;return d}function D(e){var c="",d=4*e.length,g,b;for(g=0;g<d;g+=1)b=e[g>>>2]>>>8*(3-g%4)&255,c+=String.fromCharCode(b);return c}function A(e){var c={outputUpper:!1,b64Pad:"="};e=e||{};c.outputUpper=e.outputUpper||!1;!0===e.hasOwnProperty("b64Pad")&&(c.b64Pad=e.b64Pad);if("boolean"!==typeof c.outputUpper)throw Error("Invalid outputUpper formatting option");
-if("string"!==typeof c.b64Pad)throw Error("Invalid b64Pad formatting option");return c}function y(e,c){var d;switch(c){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(e){case "HEX":d=G;break;case "TEXT":d=function(e,b,a){var f=[],d=[],m=0,h,k,n,q,p,f=b||[0];b=a||0;n=b>>>3;if("UTF8"===c)for(h=0;h<e.length;h+=1)for(a=e.charCodeAt(h),d=[],128>a?d.push(a):2048>a?(d.push(192|a>>>6),d.push(128|a&63)):55296>a||57344<=a?d.push(224|
-a>>>12,128|a>>>6&63,128|a&63):(h+=1,a=65536+((a&1023)<<10|e.charCodeAt(h)&1023),d.push(240|a>>>18,128|a>>>12&63,128|a>>>6&63,128|a&63)),k=0;k<d.length;k+=1){p=m+n;for(q=p>>>2;f.length<=q;)f.push(0);f[q]|=d[k]<<8*(3-p%4);m+=1}else if("UTF16BE"===c||"UTF16LE"===c)for(h=0;h<e.length;h+=1){a=e.charCodeAt(h);"UTF16LE"===c&&(k=a&255,a=k<<8|a>>>8);p=m+n;for(q=p>>>2;f.length<=q;)f.push(0);f[q]|=a<<8*(2-p%4);m+=2}return{value:f,binLen:8*m+b}};break;case "B64":d=I;break;case "BYTES":d=H;break;default:throw Error("format must be HEX, TEXT, B64, or BYTES");
-}return d}function n(e,c){return e<<c|e>>>32-c}function r(e,c){var d=(e&65535)+(c&65535);return((e>>>16)+(c>>>16)+(d>>>16)&65535)<<16|d&65535}function x(e,c,d,g,b){var a=(e&65535)+(c&65535)+(d&65535)+(g&65535)+(b&65535);return((e>>>16)+(c>>>16)+(d>>>16)+(g>>>16)+(b>>>16)+(a>>>16)&65535)<<16|a&65535}function w(e){if("SHA-1"===e)e=[1732584193,4023233417,2562383102,271733878,3285377520];else throw Error("No SHA variants supported");return e}function z(e,c){var d=[],g,b,a,f,l,m,h,k=c.slice();g=k[0];b=
-k[1];a=k[2];f=k[3];l=k[4];for(h=0;80>h;h+=1)d[h]=16>h?e[h]:n(d[h-3]^d[h-8]^d[h-14]^d[h-16],1),m=20>h?x(n(g,5),b&a^~b&f,l,1518500249,d[h]):40>h?x(n(g,5),b^a^f,l,1859775393,d[h]):60>h?x(n(g,5),b&a^b&f^a&f,l,2400959708,d[h]):x(n(g,5),b^a^f,l,3395469782,d[h]),l=f,f=a,a=n(b,30),b=g,g=m;k[0]=r(g,k[0]);k[1]=r(b,k[1]);k[2]=r(a,k[2]);k[3]=r(f,k[3]);k[4]=r(l,k[4]);return k}function F(e,c,d,g){var b;e=e.slice();g=g.slice();for(b=(c+65>>>9<<4)+15;e.length<=b;)e.push(0);e[c>>>5]|=128<<24-c%32;e[b]=c+d;d=e.length;
-for(c=0;c<d;c+=16)g=z(e.slice(c,c+16),g);return g}"function"===typeof define&&define.amd?define(function(){return p}):"undefined"!==typeof exports?"undefined"!==typeof module&&module.exports?module.exports=exports=p:exports=p:E.jsSHA=p})(this);
+'use strict';(function(E){function p(e,a,c){var g=0,b=[],d=0,f,k,l,h,m,u,q,v=!1,n=[],r=[],t,p=!1;c=c||{};f=c.encoding||"UTF8";t=c.numRounds||1;l=y(a,f);if(t!==parseInt(t,10)||1>t)throw Error("numRounds must a integer >= 1");if("SHA-1"===e)m=512,u=z,q=F,h=160;else throw Error("Chosen SHA variant is not supported");k=w(e);this.setHMACKey=function(a,b,d){var c;if(!0===v)throw Error("HMAC key already set");if(!0===p)throw Error("Cannot set HMAC key after calling update");f=(d||{}).encoding||"UTF8";b=
+y(b,f)(a);a=b.binLen;b=b.value;c=m>>>3;d=c/4-1;if(c<a/8){for(b=q(b,a,0,w(e));b.length<=d;)b.push(0);b[d]&=4294967040}else if(c>a/8){for(;b.length<=d;)b.push(0);b[d]&=4294967040}for(a=0;a<=d;a+=1)n[a]=b[a]^909522486,r[a]=b[a]^1549556828;k=u(n,k);g=m;v=!0};this.update=function(a){var e,c,f,h=0,q=m>>>5;e=l(a,b,d);a=e.binLen;c=e.value;e=a>>>5;for(f=0;f<e;f+=q)h+m<=a&&(k=u(c.slice(f,f+q),k),h+=m);g+=h;b=c.slice(h>>>5);d=a%m;p=!0};this.getHash=function(a,c){var f,l,m,n;if(!0===v)throw Error("Cannot call getHash after setting HMAC key");
+m=A(c);switch(a){case "HEX":f=function(a){return B(a,m)};break;case "B64":f=function(a){return C(a,m)};break;case "BYTES":f=D;break;default:throw Error("format must be HEX, B64, or BYTES");}n=q(b.slice(),d,g,k.slice());for(l=1;l<t;l+=1)n=q(n,h,0,w(e));return f(n)};this.getHMAC=function(a,c){var f,l,n,p;if(!1===v)throw Error("Cannot call getHMAC without first setting HMAC key");n=A(c);switch(a){case "HEX":f=function(a){return B(a,n)};break;case "B64":f=function(a){return C(a,n)};break;case "BYTES":f=
+D;break;default:throw Error("outputFormat must be HEX, B64, or BYTES");}l=q(b.slice(),d,g,k.slice());p=u(r,w(e));p=q(l,h,m,p);return f(p)}}function G(e,a,c){var g=e.length,b,d,f,k,l;a=a||[0];c=c||0;l=c>>>3;if(0!==g%2)throw Error("String of HEX type must be in byte increments");for(b=0;b<g;b+=2){d=parseInt(e.substr(b,2),16);if(isNaN(d))throw Error("String of HEX type contains invalid characters");k=(b>>>1)+l;for(f=k>>>2;a.length<=f;)a.push(0);a[f]|=d<<8*(3-k%4)}return{value:a,binLen:4*g+c}}function H(e,
+a,c){var g=[],b,d,f,k,g=a||[0];c=c||0;d=c>>>3;for(b=0;b<e.length;b+=1)a=e.charCodeAt(b),k=b+d,f=k>>>2,g.length<=f&&g.push(0),g[f]|=a<<8*(3-k%4);return{value:g,binLen:8*e.length+c}}function I(e,a,c){var g=[],b=0,d,f,k,l,h,m,g=a||[0];c=c||0;a=c>>>3;if(-1===e.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");f=e.indexOf("=");e=e.replace(/\=/g,"");if(-1!==f&&f<e.length)throw Error("Invalid '=' found in base-64 string");for(f=0;f<e.length;f+=4){h=e.substr(f,4);for(k=l=0;k<
+h.length;k+=1)d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(h[k]),l|=d<<18-6*k;for(k=0;k<h.length-1;k+=1){m=b+a;for(d=m>>>2;g.length<=d;)g.push(0);g[d]|=(l>>>16-8*k&255)<<8*(3-m%4);b+=1}}return{value:g,binLen:8*b+c}}function B(e,a){var c="",g=4*e.length,b,d;for(b=0;b<g;b+=1)d=e[b>>>2]>>>8*(3-b%4),c+="0123456789abcdef".charAt(d>>>4&15)+"0123456789abcdef".charAt(d&15);return a.outputUpper?c.toUpperCase():c}function C(e,a){var c="",g=4*e.length,b,d,f;for(b=0;b<g;b+=3)for(f=
+b+1>>>2,d=e.length<=f?0:e[f],f=b+2>>>2,f=e.length<=f?0:e[f],f=(e[b>>>2]>>>8*(3-b%4)&255)<<16|(d>>>8*(3-(b+1)%4)&255)<<8|f>>>8*(3-(b+2)%4)&255,d=0;4>d;d+=1)8*b+6*d<=32*e.length?c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(f>>>6*(3-d)&63):c+=a.b64Pad;return c}function D(e){var a="",c=4*e.length,g,b;for(g=0;g<c;g+=1)b=e[g>>>2]>>>8*(3-g%4)&255,a+=String.fromCharCode(b);return a}function A(e){var a={outputUpper:!1,b64Pad:"="};e=e||{};a.outputUpper=e.outputUpper||!1;!0===
+e.hasOwnProperty("b64Pad")&&(a.b64Pad=e.b64Pad);if("boolean"!==typeof a.outputUpper)throw Error("Invalid outputUpper formatting option");if("string"!==typeof a.b64Pad)throw Error("Invalid b64Pad formatting option");return a}function y(e,a){var c;switch(a){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(e){case "HEX":c=G;break;case "TEXT":c=function(e,b,d){var f=[],c=[],l=0,h,m,n,q,p,f=b||[0];b=d||0;n=b>>>3;if("UTF8"===a)for(h=
+0;h<e.length;h+=1)for(d=e.charCodeAt(h),c=[],128>d?c.push(d):2048>d?(c.push(192|d>>>6),c.push(128|d&63)):55296>d||57344<=d?c.push(224|d>>>12,128|d>>>6&63,128|d&63):(h+=1,d=65536+((d&1023)<<10|e.charCodeAt(h)&1023),c.push(240|d>>>18,128|d>>>12&63,128|d>>>6&63,128|d&63)),m=0;m<c.length;m+=1){p=l+n;for(q=p>>>2;f.length<=q;)f.push(0);f[q]|=c[m]<<8*(3-p%4);l+=1}else if("UTF16BE"===a||"UTF16LE"===a)for(h=0;h<e.length;h+=1){d=e.charCodeAt(h);"UTF16LE"===a&&(m=d&255,d=m<<8|d>>>8);p=l+n;for(q=p>>>2;f.length<=
+q;)f.push(0);f[q]|=d<<8*(2-p%4);l+=2}return{value:f,binLen:8*l+b}};break;case "B64":c=I;break;case "BYTES":c=H;break;default:throw Error("format must be HEX, TEXT, B64, or BYTES");}return c}function n(e,a){return e<<a|e>>>32-a}function r(e,a){var c=(e&65535)+(a&65535);return((e>>>16)+(a>>>16)+(c>>>16)&65535)<<16|c&65535}function x(e,a,c,g,b){var d=(e&65535)+(a&65535)+(c&65535)+(g&65535)+(b&65535);return((e>>>16)+(a>>>16)+(c>>>16)+(g>>>16)+(b>>>16)+(d>>>16)&65535)<<16|d&65535}function w(e){if("SHA-1"===
+e)e=[1732584193,4023233417,2562383102,271733878,3285377520];else throw Error("No SHA variants supported");return e}function z(e,a){var c=[],g,b,d,f,k,l,h;g=a[0];b=a[1];d=a[2];f=a[3];k=a[4];for(h=0;80>h;h+=1)c[h]=16>h?e[h]:n(c[h-3]^c[h-8]^c[h-14]^c[h-16],1),l=20>h?x(n(g,5),b&d^~b&f,k,1518500249,c[h]):40>h?x(n(g,5),b^d^f,k,1859775393,c[h]):60>h?x(n(g,5),b&d^b&f^d&f,k,2400959708,c[h]):x(n(g,5),b^d^f,k,3395469782,c[h]),k=f,f=d,d=n(b,30),b=g,g=l;a[0]=r(g,a[0]);a[1]=r(b,a[1]);a[2]=r(d,a[2]);a[3]=r(f,a[3]);
+a[4]=r(k,a[4]);return a}function F(e,a,c,g){var b;for(b=(a+65>>>9<<4)+15;e.length<=b;)e.push(0);e[a>>>5]|=128<<24-a%32;e[b]=a+c;c=e.length;for(a=0;a<c;a+=16)g=z(e.slice(a,a+16),g);return g}"function"===typeof define&&define.amd?define(function(){return p}):"undefined"!==typeof exports?"undefined"!==typeof module&&module.exports?module.exports=exports=p:exports=p:E.jsSHA=p})(this);