Added LOCK command.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos 2022-09-08 13:12:17 +02:00
parent e23dead31d
commit 0be497e713
No known key found for this signature in database
GPG key ID: C0095B7870A4CCD3

View file

@ -21,6 +21,7 @@
#include "hsm_version.h"
#include "apdu.h"
#include "usb.h"
#include "bsp/board.h"
#define U2F_MAX_PACKET_SIZE (64 - 7 + 128 * (64 - 5))
@ -138,6 +139,7 @@ int u2f_error(uint8_t error) {
uint8_t last_cmd = 0;
uint8_t last_seq = 0;
U2FHID_FRAME last_req;
uint32_t lock = 0;
int driver_process_usb_packet(uint16_t read) {
int apdu_sent = 0;
@ -147,6 +149,8 @@ int driver_process_usb_packet(uint16_t read) {
memset(u2f_resp, 0, sizeof(U2FHID_FRAME));
if (u2f_req->cid == 0x0 || (u2f_req->cid == CID_BROADCAST && u2f_req->init.cmd != U2FHID_INIT))
return u2f_error(ERR_SYNC_FAIL);
if (board_millis() < lock && u2f_req->cid != last_req.cid)
return u2f_error(ERR_CHANNEL_BUSY);
if (FRAME_TYPE(u2f_req) == TYPE_INIT)
{
if (MSG_LEN(u2f_req) > U2F_MAX_PACKET_SIZE)
@ -214,6 +218,18 @@ int driver_process_usb_packet(uint16_t read) {
memcpy(u2f_resp, u2f_req, sizeof(U2FHID_FRAME));
hid_write(64);
}
else if (u2f_req->init.cmd == U2FHID_LOCK) {
if (MSG_LEN(u2f_req) != 1)
return u2f_error(ERR_INVALID_LEN);
if (u2f_req->init.data[0] > 10)
return u2f_error(ERR_INVALID_PAR);
lock = board_millis() + u2f_req->init.data[0] * 1000;
u2f_resp = (U2FHID_FRAME *)usb_get_tx();
memset(u2f_resp, 0, 64);
u2f_resp->cid = u2f_req->cid;
u2f_resp->init.cmd = u2f_req->init.cmd;
hid_write(64);
}
else if ((u2f_req->init.cmd == U2FHID_MSG && msg_packet.len == 0) || (msg_packet.len == msg_packet.current_len && msg_packet.len > 0)) {
if (msg_packet.current_len == msg_packet.len && msg_packet.len > 0)
apdu_sent = apdu_process(msg_packet.data, msg_packet.len);