function RSAKeyPair(b,a,c){this.e=biFromHex(b);this.d=biFromHex(a);this.m=biFromHex(c);this.digitSize=2*biHighIndex(this.m)+2;this.chunkSize=this.digitSize-11;this.radix=16;this.barrett=new BarrettMu(this.m)}function twoDigit(a){return(a<10?"0":"")+String(a)}function encryptedString(b,n){if(b.chunkSize>b.digitSize-11)return"Error";var d=[],q=n.length,e=0,a=0;while(e<q){var c=n.charCodeAt(e);if(c<128){d[a]=c;a++}else if(c>127&&c<2048){d[a]=c>>6|192;a++;d[a]=c&63|128;a++}else{d[a]=c>>12|224;a++;d[a]=c>>6&63|128;a++;d[a]=c&63|128;a++}e++}var l=d.length,k="",a,j,i;for(e=0;e<l;e+=b.chunkSize){i=new BigInt;a=0;for(var h=e+b.chunkSize>l?l%b.chunkSize:b.chunkSize,g=[],f=0;f<h;f++)g[f]=d[e+h-1-f];g[h]=0;var o=Math.max(8,b.digitSize-3-h);for(f=0;f<o;f++)g[h+1+f]=Math.floor(Math.random()*254)+1;g[b.digitSize-2]=2;g[b.digitSize-1]=0;for(j=0;j<b.digitSize;++a){i.digits[a]=g[j++];i.digits[a]+=g[j++]<<8}var m=b.barrett.powMod(i,b.e),p=b.radix==16?biToHex(m):biToString(m,b.radix);k+=p+" "}return k.substring(0,k.length-1)}function decryptedString(d,h){for(var f=h.split(" "),a="",b,c,e=0;e<f.length;++e){var g;if(d.radix==16)g=biFromHex(f[e]);else g=biFromString(f[e],d.radix);c=d.barrett.powMod(g,d.d);for(b=0;b<=biHighIndex(c);++b)a+=String.fromCharCode(c.digits[b]&255,c.digits[b]>>8)}if(a.charCodeAt(a.length-1)==0)a=a.substring(0,a.length-1);return a}
