From feeb433a5625fd869e3b02c3254867c63b42086d Mon Sep 17 00:00:00 2001 From: Szczepan Zalega Date: Fri, 29 Jul 2016 14:28:21 +0200 Subject: Handle changing admin/user password on NK Storage Signed-off-by: Szczepan Zalega --- include/command_id.h | 6 ++++++ include/stick20_commands.h | 54 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/include/command_id.h b/include/command_id.h index 37aa5d2..87d270e 100644 --- a/include/command_id.h +++ b/include/command_id.h @@ -5,6 +5,9 @@ namespace nitrokey { namespace proto { +#define STICK20_CMD_START_VALUE 0x20 + + enum class CommandID : uint8_t { GET_STATUS = 0x00, WRITE_TO_SLOT = 0x01, @@ -29,6 +32,9 @@ enum class CommandID : uint8_t { CHANGE_USER_PIN = 0x14, CHANGE_ADMIN_PIN = 0x15, + STICK20_CMD_SEND_PASSWORD = STICK20_CMD_START_VALUE + 18, + STICK20_CMD_SEND_NEW_PASSWORD = STICK20_CMD_START_VALUE + 19, + ENABLE_CRYPTED_PARI = 0x20, DISABLE_CRYPTED_PARI, ENABLE_HIDDEN_CRYPTED_PARI, diff --git a/include/stick20_commands.h b/include/stick20_commands.h index b84d436..66fad15 100644 --- a/include/stick20_commands.h +++ b/include/stick20_commands.h @@ -1,15 +1,67 @@ #ifndef STICK20_COMMANDS_H #define STICK20_COMMANDS_H #include "inttypes.h" +#include "command.h" +//#include +//#include +#include "device_proto.h" + namespace nitrokey { namespace proto { /* * STICK20 protocol command ids -* a superset of STICK10 +* a superset (almost) of STICK10 */ namespace stick20 { + + enum class PasswordKind : uint8_t { + User = 'P', + Admin = 'A' + }; + + class ChangeAdminPin20Current : Command { + public: + struct CommandPayload { + uint8_t kind; + uint8_t old_pin[20]; + std::string dissect() const { + std::stringstream ss; + ss << " old_pin:\t" << old_pin<< std::endl; + return ss.str(); + } + void set_kind(PasswordKind k){ + kind = (uint8_t)k; + } + } __packed; + + typedef Transaction + CommandTransaction; + }; + + + class ChangeAdminPin20New : Command { + public: + + struct CommandPayload { + uint8_t kind; + uint8_t new_pin[20]; + std::string dissect() const { + std::stringstream ss; + ss << " new_pin:\t" << new_pin<< std::endl; + return ss.str(); + } + void set_kind(PasswordKind k){ + kind = (uint8_t)k; + } + + } __packed; + + typedef Transaction + CommandTransaction; + }; + class EnableEncryptedPartition : semantics::non_constructible { public: struct CommandPayload { -- cgit v1.2.3