diff --git a/src/fido/cbor.c b/src/fido/cbor.c index eff874d..394c29e 100644 --- a/src/fido/cbor.c +++ b/src/fido/cbor.c @@ -111,6 +111,10 @@ void cbor_thread() { if (apdu.sw == 0) { DEBUG_DATA(res_APDU + 1, res_APDU_size); } + else { + res_APDU[0] = apdu.sw; + apdu.sw = 0; + } finished_data_size = res_APDU_size + 1; diff --git a/src/fido/cbor_make_credential.c b/src/fido/cbor_make_credential.c index 0c5c91e..37b7b45 100644 --- a/src/fido/cbor_make_credential.c +++ b/src/fido/cbor_make_credential.c @@ -227,6 +227,9 @@ int cbor_make_credential(const uint8_t *data, size_t len) { curve = FIDO2_CURVE_ED25519; } } + else if (pubKeyCredParams[i].alg <= FIDO2_ALG_RS256 && pubKeyCredParams[i].alg >= FIDO2_ALG_RS512) { + // pass + } else { CBOR_ERROR(CTAP2_ERR_CBOR_UNEXPECTED_TYPE); } diff --git a/src/fido/ctap2_cbor.h b/src/fido/ctap2_cbor.h index f7ee2d2..9a8c8d1 100644 --- a/src/fido/ctap2_cbor.h +++ b/src/fido/ctap2_cbor.h @@ -57,7 +57,7 @@ extern const bool _btrue, _bfalse; do \ { \ error = e; \ - printf("Cbor ERROR [%s:%d]: %d\n", __FILE__, __LINE__, e); \ + printf("Cbor ERROR [%s:%d]: %x\n", __FILE__, __LINE__, e); \ goto err; \ } while (0) diff --git a/src/fido/fido.h b/src/fido/fido.h index 65e164d..8759477 100644 --- a/src/fido/fido.h +++ b/src/fido/fido.h @@ -67,6 +67,9 @@ extern int ecdh(uint8_t protocol, const mbedtls_ecp_point *Q, uint8_t *sharedSec #define FIDO2_ALG_ES512 -36 //ECDSA-SHA512 P521 #define FIDO2_ALG_ECDH_ES_HKDF_256 -25 //ECDH-ES + HKDF-256 #define FIDO2_ALG_ES256K -47 +#define FIDO2_ALG_RS256 -257 +#define FIDO2_ALG_RS384 -258 +#define FIDO2_ALG_RS512 -259 #define FIDO2_CURVE_P256 1 #define FIDO2_CURVE_P384 2 diff --git a/src/fido/version.h b/src/fido/version.h index 721a0bf..f226d38 100644 --- a/src/fido/version.h +++ b/src/fido/version.h @@ -18,7 +18,7 @@ #ifndef __VERSION_H_ #define __VERSION_H_ -#define PICO_FIDO_VERSION 0x0506 +#define PICO_FIDO_VERSION 0x0507 #define PICO_FIDO_VERSION_MAJOR ((PICO_FIDO_VERSION >> 8) & 0xff) #define PICO_FIDO_VERSION_MINOR (PICO_FIDO_VERSION & 0xff)