snappymail/vendors/jsbn/_encrypt.min.js
2014-07-25 02:28:10 +04:00

1 line
10 KiB
JavaScript

!function(t){function i(t,i,r){null!=t&&("number"==typeof t?this.fromNumber(t,i,r):null==i&&"string"!=typeof t?this.fromString(t,256):this.fromString(t,i))}function r(){return new i(null)}function o(t,i,r,o,s,n){for(;--n>=0;){var h=i*this[t++]+r[o]+s;s=Math.floor(h/67108864),r[o++]=67108863&h}return s}function s(t,i,r,o,s,n){for(var h=32767&i,e=i>>15;--n>=0;){var u=32767&this[t],f=this[t++]>>15,a=e*u+f*h;u=h*u+((32767&a)<<15)+r[o]+(1073741823&s),s=(u>>>30)+(a>>>15)+e*f+(s>>>30),r[o++]=1073741823&u}return s}function n(t,i,r,o,s,n){for(var h=16383&i,e=i>>14;--n>=0;){var u=16383&this[t],f=this[t++]>>14,a=e*u+f*h;u=h*u+((16383&a)<<14)+r[o]+s,s=(u>>28)+(a>>14)+e*f,r[o++]=268435455&u}return s}function h(t){return ai.charAt(t)}function e(t,i){var r=pi[t.charCodeAt(i)];return null==r?-1:r}function u(t){for(var i=this.t-1;i>=0;--i)t[i]=this[i];t.t=this.t,t.s=this.s}function f(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+DV:this.t=0}function a(t){var i=r();return i.fromInt(t),i}function p(t,r){var o;if(16==r)o=4;else if(8==r)o=3;else if(256==r)o=8;else if(2==r)o=1;else if(32==r)o=5;else{if(4!=r)return void this.fromRadix(t,r);o=2}this.t=0,this.s=0;for(var s=t.length,n=!1,h=0;--s>=0;){var u=8==o?255&t[s]:e(t,s);0>u?"-"==t.charAt(s)&&(n=!0):(n=!1,0==h?this[this.t++]=u:h+o>this.DB?(this[this.t-1]|=(u&(1<<this.DB-h)-1)<<h,this[this.t++]=u>>this.DB-h):this[this.t-1]|=u<<h,h+=o,h>=this.DB&&(h-=this.DB))}8==o&&0!=(128&t[0])&&(this.s=-1,h>0&&(this[this.t-1]|=(1<<this.DB-h)-1<<h)),this.clamp(),n&&i.ZERO.subTo(this,this)}function l(){for(var t=this.s&this.DM;this.t>0&&this[this.t-1]==t;)--this.t}function c(t){if(this.s<0)return"-"+this.negate().toString(t);var i;if(16==t)i=4;else if(8==t)i=3;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return this.toRadix(t);i=2}var r,o=(1<<i)-1,s=!1,n="",e=this.t,u=this.DB-e*this.DB%i;if(e-->0)for(u<this.DB&&(r=this[e]>>u)>0&&(s=!0,n=h(r));e>=0;)i>u?(r=(this[e]&(1<<u)-1)<<i-u,r|=this[--e]>>(u+=this.DB-i)):(r=this[e]>>(u-=i)&o,0>=u&&(u+=this.DB,--e)),r>0&&(s=!0),s&&(n+=h(r));return s?n:"0"}function v(){var t=r();return i.ZERO.subTo(this,t),t}function m(){return this.s<0?this.negate():this}function y(t){var i=this.s-t.s;if(0!=i)return i;var r=this.t;if(i=r-t.t,0!=i)return this.s<0?-i:i;for(;--r>=0;)if(0!=(i=this[r]-t[r]))return i;return 0}function T(t){var i,r=1;return 0!=(i=t>>>16)&&(t=i,r+=16),0!=(i=t>>8)&&(t=i,r+=8),0!=(i=t>>4)&&(t=i,r+=4),0!=(i=t>>2)&&(t=i,r+=2),0!=(i=t>>1)&&(t=i,r+=1),r}function d(){return this.t<=0?0:this.DB*(this.t-1)+T(this[this.t-1]^this.s&this.DM)}function D(t,i){var r;for(r=this.t-1;r>=0;--r)i[r+t]=this[r];for(r=t-1;r>=0;--r)i[r]=0;i.t=this.t+t,i.s=this.s}function g(t,i){for(var r=t;r<this.t;++r)i[r-t]=this[r];i.t=Math.max(this.t-t,0),i.s=this.s}function S(t,i){var r,o=t%this.DB,s=this.DB-o,n=(1<<s)-1,h=Math.floor(t/this.DB),e=this.s<<o&this.DM;for(r=this.t-1;r>=0;--r)i[r+h+1]=this[r]>>s|e,e=(this[r]&n)<<o;for(r=h-1;r>=0;--r)i[r]=0;i[h]=e,i.t=this.t+h+1,i.s=this.s,i.clamp()}function b(t,i){i.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)return void(i.t=0);var o=t%this.DB,s=this.DB-o,n=(1<<o)-1;i[0]=this[r]>>o;for(var h=r+1;h<this.t;++h)i[h-r-1]|=(this[h]&n)<<s,i[h-r]=this[h]>>o;o>0&&(i[this.t-r-1]|=(this.s&n)<<s),i.t=this.t-r,i.clamp()}function B(t,i){for(var r=0,o=0,s=Math.min(t.t,this.t);s>r;)o+=this[r]-t[r],i[r++]=o&this.DM,o>>=this.DB;if(t.t<this.t){for(o-=t.s;r<this.t;)o+=this[r],i[r++]=o&this.DM,o>>=this.DB;o+=this.s}else{for(o+=this.s;r<t.t;)o-=t[r],i[r++]=o&this.DM,o>>=this.DB;o-=t.s}i.s=0>o?-1:0,-1>o?i[r++]=this.DV+o:o>0&&(i[r++]=o),i.t=r,i.clamp()}function E(t,r){var o=this.abs(),s=t.abs(),n=o.t;for(r.t=n+s.t;--n>=0;)r[n]=0;for(n=0;n<s.t;++n)r[n+o.t]=o.am(0,s[n],r,n,0,o.t);r.s=0,r.clamp(),this.s!=t.s&&i.ZERO.subTo(r,r)}function M(t){for(var i=this.abs(),r=t.t=2*i.t;--r>=0;)t[r]=0;for(r=0;r<i.t-1;++r){var o=i.am(r,i[r],t,2*r,0,1);(t[r+i.t]+=i.am(r+1,2*i[r],t,2*r+1,o,i.t-r-1))>=i.DV&&(t[r+i.t]-=i.DV,t[r+i.t+1]=1)}t.t>0&&(t[t.t-1]+=i.am(r,i[r],t,2*r,0,1)),t.s=0,t.clamp()}function w(t,o,s){var n=t.abs();if(!(n.t<=0)){var h=this.abs();if(h.t<n.t)return null!=o&&o.fromInt(0),void(null!=s&&this.copyTo(s));null==s&&(s=r());var e=r(),u=this.s,f=t.s,a=this.DB-T(n[n.t-1]);a>0?(n.lShiftTo(a,e),h.lShiftTo(a,s)):(n.copyTo(e),h.copyTo(s));var p=e.t,l=e[p-1];if(0!=l){var c=l*(1<<this.F1)+(p>1?e[p-2]>>this.F2:0),v=this.FV/c,m=(1<<this.F1)/c,y=1<<this.F2,d=s.t,D=d-p,g=null==o?r():o;for(e.dlShiftTo(D,g),s.compareTo(g)>=0&&(s[s.t++]=1,s.subTo(g,s)),i.ONE.dlShiftTo(p,g),g.subTo(e,e);e.t<p;)e[e.t++]=0;for(;--D>=0;){var S=s[--d]==l?this.DM:Math.floor(s[d]*v+(s[d-1]+y)*m);if((s[d]+=e.am(0,S,s,D,0,p))<S)for(e.dlShiftTo(D,g),s.subTo(g,s);s[d]<--S;)s.subTo(g,s)}null!=o&&(s.drShiftTo(p,o),u!=f&&i.ZERO.subTo(o,o)),s.t=p,s.clamp(),a>0&&s.rShiftTo(a,s),0>u&&i.ZERO.subTo(s,s)}}}function R(t){var o=r();return this.abs().divRemTo(t,null,o),this.s<0&&o.compareTo(i.ZERO)>0&&t.subTo(o,o),o}function A(t){this.m=t}function V(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function x(t){return t}function O(t){t.divRemTo(this.m,null,t)}function q(t,i,r){t.multiplyTo(i,r),this.reduce(r)}function F(t,i){t.squareTo(i),this.reduce(i)}function I(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var i=3&t;return i=i*(2-(15&t)*i)&15,i=i*(2-(255&t)*i)&255,i=i*(2-((65535&t)*i&65535))&65535,i=i*(2-t*i%this.DV)%this.DV,i>0?this.DV-i:-i}function Z(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<t.DB-15)-1,this.mt2=2*t.t}function j(t){var o=r();return t.abs().dlShiftTo(this.m.t,o),o.divRemTo(this.m,null,o),t.s<0&&o.compareTo(i.ZERO)>0&&this.m.subTo(o,o),o}function L(t){var i=r();return t.copyTo(i),this.reduce(i),i}function N(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var i=0;i<this.m.t;++i){var r=32767&t[i],o=r*this.mpl+((r*this.mph+(t[i]>>15)*this.mpl&this.um)<<15)&t.DM;for(r=i+this.m.t,t[r]+=this.m.am(0,o,t,i,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function _(t,i){t.squareTo(i),this.reduce(i)}function C(t,i,r){t.multiplyTo(i,r),this.reduce(r)}function P(){return 0==(this.t>0?1&this[0]:this.s)}function k(t,o){if(t>4294967295||1>t)return i.ONE;var s=r(),n=r(),h=o.convert(this),e=T(t)-1;for(h.copyTo(s);--e>=0;)if(o.sqrTo(s,n),(t&1<<e)>0)o.mulTo(n,h,s);else{var u=s;s=n,n=u}return o.revert(s)}function z(t,i){var r;return r=256>t||i.isEven()?new A(i):new Z(i),this.exp(t,r)}function K(){this.i=0,this.j=0,this.S=new Array}function U(t){var i,r,o;for(i=0;256>i;++i)this.S[i]=i;for(r=0,i=0;256>i;++i)r=r+this.S[i]+t[i%t.length]&255,o=this.S[i],this.S[i]=this.S[r],this.S[r]=o;this.i=0,this.j=0}function G(){var t;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,t=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=t,this.S[t+this.S[this.i]&255]}function H(){return new K}function J(){if(null==li){for(li=H();mi>vi;){var t=Math.floor(65536*Math.random());ci[vi++]=255&t}for(li.init(ci),vi=0;vi<ci.length;++vi)ci[vi]=0;vi=0}return li.next()}function Q(t){var i;for(i=0;i<t.length;++i)t[i]=J()}function W(){}function X(t,r){return new i(t,r)}function Y(t,r){if(r<t.length+11)return console.error("Message too long for RSA"),null;for(var o=new Array,s=t.length-1;s>=0&&r>0;){var n=t.charCodeAt(s--);128>n?o[--r]=n:n>127&&2048>n?(o[--r]=63&n|128,o[--r]=n>>6|192):(o[--r]=63&n|128,o[--r]=n>>6&63|128,o[--r]=n>>12|224)}o[--r]=0;for(var h=new W,e=new Array;r>2;){for(e[0]=0;0==e[0];)h.nextBytes(e);o[--r]=e[0]}return o[--r]=2,o[--r]=0,new i(o)}function $(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function ti(t,i){null!=t&&null!=i&&t.length>0&&i.length>0?(this.n=X(t,16),this.e=parseInt(i,16)):console.error("Invalid RSA public key")}function ii(t){return t.modPowInt(this.e,this.n)}function ri(t){var i=Y(t,this.n.bitLength()+7>>3);if(null==i)return null;var r=this.doPublic(i);if(null==r)return null;var o=r.toString(16);return 0==(1&o.length)?o:"0"+o}function oi(t){var i=(this.n.bitLength()+7>>3)-11;if(0>=i)return!1;for(var r="",o=0;o+i<t.length;)r+=this._short_encrypt(t.substring(o,o+i)),o+=i;return r+=this._short_encrypt(t.substring(o,t.length))}var si,ni=0xdeadbeefcafe,hi=15715070==(16777215&ni);hi&&"Microsoft Internet Explorer"==navigator.appName?(i.prototype.am=s,si=30):hi&&"Netscape"!=navigator.appName?(i.prototype.am=o,si=26):(i.prototype.am=n,si=28),i.prototype.DB=si,i.prototype.DM=(1<<si)-1,i.prototype.DV=1<<si;var ei=52;i.prototype.FV=Math.pow(2,ei),i.prototype.F1=ei-si,i.prototype.F2=2*si-ei;var ui,fi,ai="0123456789abcdefghijklmnopqrstuvwxyz",pi=new Array;for(ui="0".charCodeAt(0),fi=0;9>=fi;++fi)pi[ui++]=fi;for(ui="a".charCodeAt(0),fi=10;36>fi;++fi)pi[ui++]=fi;for(ui="A".charCodeAt(0),fi=10;36>fi;++fi)pi[ui++]=fi;A.prototype.convert=V,A.prototype.revert=x,A.prototype.reduce=O,A.prototype.mulTo=q,A.prototype.sqrTo=F,Z.prototype.convert=j,Z.prototype.revert=L,Z.prototype.reduce=N,Z.prototype.mulTo=C,Z.prototype.sqrTo=_,i.prototype.copyTo=u,i.prototype.fromInt=f,i.prototype.fromString=p,i.prototype.clamp=l,i.prototype.dlShiftTo=D,i.prototype.drShiftTo=g,i.prototype.lShiftTo=S,i.prototype.rShiftTo=b,i.prototype.subTo=B,i.prototype.multiplyTo=E,i.prototype.squareTo=M,i.prototype.divRemTo=w,i.prototype.invDigit=I,i.prototype.isEven=P,i.prototype.exp=k,i.prototype.toString=c,i.prototype.negate=v,i.prototype.abs=m,i.prototype.compareTo=y,i.prototype.bitLength=d,i.prototype.mod=R,i.prototype.modPowInt=z,i.ZERO=a(0),i.ONE=a(1),K.prototype.init=U,K.prototype.next=G;var li,ci,vi,mi=256;if(null==ci){ci=new Array,vi=0;var yi;if(t.crypto&&t.crypto.getRandomValues){var Ti=new Uint32Array(256);for(t.crypto.getRandomValues(Ti),yi=0;yi<Ti.length;++yi)ci[vi++]=255&Ti[yi]}var di=function(i){if(this.count=this.count||0,this.count>=256||vi>=mi)return void(t.removeEventListener?t.removeEventListener("mousemove",di):t.detachEvent&&t.detachEvent("onmousemove",di));this.count+=1;var r=i.x+i.y;ci[vi++]=255&r};t.addEventListener?t.addEventListener("mousemove",di):t.attachEvent&&t.attachEvent("onmousemove",di)}W.prototype.nextBytes=Q,$.prototype.doPublic=ii,$.prototype.setPublic=ti,$.prototype.encrypt=ri,$.prototype._short_encrypt=ri,$.prototype.encrypt=oi,t.RSAKey=$}(window);