﻿var CryptoHelper = {
	encrypt: function(str, challenge, e, m) {
		setMaxDigits(131);
		var key = new RSAKeyPair(e, '', m);
		return encryptedString(key, challenge + this._base64encode(str));
	}

    , _base64encode: function(str) {

    	var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    	var bytes = [];
    	for (var i = 0; i < str.length; i++) {
    		var ccUnicode = str.charCodeAt(i);
    		var hi = (ccUnicode >> 8) & 0xff;
    		var lo = ccUnicode & 0xff;

    		bytes.push(lo);
    		bytes.push(hi);
    	}

    	var i = 0;
    	var out = "";
    	while (i < bytes.length) {
    		var c1 = bytes[i++];
    		if (i == bytes.length) {
    			out += base64EncodeChars.charAt(c1 >> 2);
    			out += base64EncodeChars.charAt((c1 & 0x3) << 4);
    			out += "==";
    			break;
    		}

    		var c2 = bytes[i++];
    		if (i == bytes.length) {
    			out += base64EncodeChars.charAt(c1 >> 2);
    			out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
    			out += base64EncodeChars.charAt((c2 & 0xF) << 2);
    			out += "=";
    			break;
    		}

    		var c3 = bytes[i++];
    		out += base64EncodeChars.charAt(c1 >> 2);
    		out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
    		out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
    		out += base64EncodeChars.charAt(c3 & 0x3F);
    	}
    	return out;
    }

}
