"use strict";
/*jslint bitwise: false */
function encode64(s) {
// the result/encrypted string, the padding string, and the pad count
var r = "", p = "", c = s.length % 3, n,
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
// add a right zero pad to make this string a multiple of 3 characters
if (c > 0) {
for (; c < 3; c++) {
p += '=';
s += String.fromCharCode(0);
}
}
// increment over the length of the string, three characters at a time
for (c = 0; c < s.length; c += 3) {
// we add newlines after every 76 output characters, according to
// the MIME specs
if (c > 0 && (c / 3 * 4) % 76 === 0) {
r += "\r\n";
}
// these three 8-bit (ASCII) characters become one 24-bit number
n =
(s.charCodeAt(c) << 16) +
(s.charCodeAt(c + 1) << 8) +
s.charCodeAt(c + 2);
// this 24-bit number gets separated into four 6-bit numbers
n = [(n >>> 18) & 63, (n >>> 12) & 63, (n >>> 6) & 63, n & 63];
// those four 6-bit numbers are used as indices into the
// base64 character list
r +=
chars[n[0]] +
chars[n[1]] +
chars[n[2]] +
chars[n[3]];
}
// add the actual padding string, after removing the zero pad
return r.substring(0, r.length - p.length) + p;
}