@@ -45,6 +45,8 @@ LOG_MODULE_REGISTER(updatehub);
45
45
#define COAP_MAX_RETRY 3
46
46
#define MAX_IP_SIZE 30
47
47
48
+ #define SHA256_HEX_DIGEST_SIZE ((TC_SHA256_DIGEST_SIZE * 2) + 1)
49
+
48
50
#if defined(CONFIG_UPDATEHUB_CE )
49
51
#define UPDATEHUB_SERVER CONFIG_UPDATEHUB_SERVER
50
52
#else
@@ -66,8 +68,8 @@ static struct updatehub_context {
66
68
} ctx ;
67
69
68
70
static struct update_info {
69
- char package_uid [TC_SHA256_BLOCK_SIZE + 1 ];
70
- char sha256sum_image [TC_SHA256_BLOCK_SIZE + 1 ];
71
+ char package_uid [SHA256_HEX_DIGEST_SIZE ];
72
+ char sha256sum_image [SHA256_HEX_DIGEST_SIZE ];
71
73
int image_size ;
72
74
} update_info ;
73
75
@@ -106,13 +108,13 @@ static int metadata_hash_get(char *metadata)
106
108
return -1 ;
107
109
}
108
110
109
- memset (update_info .package_uid , 0 , TC_SHA256_BLOCK_SIZE + 1 );
111
+ memset (update_info .package_uid , 0 , SHA256_HEX_DIGEST_SIZE );
110
112
for (int i = 0 ; i < TC_SHA256_DIGEST_SIZE ; i ++ ) {
111
113
snprintk (buffer , sizeof (buffer ), "%02x" ,
112
114
hash [i ]);
113
115
buffer_len = buffer_len + strlen (buffer );
114
116
strncat (& update_info .package_uid [i ], buffer ,
115
- MIN (TC_SHA256_BLOCK_SIZE , buffer_len ));
117
+ MIN (SHA256_HEX_DIGEST_SIZE - 1 , buffer_len ));
116
118
}
117
119
118
120
return 0 ;
@@ -325,20 +327,20 @@ static int send_request(enum coap_msgtype msgtype, enum coap_method method,
325
327
static bool install_update_cb_sha256 (void )
326
328
{
327
329
u8_t image_hash [TC_SHA256_DIGEST_SIZE ];
328
- char buffer [3 ], sha256_image_dowloaded [TC_SHA256_BLOCK_SIZE + 1 ];
330
+ char buffer [3 ], sha256_image_dowloaded [SHA256_HEX_DIGEST_SIZE ];
329
331
int i , buffer_len = 0 ;
330
332
331
333
if (tc_sha256_final (image_hash , & ctx .sha256sum ) < 1 ) {
332
334
LOG_ERR ("Could not finish sha256sum" );
333
335
return false;
334
336
}
335
337
336
- memset (& sha256_image_dowloaded , 0 , TC_SHA256_BLOCK_SIZE + 1 );
338
+ memset (& sha256_image_dowloaded , 0 , SHA256_HEX_DIGEST_SIZE );
337
339
for (i = 0 ; i < TC_SHA256_DIGEST_SIZE ; i ++ ) {
338
340
snprintk (buffer , sizeof (buffer ), "%02x" , image_hash [i ]);
339
341
buffer_len = buffer_len + strlen (buffer );
340
342
strncat (& sha256_image_dowloaded [i ], buffer ,
341
- MIN (TC_SHA256_BLOCK_SIZE , buffer_len ));
343
+ MIN (SHA256_HEX_DIGEST_SIZE - 1 , buffer_len ));
342
344
}
343
345
344
346
if (strncmp (sha256_image_dowloaded ,
@@ -625,6 +627,8 @@ enum updatehub_response updatehub_probe(void)
625
627
char * device_id = k_malloc (DEVICE_ID_MAX_SIZE );
626
628
char * firmware_version = k_malloc (BOOT_IMG_VER_STRLEN_MAX );
627
629
630
+ size_t sha256size ;
631
+
628
632
if (device_id == NULL || firmware_version == NULL ||
629
633
metadata == NULL || metadata_copy == NULL ) {
630
634
LOG_ERR ("Could not alloc probe memory" );
@@ -703,9 +707,18 @@ enum updatehub_response updatehub_probe(void)
703
707
goto cleanup ;
704
708
}
705
709
710
+ sha256size = strlen (
711
+ metadata_any_boards .objects [1 ].objects .sha256sum ) + 1 ;
712
+
713
+ if (sha256size != SHA256_HEX_DIGEST_SIZE ) {
714
+ LOG_ERR ("SHA256 size is invalid" );
715
+ ctx .code_status = UPDATEHUB_METADATA_ERROR ;
716
+ goto cleanup ;
717
+ }
718
+
706
719
memcpy (update_info .sha256sum_image ,
707
720
metadata_any_boards .objects [1 ].objects .sha256sum ,
708
- strlen ( metadata_any_boards . objects [ 1 ]. objects . sha256sum ) );
721
+ SHA256_HEX_DIGEST_SIZE );
709
722
update_info .image_size = metadata_any_boards .objects [1 ].objects .size ;
710
723
} else {
711
724
if (!is_compatible_hardware (& metadata_some_boards )) {
@@ -714,10 +727,19 @@ enum updatehub_response updatehub_probe(void)
714
727
UPDATEHUB_INCOMPATIBLE_HARDWARE ;
715
728
goto cleanup ;
716
729
}
730
+
731
+ sha256size = strlen (
732
+ metadata_any_boards .objects [1 ].objects .sha256sum ) + 1 ;
733
+
734
+ if (sha256size != SHA256_HEX_DIGEST_SIZE ) {
735
+ LOG_ERR ("SHA256 size is invalid" );
736
+ ctx .code_status = UPDATEHUB_METADATA_ERROR ;
737
+ goto cleanup ;
738
+ }
739
+
717
740
memcpy (update_info .sha256sum_image ,
718
741
metadata_some_boards .objects [1 ].objects .sha256sum ,
719
- strlen (metadata_some_boards .objects [1 ]
720
- .objects .sha256sum ));
742
+ SHA256_HEX_DIGEST_SIZE );
721
743
update_info .image_size =
722
744
metadata_some_boards .objects [1 ].objects .size ;
723
745
}
0 commit comments