diff options
-rw-r--r-- | NitrokeyManager.cc | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index eec595f..a2b324e 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -7,6 +7,13 @@ namespace nitrokey{ template <typename T> void initialize(T& st){ bzero(&st, sizeof(st)); } + template <typename T> + auto get_payload(){ + typename T::CommandPayload st; + bzero(&st, sizeof(st)); + return st; + } + NitrokeyManager * NitrokeyManager::_instance = nullptr; NitrokeyManager::NitrokeyManager(): device(nullptr) { @@ -45,7 +52,7 @@ namespace nitrokey{ uint32_t NitrokeyManager::get_HOTP_code(uint8_t slot_number) { assert(is_valid_hotp_slot_number(slot_number)); - GetHOTP::CommandTransaction::CommandPayload gh; + auto gh = get_payload<GetHOTP>(); gh.slot_number = get_internal_slot_number_for_hotp(slot_number); auto resp = GetHOTP::CommandTransaction::run(*device, gh); return resp.code; @@ -60,7 +67,7 @@ namespace nitrokey{ uint32_t NitrokeyManager::get_TOTP_code(uint8_t slot_number, uint64_t challenge, uint64_t last_totp_time, uint8_t last_interval) { assert(is_valid_totp_slot_number(slot_number)); - GetTOTP::CommandTransaction::CommandPayload gt; + auto gt = get_payload<GetTOTP>(); gt.slot_number = slot_number; gt.challenge = challenge; gt.last_interval = last_interval; @@ -70,7 +77,7 @@ namespace nitrokey{ } bool NitrokeyManager::erase_slot(uint8_t slot_number) { - EraseSlot::CommandTransaction::CommandPayload p; + auto p = get_payload<EraseSlot>(); p.slot_number = slot_number; auto resp = EraseSlot::CommandTransaction::run(*device,p); return true; @@ -95,16 +102,14 @@ namespace nitrokey{ assert(strlen(slot_name)<=15); slot_number = get_internal_slot_number_for_hotp(slot_number); - WriteToHOTPSlot::CommandPayload payload; + auto payload = get_payload<WriteToHOTPSlot>(); payload.slot_number = slot_number; strcpy((char *) payload.slot_secret, secret); strcpy((char *) payload.slot_name, slot_name); payload.slot_counter = hotp_counter; payload.slot_config; - memset(payload.slot_token_id, 0, sizeof(payload.slot_token_id)); //????? - Authorize::CommandPayload auth; - initialize(auth); + auto auth = get_payload<Authorize>(); strcpy((char *) (auth.temporary_password), temporary_password); auth.crc_to_authorize = auth.crc_to_authorize = WriteToHOTPSlot::CommandTransaction::getCRC(payload); Authorize::CommandTransaction::run(*device, auth); @@ -131,15 +136,14 @@ namespace nitrokey{ } uint8_t *NitrokeyManager::get_slot_name(uint8_t slot_number) const { - GetSlotName::CommandPayload payload; + auto payload = get_payload<GetSlotName>(); payload.slot_number = slot_number; auto resp = GetSlotName::CommandTransaction::run(*device, payload); return (uint8_t *) strdup((const char *) resp.slot_name); } bool NitrokeyManager::authorize(const char *pin, const char *temporary_password) { - FirstAuthenticate::CommandPayload authreq; - initialize(authreq); //TODO + auto authreq = get_payload<FirstAuthenticate>(); strcpy((char *) (authreq.card_password), pin); strcpy((char *) (authreq.temporary_password), temporary_password); FirstAuthenticate::CommandTransaction::run(*device, authreq); |