diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-07-29 15:15:35 +0200 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-08-01 13:54:58 +0200 | 
| commit | 0038f840f8279483e4a8fcb9edf800425fdb9fec (patch) | |
| tree | 0a15b30ae8cf8f925ef67b310aa4aecd26e06362 /NitrokeyManager.cc | |
| parent | 5cd264c294ca6f1bf0758bb5fb0b51f3584d2795 (diff) | |
| download | libnitrokey-0038f840f8279483e4a8fcb9edf800425fdb9fec.tar.gz libnitrokey-0038f840f8279483e4a8fcb9edf800425fdb9fec.tar.bz2  | |
Merge changing PIN functions
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'NitrokeyManager.cc')
| -rw-r--r-- | NitrokeyManager.cc | 31 | 
1 files changed, 16 insertions, 15 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 7f7a870..fc1daa5 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -233,35 +233,36 @@ namespace nitrokey{      }      void NitrokeyManager::change_user_PIN(char *current_PIN, char *new_PIN) { -        auto p = get_payload<ChangeUserPin>(); -        strcpyT(p.old_pin, current_PIN); -        strcpyT(p.new_pin, new_PIN); -        ChangeUserPin::CommandTransaction::run(*device, p); +        change_PIN_general<ChangeUserPin, PasswordKind::User>(current_PIN, new_PIN);      } +      void NitrokeyManager::change_admin_PIN(char *current_PIN, char *new_PIN) { +        change_PIN_general<ChangeAdminPin, PasswordKind::Admin>(current_PIN, new_PIN); +    } + +    template <typename ProCommand, PasswordKind StoKind> +    void NitrokeyManager::change_PIN_general(char *current_PIN, char *new_PIN) {          switch (device->get_device_model()){              case DeviceModel::PRO:              { -                auto p = get_payload<ChangeAdminPin>(); +                auto p = get_payload<ProCommand>();                  strcpyT(p.old_pin, current_PIN);                  strcpyT(p.new_pin, new_PIN); -                ChangeAdminPin::CommandTransaction::run(*device, p); +                ProCommand::CommandTransaction::run(*device, p);              }                  break; -            //in Storage change admin pin is divided to two commands with 20 chars field len +            //in Storage change admin/user pin is divided to two commands with 20 chars field len              case DeviceModel::STORAGE:              { -                auto p = get_payload<ChangeAdminPin20Current>(); +                auto p = get_payload<ChangeAdminUserPin20Current>();                  strcpyT(p.old_pin, current_PIN); -                p.kind = 'A'; -                p.set_kind(PasswordKind::Admin); -                ChangeAdminPin20Current::CommandTransaction::run(*device, p); +                p.set_kind(StoKind); +                ChangeAdminUserPin20Current::CommandTransaction::run(*device, p); -                auto p2 = get_payload<ChangeAdminPin20New>(); +                auto p2 = get_payload<ChangeAdminUserPin20New>();                  strcpyT(p2.new_pin, new_PIN); -                p2.kind = 'A'; -                p2.set_kind(PasswordKind::Admin); -                ChangeAdminPin20New::CommandTransaction::run(*device, p2); +                p2.set_kind(StoKind); +                ChangeAdminUserPin20New::CommandTransaction::run(*device, p2);              }                  break;          }  | 
