123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- /*
- * Copyright (C) 2017-2020 Alibaba Group Holding Limited
- */
- /******************************************************************************
- * @file drv/sm3.h
- * @brief Header File for SM3 Driver
- * @version V2.0
- * @date 9. DEC 2020
- * @model SM3
- ******************************************************************************/
- #ifndef _DRV_SM3_H_
- #define _DRV_SM3_H_
- #include <stdint.h>
- #include "common.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define SM3_DATAIN_BLOCK_SIZE (64)
- #define SM3_DIGEST_OUT_SIZE (32)
- typedef struct {
- uint32_t total[2]; ///< Number of bytes processed
- uint32_t state[16]; ///< Intermediate digest state
- uint8_t buffer[SM3_DATAIN_BLOCK_SIZE]; ///< Data block beingprocessed
- uint8_t result[SM3_DIGEST_OUT_SIZE]; ///< Data block has processed
- } csi_sm3_context_t;
- /****** SM3 State ******/
- typedef struct {
- uint32_t busy : 1; ///< Calculate busy flag
- uint32_t error : 1; ///< Calculate error flag
- } csi_sm3_state_t;
- /****** SM3 Event ******/
- typedef enum {
- SM3_EVENT_COMPLETE = 0U, ///< Calculate completed
- SM3_EVENT_UPDATE,
- SM3_EVENT_START,
- SM3_EVENT_ERROR ///< Calculate error
- } csi_sm3_event_t;
- typedef struct csi_sm3_t csi_sm3_t;
- struct csi_sm3_t {
- csi_dev_t dev; ///< SM3 hw-device info
- void (*callback)(csi_sm3_t *sm3, csi_sm3_event_t event,
- void *arg); ///< SM3 event callback for user
- void * arg; ///< SM3 custom designed param passed to evt_cb
- csi_sm3_state_t state; ///< SM3 state
- void * priv;
- };
- // Function documentation
- /**
- \brief Initialize SM3 Interface. Initializes the resources needed for the SM3 interface
- \param[in] sm3 operate handle.
- \param[in] idx index of sm3
- \return error code \ref csi_error_t
- */
- csi_error_t csi_sm3_init(csi_sm3_t *sm3, uint32_t idx);
- /**
- \brief De-initialize SM3 Interface. stops operation and releases the software resources used by the interface
- \param[in] sm3 sm3 handle to operate.
- \return none
- */
- void csi_sm3_uninit(csi_sm3_t *sm3);
- /**
- \brief Attach the callback handler to SM3
- \param[in] sm3 Handle to operate
- \param[in] callback Callback function
- \param[in] arg Callback's param
- \return Error code \ref csi_error_t
- */
- csi_error_t csi_sm3_attach_callback(csi_sm3_t *sm3, void *callback, void *arg);
- /**
- \brief Detach the callback handler
- \param[in] sm3 Handle to operate
- \return None
- */
- void csi_sm3_detach_callback(csi_sm3_t *sm3);
- /**
- \brief start the engine
- \param[in] sm3 sm3 handle to .operate
- \param[in] context Pointer to the sm3 context \ref csi_sm3_context_t
- \return error code \ref csi_error_t
- */
- csi_error_t csi_sm3_start(csi_sm3_t *sm3, csi_sm3_context_t *context);
- /**
- \brief update the engine
- \param[in] sm3 sm3 handle to operate.
- \param[in] context Pointer to the sm3 context \ref csi_sm3_context_t
- \param[in] input Pointer to the Source data
- \param[in] size the data size
- \return error code \ref csi_error_t
- */
- csi_error_t csi_sm3_update(csi_sm3_t *sm3, csi_sm3_context_t *context, const uint8_t *input, uint32_t size);
- /**
- \brief Accumulate the engine (async mode)
- \param[in] sm3 Handle to operate
- \param[in] context Pointer to the SM3 context \ref csi_sm3_context_t
- \param[in] input Pointer to the Source data
- \param[in] size The data size
- \return Error code \ref csi_error_t
- */
- csi_error_t csi_sm3_update_async(csi_sm3_t *sm3, csi_sm3_context_t *context, const uint8_t *input, uint32_t size);
- /**
- \brief finish the engine
- \param[in] sm3 sm3 handle to operate.
- \param[in] context Pointer to the sm3 context \ref csi_sm3_context_t
- \param[out] output Pointer to the result data
- \param[out] out_size Pointer to the result data size(bytes)
- \return error code \ref csi_error_t
- */
- csi_error_t csi_sm3_finish(csi_sm3_t *sm3, csi_sm3_context_t *context, uint8_t *output, uint32_t *out_size);
- /**
- \brief Get SM3 state
- \param[in] sm3 Handle to operate
- \param[out] state SM3 state \ref csi_sm3_state_t
- \return Error code \ref csi_error_t
- */
- csi_error_t csi_sm3_get_state(csi_sm3_t *sm3, csi_sm3_state_t *state);
- /**
- \brief Enable SM3 power manage
- \param[in] sm3 Handle to operate
- \return Error code \ref csi_error_t
- */
- csi_error_t csi_sm3_enable_pm(csi_sm3_t *sm3);
- /**
- \brief Disable SM3 power manage
- \param[in] sm3 Handle to operate
- \return None
- */
- void csi_sm3_disable_pm(csi_sm3_t *sm3);
- #ifdef __cplusplus
- extern "C" {
- #endif
- #endif //_DRV_SM3_H
|