diff --git a/CMakeLists.txt b/CMakeLists.txt
index 63b3cf1..f1af33a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,7 @@ target_sources(pico_fido PUBLIC
${CMAKE_CURRENT_LIST_DIR}/src/fido/files.c
${CMAKE_CURRENT_LIST_DIR}/src/fido/cmd_register.c
${CMAKE_CURRENT_LIST_DIR}/src/fido/cmd_authenticate.c
+ ${CMAKE_CURRENT_LIST_DIR}/src/fido/cmd_version.c
)
set(HSM_DRIVER "hid")
include(pico-hsm-sdk/pico_hsm_sdk_import.cmake)
diff --git a/src/fido/cmd_version.c b/src/fido/cmd_version.c
new file mode 100644
index 0000000..5bff13d
--- /dev/null
+++ b/src/fido/cmd_version.c
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the Pico FIDO distribution (https://github.com/polhenarejos/pico-fido).
+ * Copyright (c) 2022 Pol Henarejos.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program 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 General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include "apdu.h"
+#include "hsm.h"
+
+int cmd_version() {
+ memcpy(res_APDU, "U2F_V2", strlen("U2F_V2"));
+ res_APDU_size = strlen("U2F_V2");
+ return SW_OK();
+}
diff --git a/src/fido/fido.c b/src/fido/fido.c
index 08e31da..983bad2 100644
--- a/src/fido/fido.c
+++ b/src/fido/fido.c
@@ -194,15 +194,18 @@ typedef struct cmd
extern int cmd_register();
extern int cmd_authenticate();
+extern int cmd_version();
static const cmd_t cmds[] = {
{ U2F_REGISTER, cmd_register },
{ U2F_AUTHENTICATE, cmd_authenticate },
+ { U2F_VERSION, cmd_version },
{ 0x00, 0x0}
};
int fido_process_apdu() {
- for (const cmd_t *cmd = cmds; cmd->ins != 0x00; cmd++) {
+ for (const cmd_t *cmd = cmds; cmd->ins != 0x00; cmd++)
+ {
if (cmd->ins == INS(apdu)) {
int r = cmd->cmd_handler();
return r;