#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 (almost) of STICK10 */ namespace stick20 { enum class PasswordKind : uint8_t { User = 'P', Admin = 'A' }; class ChangeAdminUserPin20Current : 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 ChangeAdminUserPin20New : 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 { uint8_t password[30]; // TODO check w/ firmware }; typedef Transaction CommandTransaction; }; class DisableEncryptedPartition : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; class EnableHiddenEncryptedPartition : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; // TODO check w/ firmware }; typedef Transaction CommandTransaction; }; class DisableHiddenEncryptedPartition : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; class EnableFirmwareUpdate : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; // TODO check w/ firmware }; typedef Transaction CommandTransaction; }; class UpdatePassword : semantics::non_constructible { public: struct CommandPayload { uint8_t old_password[15]; uint8_t new_password[15]; }; typedef Transaction CommandTransaction; }; class ExportFirmware : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class CreateNewKeys : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class FillSDCardWithRandomChars : semantics::non_constructible { public: struct CommandPayload { uint8_t volume_flag; uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class SetupHiddenVolume : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; class SendPasswordMatrix : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; class SendPasswordMatrixPinData : semantics::non_constructible { public: struct CommandPayload { uint8_t pin_data[30]; // TODO how long actually can it be? }; typedef Transaction CommandTransaction; }; class SendPasswordMatrixSetup : semantics::non_constructible { public: struct CommandPayload { uint8_t setup_data[30]; // TODO how long actually can it be? }; typedef Transaction CommandTransaction; }; class GetDeviceStatus : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; class SendPassword : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class SendNewPassword : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; // TODO fix original nomenclature class SendSetReadonlyToUncryptedVolume : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class SendSetReadwriteToUncryptedVolume : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class SendClearNewSdCardFound : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class SendStartup : semantics::non_constructible { public: struct CommandPayload { uint64_t localtime; // POSIX }; typedef Transaction CommandTransaction; }; class SendHiddenVolumeSetup : semantics::non_constructible { public: struct CommandPayload { // TODO HiddenVolumeSetup_tst type }; typedef Transaction CommandTransaction; }; class LockFirmware : semantics::non_constructible { public: struct CommandPayload { uint8_t password[30]; }; typedef Transaction CommandTransaction; }; class ProductionTest : semantics::non_constructible { public: typedef Transaction CommandTransaction; }; } } } #endif