@@ -75,6 +75,24 @@ static struct update_info {
7575
7676static struct k_delayed_work updatehub_work_handle ;
7777
78+ static int bin2hex_str (u8_t * bin , size_t bin_len , char * str , size_t str_buf_len )
79+ {
80+ if (bin == NULL || str == NULL ) {
81+ return -1 ;
82+ }
83+
84+ /* ensures at least an empty string */
85+ if (str_buf_len < 1 ) {
86+ return -2 ;
87+ }
88+
89+ memset (str , 0 , str_buf_len );
90+ /* str_buf_len - 1 ensure space for \0 */
91+ bin2hex (bin , bin_len , str , str_buf_len - 1 );
92+
93+ return 0 ;
94+ }
95+
7896static void wait_fds (void )
7997{
8098 if (poll (ctx .fds , ctx .nfds , NETWORK_TIMEOUT ) < 0 ) {
@@ -93,8 +111,6 @@ static int metadata_hash_get(char *metadata)
93111{
94112 struct tc_sha256_state_struct sha256sum ;
95113 unsigned char hash [TC_SHA256_DIGEST_SIZE ];
96- char buffer [3 ];
97- int buffer_len = 0 ;
98114
99115 if (tc_sha256_init (& sha256sum ) == 0 ) {
100116 return -1 ;
@@ -108,13 +124,9 @@ static int metadata_hash_get(char *metadata)
108124 return -1 ;
109125 }
110126
111- memset (update_info .package_uid , 0 , SHA256_HEX_DIGEST_SIZE );
112- for (int i = 0 ; i < TC_SHA256_DIGEST_SIZE ; i ++ ) {
113- snprintk (buffer , sizeof (buffer ), "%02x" ,
114- hash [i ]);
115- buffer_len = buffer_len + strlen (buffer );
116- strncat (& update_info .package_uid [i ], buffer ,
117- MIN (SHA256_HEX_DIGEST_SIZE - 1 , buffer_len ));
127+ if (bin2hex_str (hash , TC_SHA256_DIGEST_SIZE ,
128+ update_info .package_uid , SHA256_HEX_DIGEST_SIZE )) {
129+ return -1 ;
118130 }
119131
120132 return 0 ;
@@ -326,26 +338,22 @@ static int send_request(enum coap_msgtype msgtype, enum coap_method method,
326338
327339static bool install_update_cb_sha256 (void )
328340{
329- u8_t image_hash [TC_SHA256_DIGEST_SIZE ];
330- char buffer [3 ], sha256_image_dowloaded [SHA256_HEX_DIGEST_SIZE ];
331- int i , buffer_len = 0 ;
341+ u8_t hash [TC_SHA256_DIGEST_SIZE ];
342+ char sha256 [SHA256_HEX_DIGEST_SIZE ];
332343
333- if (tc_sha256_final (image_hash , & ctx .sha256sum ) < 1 ) {
344+ if (tc_sha256_final (hash , & ctx .sha256sum ) < 1 ) {
334345 LOG_ERR ("Could not finish sha256sum" );
335346 return false;
336347 }
337348
338- memset (& sha256_image_dowloaded , 0 , SHA256_HEX_DIGEST_SIZE );
339- for (i = 0 ; i < TC_SHA256_DIGEST_SIZE ; i ++ ) {
340- snprintk (buffer , sizeof (buffer ), "%02x" , image_hash [i ]);
341- buffer_len = buffer_len + strlen (buffer );
342- strncat (& sha256_image_dowloaded [i ], buffer ,
343- MIN (SHA256_HEX_DIGEST_SIZE - 1 , buffer_len ));
349+ if (bin2hex_str (hash , TC_SHA256_DIGEST_SIZE ,
350+ sha256 , SHA256_HEX_DIGEST_SIZE )) {
351+ LOG_ERR ("Could not create sha256sum hex representation" );
352+ return false;
344353 }
345354
346- if (strncmp (sha256_image_dowloaded ,
347- update_info .sha256sum_image ,
348- strlen (update_info .sha256sum_image )) != 0 ) {
355+ if (strncmp (sha256 , update_info .sha256sum_image ,
356+ SHA256_HEX_DIGEST_SIZE ) != 0 ) {
349357 LOG_ERR ("SHA256SUM of image are not the same" );
350358 ctx .code_status = UPDATEHUB_DOWNLOAD_ERROR ;
351359 return false;
@@ -499,15 +507,15 @@ static int report(enum updatehub_state state)
499507 struct report report ;
500508 int ret = -1 ;
501509 const char * exec = state_name (state );
502- char * device_id = k_malloc (DEVICE_ID_MAX_SIZE );
510+ char * device_id = k_malloc (DEVICE_ID_HEX_MAX_SIZE );
503511 char * firmware_version = k_malloc (BOOT_IMG_VER_STRLEN_MAX );
504512
505513 if (device_id == NULL || firmware_version == NULL ) {
506514 LOG_ERR ("Could not alloc device_id or firmware_version memory" );
507515 goto error ;
508516 }
509517
510- if (!updatehub_get_device_identity (device_id , DEVICE_ID_MAX_SIZE )) {
518+ if (!updatehub_get_device_identity (device_id , DEVICE_ID_HEX_MAX_SIZE )) {
511519 goto error ;
512520 }
513521
@@ -624,7 +632,7 @@ enum updatehub_response updatehub_probe(void)
624632
625633 char * metadata = k_malloc (MAX_PAYLOAD_SIZE );
626634 char * metadata_copy = k_malloc (MAX_PAYLOAD_SIZE );
627- char * device_id = k_malloc (DEVICE_ID_MAX_SIZE );
635+ char * device_id = k_malloc (DEVICE_ID_HEX_MAX_SIZE );
628636 char * firmware_version = k_malloc (BOOT_IMG_VER_STRLEN_MAX );
629637
630638 size_t sha256size ;
@@ -647,7 +655,7 @@ enum updatehub_response updatehub_probe(void)
647655 goto error ;
648656 }
649657
650- if (!updatehub_get_device_identity (device_id , DEVICE_ID_MAX_SIZE )) {
658+ if (!updatehub_get_device_identity (device_id , DEVICE_ID_HEX_MAX_SIZE )) {
651659 ctx .code_status = UPDATEHUB_METADATA_ERROR ;
652660 goto error ;
653661 }
0 commit comments