void _free_message(_message_t *data);
typedef struct _reg_request {
- char *challenge;
- char *user_name;
- _policy_t *policy;
+ char *challenge;
+ char *user_name;
+ _policy_t *policy;
+ GList *png_list;/*ASM does not send it in reg resp, but client needs to send it back for reg resp*/
} _reg_request_t;
void _free_reg_request(_reg_request_t *data);
void _free_ui_auth_data(_ui_auth_data_t *data);
typedef struct _auth_reg_assertion {
- char *assertion_schm;
- char *assertion;
- //GList *tc_disp_char_list;
+ char *assertion_schm;
+ char *assertion;
+ GList *tc_disp_char_list;/*fido_display_png_characteristics_descriptor_s list*/
//GList *ext_list;
} _auth_reg_assertion_t;
int att_type;
char *label;
GList *key_ids;
+ GList *tc_display_png_characteristics;
} _matched_auth_data_t;
void _free_matched_auth_data(gpointer data);
json_builder_set_member_name(builder, _JSON_KEY_ASSERT_SCHEME);
json_builder_add_string_value(builder, ass_data->assertion_schm);
+ /*tcDisplayPNGCharacteristics*/
+ if (ass_data->tc_disp_char_list != NULL) {
+ json_builder_set_member_name(builder, "tcDisplayPNGCharacteristics");
+ json_builder_begin_array(builder);
+
+ GList *iter = g_list_first(ass_data->tc_disp_char_list);
+ while (iter != NULL) {
+
+ fido_display_png_characteristics_descriptor_s *png_data =
+ (fido_display_png_characteristics_descriptor_s*) (iter->data);
+
+ if (png_data != NULL) {
+
+ json_builder_begin_object(builder);
+
+ __add_int_to_json_object(builder, _JSON_KEY_WIDTH, png_data->width);
+ __add_int_to_json_object(builder, _JSON_KEY_HEIGHT, png_data->height);
+ __add_int_to_json_object(builder, _JSON_KEY_BIT_DEPTH, png_data->bit_depth);
+ __add_int_to_json_object(builder, _JSON_KEY_COLOR_TYPE, png_data->color_type);
+ __add_int_to_json_object(builder, _JSON_KEY_COMPRESSION, png_data->compression);
+ __add_int_to_json_object(builder, _JSON_KEY_FILTER, png_data->filter);
+ __add_int_to_json_object(builder, _JSON_KEY_INTERLACE, png_data->interlace);
+
+
+ if (png_data->plte != NULL) {
+ /*plte array start*/
+
+ json_builder_set_member_name(builder, _JSON_KEY_PLTE);
+ json_builder_begin_array(builder);
+
+ GList *plte_iter = g_list_first(png_data->plte);
+ while (plte_iter != NULL) {
+
+ fido_rgb_pallette_entry_s *plte_data = (fido_rgb_pallette_entry_s*)(plte_iter->data);
+ if (plte_data != NULL) {
+ json_builder_begin_object(builder);
+
+ __add_int_to_json_object(builder, _JSON_KEY_R, plte_data->r);
+ __add_int_to_json_object(builder, _JSON_KEY_G, plte_data->g);
+ __add_int_to_json_object(builder, _JSON_KEY_B, plte_data->b);
+
+ json_builder_end_object(builder);
+ }
+
+ plte_iter = plte_iter->next;
+ }
+
+ json_builder_end_array(builder);
+
+ /*plte array end*/
+ }
+
+ json_builder_end_object(builder);
+ }
+
+ iter = iter->next;
+ }
+
+ json_builder_end_array(builder);
+ }
+
json_builder_end_object(builder);
assertions_iter = assertions_iter->next;
_fido_asm_reg_in_t *asm_reg_in = (_fido_asm_reg_in_t *)(cb_data->asm_in);
_message_t *uaf_req = cb_data->uaf_req;
+ _reg_request_t *uaf_reg_req = (_reg_request_t*)(uaf_req->data);
_op_header_t *header = uaf_req->header;
char *uaf_response_json = NULL;
_auth_reg_assertion_t *ass_data = (_auth_reg_assertion_t*) calloc(1, sizeof(_auth_reg_assertion_t));
ass_data->assertion = __dup_string(asm_reg_out->assertion);
ass_data->assertion_schm = __dup_string(asm_reg_out->assertion_schm);
+ ass_data->tc_disp_char_list = uaf_reg_req->png_list;
_free_asm_out(asm_out);
_reg_request_t *uaf_reg_req = (_reg_request_t *)(cb_data->uaf_req->data);
+ uaf_reg_req->png_list = matched_auth->tc_display_png_characteristics;
+
_fido_asm_reg_in_t *reg_in = (_fido_asm_reg_in_t*) calloc(1, sizeof(_fido_asm_reg_in_t));
/*If no app-id mentioned in UAF request*/
return dest;
}
+static GList*
+__copy_png_list(GList *src_list)
+{
+ RET_IF_FAIL(src_list != NULL, NULL);
+
+ GList *dest = NULL;
+
+ /*fido_display_png_characteristics_descriptor_s list*/
+ GList *iter = g_list_first(src_list);
+
+ while (iter != NULL) {
+ fido_display_png_characteristics_descriptor_s *src_data =
+ (fido_display_png_characteristics_descriptor_s *)(iter->data);
+
+ if (src_data != NULL) {
+ fido_display_png_characteristics_descriptor_s *dest_data =
+ calloc(1, sizeof(fido_display_png_characteristics_descriptor_s));
+
+ dest_data->bit_depth = src_data->bit_depth;
+ dest_data->color_type = src_data->color_type;
+ dest_data->compression = src_data->compression;
+ dest_data->filter = src_data->filter;
+ dest_data->height = src_data->height;
+ dest_data->interlace = src_data->interlace;
+ dest_data->width = src_data->width;
+ /*TODO: dest_data->plte clone*/
+ if (src_data->plte != NULL) {
+ GList *p_iter = g_list_first(src_data->plte);
+ while (p_iter != NULL) {
+
+ fido_rgb_pallette_entry_s *plte_src_data = (fido_rgb_pallette_entry_s*)(p_iter->data);
+ if (plte_src_data != NULL) {
+ fido_rgb_pallette_entry_s *plte_dest_data = calloc(1, sizeof(fido_rgb_pallette_entry_s));
+ plte_dest_data->r = plte_src_data->r;
+ plte_dest_data->g = plte_src_data->g;
+ plte_dest_data->b = plte_src_data->b;
+
+ dest_data->plte = g_list_append(dest_data->plte, plte_dest_data);
+ }
+ p_iter = p_iter->next;
+ }
+ }
+
+ if (dest_data->plte != NULL)
+ dest_data->plte = g_list_first(dest_data->plte);
+
+ dest_data->plte =
+ dest = g_list_append(dest, dest_data);
+ }
+
+ iter = iter->next;
+ }
+
+ if (dest != NULL)
+ dest = g_list_first(dest);
+
+ return dest;
+}
+
/* Returns _matched_auth_data_t list*/
GList *
_policy_checker_get_matched_auth_list(_policy_t *policy, GList *auth_list)
_ERR("Authenticator does not have any ASM ID!!");
matched_auth_data->key_ids = __copy_string_list(match_info->key_id_list);
+ /*fido_display_png_characteristics_descriptor_s list*/
+ matched_auth_data->tc_display_png_characteristics =
+ __copy_png_list(authenticator->tc_display_png_characteristics);
allowed_list = g_list_append(allowed_list, matched_auth_data);
}