@@ -75,6 +75,24 @@ static struct update_info {
75
75
76
76
static struct k_delayed_work updatehub_work_handle ;
77
77
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
+
78
96
static void wait_fds (void )
79
97
{
80
98
if (poll (ctx .fds , ctx .nfds , NETWORK_TIMEOUT ) < 0 ) {
@@ -93,8 +111,6 @@ static int metadata_hash_get(char *metadata)
93
111
{
94
112
struct tc_sha256_state_struct sha256sum ;
95
113
unsigned char hash [TC_SHA256_DIGEST_SIZE ];
96
- char buffer [3 ];
97
- int buffer_len = 0 ;
98
114
99
115
if (tc_sha256_init (& sha256sum ) == 0 ) {
100
116
return -1 ;
@@ -108,13 +124,9 @@ static int metadata_hash_get(char *metadata)
108
124
return -1 ;
109
125
}
110
126
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 ;
118
130
}
119
131
120
132
return 0 ;
@@ -326,26 +338,22 @@ static int send_request(enum coap_msgtype msgtype, enum coap_method method,
326
338
327
339
static bool install_update_cb_sha256 (void )
328
340
{
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 ];
332
343
333
- if (tc_sha256_final (image_hash , & ctx .sha256sum ) < 1 ) {
344
+ if (tc_sha256_final (hash , & ctx .sha256sum ) < 1 ) {
334
345
LOG_ERR ("Could not finish sha256sum" );
335
346
return false;
336
347
}
337
348
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;
344
353
}
345
354
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 ) {
349
357
LOG_ERR ("SHA256SUM of image are not the same" );
350
358
ctx .code_status = UPDATEHUB_DOWNLOAD_ERROR ;
351
359
return false;
@@ -499,15 +507,15 @@ static int report(enum updatehub_state state)
499
507
struct report report ;
500
508
int ret = -1 ;
501
509
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 );
503
511
char * firmware_version = k_malloc (BOOT_IMG_VER_STRLEN_MAX );
504
512
505
513
if (device_id == NULL || firmware_version == NULL ) {
506
514
LOG_ERR ("Could not alloc device_id or firmware_version memory" );
507
515
goto error ;
508
516
}
509
517
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 )) {
511
519
goto error ;
512
520
}
513
521
@@ -624,7 +632,7 @@ enum updatehub_response updatehub_probe(void)
624
632
625
633
char * metadata = k_malloc (MAX_PAYLOAD_SIZE );
626
634
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 );
628
636
char * firmware_version = k_malloc (BOOT_IMG_VER_STRLEN_MAX );
629
637
630
638
size_t sha256size ;
@@ -647,7 +655,7 @@ enum updatehub_response updatehub_probe(void)
647
655
goto error ;
648
656
}
649
657
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 )) {
651
659
ctx .code_status = UPDATEHUB_METADATA_ERROR ;
652
660
goto error ;
653
661
}
0 commit comments