#ifndef SHA256_HASH_H
#define SHA256_HASH_H

#include "stdint.h"
#include <stdint.h>

#include "sha256.h"

extern uint8_t swshaResult[32];     // SHA-256结果缓冲区(32字节=8个uint32_t)
extern mbedtls_sha256_context Mbedtls_Context;

#ifdef __cplusplus
extern "C" {
#endif

#define HASH_FLASH_STARTADDRESS      (0x80000)                    //填入需要校验的Pflash区域起始地址,用户可根据需要调整，设置起始地址时注意避免跨 4 字节边界，建议使用sector的起始地址
#define MCU_SECTOR_SIZE              (2048)                        //单位为Byte,硬件相关,根据实际使用的芯片填入
#define ONECE_READ_FLASH_SIZE        (4 * MCU_SECTOR_SIZE)       //单位为Byte，用户可根据实际需要调整
#define READ_SECTOR_NUM              (256 * MCU_SECTOR_SIZE)      //单位为Byte，用户可根据实际需要调整

    
#define USED_THIRD_PARTY_TOOL_GENERATED_KEYS        1              // (1-使用第三方工具生成密钥; 0-使用本工程中的ECDSA_key_generate函数生成密钥)

#define READ_FLASH_TEST_APPLICATION                 1              // (1-从Flash中读取数据，计算hash值后验签，接近实际应用场景)

#define TEST_HEX_STRING                             0              // (1-对十六进制字符串"0001020304"进行验签)
#define TEST_LITERAL_STRING                         0              // (1-对ASCII字符串"Hello, World!"进行验签)
#define hash_calculate_MODE                         1              // (1-使用硬件计算SHA-256; 0-使用软件计算SHA-256)


void StepReadFlash_And_SoftWare_CalculateSHA(void);
void Message_And_SoftWare_CalculateSHA(uint8_t* message, size_t message_len, uint8_t* shaResult);

#ifdef __cplusplus
}
#endif

#endif /* SHA256_HASH_H */