summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/dissect.h25
-rw-r--r--unittest/test.cc2
2 files changed, 24 insertions, 3 deletions
diff --git a/include/dissect.h b/include/dissect.h
index 32df78d..3b347de 100644
--- a/include/dissect.h
+++ b/include/dissect.h
@@ -32,19 +32,40 @@ public:
}
};
+
template <CommandID id, class HIDPacket>
class ResponseDissector : semantics::non_constructible {
public:
static std::string dissect(const HIDPacket &pod) {
std::stringstream out;
+
+ std::string status[4];
+ status[0] = " STATUS_READY";
+ status[1]= " STATUS_BUSY";
+ status[2]= " STATUS_ERROR";
+ status[3]= " STATUS_RECEIVED_REPORT";
+ std::string cmd[11];
+ cmd[0]= " CMD_STATUS_OK";
+ cmd[1]= " CMD_STATUS_WRONG_CRC";
+ cmd[2]= " CMD_STATUS_WRONG_SLOT";
+ cmd[3]= " CMD_STATUS_SLOT_NOT_PROGRAMMED";
+ cmd[4]= " CMD_STATUS_WRONG_PASSWORD";
+ cmd[5]= " CMD_STATUS_NOT_AUTHORIZED";
+ cmd[6]= " CMD_STATUS_TIMESTAMP_WARNING";
+ cmd[7]= " CMD_STATUS_NO_NAME_ERROR";
+ cmd[8]= " CMD_STATUS_NOT_SUPPORTED";
+ cmd[9]= " CMD_STATUS_UNKNOWN_COMMAND";
+ cmd[10]= " CMD_STATUS_AES_DEC_FAILED";
+
+
out << "Raw HID packet:" << std::endl;
out << ::nitrokey::misc::hexdump((const char *)(&pod), sizeof pod);
- out << "Device status:\t" << pod.device_status + 0 << std::endl;
+ out << "Device status:\t" << pod.device_status + 0<<" "<< cmd[ pod.device_status ] << std::endl;
out << "Command ID:\t" << commandid_to_string((CommandID)(pod.command_id)) << std::endl;
out << "Last command CRC:\t" << pod.last_command_crc << std::endl;
- out << "Last command status:\t" << pod.last_command_status + 0 << std::endl;
+ out << "Last command status:\t" << pod.last_command_status + 0<<" "<<status[pod.last_command_status] << std::endl;
out << "CRC:\t" << pod.crc << std::endl;
out << "Payload:" << std::endl;
diff --git a/unittest/test.cc b/unittest/test.cc
index ae13dda..9d1423c 100644
--- a/unittest/test.cc
+++ b/unittest/test.cc
@@ -26,7 +26,7 @@ int main() {
}
{
- for (int i=0; i<10; i++) {
+ for (int i=0x20; i<0x23; i++) {
ReadSlot::CommandTransaction::CommandPayload slot_req;
slot_req.slot_number = i;
auto slot = ReadSlot::CommandTransaction::run(stick, slot_req);