mirror of
https://github.com/wownero/wownero.git
synced 2026-10-20 17:08:35 +02:00
device: fix ledger status code reporting
This commit is contained in:
@@ -81,10 +81,9 @@ namespace hw {
|
|||||||
static const char *to_string(unsigned int code);
|
static const char *to_string(unsigned int code);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Must be sorted in ascending order by the code
|
|
||||||
#define LEDGER_STATUS(status) {status, #status}
|
#define LEDGER_STATUS(status) {status, #status}
|
||||||
constexpr Status status_codes[] = {
|
constexpr Status status_codes[] = {
|
||||||
LEDGER_STATUS(SW_OK),
|
LEDGER_STATUS(SW_LOCKED_DEVICE),
|
||||||
LEDGER_STATUS(SW_WRONG_LENGTH),
|
LEDGER_STATUS(SW_WRONG_LENGTH),
|
||||||
LEDGER_STATUS(SW_SECURITY_PIN_LOCKED),
|
LEDGER_STATUS(SW_SECURITY_PIN_LOCKED),
|
||||||
LEDGER_STATUS(SW_SECURITY_LOAD_KEY),
|
LEDGER_STATUS(SW_SECURITY_LOAD_KEY),
|
||||||
@@ -98,7 +97,6 @@ namespace hw {
|
|||||||
LEDGER_STATUS(SW_SECURITY_INTERNAL),
|
LEDGER_STATUS(SW_SECURITY_INTERNAL),
|
||||||
LEDGER_STATUS(SW_SECURITY_MAX_SIGNATURE_REACHED),
|
LEDGER_STATUS(SW_SECURITY_MAX_SIGNATURE_REACHED),
|
||||||
LEDGER_STATUS(SW_SECURITY_PREFIX_HASH),
|
LEDGER_STATUS(SW_SECURITY_PREFIX_HASH),
|
||||||
LEDGER_STATUS(SW_SECURITY_LOCKED),
|
|
||||||
LEDGER_STATUS(SW_COMMAND_NOT_ALLOWED),
|
LEDGER_STATUS(SW_COMMAND_NOT_ALLOWED),
|
||||||
LEDGER_STATUS(SW_SUBCOMMAND_NOT_ALLOWED),
|
LEDGER_STATUS(SW_SUBCOMMAND_NOT_ALLOWED),
|
||||||
LEDGER_STATUS(SW_DENY),
|
LEDGER_STATUS(SW_DENY),
|
||||||
@@ -106,13 +104,24 @@ namespace hw {
|
|||||||
LEDGER_STATUS(SW_WRONG_DATA),
|
LEDGER_STATUS(SW_WRONG_DATA),
|
||||||
LEDGER_STATUS(SW_WRONG_DATA_RANGE),
|
LEDGER_STATUS(SW_WRONG_DATA_RANGE),
|
||||||
LEDGER_STATUS(SW_IO_FULL),
|
LEDGER_STATUS(SW_IO_FULL),
|
||||||
|
LEDGER_STATUS(SW_SECURITY_LOCKED),
|
||||||
LEDGER_STATUS(SW_CLIENT_NOT_SUPPORTED),
|
LEDGER_STATUS(SW_CLIENT_NOT_SUPPORTED),
|
||||||
LEDGER_STATUS(SW_WRONG_P1P2),
|
LEDGER_STATUS(SW_WRONG_P1P2),
|
||||||
LEDGER_STATUS(SW_INS_NOT_SUPPORTED),
|
LEDGER_STATUS(SW_INS_NOT_SUPPORTED),
|
||||||
LEDGER_STATUS(SW_PROTOCOL_NOT_SUPPORTED),
|
LEDGER_STATUS(SW_PROTOCOL_NOT_SUPPORTED),
|
||||||
LEDGER_STATUS(SW_UNKNOWN)
|
LEDGER_STATUS(SW_UNKNOWN),
|
||||||
|
LEDGER_STATUS(SW_OK)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constexpr bool status_codes_sorted()
|
||||||
|
{
|
||||||
|
for (size_t i = 1; i < sizeof(status_codes) / sizeof(status_codes[0]); ++i)
|
||||||
|
if (!(status_codes[i-1].code < status_codes[i].code))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
static_assert(status_codes_sorted(), "status_codes must be sorted in ascending order by the code");
|
||||||
|
|
||||||
const char *Status::to_string(unsigned int code)
|
const char *Status::to_string(unsigned int code)
|
||||||
{
|
{
|
||||||
constexpr size_t status_codes_size = sizeof(status_codes) / sizeof(status_codes[0]);
|
constexpr size_t status_codes_size = sizeof(status_codes) / sizeof(status_codes[0]);
|
||||||
@@ -488,6 +497,7 @@ namespace hw {
|
|||||||
MDEBUG("Device "<< this->id << " exchange: sw: " << this->sw << " expected: " << ok);
|
MDEBUG("Device "<< this->id << " exchange: sw: " << this->sw << " expected: " << ok);
|
||||||
ASSERT_X(sw != SW_CLIENT_NOT_SUPPORTED, "Monero Ledger App doesn't support current monero version. Try to update the Monero Ledger App, at least " << MINIMAL_APP_VERSION_MAJOR<< "." << MINIMAL_APP_VERSION_MINOR << "." << MINIMAL_APP_VERSION_MICRO << " is required.");
|
ASSERT_X(sw != SW_CLIENT_NOT_SUPPORTED, "Monero Ledger App doesn't support current monero version. Try to update the Monero Ledger App, at least " << MINIMAL_APP_VERSION_MAJOR<< "." << MINIMAL_APP_VERSION_MINOR << "." << MINIMAL_APP_VERSION_MICRO << " is required.");
|
||||||
ASSERT_X(sw != SW_PROTOCOL_NOT_SUPPORTED, "Make sure no other program is communicating with the Ledger.");
|
ASSERT_X(sw != SW_PROTOCOL_NOT_SUPPORTED, "Make sure no other program is communicating with the Ledger.");
|
||||||
|
ASSERT_X(sw != SW_LOCKED_DEVICE, "Ledger is locked.");
|
||||||
ASSERT_SW(this->sw,ok,mask);
|
ASSERT_SW(this->sw,ok,mask);
|
||||||
|
|
||||||
return this->sw;
|
return this->sw;
|
||||||
@@ -505,6 +515,7 @@ namespace hw {
|
|||||||
// cancel on device
|
// cancel on device
|
||||||
deny = 1;
|
deny = 1;
|
||||||
} else {
|
} else {
|
||||||
|
ASSERT_X(this->sw != SW_LOCKED_DEVICE, "Ledger is locked.");
|
||||||
ASSERT_SW(this->sw,ok,mask);
|
ASSERT_SW(this->sw,ok,mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ namespace hw {
|
|||||||
#define SW_PROTOCOL_NOT_SUPPORTED 0x6e00
|
#define SW_PROTOCOL_NOT_SUPPORTED 0x6e00
|
||||||
#define SW_UNKNOWN 0x6f00
|
#define SW_UNKNOWN 0x6f00
|
||||||
|
|
||||||
|
// Origin: https://github.com/LedgerHQ/ledger-live/blob/68b9451b5456ae6cd452d00aa5007a875bdf4c6f/libs/ledgerjs/packages/errors/src/index.ts#L337
|
||||||
|
#define SW_LOCKED_DEVICE 0x5515
|
||||||
|
|
||||||
void set_apdu_verbose(bool verbose);
|
void set_apdu_verbose(bool verbose);
|
||||||
|
|
||||||
class ABPkeys {
|
class ABPkeys {
|
||||||
|
|||||||
Reference in New Issue
Block a user