nt9856x/code/hdal/drivers/k_driver/include/rtos_na51089/crypto.h
2023-03-28 15:07:53 +08:00

208 lines
7.3 KiB
C
Executable File

/*
Crypto driver header file
Crypto driver header file.
@file crypto.h
@ingroup mIDrvMisc_Crypto
@note Nothing
Copyright Novatek Microelectronics Corp. 2020. All rights reserved.
*/
#ifndef _CRYPTO_H
#define _CRYPTO_H
#include <kwrap/nvt_type.h>
/**
@addtogroup mIDrvMisc_Crypto
*/
//@{
/**
Crypto engine crypto mode
*/
typedef enum
{
CRYPTO_MODE_DES = 0x00, ///< Select Crypto mode DES
CRYPTO_MODE_3DES, ///< Select Crypto mode 3DES
CRYPTO_MODE_AES128, ///< Select Crypto mode AES-128
CRYPTO_MODE_AES256, ///< Select Crypto mode AES-256
CRYPTO_MODE_NUM,
ENUM_DUMMY4WORD(CRYPTO_MODE)
} CRYPTO_MODE;
/**
Crypto engine crypto Operating mode
*/
typedef enum
{
CRYPTO_OPMODE_EBC = 0x00, ///< Select Crypto opmode EBC
CRYPTO_OPMODE_CBC, ///< Select Crypto opmode CBC
CRYPTO_OPMODE_CFB, ///< Select Crypto opmode CFB
CRYPTO_OPMODE_OFB, ///< Select Crypto opmode OFB
CRYPTO_OPMODE_CTR, ///< Select Crypto opmode CTR
CRYPTO_OPMODE_GCM, ///< Select Crypto opmode GCM
CRYPTO_OPMODE_NUM,
ENUM_DUMMY4WORD(CRYPTO_OPMODE)
} CRYPTO_OPMODE;
/**
Crypto engine encrypt or decrypt
*/
typedef enum
{
CRYPTO_TYPE_ENCRYPT = 0x00, ///< Select Crypto engine encrypt
CRYPTO_TYPE_DECRYPT, ///< Select Crypto engine decrypt
CRYPTO_TYPE_NUM,
ENUM_DUMMY4WORD(CRYPTO_TYPE)
} CRYPTO_TYPE;
/**
Crypto engine key source
*/
typedef enum
{
CRYPTO_KEY_NORMAL = 0x00, ///< Select Crypto engine from Descriptor 0 Key Field.
CRYPTO_KEY_KM, ///< Select Crypto engine from Key Managament.
CRYPTO_KEY_NUM,
ENUM_DUMMY4WORD(CRYPTO_KEY)
} CRYPTO_KEY;
/**
Crypto engine clock rate
*/
typedef enum
{
CRYPTO_CLOCK_240MHz = 0x00, ///< Select Crypto clock rate 240 MHz
CRYPTO_CLOCK_320MHz, ///< Select Crypto clock rate 320 MHz
CRYPTO_CLOCK_Reserved, ///< Select Crypto clock rate Reserved
CRYPTO_CLOCK_PLL9, ///< Select Crypto clock rate PLL9(for IDE/ETH)
CRYPTO_CLOCK_RATE_NUM,
ENUM_DUMMY4WORD(CRYPTO_CLOCK_RATE)
} CRYPTO_CLOCK_RATE;
/**
Crypto configuration identifier
@note For crypto_setConfig()
*/
typedef enum
{
CRYPTO_CONFIG_ID_CLOCK_RATE, ///< Select Crypto engine internal clock rate usage
///< Context can be any of:
///< - @b CRYPTO_CLOCK_240MHz: Internal clock rate 240MHz
///< - @b CRYPTO_CLOCK_320MHz: Internal clock rate 320MHz
///< - @b CRYPTO_CLOCK_PLL9 : Internal clock rate 280MHz
CRYPTO_CONFIG_ID_MODE, ///< Select Crypto engine Algorithm
///< Context can be any of:
///< - @b CRYPTO_MODE_DES: Select Crypto mode DES
///< - @b CRYPTO_MODE_3DES: Select Crypto mode 3DES
///< - @b CRYPTO_MODE_AES128: Select Crypto mode AES128
///< - @b CRYPTO_MODE_AES256: Select Crypto mode AES256
CRYPTO_CONFIG_ID_OPMODE, ///< Select Crypto engine Operating mode
///< Context can be any of:
///< - @b CRYPTO_OPMODE_EBC: Select Crypto opmode EBC
///< - @b CRYPTO_OPMODE_CBC: Select Crypto opmode CBC
///< - @b CRYPTO_OPMODE_CFB: Select Crypto opmode CFB
///< - @b CRYPTO_OPMODE_OFB: Select Crypto opmode OFB
///< - @b CRYPTO_OPMODE_CTR: Select Crypto opmode CTR
///< - @b CRYPTO_OPMODE_GCM: Select Crypto opmode GCM
///< - @b CRYPTO_OPMODE_HwCopy: Select Crypto bypass mode
CRYPTO_CONFIG_ID_TYPE, ///< Select Crypto engine encrypt or decrypt
///< Context can be any of:
///< - @b CRYPTO_TYPE_ENCRYPT: Select Crypto engine encrypt
///< - @b CRYPTO_TYPE_DECRYPT: Select Crypto engine decrypt
CRYPTO_CONFIG_ID_KEY, ///< Select Crypto engine key source
///< Context can be any of:
///< - @b CRYPTO_KEY_NORMAL: Select Crypto engine from Descriptor 0 Key Field.
///< - @b CRYPTO_KEY_KM: Select Crypto engine from Key Managament.
ENUM_DUMMY4WORD(CRYPTO_CONFIG_ID)
} CRYPTO_CONFIG_ID;
typedef struct
{
CRYPTO_MODE uiMode;
CRYPTO_OPMODE uiOPMode;
CRYPTO_TYPE uiType;
UINT8 ucInput[16];
UINT8 ucKey[32];
UINT8 ucOutput[16];
}CRYPT_SET, *pCRYPT_SET;
typedef struct CRYPT_SEG_DES
{
UINT32 src_addr;
UINT32 dst_addr;
UINT32 len;
BOOL last_block;
BOOL block_inten;
BOOL non_flush;
struct CRYPT_SEG_DES *pNext;
}CRYPT_SEG_DES, *pCRYPT_SEG_DES;
typedef struct
{
CRYPTO_TYPE type;
CRYPTO_MODE mode;
CRYPTO_OPMODE opmode;
BOOL key_src;
BOOL get_s0;
UINT8 key[32];
UINT8 iv[16];
UINT8 cnt[16];
UINT8 cv[16];
UINT8 s0[16];
UINT8 ghash[16];
UINT8 tag[16];
}CRYPT_DMA_SET, *pCRYPT_DMA_SET;
/*
Crypto Descriptor number encoding.
*/
//@{
#define SCE_DMA_CH0 (0)
#define SCE_DMA_CH1 (1)
#define SCE_DMA_CH2 (2)
#define SCE_DMA_CH3 (3)
#define SCE_DMA_COUNT (4)
//@}
typedef struct _CRYPT_OP {
CRYPTO_OPMODE op_mode; ///< Operation Mode
CRYPTO_TYPE en_de_crypt; ///< Encrypt or decrypt (CRYPTO_ENCRYPT or CRYPTO_DECRYPT)
UINT32 src_addr; ///< Source address
UINT32 dst_addr; ///< Destination address
UINT32 length; ///< length
} CRYPT_OP;
extern ER crypto_open(void);
extern ER crypto_close(void);
extern ER crypto_setConfig(CRYPTO_CONFIG_ID configID, UINT32 configContext);
extern void crypto_setKey(UINT8 * Key);
extern void crypto_setInput(UINT8 * Input);
extern void crypto_getOutput(UINT8 * Output);
extern void crypto_pio_enable(void);
extern void crypto_dma_setDesTab(UINT32 id, pCRYPT_DMA_SET ptrDmaCrypt, pCRYPT_SEG_DES ptrSeg, UINT32 uiDesNum);
extern void crypto_hwmemcpy(UINT32 id, pCRYPT_SEG_DES ptrSeg, UINT32 uiDesNum);
#if defined(_NVT_FPGA_) || defined(_NVT_EMULATION_)
extern void crypto_hwmemcpy_without_flush(UINT32 id, pCRYPT_SEG_DES ptrSeg, UINT32 uiDesNum);
extern void crypto_dma_setDesTab_random_terminate(UINT32 id, pCRYPT_DMA_SET ptrDmaCrypt, pCRYPT_SEG_DES ptrSeg, UINT32 uiDesNum);
#endif
//@}
#endif /* _CRYPTO_H */