SemiDrive SSDK Appication Program Interface PTG3.0
ske_basic.h
Go to the documentation of this file.
1
9#ifndef SKE_BASIC_H
10#define SKE_BASIC_H
11
12#include "register_base_addr.h"
13#include "sdrv_crypto_utility.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#define SUPPORT_SKE_DES
20#define SUPPORT_SKE_TDES_128
21#define SUPPORT_SKE_TDES_192
22#define SUPPORT_SKE_AES_128
23#define SUPPORT_SKE_AES_192
24#define SUPPORT_SKE_AES_256
25#define SUPPORT_SKE_SM4
26
27#define SUPPORT_SKE_MODE_ECB
28#define SUPPORT_SKE_MODE_CBC
29#define SUPPORT_SKE_MODE_CFB
30#define SUPPORT_SKE_MODE_OFB
31#define SUPPORT_SKE_MODE_CTR
32#define SUPPORT_SKE_MODE_XTS
33#define SUPPORT_SKE_MODE_GCM
34#define SUPPORT_SKE_MODE_CMAC
35#define SUPPORT_SKE_MODE_CBC_MAC
36
37#define SKE_HP_DMA_FUNCTION
38
39#define SKE_SECURE_PORT_FUNCTION
40#ifdef SKE_SECURE_PORT_FUNCTION
41/* if key is from secure port, the max key index(or the number of keys) */
42#define SKE_MAX_KEY_IDX (9)
43#endif
44
45/* some register offset */
46#define SKE_HP_REVERSE_BYTE_ORDER_IN_WORD_OFFSET (24)
47#define SKE_HP_MODE_OFFSET (28)
48#define SKE_HP_CRYPTO_OFFSET (11)
49#define SKE_HP_UP_CFG_OFFSET (12)
50#define SKE_HP_DMA_OFFSET (16)
51#define SKE_HP_DMA_LL_OFFSET (17)
52#define SKE_HP_LAST_DATA_OFFSET (16)
53
54/* SKE register struct */
55typedef struct ske_hp_reg {
56 uint32_t ctrl; /* Offset: 0x000 (W1S) SKE Control Register */
57 uint32_t cfg; /* Offset: 0x004 (R/W) SKE Config Register */
58 uint32_t sr; /* Offset: 0x008 (R) SKE Status Register */
59 uint32_t risr; /* Offset: 0x00C (W0C) SKE Interrupt Source Register */
60 uint32_t imcr; /* Offset: 0x010 (R/W) SKE Interrupt Enable Register */
61 uint32_t misr; /* Offset: 0x014 (R) SKE Interrupt Output Register */
62 uint32_t rev1[1];
63 uint32_t sp; /* Offset: 0x01C (R/W) SKE Secure Port Register */
64 uint32_t key1[8]; /* Offset: 0x020 (R/W) Key1 */
65 uint32_t key2[8]; /* Offset: 0x040 (R/W) Key2 */
66 uint32_t ske_a_len_l; /* Offset: 0x060 (R/W) CCM/GCM mode AAD length low
67 Register */
68 uint32_t ske_a_len_h; /* Offset: 0x064 (R/W) CCM/GCM mode AAD length high
69 Register */
70 uint32_t ske_c_len_l; /* Offset: 0x068 (R/W) CCM/GCM/XTS mode
71 plaintext/ciphertext length low Register */
72 uint32_t ske_c_len_h; /* Offset: 0x06C (R/W) CCM/GCM/XTS mode
73 plaintext/ciphertext length high Register */
74 uint32_t iv[4]; /* Offset: 0x070 (R/W) Initial Vector */
75 uint32_t m_din_cr; /* Offset: 0x080 (R/W) SKE Input Register */
76 uint32_t rev3[3];
77 uint32_t m_din[4]; /* Offset: 0x090 (R/W) SKE Input Register */
78 uint32_t rev4[4];
79 uint32_t m_dout[4]; /* Offset: 0x0B0 (R) SKE Output Register */
80 uint32_t rev5[15];
81 uint32_t ske_version; /* Offset: 0x0FC (R) SKE Version Register */
82 uint32_t ske_seed[36]; /* Offset: 0x100 (R/W) SKE Seed Register */
83 uint32_t ske_alarm; /* Offset: 0x190 (R/W) SKE Alarm Register */
84 uint32_t rev6[91];
85 uint32_t dma_cr; /* Offset: 0x300 (R/W) DMA Config register */
86 uint32_t dma_sr; /* Offset: 0x304 (W0C) DMA Status register */
87 uint32_t dma_to; /* Offset: 0x308 (R/W) DMA Timeout Threshold register */
88 uint32_t rev7[1];
89 uint32_t
90 dma_sa_l; /* Offset: 0x310 (R/W) DMA Source Address Low part register */
91 uint32_t dma_sa_h; /* Offset: 0x314 (R/W) DMA Source Address High part
92 register */
93 uint32_t rev8[2];
94 uint32_t dma_da_l; /* Offset: 0x320 (R/W) DMA Destination Address Low part
95 register */
96 uint32_t dma_da_h; /* Offset: 0x324 (R/W) DMA Destination Address High part
97 register */
98 uint32_t rev9[2];
99 uint32_t dma_rlen; /* Offset: 0x330 (R/W) DMA read Length register */
100 uint32_t dma_wlen; /* Offset: 0x334 (R/W) DMA write Length register */
101 uint32_t rev10[2];
102 uint32_t dma_awcc; /* Offset: 0x340 (R/W) DMA AWCC register */
103 uint32_t dma_arcc; /* Offset: 0x344 (R/W) DMA ARCC register */
104 uint32_t dma_llp_l;
105 uint32_t dma_llp_h;
107
108/* SKE Operation Mode */
109typedef enum {
111
112#ifdef SUPPORT_SKE_MODE_ECB
114#endif
115
116#ifdef SUPPORT_SKE_MODE_XTS
118#endif
119
120#ifdef SUPPORT_SKE_MODE_CBC
122#endif
123
124#ifdef SUPPORT_SKE_MODE_CFB
126#endif
127
128#ifdef SUPPORT_SKE_MODE_OFB
130#endif
131
132#ifdef SUPPORT_SKE_MODE_CTR
134#endif
135
136#ifdef SUPPORT_SKE_MODE_CMAC
138#endif
139
140#ifdef SUPPORT_SKE_MODE_CBC_MAC
142#endif
143
144#ifdef SUPPORT_SKE_MODE_GCM
146#endif
147
148#ifdef SUPPORT_SKE_MODE_CCM
149 SKE_MODE_CCM = 10,
150#endif
151} SKE_MODE;
152
153typedef enum {
156} SKE_CRYPTO;
157
158typedef enum {
159#ifdef SUPPORT_SKE_DES
161#endif
162
163#ifdef SUPPORT_SKE_TDES_128
165#endif
166
167#ifdef SUPPORT_SKE_TDES_192
169#endif
170
171#ifdef SUPPORT_SKE_TDES_EEE_128
172 SKE_ALG_TDES_EEE_128 = 3,
173#endif
174
175#ifdef SUPPORT_SKE_TDES_EEE_192
176 SKE_ALG_TDES_EEE_192 = 4,
177#endif
178
179#ifdef SUPPORT_SKE_AES_128
181#endif
182
183#ifdef SUPPORT_SKE_AES_192
185#endif
186
187#ifdef SUPPORT_SKE_AES_256
189#endif
190
191#ifdef SUPPORT_SKE_SM4
193#endif
194} SKE_ALG;
195
203};
204
205typedef enum {
209
210typedef struct {
211 uint8_t block_bytes;
212 uint8_t block_words;
213} ske_ctx_t;
214
215typedef struct {
216 uint32_t src_addr;
217 uint32_t dst_addr;
218 uint32_t next_llp;
219 uint32_t last_len;
221
222uint32_t ske_get_version(void);
223
225
227
229
231
233
234void ske_hp_enable_secure_port(uint16_t sp_key_idx);
235
237
239
241
243
244void ske_hp_set_last_block(uint32_t is_last_block);
245
246void ske_hp_set_last_block_len(uint32_t bytes);
247
248uint32_t ske_hp_set_seed(void);
249
250void ske_hp_start(void);
251
253
254void ske_hp_set_key_uint32(uint32_t *key, uint32_t idx, uint32_t key_words);
255
256void ske_hp_set_iv_uint32(uint32_t *iv, uint32_t block_words);
257
258#if (defined(SUPPORT_SKE_MODE_GCM) || defined(SUPPORT_SKE_MODE_CCM))
259void ske_hp_set_aad_len_uint32(uint32_t aad_bytes);
260#endif
261
262#if (defined(SUPPORT_SKE_MODE_GCM) || defined(SUPPORT_SKE_MODE_CCM) || \
263 defined(SUPPORT_SKE_MODE_XTS))
264void ske_hp_set_c_len_uint32(uint32_t c_bytes);
265#endif
266
267void ske_hp_simple_set_input_block(uint32_t *in, uint32_t block_words);
268
269void ske_hp_simple_get_output_block(uint32_t *out, uint32_t block_words);
270
271uint32_t ske_hp_expand_key(void);
272
273#ifdef SKE_HP_DMA_FUNCTION
274uint32_t ske_hp_dma_operate(ske_ctx_t *ctx, uint32_t *in, uint32_t *out,
275 uint32_t in_words, uint32_t out_words);
276
277#if (defined(SUPPORT_SKE_MODE_CMAC) || defined(SUPPORT_SKE_MODE_CMAC))
279 uint32_t in_words);
280#endif
281#endif
282
283uint32_t ske_hp_update_blocks_no_output(ske_ctx_t *ctx, uint8_t *in,
284 uint32_t bytes);
285
286uint32_t ske_hp_update_blocks_internal(ske_ctx_t *ctx, uint8_t *in,
287 uint8_t *out, uint32_t bytes);
288
290
291#ifdef __cplusplus
292}
293#endif
294
295#endif
crypto utility api
uint32_t ske_hp_dma_operate(ske_ctx_t *ctx, uint32_t *in, uint32_t *out, uint32_t in_words, uint32_t out_words)
void ske_hp_set_last_block_len(uint32_t bytes)
void ske_hp_set_aad_len_uint32(uint32_t aad_bytes)
struct ske_hp_reg ske_hp_reg_t
uint32_t ske_hp_update_blocks_internal(ske_ctx_t *ctx, uint8_t *in, uint8_t *out, uint32_t bytes)
void ske_hp_set_c_len_uint32(uint32_t c_bytes)
void ske_hp_set_crypto(SKE_CRYPTO crypto)
void ske_hp_disable_secure_port(void)
uint32_t ske_hp_dma_operate_without_output(ske_ctx_t *ctx, uint32_t *in, uint32_t in_words)
void ske_hp_set_last_block(uint32_t is_last_block)
uint32_t ske_hp_expand_key(void)
void ske_hp_disable_dma_linked_list(void)
void ske_hp_simple_set_input_block(uint32_t *in, uint32_t block_words)
SKE_CRYPTO
Definition: ske_basic.h:153
@ SKE_CRYPTO_DECRYPT
Definition: ske_basic.h:155
@ SKE_CRYPTO_ENCRYPT
Definition: ske_basic.h:154
void ske_hp_simple_get_output_block(uint32_t *out, uint32_t block_words)
uint32_t ske_hp_set_seed(void)
SKE_ALG
Definition: ske_basic.h:158
@ SKE_ALG_AES_128
Definition: ske_basic.h:180
@ SKE_ALG_AES_192
Definition: ske_basic.h:184
@ SKE_ALG_AES_256
Definition: ske_basic.h:188
@ SKE_ALG_DES
Definition: ske_basic.h:160
@ SKE_ALG_TDES_128
Definition: ske_basic.h:164
@ SKE_ALG_TDES_192
Definition: ske_basic.h:168
@ SKE_ALG_SM4
Definition: ske_basic.h:192
SKE_PADDING
Definition: ske_basic.h:205
@ SKE_NO_PADDING
Definition: ske_basic.h:206
@ SKE_ZERO_PADDING
Definition: ske_basic.h:207
void ske_hp_set_cpu_mode(void)
void ske_hp_set_endian_uint32(void)
SKE_RET_CODE
Definition: ske_basic.h:196
@ SKE_CONFIG_INVALID
Definition: ske_basic.h:199
@ SKE_BUFFER_NULL
Definition: ske_basic.h:198
@ SKE_INPUT_INVALID
Definition: ske_basic.h:200
@ SKE_ATTACK_ALARM
Definition: ske_basic.h:201
@ SKE_SUCCESS
Definition: ske_basic.h:197
@ SKE_ERROR
Definition: ske_basic.h:202
uint32_t ske_hp_wait_till_output()
void ske_hp_set_alg(SKE_ALG ske_alg)
void ske_hp_set_mode(SKE_MODE mode)
void ske_hp_enable_dma_linked_list(void)
SKE_MODE
Definition: ske_basic.h:109
@ SKE_MODE_ECB
Definition: ske_basic.h:113
@ SKE_MODE_CFB
Definition: ske_basic.h:125
@ SKE_MODE_CMAC
Definition: ske_basic.h:137
@ SKE_MODE_CBC
Definition: ske_basic.h:121
@ SKE_MODE_XTS
Definition: ske_basic.h:117
@ SKE_MODE_CBC_MAC
Definition: ske_basic.h:141
@ SKE_MODE_CTR
Definition: ske_basic.h:133
@ SKE_MODE_GCM
Definition: ske_basic.h:145
@ SKE_MODE_BYPASS
Definition: ske_basic.h:110
@ SKE_MODE_OFB
Definition: ske_basic.h:129
uint32_t ske_hp_update_blocks_no_output(ske_ctx_t *ctx, uint8_t *in, uint32_t bytes)
void ske_hp_enable_secure_port(uint16_t sp_key_idx)
uint32_t ske_hp_calc_wait_till_done(void)
uint32_t ske_get_version(void)
void ske_hp_set_iv_uint32(uint32_t *iv, uint32_t block_words)
void ske_hp_set_dma_mode(void)
void ske_hp_set_key_uint32(uint32_t *key, uint32_t idx, uint32_t key_words)
void ske_hp_start(void)
Definition: ske_basic.h:215
uint32_t src_addr
Definition: ske_basic.h:216
uint32_t next_llp
Definition: ske_basic.h:218
uint32_t last_len
Definition: ske_basic.h:219
uint32_t dst_addr
Definition: ske_basic.h:217
Definition: ske_basic.h:210
uint8_t block_words
Definition: ske_basic.h:212
uint8_t block_bytes
Definition: ske_basic.h:211
Definition: ske_basic.h:55
uint32_t dma_llp_l
Definition: ske_basic.h:104
uint32_t misr
Definition: ske_basic.h:61
uint32_t dma_sr
Definition: ske_basic.h:86
uint32_t ske_a_len_l
Definition: ske_basic.h:66
uint32_t risr
Definition: ske_basic.h:59
uint32_t ske_version
Definition: ske_basic.h:81
uint32_t rev4[4]
Definition: ske_basic.h:78
uint32_t dma_da_l
Definition: ske_basic.h:94
uint32_t imcr
Definition: ske_basic.h:60
uint32_t rev7[1]
Definition: ske_basic.h:88
uint32_t sp
Definition: ske_basic.h:63
uint32_t dma_llp_h
Definition: ske_basic.h:105
uint32_t dma_da_h
Definition: ske_basic.h:96
uint32_t key2[8]
Definition: ske_basic.h:65
uint32_t rev5[15]
Definition: ske_basic.h:80
uint32_t ske_c_len_h
Definition: ske_basic.h:72
uint32_t ctrl
Definition: ske_basic.h:56
uint32_t cfg
Definition: ske_basic.h:57
uint32_t dma_to
Definition: ske_basic.h:87
uint32_t m_din[4]
Definition: ske_basic.h:77
uint32_t dma_rlen
Definition: ske_basic.h:99
uint32_t dma_cr
Definition: ske_basic.h:85
uint32_t ske_c_len_l
Definition: ske_basic.h:70
uint32_t rev10[2]
Definition: ske_basic.h:101
uint32_t dma_awcc
Definition: ske_basic.h:102
uint32_t rev1[1]
Definition: ske_basic.h:62
uint32_t ske_a_len_h
Definition: ske_basic.h:68
uint32_t m_dout[4]
Definition: ske_basic.h:79
uint32_t rev6[91]
Definition: ske_basic.h:84
uint32_t iv[4]
Definition: ske_basic.h:74
uint32_t sr
Definition: ske_basic.h:58
uint32_t rev3[3]
Definition: ske_basic.h:76
uint32_t key1[8]
Definition: ske_basic.h:64
uint32_t dma_arcc
Definition: ske_basic.h:103
uint32_t dma_sa_l
Definition: ske_basic.h:90
uint32_t ske_seed[36]
Definition: ske_basic.h:82
uint32_t m_din_cr
Definition: ske_basic.h:75
uint32_t rev8[2]
Definition: ske_basic.h:93
uint32_t dma_wlen
Definition: ske_basic.h:100
uint32_t dma_sa_h
Definition: ske_basic.h:91
uint32_t ske_alarm
Definition: ske_basic.h:83
uint32_t rev9[2]
Definition: ske_basic.h:98