#ifndef STICK20_COMMANDS_H #define STICK20_COMMANDS_H #include "inttypes.h" namespace nitrokey { namespace proto { /* * STICK20 protocol command ids * a superset of STICK10 */ namespace stick20 { 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