Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/nx/nx_csbcpb.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
3
#ifndef __NX_CSBCPB_H__
4
#define __NX_CSBCPB_H__
5
6
struct cop_symcpb_aes_ecb {
7
u8 key[32];
8
u8 __rsvd[80];
9
} __packed;
10
11
struct cop_symcpb_aes_cbc {
12
u8 iv[16];
13
u8 key[32];
14
u8 cv[16];
15
u32 spbc;
16
u8 __rsvd[44];
17
} __packed;
18
19
struct cop_symcpb_aes_gca {
20
u8 in_pat[16];
21
u8 key[32];
22
u8 out_pat[16];
23
u32 spbc;
24
u8 __rsvd[44];
25
} __packed;
26
27
struct cop_symcpb_aes_gcm {
28
u8 in_pat_or_aad[16];
29
u8 iv_or_cnt[16];
30
u64 bit_length_aad;
31
u64 bit_length_data;
32
u8 in_s0[16];
33
u8 key[32];
34
u8 __rsvd1[16];
35
u8 out_pat_or_mac[16];
36
u8 out_s0[16];
37
u8 out_cnt[16];
38
u32 spbc;
39
u8 __rsvd2[12];
40
} __packed;
41
42
struct cop_symcpb_aes_ctr {
43
u8 iv[16];
44
u8 key[32];
45
u8 cv[16];
46
u32 spbc;
47
u8 __rsvd2[44];
48
} __packed;
49
50
struct cop_symcpb_aes_cca {
51
u8 b0[16];
52
u8 b1[16];
53
u8 key[16];
54
u8 out_pat_or_b0[16];
55
u32 spbc;
56
u8 __rsvd[44];
57
} __packed;
58
59
struct cop_symcpb_aes_ccm {
60
u8 in_pat_or_b0[16];
61
u8 iv_or_ctr[16];
62
u8 in_s0[16];
63
u8 key[16];
64
u8 __rsvd1[48];
65
u8 out_pat_or_mac[16];
66
u8 out_s0[16];
67
u8 out_ctr[16];
68
u32 spbc;
69
u8 __rsvd2[12];
70
} __packed;
71
72
struct cop_symcpb_aes_xcbc {
73
u8 cv[16];
74
u8 key[16];
75
u8 __rsvd1[16];
76
u8 out_cv_mac[16];
77
u32 spbc;
78
u8 __rsvd2[44];
79
} __packed;
80
81
struct cop_symcpb_sha256 {
82
u64 message_bit_length;
83
u64 __rsvd1;
84
u8 input_partial_digest[32];
85
u8 message_digest[32];
86
u32 spbc;
87
u8 __rsvd2[44];
88
} __packed;
89
90
struct cop_symcpb_sha512 {
91
u64 message_bit_length_hi;
92
u64 message_bit_length_lo;
93
u8 input_partial_digest[64];
94
u8 __rsvd1[32];
95
u8 message_digest[64];
96
u32 spbc;
97
u8 __rsvd2[76];
98
} __packed;
99
100
#define NX_FDM_INTERMEDIATE 0x01
101
#define NX_FDM_CONTINUATION 0x02
102
#define NX_FDM_ENDE_ENCRYPT 0x80
103
104
#define NX_CPB_FDM(c) ((c)->cpb.hdr.fdm)
105
#define NX_CPB_KS_DS(c) ((c)->cpb.hdr.ks_ds)
106
107
#define NX_CPB_KEY_SIZE(c) (NX_CPB_KS_DS(c) >> 4)
108
#define NX_CPB_SET_KEY_SIZE(c, x) NX_CPB_KS_DS(c) |= ((x) << 4)
109
#define NX_CPB_SET_DIGEST_SIZE(c, x) NX_CPB_KS_DS(c) |= (x)
110
111
struct cop_symcpb_header {
112
u8 mode;
113
u8 fdm;
114
u8 ks_ds;
115
u8 pad_byte;
116
u8 __rsvd[12];
117
} __packed;
118
119
struct cop_parameter_block {
120
struct cop_symcpb_header hdr;
121
union {
122
struct cop_symcpb_aes_ecb aes_ecb;
123
struct cop_symcpb_aes_cbc aes_cbc;
124
struct cop_symcpb_aes_gca aes_gca;
125
struct cop_symcpb_aes_gcm aes_gcm;
126
struct cop_symcpb_aes_cca aes_cca;
127
struct cop_symcpb_aes_ccm aes_ccm;
128
struct cop_symcpb_aes_ctr aes_ctr;
129
struct cop_symcpb_aes_xcbc aes_xcbc;
130
struct cop_symcpb_sha256 sha256;
131
struct cop_symcpb_sha512 sha512;
132
};
133
} __packed;
134
135
#define NX_CSB_VALID_BIT 0x80
136
137
/* co-processor status block */
138
struct cop_status_block {
139
u8 valid;
140
u8 crb_seq_number;
141
u8 completion_code;
142
u8 completion_extension;
143
__be32 processed_byte_count;
144
__be64 address;
145
} __packed;
146
147
/* Nest accelerator workbook section 4.4 */
148
struct nx_csbcpb {
149
unsigned char __rsvd[112];
150
struct cop_status_block csb;
151
struct cop_parameter_block cpb;
152
} __packed;
153
154
/* nx_csbcpb related definitions */
155
#define NX_MODE_AES_ECB 0
156
#define NX_MODE_AES_CBC 1
157
#define NX_MODE_AES_GMAC 2
158
#define NX_MODE_AES_GCA 3
159
#define NX_MODE_AES_GCM 4
160
#define NX_MODE_AES_CCA 5
161
#define NX_MODE_AES_CCM 6
162
#define NX_MODE_AES_CTR 7
163
#define NX_MODE_AES_XCBC_MAC 20
164
#define NX_MODE_SHA 0
165
#define NX_MODE_SHA_HMAC 1
166
#define NX_MODE_AES_CBC_HMAC_ETA 8
167
#define NX_MODE_AES_CBC_HMAC_ATE 9
168
#define NX_MODE_AES_CBC_HMAC_EAA 10
169
#define NX_MODE_AES_CTR_HMAC_ETA 12
170
#define NX_MODE_AES_CTR_HMAC_ATE 13
171
#define NX_MODE_AES_CTR_HMAC_EAA 14
172
173
#define NX_FDM_CI_FULL 0
174
#define NX_FDM_CI_FIRST 1
175
#define NX_FDM_CI_LAST 2
176
#define NX_FDM_CI_MIDDLE 3
177
178
#define NX_FDM_PR_NONE 0
179
#define NX_FDM_PR_PAD 1
180
181
#define NX_KS_AES_128 1
182
#define NX_KS_AES_192 2
183
#define NX_KS_AES_256 3
184
185
#define NX_DS_SHA256 2
186
#define NX_DS_SHA512 3
187
188
#define NX_FC_AES 0
189
#define NX_FC_SHA 2
190
#define NX_FC_AES_HMAC 6
191
192
#define NX_MAX_FC (NX_FC_AES_HMAC + 1)
193
#define NX_MAX_MODE (NX_MODE_AES_XCBC_MAC + 1)
194
195
#define HCOP_FC_AES NX_FC_AES
196
#define HCOP_FC_SHA NX_FC_SHA
197
#define HCOP_FC_AES_HMAC NX_FC_AES_HMAC
198
199
/* indices into the array of algorithm properties */
200
#define NX_PROPS_AES_128 0
201
#define NX_PROPS_AES_192 1
202
#define NX_PROPS_AES_256 2
203
#define NX_PROPS_SHA256 1
204
#define NX_PROPS_SHA512 2
205
206
#endif
207
208