From 00248f4c98c953788c09d993b0d4597eb94f3bde Mon Sep 17 00:00:00 2001 From: Conor Patrick Date: Sun, 13 May 2018 11:36:02 -0400 Subject: [PATCH] add options and correct versions --- ctap.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ ctap.h | 7 +++++++ 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/ctap.c b/ctap.c index 1bee169..64c3cab 100644 --- a/ctap.c +++ b/ctap.c @@ -76,34 +76,74 @@ void ctap_get_info(CborEncoder * encoder) int ret; CborEncoder array; CborEncoder map; + CborEncoder options; - const int number_of_map_items = 2; const int number_of_versions = 2; - ret = cbor_encoder_create_map(encoder, &map, number_of_map_items); + ret = cbor_encoder_create_map(encoder, &map, 3); check_ret(ret); { - ret = cbor_encode_uint(&map, 0x01); // versions key + ret = cbor_encode_uint(&map, RESP_versions); // versions key check_ret(ret); { ret = cbor_encoder_create_array(&map, &array, number_of_versions); check_ret(ret); - ret = cbor_encode_text_stringz(&array, "1.0"); + ret = cbor_encode_text_stringz(&array, "U2F_V2"); check_ret(ret); - ret = cbor_encode_text_stringz(&array, "2.0"); + ret = cbor_encode_text_stringz(&array, "FIDO_2_0"); check_ret(ret); ret = cbor_encoder_close_container(&map, &array); check_ret(ret); } - ret = cbor_encode_uint(&map, 0x03); // aaguid key + ret = cbor_encode_uint(&map, RESP_aaguid); // aaguid key check_ret(ret); { ret = cbor_encode_byte_string(&map, CTAP_AAGUID, 16); check_ret(ret); } + ret = cbor_encode_uint(&map, RESP_options); // aaguid key + check_ret(ret); + { + ret = cbor_encoder_create_map(&map, &options,4); + check_ret(ret); + { + ret = cbor_encode_text_string(&options, "plat", 4); + check_ret(ret); + { + ret = cbor_encode_boolean(&options, 0); // Not attached to platform + check_ret(ret); + } + + ret = cbor_encode_text_string(&options, "rk", 2); + check_ret(ret); + { + ret = cbor_encode_boolean(&options, 0); // State-less device, requires allowList parameter. + check_ret(ret); + } + + ret = cbor_encode_text_string(&options, "up", 2); + check_ret(ret); + { + ret = cbor_encode_boolean(&options, 1); // Capable of testing user presence + check_ret(ret); + } + + ret = cbor_encode_text_string(&options, "uv", 2); + check_ret(ret); + { + ret = cbor_encode_boolean(&options, 0); // NOT [yet] capable of verifying user + check_ret(ret); + } + + } + ret = cbor_encoder_close_container(&map, &options); + check_ret(ret); + } + + } ret = cbor_encoder_close_container(encoder, &map); check_ret(ret); diff --git a/ctap.h b/ctap.h index e9c96d5..817f3b5 100644 --- a/ctap.h +++ b/ctap.h @@ -40,6 +40,13 @@ #define CP_getKeyAgreement 0x07 #define CP_getRetries 0x08 +#define RESP_versions 0x1 +#define RESP_extensions 0x2 +#define RESP_aaguid 0x3 +#define RESP_options 0x4 +#define RESP_maxMsgSize 0x5 +#define RESP_pinProtocols 0x6 + #define RESP_fmt 0x01 #define RESP_authData 0x02 #define RESP_attStmt 0x03