1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016-2021 Intel Corporation
5 #ifndef _PMD_AESNI_GCM_PRIV_H_
6 #define _PMD_AESNI_GCM_PRIV_H_
8 #include <intel-ipsec-mb.h>
10 #include "ipsec_mb_private.h"
12 #define AESNI_GCM_IV_LENGTH 12
14 static const struct rte_cryptodev_capabilities aesni_gcm_capabilities[] = {
15 { /* AES GMAC (AUTH) */
16 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
18 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
20 .algo = RTE_CRYPTO_AUTH_AES_GMAC,
33 .min = AESNI_GCM_IV_LENGTH,
34 .max = AESNI_GCM_IV_LENGTH,
41 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
43 .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
45 .algo = RTE_CRYPTO_AEAD_AES_GCM,
63 .min = AESNI_GCM_IV_LENGTH,
64 .max = AESNI_GCM_IV_LENGTH,
70 RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
73 uint8_t pmd_driver_id_aesni_gcm;
75 enum aesni_gcm_key_length {
82 typedef void (*aesni_gcm_t)(const struct gcm_key_data *gcm_key_data,
83 struct gcm_context_data *gcm_ctx_data,
84 uint8_t *out, const uint8_t *in,
85 uint64_t plaintext_len, const uint8_t *iv,
86 const uint8_t *aad, uint64_t aad_len,
87 uint8_t *auth_tag, uint64_t auth_tag_len);
89 typedef void (*aesni_gcm_pre_t)(const void *key,
90 struct gcm_key_data *gcm_data);
92 typedef void (*aesni_gcm_init_t)(const struct gcm_key_data *gcm_key_data,
93 struct gcm_context_data *gcm_ctx_data,
94 const uint8_t *iv, uint8_t const *aad,
97 typedef void (*aesni_gcm_update_t)(const struct gcm_key_data *gcm_key_data,
98 struct gcm_context_data *gcm_ctx_data,
99 uint8_t *out, const uint8_t *in,
100 uint64_t plaintext_len);
102 typedef void (*aesni_gcm_finalize_t)(const struct gcm_key_data *gcm_key_data,
103 struct gcm_context_data *gcm_ctx_data,
104 uint8_t *auth_tag, uint64_t auth_tag_len);
106 typedef void (*aesni_gmac_init_t)(const struct gcm_key_data *gcm_key_data,
107 struct gcm_context_data *gcm_ctx_data,
108 const uint8_t *iv, const uint64_t iv_len);
110 typedef void (*aesni_gmac_update_t)(const struct gcm_key_data *gcm_key_data,
111 struct gcm_context_data *gcm_ctx_data,
113 const uint64_t plaintext_len);
115 typedef void (*aesni_gmac_finalize_t)(const struct gcm_key_data *gcm_key_data,
116 struct gcm_context_data *gcm_ctx_data,
118 const uint64_t auth_tag_len);
120 /** GCM operation handlers */
121 struct aesni_gcm_ops {
125 aesni_gcm_init_t init;
126 aesni_gcm_update_t update_enc;
127 aesni_gcm_update_t update_dec;
128 aesni_gcm_finalize_t finalize_enc;
129 aesni_gcm_finalize_t finalize_dec;
130 aesni_gmac_init_t gmac_init;
131 aesni_gmac_update_t gmac_update;
132 aesni_gmac_finalize_t gmac_finalize;
135 RTE_DEFINE_PER_LCORE(struct aesni_gcm_ops[GCM_NUM_KEY_TYPES], gcm_ops);
137 struct aesni_gcm_qp_data {
138 struct gcm_context_data gcm_ctx_data;
139 uint8_t temp_digest[DIGEST_LENGTH_MAX];
140 /* *< Buffers used to store the digest generated
141 * by the driver when verifying a digest provided
142 * by the user (using authentication verify operation)
144 struct aesni_gcm_ops ops[GCM_NUM_KEY_TYPES];
145 /**< Operation Handlers */
148 /** AESNI GCM private session structure */
149 struct aesni_gcm_session {
154 /**< IV parameters */
157 uint16_t req_digest_length;
158 /**< Requested digest length */
159 uint16_t gen_digest_length;
160 /**< Generated digest length */
161 enum ipsec_mb_operation op;
162 /**< GCM operation type */
163 struct gcm_key_data gdata_key;
164 /**< GCM parameters */
165 enum aesni_gcm_key_length key_length;
169 #endif /* _PMD_AESNI_GCM_PRIV_H_ */