1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2016-2020 Intel Corporation 3 */ 4 5 #ifndef _AESNI_GCM_OPS_H_ 6 #define _AESNI_GCM_OPS_H_ 7 8 #ifndef LINUX 9 #define LINUX 10 #endif 11 12 #include <intel-ipsec-mb.h> 13 14 /** Supported vector modes */ 15 enum aesni_gcm_vector_mode { 16 RTE_AESNI_GCM_NOT_SUPPORTED = 0, 17 RTE_AESNI_GCM_SSE, 18 RTE_AESNI_GCM_AVX, 19 RTE_AESNI_GCM_AVX2, 20 RTE_AESNI_GCM_AVX512, 21 RTE_AESNI_GCM_VECTOR_NUM 22 }; 23 24 enum aesni_gcm_key { 25 GCM_KEY_128 = 0, 26 GCM_KEY_192, 27 GCM_KEY_256, 28 GCM_KEY_NUM 29 }; 30 31 typedef void (*aesni_gcm_t)(const struct gcm_key_data *gcm_key_data, 32 struct gcm_context_data *gcm_ctx_data, uint8_t *out, 33 const uint8_t *in, uint64_t plaintext_len, const uint8_t *iv, 34 const uint8_t *aad, uint64_t aad_len, 35 uint8_t *auth_tag, uint64_t auth_tag_len); 36 37 typedef void (*aesni_gcm_pre_t)(const void *key, struct gcm_key_data *gcm_data); 38 39 typedef void (*aesni_gcm_init_t)(const struct gcm_key_data *gcm_key_data, 40 struct gcm_context_data *gcm_ctx_data, 41 const uint8_t *iv, 42 uint8_t const *aad, 43 uint64_t aad_len); 44 45 typedef void (*aesni_gcm_update_t)(const struct gcm_key_data *gcm_key_data, 46 struct gcm_context_data *gcm_ctx_data, 47 uint8_t *out, 48 const uint8_t *in, 49 uint64_t plaintext_len); 50 51 typedef void (*aesni_gcm_finalize_t)(const struct gcm_key_data *gcm_key_data, 52 struct gcm_context_data *gcm_ctx_data, 53 uint8_t *auth_tag, 54 uint64_t auth_tag_len); 55 56 #if IMB_VERSION(0, 54, 0) < IMB_VERSION_NUM 57 typedef void (*aesni_gmac_init_t)(const struct gcm_key_data *gcm_key_data, 58 struct gcm_context_data *gcm_ctx_data, 59 const uint8_t *iv, 60 const uint64_t iv_len); 61 62 typedef void (*aesni_gmac_update_t)(const struct gcm_key_data *gcm_key_data, 63 struct gcm_context_data *gcm_ctx_data, 64 const uint8_t *in, 65 const uint64_t plaintext_len); 66 67 typedef void (*aesni_gmac_finalize_t)(const struct gcm_key_data *gcm_key_data, 68 struct gcm_context_data *gcm_ctx_data, 69 uint8_t *auth_tag, 70 const uint64_t auth_tag_len); 71 #endif 72 73 /** GCM library function pointer table */ 74 struct aesni_gcm_ops { 75 aesni_gcm_t enc; /**< GCM encode function pointer */ 76 aesni_gcm_t dec; /**< GCM decode function pointer */ 77 aesni_gcm_pre_t pre; /**< GCM pre-compute */ 78 aesni_gcm_init_t init; 79 aesni_gcm_update_t update_enc; 80 aesni_gcm_update_t update_dec; 81 aesni_gcm_finalize_t finalize_enc; 82 aesni_gcm_finalize_t finalize_dec; 83 #if IMB_VERSION(0, 54, 0) < IMB_VERSION_NUM 84 aesni_gmac_init_t gmac_init; 85 aesni_gmac_update_t gmac_update; 86 aesni_gmac_finalize_t gmac_finalize; 87 #endif 88 }; 89 90 /** GCM per-session operation handlers */ 91 struct aesni_gcm_session_ops { 92 aesni_gcm_t cipher; 93 aesni_gcm_pre_t pre; 94 aesni_gcm_init_t init; 95 aesni_gcm_update_t update; 96 aesni_gcm_finalize_t finalize; 97 #if IMB_VERSION(0, 54, 0) < IMB_VERSION_NUM 98 aesni_gmac_init_t gmac_init; 99 aesni_gmac_update_t gmac_update; 100 aesni_gmac_finalize_t gmac_finalize; 101 #endif 102 }; 103 104 #endif /* _AESNI_GCM_OPS_H_ */ 105