@ledgerhq/hw-app-vet
Version:
Ledger Hardware Wallet VeChain Application API
50 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.splitRaw = exports.splitPath = void 0;
const buffer_1 = require("buffer");
const splitPath = (path) => {
return path
.split("/")
.map(elem => {
let num = parseInt(elem, 10);
if (elem.length > 1 && elem[elem.length - 1] === "'") {
num += 0x80000000;
}
return num;
})
.filter(num => !isNaN(num));
};
exports.splitPath = splitPath;
const splitRaw = (path, rawHex, isTransaction) => {
const contentByteLength = isTransaction ? 0 : 4;
const paths = (0, exports.splitPath)(path);
let offset = 0;
const raw = buffer_1.Buffer.from(rawHex, "hex");
const buffers = [];
while (offset !== raw.length) {
const maxChunkSize = offset === 0 ? 255 - 1 - paths.length * 4 - contentByteLength : 255;
const chunkSize = offset + maxChunkSize > raw.length ? raw.length - offset : maxChunkSize;
const buffer = buffer_1.Buffer.alloc(offset === 0 ? 1 + paths.length * 4 + contentByteLength + chunkSize : chunkSize);
if (offset === 0) {
buffer[0] = paths.length;
paths.forEach((element, index) => {
buffer.writeUInt32BE(element, 1 + 4 * index);
});
if (isTransaction) {
raw.copy(buffer, 1 + 4 * paths.length, offset, offset + chunkSize);
}
else {
buffer.writeUInt32BE(raw.length, 1 + 4 * paths.length);
raw.copy(buffer, 1 + 4 * paths.length + 4, offset, offset + chunkSize);
}
}
else {
raw.copy(buffer, 0, offset, offset + chunkSize);
}
buffers.push(buffer);
offset += chunkSize;
}
return buffers;
};
exports.splitRaw = splitRaw;
//# sourceMappingURL=utils.js.map