UNPKG

@zondax/ledger-filecoin

Version:

Node API for Filecoin App (Ledger Nano S/X)

87 lines (86 loc) 3.43 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.serializePathv1 = serializePathv1; exports.signSendChunkv1 = signSendChunkv1; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _common = require("./common"); var HARDENED = 0x80000000; function serializePathv1(path) { if (typeof path !== "string") { throw new Error("Path should be a string (e.g \"m/44'/461'/5'/0/3\")"); } if (!path.startsWith("m")) { throw new Error('Path should start with "m" (e.g "m/44\'/461\'/5\'/0/3")'); } var pathArray = path.split("/"); if (pathArray.length !== 6) { throw new Error("Invalid path. (e.g \"m/44'/461'/5'/0/3\")"); } var buf = Buffer.alloc(20); 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; } function signSendChunkv1(_x, _x2, _x3, _x4, _x5) { return _signSendChunkv.apply(this, arguments); } function _signSendChunkv() { _signSendChunkv = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(app, chunkIdx, chunkNum, chunk, ins) { var payloadType; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: payloadType = _common.PAYLOAD_TYPE.ADD; if (chunkIdx === 1) { payloadType = _common.PAYLOAD_TYPE.INIT; } if (chunkIdx === chunkNum) { payloadType = _common.PAYLOAD_TYPE.LAST; } return _context.abrupt("return", app.transport.send(_common.CLA, ins, payloadType, 0, chunk, [0x9000, 0x6984, 0x6a80]).then(function (response) { var errorCodeData = response.slice(-2); var returnCode = errorCodeData[0] * 256 + errorCodeData[1]; var errorMessage = (0, _common.errorCodeToString)(returnCode); if (returnCode === 0x6a80 || returnCode === 0x6984) { errorMessage = "".concat(errorMessage, " : ").concat(response.slice(0, response.length - 2).toString("ascii")); } var signatureCompact = null; var signatureDER = null; if (response.length > 2) { signatureCompact = response.slice(0, 65); signatureDER = response.slice(65, response.length - 2); } return { signature_compact: signatureCompact, signature_der: signatureDER, return_code: returnCode, error_message: errorMessage }; }, _common.processErrorResponse)); case 4: case "end": return _context.stop(); } }, _callee); })); return _signSendChunkv.apply(this, arguments); }