UNPKG

@zondax/ledger-stacks

Version:

Node API for Stacks App (Ledger Nano S/S+/X)

40 lines (39 loc) 1.41 kB
"use strict"; 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;