diff --git a/src/fido/cbor_get_info.c b/src/fido/cbor_get_info.c index 443c511..8812376 100644 --- a/src/fido/cbor_get_info.c +++ b/src/fido/cbor_get_info.c @@ -90,7 +90,7 @@ int cbor_get_info() { CBOR_CHECK(cbor_encode_uint(&mapEncoder, MAX_CRED_ID_LENGTH)); // MAX_CRED_ID_MAX_LENGTH CBOR_CHECK(cbor_encode_uint(&mapEncoder, 0x0A)); - CBOR_CHECK(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, 3)); + CBOR_CHECK(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, 4)); CBOR_CHECK(cbor_encoder_create_map(&arrayEncoder, &mapEncoder2, 2)); CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "alg")); CBOR_CHECK(cbor_encode_negative_int(&mapEncoder2, -FIDO2_ALG_ES256)); @@ -109,6 +109,12 @@ int cbor_get_info() { CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "type")); CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "public-key")); CBOR_CHECK(cbor_encoder_close_container(&arrayEncoder, &mapEncoder2)); + CBOR_CHECK(cbor_encoder_create_map(&arrayEncoder, &mapEncoder2, 2)); + CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "alg")); + CBOR_CHECK(cbor_encode_negative_int(&mapEncoder2, -FIDO2_ALG_ES256K)); + CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "type")); + CBOR_CHECK(cbor_encode_text_stringz(&mapEncoder2, "public-key")); + CBOR_CHECK(cbor_encoder_close_container(&arrayEncoder, &mapEncoder2)); CBOR_CHECK(cbor_encoder_close_container(&mapEncoder, &arrayEncoder)); CBOR_CHECK(cbor_encode_uint(&mapEncoder, 0x0B)); diff --git a/src/fido/cbor_make_credential.c b/src/fido/cbor_make_credential.c index 987f768..c630dcf 100644 --- a/src/fido/cbor_make_credential.c +++ b/src/fido/cbor_make_credential.c @@ -177,6 +177,9 @@ int cbor_make_credential(const uint8_t *data, size_t len) { else if (pubKeyCredParams[i].alg == FIDO2_ALG_ES512) { curve = FIDO2_CURVE_P521; } + else if (pubKeyCredParams[i].alg == FIDO2_ALG_ES256K) { + curve = FIDO2_CURVE_P256K1; + } else if (pubKeyCredParams[i].alg == 0) { // no present curve = -1; } diff --git a/src/fido/fido.h b/src/fido/fido.h index a063daf..06d547b 100644 --- a/src/fido/fido.h +++ b/src/fido/fido.h @@ -64,6 +64,7 @@ extern int ecdh(uint8_t protocol, const mbedtls_ecp_point *Q, uint8_t *sharedSec #define FIDO2_ALG_ES384 -35 //ECDSA-SHA384 P384 #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_CURVE_P256 1 #define FIDO2_CURVE_P384 2