MXC-A36_2024.04.18/fr3092_mcu/components/drivers/peripheral/Inc/driver_sha.h

116 lines
3.9 KiB
C

/*
******************************************************************************
* @file driver_sha.h
* @author FreqChip Firmware Team
* @version V1.0.0
* @date 2022
* @brief Header file of sha module.
******************************************************************************
* @attention
*
* Copyright (c) 2021 FreqChip.
* All rights reserved.
******************************************************************************
*/
#ifndef __DRIVER_SHA_H__
#define __DRIVER_SHA_H__
#include "fr30xx.h"
/** @addtogroup SHA_Registers_Section
* @{
*/
/* ################################ Register Section Start ################################ */
/*SHA CTRL REG 0x00*/
typedef volatile union
{
volatile uint32_t Word;
struct
{
uint32_t MODE : 3;//001->SHA-1;010->SHA-256;011->SHA-224;100->SHA-512;101->SHA-384;110->SHA-512/256;111->SHA-512/224
uint32_t INIT_EN : 1;//set this bit to encode thhe messgae with the initial value of A-H(A-E when mask= 010)
uint32_t ISR_EN : 1;//interrupt enable
uint32_t ENDIAN_MODE : 1;//message endian mode 0->big endian 1->little endian
uint32_t CALCULATE : 1;//cpu write this bit to enable calculate.read this bit to verify whether the encoding is complete
uint32_t RSV : 25;
} Bits;
} REG_SHA_CTRL_t;
/*SHA INT STATE REG 0x04*/
typedef volatile union
{
volatile uint32_t Word;
struct
{
uint32_t INT_DONE : 1;//this bit is set by SHA finishing encoding the message and writing the digest to the base address
uint32_t INT_ERROR : 1;//this bit is set by SHA select error mode
uint32_t RSV : 30;
} Bits;
} REG_SHA_INT_STATE_t;
/* ----------------------------------------------*/
/* SHA Registers */
/* ----------------------------------------------*/
typedef struct
{
volatile REG_SHA_CTRL_t SHA_CTRL; /* Offset 0x00 */
volatile REG_SHA_INT_STATE_t SHA_INT_STATE; /* Offset 0x04 */
volatile uint32_t HASH_VAL_L[8]; /* Offset 0x08 - 0x24*/
volatile uint32_t HASH_VAL_H[8]; /* Offset 0x28 - 0x44*/
volatile uint32_t DATA_1[16]; /* Offset 0x48 -0x84 */
volatile uint32_t DATA_2[16]; /* Offset 0x88-0xb4*/
}struct_SEC_SHA_t;
#define SEC_SHA_OFFSET 0x1000
#define SEC_SHA ((struct_SEC_SHA_t *)(SEC_BASE + SEC_SHA_OFFSET))
/* ################################ Register Section END ################################ */
/**
* @}
*/
/** @addtogroup ADC_Initialization_Config_Section
* @{
*/
/* ################################ Initialization, Config Section Start ################################ */
typedef enum{
SHA_1 = 1,
SHA_256 = 2,
SHA_224 = 3,
SHA_512 = 4,
SHA_384 = 5,
SHA_512_OR_256 = 6,
SHA_512_OR_224 = 7
}enum_sha_mode_t;
typedef enum{
SHA_BIG_ENDIAN = 0,
SHA_LITTLE_ENDIAN = 1
}enum_sha_endian_t;
#define SHA_256_BLOCK_SIZE (64)
#define SHA_512_BLOCK_SIZE (128)
/* ################################ Initialization, Config Section END ################################ */
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
#define __SHA_GET_INT_DONE_FALG() (SEC_SHA->SHA_INT_STATE.Bits.INT_DONE)
#define __SHA_INT_ERROR() (SEC_SHA->SHA_INT_STATE.Bits.INT_ERROR == 1)
/* Exported functions --------------------------------------------------------*/
/* sha init */
void sha_init(uint8_t Mode);
/* sha updata */
void sha_update(uint8_t *fp8_Data, uint32_t fu32_Size);
/* sha_final */
void sha_final(uint8_t *DataOut);
#endif