NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_aes_gcm.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES, ALL RIGHTS RESERVED.
3  *
4  * This software product is a proprietary product of NVIDIA CORPORATION &
5  * AFFILIATES (the "Company") and all right, title, and interest in and to the
6  * software product, including all associated intellectual property rights, are
7  * and shall remain exclusively with the Company.
8  *
9  * This software product is governed by the End User License Agreement
10  * provided with the software product.
11  *
12  */
13 
22 #ifndef DOCA_AES_GCM_H_
23 #define DOCA_AES_GCM_H_
24 
25 #include <inttypes.h>
26 
27 #include <doca_compat.h>
28 #include <doca_error.h>
29 #include <doca_types.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 /**********************************************************************************************************************
36  * DOCA core opaque types
37  *********************************************************************************************************************/
38 
39 struct doca_buf;
40 struct doca_ctx;
41 struct doca_dev;
42 struct doca_devinfo;
43 
44 /*********************************************************************************************************************
45  * DOCA AES-GCM Context
46  *********************************************************************************************************************/
47 
51 struct doca_aes_gcm;
52 
69 doca_error_t doca_aes_gcm_create(struct doca_dev *dev, struct doca_aes_gcm **aes_gcm);
70 
85 doca_error_t doca_aes_gcm_destroy(struct doca_aes_gcm *aes_gcm);
86 
97 struct doca_ctx *doca_aes_gcm_as_ctx(struct doca_aes_gcm *aes_gcm);
98 
117 doca_error_t doca_aes_gcm_cap_get_max_num_tasks(struct doca_aes_gcm *aes_gcm, uint32_t *max_num_tasks);
118 
119 /*********************************************************************************************************************
120  * DOCA AES-GCM KEY
121  *********************************************************************************************************************/
122 
126 struct doca_aes_gcm_key;
127 
134 };
135 
157 doca_error_t doca_aes_gcm_key_create(struct doca_aes_gcm *aes_gcm,
158  const void *raw_key,
159  enum doca_aes_gcm_key_type raw_key_type,
160  struct doca_aes_gcm_key **key);
161 
174 doca_error_t doca_aes_gcm_key_destroy(struct doca_aes_gcm_key *key);
175 
176 /************************************************************************/
177 /* AES-GCM ENCRYPT TASK */
178 /************************************************************************/
179 
183 struct doca_aes_gcm_task_encrypt;
184 
196 typedef void (*doca_aes_gcm_task_encrypt_completion_cb_t)(struct doca_aes_gcm_task_encrypt *task,
197  union doca_data task_user_data,
198  union doca_data ctx_user_data);
199 
215 doca_error_t doca_aes_gcm_cap_task_encrypt_is_supported(const struct doca_devinfo *devinfo);
216 
232 doca_error_t doca_aes_gcm_cap_task_encrypt_get_max_iv_len(const struct doca_devinfo *devinfo, uint32_t *max_iv_len);
233 
249 
265 
283  enum doca_aes_gcm_key_type key_type);
284 
303  uint64_t *max_buffer_size);
304 
322  uint32_t *max_list_num_elem);
323 
346  uint32_t num_tasks);
347 
384  struct doca_buf const *src_buff,
385  struct doca_buf *dst_buff,
386  struct doca_aes_gcm_key *key,
387  const uint8_t *iv,
388  uint32_t iv_length,
389  uint32_t tag_size,
390  uint32_t aad_size,
391  union doca_data user_data,
392  struct doca_aes_gcm_task_encrypt **task);
393 
402 struct doca_task *doca_aes_gcm_task_encrypt_as_task(struct doca_aes_gcm_task_encrypt *task);
403 
413 void doca_aes_gcm_task_encrypt_set_src(struct doca_aes_gcm_task_encrypt *task, struct doca_buf const *src_buff);
414 
424 struct doca_buf const *doca_aes_gcm_task_encrypt_get_src(const struct doca_aes_gcm_task_encrypt *task);
425 
435 void doca_aes_gcm_task_encrypt_set_dst(struct doca_aes_gcm_task_encrypt *task, struct doca_buf *dst_buff);
436 
446 struct doca_buf *doca_aes_gcm_task_encrypt_get_dst(const struct doca_aes_gcm_task_encrypt *task);
447 
457 void doca_aes_gcm_task_encrypt_set_key(struct doca_aes_gcm_task_encrypt *task, struct doca_aes_gcm_key *key);
458 
468 struct doca_aes_gcm_key *doca_aes_gcm_task_encrypt_get_key(const struct doca_aes_gcm_task_encrypt *task);
469 
481 void doca_aes_gcm_task_encrypt_set_iv(struct doca_aes_gcm_task_encrypt *task, const uint8_t *iv, uint32_t iv_length);
482 
494 const uint8_t *doca_aes_gcm_task_encrypt_get_iv(const struct doca_aes_gcm_task_encrypt *task, uint32_t *iv_length);
495 
505 void doca_aes_gcm_task_encrypt_set_tag_size(struct doca_aes_gcm_task_encrypt *task, uint32_t tag_size);
506 
516 uint32_t doca_aes_gcm_task_encrypt_get_tag_size(const struct doca_aes_gcm_task_encrypt *task);
517 
527 void doca_aes_gcm_task_encrypt_set_aad_size(struct doca_aes_gcm_task_encrypt *task, uint32_t aad_size);
528 
538 uint32_t doca_aes_gcm_task_encrypt_get_aad_size(const struct doca_aes_gcm_task_encrypt *task);
539 
540 /************************************************************************/
541 /* AES-GCM DECRYPT TASK */
542 /************************************************************************/
543 
547 struct doca_aes_gcm_task_decrypt;
548 
560 typedef void (*doca_aes_gcm_task_decrypt_completion_cb_t)(struct doca_aes_gcm_task_decrypt *task,
561  union doca_data task_user_data,
562  union doca_data ctx_user_data);
563 
579 doca_error_t doca_aes_gcm_cap_task_decrypt_is_supported(const struct doca_devinfo *devinfo);
580 
596 doca_error_t doca_aes_gcm_cap_task_decrypt_get_max_iv_len(const struct doca_devinfo *devinfo, uint32_t *max_iv_len);
597 
613 
629 
647  enum doca_aes_gcm_key_type key_type);
648 
667  uint64_t *max_buffer_size);
668 
686  uint32_t *max_list_num_elem);
687 
710  uint32_t num_tasks);
711 
749  struct doca_buf const *src_buff,
750  struct doca_buf *dst_buff,
751  struct doca_aes_gcm_key *key,
752  const uint8_t *iv,
753  uint32_t iv_length,
754  uint32_t tag_size,
755  uint32_t aad_size,
756  union doca_data user_data,
757  struct doca_aes_gcm_task_decrypt **task);
758 
767 struct doca_task *doca_aes_gcm_task_decrypt_as_task(struct doca_aes_gcm_task_decrypt *task);
768 
778 void doca_aes_gcm_task_decrypt_set_src(struct doca_aes_gcm_task_decrypt *task, struct doca_buf const *src_buff);
779 
789 struct doca_buf const *doca_aes_gcm_task_decrypt_get_src(const struct doca_aes_gcm_task_decrypt *task);
790 
800 void doca_aes_gcm_task_decrypt_set_dst(struct doca_aes_gcm_task_decrypt *task, struct doca_buf *dst_buff);
801 
811 struct doca_buf *doca_aes_gcm_task_decrypt_get_dst(const struct doca_aes_gcm_task_decrypt *task);
812 
822 void doca_aes_gcm_task_decrypt_set_key(struct doca_aes_gcm_task_decrypt *task, struct doca_aes_gcm_key *key);
823 
833 struct doca_aes_gcm_key *doca_aes_gcm_task_decrypt_get_key(const struct doca_aes_gcm_task_decrypt *task);
834 
846 void doca_aes_gcm_task_decrypt_set_iv(struct doca_aes_gcm_task_decrypt *task, const uint8_t *iv, uint32_t iv_length);
847 
859 const uint8_t *doca_aes_gcm_task_decrypt_get_iv(const struct doca_aes_gcm_task_decrypt *task, uint32_t *iv_length);
860 
870 void doca_aes_gcm_task_decrypt_set_tag_size(struct doca_aes_gcm_task_decrypt *task, uint32_t tag_size);
871 
881 uint32_t doca_aes_gcm_task_decrypt_get_tag_size(const struct doca_aes_gcm_task_decrypt *task);
882 
892 void doca_aes_gcm_task_decrypt_set_aad_size(struct doca_aes_gcm_task_decrypt *task, uint32_t aad_size);
893 
903 uint32_t doca_aes_gcm_task_decrypt_get_aad_size(const struct doca_aes_gcm_task_decrypt *task);
904 
905 #ifdef __cplusplus
906 } /* extern "C" */
907 #endif
908 
909 #endif /* DOCA_AES_GCM_H_ */
910 
static void task_error_cb(struct doca_task *se_task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: common_common.c:65
static void task_completion_cb(struct doca_task *se_task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: common_common.c:48
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_aad_size(struct doca_aes_gcm_task_encrypt *task, uint32_t aad_size)
set aes_gcm encrypt task additional authenticated data size
void(* doca_aes_gcm_task_decrypt_completion_cb_t)(struct doca_aes_gcm_task_decrypt *task, union doca_data task_user_data, union doca_data ctx_user_data)
Function to execute on aes_gcm decrypt task completion.
Definition: doca_aes_gcm.h:560
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_is_key_type_supported(const struct doca_devinfo *devinfo, enum doca_aes_gcm_key_type key_type)
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_aad_size(struct doca_aes_gcm_task_decrypt *task, uint32_t aad_size)
set aes_gcm decrypt task additional authenticated data size
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_key(struct doca_aes_gcm_task_decrypt *task, struct doca_aes_gcm_key *key)
set aes_gcm decrypt task doca_aes_gcm_key
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_key_create(struct doca_aes_gcm *aes_gcm, const void *raw_key, enum doca_aes_gcm_key_type raw_key_type, struct doca_aes_gcm_key **key)
Create an AES-GCM key from the user raw key to send with the task to allow encrypt/decrypt operations...
DOCA_EXPERIMENTAL uint32_t doca_aes_gcm_task_encrypt_get_aad_size(const struct doca_aes_gcm_task_encrypt *task)
get aes_gcm encrypt task additional authenticated data size
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_task_decrypt_alloc_init(struct doca_aes_gcm *aes_gcm, struct doca_buf const *src_buff, struct doca_buf *dst_buff, struct doca_aes_gcm_key *key, const uint8_t *iv, uint32_t iv_length, uint32_t tag_size, uint32_t aad_size, union doca_data user_data, struct doca_aes_gcm_task_decrypt **task)
Allocate aes_gcm decrypt task.
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_get_max_list_buf_num_elem(const struct doca_devinfo *devinfo, uint32_t *max_list_num_elem)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_get_max_buf_size(const struct doca_devinfo *devinfo, uint64_t *max_buffer_size)
Get aes_gcm encrypt max buffer size.
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_is_tag_96_supported(const struct doca_devinfo *devinfo)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_get_max_list_buf_num_elem(const struct doca_devinfo *devinfo, uint32_t *max_list_num_elem)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_task_encrypt_alloc_init(struct doca_aes_gcm *aes_gcm, struct doca_buf const *src_buff, struct doca_buf *dst_buff, struct doca_aes_gcm_key *key, const uint8_t *iv, uint32_t iv_length, uint32_t tag_size, uint32_t aad_size, union doca_data user_data, struct doca_aes_gcm_task_encrypt **task)
Allocate aes_gcm encrypt task.
DOCA_EXPERIMENTAL const uint8_t * doca_aes_gcm_task_encrypt_get_iv(const struct doca_aes_gcm_task_encrypt *task, uint32_t *iv_length)
get aes_gcm encrypt task initialization vector
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_get_max_iv_len(const struct doca_devinfo *devinfo, uint32_t *max_iv_len)
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_iv(struct doca_aes_gcm_task_decrypt *task, const uint8_t *iv, uint32_t iv_length)
set aes_gcm decrypt task initialization vector
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_is_tag_96_supported(const struct doca_devinfo *devinfo)
DOCA_EXPERIMENTAL uint32_t doca_aes_gcm_task_encrypt_get_tag_size(const struct doca_aes_gcm_task_encrypt *task)
get aes_gcm encrypt task authentication tag size
DOCA_EXPERIMENTAL struct doca_aes_gcm_key * doca_aes_gcm_task_encrypt_get_key(const struct doca_aes_gcm_task_encrypt *task)
get aes_gcm encrypt task doca_aes_gcm_key
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_is_key_type_supported(const struct doca_devinfo *devinfo, enum doca_aes_gcm_key_type key_type)
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_src(struct doca_aes_gcm_task_decrypt *task, struct doca_buf const *src_buff)
set aes_gcm decrypt task source
DOCA_EXPERIMENTAL struct doca_task * doca_aes_gcm_task_encrypt_as_task(struct doca_aes_gcm_task_encrypt *task)
convert aes_gcm encrypt task to doca_task
DOCA_EXPERIMENTAL struct doca_buf * doca_aes_gcm_task_encrypt_get_dst(const struct doca_aes_gcm_task_encrypt *task)
get aes_gcm encrypt task destination
DOCA_EXPERIMENTAL struct doca_ctx * doca_aes_gcm_as_ctx(struct doca_aes_gcm *aes_gcm)
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_src(struct doca_aes_gcm_task_encrypt *task, struct doca_buf const *src_buff)
set aes_gcm encrypt task source
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_key_destroy(struct doca_aes_gcm_key *key)
Destroy AES-GCM key that was created in doca_aes_gcm_key_create.
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_dst(struct doca_aes_gcm_task_decrypt *task, struct doca_buf *dst_buff)
set aes_gcm decrypt task destination
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_get_max_num_tasks(struct doca_aes_gcm *aes_gcm, uint32_t *max_num_tasks)
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_dst(struct doca_aes_gcm_task_encrypt *task, struct doca_buf *dst_buff)
set aes_gcm encrypt task destination
DOCA_EXPERIMENTAL struct doca_buf * doca_aes_gcm_task_decrypt_get_dst(const struct doca_aes_gcm_task_decrypt *task)
get aes_gcm decrypt task destination
DOCA_EXPERIMENTAL const uint8_t * doca_aes_gcm_task_decrypt_get_iv(const struct doca_aes_gcm_task_decrypt *task, uint32_t *iv_length)
get aes_gcm decrypt task initialization vector
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_task_encrypt_set_conf(struct doca_aes_gcm *aes_gcm, doca_aes_gcm_task_encrypt_completion_cb_t task_completion_cb, doca_aes_gcm_task_encrypt_completion_cb_t task_error_cb, uint32_t num_tasks)
This method sets the aes_gcm encrypt task configuration.
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_iv(struct doca_aes_gcm_task_encrypt *task, const uint8_t *iv, uint32_t iv_length)
set aes_gcm encrypt task initialization vector
doca_aes_gcm_key_type
AES-GCM key type.
Definition: doca_aes_gcm.h:131
DOCA_EXPERIMENTAL uint32_t doca_aes_gcm_task_decrypt_get_tag_size(const struct doca_aes_gcm_task_decrypt *task)
get aes_gcm decrypt task authentication tag size
DOCA_EXPERIMENTAL void doca_aes_gcm_task_decrypt_set_tag_size(struct doca_aes_gcm_task_decrypt *task, uint32_t tag_size)
set aes_gcm decrypt task authentication tag size
void(* doca_aes_gcm_task_encrypt_completion_cb_t)(struct doca_aes_gcm_task_encrypt *task, union doca_data task_user_data, union doca_data ctx_user_data)
Function to execute on aes_gcm encrypt task completion.
Definition: doca_aes_gcm.h:196
DOCA_EXPERIMENTAL struct doca_buf const * doca_aes_gcm_task_encrypt_get_src(const struct doca_aes_gcm_task_encrypt *task)
get aes_gcm encrypt task source
DOCA_EXPERIMENTAL struct doca_buf const * doca_aes_gcm_task_decrypt_get_src(const struct doca_aes_gcm_task_decrypt *task)
get aes_gcm decrypt task source
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_is_tag_128_supported(const struct doca_devinfo *devinfo)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_get_max_iv_len(const struct doca_devinfo *devinfo, uint32_t *max_iv_len)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_encrypt_is_supported(const struct doca_devinfo *devinfo)
Check if a aes_gcm encrypt task is supported by a device.
DOCA_EXPERIMENTAL struct doca_task * doca_aes_gcm_task_decrypt_as_task(struct doca_aes_gcm_task_decrypt *task)
convert aes_gcm decrypt task to doca_task
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_tag_size(struct doca_aes_gcm_task_encrypt *task, uint32_t tag_size)
set aes_gcm encrypt task authentication tag size
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_get_max_buf_size(const struct doca_devinfo *devinfo, uint64_t *max_buffer_size)
Get aes_gcm decrypt max buffer size.
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_is_tag_128_supported(const struct doca_devinfo *devinfo)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_create(struct doca_dev *dev, struct doca_aes_gcm **aes_gcm)
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_task_decrypt_set_conf(struct doca_aes_gcm *aes_gcm, doca_aes_gcm_task_decrypt_completion_cb_t task_completion_cb, doca_aes_gcm_task_decrypt_completion_cb_t task_error_cb, uint32_t num_tasks)
This method sets the aes_gcm decrypt task configuration.
DOCA_EXPERIMENTAL void doca_aes_gcm_task_encrypt_set_key(struct doca_aes_gcm_task_encrypt *task, struct doca_aes_gcm_key *key)
set aes_gcm encrypt task doca_aes_gcm_key
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_cap_task_decrypt_is_supported(const struct doca_devinfo *devinfo)
Check if a aes_gcm decrypt task is supported by a device.
DOCA_EXPERIMENTAL doca_error_t doca_aes_gcm_destroy(struct doca_aes_gcm *aes_gcm)
DOCA_EXPERIMENTAL uint32_t doca_aes_gcm_task_decrypt_get_aad_size(const struct doca_aes_gcm_task_decrypt *task)
get aes_gcm decrypt task additional authenticated data size
DOCA_EXPERIMENTAL struct doca_aes_gcm_key * doca_aes_gcm_task_decrypt_get_key(const struct doca_aes_gcm_task_decrypt *task)
get aes_gcm decrypt task doca_aes_gcm_key
@ DOCA_AES_GCM_KEY_256
Definition: doca_aes_gcm.h:133
@ DOCA_AES_GCM_KEY_128
Definition: doca_aes_gcm.h:132
#define DOCA_EXPERIMENTAL
To set a Symbol (or specifically a function) as experimental.
Definition: doca_compat.h:103
enum doca_error doca_error_t
DOCA API return codes.
Convenience type for representing opaque data.
Definition: doca_types.h:56