diff --git a/BL808Image.bt b/BL808Image.bt index 044e862a73544fca47b15da597fcaa7757935eb5..f82e45e9f7635f67bbb836b0e7451152044f5c53 100644 --- a/BL808Image.bt +++ b/BL808Image.bt @@ -275,6 +275,34 @@ if(BootHeader.basicCfg.img_len_cnt < FileSize() && BootHeader.basicCfg.img_len_cnt + BootHeader.basicCfg.group_image_offset <= FileSize()) { FSeek(BootHeader.basicCfg.group_image_offset); ubyte image[BootHeader.basicCfg.img_len_cnt] ; + local char s[64 + 1]; + local int ret = ChecksumAlgStr(CHECKSUM_SHA256, s, startof(image),sizeof(image)); + if(ret) { + local char ChecksumAlgStrResult[64 + 1]; + for (i = 0; i < 8; i++) { + ChecksumAlgStrResult[i * 8 + 1] = (char)(BootHeader.basicCfg.hash[i] & 0xF); + ChecksumAlgStrResult[i * 8 + 0] = (char)((BootHeader.basicCfg.hash[i] >> 4) & 0xF); + ChecksumAlgStrResult[i * 8 + 3] = (char)((BootHeader.basicCfg.hash[i] >> 8) & 0xF); + ChecksumAlgStrResult[i * 8 + 2] = (char)((BootHeader.basicCfg.hash[i] >> 12) & 0xF); + ChecksumAlgStrResult[i * 8 + 5] = (char)((BootHeader.basicCfg.hash[i] >> 16) & 0xF); + ChecksumAlgStrResult[i * 8 + 4] = (char)((BootHeader.basicCfg.hash[i] >> 20) & 0xF); + ChecksumAlgStrResult[i * 8 + 7] = (char)((BootHeader.basicCfg.hash[i] >> 24) & 0xF); + ChecksumAlgStrResult[i * 8 + 6] = (char)((BootHeader.basicCfg.hash[i] >> 28) & 0xF); + } + for (i = 0; i < 64; i++) { + if (ChecksumAlgStrResult[i] >= 10) { + ChecksumAlgStrResult[i] = ChecksumAlgStrResult[i] + 'A' - 10; + } else { + ChecksumAlgStrResult[i] += '0'; + } + } + ChecksumAlgStrResult[64] = '\0'; + if(Strcmp(s, ChecksumAlgStrResult)) { + Warning("invalid sha256 for the image!"); + } + } else { + Warning("hash check for the image failure"); + } } else { Warning("Segment data appears to either overlap with header, exist after the end of the file or overlap with the end of the file!"); }