diff --git a/fido2/u2f.c b/fido2/u2f.c index 6d5e6eb..edc4451 100644 --- a/fido2/u2f.c +++ b/fido2/u2f.c @@ -31,7 +31,7 @@ // void u2f_response_writeback(uint8_t * buf, uint8_t len); static int16_t u2f_register(struct u2f_register_request * req, bool fromNFC); -static int16_t u2f_authenticate(struct u2f_authenticate_request * req, uint8_t control); +static int16_t u2f_authenticate(struct u2f_authenticate_request * req, uint8_t control, bool fromNFC); int8_t u2f_response_writeback(const uint8_t * buf, uint16_t len); void u2f_reset_response(); @@ -78,7 +78,7 @@ void u2f_request_ex(APDU_HEADER *req, uint8_t *payload, uint32_t len, CTAP_RESPO case U2F_AUTHENTICATE: printf1(TAG_U2F, "U2F_AUTHENTICATE\n"); t1 = millis(); - rcode = u2f_authenticate((struct u2f_authenticate_request*)payload, req->p1); + rcode = u2f_authenticate((struct u2f_authenticate_request*)payload, req->p1, fromNFC); t2 = millis(); printf1(TAG_TIME,"u2f_authenticate time: %d ms\n", t2-t1); break; @@ -213,7 +213,7 @@ static int8_t u2f_appid_eq(struct u2f_key_handle * kh, uint8_t * appid) -static int16_t u2f_authenticate(struct u2f_authenticate_request * req, uint8_t control) +static int16_t u2f_authenticate(struct u2f_authenticate_request * req, uint8_t control, bool fromNFC) { uint8_t up = 1; @@ -245,10 +245,13 @@ static int16_t u2f_authenticate(struct u2f_authenticate_request * req, uint8_t c - if (ctap_user_presence_test() == 0) - { - return U2F_SW_CONDITIONS_NOT_SATISFIED; - } + if(!fromNFC) + { + if (ctap_user_presence_test() == 0) + { + return U2F_SW_CONDITIONS_NOT_SATISFIED; + } + } count = ctap_atomic_count(0); diff --git a/targets/stm32l432/src/nfc.c b/targets/stm32l432/src/nfc.c index 5d9feaf..0b4cf5c 100644 --- a/targets/stm32l432/src/nfc.c +++ b/targets/stm32l432/src/nfc.c @@ -356,7 +356,13 @@ void nfc_process_iblock(uint8_t * buf, int len) return; } + t1 = millis(); u2f_request_nfc(&buf[1], len, &ctap_resp); + + printf1(TAG_NFC, "U2F resp len: %d\r\n", ctap_resp.length); + printf1(TAG_NFC,"U2F Authenticate processing %d (took %d)\r\n", millis(), millis() - t1); + nfc_write_response_chaining(buf[0], ctap_resp.data, ctap_resp.length); + printf1(TAG_NFC,"U2F Authenticate answered %d (took %d)\r\n", millis(), millis() - t1); break; case APDU_FIDO_NFCCTAP_MSG: