UNPKG

ledger-bitsong-js

Version:
151 lines (134 loc) 4.47 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.errorCodeToString = errorCodeToString; exports.processErrorResponse = processErrorResponse; exports.getVersion = getVersion; exports.ERROR_CODE = exports.P1_VALUES = exports.PAYLOAD_TYPE = exports.INS = exports.APP_KEY = exports.CHUNK_SIZE = exports.CLA = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var CLA = 0x55; exports.CLA = CLA; var CHUNK_SIZE = 250; exports.CHUNK_SIZE = CHUNK_SIZE; var APP_KEY = "CSM"; exports.APP_KEY = APP_KEY; var INS = { GET_VERSION: 0x00, INS_PUBLIC_KEY_SECP256K1: 0x01, // Obsolete SIGN_SECP256K1: 0x02, GET_ADDR_SECP256K1: 0x04 }; exports.INS = INS; var PAYLOAD_TYPE = { INIT: 0x00, ADD: 0x01, LAST: 0x02 }; exports.PAYLOAD_TYPE = PAYLOAD_TYPE; var P1_VALUES = { ONLY_RETRIEVE: 0x00, SHOW_ADDRESS_IN_DEVICE: 0x01 }; exports.P1_VALUES = P1_VALUES; var ERROR_CODE = { NoError: 0x9000 }; exports.ERROR_CODE = ERROR_CODE; var ERROR_DESCRIPTION = { 1: "U2F: Unknown", 2: "U2F: Bad request", 3: "U2F: Configuration unsupported", 4: "U2F: Device Ineligible", 5: "U2F: Timeout", 14: "Timeout", 0x9000: "No errors", 0x9001: "Device is busy", 0x6802: "Error deriving keys", 0x6400: "Execution Error", 0x6700: "Wrong Length", 0x6982: "Empty Buffer", 0x6983: "Output buffer too small", 0x6984: "Data is invalid", 0x6985: "Conditions not satisfied", 0x6986: "Transaction rejected", 0x6a80: "Bad key handle", 0x6b00: "Invalid P1/P2", 0x6d00: "Instruction not supported", 0x6e00: "App does not seem to be open", 0x6f00: "Unknown error", 0x6f01: "Sign/verify error" }; function errorCodeToString(statusCode) { if (statusCode in ERROR_DESCRIPTION) return ERROR_DESCRIPTION[statusCode]; return "Unknown Status Code: ".concat(statusCode); } function isDict(v) { return (0, _typeof2.default)(v) === "object" && v !== null && !(v instanceof Array) && !(v instanceof Date); } function processErrorResponse(response) { if (response) { if (isDict(response)) { if (Object.prototype.hasOwnProperty.call(response, "statusCode")) { return { return_code: response.statusCode, error_message: errorCodeToString(response.statusCode) }; } if (Object.prototype.hasOwnProperty.call(response, "return_code") && Object.prototype.hasOwnProperty.call(response, "error_message")) { return response; } } return { return_code: 0xffff, error_message: response.toString() }; } return { return_code: 0xffff, error_message: response.toString() }; } function getVersion(_x) { return _getVersion.apply(this, arguments); } function _getVersion() { _getVersion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(transport) { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", transport.send(CLA, INS.GET_VERSION, 0, 0).then(function (response) { var errorCodeData = response.slice(-2); var returnCode = errorCodeData[0] * 256 + errorCodeData[1]; var targetId = 0; if (response.length >= 9) { /* eslint-disable no-bitwise */ targetId = (response[5] << 24) + (response[6] << 16) + (response[7] << 8) + (response[8] << 0); /* eslint-enable no-bitwise */ } return { return_code: returnCode, error_message: errorCodeToString(returnCode), // /// test_mode: response[0] !== 0, major: response[1], minor: response[2], patch: response[3], device_locked: response[4] === 1, target_id: targetId.toString(16) }; }, processErrorResponse)); case 1: case "end": return _context.stop(); } } }, _callee); })); return _getVersion.apply(this, arguments); }