intel-ipsec-mb v1.4
Documentation of the Intel(R) IPSec Multi-Buffer library
 
Loading...
Searching...
No Matches
intel-ipsec-mb.h
Go to the documentation of this file.
1/*******************************************************************************
2 Copyright (c) 2012-2023, Intel Corporation
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#ifndef IMB_IPSEC_MB_H
29#define IMB_IPSEC_MB_H
30
31#include <stdlib.h>
32#include <stdint.h>
33#include <errno.h>
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* 128-bit data type that is not in sdtint.h */
40typedef struct {
41 uint64_t low;
42 uint64_t high;
44
48#if defined __linux__ || defined __FreeBSD__
50#define DECLARE_ALIGNED(decl, alignval) \
51 decl __attribute__((aligned(alignval)))
52#define __forceinline \
53 static inline __attribute__((always_inline))
54
55#if __GNUC__ >= 4
56#define IMB_DLL_EXPORT __attribute__((visibility("default")))
57#define IMB_DLL_LOCAL __attribute__((visibility("hidden")))
58#else /* GNU C 4.0 and later */
59#define IMB_DLL_EXPORT
60#define IMB_DLL_LOCAL
61#endif
63#else
64/* Windows */
65
66#ifdef __MINGW32__
67/* MinGW-w64 */
68#define DECLARE_ALIGNED(decl, alignval) \
69 decl __attribute__((aligned(alignval)))
70#undef __forceinline
71#define __forceinline \
72 static inline __attribute__((always_inline))
73
74#else
75/* MSVS */
76#define DECLARE_ALIGNED(decl, alignval) \
77 __declspec(align(alignval)) decl
78#define __forceinline \
79 static __forceinline
80
81#endif /* __MINGW__ */
82
86#define IMB_DLL_EXPORT
87#define IMB_DLL_LOCAL
88
89#endif /* defined __linux__ || defined __FreeBSD__ */
90
94#define IMB_VERSION_STR "1.4.0-dev"
95#define IMB_VERSION_NUM 0x10400
96
100#define IMB_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
101
105#ifdef DEBUG
106#include <assert.h>
107#define IMB_ASSERT(x) assert(x)
108#else
109#define IMB_ASSERT(x)
110#endif
111
112#ifndef IMB_DIM
113#define IMB_DIM(x) (sizeof(x) / sizeof(x[0]))
114#endif
115
119typedef enum {
127} IMB_ARCH;
128
132#define IMB_DES_KEY_SCHED_SIZE (16 * 8)
133#define IMB_DES_BLOCK_SIZE 8
134
135#define IMB_AES_BLOCK_SIZE 16
136
137#define IMB_SHA1_DIGEST_SIZE_IN_BYTES 20
138#define IMB_SHA224_DIGEST_SIZE_IN_BYTES 28
139#define IMB_SHA256_DIGEST_SIZE_IN_BYTES 32
140#define IMB_SHA384_DIGEST_SIZE_IN_BYTES 48
141#define IMB_SHA512_DIGEST_SIZE_IN_BYTES 64
142
143#define IMB_MD5_DIGEST_SIZE_IN_BYTES 16
144
145#define IMB_SHA1_BLOCK_SIZE 64
146#define IMB_SHA_224_BLOCK_SIZE 64
147#define IMB_SHA_256_BLOCK_SIZE 64
148#define IMB_SHA_384_BLOCK_SIZE 128
149#define IMB_SHA_512_BLOCK_SIZE 128
150
151#define IMB_MD5_BLOCK_SIZE 64
152
153#define IMB_KASUMI_KEY_SIZE 16
154#define IMB_KASUMI_IV_SIZE 8
155#define IMB_KASUMI_BLOCK_SIZE 8
156#define IMB_KASUMI_DIGEST_SIZE 4
157
158#define IMB_ZUC_KEY_LEN_IN_BYTES 16
159#define IMB_ZUC_IV_LEN_IN_BYTES 16
160#define IMB_ZUC256_KEY_LEN_IN_BYTES 32
161#define IMB_ZUC256_IV_LEN_IN_BYTES_MIN 23
162#define IMB_ZUC256_IV_LEN_IN_BYTES_MAX 25
163#define IMB_ZUC_DIGEST_LEN_IN_BYTES 4
164#define IMB_ZUC256_DIGEST_LEN_IN_BYTES_MIN 4
165#define IMB_ZUC256_DIGEST_LEN_IN_BYTES_MAX 16
166
171#define IMB_DOCSIS_CRC32_MIN_ETH_PDU_SIZE 14
172#define IMB_DOCSIS_CRC32_TAG_SIZE 4
173
178typedef enum {
188
192typedef enum {
247 /* add new error types above this comment */
248 IMB_ERR_MAX /* don't move this one */
250
255#ifdef __ELASTERROR
256#if __ELASTERROR > 2000
257#error "Library error codes conflict with errno.h - please update IMB_ERR_MIN!"
258#endif
259#endif
260
261typedef enum {
287
288typedef enum {
292
293typedef enum {
342
343typedef enum {
347
348typedef enum {
354
355typedef enum {
361
366 const void *in;
367 void *out;
368 uint64_t len;
369};
370
390typedef struct IMB_JOB {
391 const void *enc_keys;
392 const void *dec_keys;
394 union {
395 const uint8_t *src;
400 };
401 union {
402 uint8_t *dst;
407 };
408 union {
415 };
416 union {
421 };
423 union {
428 };
429 const uint8_t *iv;
435 /* Start hash algorithm-specific fields */
436 union {
437 struct _HMAC_specific_fields {
445 struct _AES_XCBC_specific_fields {
446 const uint32_t *_k1_expanded;
448 const uint8_t *_k2;
450 const uint8_t *_k3;
453 struct _AES_CCM_specific_fields {
454 const void *aad;
457 } CCM;
458 struct _AES_CMAC_specific_fields {
459 const void *_key_expanded;
461 const void *_skey1;
462 const void *_skey2;
464 struct _AES_GCM_specific_fields {
465 const void *aad;
467 uint64_t aad_len_in_bytes;
470 } GCM;
471 struct _ZUC_EIA3_specific_fields {
472 const uint8_t *_key;
474 const uint8_t *_iv;
476 const uint8_t *_iv23;
479 struct _SNOW3G_UIA2_specific_fields {
480 const void *_key;
482 const void *_iv;
485 struct _KASUMI_UIA1_specific_fields {
486 const void *_key;
489 struct _AES_GMAC_specific_fields {
490 const struct gcm_key_data *_key;
492 const void *_iv;
494 uint64_t iv_len_in_bytes;
497 struct _GHASH_specific_fields {
498 const struct gcm_key_data *_key;
500 const void *_init_tag;
502 struct _POLY1305_specific_fields {
503 const void *_key;
506 struct _CHACHA20_POLY1305_specific_fields {
507 const void *aad;
509 uint64_t aad_len_in_bytes;
514 struct _SNOW_V_AEAD_specific_fields {
515 const void *aad;
517 uint64_t aad_len_in_bytes;
519 void *reserved;
522 } u;
531 void *user_data;
534 int (*cipher_func)(struct IMB_JOB *);
536 int (*hash_func)(struct IMB_JOB *);
543 union {
544 struct _CBCS_specific_fields {
545 void *next_iv;
550 void *suite_id[4];
551 uint32_t session_id;
553
554
555/* KASUMI */
556
557/* 64 precomputed words for key schedule */
558#define KASUMI_KEY_SCHEDULE_SIZE 64
559
563typedef struct kasumi_key_sched_s {
568
569/* GCM data structures */
570#define IMB_GCM_BLOCK_LEN 16
571
579 uint64_t aad_length;
580 uint64_t in_length;
585};
586#undef IMB_GCM_BLOCK_LEN
587
592 uint64_t hash[3];
593 uint64_t aad_len;
594 uint64_t hash_len;
595 uint8_t last_ks[64];
596 uint8_t poly_key[32];
597 uint8_t poly_scratch[16];
604 uint8_t IV[12];
605};
606
611#define IMB_MAX_TAG_LEN (16)
612
622#define IMB_GCM_IV_DATA_LEN (12)
623
624#define IMB_GCM_128_KEY_LEN (16)
625#define IMB_GCM_192_KEY_LEN (24)
626#define IMB_GCM_256_KEY_LEN (32)
627
628#define IMB_GCM_ENC_KEY_LEN 16
629#define IMB_GCM_KEY_SETS (15)
636#ifdef __WIN32
637__declspec(align(64))
638#endif /* WIN32 */
641 union {
643 struct {
660 struct {
668 struct {
679 uint8_t shifted_hkey[IMB_GCM_ENC_KEY_LEN * 32 * 2];
682}
683#ifdef LINUX
684__attribute__((aligned(64)));
685#else
686;
687#endif
688
689#undef IMB_GCM_ENC_KEY_LEN
690#undef IMB_GCM_KEY_SETS
691
692/* API data type definitions */
693struct IMB_MGR;
694
695typedef void (*init_mb_mgr_t)(struct IMB_MGR *);
696typedef IMB_JOB *(*get_next_job_t)(struct IMB_MGR *);
697typedef IMB_JOB *(*submit_job_t)(struct IMB_MGR *);
698typedef IMB_JOB *(*get_completed_job_t)(struct IMB_MGR *);
699typedef IMB_JOB *(*flush_job_t)(struct IMB_MGR *);
700typedef uint32_t (*queue_size_t)(struct IMB_MGR *);
701typedef uint32_t (*burst_fn_t)(struct IMB_MGR *,
702 const uint32_t,
703 struct IMB_JOB **);
704typedef uint32_t (*submit_cipher_burst_t)(struct IMB_MGR *,
705 struct IMB_JOB *,
706 const uint32_t,
707 const IMB_CIPHER_MODE cipher,
708 const IMB_CIPHER_DIRECTION dir,
709 const IMB_KEY_SIZE_BYTES key_size);
710typedef uint32_t (*submit_hash_burst_t)(struct IMB_MGR *,
711 struct IMB_JOB *,
712 const uint32_t,
713 const IMB_HASH_ALG hash);
714typedef void (*keyexp_t)(const void *, void *, void *);
715typedef void (*cmac_subkey_gen_t)(const void *, void *, void *);
716typedef void (*hash_one_block_t)(const void *, void *);
717typedef void (*hash_fn_t)(const void *, const uint64_t, void *);
718typedef void (*xcbc_keyexp_t)(const void *, void *, void *, void *);
719typedef int (*des_keysched_t)(uint64_t *, const void *);
720typedef void (*aes_cfb_t)(void *, const void *, const void *, const void *,
721 uint64_t);
722typedef void (*aes_gcm_enc_dec_t)(const struct gcm_key_data *,
723 struct gcm_context_data *,
724 uint8_t *, uint8_t const *, uint64_t,
725 const uint8_t *, uint8_t const *, uint64_t,
726 uint8_t *, uint64_t);
727typedef void (*aes_gcm_enc_dec_iv_t)(const struct gcm_key_data *,
728 struct gcm_context_data *, uint8_t *,
729 uint8_t const *, const uint64_t,
730 const uint8_t *, uint8_t const *,
731 const uint64_t, uint8_t *,
732 const uint64_t, const uint64_t);
733typedef void (*aes_gcm_init_t)(const struct gcm_key_data *,
734 struct gcm_context_data *,
735 const uint8_t *, uint8_t const *, uint64_t);
736typedef void (*aes_gcm_init_var_iv_t)(const struct gcm_key_data *,
737 struct gcm_context_data *,
738 const uint8_t *, const uint64_t,
739 const uint8_t *, const uint64_t);
740typedef void (*aes_gcm_enc_dec_update_t)(const struct gcm_key_data *,
741 struct gcm_context_data *,
742 uint8_t *, const uint8_t *, uint64_t);
743typedef void (*aes_gcm_enc_dec_finalize_t)(const struct gcm_key_data *,
744 struct gcm_context_data *,
745 uint8_t *, uint64_t);
746typedef void (*aes_gcm_precomp_t)(struct gcm_key_data *);
747typedef void (*aes_gcm_pre_t)(const void *, struct gcm_key_data *);
748
749typedef void (*aes_gmac_init_t)(const struct gcm_key_data *,
750 struct gcm_context_data *,
751 const uint8_t *, const uint64_t);
752typedef void (*aes_gmac_update_t)(const struct gcm_key_data *,
753 struct gcm_context_data *,
754 const uint8_t *, const uint64_t);
755typedef void (*aes_gmac_finalize_t)(const struct gcm_key_data *,
756 struct gcm_context_data *,
757 uint8_t *, const uint64_t);
758
759typedef void (*chacha_poly_init_t)(const void *,
761 const void *, const void *, const uint64_t);
762typedef void (*chacha_poly_enc_dec_update_t)(const void *,
764 void *, const void *, const uint64_t);
766 void *, const uint64_t);
767typedef void (*ghash_t)(const struct gcm_key_data *, const void *,
768 const uint64_t, void *, const uint64_t);
769
770typedef void (*zuc_eea3_1_buffer_t)(const void *, const void *, const void *,
771 void *, const uint32_t);
772
773typedef void (*zuc_eea3_4_buffer_t)(const void * const *, const void * const *,
774 const void * const *, void **,
775 const uint32_t *);
776
777typedef void (*zuc_eea3_n_buffer_t)(const void * const *, const void * const *,
778 const void * const *, void **,
779 const uint32_t *, const uint32_t);
780
781typedef void (*zuc_eia3_1_buffer_t)(const void *, const void *, const void *,
782 const uint32_t, uint32_t *);
783
784typedef void (*zuc_eia3_n_buffer_t)(const void * const *, const void * const *,
785 const void * const *,
786 const uint32_t *, uint32_t **,
787 const uint32_t);
788
789
791 const uint64_t, const void *, void *,
792 const uint32_t);
794 const uint64_t, const void *,
795 void *,
796 const uint32_t, const uint32_t);
798 const uint64_t, const uint64_t,
799 const void *, void *,
800 const uint32_t,
801 const void *, void *,
802 const uint32_t);
804 const uint64_t, const uint64_t,
805 const uint64_t,
806 const void *, void *,
807 const void *, void *,
808 const void *, void *,
809 const uint32_t);
811 const uint64_t, const uint64_t,
812 const uint64_t, const uint64_t,
813 const void *, void *,
814 const void *, void *,
815 const void *, void *,
816 const void *, void *,
817 const uint32_t);
819 const uint64_t *, const void * const *,
820 void **, const uint32_t *,
821 const uint32_t);
823 const uint64_t, const void *,
824 const uint32_t, void *,
825 const uint32_t);
827 const void *,
828 const uint32_t, void *);
829typedef int (*kasumi_init_f8_key_sched_t)(const void *,
831typedef int (*kasumi_init_f9_key_sched_t)(const void *,
833typedef size_t (*kasumi_key_sched_size_t)(void);
834
835
839typedef struct snow3g_key_schedule_s {
840 /* KEY */
841 uint32_t k[4];
843
845 const void *, const void *,
846 void *, const uint32_t);
847
849 const void *, const void *, void *,
850 const uint32_t, const uint32_t);
851
853 const void *, const void *,
854 const void *, void *, const uint32_t,
855 const void *, void *, const uint32_t);
856
858 const void *, const void *, const void *,
859 const void *, const void *, void *,
860 const uint32_t, const void *, void *,
861 const uint32_t, const void *, void *,
862 const uint32_t, const void *, void *,
863 const uint32_t);
864
866 const void *, const void *, const void *,
867 const void *, const void *, const void *,
868 const void *, const void *, const void *,
869 void *, const uint32_t, const void *,
870 void *, const uint32_t, const void *,
871 void *, const uint32_t, const void *,
872 void *, const uint32_t, const void *,
873 void *, const uint32_t, const void *,
874 void *, const uint32_t, const void *,
875 void *, const uint32_t, const void *,
876 void *, const uint32_t);
877
878typedef void
880 const void * const [], const void * const [],
881 void *[], const uint32_t[]);
882
884 const void * const [],
885 const void * const [],
886 void *[], const uint32_t[],
887 const uint32_t);
888
889typedef void
891 const void * const [],
892 const void * const [],
893 void *[], const uint32_t[],
894 const uint32_t);
895
897 const void *, const void *,
898 const uint64_t, void *);
899
900typedef int (*snow3g_init_key_sched_t)(const void *,
902
903typedef size_t (*snow3g_key_sched_size_t)(void);
904
905typedef uint32_t (*hec_32_t)(const uint8_t *);
906typedef uint64_t (*hec_64_t)(const uint8_t *);
907
908typedef uint32_t (*crc32_fn_t)(const void *, const uint64_t);
909
910typedef void (*aes_ecb_quic_t)(const void *, const void *,
911 void *out, uint64_t);
912
913/* Multi-buffer manager flags passed to alloc_mb_mgr() */
914
915#define IMB_FLAG_SHANI_OFF (1ULL << 0)
916#define IMB_FLAG_AESNI_OFF (1ULL << 1)
917#define IMB_FLAG_GFNI_OFF (1ULL << 2)
926#define IMB_FEATURE_SHANI (1ULL << 0)
927#define IMB_FEATURE_AESNI (1ULL << 1)
928#define IMB_FEATURE_PCLMULQDQ (1ULL << 2)
929#define IMB_FEATURE_CMOV (1ULL << 3)
930#define IMB_FEATURE_SSE4_2 (1ULL << 4)
931#define IMB_FEATURE_AVX (1ULL << 5)
932#define IMB_FEATURE_AVX2 (1ULL << 6)
933#define IMB_FEATURE_AVX512F (1ULL << 7)
934#define IMB_FEATURE_AVX512DQ (1ULL << 8)
935#define IMB_FEATURE_AVX512CD (1ULL << 9)
936#define IMB_FEATURE_AVX512BW (1ULL << 10)
937#define IMB_FEATURE_AVX512VL (1ULL << 11)
938#define IMB_FEATURE_AVX512_SKX (IMB_FEATURE_AVX512F | IMB_FEATURE_AVX512DQ | \
939 IMB_FEATURE_AVX512CD | IMB_FEATURE_AVX512BW | \
940 IMB_FEATURE_AVX512VL)
941#define IMB_FEATURE_VAES (1ULL << 12)
942#define IMB_FEATURE_VPCLMULQDQ (1ULL << 13)
943#define IMB_FEATURE_SAFE_DATA (1ULL << 14)
944#define IMB_FEATURE_SAFE_PARAM (1ULL << 15)
945#define IMB_FEATURE_GFNI (1ULL << 16)
946#define IMB_FEATURE_AVX512_IFMA (1ULL << 17)
947#define IMB_FEATURE_BMI2 (1ULL << 18)
948#define IMB_FEATURE_AESNI_EMU (1ULL << 19)
949#define IMB_FEATURE_SELF_TEST (1ULL << 20) /* self-test feature present */
950#define IMB_FEATURE_SELF_TEST_PASS (1ULL << 21) /* self-test passed */
951#define IMB_FEATURE_AVX_IFMA (1ULL << 22)
952
956#define IMB_CPUFLAGS_NO_AESNI (IMB_FEATURE_SSE4_2 | IMB_FEATURE_CMOV)
957#define IMB_CPUFLAGS_SSE (IMB_CPUFLAGS_NO_AESNI | IMB_FEATURE_AESNI | \
958 IMB_FEATURE_PCLMULQDQ)
959#define IMB_CPUFLAGS_SSE_T2 (IMB_CPUFLAGS_SSE | IMB_FEATURE_SHANI)
960#define IMB_CPUFLAGS_SSE_T3 (IMB_CPUFLAGS_SSE_T2 | IMB_FEATURE_GFNI)
961#define IMB_CPUFLAGS_AVX (IMB_CPUFLAGS_SSE | IMB_FEATURE_AVX)
962#define IMB_CPUFLAGS_AVX2 (IMB_CPUFLAGS_AVX | IMB_FEATURE_AVX2 | \
963 IMB_FEATURE_BMI2)
964#define IMB_CPUFLAGS_AVX512 (IMB_CPUFLAGS_AVX2 | IMB_FEATURE_AVX512_SKX)
965#define IMB_CPUFLAGS_AVX512_T2 (IMB_CPUFLAGS_AVX512 | IMB_FEATURE_VAES | \
966 IMB_FEATURE_VPCLMULQDQ | IMB_FEATURE_GFNI | \
967 IMB_FEATURE_AVX512_IFMA | IMB_FEATURE_SHANI)
968#define IMB_CPUFLAGS_AVX2_T2 (IMB_CPUFLAGS_AVX2 | IMB_FEATURE_SHANI | \
969 IMB_FEATURE_VAES | IMB_FEATURE_VPCLMULQDQ | \
970 IMB_FEATURE_GFNI)
971#define IMB_CPUFLAGS_AVX_T2 (IMB_CPUFLAGS_AVX | IMB_FEATURE_SHANI | \
972 IMB_FEATURE_GFNI)
973#define IMB_CPUFLAGS_AVX2_T3 (IMB_CPUFLAGS_AVX2_T2 | IMB_FEATURE_AVX_IFMA)
974
975/* TOP LEVEL (IMB_MGR) Data structure fields */
976
977#define IMB_MAX_BURST_SIZE 128
978#define IMB_MAX_JOBS (IMB_MAX_BURST_SIZE * 2)
979
980typedef struct IMB_MGR {
981
982 uint64_t flags;
983 uint64_t features;
985 uint64_t reserved[5];
986 uint32_t used_arch;
1020
1048
1053
1065
1077
1083
1109
1114
1124
1127
1128 void (*set_suite_id)(struct IMB_MGR *, IMB_JOB *);
1129
1130 /* in-order scheduler fields */
1134
1135 /* out of order managers */
1149
1173 void *end_ooo; /* add new out-of-order managers above this line */
1175
1187
1197
1198
1207
1215IMB_DLL_EXPORT const char *imb_get_strerror(int errnum);
1216
1243
1251
1258
1282 const unsigned reset_mgr);
1283
1291
1315
1316
1339
1362
1383
1404
1425
1446
1456
1457/*
1458 * Wrapper macros to call arch API's set up
1459 * at init phase of multi-buffer manager.
1460 *
1461 * For example, after calling init_mb_mgr_sse(&mgr)
1462 * The 'mgr' structure be set up so that:
1463 * mgr.get_next_job will point to get_next_job_sse(),
1464 * mgr.submit_job will point to submit_job_sse(),
1465 * mgr.submit_job_nocheck will point to submit_job_nocheck_sse(),
1466 * mgr.get_completed_job will point to get_completed_job_sse(),
1467 * mgr.flush_job will point to flush_job_sse(),
1468 * mgr.queue_size will point to queue_size_sse()
1469 * mgr.keyexp_128 will point to aes_keyexp_128_sse()
1470 * mgr.keyexp_192 will point to aes_keyexp_192_sse()
1471 * mgr.keyexp_256 will point to aes_keyexp_256_sse()
1472 * etc.
1473 *
1474 * Direct use of arch API's may result in better performance.
1475 * Using below indirect interface may produce slightly worse performance but
1476 * it can simplify application implementation.
1477 * The test app provides example of using the indirect interface.
1478 */
1479
1487#define IMB_GET_NEXT_JOB(_mgr) ((_mgr)->get_next_job((_mgr)))
1488
1498#define IMB_SUBMIT_JOB(_mgr) ((_mgr)->submit_job((_mgr)))
1499
1509#define IMB_SUBMIT_JOB_NOCHECK(_mgr) ((_mgr)->submit_job_nocheck((_mgr)))
1510
1518#define IMB_GET_COMPLETED_JOB(_mgr) ((_mgr)->get_completed_job((_mgr)))
1519
1527#define IMB_FLUSH_JOB(_mgr) ((_mgr)->flush_job((_mgr)))
1528
1536#define IMB_QUEUE_SIZE(_mgr) ((_mgr)->queue_size((_mgr)))
1537
1550#define IMB_GET_NEXT_BURST(_mgr, _n_jobs, _jobs) \
1551 ((_mgr)->get_next_burst((_mgr), (_n_jobs), (_jobs)))
1552
1569#define IMB_SUBMIT_BURST(_mgr, _n_jobs, _jobs) \
1570 ((_mgr)->submit_burst((_mgr), (_n_jobs), (_jobs)))
1571
1586#define IMB_SUBMIT_BURST_NOCHECK(_mgr, _n_jobs, _jobs) \
1587 ((_mgr)->submit_burst_nocheck((_mgr), (_n_jobs), (_jobs)))
1588
1598#define IMB_FLUSH_BURST(_mgr, _max_jobs, _jobs) \
1599 ((_mgr)->flush_burst((_mgr), (_max_jobs), (_jobs)))
1600
1613#define IMB_SUBMIT_CIPHER_BURST(_mgr, _jobs, _n_jobs, _cipher, \
1614 _dir, _key_size) \
1615 ((_mgr)->submit_cipher_burst((_mgr), (_jobs), (_n_jobs), \
1616 (_cipher), (_dir), (_key_size)))
1631#define IMB_SUBMIT_CIPHER_BURST_NOCHECK(_mgr, _jobs, _n_jobs, _cipher, \
1632 _dir, _key_size) \
1633 ((_mgr)->submit_cipher_burst_nocheck((_mgr), (_jobs), (_n_jobs),\
1634 (_cipher), (_dir), (_key_size)))
1645#define IMB_SUBMIT_HASH_BURST(_mgr, _jobs, _n_jobs, _hash) \
1646 ((_mgr)->submit_hash_burst((_mgr), (_jobs), (_n_jobs), (_hash)))
1647
1660#define IMB_SUBMIT_HASH_BURST_NOCHECK(_mgr, _jobs, _n_jobs, _hash) \
1661 ((_mgr)->submit_hash_burst_nocheck((_mgr), (_jobs), (_n_jobs), (_hash)))
1662
1663/* Key expansion and generation API's */
1664
1673#define IMB_AES_KEYEXP_128(_mgr, _key, _enc_exp_key, _dec_exp_key) \
1674 ((_mgr)->keyexp_128((_key), (_enc_exp_key), (_dec_exp_key)))
1683#define IMB_AES_KEYEXP_192(_mgr, _key, _enc_exp_key, _dec_exp_key) \
1684 ((_mgr)->keyexp_192((_key), (_enc_exp_key), (_dec_exp_key)))
1693#define IMB_AES_KEYEXP_256(_mgr, _key, _enc_exp_key, _dec_exp_key) \
1694 ((_mgr)->keyexp_256((_key), (_enc_exp_key), (_dec_exp_key)))
1695
1704#define IMB_AES_CMAC_SUBKEY_GEN_128(_mgr, _exp_key, _key1, _key2) \
1705 ((_mgr)->cmac_subkey_gen_128((_exp_key), (_key1), (_key2)))
1706
1715#define IMB_AES_CMAC_SUBKEY_GEN_256(_mgr, _exp_key, _key1, _key2) \
1716 ((_mgr)->cmac_subkey_gen_256((_exp_key), (_key1), (_key2)))
1717
1727#define IMB_AES_XCBC_KEYEXP(_mgr, _key, _exp_key, _exp_key2, _exp_key3) \
1728 ((_mgr)->xcbc_keyexp((_key), (_exp_key), (_exp_key2), (_exp_key3)))
1729
1730#define IMB_DES_KEYSCHED(_mgr, _exp_key, _key) \
1731 ((_mgr)->des_key_sched((_exp_key), (_key)))
1732
1733/* Hash API's */
1734
1742#define IMB_SHA1_ONE_BLOCK(_mgr, _src, _tag) \
1743 ((_mgr)->sha1_one_block((_src), (_tag)))
1744
1753#define IMB_SHA1(_mgr, _src, _length, _tag) \
1754 ((_mgr)->sha1((_src), (_length), (_tag)))
1762#define IMB_SHA224_ONE_BLOCK(_mgr, _src, _tag) \
1763 ((_mgr)->sha224_one_block((_src), (_tag)))
1764
1773#define IMB_SHA224(_mgr, _src, _length, _tag) \
1774 ((_mgr)->sha224((_src), (_length), (_tag)))
1782#define IMB_SHA256_ONE_BLOCK(_mgr, _src, _tag) \
1783 ((_mgr)->sha256_one_block((_src), (_tag)))
1792#define IMB_SHA256(_mgr, _src, _length, _tag) \
1793 ((_mgr)->sha256((_src), (_length), (_tag)))
1801#define IMB_SHA384_ONE_BLOCK(_mgr, _src, _tag) \
1802 ((_mgr)->sha384_one_block((_src), (_tag)))
1811#define IMB_SHA384(_mgr, _src, _length, _tag) \
1812 ((_mgr)->sha384((_src), (_length), (_tag)))
1820#define IMB_SHA512_ONE_BLOCK(_mgr, _src, _tag) \
1821 ((_mgr)->sha512_one_block((_src), (_tag)))
1830#define IMB_SHA512(_mgr, _src, _length, _tag) \
1831 ((_mgr)->sha512((_src), (_length), (_tag)))
1839#define IMB_MD5_ONE_BLOCK(_mgr, _src, _tag) \
1840 ((_mgr)->md5_one_block((_src), (_tag)))
1841
1855#define IMB_AES128_CFB_ONE(_mgr, _dst, _src, _iv, _exp_key, _len) \
1856 ((_mgr)->aes128_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))
1857
1871#define IMB_AES256_CFB_ONE(_mgr, _dst, _src, _iv, _exp_key, _len) \
1872 ((_mgr)->aes256_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))
1873
1874/* AES-GCM API's */
1875#define IMB_AES128_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, \
1876 _aadl, _tag, _tagl) \
1877 ((_mgr)->gcm128_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
1878 (_aad), (_aadl), (_tag), (_tagl)))
1879#define IMB_AES192_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, \
1880 _aadl, _tag, _tagl) \
1881 ((_mgr)->gcm192_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
1882 (_aad), (_aadl), (_tag), (_tagl)))
1883#define IMB_AES256_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, \
1884 _aadl, _tag, _tagl) \
1885 ((_mgr)->gcm256_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
1886 (_aad), (_aadl), (_tag), (_tagl)))
1887
1888#define IMB_AES128_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, \
1889 _aadl, _tag, _tagl) \
1890 ((_mgr)->gcm128_dec((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
1891 (_aad), (_aadl), (_tag), (_tagl)))
1892#define IMB_AES192_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, \
1893 _aad, _aadl, _tag, _tagl) \
1894 ((_mgr)->gcm192_dec((_exp_key), (_ctx), (_dst), (_src), (_len), \
1895 (_iv), (_aad), (_aadl), (_tag), (_tagl)))
1896#define IMB_AES256_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, \
1897 _aad, _aadl, _tag, _tagl) \
1898 ((_mgr)->gcm256_dec((_exp_key), (_ctx), (_dst), (_src), (_len), \
1899 (_iv), (_aad), (_aadl), (_tag), (_tagl)))
1900
1901#define IMB_AES128_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) \
1902 ((_mgr)->gcm128_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
1903#define IMB_AES192_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) \
1904 ((_mgr)->gcm192_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
1905#define IMB_AES256_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) \
1906 ((_mgr)->gcm256_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
1907
1908#define IMB_AES128_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, \
1909 _aadl) \
1910 ((_mgr)->gcm128_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
1911 (_aad), (_aadl)))
1912#define IMB_AES192_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, \
1913 _aadl) \
1914 ((_mgr)->gcm192_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
1915 (_aad), (_aadl)))
1916#define IMB_AES256_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, \
1917 _aadl) \
1918 ((_mgr)->gcm256_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
1919 (_aad), (_aadl)))
1920
1921#define IMB_AES128_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1922 ((_mgr)->gcm128_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1923#define IMB_AES192_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1924 ((_mgr)->gcm192_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1925#define IMB_AES256_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1926 ((_mgr)->gcm256_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1927
1928#define IMB_AES128_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1929 ((_mgr)->gcm128_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1930#define IMB_AES192_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1931 ((_mgr)->gcm192_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1932#define IMB_AES256_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) \
1933 ((_mgr)->gcm256_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
1934
1935#define IMB_AES128_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1936 ((_mgr)->gcm128_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1937#define IMB_AES192_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1938 ((_mgr)->gcm192_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1939#define IMB_AES256_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1940 ((_mgr)->gcm256_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1941
1942#define IMB_AES128_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1943 ((_mgr)->gcm128_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1944#define IMB_AES192_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1945 ((_mgr)->gcm192_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1946#define IMB_AES256_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1947 ((_mgr)->gcm256_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1948
1949#define IMB_AES128_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) \
1950 ((_mgr)->gmac128_init((_exp_key), (_ctx), (_iv), (_ivl)))
1951#define IMB_AES192_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) \
1952 ((_mgr)->gmac192_init((_exp_key), (_ctx), (_iv), (_ivl)))
1953#define IMB_AES256_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) \
1954 ((_mgr)->gmac256_init((_exp_key), (_ctx), (_iv), (_ivl)))
1955
1956#define IMB_AES128_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) \
1957 ((_mgr)->gmac128_update((_exp_key), (_ctx), (_src), (_len)))
1958#define IMB_AES192_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) \
1959 ((_mgr)->gmac192_update((_exp_key), (_ctx), (_src), (_len)))
1960#define IMB_AES256_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) \
1961 ((_mgr)->gmac256_update((_exp_key), (_ctx), (_src), (_len)))
1962
1963#define IMB_AES128_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1964 ((_mgr)->gmac128_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1965#define IMB_AES192_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1966 ((_mgr)->gmac192_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1967#define IMB_AES256_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) \
1968 ((_mgr)->gmac256_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
1969
1970#define IMB_AES128_GCM_PRECOMP(_mgr, _key) \
1971 ((_mgr)->gcm128_precomp((_key)))
1972#define IMB_AES192_GCM_PRECOMP(_mgr, _key) \
1973 ((_mgr)->gcm192_precomp((_key)))
1974#define IMB_AES256_GCM_PRECOMP(_mgr, _key) \
1975 ((_mgr)->gcm256_precomp((_key)))
1976
1977#define IMB_AES128_GCM_PRE(_mgr, _key, _exp_key) \
1978 ((_mgr)->gcm128_pre((_key), (_exp_key)))
1979#define IMB_AES192_GCM_PRE(_mgr, _key, _exp_key) \
1980 ((_mgr)->gcm192_pre((_key), (_exp_key)))
1981#define IMB_AES256_GCM_PRE(_mgr, _key, _exp_key) \
1982 ((_mgr)->gcm256_pre((_key), (_exp_key)))
1983
1984#define IMB_GHASH_PRE(_mgr, _key, _exp_key) \
1985 ((_mgr)->ghash_pre((_key), (_exp_key)))
1986#define IMB_GHASH(_mgr, _exp_key, _src, _len, _tag, _tagl) \
1987 ((_mgr)->ghash((_exp_key), (_src), (_len), (_tag), (_tagl)))
1988
1989/* Chacha20-Poly1305 direct API's */
1990#define IMB_CHACHA20_POLY1305_INIT(_mgr, _key, _ctx, _iv, _aad, _aadl) \
1991 ((_mgr)->chacha20_poly1305_init((_key), (_ctx), (_iv), (_aad), \
1992 (_aadl)))
1993
1994#define IMB_CHACHA20_POLY1305_ENC_UPDATE(_mgr, _key, _ctx, _dst, _src, _len) \
1995 ((_mgr)->chacha20_poly1305_enc_update((_key), (_ctx), (_dst), (_src), \
1996 (_len)))
1997#define IMB_CHACHA20_POLY1305_DEC_UPDATE(_mgr, _key, _ctx, _dst, _src, _len) \
1998 ((_mgr)->chacha20_poly1305_dec_update((_key), (_ctx), (_dst), (_src), \
1999 (_len)))
2000
2001#define IMB_CHACHA20_POLY1305_ENC_FINALIZE(_mgr, _ctx, _tag, _tagl) \
2002 ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))
2003
2004#define IMB_CHACHA20_POLY1305_DEC_FINALIZE(_mgr, _ctx, _tag, _tagl) \
2005 ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))
2006
2007/* ZUC EEA3/EIA3 functions */
2008
2019#define IMB_ZUC_EEA3_1_BUFFER(_mgr, _key, _iv, _src, _dst, _len) \
2020 ((_mgr)->eea3_1_buffer((_key), (_iv), (_src), (_dst), (_len)))
2021#define IMB_ZUC_EEA3_4_BUFFER(_mgr, _key, _iv, _src, _dst, _len) \
2022 ((_mgr)->eea3_4_buffer((_key), (_iv), (_src), (_dst), (_len)))
2023#define IMB_ZUC_EEA3_N_BUFFER(_mgr, _key, _iv, _src, _dst, _len, _count) \
2024 ((_mgr)->eea3_n_buffer((_key), (_iv), (_src), (_dst), (_len), (_count)))
2025
2026
2037#define IMB_ZUC_EIA3_1_BUFFER(_mgr, _key, _iv, _src, _len, _tag) \
2038 ((_mgr)->eia3_1_buffer((_key), (_iv), (_src), (_len), (_tag)))
2039#define IMB_ZUC_EIA3_N_BUFFER(_mgr, _key, _iv, _src, _len, _tag, _count) \
2040 ((_mgr)->eia3_n_buffer((_key), (_iv), (_src), (_len), (_tag), (_count)))
2041
2042
2043/* KASUMI F8/F9 functions */
2044
2060#define IMB_KASUMI_F8_1_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len) \
2061 ((_mgr)->f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))
2062
2079#define IMB_KASUMI_F8_1_BUFFER_BIT(_mgr, _exp_key, _iv, _src, _dst, _len, \
2080 _offset) \
2081 ((_mgr)->f8_1_buffer_bit((_exp_key), (_iv), (_src), (_dst), (_len), \
2082 (_offset)))
2083
2103#define IMB_KASUMI_F8_2_BUFFER(_mgr, _exp_key, _iv1, _iv2, _src1, _dst1, \
2104 _len1, _src2, _dst2, _len2) \
2105 ((_mgr)->f8_2_buffer((_exp_key), (_iv1), (_iv2), (_src1), (_dst1), \
2106 (_len1), (_src2), (_dst2), (_len2)))
2128#define IMB_KASUMI_F8_3_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _src1, _dst1, \
2129 _src2, _dst2, _src3, _dst3, _len) \
2130 ((_mgr)->f8_3_buffer((_exp_key), (_iv1), (_iv2), (_iv3), (_src1), \
2131 (_dst1), (_src2), (_dst2), (_src3), (_dst3), \
2132 (_len)))
2157#define IMB_KASUMI_F8_4_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, \
2158 _src1, _dst1, _src2, _dst2, _src3, _dst3, \
2159 _src4, _dst4, _len) \
2160 ((_mgr)->f8_4_buffer((_exp_key), (_iv1), (_iv2), (_iv3), (_iv4), \
2161 (_src1), (_dst1), (_src2), (_dst2), \
2162 (_src3), (_dst3), (_src4), (_dst4), (_len)))
2178#define IMB_KASUMI_F8_N_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len, _count) \
2179 ((_mgr)->f8_n_buffer((_exp_key), (_iv), (_src), (_dst), (_len), \
2180 (_count)))
2196#define IMB_KASUMI_F9_1_BUFFER(_mgr, _exp_key, _src, _len, _tag) \
2197 ((_mgr)->f9_1_buffer((_exp_key), (_src), (_len), (_tag)))
2198
2213#define IMB_KASUMI_F9_1_BUFFER_USER(_mgr, _exp_key, _iv, _src, _len, _tag, \
2214 _dir) \
2215 ((_mgr)->f9_1_buffer_user((_exp_key), (_iv), (_src), (_len), \
2216 (_tag), (_dir)))
2217
2227#define IMB_KASUMI_INIT_F8_KEY_SCHED(_mgr, _key, _exp_key) \
2228 ((_mgr)->kasumi_init_f8_key_sched((_key), (_exp_key)))
2229
2239#define IMB_KASUMI_INIT_F9_KEY_SCHED(_mgr, _key, _exp_key) \
2240 ((_mgr)->kasumi_init_f9_key_sched((_key), (_exp_key)))
2241
2251#define IMB_KASUMI_KEY_SCHED_SIZE(_mgr)((_mgr)->kasumi_key_sched_size())
2252
2253
2254/* SNOW3G F8/F9 functions */
2255
2271#define IMB_SNOW3G_F8_1_BUFFER_BIT(_mgr, _exp_key, _iv, _src, _dst, \
2272 _len, _offset) \
2273 ((_mgr)->snow3g_f8_1_buffer_bit((_exp_key), (_iv), (_src), \
2274 (_dst), (_len), (_offset)))
2275
2290#define IMB_SNOW3G_F8_1_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len) \
2291 ((_mgr)->snow3g_f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))
2292
2309#define IMB_SNOW3G_F8_2_BUFFER(_mgr, _exp_key, _iv1, _iv2, \
2310 _src1, _dst1, _len1, \
2311 _src2, _dst2, _len2) \
2312 ((_mgr)->snow3g_f8_2_buffer((_exp_key), (_iv1), (_iv2), \
2313 (_src1), (_dst1), (_len1), \
2314 (_src2), (_dst2), (_len2)))
2315
2341#define IMB_SNOW3G_F8_4_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, \
2342 _src1, _dst1, _len1, \
2343 _src2, _dst2, _len2, \
2344 _src3, _dst3, _len3, \
2345 _src4, _dst4, _len4) \
2346 ((_mgr)->snow3g_f8_4_buffer((_exp_key), (_iv1), (_iv2), (_iv3), \
2347 (_iv4), (_src1), (_dst1), (_len1), \
2348 (_src2), (_dst2), (_len2), \
2349 (_src3), (_dst3), (_len3), \
2350 (_src4), (_dst4), (_len4)))
2351
2393#define IMB_SNOW3G_F8_8_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, \
2394 _iv5, _iv6, _iv7, _iv8, \
2395 _src1, _dst1, _len1, \
2396 _src2, _dst2, _len2, \
2397 _src3, _dst3, _len3, \
2398 _src4, _dst4, _len4, \
2399 _src5, _dst5, _len5, \
2400 _src6, _dst6, _len6, \
2401 _src7, _dst7, _len7, \
2402 _src8, _dst8, _len8) \
2403 ((_mgr)->snow3g_f8_8_buffer((_exp_key), (_iv1), (_iv2), (_iv3), \
2404 (_iv4), (_iv5), (_iv6), (_iv7), \
2405 (_iv8), (_src1), (_dst1), (_len1), \
2406 (_src2), (_dst2), (_len2), \
2407 (_src3), (_dst3), (_len3), \
2408 (_src4), (_dst4), (_len4), \
2409 (_src5), (_dst5), (_len5), \
2410 (_src6), (_dst6), (_len6), \
2411 (_src7), (_dst7), (_len7), \
2412 (_src8), (_dst8), (_len8)))
2426#define IMB_SNOW3G_F8_8_BUFFER_MULTIKEY(_mgr, _exp_key, _iv, _src, _dst, _len) \
2427 ((_mgr)->snow3g_f8_8_buffer_multikey((_exp_key), (_iv), (_src), (_dst),\
2428 (_len)))
2429
2444#define IMB_SNOW3G_F8_N_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len, _count) \
2445 ((_mgr)->snow3g_f8_n_buffer((_exp_key), (_iv), (_src), \
2446 (_dst), (_len), (_count)))
2447
2462#define IMB_SNOW3G_F8_N_BUFFER_MULTIKEY(_mgr, _exp_key, _iv, _src, \
2463 _dst, _len, _count) \
2464 ((_mgr)->snow3g_f8_n_buffer_multikey((_exp_key), (_iv), (_src), \
2465 (_dst), (_len), (_count)))
2466
2482#define IMB_SNOW3G_F9_1_BUFFER(_mgr, _exp_key, _iv, _src, _len, _tag) \
2483 ((_mgr)->snow3g_f9_1_buffer((_exp_key), (_iv), (_src), (_len), (_tag)))
2484
2495#define IMB_SNOW3G_INIT_KEY_SCHED(_mgr, _key, _exp_key) \
2496 ((_mgr)->snow3g_init_key_sched((_key), (_exp_key)))
2497
2507#define IMB_SNOW3G_KEY_SCHED_SIZE(_mgr)((_mgr)->snow3g_key_sched_size())
2508
2512#define IMB_HEC_32(_mgr, _src)((_mgr)->hec_32(_src))
2513#define IMB_HEC_64(_mgr, _src)((_mgr)->hec_64(_src))
2514
2518#define IMB_CRC32_ETHERNET_FCS(_mgr, _src, _len) \
2519 (_mgr)->crc32_ethernet_fcs(_src, _len)
2520
2524#define IMB_CRC16_X25(_mgr, _src, _len) \
2525 (_mgr)->crc16_x25(_src, _len)
2526
2530#define IMB_CRC32_SCTP(_mgr, _src, _len) \
2531 (_mgr)->crc32_sctp(_src, _len)
2532
2536#define IMB_CRC24_LTE_A(_mgr, _src, _len) \
2537 (_mgr)->crc24_lte_a(_src, _len)
2538
2542#define IMB_CRC24_LTE_B(_mgr, _src, _len) \
2543 (_mgr)->crc24_lte_b(_src, _len)
2544
2548#define IMB_CRC16_FP_DATA(_mgr, _src, _len) \
2549 (_mgr)->crc16_fp_data(_src, _len)
2550
2554#define IMB_CRC11_FP_HEADER(_mgr, _src, _len) \
2555 (_mgr)->crc11_fp_header(_src, _len)
2556
2560#define IMB_CRC7_FP_HEADER(_mgr, _src, _len) \
2561 (_mgr)->crc7_fp_header(_src, _len)
2562
2566#define IMB_CRC10_IUUP_DATA(_mgr, _src, _len) \
2567 (_mgr)->crc10_iuup_data(_src, _len)
2568
2572#define IMB_CRC6_IUUP_HEADER(_mgr, _src, _len) \
2573 (_mgr)->crc6_iuup_header(_src, _len)
2574
2578#define IMB_CRC32_WIMAX_OFDMA_DATA(_mgr, _src, _len) \
2579 (_mgr)->crc32_wimax_ofdma_data(_src, _len)
2580
2584#define IMB_CRC8_WIMAX_OFDMA_HCS(_mgr, _src, _len) \
2585 (_mgr)->crc8_wimax_ofdma_hcs(_src, _len)
2586
2587/* Auxiliary functions */
2588
2602des_key_schedule(uint64_t *ks, const void *key);
2603
2614IMB_DLL_EXPORT void
2615imb_hmac_ipad_opad(struct IMB_MGR *mb_mgr, const IMB_HASH_ALG sha_type,
2616 const void *pkey, const size_t key_len,
2617 void *ipad_hash, void *opad_hash);
2618
2631IMB_DLL_EXPORT void
2632des_cfb_one(void *out, const void *in, const uint64_t *iv,
2633 const uint64_t *ks, const int len);
2634
2641IMB_DLL_EXPORT void md5_one_block_sse(const void *data, void *digest);
2645IMB_DLL_EXPORT void md5_one_block_avx(const void *data, void *digest);
2649IMB_DLL_EXPORT void md5_one_block_avx2(const void *data, void *digest);
2653IMB_DLL_EXPORT void md5_one_block_avx512(const void *data, void *digest);
2654
2655
2663IMB_DLL_EXPORT void aes_keyexp_128_sse(const void *key, void *enc_exp_keys,
2664 void *dec_exp_keys);
2668IMB_DLL_EXPORT void aes_keyexp_128_avx(const void *key, void *enc_exp_keys,
2669 void *dec_exp_keys);
2673IMB_DLL_EXPORT void aes_keyexp_128_avx2(const void *key, void *enc_exp_keys,
2674 void *dec_exp_keys);
2678IMB_DLL_EXPORT void aes_keyexp_128_avx512(const void *key, void *enc_exp_keys,
2679 void *dec_exp_keys);
2680
2688IMB_DLL_EXPORT void aes_keyexp_192_sse(const void *key, void *enc_exp_keys,
2689 void *dec_exp_keys);
2693IMB_DLL_EXPORT void aes_keyexp_192_avx(const void *key, void *enc_exp_keys,
2694 void *dec_exp_keys);
2698IMB_DLL_EXPORT void aes_keyexp_192_avx2(const void *key, void *enc_exp_keys,
2699 void *dec_exp_keys);
2703IMB_DLL_EXPORT void aes_keyexp_192_avx512(const void *key, void *enc_exp_keys,
2704 void *dec_exp_keys);
2705
2713IMB_DLL_EXPORT void aes_keyexp_256_sse(const void *key, void *enc_exp_keys,
2714 void *dec_exp_keys);
2718IMB_DLL_EXPORT void aes_keyexp_256_avx(const void *key, void *enc_exp_keys,
2719 void *dec_exp_keys);
2723IMB_DLL_EXPORT void aes_keyexp_256_avx2(const void *key, void *enc_exp_keys,
2724 void *dec_exp_keys);
2728IMB_DLL_EXPORT void aes_keyexp_256_avx512(const void *key, void *enc_exp_keys,
2729 void *dec_exp_keys);
2730
2738 void *enc_exp_keys);
2743 void *enc_exp_keys);
2748 void *enc_exp_keys);
2753 void *enc_exp_keys);
2754
2762 void *enc_exp_keys);
2767 void *enc_exp_keys);
2772 void *enc_exp_keys);
2777 void *enc_exp_keys);
2778
2786 void *enc_exp_keys);
2791 void *enc_exp_keys);
2796 void *enc_exp_keys);
2801 void *enc_exp_keys);
2802
2811IMB_DLL_EXPORT void aes_xcbc_expand_key_sse(const void *key, void *k1_exp,
2812 void *k2, void *k3);
2816IMB_DLL_EXPORT void aes_xcbc_expand_key_avx(const void *key, void *k1_exp,
2817 void *k2, void *k3);
2821IMB_DLL_EXPORT void aes_xcbc_expand_key_avx2(const void *key, void *k1_exp,
2822 void *k2, void *k3);
2826IMB_DLL_EXPORT void aes_xcbc_expand_key_avx512(const void *key, void *k1_exp,
2827 void *k2, void *k3);
2828
2836IMB_DLL_EXPORT void aes_cmac_subkey_gen_sse(const void *key_exp, void *key1,
2837 void *key2);
2841IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx(const void *key_exp, void *key1,
2842 void *key2);
2846IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx2(const void *key_exp, void *key1,
2847 void *key2);
2851IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx512(const void *key_exp, void *key1,
2852 void *key2);
2853
2854/*
2855 * Direct GCM API.
2856 * Note that GCM is also available through job API.
2857 */
2858
2877IMB_DLL_EXPORT void
2878aes_gcm_enc_128_sse(const struct gcm_key_data *key_data,
2879 struct gcm_context_data *context_data,
2880 uint8_t *out, uint8_t const *in, uint64_t len,
2881 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len,
2882 uint8_t *auth_tag, uint64_t auth_tag_len);
2886IMB_DLL_EXPORT void
2888 struct gcm_context_data *context_data,
2889 uint8_t *out, uint8_t const *in, uint64_t len,
2890 const uint8_t *iv,
2891 uint8_t const *aad, uint64_t aad_len,
2892 uint8_t *auth_tag, uint64_t auth_tag_len);
2896IMB_DLL_EXPORT void
2898 struct gcm_context_data *context_data,
2899 uint8_t *out, uint8_t const *in, uint64_t len,
2900 const uint8_t *iv,
2901 uint8_t const *aad, uint64_t aad_len,
2902 uint8_t *auth_tag, uint64_t auth_tag_len);
2921IMB_DLL_EXPORT void
2922aes_gcm_enc_192_sse(const struct gcm_key_data *key_data,
2923 struct gcm_context_data *context_data,
2924 uint8_t *out, uint8_t const *in, uint64_t len,
2925 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len,
2926 uint8_t *auth_tag, uint64_t auth_tag_len);
2930IMB_DLL_EXPORT void
2932 struct gcm_context_data *context_data,
2933 uint8_t *out, uint8_t const *in, uint64_t len,
2934 const uint8_t *iv,
2935 uint8_t const *aad, uint64_t aad_len,
2936 uint8_t *auth_tag, uint64_t auth_tag_len);
2940IMB_DLL_EXPORT void
2942 struct gcm_context_data *context_data,
2943 uint8_t *out, uint8_t const *in, uint64_t len,
2944 const uint8_t *iv,
2945 uint8_t const *aad, uint64_t aad_len,
2946 uint8_t *auth_tag, uint64_t auth_tag_len);
2947
2966IMB_DLL_EXPORT void
2967aes_gcm_enc_256_sse(const struct gcm_key_data *key_data,
2968 struct gcm_context_data *context_data,
2969 uint8_t *out, uint8_t const *in, uint64_t len,
2970 const uint8_t *iv,
2971 uint8_t const *aad, uint64_t aad_len,
2972 uint8_t *auth_tag, uint64_t auth_tag_len);
2976IMB_DLL_EXPORT void
2978 struct gcm_context_data *context_data,
2979 uint8_t *out, uint8_t const *in, uint64_t len,
2980 const uint8_t *iv,
2981 uint8_t const *aad, uint64_t aad_len,
2982 uint8_t *auth_tag, uint64_t auth_tag_len);
2986IMB_DLL_EXPORT void
2988 struct gcm_context_data *context_data,
2989 uint8_t *out, uint8_t const *in, uint64_t len,
2990 const uint8_t *iv,
2991 uint8_t const *aad, uint64_t aad_len,
2992 uint8_t *auth_tag, uint64_t auth_tag_len);
2993
3012IMB_DLL_EXPORT void
3013aes_gcm_dec_128_sse(const struct gcm_key_data *key_data,
3014 struct gcm_context_data *context_data,
3015 uint8_t *out, uint8_t const *in, uint64_t len,
3016 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len,
3017 uint8_t *auth_tag, uint64_t auth_tag_len);
3021IMB_DLL_EXPORT void
3023 struct gcm_context_data *context_data,
3024 uint8_t *out, uint8_t const *in, uint64_t len,
3025 const uint8_t *iv,
3026 uint8_t const *aad, uint64_t aad_len,
3027 uint8_t *auth_tag, uint64_t auth_tag_len);
3031IMB_DLL_EXPORT void
3033 struct gcm_context_data *context_data,
3034 uint8_t *out, uint8_t const *in, uint64_t len,
3035 const uint8_t *iv,
3036 uint8_t const *aad, uint64_t aad_len,
3037 uint8_t *auth_tag, uint64_t auth_tag_len);
3038
3057IMB_DLL_EXPORT void
3058aes_gcm_dec_192_sse(const struct gcm_key_data *key_data,
3059 struct gcm_context_data *context_data,
3060 uint8_t *out, uint8_t const *in, uint64_t len,
3061 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len,
3062 uint8_t *auth_tag, uint64_t auth_tag_len);
3066IMB_DLL_EXPORT void
3068 struct gcm_context_data *context_data,
3069 uint8_t *out, uint8_t const *in, uint64_t len,
3070 const uint8_t *iv,
3071 uint8_t const *aad, uint64_t aad_len,
3072 uint8_t *auth_tag, uint64_t auth_tag_len);
3076IMB_DLL_EXPORT void
3078 struct gcm_context_data *context_data,
3079 uint8_t *out, uint8_t const *in, uint64_t len,
3080 const uint8_t *iv,
3081 uint8_t const *aad, uint64_t aad_len,
3082 uint8_t *auth_tag, uint64_t auth_tag_len);
3083
3102IMB_DLL_EXPORT void
3103aes_gcm_dec_256_sse(const struct gcm_key_data *key_data,
3104 struct gcm_context_data *context_data,
3105 uint8_t *out, uint8_t const *in, uint64_t len,
3106 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len,
3107 uint8_t *auth_tag, uint64_t auth_tag_len);
3111IMB_DLL_EXPORT void
3113 struct gcm_context_data *context_data,
3114 uint8_t *out, uint8_t const *in, uint64_t len,
3115 const uint8_t *iv,
3116 uint8_t const *aad, uint64_t aad_len,
3117 uint8_t *auth_tag, uint64_t auth_tag_len);
3121IMB_DLL_EXPORT void
3123 struct gcm_context_data *context_data,
3124 uint8_t *out, uint8_t const *in, uint64_t len,
3125 const uint8_t *iv,
3126 uint8_t const *aad, uint64_t aad_len,
3127 uint8_t *auth_tag, uint64_t auth_tag_len);
3128
3141IMB_DLL_EXPORT void
3142aes_gcm_init_128_sse(const struct gcm_key_data *key_data,
3143 struct gcm_context_data *context_data,
3144 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len);
3148IMB_DLL_EXPORT void
3150 struct gcm_context_data *context_data,
3151 const uint8_t *iv,
3152 uint8_t const *aad, uint64_t aad_len);
3156IMB_DLL_EXPORT void
3158 struct gcm_context_data *context_data,
3159 const uint8_t *iv,
3160 uint8_t const *aad, uint64_t aad_len);
3173IMB_DLL_EXPORT void
3174aes_gcm_init_192_sse(const struct gcm_key_data *key_data,
3175 struct gcm_context_data *context_data,
3176 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len);
3180IMB_DLL_EXPORT void
3182 struct gcm_context_data *context_data,
3183 const uint8_t *iv,
3184 uint8_t const *aad, uint64_t aad_len);
3188IMB_DLL_EXPORT void
3190 struct gcm_context_data *context_data,
3191 const uint8_t *iv,
3192 uint8_t const *aad, uint64_t aad_len);
3205IMB_DLL_EXPORT void
3206aes_gcm_init_256_sse(const struct gcm_key_data *key_data,
3207 struct gcm_context_data *context_data,
3208 const uint8_t *iv, uint8_t const *aad, uint64_t aad_len);
3212IMB_DLL_EXPORT void
3214 struct gcm_context_data *context_data,
3215 const uint8_t *iv,
3216 uint8_t const *aad, uint64_t aad_len);
3220IMB_DLL_EXPORT void
3222 struct gcm_context_data *context_data,
3223 const uint8_t *iv,
3224 uint8_t const *aad, uint64_t aad_len);
3225
3235IMB_DLL_EXPORT void
3237 struct gcm_context_data *context_data,
3238 uint8_t *out, const uint8_t *in, uint64_t len);
3242IMB_DLL_EXPORT void
3244 struct gcm_context_data *context_data,
3245 uint8_t *out, const uint8_t *in, uint64_t len);
3249IMB_DLL_EXPORT void
3251 struct gcm_context_data *context_data,
3252 uint8_t *out, const uint8_t *in, uint64_t len);
3253
3263IMB_DLL_EXPORT void
3265 struct gcm_context_data *context_data,
3266 uint8_t *out, const uint8_t *in, uint64_t len);
3270IMB_DLL_EXPORT void
3272 struct gcm_context_data *context_data,
3273 uint8_t *out, const uint8_t *in, uint64_t len);
3277IMB_DLL_EXPORT void
3279 struct gcm_context_data *context_data,
3280 uint8_t *out, const uint8_t *in, uint64_t len);
3281
3291IMB_DLL_EXPORT void
3293 struct gcm_context_data *context_data,
3294 uint8_t *out, const uint8_t *in, uint64_t len);
3298IMB_DLL_EXPORT void
3300 struct gcm_context_data *context_data,
3301 uint8_t *out, const uint8_t *in, uint64_t len);
3305IMB_DLL_EXPORT void
3307 struct gcm_context_data *context_data,
3308 uint8_t *out, const uint8_t *in, uint64_t len);
3309
3319IMB_DLL_EXPORT void
3321 struct gcm_context_data *context_data,
3322 uint8_t *out, const uint8_t *in, uint64_t len);
3326IMB_DLL_EXPORT void
3328 struct gcm_context_data *context_data,
3329 uint8_t *out, const uint8_t *in, uint64_t len);
3333IMB_DLL_EXPORT void
3335 struct gcm_context_data *context_data,
3336 uint8_t *out, const uint8_t *in, uint64_t len);
3337
3347IMB_DLL_EXPORT void
3349 struct gcm_context_data *context_data,
3350 uint8_t *out, const uint8_t *in, uint64_t len);
3354IMB_DLL_EXPORT void
3356 struct gcm_context_data *context_data,
3357 uint8_t *out, const uint8_t *in, uint64_t len);
3361IMB_DLL_EXPORT void
3363 struct gcm_context_data *context_data,
3364 uint8_t *out, const uint8_t *in, uint64_t len);
3365
3375IMB_DLL_EXPORT void
3377 struct gcm_context_data *context_data,
3378 uint8_t *out, const uint8_t *in, uint64_t len);
3382IMB_DLL_EXPORT void
3384 struct gcm_context_data *context_data,
3385 uint8_t *out, const uint8_t *in, uint64_t len);
3389IMB_DLL_EXPORT void
3391 struct gcm_context_data *context_data,
3392 uint8_t *out, const uint8_t *in, uint64_t len);
3393
3404IMB_DLL_EXPORT void
3406 struct gcm_context_data *context_data,
3407 uint8_t *auth_tag, uint64_t auth_tag_len);
3411IMB_DLL_EXPORT void
3413 struct gcm_context_data *context_data,
3414 uint8_t *auth_tag, uint64_t auth_tag_len);
3418IMB_DLL_EXPORT void
3420 struct gcm_context_data *context_data,
3421 uint8_t *auth_tag, uint64_t auth_tag_len);
3422
3433IMB_DLL_EXPORT void
3435 struct gcm_context_data *context_data,
3436 uint8_t *auth_tag, uint64_t auth_tag_len);
3440IMB_DLL_EXPORT void
3442 struct gcm_context_data *context_data,
3443 uint8_t *auth_tag, uint64_t auth_tag_len);
3447IMB_DLL_EXPORT void
3449 struct gcm_context_data *context_data,
3450 uint8_t *auth_tag, uint64_t auth_tag_len);
3451
3462IMB_DLL_EXPORT void
3464 struct gcm_context_data *context_data,
3465 uint8_t *auth_tag, uint64_t auth_tag_len);
3469IMB_DLL_EXPORT void
3471 struct gcm_context_data *context_data,
3472 uint8_t *auth_tag, uint64_t auth_tag_len);
3476IMB_DLL_EXPORT void
3478 struct gcm_context_data *context_data,
3479 uint8_t *auth_tag, uint64_t auth_tag_len);
3480
3491IMB_DLL_EXPORT void
3493 struct gcm_context_data *context_data,
3494 uint8_t *auth_tag, uint64_t auth_tag_len);
3498IMB_DLL_EXPORT void
3500 struct gcm_context_data *context_data,
3501 uint8_t *auth_tag, uint64_t auth_tag_len);
3505IMB_DLL_EXPORT void
3507 struct gcm_context_data *context_data,
3508 uint8_t *auth_tag, uint64_t auth_tag_len);
3509
3520IMB_DLL_EXPORT void
3522 struct gcm_context_data *context_data,
3523 uint8_t *auth_tag, uint64_t auth_tag_len);
3527IMB_DLL_EXPORT void
3529 struct gcm_context_data *context_data,
3530 uint8_t *auth_tag, uint64_t auth_tag_len);
3534IMB_DLL_EXPORT void
3536 struct gcm_context_data *context_data,
3537 uint8_t *auth_tag, uint64_t auth_tag_len);
3538
3549IMB_DLL_EXPORT void
3551 struct gcm_context_data *context_data,
3552 uint8_t *auth_tag, uint64_t auth_tag_len);
3556IMB_DLL_EXPORT void
3558 struct gcm_context_data *context_data,
3559 uint8_t *auth_tag, uint64_t auth_tag_len);
3563IMB_DLL_EXPORT void
3565 struct gcm_context_data *context_data,
3566 uint8_t *auth_tag, uint64_t auth_tag_len);
3567
3577
3582
3587
3597
3602
3607
3617
3622
3627
3638 struct gcm_key_data *key_data);
3643 struct gcm_key_data *key_data);
3648 struct gcm_key_data *key_data);
3659 struct gcm_key_data *key_data);
3664 struct gcm_key_data *key_data);
3669 struct gcm_key_data *key_data);
3680 struct gcm_key_data *key_data);
3685 struct gcm_key_data *key_data);
3690 struct gcm_key_data *key_data);
3691
3704IMB_DLL_EXPORT int zuc_eea3_iv_gen(const uint32_t count,
3705 const uint8_t bearer,
3706 const uint8_t dir,
3707 void *iv_ptr);
3720IMB_DLL_EXPORT int zuc_eia3_iv_gen(const uint32_t count,
3721 const uint8_t bearer,
3722 const uint8_t dir,
3723 void *iv_ptr);
3724
3737IMB_DLL_EXPORT int kasumi_f8_iv_gen(const uint32_t count,
3738 const uint8_t bearer,
3739 const uint8_t dir,
3740 void *iv_ptr);
3752IMB_DLL_EXPORT int kasumi_f9_iv_gen(const uint32_t count,
3753 const uint32_t fresh,
3754 void *iv_ptr);
3755
3771IMB_DLL_EXPORT int snow3g_f8_iv_gen(const uint32_t count,
3772 const uint8_t bearer,
3773 const uint8_t dir,
3774 void *iv_ptr);
3790IMB_DLL_EXPORT int snow3g_f9_iv_gen(const uint32_t count,
3791 const uint32_t fresh,
3792 const uint8_t dir,
3793 void *iv_ptr);
3800IMB_DLL_EXPORT void imb_clear_mem(void *mem, const size_t size);
3801
3823IMB_DLL_EXPORT void
3825 const struct gcm_key_data *key_data,
3826 const IMB_KEY_SIZE_BYTES key_size,
3827 const IMB_CIPHER_DIRECTION cipher_dir,
3828 void *dst_ptr_array[],
3829 const void * const src_ptr_array[],
3830 const uint64_t len_array[],
3831 const void * const iv_ptr_array[],
3832 const void * const aad_ptr_array[],
3833 const uint64_t aad_len,
3834 void *tag_ptr_array[],
3835 const uint64_t tag_len,
3836 const uint64_t num_packets);
3837
3852IMB_DLL_EXPORT void
3854 const void *exp_key_data,
3855 void *dst_ptr_array[],
3856 const void * const src_ptr_array[],
3857 const uint64_t num_packets,
3858 const IMB_KEY_SIZE_BYTES key_size);
3859
3900
3901#ifdef __cplusplus
3902}
3903#endif
3904
3905#endif /* IMB_IPSEC_MB_H */
IMB_DLL_EXPORT void aes_gcm_enc_128_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT IMB_JOB * get_next_job_sse(IMB_MGR *state)
Get next available job.
#define KASUMI_KEY_SCHEDULE_SIZE
Definition intel-ipsec-mb.h:558
IMB_DLL_EXPORT void aes_gcm_pre_256_avx_gen4(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-256 key data.
IMB_DLL_EXPORT void aes_gcm_dec_128_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT void aes_gcm_init_256_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-256 Encryption.
void(* zuc_eea3_1_buffer_t)(const void *, const void *, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:770
IMB_DLL_EXPORT void aes_keyexp_192_enc_sse(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_gcm_dec_256_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-256 encryption message.
#define IMB_GCM_ENC_KEY_LEN
Definition intel-ipsec-mb.h:628
IMB_DLL_EXPORT void aes_gcm_dec_192_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT void aes_gcm_enc_192_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Encryption.
void(* snow3g_f8_8_buffer_multikey_t)(const snow3g_key_schedule_t *const [], const void *const [], const void *const [], void *[], const uint32_t[])
Definition intel-ipsec-mb.h:879
void(* aes_gcm_pre_t)(const void *, struct gcm_key_data *)
Definition intel-ipsec-mb.h:747
void(* ghash_t)(const struct gcm_key_data *, const void *, const uint64_t, void *, const uint64_t)
Definition intel-ipsec-mb.h:767
IMB_DLL_EXPORT void aes_xcbc_expand_key_avx512(const void *key, void *k1_exp, void *k2, void *k3)
IMB_DLL_EXPORT void aes_gcm_dec_256_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT void aes_gcm_enc_192_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT void aes_gcm_precomp_256_sse(struct gcm_key_data *key_data)
Precomputation of AES-GCM-256 HashKey constants.
IMB_DLL_EXPORT void aes_gcm_pre_256_sse(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-256 key data.
void(* chacha_poly_finalize_t)(struct chacha20_poly1305_context_data *, void *, const uint64_t)
Definition intel-ipsec-mb.h:765
IMB_DLL_EXPORT void aes_keyexp_192_avx512(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_KEY_SIZE_BYTES
Definition intel-ipsec-mb.h:348
@ IMB_KEY_192_BYTES
Definition intel-ipsec-mb.h:351
@ IMB_KEY_64_BYTES
Definition intel-ipsec-mb.h:349
@ IMB_KEY_256_BYTES
Definition intel-ipsec-mb.h:352
@ IMB_KEY_128_BYTES
Definition intel-ipsec-mb.h:350
IMB_DLL_EXPORT void aes_keyexp_256_enc_avx(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_gcm_dec_128_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT void free_mb_mgr(IMB_MGR *ptr)
Frees memory allocated previously by alloc_mb_mgr()
IMB_DLL_EXPORT IMB_JOB * get_completed_job_sse(IMB_MGR *state)
Get next completed job.
IMB_DLL_EXPORT void aes_keyexp_128_enc_sse(const void *key, void *enc_exp_keys)
void(* snow3g_f8_1_buffer_t)(const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:844
IMB_DLL_EXPORT void aes_gcm_precomp_256_avx_gen2(struct gcm_key_data *key_data)
Precomputation of AES-GCM-256 HashKey constants.
IMB_DLL_EXPORT void init_mb_mgr_sse(IMB_MGR *state)
Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT void init_mb_mgr_auto(IMB_MGR *state, IMB_ARCH *arch)
Automatically initialize most performant Multi-buffer manager based on CPU features.
IMB_DLL_EXPORT int snow3g_f8_iv_gen(const uint32_t count, const uint8_t bearer, const uint8_t dir, void *iv_ptr)
Generation of SNOW3G F8 Initialization Vector.
IMB_DLL_EXPORT void aes_gcm_pre_128_avx_gen2(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-128 key data.
void(* zuc_eea3_n_buffer_t)(const void *const *, const void *const *, const void *const *, void **, const uint32_t *, const uint32_t)
Definition intel-ipsec-mb.h:777
void(* aes_gmac_init_t)(const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)
Definition intel-ipsec-mb.h:749
IMB_DLL_EXPORT void aes_keyexp_128_sse(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT IMB_JOB * get_next_job_avx(IMB_MGR *state)
Get next available job.
IMB_DLL_EXPORT void aes_gcm_enc_256_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_sse(IMB_MGR *state)
Submit job for processing without validating.
IMB_DLL_EXPORT void aes_keyexp_256_avx512(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT int kasumi_f8_iv_gen(const uint32_t count, const uint8_t bearer, const uint8_t dir, void *iv_ptr)
Generation of KASUMI F8 Initialization Vector.
IMB_DLL_EXPORT IMB_MGR * imb_set_pointers_mb_mgr(void *ptr, const uint64_t flags, const unsigned reset_mgr)
Initializes IMB_MGR pointers to out-of-order managers with use of externally allocated memory.
IMB_DLL_EXPORT void aes_keyexp_192_avx(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_CIPHER_MODE
Definition intel-ipsec-mb.h:261
@ IMB_CIPHER_DES
Definition intel-ipsec-mb.h:268
@ IMB_CIPHER_NULL
Definition intel-ipsec-mb.h:264
@ IMB_CIPHER_CBC
Definition intel-ipsec-mb.h:262
@ IMB_CIPHER_GCM
Definition intel-ipsec-mb.h:266
@ IMB_CIPHER_ECB
Definition intel-ipsec-mb.h:273
@ IMB_CIPHER_ZUC_EEA3
Definition intel-ipsec-mb.h:275
@ IMB_CIPHER_CHACHA20
Definition intel-ipsec-mb.h:279
@ IMB_CIPHER_KASUMI_UEA1_BITLEN
Definition intel-ipsec-mb.h:277
@ IMB_CIPHER_CHACHA20_POLY1305_SGL
Definition intel-ipsec-mb.h:281
@ IMB_CIPHER_CUSTOM
Definition intel-ipsec-mb.h:267
@ IMB_CIPHER_GCM_SGL
Definition intel-ipsec-mb.h:284
@ IMB_CIPHER_CNTR
Definition intel-ipsec-mb.h:263
@ IMB_CIPHER_DES3
Definition intel-ipsec-mb.h:271
@ IMB_CIPHER_CNTR_BITLEN
Definition intel-ipsec-mb.h:274
@ IMB_CIPHER_CBCS_1_9
Definition intel-ipsec-mb.h:278
@ IMB_CIPHER_NUM
Definition intel-ipsec-mb.h:285
@ IMB_CIPHER_CCM
Definition intel-ipsec-mb.h:270
@ IMB_CIPHER_SNOW3G_UEA2_BITLEN
Definition intel-ipsec-mb.h:276
@ IMB_CIPHER_PON_AES_CNTR
Definition intel-ipsec-mb.h:272
@ IMB_CIPHER_CHACHA20_POLY1305
Definition intel-ipsec-mb.h:280
@ IMB_CIPHER_SNOW_V_AEAD
Definition intel-ipsec-mb.h:283
@ IMB_CIPHER_DOCSIS_SEC_BPI
Definition intel-ipsec-mb.h:265
@ IMB_CIPHER_DOCSIS_DES
Definition intel-ipsec-mb.h:269
@ IMB_CIPHER_SNOW_V
Definition intel-ipsec-mb.h:282
IMB_DLL_EXPORT void aes_gcm_pre_128_avx_gen4(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-128 key data.
IMB_DLL_EXPORT void aes_gcm_init_256_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-256 Encryption.
void(* snow3g_f8_n_buffer_multikey_t)(const snow3g_key_schedule_t *const [], const void *const [], const void *const [], void *[], const uint32_t[], const uint32_t)
Definition intel-ipsec-mb.h:890
IMB_DLL_EXPORT void aes_gcm_enc_128_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT IMB_JOB * get_next_job_avx512(IMB_MGR *state)
Get next available job.
IMB_JOB *(* submit_job_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:697
void(* chacha_poly_enc_dec_update_t)(const void *, struct chacha20_poly1305_context_data *, void *, const void *, const uint64_t)
Definition intel-ipsec-mb.h:762
IMB_DLL_EXPORT void aes_gcm_dec_128_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT const char * imb_get_version_str(void)
Get library version in string format.
IMB_DLL_EXPORT void aes_gcm_enc_256_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Encryption.
IMB_DLL_EXPORT void aes_keyexp_192_enc_avx2(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_gcm_enc_256_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Encryption.
IMB_DLL_EXPORT void aes_gcm_precomp_128_sse(struct gcm_key_data *key_data)
Precomputation of AES-GCM-128 HashKey constants.
IMB_DLL_EXPORT void aes_gcm_enc_192_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT int zuc_eea3_iv_gen(const uint32_t count, const uint8_t bearer, const uint8_t dir, void *iv_ptr)
Generation of ZUC-EEA3 Initialization Vector.
IMB_DLL_EXPORT IMB_JOB * get_next_job_avx2(IMB_MGR *state)
Get next available job.
IMB_CHAIN_ORDER
Definition intel-ipsec-mb.h:343
@ IMB_ORDER_HASH_CIPHER
Definition intel-ipsec-mb.h:345
@ IMB_ORDER_CIPHER_HASH
Definition intel-ipsec-mb.h:344
void(* chacha_poly_init_t)(const void *, struct chacha20_poly1305_context_data *, const void *, const void *, const uint64_t)
Definition intel-ipsec-mb.h:759
IMB_DLL_EXPORT void aes_cmac_subkey_gen_sse(const void *key_exp, void *key1, void *key2)
void(* snow3g_f8_2_buffer_t)(const snow3g_key_schedule_t *, const void *, const void *, const void *, void *, const uint32_t, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:852
uint32_t(* submit_hash_burst_t)(struct IMB_MGR *, struct IMB_JOB *, const uint32_t, const IMB_HASH_ALG hash)
Definition intel-ipsec-mb.h:710
IMB_DLL_EXPORT void aes_gcm_enc_192_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT void aes_keyexp_128_avx2(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void aes_keyexp_256_sse(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void aes_gcm_enc_192_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-192 encryption message.
void(* kasumi_f8_n_buffer_t)(const kasumi_key_sched_t *, const uint64_t *, const void *const *, void **, const uint32_t *, const uint32_t)
Definition intel-ipsec-mb.h:818
IMB_DLL_EXPORT uint32_t queue_size_avx512(IMB_MGR *state)
Get number of jobs queued to be processed.
IMB_DLL_EXPORT void aes_gcm_enc_256_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Encryption.
IMB_DLL_EXPORT void aes_keyexp_192_enc_avx(const void *key, void *enc_exp_keys)
void(* kasumi_f8_3_buffer_t)(const kasumi_key_sched_t *, const uint64_t, const uint64_t, const uint64_t, const void *, void *, const void *, void *, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:803
IMB_DLL_EXPORT void aes_gcm_enc_192_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-192 encryption message.
uint32_t(* crc32_fn_t)(const void *, const uint64_t)
Definition intel-ipsec-mb.h:908
IMB_DLL_EXPORT void aes_gcm_dec_192_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-192 encryption message.
#define IMB_GCM_BLOCK_LEN
Definition intel-ipsec-mb.h:570
IMB_JOB *(* get_next_job_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:696
IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx512(IMB_MGR *state)
Submit job for processing without validating.
IMB_DLL_EXPORT void aes_keyexp_256_avx(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void aes_gcm_init_192_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-192 Encryption.
IMB_DLL_EXPORT void aes_gcm_dec_192_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Decryption.
IMB_DLL_EXPORT void aes_gcm_pre_128_sse(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-128 key data.
IMB_DLL_EXPORT void aes_gcm_enc_192_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-192 encryption message.
int(* des_keysched_t)(uint64_t *, const void *)
Definition intel-ipsec-mb.h:719
void(* keyexp_t)(const void *, void *, void *)
Definition intel-ipsec-mb.h:714
void(* snow3g_f8_8_buffer_t)(const snow3g_key_schedule_t *, const void *, const void *, const void *, const void *, const void *, const void *, const void *, const void *, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:865
IMB_DLL_EXPORT void aes_gcm_dec_192_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT const char * imb_get_strerror(int errnum)
API to get description for errnum.
IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx(const void *key_exp, void *key1, void *key2)
void(* aes_gcm_init_var_iv_t)(const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t, const uint8_t *, const uint64_t)
Definition intel-ipsec-mb.h:736
IMB_DLL_EXPORT void aes_keyexp_128_enc_avx512(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx2(const void *key_exp, void *key1, void *key2)
IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx512(IMB_MGR *state)
Get next completed job.
void(* snow3g_f8_n_buffer_t)(const snow3g_key_schedule_t *, const void *const [], const void *const [], void *[], const uint32_t[], const uint32_t)
Definition intel-ipsec-mb.h:883
IMB_SGL_STATE
Definition intel-ipsec-mb.h:355
@ IMB_SGL_UPDATE
Definition intel-ipsec-mb.h:357
@ IMB_SGL_ALL
Definition intel-ipsec-mb.h:359
@ IMB_SGL_COMPLETE
Definition intel-ipsec-mb.h:358
@ IMB_SGL_INIT
Definition intel-ipsec-mb.h:356
IMB_DLL_EXPORT void aes_gcm_pre_192_avx_gen2(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-192 key data.
IMB_DLL_EXPORT void aes_gcm_precomp_192_avx_gen4(struct gcm_key_data *key_data)
Precomputation of AES-GCM-192 HashKey constants.
IMB_DLL_EXPORT void des_cfb_one(void *out, const void *in, const uint64_t *iv, const uint64_t *ks, const int len)
DES-CFB Encrypt/Decrypt up to one block.
IMB_DLL_EXPORT void init_mb_mgr_avx2(IMB_MGR *state)
Initialize Multi-Buffer Manager structure.
void(* aes_gcm_enc_dec_t)(const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, uint8_t const *, uint64_t, const uint8_t *, uint8_t const *, uint64_t, uint8_t *, uint64_t)
Definition intel-ipsec-mb.h:722
IMB_DLL_EXPORT uint64_t imb_get_feature_flags(void)
Retrieves the bitmask with the features supported by the library, without having to allocate/initiali...
IMB_DLL_EXPORT void aes_keyexp_192_enc_avx512(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx2(IMB_MGR *state)
Submit job for processing without validating.
IMB_DLL_EXPORT void aes_gcm_precomp_192_sse(struct gcm_key_data *key_data)
Precomputation of AES-GCM-192 HashKey constants.
IMB_DLL_EXPORT void aes_gcm_dec_256_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx512(const void *key_exp, void *key1, void *key2)
#define IMB_GCM_KEY_SETS
Definition intel-ipsec-mb.h:629
IMB_DLL_EXPORT void aes_keyexp_256_enc_avx2(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_gcm_init_192_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-192 Encryption.
IMB_DLL_EXPORT IMB_JOB * submit_job_avx512(IMB_MGR *state)
Submit job for processing after validating.
IMB_DLL_EXPORT void aes_keyexp_192_sse(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT IMB_JOB * submit_job_sse(IMB_MGR *state)
Submit job for processing after validating.
IMB_DLL_EXPORT void aes_gcm_dec_256_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT void aes_gcm_dec_128_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT int imb_get_errno(IMB_MGR *mb_mgr)
API to get error status.
IMB_DLL_EXPORT void aes_gcm_init_128_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-128 Encryption.
IMB_DLL_EXPORT void md5_one_block_avx(const void *data, void *digest)
IMB_DLL_EXPORT void aes_gcm_enc_128_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-128 encryption message.
void(* snow3g_f8_1_buffer_bit_t)(const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t, const uint32_t)
Definition intel-ipsec-mb.h:848
int(* kasumi_init_f8_key_sched_t)(const void *, kasumi_key_sched_t *)
Definition intel-ipsec-mb.h:829
void(* zuc_eea3_4_buffer_t)(const void *const *, const void *const *, const void *const *, void **, const uint32_t *)
Definition intel-ipsec-mb.h:773
IMB_DLL_EXPORT void aes_gcm_enc_256_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT uint32_t queue_size_avx(IMB_MGR *state)
Get number of jobs queued to be processed.
IMB_DLL_EXPORT uint32_t queue_size_sse(IMB_MGR *state)
Get number of jobs queued to be processed.
void(* kasumi_f8_1_buffer_bit_t)(const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t, const uint32_t)
Definition intel-ipsec-mb.h:793
struct kasumi_key_sched_s kasumi_key_sched_t
IMB_HASH_ALG
Definition intel-ipsec-mb.h:293
@ IMB_AUTH_AES_CMAC_256
Definition intel-ipsec-mb.h:320
@ IMB_AUTH_AES_XCBC
Definition intel-ipsec-mb.h:299
@ IMB_AUTH_ZUC_EIA3_BITLEN
Definition intel-ipsec-mb.h:313
@ IMB_AUTH_AES_GMAC_128
Definition intel-ipsec-mb.h:317
@ IMB_AUTH_CRC16_X25
Definition intel-ipsec-mb.h:332
@ IMB_AUTH_NULL
Definition intel-ipsec-mb.h:301
@ IMB_AUTH_PON_CRC_BIP
Definition intel-ipsec-mb.h:312
@ IMB_AUTH_SHA_224
Definition intel-ipsec-mb.h:307
@ IMB_AUTH_CRC24_LTE_A
Definition intel-ipsec-mb.h:330
@ IMB_AUTH_CRC32_ETHERNET_FCS
Definition intel-ipsec-mb.h:327
@ IMB_AUTH_KASUMI_UIA1
Definition intel-ipsec-mb.h:316
@ IMB_AUTH_HMAC_SHA_1
Definition intel-ipsec-mb.h:294
@ IMB_AUTH_SHA_256
Definition intel-ipsec-mb.h:308
@ IMB_AUTH_SNOW3G_UIA2_BITLEN
Definition intel-ipsec-mb.h:315
@ IMB_AUTH_SNOW_V_AEAD
Definition intel-ipsec-mb.h:325
@ IMB_AUTH_CRC32_SCTP
Definition intel-ipsec-mb.h:328
@ IMB_AUTH_NUM
Definition intel-ipsec-mb.h:340
@ IMB_AUTH_HMAC_SHA_256
Definition intel-ipsec-mb.h:296
@ IMB_AUTH_GHASH
Definition intel-ipsec-mb.h:339
@ IMB_AUTH_CUSTOM
Definition intel-ipsec-mb.h:303
@ IMB_AUTH_CHACHA20_POLY1305_SGL
Definition intel-ipsec-mb.h:323
@ IMB_AUTH_CRC24_LTE_B
Definition intel-ipsec-mb.h:331
@ IMB_AUTH_ZUC256_EIA3_BITLEN
Definition intel-ipsec-mb.h:324
@ IMB_AUTH_AES_CCM
Definition intel-ipsec-mb.h:304
@ IMB_AUTH_CRC6_IUUP_HEADER
Definition intel-ipsec-mb.h:338
@ IMB_AUTH_POLY1305
Definition intel-ipsec-mb.h:321
@ IMB_AUTH_MD5
Definition intel-ipsec-mb.h:300
@ IMB_AUTH_SHA_512
Definition intel-ipsec-mb.h:310
@ IMB_AUTH_AES_GMAC
Definition intel-ipsec-mb.h:302
@ IMB_AUTH_CRC16_FP_DATA
Definition intel-ipsec-mb.h:333
@ IMB_AUTH_AES_CMAC_BITLEN
Definition intel-ipsec-mb.h:311
@ IMB_AUTH_CRC11_FP_HEADER
Definition intel-ipsec-mb.h:334
@ IMB_AUTH_CHACHA20_POLY1305
Definition intel-ipsec-mb.h:322
@ IMB_AUTH_CRC7_FP_HEADER
Definition intel-ipsec-mb.h:337
@ IMB_AUTH_CRC10_IUUP_DATA
Definition intel-ipsec-mb.h:335
@ IMB_AUTH_HMAC_SHA_224
Definition intel-ipsec-mb.h:295
@ IMB_AUTH_CRC32_WIMAX_OFDMA_DATA
Definition intel-ipsec-mb.h:329
@ IMB_AUTH_HMAC_SHA_512
Definition intel-ipsec-mb.h:298
@ IMB_AUTH_GCM_SGL
Definition intel-ipsec-mb.h:326
@ IMB_AUTH_SHA_1
Definition intel-ipsec-mb.h:306
@ IMB_AUTH_AES_GMAC_192
Definition intel-ipsec-mb.h:318
@ IMB_AUTH_DOCSIS_CRC32
Definition intel-ipsec-mb.h:314
@ IMB_AUTH_CRC8_WIMAX_OFDMA_HCS
Definition intel-ipsec-mb.h:336
@ IMB_AUTH_AES_GMAC_256
Definition intel-ipsec-mb.h:319
@ IMB_AUTH_HMAC_SHA_384
Definition intel-ipsec-mb.h:297
@ IMB_AUTH_AES_CMAC
Definition intel-ipsec-mb.h:305
@ IMB_AUTH_SHA_384
Definition intel-ipsec-mb.h:309
IMB_DLL_EXPORT void aes_keyexp_128_enc_avx2(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void aes_gcm_enc_256_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT IMB_JOB * submit_job_avx2(IMB_MGR *state)
Submit job for processing after validating.
IMB_DLL_EXPORT void imb_quic_hp_aes_ecb(IMB_MGR *state, const void *exp_key_data, void *dst_ptr_array[], const void *const src_ptr_array[], const uint64_t num_packets, const IMB_KEY_SIZE_BYTES key_size)
Batch of AES-ECB encrypt/decrypt operations with the same key.
void(* kasumi_f8_1_buffer_t)(const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:790
IMB_DLL_EXPORT uint32_t queue_size_avx2(IMB_MGR *state)
Get number of jobs queued to be processed.
void(* kasumi_f9_1_buffer_t)(const kasumi_key_sched_t *, const void *, const uint32_t, void *)
Definition intel-ipsec-mb.h:826
int(* kasumi_init_f9_key_sched_t)(const void *, kasumi_key_sched_t *)
Definition intel-ipsec-mb.h:831
IMB_DLL_EXPORT void md5_one_block_avx2(const void *data, void *digest)
void(* aes_gcm_enc_dec_finalize_t)(const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, uint64_t)
Definition intel-ipsec-mb.h:743
IMB_DLL_EXPORT void aes_gcm_dec_128_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Decryption.
IMB_DLL_EXPORT void aes_gcm_init_128_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-128 Encryption.
IMB_DLL_EXPORT void aes_gcm_dec_128_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT void imb_quic_aes_gcm(IMB_MGR *state, const struct gcm_key_data *key_data, const IMB_KEY_SIZE_BYTES key_size, const IMB_CIPHER_DIRECTION cipher_dir, void *dst_ptr_array[], const void *const src_ptr_array[], const uint64_t len_array[], const void *const iv_ptr_array[], const void *const aad_ptr_array[], const uint64_t aad_len, void *tag_ptr_array[], const uint64_t tag_len, const uint64_t num_packets)
Batch of GCM encrypt/decrypt operations with the same key.
IMB_DLL_EXPORT int snow3g_f9_iv_gen(const uint32_t count, const uint32_t fresh, const uint8_t dir, void *iv_ptr)
Generation of SNOW3G F9 Initialization Vector.
IMB_DLL_EXPORT IMB_JOB * submit_job_avx(IMB_MGR *state)
Submit job for processing after validating.
void(* zuc_eia3_1_buffer_t)(const void *, const void *, const void *, const uint32_t, uint32_t *)
Definition intel-ipsec-mb.h:781
IMB_DLL_EXPORT IMB_JOB * flush_job_sse(IMB_MGR *state)
Force processing until next job in queue is completed.
#define IMB_DLL_EXPORT
Definition intel-ipsec-mb.h:86
uint32_t(* queue_size_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:700
IMB_DLL_EXPORT void init_mb_mgr_avx512(IMB_MGR *state)
Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT int des_key_schedule(uint64_t *ks, const void *key)
DES key schedule set up.
IMB_DLL_EXPORT void aes_gcm_init_256_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-256 Encryption.
IMB_DLL_EXPORT void aes_gcm_enc_192_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Encryption.
IMB_DLL_EXPORT void aes_gcm_dec_256_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Decryption.
IMB_DLL_EXPORT void aes_keyexp_128_avx512(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx(IMB_MGR *state)
Get next completed job.
IMB_DLL_EXPORT void md5_one_block_sse(const void *data, void *digest)
IMB_DLL_EXPORT void aes_keyexp_256_enc_avx512(const void *key, void *enc_exp_keys)
IMB_ERR
Definition intel-ipsec-mb.h:192
@ IMB_ERR_NULL_JOB
Definition intel-ipsec-mb.h:240
@ IMB_ERR_JOB_NULL_SGL_CTX
Definition intel-ipsec-mb.h:212
@ IMB_ERR_AAD_LEN
Definition intel-ipsec-mb.h:227
@ IMB_ERR_NULL_CTX
Definition intel-ipsec-mb.h:230
@ IMB_ERR_JOB_NULL_IV
Definition intel-ipsec-mb.h:198
@ IMB_ERR_JOB_NULL_HMAC_IPAD
Definition intel-ipsec-mb.h:233
@ IMB_ERR_SELFTEST
Definition intel-ipsec-mb.h:245
@ IMB_ERR_NULL_DST
Definition intel-ipsec-mb.h:216
@ IMB_ERR_JOB_AUTH_TAG_LEN
Definition intel-ipsec-mb.h:205
@ IMB_ERR_NULL_AUTH
Definition intel-ipsec-mb.h:220
@ IMB_ERR_JOB_SRC_OFFSET
Definition intel-ipsec-mb.h:207
@ IMB_ERR_SRC_OFFSET
Definition intel-ipsec-mb.h:228
@ IMB_ERR_JOB_NULL_KEY
Definition intel-ipsec-mb.h:197
@ IMB_ERR_NULL_SRC
Definition intel-ipsec-mb.h:215
@ IMB_ERR_JOB_AAD_LEN
Definition intel-ipsec-mb.h:206
@ IMB_ERR_JOB_IV_LEN
Definition intel-ipsec-mb.h:203
@ IMB_ERR_NULL_EXP_KEY
Definition intel-ipsec-mb.h:218
@ IMB_ERR_JOB_NULL_AAD
Definition intel-ipsec-mb.h:200
@ IMB_ERR_MIN
Definition intel-ipsec-mb.h:193
@ IMB_ERR_BURST_SUITE_ID
Definition intel-ipsec-mb.h:246
@ IMB_ERR_NO_AESNI_EMU
Definition intel-ipsec-mb.h:231
@ IMB_ERR_JOB_NULL_SRC
Definition intel-ipsec-mb.h:195
@ IMB_ERR_QUEUE_SPACE
Definition intel-ipsec-mb.h:241
@ IMB_ERR_JOB_NULL_AUTH
Definition intel-ipsec-mb.h:199
@ IMB_ERR_JOB_NULL_DST
Definition intel-ipsec-mb.h:196
@ IMB_ERR_CIPH_MODE
Definition intel-ipsec-mb.h:209
@ IMB_ERR_NULL_KEY
Definition intel-ipsec-mb.h:217
@ IMB_ERR_JOB_NULL_XCBC_K1_EXP
Definition intel-ipsec-mb.h:234
@ IMB_ERR_JOB_AUTH_LEN
Definition intel-ipsec-mb.h:202
@ IMB_ERR_AUTH_TAG_LEN
Definition intel-ipsec-mb.h:226
@ IMB_ERR_JOB_NULL_GHASH_INIT_TAG
Definition intel-ipsec-mb.h:238
@ IMB_ERR_HASH_ALGO
Definition intel-ipsec-mb.h:210
@ IMB_ERR_KEY_LEN
Definition intel-ipsec-mb.h:225
@ IMB_ERR_JOB_NULL_AUTH_KEY
Definition intel-ipsec-mb.h:211
@ IMB_ERR_JOB_NULL_NEXT_IV
Definition intel-ipsec-mb.h:213
@ IMB_ERR_NULL_BURST
Definition intel-ipsec-mb.h:242
@ IMB_ERR_NULL_MBMGR
Definition intel-ipsec-mb.h:194
@ IMB_ERR_NULL_AUTH_KEY
Definition intel-ipsec-mb.h:229
@ IMB_ERR_IV_LEN
Definition intel-ipsec-mb.h:224
@ IMB_ERR_CIPH_LEN
Definition intel-ipsec-mb.h:222
@ IMB_ERR_MISSING_CPUFLAGS_INIT_MGR
Definition intel-ipsec-mb.h:239
@ IMB_ERR_MAX
Definition intel-ipsec-mb.h:248
@ IMB_ERR_JOB_CHAIN_ORDER
Definition intel-ipsec-mb.h:208
@ IMB_ERR_JOB_NULL_HMAC_OPAD
Definition intel-ipsec-mb.h:232
@ IMB_ERR_JOB_CIPH_DIR
Definition intel-ipsec-mb.h:237
@ IMB_ERR_JOB_PON_PLI
Definition intel-ipsec-mb.h:214
@ IMB_ERR_JOB_NULL_XCBC_K2
Definition intel-ipsec-mb.h:235
@ IMB_ERR_NULL_AAD
Definition intel-ipsec-mb.h:221
@ IMB_ERR_JOB_KEY_LEN
Definition intel-ipsec-mb.h:204
@ IMB_ERR_JOB_CIPH_LEN
Definition intel-ipsec-mb.h:201
@ IMB_ERR_BURST_SIZE
Definition intel-ipsec-mb.h:243
@ IMB_ERR_BURST_OOO
Definition intel-ipsec-mb.h:244
@ IMB_ERR_JOB_NULL_XCBC_K3
Definition intel-ipsec-mb.h:236
@ IMB_ERR_NULL_IV
Definition intel-ipsec-mb.h:219
@ IMB_ERR_AUTH_LEN
Definition intel-ipsec-mb.h:223
IMB_DLL_EXPORT void aes_gcm_enc_128_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Encryption.
uint32_t(* hec_32_t)(const uint8_t *)
Definition intel-ipsec-mb.h:905
IMB_DLL_EXPORT void aes_gcm_dec_192_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-192 encryption message.
uint64_t(* hec_64_t)(const uint8_t *)
Definition intel-ipsec-mb.h:906
IMB_DLL_EXPORT void aes_gcm_pre_256_avx_gen2(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-256 key data.
void(* cmac_subkey_gen_t)(const void *, void *, void *)
Definition intel-ipsec-mb.h:715
IMB_DLL_EXPORT void aes_gcm_dec_192_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT void aes_gcm_enc_128_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Encryption.
void(* hash_one_block_t)(const void *, void *)
Definition intel-ipsec-mb.h:716
uint32_t(* burst_fn_t)(struct IMB_MGR *, const uint32_t, struct IMB_JOB **)
Definition intel-ipsec-mb.h:701
IMB_DLL_EXPORT void aes_gcm_precomp_192_avx_gen2(struct gcm_key_data *key_data)
Precomputation of AES-GCM-192 HashKey constants.
#define IMB_MAX_JOBS
Definition intel-ipsec-mb.h:978
IMB_DLL_EXPORT void aes_gcm_dec_256_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Decrypt a block of a AES-GCM-256 encryption message.
void(* aes_gcm_precomp_t)(struct gcm_key_data *)
Definition intel-ipsec-mb.h:746
IMB_DLL_EXPORT void imb_hmac_ipad_opad(struct IMB_MGR *mb_mgr, const IMB_HASH_ALG sha_type, const void *pkey, const size_t key_len, void *ipad_hash, void *opad_hash)
Ipad Opad padding for HMAC.
IMB_DLL_EXPORT void aes_gcm_pre_192_avx_gen4(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-192 key data.
IMB_DLL_EXPORT void aes_gcm_enc_256_update_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT IMB_MGR * alloc_mb_mgr(uint64_t flags)
Allocates memory for multi-buffer manager instance.
void(* aes_gmac_update_t)(const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)
Definition intel-ipsec-mb.h:752
IMB_DLL_EXPORT void aes_keyexp_192_avx2(const void *key, void *enc_exp_keys, void *dec_exp_keys)
void(* xcbc_keyexp_t)(const void *, void *, void *, void *)
Definition intel-ipsec-mb.h:718
IMB_DLL_EXPORT void aes_gcm_enc_128_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT IMB_JOB * flush_job_avx(IMB_MGR *state)
Force processing until next job in queue is completed.
IMB_CIPHER_DIRECTION
Definition intel-ipsec-mb.h:288
@ IMB_DIR_DECRYPT
Definition intel-ipsec-mb.h:290
@ IMB_DIR_ENCRYPT
Definition intel-ipsec-mb.h:289
IMB_DLL_EXPORT void aes_gcm_precomp_256_avx_gen4(struct gcm_key_data *key_data)
Precomputation of AES-GCM-256 HashKey constants.
IMB_DLL_EXPORT void aes_gcm_pre_192_sse(const void *key, struct gcm_key_data *key_data)
Pre-processes AES-GCM-192 key data.
IMB_DLL_EXPORT void aes_gcm_dec_256_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Decryption.
void(* kasumi_f9_1_buffer_user_t)(const kasumi_key_sched_t *, const uint64_t, const void *, const uint32_t, void *, const uint32_t)
Definition intel-ipsec-mb.h:822
IMB_DLL_EXPORT void aes_gcm_dec_128_finalize_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT void aes_gcm_init_192_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-192 Encryption.
IMB_DLL_EXPORT void aes_xcbc_expand_key_avx2(const void *key, void *k1_exp, void *k2, void *k3)
uint32_t(* submit_cipher_burst_t)(struct IMB_MGR *, struct IMB_JOB *, const uint32_t, const IMB_CIPHER_MODE cipher, const IMB_CIPHER_DIRECTION dir, const IMB_KEY_SIZE_BYTES key_size)
Definition intel-ipsec-mb.h:704
void(* aes_gcm_enc_dec_iv_t)(const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, uint8_t const *, const uint64_t, const uint8_t *, uint8_t const *, const uint64_t, uint8_t *, const uint64_t, const uint64_t)
Definition intel-ipsec-mb.h:727
IMB_DLL_EXPORT IMB_JOB * flush_job_avx512(IMB_MGR *state)
Force processing until next job in queue is completed.
IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx(IMB_MGR *state)
Submit job for processing without validating.
IMB_DLL_EXPORT void aes_keyexp_128_enc_avx(const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void md5_one_block_avx512(const void *data, void *digest)
IMB_DLL_EXPORT size_t imb_get_mb_mgr_size(void)
Calculates necessary memory size for IMB_MGR.
IMB_DLL_EXPORT int kasumi_f9_iv_gen(const uint32_t count, const uint32_t fresh, void *iv_ptr)
Generation of KASUMI F9 Initialization Vector.
IMB_JOB *(* get_completed_job_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:698
IMB_DLL_EXPORT void aes_gcm_init_128_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len)
Initialize a gcm_context_data structure to prepare for AES-GCM-128 Encryption.
IMB_DLL_EXPORT void aes_gcm_dec_192_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Decryption.
void(* kasumi_f8_4_buffer_t)(const kasumi_key_sched_t *, const uint64_t, const uint64_t, const uint64_t, const uint64_t, const void *, void *, const void *, void *, const void *, void *, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:810
IMB_ARCH
Definition intel-ipsec-mb.h:119
@ IMB_ARCH_AVX512
Definition intel-ipsec-mb.h:125
@ IMB_ARCH_NONE
Definition intel-ipsec-mb.h:120
@ IMB_ARCH_SSE
Definition intel-ipsec-mb.h:122
@ IMB_ARCH_NOAESNI
Definition intel-ipsec-mb.h:121
@ IMB_ARCH_AVX2
Definition intel-ipsec-mb.h:124
@ IMB_ARCH_AVX
Definition intel-ipsec-mb.h:123
@ IMB_ARCH_NUM
Definition intel-ipsec-mb.h:126
IMB_DLL_EXPORT void aes_gcm_dec_192_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Decryption.
size_t(* kasumi_key_sched_size_t)(void)
Definition intel-ipsec-mb.h:833
size_t(* snow3g_key_sched_size_t)(void)
Definition intel-ipsec-mb.h:903
IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx2(IMB_MGR *state)
Get next completed job.
void(* aes_ecb_quic_t)(const void *, const void *, void *out, uint64_t)
Definition intel-ipsec-mb.h:910
IMB_DLL_EXPORT void aes_gcm_enc_256_update_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-256 encryption message.
IMB_DLL_EXPORT uint32_t imb_set_session(IMB_MGR *state, IMB_JOB *job)
Sets up suite_id and session_id fields for selected cipher suite in provided job structure.
void(* zuc_eia3_n_buffer_t)(const void *const *, const void *const *, const void *const *, const uint32_t *, uint32_t **, const uint32_t)
Definition intel-ipsec-mb.h:784
IMB_DLL_EXPORT void aes_gcm_dec_128_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Decryption.
IMB_DLL_EXPORT void aes_gcm_precomp_128_avx_gen2(struct gcm_key_data *key_data)
Precomputation of AES-GCM-128 HashKey constants.
IMB_DLL_EXPORT void aes_gcm_enc_192_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-192 Encryption.
void(* aes_gcm_init_t)(const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, uint8_t const *, uint64_t)
Definition intel-ipsec-mb.h:733
IMB_DLL_EXPORT void aes_gcm_dec_256_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-256 encryption message.
int(* snow3g_init_key_sched_t)(const void *, snow3g_key_schedule_t *)
Definition intel-ipsec-mb.h:900
void(* snow3g_f8_4_buffer_t)(const snow3g_key_schedule_t *, const void *, const void *, const void *, const void *, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:857
IMB_DLL_EXPORT void aes_gcm_dec_128_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Decryption.
IMB_DLL_EXPORT IMB_JOB * flush_job_avx2(IMB_MGR *state)
Force processing until next job in queue is completed.
IMB_DLL_EXPORT void aes_gcm_enc_128_update_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, const uint8_t *in, uint64_t len)
Encrypt a block of a AES-GCM-128 encryption message.
IMB_DLL_EXPORT int zuc_eia3_iv_gen(const uint32_t count, const uint8_t bearer, const uint8_t dir, void *iv_ptr)
Generation of ZUC-EIA3 Initialization Vector.
struct snow3g_key_schedule_s snow3g_key_schedule_t
IMB_JOB *(* flush_job_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:699
void(* snow3g_f9_1_buffer_t)(const snow3g_key_schedule_t *, const void *, const void *, const uint64_t, void *)
Definition intel-ipsec-mb.h:896
void(* aes_cfb_t)(void *, const void *, const void *, const void *, uint64_t)
Definition intel-ipsec-mb.h:720
IMB_DLL_EXPORT void aes_keyexp_128_avx(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void imb_clear_mem(void *mem, const size_t size)
Force clearing/zeroing of memory.
IMB_DLL_EXPORT void aes_gcm_precomp_128_avx_gen4(struct gcm_key_data *key_data)
Precomputation of AES-GCM-128 HashKey constants.
IMB_DLL_EXPORT unsigned imb_get_version(void)
Get library version in numerical format.
IMB_DLL_EXPORT void init_mb_mgr_avx(IMB_MGR *state)
Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT void aes_xcbc_expand_key_sse(const void *key, void *k1_exp, void *k2, void *k3)
void(* init_mb_mgr_t)(struct IMB_MGR *)
Definition intel-ipsec-mb.h:695
void(* kasumi_f8_2_buffer_t)(const kasumi_key_sched_t *, const uint64_t, const uint64_t, const void *, void *, const uint32_t, const void *, void *, const uint32_t)
Definition intel-ipsec-mb.h:797
IMB_DLL_EXPORT void aes_keyexp_256_avx2(const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void aes_gcm_enc_128_avx_gen2(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-128 Encryption.
void(* aes_gmac_finalize_t)(const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint64_t)
Definition intel-ipsec-mb.h:755
IMB_DLL_EXPORT void aes_gcm_enc_128_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-128 encryption message.
void(* aes_gcm_enc_dec_update_t)(const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint8_t *, uint64_t)
Definition intel-ipsec-mb.h:740
IMB_DLL_EXPORT void aes_gcm_dec_192_finalize_avx_gen4(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End decryption of a AES-GCM-192 encryption message.
IMB_DLL_EXPORT void aes_keyexp_256_enc_sse(const void *key, void *enc_exp_keys)
void(* hash_fn_t)(const void *, const uint64_t, void *)
Definition intel-ipsec-mb.h:717
IMB_DLL_EXPORT void aes_gcm_enc_256_finalize_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *auth_tag, uint64_t auth_tag_len)
End encryption of a AES-GCM-256 encryption message.
IMB_STATUS
Definition intel-ipsec-mb.h:178
@ IMB_STATUS_ERROR
Definition intel-ipsec-mb.h:186
@ IMB_STATUS_COMPLETED
Definition intel-ipsec-mb.h:182
@ IMB_STATUS_INTERNAL_ERROR
Definition intel-ipsec-mb.h:185
@ IMB_STATUS_COMPLETED_CIPHER
Definition intel-ipsec-mb.h:180
@ IMB_STATUS_COMPLETED_AUTH
Definition intel-ipsec-mb.h:181
@ IMB_STATUS_BEING_PROCESSED
Definition intel-ipsec-mb.h:179
@ IMB_STATUS_INVALID_ARGS
Definition intel-ipsec-mb.h:184
IMB_DLL_EXPORT void aes_gcm_dec_256_sse(const struct gcm_key_data *key_data, struct gcm_context_data *context_data, uint8_t *out, uint8_t const *in, uint64_t len, const uint8_t *iv, uint8_t const *aad, uint64_t aad_len, uint8_t *auth_tag, uint64_t auth_tag_len)
AES-GCM-256 Decryption.
IMB_DLL_EXPORT void aes_xcbc_expand_key_avx(const void *key, void *k1_exp, void *k2, void *k3)
Definition intel-ipsec-mb.h:390
union IMB_JOB::@11 cipher_fields
struct gcm_context_data * ctx
Definition intel-ipsec-mb.h:468
struct IMB_JOB::@10::_AES_GMAC_specific_fields GMAC
struct IMB_JOB::@10::_KASUMI_UIA1_specific_fields KASUMI_UIA1
IMB_CIPHER_DIRECTION cipher_direction
Definition intel-ipsec-mb.h:526
struct IMB_JOB::@10::_POLY1305_specific_fields POLY1305
uint64_t num_sgl_io_segs
Definition intel-ipsec-mb.h:405
const void * _init_tag
Definition intel-ipsec-mb.h:500
const struct IMB_SGL_IOV * sgl_io_segs
Definition intel-ipsec-mb.h:398
uint64_t iv_len_in_bytes
Definition intel-ipsec-mb.h:430
struct IMB_JOB::@10::_SNOW3G_UIA2_specific_fields SNOW3G_UIA2
const uint8_t * _iv23
Definition intel-ipsec-mb.h:476
const uint8_t * _hashed_auth_key_xor_ipad
Definition intel-ipsec-mb.h:438
void * suite_id[4]
Definition intel-ipsec-mb.h:550
struct IMB_JOB::@10::_AES_XCBC_specific_fields XCBC
const struct gcm_key_data * _key
Definition intel-ipsec-mb.h:490
IMB_SGL_STATE sgl_state
Definition intel-ipsec-mb.h:539
uint64_t msg_len_to_hash_in_bytes
Definition intel-ipsec-mb.h:424
IMB_CHAIN_ORDER chain_order
Definition intel-ipsec-mb.h:528
uint64_t msg_len_to_cipher_in_bits
Definition intel-ipsec-mb.h:419
const void * _iv
Definition intel-ipsec-mb.h:482
struct IMB_JOB::@10::_AES_CMAC_specific_fields CMAC
struct chacha20_poly1305_context_data * ctx
Definition intel-ipsec-mb.h:511
const void * aad
Definition intel-ipsec-mb.h:454
void * user_data2
Definition intel-ipsec-mb.h:532
void * next_iv
Definition intel-ipsec-mb.h:545
union IMB_JOB::@10 u
uint64_t cipher_start_offset_in_bits
Definition intel-ipsec-mb.h:413
int(* hash_func)(struct IMB_JOB *)
Definition intel-ipsec-mb.h:536
int(* cipher_func)(struct IMB_JOB *)
Definition intel-ipsec-mb.h:534
const uint8_t * _hashed_auth_key_xor_opad
Definition intel-ipsec-mb.h:441
uint64_t auth_tag_output_len_in_bytes
Definition intel-ipsec-mb.h:432
const uint32_t * _k1_expanded
Definition intel-ipsec-mb.h:446
IMB_CIPHER_MODE cipher_mode
Definition intel-ipsec-mb.h:525
const void * _key
Definition intel-ipsec-mb.h:480
const uint8_t * _key
Definition intel-ipsec-mb.h:472
struct IMB_JOB::@11::_CBCS_specific_fields CBCS
const void * _skey2
Definition intel-ipsec-mb.h:462
const void * _key_expanded
Definition intel-ipsec-mb.h:459
const uint8_t * iv
Definition intel-ipsec-mb.h:429
uint64_t msg_len_to_cipher_in_bytes
Definition intel-ipsec-mb.h:417
void * reserved
Definition intel-ipsec-mb.h:519
IMB_HASH_ALG hash_alg
Definition intel-ipsec-mb.h:527
uint64_t aad_len_in_bytes
Definition intel-ipsec-mb.h:456
struct IMB_JOB::@10::_HMAC_specific_fields HMAC
struct IMB_JOB::@10::_ZUC_EIA3_specific_fields ZUC_EIA3
uint32_t session_id
Definition intel-ipsec-mb.h:551
const void * _skey1
Definition intel-ipsec-mb.h:461
void * user_data
Definition intel-ipsec-mb.h:531
uint64_t key_len_in_bytes
Definition intel-ipsec-mb.h:393
struct IMB_JOB::@10::_SNOW_V_AEAD_specific_fields SNOW_V_AEAD
uint8_t * dst
Definition intel-ipsec-mb.h:402
uint8_t * auth_tag_output
Definition intel-ipsec-mb.h:431
const void * enc_keys
Definition intel-ipsec-mb.h:391
struct IMB_JOB::@10::_AES_GCM_specific_fields GCM
struct IMB_JOB::@10::_CHACHA20_POLY1305_specific_fields CHACHA20_POLY1305
struct IMB_JOB::@10::_AES_CCM_specific_fields CCM
IMB_STATUS status
Definition intel-ipsec-mb.h:524
const uint8_t * _k2
Definition intel-ipsec-mb.h:448
uint64_t cipher_start_src_offset_in_bytes
Definition intel-ipsec-mb.h:409
uint64_t msg_len_to_hash_in_bits
Definition intel-ipsec-mb.h:426
const uint8_t * _iv
Definition intel-ipsec-mb.h:474
struct IMB_JOB::@10::_GHASH_specific_fields GHASH
uint64_t cipher_start_src_offset_in_bits
Definition intel-ipsec-mb.h:411
const void * dec_keys
Definition intel-ipsec-mb.h:392
uint64_t hash_start_src_offset_in_bytes
Definition intel-ipsec-mb.h:422
const uint8_t * src
Definition intel-ipsec-mb.h:395
const uint8_t * _k3
Definition intel-ipsec-mb.h:450
Definition intel-ipsec-mb.h:980
aes_gmac_finalize_t gmac192_finalize
Definition intel-ipsec-mb.h:1091
aes_gcm_init_t gcm192_init
Definition intel-ipsec-mb.h:1028
aes_gmac_finalize_t gmac128_finalize
Definition intel-ipsec-mb.h:1090
void * aes256_ccm_ooo
Definition intel-ipsec-mb.h:1164
crc32_fn_t crc24_lte_a
Definition intel-ipsec-mb.h:1100
aes_gmac_update_t gmac256_update
Definition intel-ipsec-mb.h:1089
hec_32_t hec_32
Definition intel-ipsec-mb.h:1093
int imb_errno
Definition intel-ipsec-mb.h:988
void * aes_cmac_ooo
Definition intel-ipsec-mb.h:1158
int next_job
Definition intel-ipsec-mb.h:1132
aes_gmac_init_t gmac128_init
Definition intel-ipsec-mb.h:1084
uint64_t reserved[5]
Definition intel-ipsec-mb.h:985
aes_gcm_pre_t gcm192_pre
Definition intel-ipsec-mb.h:1046
snow3g_f8_4_buffer_t snow3g_f8_4_buffer
Definition intel-ipsec-mb.h:1069
aes_gcm_precomp_t gcm256_precomp
Definition intel-ipsec-mb.h:1044
aes_gcm_pre_t gcm128_pre
Definition intel-ipsec-mb.h:1045
submit_hash_burst_t submit_hash_burst
Definition intel-ipsec-mb.h:1121
flush_job_t flush_job
Definition intel-ipsec-mb.h:1000
snow3g_f8_2_buffer_t snow3g_f8_2_buffer
Definition intel-ipsec-mb.h:1068
void * zuc_eea3_ooo
Definition intel-ipsec-mb.h:1159
aes_gcm_enc_dec_update_t gcm128_dec_update
Definition intel-ipsec-mb.h:1033
void * des3_dec_ooo
Definition intel-ipsec-mb.h:1146
keyexp_t keyexp_192
Definition intel-ipsec-mb.h:1003
aes_gcm_enc_dec_t gcm128_dec
Definition intel-ipsec-mb.h:1024
burst_fn_t submit_burst_nocheck
Definition intel-ipsec-mb.h:1117
get_next_job_t get_next_job
Definition intel-ipsec-mb.h:996
void * sha_256_ooo
Definition intel-ipsec-mb.h:1170
snow3g_init_key_sched_t snow3g_init_key_sched
Definition intel-ipsec-mb.h:1075
aes_gcm_enc_dec_update_t gcm192_enc_update
Definition intel-ipsec-mb.h:1031
aes_gmac_finalize_t gmac256_finalize
Definition intel-ipsec-mb.h:1092
void * docsis_des_dec_ooo
Definition intel-ipsec-mb.h:1148
aes_gmac_init_t gmac192_init
Definition intel-ipsec-mb.h:1085
zuc_eia3_1_buffer_t eia3_1_buffer
Definition intel-ipsec-mb.h:1052
void * aes_ccm_ooo
Definition intel-ipsec-mb.h:1157
hec_64_t hec_64
Definition intel-ipsec-mb.h:1094
keyexp_t keyexp_256
Definition intel-ipsec-mb.h:1004
aes_ecb_quic_t aes_ecb_128_quic
Definition intel-ipsec-mb.h:1125
aes_gcm_pre_t gcm256_pre
Definition intel-ipsec-mb.h:1047
uint32_t used_arch
Definition intel-ipsec-mb.h:986
void * hmac_sha_1_ooo
Definition intel-ipsec-mb.h:1150
crc32_fn_t crc32_sctp
Definition intel-ipsec-mb.h:1099
crc32_fn_t crc11_fp_header
Definition intel-ipsec-mb.h:1103
aes_gcm_enc_dec_finalize_t gcm192_dec_finalize
Definition intel-ipsec-mb.h:1040
kasumi_f9_1_buffer_user_t f9_1_buffer_user
Definition intel-ipsec-mb.h:1061
void * sha_384_ooo
Definition intel-ipsec-mb.h:1171
aes_gmac_update_t gmac192_update
Definition intel-ipsec-mb.h:1088
crc32_fn_t crc16_x25
Definition intel-ipsec-mb.h:1098
hash_fn_t sha224
Definition intel-ipsec-mb.h:1015
hash_one_block_t md5_one_block
Definition intel-ipsec-mb.h:1013
void * des_enc_ooo
Definition intel-ipsec-mb.h:1143
kasumi_init_f9_key_sched_t kasumi_init_f9_key_sched
Definition intel-ipsec-mb.h:1063
queue_size_t queue_size
Definition intel-ipsec-mb.h:1001
aes_gcm_enc_dec_finalize_t gcm256_dec_finalize
Definition intel-ipsec-mb.h:1041
snow3g_key_sched_size_t snow3g_key_sched_size
Definition intel-ipsec-mb.h:1076
aes_ecb_quic_t aes_ecb_256_quic
Definition intel-ipsec-mb.h:1126
crc32_fn_t crc8_wimax_ofdma_hcs
Definition intel-ipsec-mb.h:1108
void * zuc256_eia3_ooo
Definition intel-ipsec-mb.h:1163
snow3g_f8_8_buffer_t snow3g_f8_8_buffer
Definition intel-ipsec-mb.h:1070
hash_fn_t sha512
Definition intel-ipsec-mb.h:1018
void * hmac_sha_256_ooo
Definition intel-ipsec-mb.h:1152
snow3g_f8_n_buffer_multikey_t snow3g_f8_n_buffer_multikey
Definition intel-ipsec-mb.h:1073
aes_gcm_enc_dec_update_t gcm192_dec_update
Definition intel-ipsec-mb.h:1034
chacha_poly_init_t chacha20_poly1305_init
Definition intel-ipsec-mb.h:1110
zuc_eea3_n_buffer_t eea3_n_buffer
Definition intel-ipsec-mb.h:1051
aes_gcm_precomp_t gcm128_precomp
Definition intel-ipsec-mb.h:1042
void * aes256_ooo
Definition intel-ipsec-mb.h:1138
void * zuc256_eea3_ooo
Definition intel-ipsec-mb.h:1162
void * end_ooo
Definition intel-ipsec-mb.h:1173
void * sha_512_ooo
Definition intel-ipsec-mb.h:1172
chacha_poly_enc_dec_update_t chacha20_poly1305_dec_update
Definition intel-ipsec-mb.h:1112
aes_gcm_enc_dec_t gcm256_enc
Definition intel-ipsec-mb.h:1023
aes_gcm_init_var_iv_t gcm192_init_var_iv
Definition intel-ipsec-mb.h:1081
keyexp_t keyexp_128
Definition intel-ipsec-mb.h:1002
crc32_fn_t crc10_iuup_data
Definition intel-ipsec-mb.h:1105
submit_hash_burst_t submit_hash_burst_nocheck
Definition intel-ipsec-mb.h:1122
hash_one_block_t sha1_one_block
Definition intel-ipsec-mb.h:1008
snow3g_f8_n_buffer_t snow3g_f8_n_buffer
Definition intel-ipsec-mb.h:1071
hash_fn_t sha1
Definition intel-ipsec-mb.h:1014
crc32_fn_t crc32_ethernet_fcs
Definition intel-ipsec-mb.h:1097
void * hmac_md5_ooo
Definition intel-ipsec-mb.h:1155
void * des3_enc_ooo
Definition intel-ipsec-mb.h:1145
hash_one_block_t sha512_one_block
Definition intel-ipsec-mb.h:1012
aes_gcm_init_t gcm256_init
Definition intel-ipsec-mb.h:1029
snow3g_f8_8_buffer_multikey_t snow3g_f8_8_buffer_multikey
Definition intel-ipsec-mb.h:1072
submit_cipher_burst_t submit_cipher_burst
Definition intel-ipsec-mb.h:1119
burst_fn_t get_next_burst
Definition intel-ipsec-mb.h:1115
hash_fn_t sha256
Definition intel-ipsec-mb.h:1016
aes_gcm_enc_dec_finalize_t gcm128_enc_finalize
Definition intel-ipsec-mb.h:1036
aes_gmac_update_t gmac128_update
Definition intel-ipsec-mb.h:1087
void * zuc_eia3_ooo
Definition intel-ipsec-mb.h:1160
aes_gcm_enc_dec_finalize_t gcm192_enc_finalize
Definition intel-ipsec-mb.h:1037
kasumi_f8_3_buffer_t f8_3_buffer
Definition intel-ipsec-mb.h:1057
hash_one_block_t sha384_one_block
Definition intel-ipsec-mb.h:1011
void * docsis_des_enc_ooo
Definition intel-ipsec-mb.h:1147
void * docsis128_sec_ooo
Definition intel-ipsec-mb.h:1139
void(* set_suite_id)(struct IMB_MGR *, IMB_JOB *)
Definition intel-ipsec-mb.h:1128
aes_gcm_enc_dec_finalize_t gcm256_enc_finalize
Definition intel-ipsec-mb.h:1038
void * aes128_ooo
Definition intel-ipsec-mb.h:1136
get_completed_job_t get_completed_job
Definition intel-ipsec-mb.h:999
aes_gcm_enc_dec_update_t gcm256_dec_update
Definition intel-ipsec-mb.h:1035
snow3g_f9_1_buffer_t snow3g_f9_1_buffer
Definition intel-ipsec-mb.h:1074
void * aes128_cbcs_ooo
Definition intel-ipsec-mb.h:1161
aes_gcm_enc_dec_t gcm128_enc
Definition intel-ipsec-mb.h:1021
hash_fn_t sha384
Definition intel-ipsec-mb.h:1017
burst_fn_t flush_burst
Definition intel-ipsec-mb.h:1118
void * sha_224_ooo
Definition intel-ipsec-mb.h:1169
cmac_subkey_gen_t cmac_subkey_gen_128
Definition intel-ipsec-mb.h:1005
crc32_fn_t crc6_iuup_header
Definition intel-ipsec-mb.h:1106
burst_fn_t submit_burst
Definition intel-ipsec-mb.h:1116
void * snow3g_uia2_ooo
Definition intel-ipsec-mb.h:1167
aes_gcm_enc_dec_t gcm192_enc
Definition intel-ipsec-mb.h:1022
submit_job_t submit_job_nocheck
Definition intel-ipsec-mb.h:998
kasumi_f8_1_buffer_bit_t f8_1_buffer_bit
Definition intel-ipsec-mb.h:1055
hash_one_block_t sha224_one_block
Definition intel-ipsec-mb.h:1009
des_keysched_t des_key_sched
Definition intel-ipsec-mb.h:1007
void * snow3g_uea2_ooo
Definition intel-ipsec-mb.h:1166
submit_job_t submit_job
Definition intel-ipsec-mb.h:997
chacha_poly_finalize_t chacha20_poly1305_finalize
Definition intel-ipsec-mb.h:1113
chacha_poly_enc_dec_update_t chacha20_poly1305_enc_update
Definition intel-ipsec-mb.h:1111
kasumi_init_f8_key_sched_t kasumi_init_f8_key_sched
Definition intel-ipsec-mb.h:1062
IMB_JOB jobs[IMB_MAX_JOBS]
Definition intel-ipsec-mb.h:1133
aes_cfb_t aes256_cfb_one
Definition intel-ipsec-mb.h:1123
zuc_eia3_n_buffer_t eia3_n_buffer
Definition intel-ipsec-mb.h:1079
snow3g_f8_1_buffer_t snow3g_f8_1_buffer
Definition intel-ipsec-mb.h:1067
void * hmac_sha_224_ooo
Definition intel-ipsec-mb.h:1151
kasumi_key_sched_size_t kasumi_key_sched_size
Definition intel-ipsec-mb.h:1064
aes_cfb_t aes128_cfb_one
Definition intel-ipsec-mb.h:1019
cmac_subkey_gen_t cmac_subkey_gen_256
Definition intel-ipsec-mb.h:1095
crc32_fn_t crc24_lte_b
Definition intel-ipsec-mb.h:1101
aes_gcm_precomp_t gcm192_precomp
Definition intel-ipsec-mb.h:1043
aes_gcm_enc_dec_update_t gcm256_enc_update
Definition intel-ipsec-mb.h:1032
zuc_eea3_4_buffer_t eea3_4_buffer
Definition intel-ipsec-mb.h:1050
int earliest_job
Definition intel-ipsec-mb.h:1131
kasumi_f8_2_buffer_t f8_2_buffer
Definition intel-ipsec-mb.h:1056
crc32_fn_t crc7_fp_header
Definition intel-ipsec-mb.h:1104
aes_gmac_init_t gmac256_init
Definition intel-ipsec-mb.h:1086
submit_cipher_burst_t submit_cipher_burst_nocheck
Definition intel-ipsec-mb.h:1120
void * docsis256_sec_ooo
Definition intel-ipsec-mb.h:1141
void * aes256_cmac_ooo
Definition intel-ipsec-mb.h:1165
void * sha_1_ooo
Definition intel-ipsec-mb.h:1168
void * docsis128_crc32_sec_ooo
Definition intel-ipsec-mb.h:1140
aes_gcm_enc_dec_t gcm256_dec
Definition intel-ipsec-mb.h:1026
crc32_fn_t crc32_wimax_ofdma_data
Definition intel-ipsec-mb.h:1107
aes_gcm_enc_dec_update_t gcm128_enc_update
Definition intel-ipsec-mb.h:1030
void * aes_xcbc_ooo
Definition intel-ipsec-mb.h:1156
crc32_fn_t crc16_fp_data
Definition intel-ipsec-mb.h:1102
snow3g_f8_1_buffer_bit_t snow3g_f8_1_buffer_bit
Definition intel-ipsec-mb.h:1066
aes_gcm_init_t gcm128_init
Definition intel-ipsec-mb.h:1027
hash_one_block_t sha256_one_block
Definition intel-ipsec-mb.h:1010
aes_gcm_enc_dec_t gcm192_dec
Definition intel-ipsec-mb.h:1025
kasumi_f8_n_buffer_t f8_n_buffer
Definition intel-ipsec-mb.h:1059
uint64_t flags
Definition intel-ipsec-mb.h:982
xcbc_keyexp_t xcbc_keyexp
Definition intel-ipsec-mb.h:1006
aes_gcm_init_var_iv_t gcm128_init_var_iv
Definition intel-ipsec-mb.h:1080
zuc_eea3_1_buffer_t eea3_1_buffer
Definition intel-ipsec-mb.h:1049
void * des_dec_ooo
Definition intel-ipsec-mb.h:1144
kasumi_f8_4_buffer_t f8_4_buffer
Definition intel-ipsec-mb.h:1058
void * hmac_sha_512_ooo
Definition intel-ipsec-mb.h:1154
void * docsis256_crc32_sec_ooo
Definition intel-ipsec-mb.h:1142
aes_gcm_pre_t ghash_pre
Definition intel-ipsec-mb.h:1096
kasumi_f8_1_buffer_t f8_1_buffer
Definition intel-ipsec-mb.h:1054
uint64_t features
Definition intel-ipsec-mb.h:983
aes_gcm_enc_dec_finalize_t gcm128_dec_finalize
Definition intel-ipsec-mb.h:1039
aes_gcm_init_var_iv_t gcm256_init_var_iv
Definition intel-ipsec-mb.h:1082
kasumi_f9_1_buffer_t f9_1_buffer
Definition intel-ipsec-mb.h:1060
ghash_t ghash
Definition intel-ipsec-mb.h:1078
void * hmac_sha_384_ooo
Definition intel-ipsec-mb.h:1153
void * aes192_ooo
Definition intel-ipsec-mb.h:1137
Definition intel-ipsec-mb.h:365
uint64_t len
Definition intel-ipsec-mb.h:368
void * out
Definition intel-ipsec-mb.h:367
const void * in
Definition intel-ipsec-mb.h:366
holds Chacha20-Poly1305 operation context
Definition intel-ipsec-mb.h:591
uint64_t remain_ct_bytes
Definition intel-ipsec-mb.h:601
uint64_t aad_len
Definition intel-ipsec-mb.h:593
uint64_t remain_ks_bytes
Definition intel-ipsec-mb.h:599
uint8_t poly_scratch[16]
Definition intel-ipsec-mb.h:597
uint8_t poly_key[32]
Definition intel-ipsec-mb.h:596
uint8_t IV[12]
Definition intel-ipsec-mb.h:604
uint64_t last_block_count
Definition intel-ipsec-mb.h:598
uint64_t hash_len
Definition intel-ipsec-mb.h:594
uint64_t hash[3]
Definition intel-ipsec-mb.h:592
uint8_t last_ks[64]
Definition intel-ipsec-mb.h:595
holds GCM operation context
Definition intel-ipsec-mb.h:577
uint64_t in_length
Definition intel-ipsec-mb.h:580
uint8_t current_counter[IMB_GCM_BLOCK_LEN]
Definition intel-ipsec-mb.h:583
uint8_t partial_block_enc_key[IMB_GCM_BLOCK_LEN]
Definition intel-ipsec-mb.h:581
uint8_t orig_IV[IMB_GCM_BLOCK_LEN]
Definition intel-ipsec-mb.h:582
uint64_t partial_block_length
Definition intel-ipsec-mb.h:584
uint8_t aad_hash[IMB_GCM_BLOCK_LEN]
Definition intel-ipsec-mb.h:578
uint64_t aad_length
Definition intel-ipsec-mb.h:579
holds intermediate key data needed to improve performance
Definition intel-ipsec-mb.h:639
uint8_t shifted_hkey[IMB_GCM_ENC_KEY_LEN *8]
Definition intel-ipsec-mb.h:649
struct gcm_key_data::@12::@14 avx2_avx512
uint8_t shifted_hkey_k[IMB_GCM_ENC_KEY_LEN *8]
Definition intel-ipsec-mb.h:658
struct gcm_key_data::@12::@15 vaes_avx512
struct gcm_key_data::@12::@13 sse_avx
uint8_t expanded_keys[IMB_GCM_ENC_KEY_LEN *IMB_GCM_KEY_SETS]
Definition intel-ipsec-mb.h:640
union gcm_key_data::@12 ghash_keys
Definition intel-ipsec-mb.h:40
uint64_t low
Definition intel-ipsec-mb.h:41
uint64_t high
Definition intel-ipsec-mb.h:42
Definition intel-ipsec-mb.h:563
uint16_t msk16[KASUMI_KEY_SCHEDULE_SIZE]
Definition intel-ipsec-mb.h:566
uint16_t sk16[KASUMI_KEY_SCHEDULE_SIZE]
Definition intel-ipsec-mb.h:565
Definition intel-ipsec-mb.h:839
uint32_t k[4]
Definition intel-ipsec-mb.h:841