]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/intel-ipsec-mb/include/gcm.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / intel-ipsec-mb / include / gcm.h
CommitLineData
9f95a23c 1/*******************************************************************************
f67539c2 2 Copyright (c) 2018-2019, Intel Corporation
9f95a23c
TL
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright notice,
8 this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of Intel Corporation nor the names of its contributors
13 may be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*******************************************************************************/
27
28#include "intel-ipsec-mb.h"
29
30#ifndef NO_GCM
31
32#ifndef _GCM_H_
33#define _GCM_H_
34
35/*
36 * AVX512+VAES+VPCLMULQDQ GCM API
37 * - intentionally this is not exposed in intel-ipsec-mb.h
38 * - available through IMB_GCM_xxx() macros from intel-ipsec-mb.h
39 */
40IMB_DLL_EXPORT void
41aes_gcm_enc_128_vaes_avx512(const struct gcm_key_data *key_data,
42 struct gcm_context_data *context_data,
43 uint8_t *out, uint8_t const *in, uint64_t len,
44 const uint8_t *iv,
45 uint8_t const *aad, uint64_t aad_len,
46 uint8_t *auth_tag, uint64_t auth_tag_len);
47IMB_DLL_EXPORT void
48aes_gcm_enc_192_vaes_avx512(const struct gcm_key_data *key_data,
49 struct gcm_context_data *context_data,
50 uint8_t *out, uint8_t const *in, uint64_t len,
51 const uint8_t *iv,
52 uint8_t const *aad, uint64_t aad_len,
53 uint8_t *auth_tag, uint64_t auth_tag_len);
54IMB_DLL_EXPORT void
55aes_gcm_enc_256_vaes_avx512(const struct gcm_key_data *key_data,
56 struct gcm_context_data *context_data,
57 uint8_t *out, uint8_t const *in, uint64_t len,
58 const uint8_t *iv,
59 uint8_t const *aad, uint64_t aad_len,
60 uint8_t *auth_tag, uint64_t auth_tag_len);
61IMB_DLL_EXPORT void
62aes_gcm_dec_128_vaes_avx512(const struct gcm_key_data *key_data,
63 struct gcm_context_data *context_data,
64 uint8_t *out, uint8_t const *in, uint64_t len,
65 const uint8_t *iv,
66 uint8_t const *aad, uint64_t aad_len,
67 uint8_t *auth_tag, uint64_t auth_tag_len);
68IMB_DLL_EXPORT void
69aes_gcm_dec_192_vaes_avx512(const struct gcm_key_data *key_data,
70 struct gcm_context_data *context_data,
71 uint8_t *out, uint8_t const *in, uint64_t len,
72 const uint8_t *iv,
73 uint8_t const *aad, uint64_t aad_len,
74 uint8_t *auth_tag, uint64_t auth_tag_len);
75IMB_DLL_EXPORT void
76aes_gcm_dec_256_vaes_avx512(const struct gcm_key_data *key_data,
77 struct gcm_context_data *context_data,
78 uint8_t *out, uint8_t const *in, uint64_t len,
79 const uint8_t *iv,
80 uint8_t const *aad, uint64_t aad_len,
81 uint8_t *auth_tag, uint64_t auth_tag_len);
82
83IMB_DLL_EXPORT void
84aes_gcm_init_128_vaes_avx512(const struct gcm_key_data *key_data,
85 struct gcm_context_data *context_data,
86 const uint8_t *iv, uint8_t const *aad,
87 uint64_t aad_len);
88IMB_DLL_EXPORT void
89aes_gcm_init_192_vaes_avx512(const struct gcm_key_data *key_data,
90 struct gcm_context_data *context_data,
91 const uint8_t *iv, uint8_t const *aad,
92 uint64_t aad_len);
93IMB_DLL_EXPORT void
94aes_gcm_init_256_vaes_avx512(const struct gcm_key_data *key_data,
95 struct gcm_context_data *context_data,
96 const uint8_t *iv, uint8_t const *aad,
97 uint64_t aad_len);
98IMB_DLL_EXPORT void
99aes_gcm_enc_128_update_vaes_avx512(const struct gcm_key_data *key_data,
100 struct gcm_context_data *context_data,
101 uint8_t *out, const uint8_t *in,
102 uint64_t len);
103IMB_DLL_EXPORT void
104aes_gcm_enc_192_update_vaes_avx512(const struct gcm_key_data *key_data,
105 struct gcm_context_data *context_data,
106 uint8_t *out, const uint8_t *in,
107 uint64_t len);
108IMB_DLL_EXPORT void
109aes_gcm_enc_256_update_vaes_avx512(const struct gcm_key_data *key_data,
110 struct gcm_context_data *context_data,
111 uint8_t *out, const uint8_t *in,
112 uint64_t len);
113IMB_DLL_EXPORT void
114aes_gcm_dec_128_update_vaes_avx512(const struct gcm_key_data *key_data,
115 struct gcm_context_data *context_data,
116 uint8_t *out, const uint8_t *in,
117 uint64_t len);
118IMB_DLL_EXPORT void
119aes_gcm_dec_192_update_vaes_avx512(const struct gcm_key_data *key_data,
120 struct gcm_context_data *context_data,
121 uint8_t *out, const uint8_t *in,
122 uint64_t len);
123IMB_DLL_EXPORT void
124aes_gcm_dec_256_update_vaes_avx512(const struct gcm_key_data *key_data,
125 struct gcm_context_data *context_data,
126 uint8_t *out, const uint8_t *in,
127 uint64_t len);
128IMB_DLL_EXPORT void
129aes_gcm_enc_128_finalize_vaes_avx512(const struct gcm_key_data *key_data,
130 struct gcm_context_data *context_data,
131 uint8_t *auth_tag, uint64_t auth_tag_len);
132IMB_DLL_EXPORT void
133aes_gcm_enc_192_finalize_vaes_avx512(const struct gcm_key_data *key_data,
134 struct gcm_context_data *context_data,
135 uint8_t *auth_tag, uint64_t auth_tag_len);
136IMB_DLL_EXPORT void
137aes_gcm_enc_256_finalize_vaes_avx512(const struct gcm_key_data *key_data,
138 struct gcm_context_data *context_data,
139 uint8_t *auth_tag, uint64_t auth_tag_len);
140IMB_DLL_EXPORT void
141aes_gcm_dec_128_finalize_vaes_avx512(const struct gcm_key_data *key_data,
142 struct gcm_context_data *context_data,
143 uint8_t *auth_tag, uint64_t auth_tag_len);
144IMB_DLL_EXPORT void
145aes_gcm_dec_192_finalize_vaes_avx512(const struct gcm_key_data *key_data,
146 struct gcm_context_data *context_data,
147 uint8_t *auth_tag, uint64_t auth_tag_len);
148IMB_DLL_EXPORT void
149aes_gcm_dec_256_finalize_vaes_avx512(const struct gcm_key_data *key_data,
150 struct gcm_context_data *context_data,
151 uint8_t *auth_tag, uint64_t auth_tag_len);
152IMB_DLL_EXPORT void
153aes_gcm_precomp_128_vaes_avx512(struct gcm_key_data *key_data);
154IMB_DLL_EXPORT void
155aes_gcm_precomp_192_vaes_avx512(struct gcm_key_data *key_data);
156IMB_DLL_EXPORT void
157aes_gcm_precomp_256_vaes_avx512(struct gcm_key_data *key_data);
158
159IMB_DLL_EXPORT void
160aes_gcm_pre_128_vaes_avx512(const void *key, struct gcm_key_data *key_data);
161IMB_DLL_EXPORT void
162aes_gcm_pre_192_vaes_avx512(const void *key, struct gcm_key_data *key_data);
163IMB_DLL_EXPORT void
164aes_gcm_pre_256_vaes_avx512(const void *key, struct gcm_key_data *key_data);
165
9f95a23c
TL
166/*
167 * AVX512 GCM API
168 * - intentionally this is not exposed in intel-ipsec-mb.h
169 * - available through IMB_GCM_xxx() macros from intel-ipsec-mb.h
170 */
171IMB_DLL_EXPORT void
172aes_gcm_enc_128_avx512(const struct gcm_key_data *key_data,
173 struct gcm_context_data *context_data,
174 uint8_t *out, uint8_t const *in, uint64_t len,
175 const uint8_t *iv,
176 uint8_t const *aad, uint64_t aad_len,
177 uint8_t *auth_tag, uint64_t auth_tag_len);
178IMB_DLL_EXPORT void
179aes_gcm_enc_192_avx512(const struct gcm_key_data *key_data,
180 struct gcm_context_data *context_data,
181 uint8_t *out, uint8_t const *in, uint64_t len,
182 const uint8_t *iv,
183 uint8_t const *aad, uint64_t aad_len,
184 uint8_t *auth_tag, uint64_t auth_tag_len);
185IMB_DLL_EXPORT void
186aes_gcm_enc_256_avx512(const struct gcm_key_data *key_data,
187 struct gcm_context_data *context_data,
188 uint8_t *out, uint8_t const *in, uint64_t len,
189 const uint8_t *iv,
190 uint8_t const *aad, uint64_t aad_len,
191 uint8_t *auth_tag, uint64_t auth_tag_len);
192IMB_DLL_EXPORT void
193aes_gcm_dec_128_avx512(const struct gcm_key_data *key_data,
194 struct gcm_context_data *context_data,
195 uint8_t *out, uint8_t const *in, uint64_t len,
196 const uint8_t *iv,
197 uint8_t const *aad, uint64_t aad_len,
198 uint8_t *auth_tag, uint64_t auth_tag_len);
199IMB_DLL_EXPORT void
200aes_gcm_dec_192_avx512(const struct gcm_key_data *key_data,
201 struct gcm_context_data *context_data,
202 uint8_t *out, uint8_t const *in, uint64_t len,
203 const uint8_t *iv,
204 uint8_t const *aad, uint64_t aad_len,
205 uint8_t *auth_tag, uint64_t auth_tag_len);
206IMB_DLL_EXPORT void
207aes_gcm_dec_256_avx512(const struct gcm_key_data *key_data,
208 struct gcm_context_data *context_data,
209 uint8_t *out, uint8_t const *in, uint64_t len,
210 const uint8_t *iv,
211 uint8_t const *aad, uint64_t aad_len,
212 uint8_t *auth_tag, uint64_t auth_tag_len);
213
214IMB_DLL_EXPORT void
215aes_gcm_init_128_avx512(const struct gcm_key_data *key_data,
216 struct gcm_context_data *context_data,
217 const uint8_t *iv, uint8_t const *aad,
218 uint64_t aad_len);
219IMB_DLL_EXPORT void
220aes_gcm_init_192_avx512(const struct gcm_key_data *key_data,
221 struct gcm_context_data *context_data,
222 const uint8_t *iv, uint8_t const *aad,
223 uint64_t aad_len);
224IMB_DLL_EXPORT void
225aes_gcm_init_256_avx512(const struct gcm_key_data *key_data,
226 struct gcm_context_data *context_data,
227 const uint8_t *iv, uint8_t const *aad,
228 uint64_t aad_len);
229IMB_DLL_EXPORT void
230aes_gcm_enc_128_update_avx512(const struct gcm_key_data *key_data,
231 struct gcm_context_data *context_data,
232 uint8_t *out, const uint8_t *in,
233 uint64_t len);
234IMB_DLL_EXPORT void
235aes_gcm_enc_192_update_avx512(const struct gcm_key_data *key_data,
236 struct gcm_context_data *context_data,
237 uint8_t *out, const uint8_t *in,
238 uint64_t len);
239IMB_DLL_EXPORT void
240aes_gcm_enc_256_update_avx512(const struct gcm_key_data *key_data,
241 struct gcm_context_data *context_data,
242 uint8_t *out, const uint8_t *in,
243 uint64_t len);
244IMB_DLL_EXPORT void
245aes_gcm_dec_128_update_avx512(const struct gcm_key_data *key_data,
246 struct gcm_context_data *context_data,
247 uint8_t *out, const uint8_t *in,
248 uint64_t len);
249IMB_DLL_EXPORT void
250aes_gcm_dec_192_update_avx512(const struct gcm_key_data *key_data,
251 struct gcm_context_data *context_data,
252 uint8_t *out, const uint8_t *in,
253 uint64_t len);
254IMB_DLL_EXPORT void
255aes_gcm_dec_256_update_avx512(const struct gcm_key_data *key_data,
256 struct gcm_context_data *context_data,
257 uint8_t *out, const uint8_t *in,
258 uint64_t len);
259IMB_DLL_EXPORT void
260aes_gcm_enc_128_finalize_avx512(const struct gcm_key_data *key_data,
261 struct gcm_context_data *context_data,
262 uint8_t *auth_tag, uint64_t auth_tag_len);
263IMB_DLL_EXPORT void
264aes_gcm_enc_192_finalize_avx512(const struct gcm_key_data *key_data,
265 struct gcm_context_data *context_data,
266 uint8_t *auth_tag, uint64_t auth_tag_len);
267IMB_DLL_EXPORT void
268aes_gcm_enc_256_finalize_avx512(const struct gcm_key_data *key_data,
269 struct gcm_context_data *context_data,
270 uint8_t *auth_tag, uint64_t auth_tag_len);
271IMB_DLL_EXPORT void
272aes_gcm_dec_128_finalize_avx512(const struct gcm_key_data *key_data,
273 struct gcm_context_data *context_data,
274 uint8_t *auth_tag, uint64_t auth_tag_len);
275IMB_DLL_EXPORT void
276aes_gcm_dec_192_finalize_avx512(const struct gcm_key_data *key_data,
277 struct gcm_context_data *context_data,
278 uint8_t *auth_tag, uint64_t auth_tag_len);
279IMB_DLL_EXPORT void
280aes_gcm_dec_256_finalize_avx512(const struct gcm_key_data *key_data,
281 struct gcm_context_data *context_data,
282 uint8_t *auth_tag, uint64_t auth_tag_len);
283IMB_DLL_EXPORT void
284aes_gcm_precomp_128_avx512(struct gcm_key_data *key_data);
285IMB_DLL_EXPORT void
286aes_gcm_precomp_192_avx512(struct gcm_key_data *key_data);
287IMB_DLL_EXPORT void
288aes_gcm_precomp_256_avx512(struct gcm_key_data *key_data);
289
290IMB_DLL_EXPORT void
291aes_gcm_pre_128_avx512(const void *key, struct gcm_key_data *key_data);
292IMB_DLL_EXPORT void
293aes_gcm_pre_192_avx512(const void *key, struct gcm_key_data *key_data);
294IMB_DLL_EXPORT void
295aes_gcm_pre_256_avx512(const void *key, struct gcm_key_data *key_data);
296
297/*
298 * AESNI emulation GCM API (based on SSE acrhitecture)
299 * - intentionally this is not exposed in intel-ipsec-mb.h
300 * - available through IMB_GCM_xxx() macros from intel-ipsec-mb.h
301 */
302IMB_DLL_EXPORT void
303aes_gcm_enc_128_sse_no_aesni(const struct gcm_key_data *key_data,
304 struct gcm_context_data *context_data,
305 uint8_t *out, uint8_t const *in, uint64_t len,
306 const uint8_t *iv, uint8_t const *aad,
307 uint64_t aad_len, uint8_t *auth_tag,
308 uint64_t auth_tag_len);
309IMB_DLL_EXPORT void
310aes_gcm_enc_192_sse_no_aesni(const struct gcm_key_data *key_data,
311 struct gcm_context_data *context_data,
312 uint8_t *out, uint8_t const *in, uint64_t len,
313 const uint8_t *iv, uint8_t const *aad,
314 uint64_t aad_len, uint8_t *auth_tag,
315 uint64_t auth_tag_len);
316IMB_DLL_EXPORT void
317aes_gcm_enc_256_sse_no_aesni(const struct gcm_key_data *key_data,
318 struct gcm_context_data *context_data,
319 uint8_t *out, uint8_t const *in, uint64_t len,
320 const uint8_t *iv,
321 uint8_t const *aad, uint64_t aad_len,
322 uint8_t *auth_tag, uint64_t auth_tag_len);
323IMB_DLL_EXPORT void
324aes_gcm_dec_128_sse_no_aesni(const struct gcm_key_data *key_data,
325 struct gcm_context_data *context_data,
326 uint8_t *out, uint8_t const *in, uint64_t len,
327 const uint8_t *iv, uint8_t const *aad,
328 uint64_t aad_len, uint8_t *auth_tag,
329 uint64_t auth_tag_len);
330IMB_DLL_EXPORT void
331aes_gcm_dec_192_sse_no_aesni(const struct gcm_key_data *key_data,
332 struct gcm_context_data *context_data,
333 uint8_t *out, uint8_t const *in, uint64_t len,
334 const uint8_t *iv, uint8_t const *aad,
335 uint64_t aad_len, uint8_t *auth_tag,
336 uint64_t auth_tag_len);
337IMB_DLL_EXPORT void
338aes_gcm_dec_256_sse_no_aesni(const struct gcm_key_data *key_data,
339 struct gcm_context_data *context_data,
340 uint8_t *out, uint8_t const *in, uint64_t len,
341 const uint8_t *iv, uint8_t const *aad,
342 uint64_t aad_len, uint8_t *auth_tag,
343 uint64_t auth_tag_len);
344IMB_DLL_EXPORT void
345aes_gcm_init_128_sse_no_aesni(const struct gcm_key_data *key_data,
346 struct gcm_context_data *context_data,
347 const uint8_t *iv, uint8_t const *aad,
348 uint64_t aad_len);
349IMB_DLL_EXPORT void
350aes_gcm_init_192_sse_no_aesni(const struct gcm_key_data *key_data,
351 struct gcm_context_data *context_data,
352 const uint8_t *iv, uint8_t const *aad,
353 uint64_t aad_len);
354IMB_DLL_EXPORT void
355aes_gcm_init_256_sse_no_aesni(const struct gcm_key_data *key_data,
356 struct gcm_context_data *context_data,
357 const uint8_t *iv, uint8_t const *aad,
358 uint64_t aad_len);
359IMB_DLL_EXPORT void
360aes_gcm_enc_128_update_sse_no_aesni(const struct gcm_key_data *key_data,
361 struct gcm_context_data *context_data,
362 uint8_t *out, const uint8_t *in,
363 uint64_t len);
364IMB_DLL_EXPORT void
365aes_gcm_enc_192_update_sse_no_aesni(const struct gcm_key_data *key_data,
366 struct gcm_context_data *context_data,
367 uint8_t *out, const uint8_t *in,
368 uint64_t len);
369IMB_DLL_EXPORT void
370aes_gcm_enc_256_update_sse_no_aesni(const struct gcm_key_data *key_data,
371 struct gcm_context_data *context_data,
372 uint8_t *out, const uint8_t *in,
373 uint64_t len);
374IMB_DLL_EXPORT void
375aes_gcm_dec_128_update_sse_no_aesni(const struct gcm_key_data *key_data,
376 struct gcm_context_data *context_data,
377 uint8_t *out, const uint8_t *in,
378 uint64_t len);
379IMB_DLL_EXPORT void
380aes_gcm_dec_192_update_sse_no_aesni(const struct gcm_key_data *key_data,
381 struct gcm_context_data *context_data,
382 uint8_t *out, const uint8_t *in,
383 uint64_t len);
384IMB_DLL_EXPORT void
385aes_gcm_dec_256_update_sse_no_aesni(const struct gcm_key_data *key_data,
386 struct gcm_context_data *context_data,
387 uint8_t *out, const uint8_t *in,
388 uint64_t len);
389IMB_DLL_EXPORT void
390aes_gcm_enc_128_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
391 struct gcm_context_data *context_data,
392 uint8_t *auth_tag, uint64_t auth_tag_len);
393IMB_DLL_EXPORT void
394aes_gcm_enc_192_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
395 struct gcm_context_data *context_data,
396 uint8_t *auth_tag, uint64_t auth_tag_len);
397IMB_DLL_EXPORT void
398aes_gcm_enc_256_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
399 struct gcm_context_data *context_data,
400 uint8_t *auth_tag, uint64_t auth_tag_len);
401IMB_DLL_EXPORT void
402aes_gcm_dec_128_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
403 struct gcm_context_data *context_data,
404 uint8_t *auth_tag, uint64_t auth_tag_len);
405IMB_DLL_EXPORT void
406aes_gcm_dec_192_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
407 struct gcm_context_data *context_data,
408 uint8_t *auth_tag, uint64_t auth_tag_len);
409IMB_DLL_EXPORT void
410aes_gcm_dec_256_finalize_sse_no_aesni(const struct gcm_key_data *key_data,
411 struct gcm_context_data *context_data,
412 uint8_t *auth_tag, uint64_t auth_tag_len);
413IMB_DLL_EXPORT void
414aes_gcm_precomp_128_sse_no_aesni(struct gcm_key_data *key_data);
415IMB_DLL_EXPORT void
416aes_gcm_precomp_192_sse_no_aesni(struct gcm_key_data *key_data);
417IMB_DLL_EXPORT void
418aes_gcm_precomp_256_sse_no_aesni(struct gcm_key_data *key_data);
419
420IMB_DLL_EXPORT void
421aes_gcm_pre_128_sse_no_aesni(const void *key, struct gcm_key_data *key_data);
422IMB_DLL_EXPORT void
423aes_gcm_pre_192_sse_no_aesni(const void *key, struct gcm_key_data *key_data);
424IMB_DLL_EXPORT void
425aes_gcm_pre_256_sse_no_aesni(const void *key, struct gcm_key_data *key_data);
426
427#endif /* _GCM_H_ */
428#endif /* NO_GCM */