Added DisplayPNGCharacteristicsDescriptor for Registration Assertion 39/57439/1 submit/tizen_mobile/20160120.093253
authorManasij Sur Roy <manasij.r@samsung.com>
Wed, 20 Jan 2016 06:57:39 +0000 (12:27 +0530)
committerManasij Sur Roy <manasij.r@samsung.com>
Wed, 20 Jan 2016 06:57:39 +0000 (12:27 +0530)
Change-Id: I554d59fe39a62cb7f12c68f1ec6be08d60ba54db
Signed-off-by: Manasij Sur Roy <manasij.r@samsung.com>
common/fido_internal_types.h
common/fido_json_handler.c
server/fido_server.c
server/fido_uaf_policy_checker.c

index 90dac32..e6f290e 100644 (file)
@@ -167,9 +167,10 @@ typedef struct _message {
 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);
@@ -324,9 +325,9 @@ typedef struct _ui_auth_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;
 
@@ -369,6 +370,7 @@ typedef struct _matched_auth_data {
     int att_type;
     char *label;
     GList *key_ids;
+       GList *tc_display_png_characteristics;
 } _matched_auth_data_t;
 
 void _free_matched_auth_data(gpointer data);
index dfedb05..2b41500 100644 (file)
@@ -1396,6 +1396,67 @@ _uaf_composer_compose_uaf_process_response_reg(_op_header_t *header, char *final
         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;
index 297e3e6..ddc973d 100755 (executable)
@@ -378,6 +378,7 @@ _asm_response_reg_process(int error_code, const char *asm_response_json, void *u
        _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;
@@ -386,6 +387,7 @@ _asm_response_reg_process(int error_code, const char *asm_response_json, void *u
        _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);
@@ -417,6 +419,8 @@ __handle_reg(_process_cb_data_t *cb_data, _matched_auth_data_t *matched_auth)
 
        _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*/
index b077abe..2d8b4c7 100644 (file)
@@ -358,6 +358,65 @@ __copy_string_list(GList *src)
     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)
@@ -435,6 +494,9 @@ _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);
                             }