Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
90 lines
2.2 KiB
JavaScript
Executable file
90 lines
2.2 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
/* exported SEUtils */
|
|
|
|
(function(exports) {
|
|
|
|
var SEUtils = {
|
|
byteToHexString: function byteToHexString(uint8arr) {
|
|
if (!uint8arr) {
|
|
return '';
|
|
}
|
|
|
|
var hexStr = '';
|
|
for (var i = 0; i < uint8arr.length; i++) {
|
|
var hex = (uint8arr[i] & 0xff).toString(16);
|
|
hex = (hex.length === 1) ? '0' + hex : hex;
|
|
hexStr += hex;
|
|
}
|
|
return hexStr.toUpperCase();
|
|
},
|
|
|
|
hexStringToByte: function hexStringToByte(str) {
|
|
var a = [];
|
|
for(var i = 0, len = str.length; i < len; i+=2) {
|
|
a.push(parseInt(str.substr(i,2),16));
|
|
}
|
|
return new Uint8Array(a);
|
|
},
|
|
|
|
byteToASCIIString: function byteToASCIIString(arr) {
|
|
var str = '';
|
|
|
|
var len = arr && arr.length ? arr.length : 0;
|
|
for(var i = 0; i < len; i++) {
|
|
str += arr[i] < 0x20 || arr > 0x7E ? '' : String.fromCharCode(arr[i]);
|
|
}
|
|
|
|
return str;
|
|
},
|
|
|
|
joinUint8Arrays: function joinUint8Arrays() {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
var length = args.reduce(function(a, b) { return a + b.length; }, 0);
|
|
var out = new Uint8Array(length);
|
|
|
|
args.reduce(function(previousLen, buffer) {
|
|
out.set(buffer, previousLen);
|
|
return previousLen + buffer.length;
|
|
}, 0);
|
|
|
|
return out;
|
|
},
|
|
|
|
// no support for multibyte tag and constructed data object
|
|
parseSimpleTLV: function parseSimpleTLV(data) {
|
|
if(!data) {
|
|
return null;
|
|
}
|
|
|
|
var result = {};
|
|
for(var i = 0, len = data.length; i < len;) {
|
|
var tag = data[i];
|
|
var length = data[i+1];
|
|
var value = data.slice(i+2, i+2 + length);
|
|
result[tag] = value;
|
|
i += 2 + length;
|
|
}
|
|
|
|
return result;
|
|
},
|
|
|
|
promises: {
|
|
whilePromise: function(condition, action, init) {
|
|
return new Promise((resolve, reject) => {
|
|
var loop = (value) => {
|
|
if (condition(value)) {
|
|
return resolve(value);
|
|
}
|
|
|
|
return action(value).then(loop).catch(reject);
|
|
};
|
|
loop(init);
|
|
});
|
|
},
|
|
},
|
|
};
|
|
|
|
exports.SEUtils = SEUtils;
|
|
}((typeof exports === 'undefined') ? window : exports));
|
|
|