function rsakeypair(a, b, c) { this.e = bifromhex(a); this.d = bifromhex(b); 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(a, b) { if (a.chunksize > a.digitsize - 11) return "error"; var c = new array; var d = b.length; var e = 0; while (e < d) { c[e] = b.charcodeat(e); e++ } var f = c.length; var g = ""; var h, i, j; for (e = 0; e < f; e += a.chunksize) { j = new bigint; h = 0; var k; var l = e + a.chunksize > f ? f % a.chunksize : a.chunksize; var m = new array; for (k = 0; k < l; k++) m[k] = c[e + l - 1 - k]; m[l] = 0; var n = math.max(8, a.digitsize - 3 - l); for (k = 0; k < n; k++) m[l + 1 + k] = math.floor(254 * math.random()) + 1; m[a.digitsize - 2] = 2; m[a.digitsize - 1] = 0; for (i = 0; i < a.digitsize; ++h) { j.digits[h] = m[i++]; j.digits[h] += m[i++] << 8 } var o = a.barrett.powmod(j, a.e); var p = 16 == a.radix ? bitohex(o) : bitostring(o, a.radix); g += p + " " } return g.substring(0, g.length - 1) } function decryptedstring(a, b) { var c = b.split(" "); var d = ""; var e, f, g; for (e = 0; e < c.length; ++e) { var h; if (16 == a.radix) h = bifromhex(c[e]); else h = bifromstring(c[e], a.radix); g = a.barrett.powmod(h, a.d); for (f = 0; f <= bihighindex(g) ; ++f) d += string.fromcharcode(255 & g.digits[f], g.digits[f] >> 8) } if (0 == d.charcodeat(d.length - 1)) d = d.substring(0, d.length - 1); return d }