Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
'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));
|
|
|