diff --git a/src/fido/cbor.c b/src/fido/cbor.c index e80f513..f9e9269 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 cf836d7..832ee35 100644 --- a/src/fido/cbor_make_credential.c +++ b/src/fido/cbor_make_credential.c @@ -222,6 +222,9 @@ int cbor_make_credential(const uint8_t *data, size_t len) { curve = FIDO2_CURVE_P256K1; } } + 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 c22ed37..f12dc5d 100644 --- a/src/fido/fido.h +++ b/src/fido/fido.h @@ -66,6 +66,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