add options and correct versions

This commit is contained in:
Conor Patrick 2018-05-13 11:36:02 -04:00
parent bc9bec2e02
commit 00248f4c98
2 changed files with 53 additions and 6 deletions

52
ctap.c
View File

@ -76,34 +76,74 @@ void ctap_get_info(CborEncoder * encoder)
int ret; int ret;
CborEncoder array; CborEncoder array;
CborEncoder map; CborEncoder map;
CborEncoder options;
const int number_of_map_items = 2;
const int number_of_versions = 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); check_ret(ret);
{ {
ret = cbor_encode_uint(&map, 0x01); // versions key ret = cbor_encode_uint(&map, RESP_versions); // versions key
check_ret(ret); check_ret(ret);
{ {
ret = cbor_encoder_create_array(&map, &array, number_of_versions); ret = cbor_encoder_create_array(&map, &array, number_of_versions);
check_ret(ret); check_ret(ret);
ret = cbor_encode_text_stringz(&array, "1.0"); ret = cbor_encode_text_stringz(&array, "U2F_V2");
check_ret(ret); check_ret(ret);
ret = cbor_encode_text_stringz(&array, "2.0"); ret = cbor_encode_text_stringz(&array, "FIDO_2_0");
check_ret(ret); check_ret(ret);
ret = cbor_encoder_close_container(&map, &array); ret = cbor_encoder_close_container(&map, &array);
check_ret(ret); check_ret(ret);
} }
ret = cbor_encode_uint(&map, 0x03); // aaguid key ret = cbor_encode_uint(&map, RESP_aaguid); // aaguid key
check_ret(ret); check_ret(ret);
{ {
ret = cbor_encode_byte_string(&map, CTAP_AAGUID, 16); ret = cbor_encode_byte_string(&map, CTAP_AAGUID, 16);
check_ret(ret); 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); ret = cbor_encoder_close_container(encoder, &map);
check_ret(ret); check_ret(ret);

7
ctap.h
View File

@ -40,6 +40,13 @@
#define CP_getKeyAgreement 0x07 #define CP_getKeyAgreement 0x07
#define CP_getRetries 0x08 #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_fmt 0x01
#define RESP_authData 0x02 #define RESP_authData 0x02
#define RESP_attStmt 0x03 #define RESP_attStmt 0x03