diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-10-14 15:00:04 +0200 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-10-19 16:34:34 +0200 |
commit | 801fcc59dbf04dfce4323d2a3cad99f9d643e525 (patch) | |
tree | e4a7abb7a904f9b8fadf2c5d9c1bd72d86159c2a | |
parent | fa9f178a05f6fa0209411e7d91eb78d64dc0a3ca (diff) | |
download | libnitrokey-801fcc59dbf04dfce4323d2a3cad99f9d643e525.tar.gz libnitrokey-801fcc59dbf04dfce4323d2a3cad99f9d643e525.tar.bz2 |
Support regenerating AES keys on NK Storage
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
-rw-r--r-- | NitrokeyManager.cc | 18 | ||||
-rw-r--r-- | include/stick20_commands.h | 26 |
2 files changed, 33 insertions, 11 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 20657a5..47b68d4 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -396,9 +396,21 @@ namespace nitrokey{ } void NitrokeyManager::build_aes_key(const char *admin_password) { - auto p = get_payload<BuildAESKey>(); - strcpyT(p.admin_password, admin_password); - BuildAESKey::CommandTransaction::run(*device, p); + switch (device->get_device_model()) { + case DeviceModel::PRO: { + auto p = get_payload<BuildAESKey>(); + strcpyT(p.admin_password, admin_password); + BuildAESKey::CommandTransaction::run(*device, p); + break; + } + case DeviceModel::STORAGE : { + auto p = get_payload<stick20::CreateNewKeys>(); + strcpyT(p.admin_password, admin_password); + p.setKindPrefixed(); + stick20::CreateNewKeys::CommandTransaction::run(*device, p); + break; + } + } } void NitrokeyManager::factory_reset(const char *admin_password) { diff --git a/include/stick20_commands.h b/include/stick20_commands.h index 03761a5..f4e7500 100644 --- a/include/stick20_commands.h +++ b/include/stick20_commands.h @@ -146,15 +146,25 @@ class ExportFirmware : semantics::non_constructible { struct EmptyPayload> CommandTransaction; }; -class CreateNewKeys : semantics::non_constructible { - public: - struct CommandPayload { - uint8_t password[30]; - }; + class CreateNewKeys : Command<CommandID::GENERATE_NEW_KEYS> { + public: + struct CommandPayload { + uint8_t kind; + uint8_t admin_password[30]; //CS20_MAX_PASSWORD_LEN + std::string dissect() const { + std::stringstream ss; + ss << " admin_password:\t" << admin_password<< std::endl; + return ss.str(); + } + void setKindPrefixed(){ + kind = 'P'; + } + } __packed; + + typedef Transaction<command_id(), struct CommandPayload, struct EmptyPayload> + CommandTransaction; + }; - typedef Transaction<CommandID::GENERATE_NEW_KEYS, struct CommandPayload, - struct EmptyPayload> CommandTransaction; -}; class FillSDCardWithRandomChars : semantics::non_constructible { public: |