@@ -586,6 +586,7 @@ static void debug_log_hash(const uint8_t *image_hash, const char *label)
586
586
#ifdef CONFIG_TARGET_PLATFORM_ESP8266
587
587
588
588
#include <string.h>
589
+ #include <stdlib.h>
589
590
#include <sys/param.h>
590
591
591
592
#include <esp_image_format.h>
@@ -600,6 +601,8 @@ static const char *TAG = "esp_image";
600
601
601
602
#define HASH_LEN 32 /* SHA-256 digest length */
602
603
604
+ #define MAX_CHECKSUM_READ_SIZE SPI_FLASH_SEC_SIZE
605
+
603
606
#define SIXTEEN_MB 0x1000000
604
607
#define ESP_ROM_CHECKSUM_INITIAL 0xEF
605
608
@@ -923,6 +926,7 @@ static esp_err_t process_segment(int index, uint32_t flash_addr, esp_image_segme
923
926
924
927
static esp_err_t process_segment_data (intptr_t load_addr , uint32_t data_addr , uint32_t data_len , bool do_load , bootloader_sha256_handle_t sha_handle , uint32_t * checksum )
925
928
{
929
+ #ifdef BOOTLOADER_BUILD
926
930
const uint32_t * data = (const uint32_t * )bootloader_mmap (data_addr , data_len );
927
931
if (!data ) {
928
932
ESP_LOGE (TAG , "bootloader_mmap(0x%x, 0x%x) failed" ,
@@ -965,6 +969,55 @@ static esp_err_t process_segment_data(intptr_t load_addr, uint32_t data_addr, ui
965
969
bootloader_munmap (data );
966
970
967
971
return ESP_OK ;
972
+ #endif
973
+
974
+ #ifndef BOOTLOADER_BUILD
975
+ uint32_t had_read_size = 0 , to_read_size = 0 ;
976
+ uint32_t * data = 0 ;
977
+
978
+ data = (uint32_t * )malloc (MAX_CHECKSUM_READ_SIZE );
979
+ if (data == NULL ) {
980
+ return ESP_FAIL ;
981
+ }
982
+
983
+ const uint32_t * src = data ;
984
+ for (; had_read_size != data_len ; ) {
985
+ to_read_size = ((data_len - had_read_size ) < MAX_CHECKSUM_READ_SIZE ) ? (data_len - had_read_size ) : MAX_CHECKSUM_READ_SIZE ;
986
+ int ret = ESP_OK ;
987
+ ret = spi_flash_read (data_addr + had_read_size , data , to_read_size );
988
+ if (ret ) {
989
+ ESP_LOGE (TAG , "SPI flash read result %d\n" , ret );
990
+ free (data );
991
+ return ESP_FAIL ;
992
+ }
993
+
994
+ had_read_size += to_read_size ;
995
+
996
+ for (int i = 0 ; i < to_read_size ; i += 4 ) {
997
+ int w_i = i /4 ; // Word index
998
+ uint32_t w = src [w_i ];
999
+ * checksum ^= w ;
1000
+ #ifdef BOOTLOADER_BUILD
1001
+ if (do_load ) {
1002
+ // dest[w_i] = w ^ ((w_i & 1) ? ram_obfs_value[0] : ram_obfs_value[1]);
1003
+ }
1004
+ #endif
1005
+ // SHA_CHUNK determined experimentally as the optimum size
1006
+ // to call bootloader_sha256_data() with. This is a bit
1007
+ // counter-intuitive, but it's ~3ms better than using the
1008
+ // SHA256 block size.
1009
+ const size_t SHA_CHUNK = 1024 ;
1010
+ if (sha_handle != NULL && i % SHA_CHUNK == 0 ) {
1011
+ // bootloader_sha256_data(sha_handle, &src[w_i],
1012
+ // MIN(SHA_CHUNK, data_len - i));
1013
+ }
1014
+ }
1015
+
1016
+
1017
+ } // end for
1018
+ free (data );
1019
+ return ESP_OK ;
1020
+ #endif
968
1021
}
969
1022
970
1023
static esp_err_t verify_segment_header (int index , const esp_image_segment_header_t * segment , uint32_t segment_data_offs , bool silent )
0 commit comments