123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * Copyright (C) 2017-2020 Alibaba Group Holding Limited
- */
- /******************************************************************************
- * @file drv/des.h
- * @brief Header File for DES Driver
- * @version V1.0
- * @date 24. Oct 2022
- * @model des
- ******************************************************************************/
- #ifndef _DRV_DES_H_
- #define _DRV_DES_H_
- #include <stdint.h>
- #include "common.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*----- Encrypt & Decrypt: Config key length -----*/
- /**
- \brief DES data transfer mode config
- */
- typedef enum {
- DES_SLAVE_MODE = 0U, ///< slave mode
- DES_DMA_MODE, ///< dma mode
- } csi_des_trans_mode_t;
- /**
- \brief DES key-len-bits type
- */
- typedef enum {
- DES_KEY_LEN_BITS_64 = 0, ///< 64 Data bits
- DES_KEY_LEN_BITS_128, ///< 128 Data bits
- DES_KEY_LEN_BITS_192, ///< 192 Data bits
- } csi_des_key_bits_t;
- typedef enum{
- DES_MODE_ECB = 0x00000000,
- DES_MODE_CBC = 0x20000020,
- TDES_MODE_ECB = 0x00000008,
- TDES_MODE_CBC = 0x20000028,
- } des_mode_t;
- #define DES_KEY_LEN_BYTES_32 (32)
- #define DES_KEY_LEN_BYTES_16 (16)
- #define DES_KEY_LEN_BYTES_24 (24)
- #define DES_KEY_LEN_BYTES_8 (8)
- #define DES_BLOCK_IV_SIZE (16)
- #define DES_BLOCK_CRYPTO_SIZE (8)
- #define TDES_BLOCK_CRYPTO_SIZE (16)
- #define DES_DIR_ENCRYPT (1)
- #define DES_DIR_DECRYPT (0)
- #define DES_KEY_128_BITS (0x8)
- #define DES_KEY_192_BITS (0x10)
- /**
- \brief DES State
- */
- typedef struct {
- uint32_t busy : 1; ///< Calculate busy flag
- uint32_t error : 1; ///< Calculate error flag
- } csi_des_state_t;
- /**
- \brief DES Context
- */
- typedef struct {
- uint32_t key_len_byte;
- uint8_t key[32]; ///< Data block being processed
- uint32_t sca;
- uint32_t is_kdf;
- uint32_t is_dma;
- } csi_des_context_t;
- /**
- \brief DES Ctrl Block
- */
- typedef struct {
- csi_des_state_t state;
- csi_des_context_t context;
- csi_dev_t dev;
- void *priv;
- } csi_des_t;
- /**
- \brief Initialize DES interface. Initializes the resources needed for the DES interface
- \param[in] des Handle to operate
- \param[in] idx Device id
- \return Error code \ref csi_error_t
- */
- csi_error_t csi_des_init(csi_des_t *des, uint32_t idx);
- /**
- \brief De-initialize DES interface. Stops operation and releases the software resources used by the interface
- \param[in] des Dandle to operate
- \return None
- */
- void csi_des_uninit(csi_des_t *des);
- /**
- \brief Set encrypt key
- \param[in] des Handle to operate
- \param[in] key Pointer to the key buf
- \param[in] key_len Pointer to \ref csi_des_key_bits_t
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_set_encrypt_key(csi_des_t *des, void *key, csi_des_key_bits_t key_len);
- /**
- \brief Set decrypt key
- \param[in] des Handle to operate
- \param[in] key Pointer to the key buf
- \param[in] key_len Pointer to \ref csi_des_key_bits_t
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_set_decrypt_key(csi_des_t *des, void *key, csi_des_key_bits_t key_len);
- /**
- \brief DES ecb encrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_ecb_encrypt(csi_des_t *des, void *in, void *out, uint32_t size);
- /**
- \brief DES ecb decrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_ecb_decrypt(csi_des_t *des, void *in, void *out, uint32_t size);
- /**
- \brief DES cbc encrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \param[in] iv Init vector
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_cbc_encrypt(csi_des_t *des, void *in, void *out, uint32_t size, void *iv) ;
- /**
- \brief DES cbc decrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \param[in] iv Init vector
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_des_cbc_decrypt(csi_des_t *des, void *in, void *out, uint32_t size, void *iv);
- /**
- \brief TDES ecb encrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_tdes_ecb_encrypt(csi_des_t *des, void *in, void *out, uint32_t size);
- /**
- \brief TDES ecb decrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_tdes_ecb_decrypt(csi_des_t *des, void *in, void *out, uint32_t size);
- /**
- \brief TDES cbc encrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \param[in] iv Init vector
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_tdes_cbc_encrypt(csi_des_t *des, void *in, void *out, uint32_t size, void *iv) ;
- /**
- \brief TDES cbc decrypt
- \param[in] des Handle to operate
- \param[in] in Pointer to the source data
- \param[out] out Pointer to the result data
- \param[in] size The source data size
- \param[in] iv Init vector
- \return Error code \ref Csi_error_t
- */
- csi_error_t csi_tdes_cbc_decrypt(csi_des_t *des, void *in, void *out, uint32_t size, void *iv);
- /**
- \brief Config DES mode dma or slave
- \param[in] mode \ref csi_des_trans_mode_t
- \return None
- */
- void csi_des_trans_config(csi_des_t *des, csi_des_trans_mode_t mode);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _DRV_AES_H_ */
|