1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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
|