diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2018-03-13 09:38:15 +0100 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2018-03-13 09:38:15 +0100 |
commit | 86deabd9c8c42412b4467d01b362a8454e5e762f (patch) | |
tree | a309ee57b7696a4ffca9a24398e974e9c4bd705a /include/command.h | |
parent | 350fa7670ff63d0833d80edee42c1a798c3064c3 (diff) | |
parent | b22b36f89e8924bd5eeef1105ce74a2df4ba02bd (diff) | |
download | libnitrokey-86deabd9c8c42412b4467d01b362a8454e5e762f.tar.gz libnitrokey-86deabd9c8c42412b4467d01b362a8454e5e762f.tar.bz2 |
Merge branch 'pr_101'
Fixed header path. Allow to override UDEV rules.
Closes #101
Diffstat (limited to 'include/command.h')
-rw-r--r-- | include/command.h | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/include/command.h b/include/command.h deleted file mode 100644 index 6852bf0..0000000 --- a/include/command.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2015-2018 Nitrokey UG - * - * This file is part of libnitrokey. - * - * libnitrokey is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * libnitrokey is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libnitrokey. If not, see <http://www.gnu.org/licenses/>. - * - * SPDX-License-Identifier: LGPL-3.0 - */ - -#ifndef COMMAND_H -#define COMMAND_H -#include <string> -#include "command_id.h" -#include "cxx_semantics.h" - -#define print_to_ss(x) ( ss << " " << (#x) <<":\t" << (x) << std::endl ); -#ifdef LOG_VOLATILE_DATA -#define print_to_ss_volatile(x) print_to_ss(x); -#else -#define print_to_ss_volatile(x) ( ss << " " << (#x) <<":\t" << "***********" << std::endl ); -#endif -#define hexdump_to_ss(x) (ss << #x":\n"\ - << ::nitrokey::misc::hexdump((const uint8_t *) (&x), sizeof x, false)); - -namespace nitrokey { - namespace proto { - - template<CommandID cmd_id> - class Command : semantics::non_constructible { - public: - constexpr static CommandID command_id() { return cmd_id; } - - template<typename T> - std::string dissect(const T &) { - return std::string("Payload dissection is unavailable"); - } - }; - -namespace stick20{ - enum class PasswordKind : uint8_t { - User = 'P', - Admin = 'A', - AdminPrefixed - }; - - template<CommandID cmd_id, PasswordKind Tpassword_kind = PasswordKind::User, int password_length = 20> - class PasswordCommand : public Command<cmd_id> { - constexpr static CommandID _command_id() { return cmd_id; } - public: - struct CommandPayload { - uint8_t kind; - uint8_t password[password_length]; - - std::string dissect() const { - std::stringstream ss; - print_to_ss( kind ); - print_to_ss_volatile(password); - return ss.str(); - } - void set_kind_admin() { - kind = (uint8_t) 'A'; - } - void set_kind_admin_prefixed() { - kind = (uint8_t) 'P'; - } - void set_kind_user() { - 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; - case PasswordKind::AdminPrefixed: - set_kind_admin_prefixed(); - break; - } - }; - - } __packed; - - //typedef Transaction<Command<cmd_id>::command_id(), struct CommandPayload, struct EmptyPayload> - // CommandTransaction; - using CommandTransaction = Transaction<cmd_id, CommandPayload, EmptyPayload>; - //using CommandTransaction = Transaction<_command_id(), CommandPayload, EmptyPayload>; - - }; - } - } -} - -#endif |