summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NitrokeyManager.cc12
-rw-r--r--include/command.h25
-rw-r--r--include/stick20_commands.h78
3 files changed, 35 insertions, 80 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc
index 8bc0e38..eb34ef2 100644
--- a/NitrokeyManager.cc
+++ b/NitrokeyManager.cc
@@ -304,10 +304,10 @@ namespace nitrokey{
case DeviceModel::STORAGE:
{
auto p = get_payload<ChangeAdminUserPin20Current>();
- strcpyT(p.old_pin, current_PIN);
+ strcpyT(p.password, current_PIN);
p.set_kind(StoKind);
auto p2 = get_payload<ChangeAdminUserPin20New>();
- strcpyT(p2.new_pin, new_PIN);
+ strcpyT(p2.password, new_PIN);
p2.set_kind(StoKind);
ChangeAdminUserPin20Current::CommandTransaction::run(*device, p);
ChangeAdminUserPin20New::CommandTransaction::run(*device, p2);
@@ -445,12 +445,12 @@ namespace nitrokey{
}
case DeviceModel::STORAGE : {
auto p2 = get_payload<ChangeAdminUserPin20Current>();
- p2.set_kind(PasswordKind::Admin);
- strcpyT(p2.old_pin, admin_password);
+ p2.set_defaults();
+ strcpyT(p2.password, admin_password);
ChangeAdminUserPin20Current::CommandTransaction::run(*device, p2);
auto p3 = get_payload<stick20::UnlockUserPin>();
- p3.set_kind(PasswordKind::Admin);
- strcpyT(p3.user_new_password, new_user_password);
+ p3.set_defaults();
+ strcpyT(p3.password, new_user_password);
stick20::UnlockUserPin::CommandTransaction::run(*device, p3);
break;
}
diff --git a/include/command.h b/include/command.h
index 5ac1d7f..badf068 100644
--- a/include/command.h
+++ b/include/command.h
@@ -19,13 +19,18 @@ namespace nitrokey {
};
#define print_to_ss(x) ( ss << " " << (#x) <<":\t" << (x) << std::endl );
+namespace stick20{
+ enum class PasswordKind : uint8_t {
+ User = 'P',
+ Admin = 'A'
+ };
- template<CommandID cmd_id>
+ template<CommandID cmd_id, PasswordKind Tpassword_kind = PasswordKind::User, int password_length = 20>
class PasswordCommand : public Command<cmd_id> {
public:
struct CommandPayload {
uint8_t kind;
- uint8_t password[20];
+ uint8_t password[password_length];
std::string dissect() const {
std::stringstream ss;
@@ -40,6 +45,21 @@ namespace nitrokey {
kind = (uint8_t) 'P';
}
+ void set_defaults(){
+ set_kind(Tpassword_kind);
+ }
+
+ void set_kind(PasswordKind password_kind){
+ switch (password_kind){
+ case PasswordKind::Admin:
+ set_kind_admin();
+ break;
+ case PasswordKind::User:
+ set_kind_user();
+ break;
+ }
+ };
+
} __packed;
typedef Transaction<Command<cmd_id>::command_id(), struct CommandPayload, struct EmptyPayload>
@@ -47,6 +67,7 @@ namespace nitrokey {
};
}
+ }
}
#undef print_to_ss
diff --git a/include/stick20_commands.h b/include/stick20_commands.h
index 5c2d97e..a51d1ca 100644
--- a/include/stick20_commands.h
+++ b/include/stick20_commands.h
@@ -18,80 +18,14 @@ namespace nitrokey {
#define print_to_ss(x) ( ss << " " << (#x) <<":\t" << (x) << std::endl );
namespace stick20 {
- enum class PasswordKind : uint8_t {
- User = 'P',
- Admin = 'A'
- };
-
- class ChangeAdminUserPin20Current : Command<CommandID::SEND_PASSWORD> {
- public:
- struct CommandPayload {
- uint8_t kind;
- uint8_t old_pin[20];
-
- std::string dissect() const {
- std::stringstream ss;
- print_to_ss( kind );
- ss << " old_pin:\t" << old_pin << std::endl;
- return ss.str();
- }
-
- void set_kind(PasswordKind k) {
- kind = (uint8_t) k;
- }
- } __packed;
-
- typedef Transaction<command_id(), struct CommandPayload, struct EmptyPayload>
- CommandTransaction;
- };
-
-
- class ChangeAdminUserPin20New : Command<CommandID::SEND_NEW_PASSWORD> {
- public:
-
- struct CommandPayload {
- uint8_t kind;
- uint8_t new_pin[20];
-
- std::string dissect() const {
- std::stringstream ss;
- print_to_ss( kind );
- ss << " new_pin:\t" << new_pin << std::endl;
- return ss.str();
- }
-
- void set_kind(PasswordKind k) {
- kind = (uint8_t) k;
- }
-
- } __packed;
-
- typedef Transaction<command_id(), struct CommandPayload, struct EmptyPayload>
- CommandTransaction;
- };
- class UnlockUserPin : Command<CommandID::UNLOCK_USER_PASSWORD> {
- public:
- struct CommandPayload {
- uint8_t kind;
- uint8_t user_new_password[20];
-
- std::string dissect() const {
- std::stringstream ss;
- print_to_ss( kind );
- ss << " user_new_password:\t" << user_new_password << std::endl;
- return ss.str();
- }
-
- void set_kind(PasswordKind k) {
- kind = (uint8_t) k;
- }
- } __packed;
-
- typedef Transaction<command_id(), struct CommandPayload, struct EmptyPayload>
- CommandTransaction;
- };
+ class ChangeAdminUserPin20Current :
+ public PasswordCommand<CommandID::SEND_PASSWORD, PasswordKind::Admin> {};
+ class ChangeAdminUserPin20New :
+ public PasswordCommand<CommandID::SEND_NEW_PASSWORD, PasswordKind::Admin> {};
+ class UnlockUserPin :
+ public PasswordCommand<CommandID::UNLOCK_USER_PASSWORD, PasswordKind::Admin> {};
class EnableEncryptedPartition : public PasswordCommand<CommandID::ENABLE_CRYPTED_PARI> {};
class DisableEncryptedPartition : public PasswordCommand<CommandID::DISABLE_CRYPTED_PARI> {};