|
|
@ -72,17 +72,17 @@ function tripletToBase64 (num) { |
|
|
|
} |
|
|
|
|
|
|
|
function encodeChunk (uint8, start, end) { |
|
|
|
var temp |
|
|
|
var tmp |
|
|
|
var output = [] |
|
|
|
for (var i = start; i < end; i += 3) { |
|
|
|
temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) |
|
|
|
output.push(tripletToBase64(temp)) |
|
|
|
tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) |
|
|
|
output.push(tripletToBase64(tmp)) |
|
|
|
} |
|
|
|
return output.join('') |
|
|
|
} |
|
|
|
|
|
|
|
function fromByteArray (uint8) { |
|
|
|
var i, temp, len2 |
|
|
|
var tmp |
|
|
|
var len = uint8.length |
|
|
|
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
|
|
|
|
var output = '' |
|
|
@ -90,27 +90,22 @@ function fromByteArray (uint8) { |
|
|
|
var maxChunkLength = 16383 // must be multiple of 3
|
|
|
|
|
|
|
|
// go through the array every three bytes, we'll deal with trailing stuff later
|
|
|
|
for (i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { |
|
|
|
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { |
|
|
|
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) |
|
|
|
} |
|
|
|
|
|
|
|
// pad the end with zeros, but make sure to not forget the extra bytes
|
|
|
|
switch (extraBytes) { |
|
|
|
case 1: |
|
|
|
temp = uint8[len - 1] |
|
|
|
output += lookup[temp >> 2] |
|
|
|
output += lookup[(temp << 4) & 0x3F] |
|
|
|
output += '==' |
|
|
|
break |
|
|
|
case 2: |
|
|
|
temp = (uint8[len - 2] << 8) + (uint8[len - 1]) |
|
|
|
output += lookup[temp >> 10] |
|
|
|
output += lookup[(temp >> 4) & 0x3F] |
|
|
|
output += lookup[(temp << 2) & 0x3F] |
|
|
|
output += '=' |
|
|
|
break |
|
|
|
default: |
|
|
|
break |
|
|
|
if (extraBytes === 1) { |
|
|
|
tmp = uint8[len - 1] |
|
|
|
output += lookup[tmp >> 2] |
|
|
|
output += lookup[(tmp << 4) & 0x3F] |
|
|
|
output += '==' |
|
|
|
} else if (extraBytes === 2) { |
|
|
|
tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) |
|
|
|
output += lookup[tmp >> 10] |
|
|
|
output += lookup[(tmp >> 4) & 0x3F] |
|
|
|
output += lookup[(tmp << 2) & 0x3F] |
|
|
|
output += '=' |
|
|
|
} |
|
|
|
|
|
|
|
parts.push(output) |
|
|
|