aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/kdf.h
diff options
context:
space:
mode:
authorthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
committerthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
commit43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch)
treeb40c0eed02935b6682e8c5c975e3016b6b2f55fe /lib/sec_library/include/kdf.h
Linux_SDK_V0.9.5Linux_SDK_V0.9.5
Diffstat (limited to 'lib/sec_library/include/kdf.h')
-rw-r--r--lib/sec_library/include/kdf.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/lib/sec_library/include/kdf.h b/lib/sec_library/include/kdf.h
new file mode 100644
index 00000000..c07adedc
--- /dev/null
+++ b/lib/sec_library/include/kdf.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2019-2021 Alibaba Group Holding Limited
+ */
+
+#ifndef __KDF_H__
+#define __KDF_H__
+#include "drv/aes.h"
+#include "drv/sm4.h"
+#include "drv/common.h"
+#include <stdint.h>
+
+typedef enum {
+ KDF_ROOT_CV_UNIQUE_KEY,
+ KDF_ROOT_CV_COMMON_KEY,
+ KDF_ROOT_USER_UNIQUE_KEY,
+ KDF_ROOT_USER_COMMON_KEY,
+ KDF_ROOT_KEY_MAX,
+} csi_kdf_root_key_t;
+
+typedef enum {
+ KDF_DERIVED_DFT_CHALLENGE_EK,
+ KDF_DERIVED_C910TJTAG_CHALLENGE_EK,
+ KDF_DERIVED_E902JTAG_CHALLENGE_EK,
+ KDF_DERIVED_IMAGE_EK,
+ KDF_DERIVED_SECURE_STORAGE_EK1,
+ KDF_DERIVED_SECURE_STORAGE_EK2,
+ KDF_DERIVED_SECURE_STORAGE_EK3,
+ KDF_DERIVED_SECURE_STORAGE_EK4,
+ KDF_DERIVED_SECURE_STORAGE_EK5,
+ KDF_DERIVED_SECURE_STORAGE_EK6,
+ KDF_DERIVED_SECURE_STORAGE_EK7,
+ KDF_DERIVED_SECURE_STORAGE_EK8,
+ KDF_DERIVED_SECURE_STORAGE_EK9,
+ KDF_DERIVED_SECURE_STORAGE_EK10,
+ KDF_DERIVED_SECURE_STORAGE_EK11,
+ KDF_DERIVED_SECURE_STORAGE_EK12,
+ KDF_DERIVED_SECURE_STORAGE_EK13,
+ KDF_DERIVED_SECURE_STORAGE_EK14,
+ KDF_DERIVED_SECURE_STORAGE_EK15,
+ KDF_DERIVED_SECURE_STORAGE_EK16,
+ KDF_DERIVED_RPMB_ACCESS_EK,
+ KDF_DERIVED_MAX,
+} csi_kdf_derived_key_t;
+
+typedef enum {
+ KDF_KEY_TYPE_AES_256,
+ KDF_KEY_TYPE_AES_192,
+ KDF_KEY_TYPE_AES_128,
+ KDF_KEY_TYPE_SM4,
+ KDF_KEY_TYPE_TDES_192,
+ KDF_KEY_TYPE_TDES_128,
+ KDF_KEY_TYPE_DES,
+ KDF_KEY_TYPE_MAX,
+} csi_kdf_key_type_t;
+
+typedef struct key_attr_tag {
+ uint8_t len_in_byte;
+ uint8_t valid;
+ uint32_t offset;
+} csi_kdf_key_attr_t;
+
+/**
+\brief KDF Ctrl Block
+*/
+typedef struct {
+ union {
+ csi_aes_t *aes;
+ csi_sm4_t *sm4;
+ };
+ csi_kdf_key_type_t type;
+} csi_kdf_key_handle_t;
+
+/**
+\brief KDF Ctrl Block
+*/
+typedef struct {
+ csi_dev_t dev;
+ void *priv;
+} csi_kdf_t;
+
+/**
+ \brief kdf initialiez.
+ \param[in] kdf Handle to operate.
+ \param[in] idx Device id.
+ \return error code
+*/
+csi_error_t csi_kdf_init(csi_kdf_t *kdf, uint32_t idx);
+
+/**
+ \brief kdf uninitialiez.
+ \param[in] kdf Handle to operate
+*/
+void csi_kdf_uninit(csi_kdf_t *kdf);
+
+/**
+ \brief Derive key function.
+ \param[in] kdf Handle to operate.
+ \param[in] rkey derive source root key type.
+ \param[in] dkey derived key type from root key.
+ \return error code
+*/
+csi_error_t csi_kdf_derived_key(csi_kdf_t *kdf, csi_kdf_root_key_t rkey,
+ csi_kdf_derived_key_t dkey);
+
+/**
+ \brief Destroy derived key in storage.
+ \param[in] kdf Handle to operate.
+ \param[in] dkey derived key type.
+ \return error code
+*/
+csi_error_t csi_kdf_destory_key(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey);
+// xiaoxia: keyram layout config macro
+
+/**
+ \brief Set key to algorithim engine.
+ \param[in] handle Handle to cipher.
+ \param[in] kdf Handle to operate.
+ \param[in] dkey derived key type.
+ \return error code
+*/
+csi_error_t csi_kdf_set_key(csi_kdf_key_handle_t *handle, csi_kdf_t *kdf,
+ csi_kdf_derived_key_t dkey);
+
+/**
+ \brief Clear key in algorithim engine.
+ \param[in] kdf Handle to operate.
+ \param[in] dkey derived key type.
+ \return error code
+*/
+csi_error_t csi_kdf_clear_key(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey);
+
+/**
+ \brief Get key attribute.
+ \param[in] kdf Handle to operate.
+ \param[in] dkey derived key type.
+ \param[out] attr Buffer to get attribute.
+ \return error code
+*/
+csi_error_t csi_kdf_get_key_attr(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey,
+ csi_kdf_key_attr_t *attr);
+
+#endif