Loading...
Searching...
No Matches
intel-ipsec-mb.h File Reference
`#include <stdlib.h>`
`#include <stdint.h>`
`#include <errno.h>`

Go to the source code of this file.

## Data Structures

struct | imb_uint128_t
struct | IMB_SGL_IOV
struct | IMB_JOB
struct | kasumi_key_sched_s
struct | gcm_context_data
| holds GCM operation context More...
struct | chacha20_poly1305_context_data
| holds Chacha20-Poly1305 operation context More...
struct | gcm_key_data
| holds intermediate key data needed to improve performance More...
struct | snow3g_key_schedule_s
struct | IMB_MGR

## Macros

#define | DECLARE_ALIGNED(decl, alignval) __declspec(align(alignval)) decl
#define | __forceinline static __forceinline
#define | IMB_DLL_EXPORT
#define | IMB_DLL_LOCAL
#define | IMB_VERSION_STR "1.4.0-dev"
#define | IMB_VERSION_NUM 0x10400
#define | IMB_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
#define | IMB_ASSERT(x)
#define | IMB_DIM(x) (sizeof(x) / sizeof(x[0]))
#define | IMB_DES_KEY_SCHED_SIZE (16 * 8)
#define | IMB_DES_BLOCK_SIZE 8
#define | IMB_AES_BLOCK_SIZE 16
#define | IMB_SHA1_DIGEST_SIZE_IN_BYTES 20
#define | IMB_SHA224_DIGEST_SIZE_IN_BYTES 28
#define | IMB_SHA256_DIGEST_SIZE_IN_BYTES 32
#define | IMB_SHA384_DIGEST_SIZE_IN_BYTES 48
#define | IMB_SHA512_DIGEST_SIZE_IN_BYTES 64
#define | IMB_MD5_DIGEST_SIZE_IN_BYTES 16
#define | IMB_SHA1_BLOCK_SIZE 64
#define | IMB_SHA_224_BLOCK_SIZE 64
#define | IMB_SHA_256_BLOCK_SIZE 64
#define | IMB_SHA_384_BLOCK_SIZE 128
#define | IMB_SHA_512_BLOCK_SIZE 128
#define | IMB_MD5_BLOCK_SIZE 64
#define | IMB_KASUMI_KEY_SIZE 16
#define | IMB_KASUMI_IV_SIZE 8
#define | IMB_KASUMI_BLOCK_SIZE 8
#define | IMB_KASUMI_DIGEST_SIZE 4
#define | IMB_ZUC_KEY_LEN_IN_BYTES 16
#define | IMB_ZUC_IV_LEN_IN_BYTES 16
#define | IMB_ZUC256_KEY_LEN_IN_BYTES 32
#define | IMB_ZUC256_IV_LEN_IN_BYTES_MIN 23
#define | IMB_ZUC256_IV_LEN_IN_BYTES_MAX 25
#define | IMB_ZUC_DIGEST_LEN_IN_BYTES 4
#define | IMB_ZUC256_DIGEST_LEN_IN_BYTES_MIN 4
#define | IMB_ZUC256_DIGEST_LEN_IN_BYTES_MAX 16
#define | IMB_DOCSIS_CRC32_MIN_ETH_PDU_SIZE 14
#define | IMB_DOCSIS_CRC32_TAG_SIZE 4
#define | KASUMI_KEY_SCHEDULE_SIZE 64
#define | IMB_GCM_BLOCK_LEN 16
#define | IMB_MAX_TAG_LEN (16)
#define | IMB_GCM_IV_DATA_LEN (12)
#define | IMB_GCM_128_KEY_LEN (16)
#define | IMB_GCM_192_KEY_LEN (24)
#define | IMB_GCM_256_KEY_LEN (32)
#define | IMB_GCM_ENC_KEY_LEN 16
#define | IMB_GCM_KEY_SETS (15)
#define | IMB_FLAG_SHANI_OFF (1ULL << 0)
#define | IMB_FLAG_AESNI_OFF (1ULL << 1)
#define | IMB_FLAG_GFNI_OFF (1ULL << 2)
#define | IMB_FEATURE_SHANI (1ULL << 0)
#define | IMB_FEATURE_AESNI (1ULL << 1)
#define | IMB_FEATURE_PCLMULQDQ (1ULL << 2)
#define | IMB_FEATURE_CMOV (1ULL << 3)
#define | IMB_FEATURE_SSE4_2 (1ULL << 4)
#define | IMB_FEATURE_AVX (1ULL << 5)
#define | IMB_FEATURE_AVX2 (1ULL << 6)
#define | IMB_FEATURE_AVX512F (1ULL << 7)
#define | IMB_FEATURE_AVX512DQ (1ULL << 8)
#define | IMB_FEATURE_AVX512CD (1ULL << 9)
#define | IMB_FEATURE_AVX512BW (1ULL << 10)
#define | IMB_FEATURE_AVX512VL (1ULL << 11)
#define | IMB_FEATURE_AVX512_SKX
#define | IMB_FEATURE_VAES (1ULL << 12)
#define | IMB_FEATURE_VPCLMULQDQ (1ULL << 13)
#define | IMB_FEATURE_SAFE_DATA (1ULL << 14)
#define | IMB_FEATURE_SAFE_PARAM (1ULL << 15)
#define | IMB_FEATURE_GFNI (1ULL << 16)
#define | IMB_FEATURE_AVX512_IFMA (1ULL << 17)
#define | IMB_FEATURE_BMI2 (1ULL << 18)
#define | IMB_FEATURE_AESNI_EMU (1ULL << 19)
#define | IMB_FEATURE_SELF_TEST (1ULL << 20) /* self-test feature present */
#define | IMB_FEATURE_SELF_TEST_PASS (1ULL << 21) /* self-test passed */
#define | IMB_FEATURE_AVX_IFMA (1ULL << 22)
#define | IMB_CPUFLAGS_NO_AESNI (IMB_FEATURE_SSE4_2 | IMB_FEATURE_CMOV)
#define | IMB_CPUFLAGS_SSE
#define | IMB_CPUFLAGS_SSE_T2 (IMB_CPUFLAGS_SSE | IMB_FEATURE_SHANI)
#define | IMB_CPUFLAGS_SSE_T3 (IMB_CPUFLAGS_SSE_T2 | IMB_FEATURE_GFNI)
#define | IMB_CPUFLAGS_AVX (IMB_CPUFLAGS_SSE | IMB_FEATURE_AVX)
#define | IMB_CPUFLAGS_AVX2
#define | IMB_CPUFLAGS_AVX512 (IMB_CPUFLAGS_AVX2 | IMB_FEATURE_AVX512_SKX)
#define | IMB_CPUFLAGS_AVX512_T2
#define | IMB_CPUFLAGS_AVX2_T2
#define | IMB_CPUFLAGS_AVX_T2
#define | IMB_CPUFLAGS_AVX2_T3 (IMB_CPUFLAGS_AVX2_T2 | IMB_FEATURE_AVX_IFMA)
#define | IMB_MAX_BURST_SIZE 128
#define | IMB_MAX_JOBS (IMB_MAX_BURST_SIZE * 2)
#define | IMB_GET_NEXT_JOB(_mgr) ((_mgr)->get_next_job((_mgr)))
| Get next available job.
#define | IMB_SUBMIT_JOB(_mgr) ((_mgr)->submit_job((_mgr)))
| Submit job for processing after validating.
#define | IMB_SUBMIT_JOB_NOCHECK(_mgr) ((_mgr)->submit_job_nocheck((_mgr)))
| Submit job for processing without validating.
#define | IMB_GET_COMPLETED_JOB(_mgr) ((_mgr)->get_completed_job((_mgr)))
| Get next completed job.
#define | IMB_FLUSH_JOB(_mgr) ((_mgr)->flush_job((_mgr)))
| Force processing until next job in queue is completed.
#define | IMB_QUEUE_SIZE(_mgr) ((_mgr)->queue_size((_mgr)))
| Get number of jobs queued to be processed.
#define | IMB_GET_NEXT_BURST(_mgr, _n_jobs, _jobs) ((_mgr)->get_next_burst((_mgr), (_n_jobs), (_jobs)))
| Get next available burst (list of pointers to available IMB_JOB structures).
#define | IMB_SUBMIT_BURST(_mgr, _n_jobs, _jobs) ((_mgr)->submit_burst((_mgr), (_n_jobs), (_jobs)))
| Submit multiple jobs to be processed after validating.
#define | IMB_SUBMIT_BURST_NOCHECK(_mgr, _n_jobs, _jobs) ((_mgr)->submit_burst_nocheck((_mgr), (_n_jobs), (_jobs)))
| Submit multiple jobs to be processed without validating.
#define | IMB_FLUSH_BURST(_mgr, _max_jobs, _jobs) ((_mgr)->flush_burst((_mgr), (_max_jobs), (_jobs)))
| Force up to max_jobs outstanding jobs to completion.
#define | IMB_SUBMIT_CIPHER_BURST(_mgr, _jobs, _n_jobs, _cipher, _dir, _key_size)
#define | IMB_SUBMIT_CIPHER_BURST_NOCHECK(_mgr, _jobs, _n_jobs, _cipher, _dir, _key_size)
#define | IMB_SUBMIT_HASH_BURST(_mgr, _jobs, _n_jobs, _hash) ((_mgr)->submit_hash_burst((_mgr), (_jobs), (_n_jobs), (_hash)))
#define | IMB_SUBMIT_HASH_BURST_NOCHECK(_mgr, _jobs, _n_jobs, _hash) ((_mgr)->submit_hash_burst_nocheck((_mgr), (_jobs), (_n_jobs), (_hash)))
#define | IMB_AES_KEYEXP_128(_mgr, _key, _enc_exp_key, _dec_exp_key) ((_mgr)->keyexp_128((_key), (_enc_exp_key), (_dec_exp_key)))
#define | IMB_AES_KEYEXP_192(_mgr, _key, _enc_exp_key, _dec_exp_key) ((_mgr)->keyexp_192((_key), (_enc_exp_key), (_dec_exp_key)))
#define | IMB_AES_KEYEXP_256(_mgr, _key, _enc_exp_key, _dec_exp_key) ((_mgr)->keyexp_256((_key), (_enc_exp_key), (_dec_exp_key)))
#define | IMB_AES_CMAC_SUBKEY_GEN_128(_mgr, _exp_key, _key1, _key2) ((_mgr)->cmac_subkey_gen_128((_exp_key), (_key1), (_key2)))
#define | IMB_AES_CMAC_SUBKEY_GEN_256(_mgr, _exp_key, _key1, _key2) ((_mgr)->cmac_subkey_gen_256((_exp_key), (_key1), (_key2)))
#define | IMB_AES_XCBC_KEYEXP(_mgr, _key, _exp_key, _exp_key2, _exp_key3) ((_mgr)->xcbc_keyexp((_key), (_exp_key), (_exp_key2), (_exp_key3)))
#define | IMB_DES_KEYSCHED(_mgr, _exp_key, _key) ((_mgr)->des_key_sched((_exp_key), (_key)))
#define | IMB_SHA1_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->sha1_one_block((_src), (_tag)))
#define | IMB_SHA1(_mgr, _src, _length, _tag) ((_mgr)->sha1((_src), (_length), (_tag)))
#define | IMB_SHA224_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->sha224_one_block((_src), (_tag)))
#define | IMB_SHA224(_mgr, _src, _length, _tag) ((_mgr)->sha224((_src), (_length), (_tag)))
#define | IMB_SHA256_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->sha256_one_block((_src), (_tag)))
#define | IMB_SHA256(_mgr, _src, _length, _tag) ((_mgr)->sha256((_src), (_length), (_tag)))
#define | IMB_SHA384_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->sha384_one_block((_src), (_tag)))
#define | IMB_SHA384(_mgr, _src, _length, _tag) ((_mgr)->sha384((_src), (_length), (_tag)))
#define | IMB_SHA512_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->sha512_one_block((_src), (_tag)))
#define | IMB_SHA512(_mgr, _src, _length, _tag) ((_mgr)->sha512((_src), (_length), (_tag)))
#define | IMB_MD5_ONE_BLOCK(_mgr, _src, _tag) ((_mgr)->md5_one_block((_src), (_tag)))
#define | IMB_AES128_CFB_ONE(_mgr, _dst, _src, _iv, _exp_key, _len) ((_mgr)->aes128_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))
| AES-CFB-128 Encrypt/Decrypt up to one block.
#define | IMB_AES256_CFB_ONE(_mgr, _dst, _src, _iv, _exp_key, _len) ((_mgr)->aes256_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))
| AES-CFB-256 Encrypt/Decrypt up to one block.
#define | IMB_AES128_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES192_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES256_GCM_ENC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES128_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES192_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES256_GCM_DEC(_mgr, _exp_key, _ctx, _dst, _src, _len, _iv, _aad, _aadl, _tag, _tagl)
#define | IMB_AES128_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) ((_mgr)->gcm128_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
#define | IMB_AES192_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) ((_mgr)->gcm192_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
#define | IMB_AES256_GCM_INIT(_mgr, _exp_key, _ctx, _iv, _aad, _aadl) ((_mgr)->gcm256_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))
#define | IMB_AES128_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, _aadl)
#define | IMB_AES192_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, _aadl)
#define | IMB_AES256_GCM_INIT_VAR_IV(_mgr, _exp_key, _ctx, _iv, _ivl, _aad, _aadl)
#define | IMB_AES128_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm128_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES192_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm192_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES256_GCM_ENC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm256_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES128_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm128_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES192_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm192_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES256_GCM_DEC_UPDATE(_mgr, _exp_key, _ctx, _dst, _src, _len) ((_mgr)->gcm256_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))
#define | IMB_AES128_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm128_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES192_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm192_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES256_GCM_ENC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm256_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES128_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm128_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES192_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm192_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES256_GCM_DEC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gcm256_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES128_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) ((_mgr)->gmac128_init((_exp_key), (_ctx), (_iv), (_ivl)))
#define | IMB_AES192_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) ((_mgr)->gmac192_init((_exp_key), (_ctx), (_iv), (_ivl)))
#define | IMB_AES256_GMAC_INIT(_mgr, _exp_key, _ctx, _iv, _ivl) ((_mgr)->gmac256_init((_exp_key), (_ctx), (_iv), (_ivl)))
#define | IMB_AES128_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) ((_mgr)->gmac128_update((_exp_key), (_ctx), (_src), (_len)))
#define | IMB_AES192_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) ((_mgr)->gmac192_update((_exp_key), (_ctx), (_src), (_len)))
#define | IMB_AES256_GMAC_UPDATE(_mgr, _exp_key, _ctx, _src, _len) ((_mgr)->gmac256_update((_exp_key), (_ctx), (_src), (_len)))
#define | IMB_AES128_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gmac128_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES192_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gmac192_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES256_GMAC_FINALIZE(_mgr, _exp_key, _ctx, _tag, _tagl) ((_mgr)->gmac256_finalize((_exp_key), (_ctx), (_tag), (_tagl)))
#define | IMB_AES128_GCM_PRECOMP(_mgr, _key) ((_mgr)->gcm128_precomp((_key)))
#define | IMB_AES192_GCM_PRECOMP(_mgr, _key) ((_mgr)->gcm192_precomp((_key)))
#define | IMB_AES256_GCM_PRECOMP(_mgr, _key) ((_mgr)->gcm256_precomp((_key)))
#define | IMB_AES128_GCM_PRE(_mgr, _key, _exp_key) ((_mgr)->gcm128_pre((_key), (_exp_key)))
#define | IMB_AES192_GCM_PRE(_mgr, _key, _exp_key) ((_mgr)->gcm192_pre((_key), (_exp_key)))
#define | IMB_AES256_GCM_PRE(_mgr, _key, _exp_key) ((_mgr)->gcm256_pre((_key), (_exp_key)))
#define | IMB_GHASH_PRE(_mgr, _key, _exp_key) ((_mgr)->ghash_pre((_key), (_exp_key)))
#define | IMB_GHASH(_mgr, _exp_key, _src, _len, _tag, _tagl) ((_mgr)->ghash((_exp_key), (_src), (_len), (_tag), (_tagl)))
#define | IMB_CHACHA20_POLY1305_INIT(_mgr, _key, _ctx, _iv, _aad, _aadl)
#define | IMB_CHACHA20_POLY1305_ENC_UPDATE(_mgr, _key, _ctx, _dst, _src, _len)
#define | IMB_CHACHA20_POLY1305_DEC_UPDATE(_mgr, _key, _ctx, _dst, _src, _len)
#define | IMB_CHACHA20_POLY1305_ENC_FINALIZE(_mgr, _ctx, _tag, _tagl) ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))
#define | IMB_CHACHA20_POLY1305_DEC_FINALIZE(_mgr, _ctx, _tag, _tagl) ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))
#define | IMB_ZUC_EEA3_1_BUFFER(_mgr, _key, _iv, _src, _dst, _len) ((_mgr)->eea3_1_buffer((_key), (_iv), (_src), (_dst), (_len)))
| ZUC EEA3 Confidentiality functions.
#define | IMB_ZUC_EEA3_4_BUFFER(_mgr, _key, _iv, _src, _dst, _len) ((_mgr)->eea3_4_buffer((_key), (_iv), (_src), (_dst), (_len)))
#define | IMB_ZUC_EEA3_N_BUFFER(_mgr, _key, _iv, _src, _dst, _len, _count) ((_mgr)->eea3_n_buffer((_key), (_iv), (_src), (_dst), (_len), (_count)))
#define | IMB_ZUC_EIA3_1_BUFFER(_mgr, _key, _iv, _src, _len, _tag) ((_mgr)->eia3_1_buffer((_key), (_iv), (_src), (_len), (_tag)))
| ZUC EIA3 Integrity function.
#define | IMB_ZUC_EIA3_N_BUFFER(_mgr, _key, _iv, _src, _len, _tag, _count) ((_mgr)->eia3_n_buffer((_key), (_iv), (_src), (_len), (_tag), (_count)))
#define | IMB_KASUMI_F8_1_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len) ((_mgr)->f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))
| Kasumi byte-level f8 operation on a single buffer.
#define | IMB_KASUMI_F8_1_BUFFER_BIT(_mgr, _exp_key, _iv, _src, _dst, _len, _offset)
| Kasumi bit-level f8 operation on a single buffer.
#define | IMB_KASUMI_F8_2_BUFFER(_mgr, _exp_key, _iv1, _iv2, _src1, _dst1, _len1, _src2, _dst2, _len2)
| Kasumi byte-level f8 operation in parallel on two buffers.
#define | IMB_KASUMI_F8_3_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _src1, _dst1, _src2, _dst2, _src3, _dst3, _len)
| kasumi byte-level f8 operation in parallel on three buffers
#define | IMB_KASUMI_F8_4_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, _src1, _dst1, _src2, _dst2, _src3, _dst3, _src4, _dst4, _len)
| kasumi byte-level f8 operation in parallel on four buffers
#define | IMB_KASUMI_F8_N_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len, _count)
| Kasumi f8 operation on N buffers.
#define | IMB_KASUMI_F9_1_BUFFER(_mgr, _exp_key, _src, _len, _tag) ((_mgr)->f9_1_buffer((_exp_key), (_src), (_len), (_tag)))
| Kasumi bit-level f9 operation on a single buffer.
#define | IMB_KASUMI_F9_1_BUFFER_USER(_mgr, _exp_key, _iv, _src, _len, _tag, _dir)
| Kasumi bit-level f9 operation on a single buffer.
#define | IMB_KASUMI_INIT_F8_KEY_SCHED(_mgr, _key, _exp_key) ((_mgr)->kasumi_init_f8_key_sched((_key), (_exp_key)))
#define | IMB_KASUMI_INIT_F9_KEY_SCHED(_mgr, _key, _exp_key) ((_mgr)->kasumi_init_f9_key_sched((_key), (_exp_key)))
#define | IMB_KASUMI_KEY_SCHED_SIZE(_mgr) ((_mgr)->kasumi_key_sched_size())
#define | IMB_SNOW3G_F8_1_BUFFER_BIT(_mgr, _exp_key, _iv, _src, _dst, _len, _offset)
#define | IMB_SNOW3G_F8_1_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len) ((_mgr)->snow3g_f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))
#define | IMB_SNOW3G_F8_2_BUFFER(_mgr, _exp_key, _iv1, _iv2, _src1, _dst1, _len1, _src2, _dst2, _len2)
#define | IMB_SNOW3G_F8_4_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, _src1, _dst1, _len1, _src2, _dst2, _len2, _src3, _dst3, _len3, _src4, _dst4, _len4)
#define | IMB_SNOW3G_F8_8_BUFFER(_mgr, _exp_key, _iv1, _iv2, _iv3, _iv4, _iv5, _iv6, _iv7, _iv8, _src1, _dst1, _len1, _src2, _dst2, _len2, _src3, _dst3, _len3, _src4, _dst4, _len4, _src5, _dst5, _len5, _src6, _dst6, _len6, _src7, _dst7, _len7, _src8, _dst8, _len8)
#define | IMB_SNOW3G_F8_8_BUFFER_MULTIKEY(_mgr, _exp_key, _iv, _src, _dst, _len)
#define | IMB_SNOW3G_F8_N_BUFFER(_mgr, _exp_key, _iv, _src, _dst, _len, _count)
#define | IMB_SNOW3G_F8_N_BUFFER_MULTIKEY(_mgr, _exp_key, _iv, _src, _dst, _len, _count)
#define | IMB_SNOW3G_F9_1_BUFFER(_mgr, _exp_key, _iv, _src, _len, _tag) ((_mgr)->snow3g_f9_1_buffer((_exp_key), (_iv), (_src), (_len), (_tag)))
#define | IMB_SNOW3G_INIT_KEY_SCHED(_mgr, _key, _exp_key) ((_mgr)->snow3g_init_key_sched((_key), (_exp_key)))
#define | IMB_SNOW3G_KEY_SCHED_SIZE(_mgr) ((_mgr)->snow3g_key_sched_size())
#define | IMB_HEC_32(_mgr, _src) ((_mgr)->hec_32(_src))
#define | IMB_HEC_64(_mgr, _src) ((_mgr)->hec_64(_src))
#define | IMB_CRC32_ETHERNET_FCS(_mgr, _src, _len) (_mgr)->crc32_ethernet_fcs(_src, _len)
#define | IMB_CRC16_X25(_mgr, _src, _len) (_mgr)->crc16_x25(_src, _len)
#define | IMB_CRC32_SCTP(_mgr, _src, _len) (_mgr)->crc32_sctp(_src, _len)
#define | IMB_CRC24_LTE_A(_mgr, _src, _len) (_mgr)->crc24_lte_a(_src, _len)
#define | IMB_CRC24_LTE_B(_mgr, _src, _len) (_mgr)->crc24_lte_b(_src, _len)
#define | IMB_CRC16_FP_DATA(_mgr, _src, _len) (_mgr)->crc16_fp_data(_src, _len)
#define | IMB_CRC11_FP_HEADER(_mgr, _src, _len) (_mgr)->crc11_fp_header(_src, _len)
#define | IMB_CRC7_FP_HEADER(_mgr, _src, _len) (_mgr)->crc7_fp_header(_src, _len)
#define | IMB_CRC10_IUUP_DATA(_mgr, _src, _len) (_mgr)->crc10_iuup_data(_src, _len)
#define | IMB_CRC6_IUUP_HEADER(_mgr, _src, _len) (_mgr)->crc6_iuup_header(_src, _len)
#define | IMB_CRC32_WIMAX_OFDMA_DATA(_mgr, _src, _len) (_mgr)->crc32_wimax_ofdma_data(_src, _len)
#define | IMB_CRC8_WIMAX_OFDMA_HCS(_mgr, _src, _len) (_mgr)->crc8_wimax_ofdma_hcs(_src, _len)

## Typedefs

typedef struct IMB_JOB | IMB_JOB
typedef struct kasumi_key_sched_s | kasumi_key_sched_t
typedef void(* | init_mb_mgr_t) (struct IMB_MGR *)
typedef IMB_JOB *(* | get_next_job_t) (struct IMB_MGR *)
typedef IMB_JOB *(* | submit_job_t) (struct IMB_MGR *)
typedef IMB_JOB *(* | get_completed_job_t) (struct IMB_MGR *)
typedef IMB_JOB *(* | flush_job_t) (struct IMB_MGR *)
typedef uint32_t(* | queue_size_t) (struct IMB_MGR *)
typedef uint32_t(* | burst_fn_t) (struct IMB_MGR *, const uint32_t, struct IMB_JOB **)
typedef 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)
typedef uint32_t(* | submit_hash_burst_t) (struct IMB_MGR *, struct IMB_JOB *, const uint32_t, const IMB_HASH_ALG hash)
typedef void(* | keyexp_t) (const void *, void *, void *)
typedef void(* | cmac_subkey_gen_t) (const void *, void *, void *)
typedef void(* | hash_one_block_t) (const void *, void *)
typedef void(* | hash_fn_t) (const void *, const uint64_t, void *)
typedef void(* | xcbc_keyexp_t) (const void *, void *, void *, void *)
typedef int(* | des_keysched_t) (uint64_t *, const void *)
typedef void(* | aes_cfb_t) (void *, const void *, const void *, const void *, uint64_t)
typedef 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)
typedef 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)
typedef void(* | aes_gcm_init_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, uint8_t const *, uint64_t)
typedef 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)
typedef void(* | aes_gcm_enc_dec_update_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint8_t *, uint64_t)
typedef void(* | aes_gcm_enc_dec_finalize_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, uint64_t)
typedef void(* | aes_gcm_precomp_t) (struct gcm_key_data *)
typedef void(* | aes_gcm_pre_t) (const void *, struct gcm_key_data *)
typedef void(* | aes_gmac_init_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)
typedef void(* | aes_gmac_update_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)
typedef void(* | aes_gmac_finalize_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint64_t)
typedef void(* | chacha_poly_init_t) (const void *, struct chacha20_poly1305_context_data *, const void *, const void *, const uint64_t)
typedef void(* | chacha_poly_enc_dec_update_t) (const void *, struct chacha20_poly1305_context_data *, void *, const void *, const uint64_t)
typedef void(* | chacha_poly_finalize_t) (struct chacha20_poly1305_context_data *, void *, const uint64_t)
typedef void(* | ghash_t) (const struct gcm_key_data *, const void *, const uint64_t, void *, const uint64_t)
typedef void(* | zuc_eea3_1_buffer_t) (const void *, const void *, const void *, void *, const uint32_t)
typedef void(* | zuc_eea3_4_buffer_t) (const void *const *, const void *const *, const void *const *, void **, const uint32_t *)
typedef void(* | zuc_eea3_n_buffer_t) (const void *const *, const void *const *, const void *const *, void **, const uint32_t *, const uint32_t)
typedef void(* | zuc_eia3_1_buffer_t) (const void *, const void *, const void *, const uint32_t, uint32_t *)
typedef void(* | zuc_eia3_n_buffer_t) (const void *const *, const void *const *, const void *const *, const uint32_t *, uint32_t **, const uint32_t)
typedef void(* | kasumi_f8_1_buffer_t) (const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t)
typedef void(* | kasumi_f8_1_buffer_bit_t) (const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t, const uint32_t)
typedef 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)
typedef 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)
typedef 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)
typedef void(* | kasumi_f8_n_buffer_t) (const kasumi_key_sched_t *, const uint64_t *, const void *const *, void **, const uint32_t *, const uint32_t)
typedef void(* | kasumi_f9_1_buffer_user_t) (const kasumi_key_sched_t *, const uint64_t, const void *, const uint32_t, void *, const uint32_t)
typedef void(* | kasumi_f9_1_buffer_t) (const kasumi_key_sched_t *, const void *, const uint32_t, void *)
typedef int(* | kasumi_init_f8_key_sched_t) (const void *, kasumi_key_sched_t *)
typedef int(* | kasumi_init_f9_key_sched_t) (const void *, kasumi_key_sched_t *)
typedef size_t(* | kasumi_key_sched_size_t) (void)
typedef struct snow3g_key_schedule_s | snow3g_key_schedule_t
typedef void(* | snow3g_f8_1_buffer_t) (const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t)
typedef void(* | snow3g_f8_1_buffer_bit_t) (const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t, const uint32_t)
typedef 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)
typedef 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)

typedef 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)

typedef void(* | snow3g_f8_8_buffer_multikey_t) (const snow3g_key_schedule_t *const [], const void *const [], const void *const [], void *[], const uint32_t[])
typedef void(* | snow3g_f8_n_buffer_t) (const snow3g_key_schedule_t *, const void *const [], const void *const [], void *[], const uint32_t[], const uint32_t)
typedef 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)
typedef void(* | snow3g_f9_1_buffer_t) (const snow3g_key_schedule_t *, const void *, const void *, const uint64_t, void *)
typedef int(* | snow3g_init_key_sched_t) (const void *, snow3g_key_schedule_t *)
typedef size_t(* | snow3g_key_sched_size_t) (void)
typedef uint32_t(* | hec_32_t) (const uint8_t *)
typedef uint64_t(* | hec_64_t) (const uint8_t *)
typedef uint32_t(* | crc32_fn_t) (const void *, const uint64_t)
typedef void(* | aes_ecb_quic_t) (const void *, const void *, void *out, uint64_t)
typedef struct IMB_MGR | IMB_MGR

## Enumerations

enum | IMB_ARCH { IMB_ARCH_NONE = 0 , IMB_ARCH_NOAESNI , IMB_ARCH_SSE , IMB_ARCH_AVX , IMB_ARCH_AVX2 , IMB_ARCH_AVX512 , IMB_ARCH_NUM }
enum | IMB_STATUS { IMB_STATUS_BEING_PROCESSED = 0 , IMB_STATUS_COMPLETED_CIPHER = 1 , IMB_STATUS_COMPLETED_AUTH = 2 , IMB_STATUS_COMPLETED = 3 , IMB_STATUS_INVALID_ARGS = 4 , IMB_STATUS_INTERNAL_ERROR , IMB_STATUS_ERROR }

enum

IMB_ERR {
IMB_ERR_MIN = 2000 , IMB_ERR_NULL_MBMGR , IMB_ERR_JOB_NULL_SRC , IMB_ERR_JOB_NULL_DST ,
IMB_ERR_JOB_NULL_KEY , IMB_ERR_JOB_NULL_IV , IMB_ERR_JOB_NULL_AUTH , IMB_ERR_JOB_NULL_AAD ,
IMB_ERR_JOB_CIPH_LEN , IMB_ERR_JOB_AUTH_LEN , IMB_ERR_JOB_IV_LEN , IMB_ERR_JOB_KEY_LEN ,
IMB_ERR_JOB_AUTH_TAG_LEN , IMB_ERR_JOB_AAD_LEN , IMB_ERR_JOB_SRC_OFFSET , IMB_ERR_JOB_CHAIN_ORDER ,
IMB_ERR_CIPH_MODE , IMB_ERR_HASH_ALGO , IMB_ERR_JOB_NULL_AUTH_KEY , IMB_ERR_JOB_NULL_SGL_CTX ,
IMB_ERR_JOB_NULL_NEXT_IV , IMB_ERR_JOB_PON_PLI , IMB_ERR_NULL_SRC , IMB_ERR_NULL_DST ,
IMB_ERR_NULL_KEY , IMB_ERR_NULL_EXP_KEY , IMB_ERR_NULL_IV , IMB_ERR_NULL_AUTH ,
IMB_ERR_NULL_AAD , IMB_ERR_CIPH_LEN , IMB_ERR_AUTH_LEN , IMB_ERR_IV_LEN ,
IMB_ERR_KEY_LEN , IMB_ERR_AUTH_TAG_LEN , IMB_ERR_AAD_LEN , IMB_ERR_SRC_OFFSET ,
IMB_ERR_NULL_AUTH_KEY , IMB_ERR_NULL_CTX , IMB_ERR_NO_AESNI_EMU , IMB_ERR_JOB_NULL_HMAC_OPAD ,
IMB_ERR_JOB_NULL_HMAC_IPAD , IMB_ERR_JOB_NULL_XCBC_K1_EXP , IMB_ERR_JOB_NULL_XCBC_K2 , IMB_ERR_JOB_NULL_XCBC_K3 ,
IMB_ERR_JOB_CIPH_DIR , IMB_ERR_JOB_NULL_GHASH_INIT_TAG , IMB_ERR_MISSING_CPUFLAGS_INIT_MGR , IMB_ERR_NULL_JOB ,
IMB_ERR_QUEUE_SPACE , IMB_ERR_NULL_BURST , IMB_ERR_BURST_SIZE , IMB_ERR_BURST_OOO ,
IMB_ERR_SELFTEST , IMB_ERR_BURST_SUITE_ID , IMB_ERR_MAX
}

enum

IMB_CIPHER_MODE {
IMB_CIPHER_CBC = 1 , IMB_CIPHER_CNTR , IMB_CIPHER_NULL , IMB_CIPHER_DOCSIS_SEC_BPI ,
IMB_CIPHER_GCM , IMB_CIPHER_CUSTOM , IMB_CIPHER_DES , IMB_CIPHER_DOCSIS_DES ,
IMB_CIPHER_CCM , IMB_CIPHER_DES3 , IMB_CIPHER_PON_AES_CNTR , IMB_CIPHER_ECB ,
IMB_CIPHER_CNTR_BITLEN , IMB_CIPHER_ZUC_EEA3 , IMB_CIPHER_SNOW3G_UEA2_BITLEN , IMB_CIPHER_KASUMI_UEA1_BITLEN ,
IMB_CIPHER_CBCS_1_9 , IMB_CIPHER_CHACHA20 , IMB_CIPHER_CHACHA20_POLY1305 , IMB_CIPHER_CHACHA20_POLY1305_SGL ,
IMB_CIPHER_SNOW_V , IMB_CIPHER_SNOW_V_AEAD , IMB_CIPHER_GCM_SGL , IMB_CIPHER_NUM
}

enum | IMB_CIPHER_DIRECTION { IMB_DIR_ENCRYPT = 1 , IMB_DIR_DECRYPT }

enum

IMB_HASH_ALG {
IMB_AUTH_HMAC_SHA_1 = 1 , IMB_AUTH_HMAC_SHA_224 , IMB_AUTH_HMAC_SHA_256 , IMB_AUTH_HMAC_SHA_384 ,
IMB_AUTH_HMAC_SHA_512 , IMB_AUTH_AES_XCBC , IMB_AUTH_MD5 , IMB_AUTH_NULL ,
IMB_AUTH_AES_GMAC , IMB_AUTH_CUSTOM , IMB_AUTH_AES_CCM , IMB_AUTH_AES_CMAC ,
IMB_AUTH_SHA_1 , IMB_AUTH_SHA_224 , IMB_AUTH_SHA_256 , IMB_AUTH_SHA_384 ,
IMB_AUTH_SHA_512 , IMB_AUTH_AES_CMAC_BITLEN , IMB_AUTH_PON_CRC_BIP , IMB_AUTH_ZUC_EIA3_BITLEN ,
IMB_AUTH_DOCSIS_CRC32 , IMB_AUTH_SNOW3G_UIA2_BITLEN , IMB_AUTH_KASUMI_UIA1 , IMB_AUTH_AES_GMAC_128 ,
IMB_AUTH_AES_GMAC_192 , IMB_AUTH_AES_GMAC_256 , IMB_AUTH_AES_CMAC_256 , IMB_AUTH_POLY1305 ,
IMB_AUTH_CHACHA20_POLY1305 , IMB_AUTH_CHACHA20_POLY1305_SGL , IMB_AUTH_ZUC256_EIA3_BITLEN , IMB_AUTH_SNOW_V_AEAD ,
IMB_AUTH_GCM_SGL , IMB_AUTH_CRC32_ETHERNET_FCS , IMB_AUTH_CRC32_SCTP , IMB_AUTH_CRC32_WIMAX_OFDMA_DATA ,
IMB_AUTH_CRC24_LTE_A , IMB_AUTH_CRC24_LTE_B , IMB_AUTH_CRC16_X25 , IMB_AUTH_CRC16_FP_DATA ,
IMB_AUTH_CRC11_FP_HEADER , IMB_AUTH_CRC10_IUUP_DATA , IMB_AUTH_CRC8_WIMAX_OFDMA_HCS , IMB_AUTH_CRC7_FP_HEADER ,
IMB_AUTH_CRC6_IUUP_HEADER , IMB_AUTH_GHASH , IMB_AUTH_NUM
}

enum | IMB_CHAIN_ORDER { IMB_ORDER_CIPHER_HASH = 1 , IMB_ORDER_HASH_CIPHER }
enum | IMB_KEY_SIZE_BYTES { IMB_KEY_64_BYTES = 8 , IMB_KEY_128_BYTES = 16 , IMB_KEY_192_BYTES = 24 , IMB_KEY_256_BYTES = 32 }
enum | IMB_SGL_STATE { IMB_SGL_INIT = 0 , IMB_SGL_UPDATE , IMB_SGL_COMPLETE , IMB_SGL_ALL }

## Functions

IMB_DLL_EXPORT const char * | imb_get_version_str (void)
| Get library version in string format.
IMB_DLL_EXPORT unsigned | imb_get_version (void)
| Get library version in numerical format.
IMB_DLL_EXPORT int | imb_get_errno (IMB_MGR *mb_mgr)
| API to get error status.
IMB_DLL_EXPORT const char * | imb_get_strerror (int errnum)
| API to get description for errnum.
IMB_DLL_EXPORT IMB_MGR * | alloc_mb_mgr (uint64_t flags)
| Allocates memory for multi-buffer manager instance.
IMB_DLL_EXPORT void | free_mb_mgr (IMB_MGR *ptr)
| Frees memory allocated previously by alloc_mb_mgr()
IMB_DLL_EXPORT size_t | imb_get_mb_mgr_size (void)
| Calculates necessary memory size for IMB_MGR.
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 uint64_t | imb_get_feature_flags (void)
| Retrieves the bitmask with the features supported by the library, without having to allocate/initialize IMB_MGR;.
IMB_DLL_EXPORT void | init_mb_mgr_avx (IMB_MGR *state)
| Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT void | init_mb_mgr_avx2 (IMB_MGR *state)
| Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT void | init_mb_mgr_avx512 (IMB_MGR *state)
| Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT void | init_mb_mgr_sse (IMB_MGR *state)
| Initialize Multi-Buffer Manager structure.
IMB_DLL_EXPORT IMB_JOB * | submit_job_avx (IMB_MGR *state)
| Submit job for processing after validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_avx2 (IMB_MGR *state)
| Submit job for processing after validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_avx512 (IMB_MGR *state)
| Submit job for processing after validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_sse (IMB_MGR *state)
| Submit job for processing after validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_nocheck_avx (IMB_MGR *state)
| Submit job for processing without validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_nocheck_avx2 (IMB_MGR *state)
| Submit job for processing without validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_nocheck_avx512 (IMB_MGR *state)
| Submit job for processing without validating.
IMB_DLL_EXPORT IMB_JOB * | submit_job_nocheck_sse (IMB_MGR *state)
| Submit job for processing without validating.
IMB_DLL_EXPORT IMB_JOB * | flush_job_avx (IMB_MGR *state)
| Force processing until next job in queue is completed.
IMB_DLL_EXPORT IMB_JOB * | flush_job_avx2 (IMB_MGR *state)
| Force processing until next job in queue is completed.
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 * | flush_job_sse (IMB_MGR *state)
| Force processing until next job in queue is completed.
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_avx2 (IMB_MGR *state)
| Get number of jobs queued to be processed.
IMB_DLL_EXPORT uint32_t | queue_size_avx512 (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.
IMB_DLL_EXPORT IMB_JOB * | get_completed_job_avx (IMB_MGR *state)
| Get next completed job.
IMB_DLL_EXPORT IMB_JOB * | get_completed_job_avx2 (IMB_MGR *state)
| Get next completed job.
IMB_DLL_EXPORT IMB_JOB * | get_completed_job_avx512 (IMB_MGR *state)
| Get next completed job.
IMB_DLL_EXPORT IMB_JOB * | get_completed_job_sse (IMB_MGR *state)
| Get next completed job.
IMB_DLL_EXPORT IMB_JOB * | get_next_job_avx (IMB_MGR *state)
| Get next available job.
IMB_DLL_EXPORT IMB_JOB * | get_next_job_avx2 (IMB_MGR *state)
| Get next available job.
IMB_DLL_EXPORT IMB_JOB * | get_next_job_avx512 (IMB_MGR *state)
| Get next available job.
IMB_DLL_EXPORT IMB_JOB * | get_next_job_sse (IMB_MGR *state)
| Get next available job.
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 | des_key_schedule (uint64_t *ks, const void *key)
| DES key schedule set up.
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 | 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 | md5_one_block_sse (const void *data, void *digest)
IMB_DLL_EXPORT void | md5_one_block_avx (const void *data, void *digest)
IMB_DLL_EXPORT void | md5_one_block_avx2 (const void *data, void *digest)
IMB_DLL_EXPORT void | md5_one_block_avx512 (const void *data, void *digest)
IMB_DLL_EXPORT void | aes_keyexp_128_sse (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_128_avx (const void *key, void *enc_exp_keys, void *dec_exp_keys)
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_128_avx512 (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_sse (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_avx (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_avx2 (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_avx512 (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_keyexp_256_avx (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_avx2 (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_avx512 (const void *key, void *enc_exp_keys, void *dec_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_128_enc_sse (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_128_enc_avx (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_128_enc_avx2 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_128_enc_avx512 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_enc_sse (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_enc_avx (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_enc_avx2 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_192_enc_avx512 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_enc_sse (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_enc_avx (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_enc_avx2 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_keyexp_256_enc_avx512 (const void *key, void *enc_exp_keys)
IMB_DLL_EXPORT void | aes_xcbc_expand_key_sse (const void *key, void *k1_exp, void *k2, void *k3)
IMB_DLL_EXPORT void | aes_xcbc_expand_key_avx (const void *key, void *k1_exp, void *k2, void *k3)
IMB_DLL_EXPORT void | aes_xcbc_expand_key_avx2 (const void *key, void *k1_exp, void *k2, void *k3)
IMB_DLL_EXPORT void | aes_xcbc_expand_key_avx512 (const void *key, void *k1_exp, void *k2, void *k3)
IMB_DLL_EXPORT void | aes_cmac_subkey_gen_sse (const void *key_exp, void *key1, void *key2)
IMB_DLL_EXPORT void | aes_cmac_subkey_gen_avx (const void *key_exp, void *key1, void *key2)
IMB_DLL_EXPORT void | aes_cmac_subkey_gen_avx2 (const void *key_exp, void *key1, void *key2)
IMB_DLL_EXPORT void | aes_cmac_subkey_gen_avx512 (const void *key_exp, void *key1, void *key2)
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.
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.
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.
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.
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.
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_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_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_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_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_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_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 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.
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.
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_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_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_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.
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_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 | 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_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_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_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 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.
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.
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_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.
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 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 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 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.
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_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 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 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 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 | 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 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 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.
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.
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 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.
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.
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_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.
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 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 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.
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.
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_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_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 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 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_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_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 | 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_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_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_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.
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_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_precomp_128_sse (struct gcm_key_data *key_data)
| Precomputation of AES-GCM-128 HashKey constants.
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_precomp_128_avx_gen4 (struct gcm_key_data *key_data)
| Precomputation of AES-GCM-128 HashKey constants.
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_precomp_192_avx_gen2 (struct gcm_key_data *key_data)
| Precomputation of AES-GCM-192 HashKey constants.
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 | aes_gcm_precomp_256_sse (struct gcm_key_data *key_data)
| Precomputation of AES-GCM-256 HashKey constants.
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 | 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_128_sse (const void *key, struct gcm_key_data *key_data)
| Pre-processes AES-GCM-128 key data.
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.
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_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_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_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_pre_256_sse (const void *key, struct gcm_key_data *key_data)
| Pre-processes AES-GCM-256 key data.
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.
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 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 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.
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 int | kasumi_f9_iv_gen (const uint32_t count, const uint32_t fresh, void *iv_ptr)
| Generation of KASUMI F9 Initialization Vector.
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 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 void | imb_clear_mem (void *mem, const size_t size)
| Force clearing/zeroing of memory.

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 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.
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.

## Macro Definition Documentation

## __forceinline

#define __forceinline static __forceinline

## DECLARE_ALIGNED

#define DECLARE_ALIGNED | ( |  | decl,
|  |  | alignval
| ) |  | __declspec(align(alignval)) decl

Macros for aligning data structures and function inlines

## IMB_AES128_CFB_ONE

#define IMB_AES128_CFB_ONE | ( |  | _mgr,
|  |  | _dst,
|  |  | _src,
|  |  | _iv,
|  |  | _exp_key,
|  |  | _len
| ) |  | ((_mgr)->aes128_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))

AES-CFB-128 Encrypt/Decrypt up to one block.

Processes only one buffer at a time. Designed to manage partial blocks of DOCSIS 3.1 SEC BPI.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [out] | _dst | Plaintext/Ciphertext output
  [in] | _src | Plaintext/Ciphertext input
  [in] | _iv | Pointer to 16 byte IV
  [in] | _exp_key | Pointer to expanded AES keys
  [in] | _len | Length of data in bytes

## IMB_AES128_GCM_DEC

#define IMB_AES128_GCM_DEC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm128_dec((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
(_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES128_GCM_DEC_FINALIZE

#define IMB_AES128_GCM_DEC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm128_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES128_GCM_DEC_UPDATE

#define IMB_AES128_GCM_DEC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm128_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES128_GCM_ENC

#define IMB_AES128_GCM_ENC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm128_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
(_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES128_GCM_ENC_FINALIZE

#define IMB_AES128_GCM_ENC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm128_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES128_GCM_ENC_UPDATE

#define IMB_AES128_GCM_ENC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm128_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES128_GCM_INIT

#define IMB_AES128_GCM_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl
| ) |  | ((_mgr)->gcm128_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))

## IMB_AES128_GCM_INIT_VAR_IV

#define IMB_AES128_GCM_INIT_VAR_IV | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl,
|  |  | _aad,
|  |  | _aadl
| ) |  |

Value:
((_mgr)->gcm128_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
(_aad), (_aadl)))

## IMB_AES128_GCM_PRE

#define IMB_AES128_GCM_PRE | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->gcm128_pre((_key), (_exp_key)))

## IMB_AES128_GCM_PRECOMP

#define IMB_AES128_GCM_PRECOMP | ( |  | _mgr,
|  |  | _key
| ) |  | ((_mgr)->gcm128_precomp((_key)))

## IMB_AES128_GMAC_FINALIZE

#define IMB_AES128_GMAC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gmac128_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES128_GMAC_INIT

#define IMB_AES128_GMAC_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl
| ) |  | ((_mgr)->gmac128_init((_exp_key), (_ctx), (_iv), (_ivl)))

## IMB_AES128_GMAC_UPDATE

#define IMB_AES128_GMAC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gmac128_update((_exp_key), (_ctx), (_src), (_len)))

## IMB_AES192_GCM_DEC

#define IMB_AES192_GCM_DEC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm192_dec((_exp_key), (_ctx), (_dst), (_src), (_len), \
(_iv), (_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES192_GCM_DEC_FINALIZE

#define IMB_AES192_GCM_DEC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm192_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES192_GCM_DEC_UPDATE

#define IMB_AES192_GCM_DEC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm192_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES192_GCM_ENC

#define IMB_AES192_GCM_ENC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm192_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
(_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES192_GCM_ENC_FINALIZE

#define IMB_AES192_GCM_ENC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm192_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES192_GCM_ENC_UPDATE

#define IMB_AES192_GCM_ENC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm192_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES192_GCM_INIT

#define IMB_AES192_GCM_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl
| ) |  | ((_mgr)->gcm192_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))

## IMB_AES192_GCM_INIT_VAR_IV

#define IMB_AES192_GCM_INIT_VAR_IV | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl,
|  |  | _aad,
|  |  | _aadl
| ) |  |

Value:
((_mgr)->gcm192_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
(_aad), (_aadl)))

## IMB_AES192_GCM_PRE

#define IMB_AES192_GCM_PRE | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->gcm192_pre((_key), (_exp_key)))

## IMB_AES192_GCM_PRECOMP

#define IMB_AES192_GCM_PRECOMP | ( |  | _mgr,
|  |  | _key
| ) |  | ((_mgr)->gcm192_precomp((_key)))

## IMB_AES192_GMAC_FINALIZE

#define IMB_AES192_GMAC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gmac192_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES192_GMAC_INIT

#define IMB_AES192_GMAC_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl
| ) |  | ((_mgr)->gmac192_init((_exp_key), (_ctx), (_iv), (_ivl)))

## IMB_AES192_GMAC_UPDATE

#define IMB_AES192_GMAC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gmac192_update((_exp_key), (_ctx), (_src), (_len)))

## IMB_AES256_CFB_ONE

#define IMB_AES256_CFB_ONE | ( |  | _mgr,
|  |  | _dst,
|  |  | _src,
|  |  | _iv,
|  |  | _exp_key,
|  |  | _len
| ) |  | ((_mgr)->aes256_cfb_one((_dst), (_src), (_iv), (_exp_key), (_len)))

AES-CFB-256 Encrypt/Decrypt up to one block.

Processes only one buffer at a time. Designed to manage partial blocks of DOCSIS 3.1 SEC BPI.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [out] | _dst | Plaintext/Ciphertext output
  [in] | _src | Plaintext/Ciphertext input
  [in] | _iv | Pointer to 16 byte IV
  [in] | _exp_key | Pointer to expanded AES keys
  [in] | _len | Length of data in bytes

## IMB_AES256_GCM_DEC

#define IMB_AES256_GCM_DEC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm256_dec((_exp_key), (_ctx), (_dst), (_src), (_len), \
(_iv), (_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES256_GCM_DEC_FINALIZE

#define IMB_AES256_GCM_DEC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm256_dec_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES256_GCM_DEC_UPDATE

#define IMB_AES256_GCM_DEC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm256_dec_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES256_GCM_ENC

#define IMB_AES256_GCM_ENC | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl,
|  |  | _tag,
|  |  | _tagl
| ) |  |

Value:
((_mgr)->gcm256_enc((_exp_key), (_ctx), (_dst), (_src), (_len), (_iv), \
(_aad), (_aadl), (_tag), (_tagl)))

## IMB_AES256_GCM_ENC_FINALIZE

#define IMB_AES256_GCM_ENC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gcm256_enc_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES256_GCM_ENC_UPDATE

#define IMB_AES256_GCM_ENC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gcm256_enc_update((_exp_key), (_ctx), (_dst), (_src), (_len)))

## IMB_AES256_GCM_INIT

#define IMB_AES256_GCM_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl
| ) |  | ((_mgr)->gcm256_init((_exp_key), (_ctx), (_iv), (_aad), (_aadl)))

## IMB_AES256_GCM_INIT_VAR_IV

#define IMB_AES256_GCM_INIT_VAR_IV | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl,
|  |  | _aad,
|  |  | _aadl
| ) |  |

Value:
((_mgr)->gcm256_init_var_iv((_exp_key), (_ctx), (_iv), (_ivl), \
(_aad), (_aadl)))

## IMB_AES256_GCM_PRE

#define IMB_AES256_GCM_PRE | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->gcm256_pre((_key), (_exp_key)))

## IMB_AES256_GCM_PRECOMP

#define IMB_AES256_GCM_PRECOMP | ( |  | _mgr,
|  |  | _key
| ) |  | ((_mgr)->gcm256_precomp((_key)))

## IMB_AES256_GMAC_FINALIZE

#define IMB_AES256_GMAC_FINALIZE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->gmac256_finalize((_exp_key), (_ctx), (_tag), (_tagl)))

## IMB_AES256_GMAC_INIT

#define IMB_AES256_GMAC_INIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _ivl
| ) |  | ((_mgr)->gmac256_init((_exp_key), (_ctx), (_iv), (_ivl)))

## IMB_AES256_GMAC_UPDATE

#define IMB_AES256_GMAC_UPDATE | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _ctx,
|  |  | _src,
|  |  | _len
| ) |  | ((_mgr)->gmac256_update((_exp_key), (_ctx), (_src), (_len)))

## IMB_AES_BLOCK_SIZE

#define IMB_AES_BLOCK_SIZE 16

## IMB_AES_CMAC_SUBKEY_GEN_128

#define IMB_AES_CMAC_SUBKEY_GEN_128 | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _key1,
|  |  | _key2
| ) |  | ((_mgr)->cmac_subkey_gen_128((_exp_key), (_key1), (_key2)))

Generate AES-128-CMAC subkeys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Input expanded AES-128-CMAC key
  [out] | _key1 | Subkey 1
  [out] | _key2 | Subkey 2

## IMB_AES_CMAC_SUBKEY_GEN_256

#define IMB_AES_CMAC_SUBKEY_GEN_256 | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _key1,
|  |  | _key2
| ) |  | ((_mgr)->cmac_subkey_gen_256((_exp_key), (_key1), (_key2)))

Generate AES-256-CMAC subkeys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Input expanded AES-256-CMAC key
  [out] | _key1 | Subkey 1
  [out] | _key2 | Subkey 2

## IMB_AES_KEYEXP_128

#define IMB_AES_KEYEXP_128 | ( |  | _mgr,
|  |  | _key,
|  |  | _enc_exp_key,
|  |  | _dec_exp_key
| ) |  | ((_mgr)->keyexp_128((_key), (_enc_exp_key), (_dec_exp_key)))

Generate encryption/decryption AES-128 expansion keys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | AES-128 key
  [out] | _enc_exp_key | AES-128 encryption expansion key
  [out] | _dec_exp_key | AES-128 decryption expansion key

## IMB_AES_KEYEXP_192

#define IMB_AES_KEYEXP_192 | ( |  | _mgr,
|  |  | _key,
|  |  | _enc_exp_key,
|  |  | _dec_exp_key
| ) |  | ((_mgr)->keyexp_192((_key), (_enc_exp_key), (_dec_exp_key)))

Generate encryption/decryption AES-192 expansion keys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | AES-192 key
  [out] | _enc_exp_key | AES-192 encryption expansion key
  [out] | _dec_exp_key | AES-192 decryption expansion key

## IMB_AES_KEYEXP_256

#define IMB_AES_KEYEXP_256 | ( |  | _mgr,
|  |  | _key,
|  |  | _enc_exp_key,
|  |  | _dec_exp_key
| ) |  | ((_mgr)->keyexp_256((_key), (_enc_exp_key), (_dec_exp_key)))

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | AES-256 key
  [out] | _enc_exp_key | AES-256 encryption expansion key
  [out] | _dec_exp_key | AES-256 decryption expansion key

## IMB_AES_XCBC_KEYEXP

#define IMB_AES_XCBC_KEYEXP | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key,
|  |  | _exp_key2,
|  |  | _exp_key3
| ) |  | ((_mgr)->xcbc_keyexp((_key), (_exp_key), (_exp_key2), (_exp_key3)))

Generate AES-128-XCBC expansion keys.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | AES-128-XCBC key
  [out] | _exp_key | k1 expansion key
  [out] | _exp_key2 | k2 expansion key
  [out] | _exp_key3 | k3 expansion key

## IMB_ASSERT

#define IMB_ASSERT | ( |  | x | ) |

Custom ASSERT and DIM macros

## IMB_CHACHA20_POLY1305_DEC_FINALIZE

#define IMB_CHACHA20_POLY1305_DEC_FINALIZE | ( |  | _mgr,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))

## IMB_CHACHA20_POLY1305_DEC_UPDATE

#define IMB_CHACHA20_POLY1305_DEC_UPDATE | ( |  | _mgr,
|  |  | _key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  |

Value:
((_mgr)->chacha20_poly1305_dec_update((_key), (_ctx), (_dst), (_src), \
(_len)))

## IMB_CHACHA20_POLY1305_ENC_FINALIZE

#define IMB_CHACHA20_POLY1305_ENC_FINALIZE | ( |  | _mgr,
|  |  | _ctx,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->chacha20_poly1305_finalize((_ctx), (_tag), (_tagl)))

## IMB_CHACHA20_POLY1305_ENC_UPDATE

#define IMB_CHACHA20_POLY1305_ENC_UPDATE | ( |  | _mgr,
|  |  | _key,
|  |  | _ctx,
|  |  | _dst,
|  |  | _src,
|  |  | _len
| ) |  |

Value:
((_mgr)->chacha20_poly1305_enc_update((_key), (_ctx), (_dst), (_src), \
(_len)))

## IMB_CHACHA20_POLY1305_INIT

#define IMB_CHACHA20_POLY1305_INIT | ( |  | _mgr,
|  |  | _key,
|  |  | _ctx,
|  |  | _iv,
|  |  | _aad,
|  |  | _aadl
| ) |  |

Value:
((_mgr)->chacha20_poly1305_init((_key), (_ctx), (_iv), (_aad), \
(_aadl)))

## IMB_CPUFLAGS_AVX

#define IMB_CPUFLAGS_AVX (IMB_CPUFLAGS_SSE | IMB_FEATURE_AVX)

## IMB_CPUFLAGS_AVX2

#define IMB_CPUFLAGS_AVX2

Value:
(IMB_CPUFLAGS_AVX | IMB_FEATURE_AVX2 | \
IMB_FEATURE_BMI2)
IMB_CPUFLAGS_AVX
#define IMB_CPUFLAGS_AVX
Definition intel-ipsec-mb.h:961
IMB_FEATURE_AVX2
#define IMB_FEATURE_AVX2
Definition intel-ipsec-mb.h:932
IMB_FEATURE_BMI2
#define IMB_FEATURE_BMI2
Definition intel-ipsec-mb.h:947

## IMB_CPUFLAGS_AVX2_T2

#define IMB_CPUFLAGS_AVX2_T2

Value:
(IMB_CPUFLAGS_AVX2 | IMB_FEATURE_SHANI | \
IMB_FEATURE_VAES | IMB_FEATURE_VPCLMULQDQ | \
IMB_FEATURE_GFNI)
IMB_FEATURE_VPCLMULQDQ
#define IMB_FEATURE_VPCLMULQDQ
Definition intel-ipsec-mb.h:942
IMB_FEATURE_GFNI
#define IMB_FEATURE_GFNI
Definition intel-ipsec-mb.h:945
IMB_CPUFLAGS_AVX2
#define IMB_CPUFLAGS_AVX2
Definition intel-ipsec-mb.h:962
IMB_FEATURE_SHANI
#define IMB_FEATURE_SHANI
Definition intel-ipsec-mb.h:926
IMB_FEATURE_VAES
#define IMB_FEATURE_VAES
Definition intel-ipsec-mb.h:941

## IMB_CPUFLAGS_AVX2_T3

#define IMB_CPUFLAGS_AVX2_T3 (IMB_CPUFLAGS_AVX2_T2 | IMB_FEATURE_AVX_IFMA)

## IMB_CPUFLAGS_AVX512

#define IMB_CPUFLAGS_AVX512 (IMB_CPUFLAGS_AVX2 | IMB_FEATURE_AVX512_SKX)

## IMB_CPUFLAGS_AVX512_T2

#define IMB_CPUFLAGS_AVX512_T2

Value:
(IMB_CPUFLAGS_AVX512 | IMB_FEATURE_VAES | \
IMB_FEATURE_VPCLMULQDQ | IMB_FEATURE_GFNI | \
IMB_FEATURE_AVX512_IFMA | IMB_FEATURE_SHANI)
IMB_FEATURE_AVX512_IFMA
#define IMB_FEATURE_AVX512_IFMA
Definition intel-ipsec-mb.h:946
IMB_CPUFLAGS_AVX512
#define IMB_CPUFLAGS_AVX512
Definition intel-ipsec-mb.h:964

## IMB_CPUFLAGS_AVX_T2

#define IMB_CPUFLAGS_AVX_T2

Value:
(IMB_CPUFLAGS_AVX | IMB_FEATURE_SHANI | \
IMB_FEATURE_GFNI)

## IMB_CPUFLAGS_NO_AESNI

#define IMB_CPUFLAGS_NO_AESNI (IMB_FEATURE_SSE4_2 | IMB_FEATURE_CMOV)

CPU flags needed for each implementation

## IMB_CPUFLAGS_SSE

#define IMB_CPUFLAGS_SSE

Value:
(IMB_CPUFLAGS_NO_AESNI | IMB_FEATURE_AESNI | \
IMB_FEATURE_PCLMULQDQ)
IMB_FEATURE_AESNI
#define IMB_FEATURE_AESNI
Definition intel-ipsec-mb.h:927
IMB_FEATURE_PCLMULQDQ
#define IMB_FEATURE_PCLMULQDQ
Definition intel-ipsec-mb.h:928
IMB_CPUFLAGS_NO_AESNI
#define IMB_CPUFLAGS_NO_AESNI
Definition intel-ipsec-mb.h:956

## IMB_CPUFLAGS_SSE_T2

#define IMB_CPUFLAGS_SSE_T2 (IMB_CPUFLAGS_SSE | IMB_FEATURE_SHANI)

## IMB_CPUFLAGS_SSE_T3

#define IMB_CPUFLAGS_SSE_T3 (IMB_CPUFLAGS_SSE_T2 | IMB_FEATURE_GFNI)

## IMB_CRC10_IUUP_DATA

#define IMB_CRC10_IUUP_DATA | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc10_iuup_data(_src, _len)

IUUP CRC10 function (3GPP TS 25.415)

## IMB_CRC11_FP_HEADER

#define IMB_CRC11_FP_HEADER | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc11_fp_header(_src, _len)

Framing Protocol CRC11 function (3GPP TS 25.435, 3GPP TS 25.427)

## IMB_CRC16_FP_DATA

#define IMB_CRC16_FP_DATA | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc16_fp_data(_src, _len)

Framing Protocol CRC16 function (3GPP TS 25.435, 3GPP TS 25.427)

## IMB_CRC16_X25

#define IMB_CRC16_X25 | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc16_x25(_src, _len)

CRC16 X25 function

## IMB_CRC24_LTE_A

#define IMB_CRC24_LTE_A | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc24_lte_a(_src, _len)

LTE CRC24A function

## IMB_CRC24_LTE_B

#define IMB_CRC24_LTE_B | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc24_lte_b(_src, _len)

LTE CRC24B function

## IMB_CRC32_ETHERNET_FCS

#define IMB_CRC32_ETHERNET_FCS | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc32_ethernet_fcs(_src, _len)

CRC32 Ethernet FCS function

## IMB_CRC32_SCTP

#define IMB_CRC32_SCTP | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc32_sctp(_src, _len)

CRC32 SCTP function

## IMB_CRC32_WIMAX_OFDMA_DATA

#define IMB_CRC32_WIMAX_OFDMA_DATA | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc32_wimax_ofdma_data(_src, _len)

WIMAX OFDMA DATA CRC32 function (IEEE 802.16)

## IMB_CRC6_IUUP_HEADER

#define IMB_CRC6_IUUP_HEADER | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc6_iuup_header(_src, _len)

IUUP CRC6 function (3GPP TS 25.415)

## IMB_CRC7_FP_HEADER

#define IMB_CRC7_FP_HEADER | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc7_fp_header(_src, _len)

Framing Protocol CRC7 function (3GPP TS 25.435, 3GPP TS 25.427)

## IMB_CRC8_WIMAX_OFDMA_HCS

#define IMB_CRC8_WIMAX_OFDMA_HCS | ( |  | _mgr,
|  |  | _src,
|  |  | _len
| ) |  | (_mgr)->crc8_wimax_ofdma_hcs(_src, _len)

WIMAX OFDMA HCS CRC8 function (IEEE 802.16)

## IMB_DES_BLOCK_SIZE

#define IMB_DES_BLOCK_SIZE 8

## IMB_DES_KEY_SCHED_SIZE

#define IMB_DES_KEY_SCHED_SIZE (16 * 8)

Algorithm constants 16 rounds x 8 bytes

## IMB_DES_KEYSCHED

#define IMB_DES_KEYSCHED | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _key
| ) |  | ((_mgr)->des_key_sched((_exp_key), (_key)))

## IMB_DIM

#define IMB_DIM | ( |  | x | ) | (sizeof(x) / sizeof(x[0]))

## IMB_DLL_EXPORT

#define IMB_DLL_EXPORT

Windows DLL export is done via DEF file

## IMB_DLL_LOCAL

#define IMB_DLL_LOCAL

## IMB_DOCSIS_CRC32_MIN_ETH_PDU_SIZE

#define IMB_DOCSIS_CRC32_MIN_ETH_PDU_SIZE 14

Minimum Ethernet frame size to calculate CRC32 Source Address (6 bytes) + Destination Address (6 bytes) + Type/Len (2 bytes)

## IMB_DOCSIS_CRC32_TAG_SIZE

#define IMB_DOCSIS_CRC32_TAG_SIZE 4

## IMB_FEATURE_AESNI

#define IMB_FEATURE_AESNI (1ULL << 1)

## IMB_FEATURE_AESNI_EMU

#define IMB_FEATURE_AESNI_EMU (1ULL << 19)

## IMB_FEATURE_AVX

#define IMB_FEATURE_AVX (1ULL << 5)

## IMB_FEATURE_AVX2

#define IMB_FEATURE_AVX2 (1ULL << 6)

## IMB_FEATURE_AVX512_IFMA

#define IMB_FEATURE_AVX512_IFMA (1ULL << 17)

## IMB_FEATURE_AVX512_SKX

#define IMB_FEATURE_AVX512_SKX

Value:
(IMB_FEATURE_AVX512F | IMB_FEATURE_AVX512DQ | \
IMB_FEATURE_AVX512CD | IMB_FEATURE_AVX512BW | \
IMB_FEATURE_AVX512VL)
IMB_FEATURE_AVX512BW
#define IMB_FEATURE_AVX512BW
Definition intel-ipsec-mb.h:936
IMB_FEATURE_AVX512VL
#define IMB_FEATURE_AVX512VL
Definition intel-ipsec-mb.h:937
IMB_FEATURE_AVX512DQ
#define IMB_FEATURE_AVX512DQ
Definition intel-ipsec-mb.h:934
IMB_FEATURE_AVX512F
#define IMB_FEATURE_AVX512F
Definition intel-ipsec-mb.h:933
IMB_FEATURE_AVX512CD
#define IMB_FEATURE_AVX512CD
Definition intel-ipsec-mb.h:935

## IMB_FEATURE_AVX512BW

#define IMB_FEATURE_AVX512BW (1ULL << 10)

## IMB_FEATURE_AVX512CD

#define IMB_FEATURE_AVX512CD (1ULL << 9)

## IMB_FEATURE_AVX512DQ

#define IMB_FEATURE_AVX512DQ (1ULL << 8)

## IMB_FEATURE_AVX512F

#define IMB_FEATURE_AVX512F (1ULL << 7)

## IMB_FEATURE_AVX512VL

#define IMB_FEATURE_AVX512VL (1ULL << 11)

## IMB_FEATURE_AVX_IFMA

#define IMB_FEATURE_AVX_IFMA (1ULL << 22)

## IMB_FEATURE_BMI2

#define IMB_FEATURE_BMI2 (1ULL << 18)

## IMB_FEATURE_CMOV

#define IMB_FEATURE_CMOV (1ULL << 3)

## IMB_FEATURE_GFNI

#define IMB_FEATURE_GFNI (1ULL << 16)

## IMB_FEATURE_PCLMULQDQ

#define IMB_FEATURE_PCLMULQDQ (1ULL << 2)

## IMB_FEATURE_SAFE_DATA

#define IMB_FEATURE_SAFE_DATA (1ULL << 14)

## IMB_FEATURE_SAFE_PARAM

#define IMB_FEATURE_SAFE_PARAM (1ULL << 15)

## IMB_FEATURE_SELF_TEST

#define IMB_FEATURE_SELF_TEST (1ULL << 20) /* self-test feature present */

## IMB_FEATURE_SELF_TEST_PASS

#define IMB_FEATURE_SELF_TEST_PASS (1ULL << 21) /* self-test passed */

## IMB_FEATURE_SHANI

#define IMB_FEATURE_SHANI (1ULL << 0)

Multi-buffer manager detected features

- if bit is set then hardware supports given extension
- valid after call to init_mb_mgr() or alloc_mb_mgr()
- some HW supported features can be disabled via IMB_FLAG_xxx (see above)

## IMB_FEATURE_SSE4_2

#define IMB_FEATURE_SSE4_2 (1ULL << 4)

## IMB_FEATURE_VAES

#define IMB_FEATURE_VAES (1ULL << 12)

## IMB_FEATURE_VPCLMULQDQ

#define IMB_FEATURE_VPCLMULQDQ (1ULL << 13)

## IMB_FLAG_AESNI_OFF

#define IMB_FLAG_AESNI_OFF (1ULL << 1)

disable use of AESNI extension

## IMB_FLAG_GFNI_OFF

#define IMB_FLAG_GFNI_OFF (1ULL << 2)

disable use of GFNI extension

## IMB_FLAG_SHANI_OFF

#define IMB_FLAG_SHANI_OFF (1ULL << 0)

disable use of SHANI extension

## IMB_FLUSH_BURST

#define IMB_FLUSH_BURST | ( |  | _mgr,
|  |  | _max_jobs,
|  |  | _jobs
| ) |  | ((_mgr)->flush_burst((_mgr), (_max_jobs), (_jobs)))

Force up to max_jobs outstanding jobs to completion.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure
  [in] | _max_jobs | Maximum number of jobs to flush
  [out] | _jobs | List of pointers to completed jobs

Returns
  Number of completed jobs

## IMB_FLUSH_JOB

#define IMB_FLUSH_JOB | ( |  | _mgr | ) | ((_mgr)->flush_job((_mgr)))

Force processing until next job in queue is completed.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no more jobs to process

## IMB_GCM_128_KEY_LEN

#define IMB_GCM_128_KEY_LEN (16)

## IMB_GCM_192_KEY_LEN

#define IMB_GCM_192_KEY_LEN (24)

## IMB_GCM_256_KEY_LEN

#define IMB_GCM_256_KEY_LEN (32)

## IMB_GCM_BLOCK_LEN

#define IMB_GCM_BLOCK_LEN 16

## IMB_GCM_ENC_KEY_LEN

#define IMB_GCM_ENC_KEY_LEN 16

## IMB_GCM_IV_DATA_LEN

#define IMB_GCM_IV_DATA_LEN (12)

IV data is limited to 16 bytes as follows: 12 bytes is provided by an application - pre-counter block j0: 4 byte salt (from Security Association) concatenated with 8 byte Initialization Vector (from IPSec ESP Payload). 4 byte value 0x00000001 is padded automatically by the library - there is no need to add these 4 bytes on application side anymore.

## IMB_GCM_KEY_SETS

#define IMB_GCM_KEY_SETS (15)

exp key + 14 exp round keys

## IMB_GET_COMPLETED_JOB

#define IMB_GET_COMPLETED_JOB | ( |  | _mgr | ) | ((_mgr)->get_completed_job((_mgr)))

Get next completed job.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if next job not complete

## IMB_GET_NEXT_BURST

#define IMB_GET_NEXT_BURST | ( |  | _mgr,
|  |  | _n_jobs,
|  |  | _jobs
| ) |  | ((_mgr)->get_next_burst((_mgr), (_n_jobs), (_jobs)))

Get next available burst (list of pointers to available IMB_JOB structures).

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure
  [in] | _n_jobs | Requested number of burst jobs
  [out] | _jobs | List of pointers to returned jobs

Returns
  Number of returned jobs. May be less than number of requested jobs if not enough space in queue. IMB_FLUSH_BURST() can be used to free up space.

## IMB_GET_NEXT_JOB

#define IMB_GET_NEXT_JOB | ( |  | _mgr | ) | ((_mgr)->get_next_job((_mgr)))

Get next available job.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Pointer to next free IMB_JOB in the queue

## IMB_GHASH

#define IMB_GHASH | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _src,
|  |  | _len,
|  |  | _tag,
|  |  | _tagl
| ) |  | ((_mgr)->ghash((_exp_key), (_src), (_len), (_tag), (_tagl)))

## IMB_GHASH_PRE

#define IMB_GHASH_PRE | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->ghash_pre((_key), (_exp_key)))

## IMB_HEC_32

#define IMB_HEC_32 | ( |  | _mgr,
|  |  | _src
| ) |  | ((_mgr)->hec_32(_src))

HEC compute functions

## IMB_HEC_64

#define IMB_HEC_64 | ( |  | _mgr,
|  |  | _src
| ) |  | ((_mgr)->hec_64(_src))

## IMB_KASUMI_BLOCK_SIZE

#define IMB_KASUMI_BLOCK_SIZE 8

## IMB_KASUMI_DIGEST_SIZE

#define IMB_KASUMI_DIGEST_SIZE 4

## IMB_KASUMI_F8_1_BUFFER

#define IMB_KASUMI_F8_1_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len
| ) |  | ((_mgr)->f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))

Kasumi byte-level f8 operation on a single buffer.

This function performs kasumi f8 operation on a single buffer. The key has already been scheduled with kasumi_init_f8_key_sched(). No extra bits are modified.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | Initialization vector
  [in] | _src | Input buffer
  [out] | _dst | Output buffer
  [in] | _len | Length in BYTES

## IMB_KASUMI_F8_1_BUFFER_BIT

#define IMB_KASUMI_F8_1_BUFFER_BIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _offset
| ) |  |

Value:
((_mgr)->f8_1_buffer_bit((_exp_key), (_iv), (_src), (_dst), (_len), \
(_offset)))

Kasumi bit-level f8 operation on a single buffer.

This function performs kasumi f8 operation on a single buffer. The key has already been scheduled with kasumi_init_f8_key_sched(). No extra bits are modified.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | Initialization vector
  [in] | _src | Input buffer
  [out] | _dst | Output buffer
  [in] | _len | Length in BITS
  [in] | _offset | Offset in BITS from begin of input buffer

## IMB_KASUMI_F8_2_BUFFER

#define IMB_KASUMI_F8_2_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _src1,
|  |  | _dst1,
|  |  | _len1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _len2
| ) |  |

Value:
((_mgr)->f8_2_buffer((_exp_key), (_iv1), (_iv2), (_src1), (_dst1), \
(_len1), (_src2), (_dst2), (_len2)))

Kasumi byte-level f8 operation in parallel on two buffers.

This function performs kasumi f8 operation on a two buffers. They will be processed with the same key, which has already been scheduled with kasumi_init_f8_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | Initialization vector for buffer in1
  [in] | _iv2 | Initialization vector for buffer in2
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _len1 | Length in BYTES of input buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _len2 | Length in BYTES of input buffer 2

## IMB_KASUMI_F8_3_BUFFER

#define IMB_KASUMI_F8_3_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _iv3,
|  |  | _src1,
|  |  | _dst1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _src3,
|  |  | _dst3,
|  |  | _len
| ) |  |

Value:
((_mgr)->f8_3_buffer((_exp_key), (_iv1), (_iv2), (_iv3), (_src1), \
(_dst1), (_src2), (_dst2), (_src3), (_dst3), \
(_len)))

kasumi byte-level f8 operation in parallel on three buffers

This function performs kasumi f8 operation on a three buffers. They must all have the same length and they will be processed with the same key, which has already been scheduled with kasumi_init_f8_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | Initialization vector for buffer in1
  [in] | _iv2 | Initialization vector for buffer in2
  [in] | _iv3 | Initialization vector for buffer in3
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _src3 | Input buffer 3
  [out] | _dst3 | Output buffer 3
  [in] | _len | Common length in bytes for all buffers

## IMB_KASUMI_F8_4_BUFFER

#define IMB_KASUMI_F8_4_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _iv3,
|  |  | _iv4,
|  |  | _src1,
|  |  | _dst1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _src3,
|  |  | _dst3,
|  |  | _src4,
|  |  | _dst4,
|  |  | _len
| ) |  |

Value:
((_mgr)->f8_4_buffer((_exp_key), (_iv1), (_iv2), (_iv3), (_iv4), \
(_src1), (_dst1), (_src2), (_dst2), \
(_src3), (_dst3), (_src4), (_dst4), (_len)))

kasumi byte-level f8 operation in parallel on four buffers

This function performs kasumi f8 operation on four buffers. They must all have the same length and they will be processed with the same key, which has already been scheduled with kasumi_init_f8_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | Initialization vector for buffer in1
  [in] | _iv2 | Initialization vector for buffer in2
  [in] | _iv3 | Initialization vector for buffer in3
  [in] | _iv4 | Initialization vector for buffer in4
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _src3 | Input buffer 3
  [out] | _dst3 | Output buffer 3
  [in] | _src4 | Input buffer 4
  [out] | _dst4 | Output buffer 4
  [in] | _len | Common length in bytes for all buffers

## IMB_KASUMI_F8_N_BUFFER

#define IMB_KASUMI_F8_N_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _count
| ) |  |

Value:
((_mgr)->f8_n_buffer((_exp_key), (_iv), (_src), (_dst), (_len), \
(_count)))

Kasumi f8 operation on N buffers.

All input buffers can have different lengths and they will be processed with the same key, which has already been scheduled with kasumi_init_f8_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | Array of IV values
  [in] | _src | Array of input buffers
  [out] | _dst | Array of output buffers
  [in] | _len | Array of corresponding input buffer lengths in BITS
  [in] | _count | Number of input buffers

## IMB_KASUMI_F9_1_BUFFER

#define IMB_KASUMI_F9_1_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _src,
|  |  | _len,
|  |  | _tag
| ) |  | ((_mgr)->f9_1_buffer((_exp_key), (_src), (_len), (_tag)))

Kasumi bit-level f9 operation on a single buffer.

The first QWORD of in represents the COUNT and FRESH, the last QWORD represents the DIRECTION and PADDING. (See 3GPP TS 35.201 v10.0 section 4)

The key has already been scheduled with kasumi_init_f9_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _src | Input buffer
  [in] | _len | Length in BYTES of the data to be hashed
  [out] | _tag | Computed digest

## IMB_KASUMI_F9_1_BUFFER_USER

#define IMB_KASUMI_F9_1_BUFFER_USER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _len,
|  |  | _tag,
|  |  | _dir
| ) |  |

Value:
((_mgr)->f9_1_buffer_user((_exp_key), (_iv), (_src), (_len), \
(_tag), (_dir)))

Kasumi bit-level f9 operation on a single buffer.

The key has already been scheduled with kasumi_init_f9_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | Initialization vector
  [in] | _src | Input buffer
  [in] | _len | Length in BITS of the data to be hashed
  [out] | _tag | Computed digest
  [in] | _dir | Direction bit

## IMB_KASUMI_INIT_F8_KEY_SCHED

#define IMB_KASUMI_INIT_F8_KEY_SCHED | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->kasumi_init_f8_key_sched((_key), (_exp_key)))

KASUMI F8 key schedule init function.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | Confidentiality key (expected in LE format)
  [out] | _exp_key | Key schedule context to be initialised

Returns
  0 on success, -1 on failure

## IMB_KASUMI_INIT_F9_KEY_SCHED

#define IMB_KASUMI_INIT_F9_KEY_SCHED | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->kasumi_init_f9_key_sched((_key), (_exp_key)))

KASUMI F9 key schedule init function.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | Integrity key (expected in LE format)
  [out] | _exp_key | Key schedule context to be initialised

Returns
  0 on success, -1 on failure

## IMB_KASUMI_IV_SIZE

#define IMB_KASUMI_IV_SIZE 8

## IMB_KASUMI_KEY_SCHED_SIZE

#define IMB_KASUMI_KEY_SCHED_SIZE | ( |  | _mgr | ) | ((_mgr)->kasumi_key_sched_size())

This function returns the size of the kasumi_key_sched_t, used to store the key schedule.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure

Returns
  size of kasumi_key_sched_t type success

## IMB_KASUMI_KEY_SIZE

#define IMB_KASUMI_KEY_SIZE 16

## IMB_MAX_BURST_SIZE

#define IMB_MAX_BURST_SIZE 128

## IMB_MAX_JOBS

#define IMB_MAX_JOBS (IMB_MAX_BURST_SIZE * 2)

## IMB_MAX_TAG_LEN

#define IMB_MAX_TAG_LEN (16)

Authenticated Tag Length in bytes. Valid values are 16 (most likely), 12 or 8.

## IMB_MD5_BLOCK_SIZE

#define IMB_MD5_BLOCK_SIZE 64

## IMB_MD5_DIGEST_SIZE_IN_BYTES

#define IMB_MD5_DIGEST_SIZE_IN_BYTES 16

## IMB_MD5_ONE_BLOCK

#define IMB_MD5_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->md5_one_block((_src), (_tag)))

Authenticate 64-byte data buffer with MD5.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 64-byte data buffer
  [out] | _tag | Digest output (16 bytes)

## IMB_QUEUE_SIZE

#define IMB_QUEUE_SIZE | ( |  | _mgr | ) | ((_mgr)->queue_size((_mgr)))

Get number of jobs queued to be processed.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Number of jobs in the queue

## IMB_SHA1

#define IMB_SHA1 | ( |  | _mgr,
|  |  | _src,
|  |  | _length,
|  |  | _tag
| ) |  | ((_mgr)->sha1((_src), (_length), (_tag)))

Authenticate variable sized data with SHA1.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | Data buffer
  [in] | _length | Length of data in bytes for authentication.
  [out] | _tag | Digest output (20 bytes)

## IMB_SHA1_BLOCK_SIZE

#define IMB_SHA1_BLOCK_SIZE 64

512 bits is 64 byte blocks

## IMB_SHA1_DIGEST_SIZE_IN_BYTES

#define IMB_SHA1_DIGEST_SIZE_IN_BYTES 20

## IMB_SHA1_ONE_BLOCK

#define IMB_SHA1_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->sha1_one_block((_src), (_tag)))

Authenticate 64-byte data buffer with SHA1.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 64-byte data buffer
  [out] | _tag | Digest output (20 bytes)

## IMB_SHA224

#define IMB_SHA224 | ( |  | _mgr,
|  |  | _src,
|  |  | _length,
|  |  | _tag
| ) |  | ((_mgr)->sha224((_src), (_length), (_tag)))

Authenticate variable sized data with SHA224.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | Data buffer
  [in] | _length | Length of data in bytes for authentication.
  [out] | _tag | Digest output (28 bytes)

## IMB_SHA224_DIGEST_SIZE_IN_BYTES

#define IMB_SHA224_DIGEST_SIZE_IN_BYTES 28

## IMB_SHA224_ONE_BLOCK

#define IMB_SHA224_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->sha224_one_block((_src), (_tag)))

Authenticate 64-byte data buffer with SHA224.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 64-byte data buffer
  [out] | _tag | Digest output (28 bytes)

## IMB_SHA256

#define IMB_SHA256 | ( |  | _mgr,
|  |  | _src,
|  |  | _length,
|  |  | _tag
| ) |  | ((_mgr)->sha256((_src), (_length), (_tag)))

Authenticate variable sized data with SHA256.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | Data buffer
  [in] | _length | Length of data in bytes for authentication.
  [out] | _tag | Digest output (32 bytes)

## IMB_SHA256_DIGEST_SIZE_IN_BYTES

#define IMB_SHA256_DIGEST_SIZE_IN_BYTES 32

## IMB_SHA256_ONE_BLOCK

#define IMB_SHA256_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->sha256_one_block((_src), (_tag)))

Authenticate 64-byte data buffer with SHA256.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 64-byte data buffer
  [out] | _tag | Digest output (32 bytes)

## IMB_SHA384

#define IMB_SHA384 | ( |  | _mgr,
|  |  | _src,
|  |  | _length,
|  |  | _tag
| ) |  | ((_mgr)->sha384((_src), (_length), (_tag)))

Authenticate variable sized data with SHA384.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | Data buffer
  [in] | _length | Length of data in bytes for authentication.
  [out] | _tag | Digest output (48 bytes)

## IMB_SHA384_DIGEST_SIZE_IN_BYTES

#define IMB_SHA384_DIGEST_SIZE_IN_BYTES 48

## IMB_SHA384_ONE_BLOCK

#define IMB_SHA384_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->sha384_one_block((_src), (_tag)))

Authenticate 128-byte data buffer with SHA384.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 128-byte data buffer
  [out] | _tag | Digest output (48 bytes)

## IMB_SHA512

#define IMB_SHA512 | ( |  | _mgr,
|  |  | _src,
|  |  | _length,
|  |  | _tag
| ) |  | ((_mgr)->sha512((_src), (_length), (_tag)))

Authenticate variable sized data with SHA512.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | Data buffer
  [in] | _length | Length of data in bytes for authentication.
  [out] | _tag | Digest output (20 bytes)

## IMB_SHA512_DIGEST_SIZE_IN_BYTES

#define IMB_SHA512_DIGEST_SIZE_IN_BYTES 64

## IMB_SHA512_ONE_BLOCK

#define IMB_SHA512_ONE_BLOCK | ( |  | _mgr,
|  |  | _src,
|  |  | _tag
| ) |  | ((_mgr)->sha512_one_block((_src), (_tag)))

Authenticate 128-byte data buffer with SHA512.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _src | 128-byte data buffer
  [out] | _tag | Digest output (64 bytes)

## IMB_SHA_224_BLOCK_SIZE

#define IMB_SHA_224_BLOCK_SIZE 64

512 bits is 64 byte blocks

## IMB_SHA_256_BLOCK_SIZE

#define IMB_SHA_256_BLOCK_SIZE 64

512 bits is 64 byte blocks

## IMB_SHA_384_BLOCK_SIZE

#define IMB_SHA_384_BLOCK_SIZE 128

## IMB_SHA_512_BLOCK_SIZE

#define IMB_SHA_512_BLOCK_SIZE 128

## IMB_SNOW3G_F8_1_BUFFER

#define IMB_SNOW3G_F8_1_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len
| ) |  | ((_mgr)->snow3g_f8_1_buffer((_exp_key), (_iv), (_src), (_dst), (_len)))

This function performs snow3g f8 operation on a single buffer. The key has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | iv[3] = count iv[2] = (bearer << 27) | ((dir & 0x1) << 26) iv[1] = pIV[3] iv[0] = pIV[2]
  [in] | _src | Input buffer
  [out] | _dst | Output buffer
  [in] | _len | Length in bits of input buffer

## IMB_SNOW3G_F8_1_BUFFER_BIT

#define IMB_SNOW3G_F8_1_BUFFER_BIT | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _offset
| ) |  |

Value:
((_mgr)->snow3g_f8_1_buffer_bit((_exp_key), (_iv), (_src), \
(_dst), (_len), (_offset)))

This function performs snow3g f8 operation on a single buffer. The key has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | iv[3] = count iv[2] = (bearer << 27) | ((dir & 0x1) << 26) iv[1] = pIV[3] iv[0] = pIV[2]
  [in] | _src | Input buffer
  [out] | _dst | Output buffer
  [in] | _len | Length in bits of input buffer
  [in] | _offset | Offset in input/output buffer (in bits)

## IMB_SNOW3G_F8_2_BUFFER

#define IMB_SNOW3G_F8_2_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _src1,
|  |  | _dst1,
|  |  | _len1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _len2
| ) |  |

Value:
((_mgr)->snow3g_f8_2_buffer((_exp_key), (_iv1), (_iv2), \
(_src1), (_dst1), (_len1), \
(_src2), (_dst2), (_len2)))

This function performs snow3g f8 operation on two buffers. They will be processed with the same key, which has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | IV to use for buffer pBufferIn1
  [in] | _iv2 | IV to use for buffer pBufferIn2
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _len1 | Length in bytes of input buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _len2 | Length in bytes of input buffer 2

## IMB_SNOW3G_F8_4_BUFFER

#define IMB_SNOW3G_F8_4_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _iv3,
|  |  | _iv4,
|  |  | _src1,
|  |  | _dst1,
|  |  | _len1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _len2,
|  |  | _src3,
|  |  | _dst3,
|  |  | _len3,
|  |  | _src4,
|  |  | _dst4,
|  |  | _len4
| ) |  |

Value:
((_mgr)->snow3g_f8_4_buffer((_exp_key), (_iv1), (_iv2), (_iv3), \
(_iv4), (_src1), (_dst1), (_len1), \
(_src2), (_dst2), (_len2), \
(_src3), (_dst3), (_len3), \
(_src4), (_dst4), (_len4)))

This function performs snow3g f8 operation on four buffers. They will be processed with the same key, which has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | IV to use for buffer pBufferIn1
  [in] | _iv2 | IV to use for buffer pBufferIn2
  [in] | _iv3 | IV to use for buffer pBufferIn3
  [in] | _iv4 | IV to use for buffer pBufferIn4
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _len1 | Length in bytes of input buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _len2 | Length in bytes of input buffer 2
  [in] | _src3 | Input buffer 3
  [out] | _dst3 | Output buffer 3
  [in] | _len3 | Length in bytes of input buffer 3
  [in] | _src4 | Input buffer 4
  [out] | _dst4 | Output buffer 4
  [in] | _len4 | Length in bytes of input buffer 4

## IMB_SNOW3G_F8_8_BUFFER

#define IMB_SNOW3G_F8_8_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv1,
|  |  | _iv2,
|  |  | _iv3,
|  |  | _iv4,
|  |  | _iv5,
|  |  | _iv6,
|  |  | _iv7,
|  |  | _iv8,
|  |  | _src1,
|  |  | _dst1,
|  |  | _len1,
|  |  | _src2,
|  |  | _dst2,
|  |  | _len2,
|  |  | _src3,
|  |  | _dst3,
|  |  | _len3,
|  |  | _src4,
|  |  | _dst4,
|  |  | _len4,
|  |  | _src5,
|  |  | _dst5,
|  |  | _len5,
|  |  | _src6,
|  |  | _dst6,
|  |  | _len6,
|  |  | _src7,
|  |  | _dst7,
|  |  | _len7,
|  |  | _src8,
|  |  | _dst8,
|  |  | _len8
| ) |  |

Value:
((_mgr)->snow3g_f8_8_buffer((_exp_key), (_iv1), (_iv2), (_iv3), \
(_iv4), (_iv5), (_iv6), (_iv7), \
(_iv8), (_src1), (_dst1), (_len1), \
(_src2), (_dst2), (_len2), \
(_src3), (_dst3), (_len3), \
(_src4), (_dst4), (_len4), \
(_src5), (_dst5), (_len5), \
(_src6), (_dst6), (_len6), \
(_src7), (_dst7), (_len7), \
(_src8), (_dst8), (_len8)))

This function performs snow3g f8 operation on eight buffers. They will be processed with the same key, which has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv1 | IV to use for buffer pBufferIn1
  [in] | _iv2 | IV to use for buffer pBufferIn2
  [in] | _iv3 | IV to use for buffer pBufferIn3
  [in] | _iv4 | IV to use for buffer pBufferIn4
  [in] | _iv5 | IV to use for buffer pBufferIn5
  [in] | _iv6 | IV to use for buffer pBufferIn6
  [in] | _iv7 | IV to use for buffer pBufferIn7
  [in] | _iv8 | IV to use for buffer pBufferIn8
  [in] | _src1 | Input buffer 1
  [out] | _dst1 | Output buffer 1
  [in] | _len1 | Length in bytes of input buffer 1
  [in] | _src2 | Input buffer 2
  [out] | _dst2 | Output buffer 2
  [in] | _len2 | Length in bytes of input buffer 2
  [in] | _src3 | Input buffer 3
  [out] | _dst3 | Output buffer 3
  [in] | _len3 | Length in bytes of input buffer 3
  [in] | _src4 | Input buffer 4
  [out] | _dst4 | Output buffer 4
  [in] | _len4 | Length in bytes of input buffer 4
  [in] | _src5 | Input buffer 5
  [out] | _dst5 | Output buffer 5
  [in] | _len5 | Length in bytes of input buffer 5
  [in] | _src6 | Input buffer 6
  [out] | _dst6 | Output buffer 6
  [in] | _len6 | Length in bytes of input buffer 6
  [in] | _src7 | Input buffer 7
  [out] | _dst7 | Output buffer 7
  [in] | _len7 | Length in bytes of input buffer 7
  [in] | _src8 | Input buffer 8
  [out] | _dst8 | Output buffer 8
  [in] | _len8 | Length in bytes of input buffer 8

## IMB_SNOW3G_F8_8_BUFFER_MULTIKEY

#define IMB_SNOW3G_F8_8_BUFFER_MULTIKEY | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len
| ) |  |

Value:
((_mgr)->snow3g_f8_8_buffer_multikey((_exp_key), (_iv), (_src), (_dst),\
(_len)))

This function performs snow3g f8 operation on eight buffers. They will be processed with individual keys, which have already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Array of 8 Contexts, where the scheduled keys are stored
  [in] | _iv | Array of 8 IV values
  [in] | _src | Array of 8 input buffers
  [out] | _dst | Array of 8 output buffers
  [in] | _len | Array of 8 corresponding input buffer lengths

## IMB_SNOW3G_F8_N_BUFFER

#define IMB_SNOW3G_F8_N_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _count
| ) |  |

Value:
((_mgr)->snow3g_f8_n_buffer((_exp_key), (_iv), (_src), \
(_dst), (_len), (_count)))

This function performs snow3g f8 operation in parallel on N buffers. All input buffers can have different lengths and they will be processed with the same key, which has already been scheduled with snow3g_init_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | Array of IV values
  [in] | _src | Array of input buffers
  [out] | _dst | Array of output buffers - out[0] set to NULL on failure
  [in] | _len | Array of corresponding input buffer lengths
  [in] | _count | Number of input buffers

## IMB_SNOW3G_F8_N_BUFFER_MULTIKEY

#define IMB_SNOW3G_F8_N_BUFFER_MULTIKEY | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _count
| ) |  |

Value:
((_mgr)->snow3g_f8_n_buffer_multikey((_exp_key), (_iv), (_src), \
(_dst), (_len), (_count)))

This function performs snow3g f8 operation in parallel on N buffers. All input buffers can have different lengths. Confidentiallity keys can vary, schedules with snow3g_init_key_sched_multi().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Array of Contexts, where the scheduled keys are stored
  [in] | _iv | Array of IV values
  [in] | _src | Array of input buffers

  [out]

  _dst

  Array of output buffers
  - out[0] set to NULL on failure

  [in] | _len | Array of corresponding input buffer lengths
  [in] | _count | Number of input buffers

## IMB_SNOW3G_F9_1_BUFFER

#define IMB_SNOW3G_F9_1_BUFFER | ( |  | _mgr,
|  |  | _exp_key,
|  |  | _iv,
|  |  | _src,
|  |  | _len,
|  |  | _tag
| ) |  | ((_mgr)->snow3g_f9_1_buffer((_exp_key), (_iv), (_src), (_len), (_tag)))

This function performs a snow3g f9 operation on a single block of data. The key has already been scheduled with snow3g_init_f8_key_sched().

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _exp_key | Context where the scheduled keys are stored
  [in] | _iv | iv[3] = _BSWAP32(fresh^(dir<<15)) iv[2] = _BSWAP32(count^(dir<<31)) iv[1] = _BSWAP32(fresh) iv[0] = _BSWAP32(count)
  [in] | _src | Input buffer
  [in] | _len | Length in bits of the data to be hashed
  [out] | _tag | Computed digest

## IMB_SNOW3G_INIT_KEY_SCHED

#define IMB_SNOW3G_INIT_KEY_SCHED | ( |  | _mgr,
|  |  | _key,
|  |  | _exp_key
| ) |  | ((_mgr)->snow3g_init_key_sched((_key), (_exp_key)))

Snow3g key schedule init function.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure
  [in] | _key | Confidentiality/Integrity key (expected in LE format)
  [out] | _exp_key | Key schedule context to be initialised

Returns
  0 on success
  -1 on error

## IMB_SNOW3G_KEY_SCHED_SIZE

#define IMB_SNOW3G_KEY_SCHED_SIZE | ( |  | _mgr | ) | ((_mgr)->snow3g_key_sched_size())

This function returns the size of the snow3g_key_schedule_t, used to store the key schedule.

Parameters

  [in] | _mgr | Pointer to multi-buffer structure

Returns
  size of snow3g_key_schedule_t type

## IMB_SUBMIT_BURST

#define IMB_SUBMIT_BURST | ( |  | _mgr,
|  |  | _n_jobs,
|  |  | _jobs
| ) |  | ((_mgr)->submit_burst((_mgr), (_n_jobs), (_jobs)))

Submit multiple jobs to be processed after validating.

Prior to submission, _jobs need to be initialized with correct crypto job parameters and followed with a call to imb_set_session().

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure
  [in] | _n_jobs | Number of jobs to submit for processing
  [in,out] | _jobs | In: List of pointers to jobs for submission Out: List of pointers to completed jobs

See also
  imb_set_session()

Returns
  Number of completed jobs or zero on error. If zero, imb_get_errno() can be used to check for potential error conditions and _jobs[0] contains pointer to invalid job

## IMB_SUBMIT_BURST_NOCHECK

#define IMB_SUBMIT_BURST_NOCHECK | ( |  | _mgr,
|  |  | _n_jobs,
|  |  | _jobs
| ) |  | ((_mgr)->submit_burst_nocheck((_mgr), (_n_jobs), (_jobs)))

Submit multiple jobs to be processed without validating.

Prior to submission _jobs need to be initialized with correct crypto job parameters and followed with call to imb_set_session().

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure
  [in] | _n_jobs | Number of jobs to submit for processing
  [in,out] | _jobs | In: List of pointers to jobs for submission Out: List of pointers to completed jobs

See also
  imb_set_session()

Returns
  Number of completed jobs or zero on error

## IMB_SUBMIT_CIPHER_BURST

#define IMB_SUBMIT_CIPHER_BURST | ( |  | _mgr,
|  |  | _jobs,
|  |  | _n_jobs,
|  |  | _cipher,
|  |  | _dir,
|  |  | _key_size
| ) |  |

Value:
((_mgr)->submit_cipher_burst((_mgr), (_jobs), (_n_jobs), \
(_cipher), (_dir), (_key_size)))

Submit multiple cipher jobs to be processed synchronously after validating.

Parameters

  [in] | _mgr | Pointer to initialized IMB_MGR structure
  [in,out] | _jobs | Pointer to array of IMB_JOB structures
  [in] | _n_jobs | Number of jobs to process
  [in] | _cipher | Cipher algorithm of type IMB_CIPHER_MODE
  [in] | _dir | Cipher direction of type IMB_CIPHER_DIRECTION
  [in] | _key_size | Key size in bytes of type IMB_KEY_SIZE_BYTES

Returns
  Number of completed jobs

## IMB_SUBMIT_CIPHER_BURST_NOCHECK

#define IMB_SUBMIT_CIPHER_BURST_NOCHECK | ( |  | _mgr,
|  |  | _jobs,
|  |  | _n_jobs,
|  |  | _cipher,
|  |  | _dir,
|  |  | _key_size
| ) |  |

Value:
((_mgr)->submit_cipher_burst_nocheck((_mgr), (_jobs), (_n_jobs),\
(_cipher), (_dir), (_key_size)))

Submit multiple cipher jobs to be processed synchronously without validating.

This is more performant but less secure than IMB_SUBMIT_CIPHER_BURST().

Parameters

  [in] | _mgr | Pointer to initialized IMB_MGR structure
  [in,out] | _jobs | Pointer to array of IMB_JOB structures
  [in] | _n_jobs | Number of jobs to process
  [in] | _cipher | Cipher algorithm of type IMB_CIPHER_MODE
  [in] | _dir | Cipher direction of type IMB_CIPHER_DIRECTION
  [in] | _key_size | Key size in bytes of type IMB_KEY_SIZE_BYTES

Returns
  Number of completed jobs

## IMB_SUBMIT_HASH_BURST

#define IMB_SUBMIT_HASH_BURST | ( |  | _mgr,
|  |  | _jobs,
|  |  | _n_jobs,
|  |  | _hash
| ) |  | ((_mgr)->submit_hash_burst((_mgr), (_jobs), (_n_jobs), (_hash)))

Submit multiple hash jobs to be processed synchronously after validating.

Parameters

  [in] | _mgr | Pointer to initialized IMB_MGR structure
  [in,out] | _jobs | Pointer to array of IMB_JOB structures
  [in] | _n_jobs | Number of jobs to process
  [in] | _hash | Hash algorithm of type IMB_HASH_ALG

Returns
  Number of completed jobs

## IMB_SUBMIT_HASH_BURST_NOCHECK

#define IMB_SUBMIT_HASH_BURST_NOCHECK | ( |  | _mgr,
|  |  | _jobs,
|  |  | _n_jobs,
|  |  | _hash
| ) |  | ((_mgr)->submit_hash_burst_nocheck((_mgr), (_jobs), (_n_jobs), (_hash)))

Submit multiple hash jobs to be processed synchronously without validating.

This is more performant but less secure than IMB_SUBMIT_HASH_BURST().

Parameters

  [in] | _mgr | Pointer to initialized IMB_MGR structure
  [in,out] | _jobs | Pointer to array of IMB_JOB structures
  [in] | _n_jobs | Number of jobs to process
  [in] | _hash | Hash algorithm of type IMB_HASH_ALG

Returns
  Number of completed jobs

## IMB_SUBMIT_JOB

#define IMB_SUBMIT_JOB | ( |  | _mgr | ) | ((_mgr)->submit_job((_mgr)))

Submit job for processing after validating.

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed If NULL, imb_get_errno() can be used to check for potential error conditions

## IMB_SUBMIT_JOB_NOCHECK

#define IMB_SUBMIT_JOB_NOCHECK | ( |  | _mgr | ) | ((_mgr)->submit_job_nocheck((_mgr)))

Submit job for processing without validating.

This is more performant but less secure than submit_job_xxx()

Parameters

  [in,out] | _mgr | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed

## IMB_VERSION

#define IMB_VERSION | ( |  | a,
|  |  | b,
|  |  | c
| ) |  | (((a) << 16) + ((b) << 8) + (c))

Macro to translate version number

## IMB_VERSION_NUM

#define IMB_VERSION_NUM 0x10400

## IMB_VERSION_STR

#define IMB_VERSION_STR "1.4.0-dev"

Library version

## IMB_ZUC256_DIGEST_LEN_IN_BYTES_MAX

#define IMB_ZUC256_DIGEST_LEN_IN_BYTES_MAX 16

## IMB_ZUC256_DIGEST_LEN_IN_BYTES_MIN

#define IMB_ZUC256_DIGEST_LEN_IN_BYTES_MIN 4

## IMB_ZUC256_IV_LEN_IN_BYTES_MAX

#define IMB_ZUC256_IV_LEN_IN_BYTES_MAX 25

## IMB_ZUC256_IV_LEN_IN_BYTES_MIN

#define IMB_ZUC256_IV_LEN_IN_BYTES_MIN 23

## IMB_ZUC256_KEY_LEN_IN_BYTES

#define IMB_ZUC256_KEY_LEN_IN_BYTES 32

## IMB_ZUC_DIGEST_LEN_IN_BYTES

#define IMB_ZUC_DIGEST_LEN_IN_BYTES 4

## IMB_ZUC_EEA3_1_BUFFER

#define IMB_ZUC_EEA3_1_BUFFER | ( |  | _mgr,
|  |  | _key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len
| ) |  | ((_mgr)->eea3_1_buffer((_key), (_iv), (_src), (_dst), (_len)))

ZUC EEA3 Confidentiality functions.

Parameters

  _mgr | Pointer to multi-buffer structure
  _key | Pointer to key
  _iv | Pointer to 16-byte IV
  _src | Pointer to Plaintext/Ciphertext input.
  _dst | Pointer to Ciphertext/Plaintext output.
  _len | Length of input data in bytes.

## IMB_ZUC_EEA3_4_BUFFER

#define IMB_ZUC_EEA3_4_BUFFER | ( |  | _mgr,
|  |  | _key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len
| ) |  | ((_mgr)->eea3_4_buffer((_key), (_iv), (_src), (_dst), (_len)))

## IMB_ZUC_EEA3_N_BUFFER

#define IMB_ZUC_EEA3_N_BUFFER | ( |  | _mgr,
|  |  | _key,
|  |  | _iv,
|  |  | _src,
|  |  | _dst,
|  |  | _len,
|  |  | _count
| ) |  | ((_mgr)->eea3_n_buffer((_key), (_iv), (_src), (_dst), (_len), (_count)))

## IMB_ZUC_EIA3_1_BUFFER

#define IMB_ZUC_EIA3_1_BUFFER | ( |  | _mgr,
|  |  | _key,
|  |  | _iv,
|  |  | _src,
|  |  | _len,
|  |  | _tag
| ) |  | ((_mgr)->eia3_1_buffer((_key), (_iv), (_src), (_len), (_tag)))

ZUC EIA3 Integrity function.

Parameters

  _mgr | Pointer to multi-buffer structure
  _key | Pointer to key
  _iv | Pointer to 16-byte IV
  _src | Pointer to Plaintext/Ciphertext input.
  _len | Length of input data in bits.
  _tag | Pointer to Authenticated Tag output (4 bytes)

## IMB_ZUC_EIA3_N_BUFFER

#define IMB_ZUC_EIA3_N_BUFFER | ( |  | _mgr,
|  |  | _key,
|  |  | _iv,
|  |  | _src,
|  |  | _len,
|  |  | _tag,
|  |  | _count
| ) |  | ((_mgr)->eia3_n_buffer((_key), (_iv), (_src), (_len), (_tag), (_count)))

## IMB_ZUC_IV_LEN_IN_BYTES

#define IMB_ZUC_IV_LEN_IN_BYTES 16

## IMB_ZUC_KEY_LEN_IN_BYTES

#define IMB_ZUC_KEY_LEN_IN_BYTES 16

## KASUMI_KEY_SCHEDULE_SIZE

#define KASUMI_KEY_SCHEDULE_SIZE 64

## Typedef Documentation

## aes_cfb_t

typedef void(* aes_cfb_t) (void *, const void *, const void *, const void *, uint64_t)

## aes_ecb_quic_t

typedef void(* aes_ecb_quic_t) (const void *, const void *, void *out, uint64_t)

## aes_gcm_enc_dec_finalize_t

typedef void(* aes_gcm_enc_dec_finalize_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, uint64_t)

## aes_gcm_enc_dec_iv_t

typedef 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)

## aes_gcm_enc_dec_t

typedef 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)

## aes_gcm_enc_dec_update_t

typedef void(* aes_gcm_enc_dec_update_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint8_t *, uint64_t)

## aes_gcm_init_t

typedef void(* aes_gcm_init_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, uint8_t const *, uint64_t)

## aes_gcm_init_var_iv_t

typedef 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)

## aes_gcm_pre_t

typedef void(* aes_gcm_pre_t) (const void *, struct gcm_key_data *)

## aes_gcm_precomp_t

typedef void(* aes_gcm_precomp_t) (struct gcm_key_data *)

## aes_gmac_finalize_t

typedef void(* aes_gmac_finalize_t) (const struct gcm_key_data *, struct gcm_context_data *, uint8_t *, const uint64_t)

## aes_gmac_init_t

typedef void(* aes_gmac_init_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)

## aes_gmac_update_t

typedef void(* aes_gmac_update_t) (const struct gcm_key_data *, struct gcm_context_data *, const uint8_t *, const uint64_t)

## burst_fn_t

typedef uint32_t(* burst_fn_t) (struct IMB_MGR *, const uint32_t, struct IMB_JOB **)

## chacha_poly_enc_dec_update_t

typedef void(* chacha_poly_enc_dec_update_t) (const void *, struct chacha20_poly1305_context_data *, void *, const void *, const uint64_t)

## chacha_poly_finalize_t

typedef void(* chacha_poly_finalize_t) (struct chacha20_poly1305_context_data *, void *, const uint64_t)

## chacha_poly_init_t

typedef void(* chacha_poly_init_t) (const void *, struct chacha20_poly1305_context_data *, const void *, const void *, const uint64_t)

## cmac_subkey_gen_t

typedef void(* cmac_subkey_gen_t) (const void *, void *, void *)

## crc32_fn_t

typedef uint32_t(* crc32_fn_t) (const void *, const uint64_t)

## des_keysched_t

typedef int(* des_keysched_t) (uint64_t *, const void *)

## flush_job_t

typedef IMB_JOB *(* flush_job_t) (struct IMB_MGR *)

## get_completed_job_t

typedef IMB_JOB *(* get_completed_job_t) (struct IMB_MGR *)

## get_next_job_t

typedef IMB_JOB *(* get_next_job_t) (struct IMB_MGR *)

## ghash_t

typedef void(* ghash_t) (const struct gcm_key_data *, const void *, const uint64_t, void *, const uint64_t)

## hash_fn_t

typedef void(* hash_fn_t) (const void *, const uint64_t, void *)

## hash_one_block_t

typedef void(* hash_one_block_t) (const void *, void *)

## hec_32_t

typedef uint32_t(* hec_32_t) (const uint8_t *)

## hec_64_t

typedef uint64_t(* hec_64_t) (const uint8_t *)

## IMB_JOB

typedef struct IMB_JOB IMB_JOB

Job structure.

For AES, enc_keys and dec_keys are expected to point to expanded keys structure.

- AES-CTR, AES-ECB and AES-CCM, only enc_keys is used
- DOCSIS (AES-CBC + AES-CFB), both pointers are used enc_keys has to be set always for the partial block

For DES, enc_keys and dec_keys are expected to point to DES key schedule.

- same key schedule used for enc and dec operations

For 3DES, enc_keys and dec_keys are expected to point to an array of 3 pointers for the corresponding 3 key schedules.

- same key schedule used for enc and dec operations

## IMB_MGR

typedef struct IMB_MGR IMB_MGR

## init_mb_mgr_t

typedef void(* init_mb_mgr_t) (struct IMB_MGR *)

## kasumi_f8_1_buffer_bit_t

typedef void(* kasumi_f8_1_buffer_bit_t) (const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t, const uint32_t)

## kasumi_f8_1_buffer_t

typedef void(* kasumi_f8_1_buffer_t) (const kasumi_key_sched_t *, const uint64_t, const void *, void *, const uint32_t)

## kasumi_f8_2_buffer_t

typedef 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)

## kasumi_f8_3_buffer_t

typedef 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)

## kasumi_f8_4_buffer_t

typedef 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)

## kasumi_f8_n_buffer_t

typedef void(* kasumi_f8_n_buffer_t) (const kasumi_key_sched_t *, const uint64_t *, const void *const *, void **, const uint32_t *, const uint32_t)

## kasumi_f9_1_buffer_t

typedef void(* kasumi_f9_1_buffer_t) (const kasumi_key_sched_t *, const void *, const uint32_t, void *)

## kasumi_f9_1_buffer_user_t

typedef void(* kasumi_f9_1_buffer_user_t) (const kasumi_key_sched_t *, const uint64_t, const void *, const uint32_t, void *, const uint32_t)

## kasumi_init_f8_key_sched_t

typedef int(* kasumi_init_f8_key_sched_t) (const void *, kasumi_key_sched_t *)

## kasumi_init_f9_key_sched_t

typedef int(* kasumi_init_f9_key_sched_t) (const void *, kasumi_key_sched_t *)

## kasumi_key_sched_size_t

typedef size_t(* kasumi_key_sched_size_t) (void)

## kasumi_key_sched_t

typedef struct kasumi_key_sched_s kasumi_key_sched_t

Structure to maintain internal key scheduling

## keyexp_t

typedef void(* keyexp_t) (const void *, void *, void *)

## queue_size_t

typedef uint32_t(* queue_size_t) (struct IMB_MGR *)

## snow3g_f8_1_buffer_bit_t

typedef void(* snow3g_f8_1_buffer_bit_t) (const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t, const uint32_t)

## snow3g_f8_1_buffer_t

typedef void(* snow3g_f8_1_buffer_t) (const snow3g_key_schedule_t *, const void *, const void *, void *, const uint32_t)

## snow3g_f8_2_buffer_t

typedef 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)

## snow3g_f8_4_buffer_t

typedef 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)

## snow3g_f8_8_buffer_multikey_t

typedef void(* snow3g_f8_8_buffer_multikey_t) (const snow3g_key_schedule_t *const[], const void *const[], const void *const[], void *[], const uint32_t[])

## snow3g_f8_8_buffer_t

typedef 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)

## snow3g_f8_n_buffer_multikey_t

typedef 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)

## snow3g_f8_n_buffer_t

typedef void(* snow3g_f8_n_buffer_t) (const snow3g_key_schedule_t *, const void *const[], const void *const[], void *[], const uint32_t[], const uint32_t)

## snow3g_f9_1_buffer_t

typedef void(* snow3g_f9_1_buffer_t) (const snow3g_key_schedule_t *, const void *, const void *, const uint64_t, void *)

## snow3g_init_key_sched_t

typedef int(* snow3g_init_key_sched_t) (const void *, snow3g_key_schedule_t *)

## snow3g_key_sched_size_t

typedef size_t(* snow3g_key_sched_size_t) (void)

## snow3g_key_schedule_t

typedef struct snow3g_key_schedule_s snow3g_key_schedule_t

Snow3G key scheduling structure

## submit_cipher_burst_t

typedef 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)

## submit_hash_burst_t

typedef uint32_t(* submit_hash_burst_t) (struct IMB_MGR *, struct IMB_JOB *, const uint32_t, const IMB_HASH_ALG hash)

## submit_job_t

typedef IMB_JOB *(* submit_job_t) (struct IMB_MGR *)

## xcbc_keyexp_t

typedef void(* xcbc_keyexp_t) (const void *, void *, void *, void *)

## zuc_eea3_1_buffer_t

typedef void(* zuc_eea3_1_buffer_t) (const void *, const void *, const void *, void *, const uint32_t)

## zuc_eea3_4_buffer_t

typedef void(* zuc_eea3_4_buffer_t) (const void *const *, const void *const *, const void *const *, void **, const uint32_t *)

## zuc_eea3_n_buffer_t

typedef void(* zuc_eea3_n_buffer_t) (const void *const *, const void *const *, const void *const *, void **, const uint32_t *, const uint32_t)

## zuc_eia3_1_buffer_t

typedef void(* zuc_eia3_1_buffer_t) (const void *, const void *, const void *, const uint32_t, uint32_t *)

## zuc_eia3_n_buffer_t

typedef void(* zuc_eia3_n_buffer_t) (const void *const *, const void *const *, const void *const *, const uint32_t *, uint32_t **, const uint32_t)

## Enumeration Type Documentation

## IMB_ARCH

enum IMB_ARCH

Architecture definitions

Enumerator
IMB_ARCH_NONE |
IMB_ARCH_NOAESNI |
IMB_ARCH_SSE |
IMB_ARCH_AVX |
IMB_ARCH_AVX2 |
IMB_ARCH_AVX512 |
IMB_ARCH_NUM |

## IMB_CHAIN_ORDER

enum IMB_CHAIN_ORDER

Enumerator
IMB_ORDER_CIPHER_HASH |
IMB_ORDER_HASH_CIPHER |

## IMB_CIPHER_DIRECTION

enum IMB_CIPHER_DIRECTION

Enumerator
IMB_DIR_ENCRYPT |
IMB_DIR_DECRYPT |

## IMB_CIPHER_MODE

enum IMB_CIPHER_MODE

IMB_ERR_MIN should be higher than __ELASTERROR to avoid overlap with standard error values

Enumerator
IMB_CIPHER_CBC |
IMB_CIPHER_CNTR |
IMB_CIPHER_NULL |
IMB_CIPHER_DOCSIS_SEC_BPI |
IMB_CIPHER_GCM |
IMB_CIPHER_CUSTOM |
IMB_CIPHER_DES |
IMB_CIPHER_DOCSIS_DES |
IMB_CIPHER_CCM |
IMB_CIPHER_DES3 |
IMB_CIPHER_PON_AES_CNTR |
IMB_CIPHER_ECB |
IMB_CIPHER_CNTR_BITLEN | 128-EEA2/NEA2 (3GPP)
IMB_CIPHER_ZUC_EEA3 | 128-EEA3/NEA3 (3GPP)
IMB_CIPHER_SNOW3G_UEA2_BITLEN | 128-UEA2 (3GPP)
IMB_CIPHER_KASUMI_UEA1_BITLEN | 128-UEA1 (3GPP)
IMB_CIPHER_CBCS_1_9 | MPEG CENC (ISO 23001-7)
IMB_CIPHER_CHACHA20 |
IMB_CIPHER_CHACHA20_POLY1305 | AEAD CHACHA20
IMB_CIPHER_CHACHA20_POLY1305_SGL | AEAD CHACHA20 with SGL support
IMB_CIPHER_SNOW_V |
IMB_CIPHER_SNOW_V_AEAD |
IMB_CIPHER_GCM_SGL |
IMB_CIPHER_NUM |

## IMB_ERR

enum IMB_ERR

Library error types

Enumerator
IMB_ERR_MIN |
IMB_ERR_NULL_MBMGR |
IMB_ERR_JOB_NULL_SRC |
IMB_ERR_JOB_NULL_DST |
IMB_ERR_JOB_NULL_KEY |
IMB_ERR_JOB_NULL_IV |
IMB_ERR_JOB_NULL_AUTH |
IMB_ERR_JOB_NULL_AAD |
IMB_ERR_JOB_CIPH_LEN |
IMB_ERR_JOB_AUTH_LEN |
IMB_ERR_JOB_IV_LEN |
IMB_ERR_JOB_KEY_LEN |
IMB_ERR_JOB_AUTH_TAG_LEN |
IMB_ERR_JOB_AAD_LEN |
IMB_ERR_JOB_SRC_OFFSET |
IMB_ERR_JOB_CHAIN_ORDER |
IMB_ERR_CIPH_MODE |
IMB_ERR_HASH_ALGO |
IMB_ERR_JOB_NULL_AUTH_KEY |
IMB_ERR_JOB_NULL_SGL_CTX |
IMB_ERR_JOB_NULL_NEXT_IV |
IMB_ERR_JOB_PON_PLI |
IMB_ERR_NULL_SRC |
IMB_ERR_NULL_DST |
IMB_ERR_NULL_KEY |
IMB_ERR_NULL_EXP_KEY |
IMB_ERR_NULL_IV |
IMB_ERR_NULL_AUTH |
IMB_ERR_NULL_AAD |
IMB_ERR_CIPH_LEN |
IMB_ERR_AUTH_LEN |
IMB_ERR_IV_LEN |
IMB_ERR_KEY_LEN |
IMB_ERR_AUTH_TAG_LEN |
IMB_ERR_AAD_LEN |
IMB_ERR_SRC_OFFSET |
IMB_ERR_NULL_AUTH_KEY |
IMB_ERR_NULL_CTX |
IMB_ERR_NO_AESNI_EMU |
IMB_ERR_JOB_NULL_HMAC_OPAD |
IMB_ERR_JOB_NULL_HMAC_IPAD |
IMB_ERR_JOB_NULL_XCBC_K1_EXP |
IMB_ERR_JOB_NULL_XCBC_K2 |
IMB_ERR_JOB_NULL_XCBC_K3 |
IMB_ERR_JOB_CIPH_DIR |
IMB_ERR_JOB_NULL_GHASH_INIT_TAG |
IMB_ERR_MISSING_CPUFLAGS_INIT_MGR |
IMB_ERR_NULL_JOB |
IMB_ERR_QUEUE_SPACE |
IMB_ERR_NULL_BURST |
IMB_ERR_BURST_SIZE |
IMB_ERR_BURST_OOO |
IMB_ERR_SELFTEST |
IMB_ERR_BURST_SUITE_ID |
IMB_ERR_MAX |

## IMB_HASH_ALG

enum IMB_HASH_ALG

Enumerator
IMB_AUTH_HMAC_SHA_1 | HMAC-SHA1
IMB_AUTH_HMAC_SHA_224 | HMAC-SHA224
IMB_AUTH_HMAC_SHA_256 | HMAC-SHA256
IMB_AUTH_HMAC_SHA_384 | HMAC-SHA384
IMB_AUTH_HMAC_SHA_512 | HMAC-SHA512
IMB_AUTH_AES_XCBC |
IMB_AUTH_MD5 | HMAC-MD5
IMB_AUTH_NULL |
IMB_AUTH_AES_GMAC |
IMB_AUTH_CUSTOM |
IMB_AUTH_AES_CCM | AES128-CCM
IMB_AUTH_AES_CMAC | AES128-CMAC
IMB_AUTH_SHA_1 | SHA1
IMB_AUTH_SHA_224 | SHA224
IMB_AUTH_SHA_256 | SHA256
IMB_AUTH_SHA_384 | SHA384
IMB_AUTH_SHA_512 | SHA512
IMB_AUTH_AES_CMAC_BITLEN | 128-EIA2/NIA2 (3GPP)
IMB_AUTH_PON_CRC_BIP |
IMB_AUTH_ZUC_EIA3_BITLEN | 128-EIA3/NIA3 (3GPP)
IMB_AUTH_DOCSIS_CRC32 | with DOCSIS_SEC_BPI only
IMB_AUTH_SNOW3G_UIA2_BITLEN | 128-UIA2 (3GPP)
IMB_AUTH_KASUMI_UIA1 | 128-UIA1 (3GPP)
IMB_AUTH_AES_GMAC_128 | AES-GMAC (128-bit key)
IMB_AUTH_AES_GMAC_192 | AES-GMAC (192-bit key)
IMB_AUTH_AES_GMAC_256 | AES-GMAC (256-bit key)
IMB_AUTH_AES_CMAC_256 | AES256-CMAC
IMB_AUTH_POLY1305 | POLY1305
IMB_AUTH_CHACHA20_POLY1305 | AEAD POLY1305
IMB_AUTH_CHACHA20_POLY1305_SGL | AEAD CHACHA20 with SGL support
IMB_AUTH_ZUC256_EIA3_BITLEN | 256-EIA3/NIA3 (3GPP)
IMB_AUTH_SNOW_V_AEAD | SNOW-V-AEAD
IMB_AUTH_GCM_SGL | AES-GCM with SGL support
IMB_AUTH_CRC32_ETHERNET_FCS | CRC32-ETHERNET-FCS
IMB_AUTH_CRC32_SCTP | CRC32-SCTP
IMB_AUTH_CRC32_WIMAX_OFDMA_DATA | CRC32-WIMAX-OFDMA-DATA
IMB_AUTH_CRC24_LTE_A | CRC32-LTE-A
IMB_AUTH_CRC24_LTE_B | CRC32-LTE-B
IMB_AUTH_CRC16_X25 | CRC16-X25
IMB_AUTH_CRC16_FP_DATA | CRC16-FP-DATA
IMB_AUTH_CRC11_FP_HEADER | CRC11-FP-HEADER
IMB_AUTH_CRC10_IUUP_DATA | CRC10-IUUP-DATA
IMB_AUTH_CRC8_WIMAX_OFDMA_HCS | CRC8-WIMAX-OFDMA-HCS
IMB_AUTH_CRC7_FP_HEADER | CRC7-FP-HEADER
IMB_AUTH_CRC6_IUUP_HEADER | CRC6-IUUP-HEADER
IMB_AUTH_GHASH | GHASH
IMB_AUTH_NUM |

## IMB_KEY_SIZE_BYTES

enum IMB_KEY_SIZE_BYTES

Enumerator
IMB_KEY_64_BYTES |
IMB_KEY_128_BYTES |
IMB_KEY_192_BYTES |
IMB_KEY_256_BYTES |

## IMB_SGL_STATE

enum IMB_SGL_STATE

Enumerator
IMB_SGL_INIT |
IMB_SGL_UPDATE |
IMB_SGL_COMPLETE |
IMB_SGL_ALL |

## IMB_STATUS

enum IMB_STATUS

Job structure definitions

Enumerator
IMB_STATUS_BEING_PROCESSED |
IMB_STATUS_COMPLETED_CIPHER |
IMB_STATUS_COMPLETED_AUTH |
IMB_STATUS_COMPLETED | COMPLETED_CIPHER | COMPLETED_AUTH
IMB_STATUS_INVALID_ARGS |
IMB_STATUS_INTERNAL_ERROR |
IMB_STATUS_ERROR |

## Function Documentation

## aes_cmac_subkey_gen_avx()

IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx | ( | const void * | key_exp,
|  | void * | key1,
|  | void * | key2
| ) |  |

Generate AES-128-CMAC subkeys.

Parameters

  [in] | key_exp | Input expanded AES-128-CMAC key
  [out] | key1 | Subkey 1
  [out] | key2 | Subkey 2

## aes_cmac_subkey_gen_avx2()

IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx2 | ( | const void * | key_exp,
|  | void * | key1,
|  | void * | key2
| ) |  |

Generate AES-128-CMAC subkeys.

Parameters

  [in] | key_exp | Input expanded AES-128-CMAC key
  [out] | key1 | Subkey 1
  [out] | key2 | Subkey 2

## aes_cmac_subkey_gen_avx512()

IMB_DLL_EXPORT void aes_cmac_subkey_gen_avx512 | ( | const void * | key_exp,
|  | void * | key1,
|  | void * | key2
| ) |  |

Generate AES-128-CMAC subkeys.

Parameters

  [in] | key_exp | Input expanded AES-128-CMAC key
  [out] | key1 | Subkey 1
  [out] | key2 | Subkey 2

## aes_cmac_subkey_gen_sse()

IMB_DLL_EXPORT void aes_cmac_subkey_gen_sse | ( | const void * | key_exp,
|  | void * | key1,
|  | void * | key2
| ) |  |

Generate AES-128-CMAC subkeys.

Parameters

  [in] | key_exp | Input expanded AES-128-CMAC key
  [out] | key1 | Subkey 1
  [out] | key2 | Subkey 2

## aes_gcm_dec_128_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_128_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_128_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_128_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_128_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_128_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_128_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_128_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_128_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_192_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_192_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_192_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_192_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_192_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_192_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_192_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_192_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_192_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_256_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_256_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_256_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_256_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_256_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_dec_256_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_dec_256_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_256_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_dec_256_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Plaintext output. Decrypt in-place is allowed
  [in] | in | Ciphertext input
  [in] | len | Length of data in bytes for decryption

## aes_gcm_enc_128_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_128_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_128_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_128_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_128_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_128_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_128_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_128_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_128_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_192_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_192_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_192_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_192_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_192_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_192_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_192_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_192_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_192_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_256_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_256_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_256_finalize_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_256_finalize_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_256_finalize_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8.

## aes_gcm_enc_256_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authentication Data (AAD)
  [in] | aad_len | Length of AAD in bytes
  [out] | auth_tag | Authenticated Tag output
  [in] | auth_tag_len | Authenticated Tag Length in bytes (must be a multiple of 4 bytes). Valid values are 16 (most likely), 12 or 8

## aes_gcm_enc_256_update_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_256_update_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_enc_256_update_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [out] | out | Ciphertext output. Encrypt in-place is allowed
  [in] | in | Plaintext input
  [in] | len | Length of data in bytes for encryption

## aes_gcm_init_128_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_128_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_128_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_192_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_192_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_192_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_256_avx_gen2()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_256_avx_gen4()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_init_256_sse()

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.

Parameters

  [in] | key_data | GCM expanded key data
  [in,out] | context_data | GCM operation context data
  [in] | iv | Pointer to 12 byte IV structure Internally, the library concatenates 0x00000001 to the IV
  [in] | aad | Additional Authenticated Data (AAD)
  [in] | aad_len | Length of AAD in bytes

## aes_gcm_pre_128_avx_gen2()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_128_avx_gen4()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_128_sse()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_192_avx_gen2()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_192_avx_gen4()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_192_sse()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_256_avx_gen2()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_256_avx_gen4()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_pre_256_sse()

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.

Prefills the gcm key data with key values for each round and the initial sub hash key for tag encoding

Parameters

  [in] | key | Pointer to key data
  [out] | key_data | GCM expanded key data

## aes_gcm_precomp_128_avx_gen2()

IMB_DLL_EXPORT void aes_gcm_precomp_128_avx_gen2 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-128 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_128_avx_gen4()

IMB_DLL_EXPORT void aes_gcm_precomp_128_avx_gen4 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-128 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_128_sse()

IMB_DLL_EXPORT void aes_gcm_precomp_128_sse | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-128 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_192_avx_gen2()

IMB_DLL_EXPORT void aes_gcm_precomp_192_avx_gen2 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-192 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_192_avx_gen4()

IMB_DLL_EXPORT void aes_gcm_precomp_192_avx_gen4 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-192 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_192_sse()

IMB_DLL_EXPORT void aes_gcm_precomp_192_sse | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-192 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_256_avx_gen2()

IMB_DLL_EXPORT void aes_gcm_precomp_256_avx_gen2 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-256 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_256_avx_gen4()

IMB_DLL_EXPORT void aes_gcm_precomp_256_avx_gen4 | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-256 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_gcm_precomp_256_sse()

IMB_DLL_EXPORT void aes_gcm_precomp_256_sse | ( | struct gcm_key_data * | key_data | ) |

Precomputation of AES-GCM-256 HashKey constants.

Precomputation of HashKey<<1 mod poly constants (shifted_hkey_X and shifted_hkey_X_k).

Parameters

  [in,out] | key_data | GCM key data

## aes_keyexp_128_avx()

IMB_DLL_EXPORT void aes_keyexp_128_avx | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key
  [out] | dec_exp_keys | AES-128 decryption expansion key

## aes_keyexp_128_avx2()

IMB_DLL_EXPORT void aes_keyexp_128_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key
  [out] | dec_exp_keys | AES-128 decryption expansion key

## aes_keyexp_128_avx512()

IMB_DLL_EXPORT void aes_keyexp_128_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key
  [out] | dec_exp_keys | AES-128 decryption expansion key

## aes_keyexp_128_enc_avx()

IMB_DLL_EXPORT void aes_keyexp_128_enc_avx | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key

## aes_keyexp_128_enc_avx2()

IMB_DLL_EXPORT void aes_keyexp_128_enc_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key

## aes_keyexp_128_enc_avx512()

IMB_DLL_EXPORT void aes_keyexp_128_enc_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key

## aes_keyexp_128_enc_sse()

IMB_DLL_EXPORT void aes_keyexp_128_enc_sse | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key

## aes_keyexp_128_sse()

IMB_DLL_EXPORT void aes_keyexp_128_sse | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-128 expansion keys.

Parameters

  [in] | key | AES-128 key
  [out] | enc_exp_keys | AES-128 encryption expansion key
  [out] | dec_exp_keys | AES-128 decryption expansion key

## aes_keyexp_192_avx()

IMB_DLL_EXPORT void aes_keyexp_192_avx | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_192_avx2()

IMB_DLL_EXPORT void aes_keyexp_192_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_192_avx512()

IMB_DLL_EXPORT void aes_keyexp_192_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_192_enc_avx()

IMB_DLL_EXPORT void aes_keyexp_192_enc_avx | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-192 expansion keys.

Parameters

  [in] | key | AES-192 key
  [out] | enc_exp_keys | AES-192 encryption expansion key

## aes_keyexp_192_enc_avx2()

IMB_DLL_EXPORT void aes_keyexp_192_enc_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-192 expansion keys.

Parameters

  [in] | key | AES-192 key
  [out] | enc_exp_keys | AES-192 encryption expansion key

## aes_keyexp_192_enc_avx512()

IMB_DLL_EXPORT void aes_keyexp_192_enc_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-192 expansion keys.

Parameters

  [in] | key | AES-192 key
  [out] | enc_exp_keys | AES-192 encryption expansion key

## aes_keyexp_192_enc_sse()

IMB_DLL_EXPORT void aes_keyexp_192_enc_sse | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-192 expansion keys.

Parameters

  [in] | key | AES-192 key
  [out] | enc_exp_keys | AES-192 encryption expansion key

## aes_keyexp_192_sse()

IMB_DLL_EXPORT void aes_keyexp_192_sse | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-192 expansion keys.

Parameters

  [in] | key | AES-192 key
  [out] | enc_exp_keys | AES-192 encryption expansion key
  [out] | dec_exp_keys | AES-192 decryption expansion key

## aes_keyexp_256_avx()

IMB_DLL_EXPORT void aes_keyexp_256_avx | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_256_avx2()

IMB_DLL_EXPORT void aes_keyexp_256_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_256_avx512()

IMB_DLL_EXPORT void aes_keyexp_256_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_keyexp_256_enc_avx()

IMB_DLL_EXPORT void aes_keyexp_256_enc_avx | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key

## aes_keyexp_256_enc_avx2()

IMB_DLL_EXPORT void aes_keyexp_256_enc_avx2 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key

## aes_keyexp_256_enc_avx512()

IMB_DLL_EXPORT void aes_keyexp_256_enc_avx512 | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key

## aes_keyexp_256_enc_sse()

IMB_DLL_EXPORT void aes_keyexp_256_enc_sse | ( | const void * | key,
|  | void * | enc_exp_keys
| ) |  |

Generate encryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key

## aes_keyexp_256_sse()

IMB_DLL_EXPORT void aes_keyexp_256_sse | ( | const void * | key,
|  | void * | enc_exp_keys,
|  | void * | dec_exp_keys
| ) |  |

Generate encryption/decryption AES-256 expansion keys.

Parameters

  [in] | key | AES-256 key
  [out] | enc_exp_keys | AES-256 encryption expansion key
  [out] | dec_exp_keys | AES-256 decryption expansion key

## aes_xcbc_expand_key_avx()

IMB_DLL_EXPORT void aes_xcbc_expand_key_avx | ( | const void * | key,
|  | void * | k1_exp,
|  | void * | k2,
|  | void * | k3
| ) |  |

Generate AES-128-XCBC expansion keys.

Parameters

  [in] | key | Input AES-128-XCBC key
  [out] | k1_exp | k1 expansion key
  [out] | k2 | k2 key
  [out] | k3 | k3 key

## aes_xcbc_expand_key_avx2()

IMB_DLL_EXPORT void aes_xcbc_expand_key_avx2 | ( | const void * | key,
|  | void * | k1_exp,
|  | void * | k2,
|  | void * | k3
| ) |  |

Generate AES-128-XCBC expansion keys.

Parameters

  [in] | key | Input AES-128-XCBC key
  [out] | k1_exp | k1 expansion key
  [out] | k2 | k2 key
  [out] | k3 | k3 key

## aes_xcbc_expand_key_avx512()

IMB_DLL_EXPORT void aes_xcbc_expand_key_avx512 | ( | const void * | key,
|  | void * | k1_exp,
|  | void * | k2,
|  | void * | k3
| ) |  |

Generate AES-128-XCBC expansion keys.

Parameters

  [in] | key | Input AES-128-XCBC key
  [out] | k1_exp | k1 expansion key
  [out] | k2 | k2 key
  [out] | k3 | k3 key

## aes_xcbc_expand_key_sse()

IMB_DLL_EXPORT void aes_xcbc_expand_key_sse | ( | const void * | key,
|  | void * | k1_exp,
|  | void * | k2,
|  | void * | k3
| ) |  |

Generate AES-128-XCBC expansion keys.

Parameters

  [in] | key | Input AES-128-XCBC key
  [out] | k1_exp | k1 expansion key
  [out] | k2 | k2 key
  [out] | k3 | k3 key

## alloc_mb_mgr()

IMB_DLL_EXPORT IMB_MGR * alloc_mb_mgr | ( | uint64_t | flags | ) |

Allocates memory for multi-buffer manager instance.

get_next_job returns a job object. This must be filled in and returned via submit_job before get_next_job is called again. After submit_job is called, one should call get_completed_job() at least once (and preferably until it returns NULL). get_completed_job and flush_job returns a job object. This job object ceases to be usable at the next call to get_next_job

For binary compatibility between library versions it is recommended to use this API.

Parameters

  flags | multi-buffer manager flags IMB_FLAG_SHANI_OFF - disable use (and detection) of SHA extensions, currently SHANI is only available for SSE IMB_FLAG_AESNI_OFF - disable use (and detection) of AES extensions. IMB_FLAG_GFNI_OFF - disable use (and detection) of Galois Field extensions.

Returns
  Pointer to allocated memory for IMB_MGR structure

Return values

  NULL | on allocation error

## des_cfb_one()

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.

Processes only one buffer at a time. Designed to manage partial blocks of DOCSIS 3.1 SEC BPI.

Parameters

  [out] | out | Plaintext/Ciphertext output
  [in] | in | Plaintext/Ciphertext input
  [in] | iv | Pointer to 8 byte IV
  [in] | ks | Pointer to DES key schedule
  [in] | len | Length of data in bytes

## des_key_schedule()

IMB_DLL_EXPORT int des_key_schedule | ( | uint64_t * | ks,
|  | const void * | key
| ) |  |

DES key schedule set up.

ks buffer needs to accommodate DES_KEY_SCHED_SIZE (128) bytes of data.

Parameters

  [out] | ks | Destination buffer to accommodate DES key schedule
  [in] | key | Pointer to an 8 byte DES key

Returns
  Operation status

Return values

  0 | success
  !0 | error

## flush_job_avx()

IMB_DLL_EXPORT IMB_JOB * flush_job_avx | ( | IMB_MGR * | state | ) |

Force processing until next job in queue is completed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no more jobs to process

## flush_job_avx2()

IMB_DLL_EXPORT IMB_JOB * flush_job_avx2 | ( | IMB_MGR * | state | ) |

Force processing until next job in queue is completed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no more jobs to process

## flush_job_avx512()

IMB_DLL_EXPORT IMB_JOB * flush_job_avx512 | ( | IMB_MGR * | state | ) |

Force processing until next job in queue is completed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no more jobs to process

## flush_job_sse()

IMB_DLL_EXPORT IMB_JOB * flush_job_sse | ( | IMB_MGR * | state | ) |

Force processing until next job in queue is completed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no more jobs to process

## free_mb_mgr()

IMB_DLL_EXPORT void free_mb_mgr | ( | IMB_MGR * | ptr | ) |

Frees memory allocated previously by alloc_mb_mgr()

Parameters

  [in] | ptr | Pointer to allocated MB_MGR structure

## get_completed_job_avx()

IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx | ( | IMB_MGR * | state | ) |

Get next completed job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if next job not complete

## get_completed_job_avx2()

IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx2 | ( | IMB_MGR * | state | ) |

Get next completed job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if next job not complete

## get_completed_job_avx512()

IMB_DLL_EXPORT IMB_JOB * get_completed_job_avx512 | ( | IMB_MGR * | state | ) |

Get next completed job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if next job not complete

## get_completed_job_sse()

IMB_DLL_EXPORT IMB_JOB * get_completed_job_sse | ( | IMB_MGR * | state | ) |

Get next completed job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if next job not complete

## get_next_job_avx()

IMB_DLL_EXPORT IMB_JOB * get_next_job_avx | ( | IMB_MGR * | state | ) |

Get next available job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to next free IMB_JOB in the queue

## get_next_job_avx2()

IMB_DLL_EXPORT IMB_JOB * get_next_job_avx2 | ( | IMB_MGR * | state | ) |

Get next available job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to next free IMB_JOB in the queue

## get_next_job_avx512()

IMB_DLL_EXPORT IMB_JOB * get_next_job_avx512 | ( | IMB_MGR * | state | ) |

Get next available job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to next free IMB_JOB in the queue

## get_next_job_sse()

IMB_DLL_EXPORT IMB_JOB * get_next_job_sse | ( | IMB_MGR * | state | ) |

Get next available job.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to next free IMB_JOB in the queue

## imb_clear_mem()

IMB_DLL_EXPORT void imb_clear_mem | ( | void * | mem,
|  | const size_t | size
| ) |  |

Force clearing/zeroing of memory.

Parameters

  [in] | mem | Pointer to memory address to clear
  [in] | size | Size of memory to clear (in bytes)

## imb_get_errno()

IMB_DLL_EXPORT int imb_get_errno | ( | IMB_MGR * | mb_mgr | ) |

API to get error status.

Parameters

  mb_mgr | Pointer to multi-buffer manager

Return values

  Integer | error type

## imb_get_feature_flags()

IMB_DLL_EXPORT uint64_t imb_get_feature_flags | ( | void |  | ) |

Retrieves the bitmask with the features supported by the library, without having to allocate/initialize IMB_MGR;.

Returns
  Bitmask containing feature flags

## imb_get_mb_mgr_size()

IMB_DLL_EXPORT size_t imb_get_mb_mgr_size | ( | void |  | ) |

Calculates necessary memory size for IMB_MGR.

Returns
  Size for IMB_MGR (aligned to 64 bytes)

## imb_get_strerror()

IMB_DLL_EXPORT const char * imb_get_strerror | ( | int | errnum | ) |

API to get description for errnum.

Parameters

  errnum | error type

Return values

  String | description of errnum

## imb_get_version()

IMB_DLL_EXPORT unsigned imb_get_version | ( | void |  | ) |

Get library version in numerical format.

Use IMB_VERSION() macro to compare this numerical version against known library version.

Returns
  library version number

## imb_get_version_str()

IMB_DLL_EXPORT const char * imb_get_version_str | ( | void |  | ) |

Get library version in string format.

API definitions

Returns
  library version string

## imb_hmac_ipad_opad()

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.

Parameters

  [in] | mb_mgr | Pointer to initialized IMB_MGR structure
  [in] | sha_type | Type of HMAC_SHA from IMB_HASH_ALG enum
  [in] | pkey | Pointer to a HMAC key
  [in] | key_len | Length of the HMAC key
  [out] | ipad_hash | Block-sized inner padding
  [out] | opad_hash | Block-sized outer padding

## imb_quic_aes_gcm()

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.

Note
  IV length of 12 bytes is assumed.
  If used out of place then AAD needs to be copied by the caller.
  For more info on key_data refer to IMB_AES128/192/256_GCM_PRE() API’s

Parameters

  [in] | state | pointer to IMB_MGR
  [in] | key_data | initialized key data (AES keys and hash keys)
  [in] | key_size | key size (in bytes, see IMB_KEY_128_BYTES etc.)
  [in] | cipher_dir | cipher direction (IMB_DIR_ENCRYPT / DECRYPT)
  [out] | dst_ptr_array | array with destination pointers
  [in] | src_ptr_array | array with source pointers
  [in] | len_array | array with message lengths in bytes
  [in] | iv_ptr_array | array with IV pointers
  [in] | aad_ptr_array | array with AAD pointers
  [in] | aad_len | AAD length in bytes
  [out] | tag_ptr_array | array with authentication TAG pointers
  [in] | tag_len | authentication TAG length in bytes
  [in] | num_packets | number of packets in this batch

## imb_quic_hp_aes_ecb()

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.

Sample size is fixed to 16 bytes (read from source pointers). Mask output size is fixed to 5 bytes (written to destination pointer). Cipher direction is fixed to ENCRYPT.

Parameters

  [in] | state | pointer to IMB_MGR
  [in] | exp_key_data | expanded AES encrypt keys
  [out] | dst_ptr_array | array with destination pointers
  [in] | src_ptr_array | array with source sample pointers
  [in] | num_packets | number of packets in this batch
  [in] | key_size | key size (in bytes, see IMB_KEY_128_BYTES etc.)

## imb_set_pointers_mb_mgr()

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_get_mb_mgr_size() should be called to know how much memory should be allocated externally.

init_mb_mgr_XXX() must be called after this function call, whereas XXX is the desired architecture.

Parameters

  [in] | ptr | a pointer to allocated memory
  [in] | flags | multi-buffer manager flags IMB_FLAG_SHANI_OFF - disable use (and detection) of SHA extensions, currently SHANI is only available for SSE IMB_FLAG_AESNI_OFF - disable use (and detection) of AES extensions. IMB_FLAG_GFNI_OFF - disable use (and detection) of Galois Field extensions.
  [in] | reset_mgr | if 0, IMB_MGR structure is not cleared, else it is.

Returns
  Pointer to IMB_MGR structure

## imb_set_session()

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.

This is mandatory operation for BURST API as suite_id is used to speed up job dispatch process. This operation is optional but helpful for JOB API use case.

'session_id' field is for application use to optimize job set up process. If JOB structure provided by library for a new operation has same session ID as required for the next operation then only message pointers and sizes need to be set up by the application. All other session fields are guaranteed to be unmodified by the library:

- cipher mode
- cipher direction
- hash algorithm
- key size
- encrypt & decrypt key pointers
- suite_id If allocated JOB structure contains different session ID then all required session and crypto operation fields need to be set up.

In connection oriented applications, a template filled-in job structure can be cached within connection structure and reused in submit operations.

For given set of parameters: cipher mode, cipher key size, cipher direction and authentication mode, suite_id field is the same.

See also
  IMB_SUBMIT_BURST()
  IMB_SUBMIT_BURST_NOCHECK()
  IMB_SUBMIT_JOB()
  IMB_SUBMIT_JOB_NOCHECK()

Parameters

  [in] | state | pointer to IMB_MGR
  [in,out] | job | pointer to prepared JOB structure

Returns
  Session ID value

Return values

  0 | on error

## init_mb_mgr_auto()

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.

Parameters

  [in] | state | Pointer to MB_MGR struct
  [out] | arch | Pointer to arch enum to be set (can be NULL)

## init_mb_mgr_avx()

IMB_DLL_EXPORT void init_mb_mgr_avx | ( | IMB_MGR * | state | ) |

Initialize Multi-Buffer Manager structure.

Must be called before calling JOB/BURST API.

Parameters

  [in,out] | state | Pointer to IMB_MGR structure For binary compatibility between library versions, it is recommended to allocate the IMB_MGR structure using the alloc_mb_mgr() API

## init_mb_mgr_avx2()

IMB_DLL_EXPORT void init_mb_mgr_avx2 | ( | IMB_MGR * | state | ) |

Initialize Multi-Buffer Manager structure.

Must be called before calling JOB/BURST API.

Parameters

  [in,out] | state | Pointer to IMB_MGR structure For binary compatibility between library versions, it is recommended to allocate the IMB_MGR structure using the alloc_mb_mgr() API

## init_mb_mgr_avx512()

IMB_DLL_EXPORT void init_mb_mgr_avx512 | ( | IMB_MGR * | state | ) |

Initialize Multi-Buffer Manager structure.

Must be called before calling JOB/BURST API.

Parameters

  [in,out] | state | Pointer to IMB_MGR structure For binary compatibility between library versions, it is recommended to allocate the IMB_MGR structure using the alloc_mb_mgr() API

## init_mb_mgr_sse()

IMB_DLL_EXPORT void init_mb_mgr_sse | ( | IMB_MGR * | state | ) |

Initialize Multi-Buffer Manager structure.

Must be called before calling JOB/BURST API.

Parameters

  [in,out] | state | Pointer to IMB_MGR structure For binary compatibility between library versions, it is recommended to allocate the IMB_MGR structure using the alloc_mb_mgr() API

## kasumi_f8_iv_gen()

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.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | bearer | BEARER (5 bits)
  [in] | dir | DIRECTION (1 bit)
  [out] | iv_ptr | Pointer to generated IV (16 bytes)

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid

## kasumi_f9_iv_gen()

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.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | fresh | FRESH (4 bytes in Little Endian)
  [out] | iv_ptr | Pointer to generated IV (16 bytes)

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid

## md5_one_block_avx()

IMB_DLL_EXPORT void md5_one_block_avx | ( | const void * | data,
|  | void * | digest
| ) |  |

Authenticate 64-byte data buffer with MD5.

Parameters

  [in] | data | 64-byte data buffer
  [out] | digest | Digest output (16 bytes)

## md5_one_block_avx2()

IMB_DLL_EXPORT void md5_one_block_avx2 | ( | const void * | data,
|  | void * | digest
| ) |  |

Authenticate 64-byte data buffer with MD5.

Parameters

  [in] | data | 64-byte data buffer
  [out] | digest | Digest output (16 bytes)

## md5_one_block_avx512()

IMB_DLL_EXPORT void md5_one_block_avx512 | ( | const void * | data,
|  | void * | digest
| ) |  |

Authenticate 64-byte data buffer with MD5.

Parameters

  [in] | data | 64-byte data buffer
  [out] | digest | Digest output (16 bytes)

## md5_one_block_sse()

IMB_DLL_EXPORT void md5_one_block_sse | ( | const void * | data,
|  | void * | digest
| ) |  |

Authenticate 64-byte data buffer with MD5.

Parameters

  [in] | data | 64-byte data buffer
  [out] | digest | Digest output (16 bytes)

## queue_size_avx()

IMB_DLL_EXPORT uint32_t queue_size_avx | ( | IMB_MGR * | state | ) |

Get number of jobs queued to be processed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Number of jobs in the queue

## queue_size_avx2()

IMB_DLL_EXPORT uint32_t queue_size_avx2 | ( | IMB_MGR * | state | ) |

Get number of jobs queued to be processed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Number of jobs in the queue

## queue_size_avx512()

IMB_DLL_EXPORT uint32_t queue_size_avx512 | ( | IMB_MGR * | state | ) |

Get number of jobs queued to be processed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Number of jobs in the queue

## queue_size_sse()

IMB_DLL_EXPORT uint32_t queue_size_sse | ( | IMB_MGR * | state | ) |

Get number of jobs queued to be processed.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Number of jobs in the queue

## snow3g_f8_iv_gen()

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.

Parameters are passed in Little Endian format and used to generate the IV in Big Endian format.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | bearer | BEARER (5 bits)
  [in] | dir | DIRECTION (1 bit)
  [out] | iv_ptr | Pointer to generated IV (16 bytes) in Big Endian format

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid

## snow3g_f9_iv_gen()

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.

Parameters are passed in Little Endian format and used to generate the IV in Big Endian format.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | fresh | FRESH (4 bytes in Little Endian)
  [in] | dir | DIRECTION (1 bit)
  [out] | iv_ptr | Pointer to generated IV (16 bytes) in Big Endian format

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid

## submit_job_avx()

IMB_DLL_EXPORT IMB_JOB * submit_job_avx | ( | IMB_MGR * | state | ) |

Submit job for processing after validating.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed If NULL, imb_get_errno() can be used to check for potential error conditions

## submit_job_avx2()

IMB_DLL_EXPORT IMB_JOB * submit_job_avx2 | ( | IMB_MGR * | state | ) |

Submit job for processing after validating.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed If NULL, imb_get_errno() can be used to check for potential error conditions

## submit_job_avx512()

IMB_DLL_EXPORT IMB_JOB * submit_job_avx512 | ( | IMB_MGR * | state | ) |

Submit job for processing after validating.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed If NULL, imb_get_errno() can be used to check for potential error conditions

## submit_job_nocheck_avx()

IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx | ( | IMB_MGR * | state | ) |

Submit job for processing without validating.

This is more performant but less secure than submit_job_xxx()

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed

## submit_job_nocheck_avx2()

IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx2 | ( | IMB_MGR * | state | ) |

Submit job for processing without validating.

This is more performant but less secure than submit_job_xxx()

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed

## submit_job_nocheck_avx512()

IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_avx512 | ( | IMB_MGR * | state | ) |

Submit job for processing without validating.

This is more performant but less secure than submit_job_xxx()

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed

## submit_job_nocheck_sse()

IMB_DLL_EXPORT IMB_JOB * submit_job_nocheck_sse | ( | IMB_MGR * | state | ) |

Submit job for processing without validating.

This is more performant but less secure than submit_job_xxx()

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed

## submit_job_sse()

IMB_DLL_EXPORT IMB_JOB * submit_job_sse | ( | IMB_MGR * | state | ) |

Submit job for processing after validating.

Parameters

  [in,out] | state | Pointer to initialized IMB_MGR structure

Returns
  Pointer to completed IMB_JOB or NULL if no job completed If NULL, imb_get_errno() can be used to check for potential error conditions

## zuc_eea3_iv_gen()

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.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | bearer | BEARER (5 bits)
  [in] | dir | DIRECTION (1 bit)
  [out] | iv_ptr | Pointer to generated IV (16 bytes)

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid

## zuc_eia3_iv_gen()

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.

Parameters

  [in] | count | COUNT (4 bytes in Little Endian)
  [in] | bearer | BEARER (5 bits)
  [in] | dir | DIRECTION (1 bit)
  [out] | iv_ptr | Pointer to generated IV (16 bytes)

Returns
  Operation status

Return values

  0 | success
  -1 | if one or more parameters are invalid