function RSAKeyPair(a,d){this.e=biFromHex(a);this.m=biFromHex(d);this.chunkSize=2*biHighIndex(this.m);this.radix=16;this.barrett=new BarrettMu(this.m)}function twoDigit(a){return(a<10?"0":"")+String(a)}
function encryptedString(a,d){for(var b=d.length,f="",e=0;e<b;e+=a.chunkSize){for(var c=new BigInt,g=Math.min(b-e,a.chunkSize),h=0;h<g;h+=2){var i=g-h-1;i=(i-i%2)/2;var k=d.charCodeAt(h+e)<<8,j=0;if(h+1<g)j=d.charCodeAt(h+e+1);c.digits[i]=k+j}c=a.barrett.powMod(c,a.e);c=a.radix==16?biToHex(c):biToString(c,a.radix);if(f!="")f+="l";f+=c}return f}
function decryptedString(a,d){var b=d.split("l"),f="",e,c,g;for(e=0;e<b.length;++e){c=a.radix==16?biFromHex(b[e]):biFromString(b[e],a.radix);g=a.barrett.powMod(c,a.e);for(c=biHighIndex(g);c>=0;c--){f+=String.fromCharCode(g.digits[c]>>8);f+=String.fromCharCode(g.digits[c]&255)}}return f}function fcEncode(a,d){for(var b="",f=0,e=d.length,c=a.length,g=0;g<e;g++){if(g>0)b+="l";f=f%c+1;b+=Number(d.charCodeAt(g)^a.charCodeAt(f-1))}return b}
function fcDecode(a,d){var b="",f=d.split("l"),e=0,c=f.length,g=a.length;for(x=0;x<c;x++){e=e%g+1;var h=Number(f[x])^a.charCodeAt(e-1);b+=String.fromCharCode(h)}return b}function genFCKey(){for(var a="",d=0;d<64;d++){var b=Math.random();b=parseInt(String(b*1E3));b=String.fromCharCode(b%94+33);a+=b}return a}function getEncryptedMsgWithRsaKeyPair(a,d,b){a=new RSAKeyPair(a,d);return encryptedByPublicKeyString(a,b)};
