@zondax/ledger-stacks
Version:
Node API for Stacks App (Ledger Nano S/S+/X)
40 lines (39 loc) • 1.41 kB
JavaScript
;
exports.__esModule = true;
exports.serializePath = void 0;
var HARDENED = 0x80000000;
var DEFAULT_DER_PATH_LEN = 6;
var IDENTITY_DER_PATH_LEN = 4; // m/888'/0'/<account>
function serializePath(path) {
if (!path.startsWith('m')) {
throw new Error('Path should start with "m" (e.g "m/44\'/5757\'/5\'/0/3")');
}
var pathArray = path.split('/');
var allocSize = 0;
if (pathArray.length === DEFAULT_DER_PATH_LEN || pathArray.length === IDENTITY_DER_PATH_LEN) {
allocSize = (pathArray.length - 1) * 4;
}
else {
throw new Error("Invalid path. (e.g \"m/44'/5757'/5'/0/3\" or \"m/888'/0'/<account>\")");
}
var buf = Buffer.alloc(allocSize);
for (var i = 1; i < pathArray.length; i += 1) {
var value = 0;
var child = pathArray[i];
if (child.endsWith("'")) {
value += HARDENED;
child = child.slice(0, -1);
}
var childNumber = Number(child);
if (Number.isNaN(childNumber)) {
throw new Error("Invalid path : ".concat(child, " is not a number. (e.g \"m/44'/461'/5'/0/3\")"));
}
if (childNumber >= HARDENED) {
throw new Error('Incorrect child value (bigger or equal to 0x80000000)');
}
value += childNumber;
buf.writeUInt32LE(value, 4 * (i - 1));
}
return buf;
}
exports.serializePath = serializePath;