aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/sec_crypto_sha.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sec_library/include/sec_crypto_sha.h')
-rwxr-xr-xlib/sec_library/include/sec_crypto_sha.h173
1 files changed, 173 insertions, 0 deletions
diff --git a/lib/sec_library/include/sec_crypto_sha.h b/lib/sec_library/include/sec_crypto_sha.h
new file mode 100755
index 00000000..aa31fde2
--- /dev/null
+++ b/lib/sec_library/include/sec_crypto_sha.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2017-2021 Alibaba Group Holding Limited
+ */
+/******************************************************************************
+ * @file seccrypt_sha.h
+ * @brief Header File for SHA
+ * @version V1.0
+ * @date 20. Jul 2020
+ * @model sha
+ ******************************************************************************/
+#ifndef _SC_SHA_H_
+#define _SC_SHA_H_
+
+#include <stdint.h>
+#ifdef CONFIG_SYSTEM_SECURE
+#include "drv/sha.h"
+#include "soc.h"
+#endif
+#ifdef CONFIG_SEC_CRYPTO_SM3
+#include "drv/sm3.h"
+#endif
+
+#include <sec_crypto_errcode.h>
+
+
+#ifdef CONFIG_SEC_CRYPTO_SHA_SW
+#include "crypto_sha1.h"
+#include "crypto_sha256.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*----- SHA Control Codes: Mode -----*/
+typedef enum {
+ SC_SHA_MODE_1 = 1U, ///< SHA_1 mode
+ SC_SHA_MODE_256, ///< SHA_256 mode
+ SC_SHA_MODE_224, ///< SHA_224 mode
+ SC_SHA_MODE_512, ///< SHA_512 mode
+ SC_SHA_MODE_384, ///< SHA_384 mode
+ SC_SHA_MODE_512_256, ///< SHA_512_256 mode
+ SC_SHA_MODE_512_224, ///< SHA_512_224 mode
+ SC_SM3_MODE,
+} sc_sha_mode_t;
+
+/**
+\brief SHA State
+*/
+typedef struct {
+ uint32_t busy : 1; ///< calculate busy flag
+ uint32_t error : 1; ///< calculate error flag
+} sc_sha_state_t;
+
+typedef struct {
+#ifdef CONFIG_SYSTEM_SECURE
+#ifdef CONFIG_CSI_V1
+uint8_t ctx[SHA_CONTEXT_SIZE];
+#endif /* CONFIG_CSI_V1 */
+#ifdef CONFIG_CSI_V2
+ csi_sha_context_t ctx;
+ csi_sm3_context_t sm3ctx;
+#endif
+#endif
+#if defined(CONFIG_TEE_CA)
+ uint8_t ctx[224+8];
+#endif
+#if defined(CONFIG_SEC_CRYPTO_SHA_SW)
+ sc_mbedtls_sha1_context sha1_ctx;
+ sc_mbedtls_sha256_context sha2_ctx;
+#endif
+ sc_sha_mode_t mode; ///< sha mode
+} sc_sha_context_t;
+
+/****** SHA Event *****/
+typedef enum {
+ SC_SHA_EVENT_COMPLETE = 0U, ///< calculate completed
+ SC_SHA_EVENT_ERROR ///< calculate error
+} sc_sha_event_t;
+
+typedef struct sc_sha {
+#ifdef CONFIG_SYSTEM_SECURE
+#ifdef CONFIG_CSI_V1
+ sha_handle_t handle;
+ sc_sha_context_t ctx;
+ sc_sha_mode_t mode; ///< sha mode
+#endif /* CONFIG_CSI_V1 */
+#ifdef CONFIG_CSI_V2
+ csi_sha_t csi_sha;
+ csi_sm3_t csi_sm3;
+#endif
+#endif
+#if defined(CONFIG_TEE_CA)
+#endif
+} sc_sha_t;
+
+// Function documentation
+
+/**
+ \brief Initialize SHA Interface. Initializes the resources needed for the SHA interface
+ \param[in] sha operate handle.
+ \param[in] idx index of sha
+ \return error code \ref uint32_t
+*/
+uint32_t sc_sha_init(sc_sha_t *sha, uint32_t idx);
+
+/**
+ \brief De-initialize SHA Interface. stops operation and releases the software resources used by the interface
+ \param[in] sha sha handle to operate.
+ \return none
+*/
+void sc_sha_uninit(sc_sha_t *sha);
+
+/**
+ \brief attach the callback handler to SHA
+ \param[in] sha operate handle.
+ \param[in] callback callback function
+ \param[in] arg callback's param
+ \return error code
+*/
+uint32_t sc_sha_attach_callback(sc_sha_t *sha, void *callback, void *arg);
+
+/**
+ \brief detach the callback handler
+ \param[in] sha operate handle.
+*/
+void sc_sha_detach_callback(sc_sha_t *sha);
+
+/**
+ \brief start the engine
+ \param[in] sha sha handle to operate.
+ \param[in] context Pointer to the sha context \ref sc_sha_context_t
+ \param[in] mode sha mode \ref sc_sha_mode_t
+ \return error code \ref uint32_t
+*/
+uint32_t sc_sha_start(sc_sha_t *sha, sc_sha_context_t *context, sc_sha_mode_t mode);
+
+/**
+ \brief update the engine
+ \param[in] sha sha handle to operate.
+ \param[in] context Pointer to the sha context \ref sc_sha_context_t
+ \param[in] input Pointer to the Source data
+ \param[in] size the data size
+ \return error code \ref uint32_t
+*/
+uint32_t sc_sha_update(sc_sha_t *sha, sc_sha_context_t *context, const void *input, uint32_t size);
+
+/**
+ \brief accumulate the engine (async mode)
+ \param[in] sha sha handle to operate.
+ \param[in] context Pointer to the sha context \ref sc_sha_context_t
+ \param[in] input Pointer to the Source data
+ \param[in] size the data size
+ \return error code \ref uint32_t
+*/
+uint32_t sc_sha_update_async(sc_sha_t *sha, sc_sha_context_t *context, const void *input,
+ uint32_t size);
+
+/**
+ \brief finish the engine
+ \param[in] sha sha handle to operate.
+ \param[in] context Pointer to the sha context \ref sc_sha_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 uint32_t
+*/
+uint32_t sc_sha_finish(sc_sha_t *sha, sc_sha_context_t *context, void *output, uint32_t *out_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _sc_SHA_H_ */