aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/kdf.h
blob: c07adedcdee746ceab84fe98630d68328727415f (plain) (blame)
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