xiot-core-xcp-ts
Version:
168 lines (167 loc) • 6.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Utf8ArrayToStr = exports.BytesJoin = exports.Base642Bin = exports.Bin2Base64 = exports.Unit8ArrayToString = exports.StringToUint8Array = void 0;
function StringToUint8Array(s) {
const array = new Uint8Array(s.length);
for (let i = 0; i < s.length; ++i) {
array[i] = s.charCodeAt(i);
}
return array;
}
exports.StringToUint8Array = StringToUint8Array;
function Unit8ArrayToString(fileData) {
let dataString = '';
for (let i = 0; i < fileData.length; i++) {
dataString += String.fromCharCode(fileData[i]);
}
return dataString;
}
exports.Unit8ArrayToString = Unit8ArrayToString;
/**
* copy from mipher
*/
function Bin2Base64(bin, url) {
// btoa not available
let base64 = '';
const encodingTable = url ? 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' :
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
for (let i = 0, len = bin.length; i < len;) {
const octet_a = i < bin.length ? bin[i] : 0;
i++;
const octet_b = i < bin.length ? bin[i] : 0;
i++;
const octet_c = i < bin.length ? bin[i] : 0;
i++;
// tslint:disable-next-line:no-bitwise
const triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
// tslint:disable-next-line:no-bitwise
base64 += encodingTable.charAt((triple >>> 18) & 0x3F);
// tslint:disable-next-line:no-bitwise
base64 += encodingTable.charAt((triple >>> 12) & 0x3F);
// tslint:disable-next-line:no-bitwise
base64 += (i < bin.length + 2) ? encodingTable.charAt((triple >>> 6) & 0x3F) : (url ? '%3d' : '=');
// tslint:disable-next-line:no-bitwise
base64 += (i < bin.length + 1) ? encodingTable.charAt((triple >>> 0) & 0x3F) : (url ? '%3d' : '=');
}
return base64;
}
exports.Bin2Base64 = Bin2Base64;
/**
* copy from mipher
*/
function Base642Bin(base64) {
// remove base64url encoding
base64 = base64.replace(/-/g, '+').replace(/_/g, '/').replace(/%3d/g, '=');
// length must be multiple of 4
if (base64.length % 4 !== 0) {
return new Uint8Array(0);
}
let strlen = base64.length / 4 * 3;
if (base64.charAt(base64.length - 1) === '=') {
strlen--;
}
if (base64.charAt(base64.length - 2) === '=') {
strlen--;
}
if (typeof atob !== 'undefined') {
return new Uint8Array(atob(base64).split('').map(function (c) {
return c.charCodeAt(0);
}));
}
else {
// atob not available
const decodingTable = new Int8Array([
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 62, -1, 62, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59,
60, 61, -1, -1, -1, -2, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, -1, -1, -1, -1, 63,
-1, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, -1, -1, -1, -1, -1 // x y z . . . . .
]);
let p = 0;
const bin = new Uint8Array(strlen);
for (let i = 0, len = base64.length; i < len;) {
const sextet_a = base64.charAt(i) === '=' || base64.charCodeAt(i) > 'z'.charCodeAt(0) ? 0 : decodingTable[base64.charCodeAt(i)];
i++;
const sextet_b = base64.charAt(i) === '=' || base64.charCodeAt(i) > 'z'.charCodeAt(0) ? 0 : decodingTable[base64.charCodeAt(i)];
i++;
const sextet_c = base64.charAt(i) === '=' || base64.charCodeAt(i) > 'z'.charCodeAt(0) ? 0 : decodingTable[base64.charCodeAt(i)];
i++;
const sextet_d = base64.charAt(i) === '=' || base64.charCodeAt(i) > 'z'.charCodeAt(0) ? 0 : decodingTable[base64.charCodeAt(i)];
i++;
// tslint:disable-next-line:no-bitwise
const triple = (sextet_a << 18) + (sextet_b << 12) + (sextet_c << 6) + (sextet_d);
if (base64.charAt(i - 3) !== '=') {
// tslint:disable-next-line:no-bitwise
bin[p++] = (triple >>> 16) & 0xff;
}
if (base64.charAt(i - 2) !== '=') {
// tslint:disable-next-line:no-bitwise
bin[p++] = (triple >>> 8) & 0xff;
}
if (base64.charAt(i - 1) !== '=') {
// tslint:disable-next-line:no-bitwise
bin[p++] = triple & 0xff;
}
}
return bin;
}
}
exports.Base642Bin = Base642Bin;
function BytesJoin(a, b) {
const c = new Uint8Array(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
exports.BytesJoin = BytesJoin;
function Utf8ArrayToStr(array) {
const len = array.length;
let out = '';
let i = 0;
let c;
let char2;
let char3;
while (i < len) {
c = array[i++];
switch (c / 16) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
// 0xxxxxxx
out += String.fromCharCode(c);
break;
case 12:
case 13:
// 110x xxxx 10xx xxxx
char2 = array[i++];
// tslint:disable-next-line:no-bitwise
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = array[i++];
char3 = array[i++];
// tslint:disable-next-line:no-bitwise
out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
break;
}
}
return out;
}
exports.Utf8ArrayToStr = Utf8ArrayToStr;