DPDK 21.11.9
rte_crypto_sym.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016-2020 Intel Corporation
3 */
4
5#ifndef _RTE_CRYPTO_SYM_H_
6#define _RTE_CRYPTO_SYM_H_
7
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#include <string.h>
22
23#include <rte_mbuf.h>
24#include <rte_memory.h>
25#include <rte_mempool.h>
26#include <rte_common.h>
27
35 void *base;
39 uint32_t len;
41 uint32_t tot_len;
42};
43
52 uint32_t num;
53};
54
61 void *va;
62 rte_iova_t iova;
63};
64
72 uint32_t num;
81
82 __extension__
83 union {
88 };
89
95 int32_t *status;
96};
97
103 uint64_t raw;
104 struct {
105 struct {
106 uint16_t head;
107 uint16_t tail;
108 } auth, cipher;
109 } ofs;
110};
111
170
172extern const char *
174
182
184extern const char *
186
202 struct {
203 const uint8_t *data;
204 uint16_t length;
205 } key;
237 struct {
238 uint16_t offset;
264 uint16_t length;
279 } iv;
281 uint32_t dataunit_len;
292};
293
369
371extern const char *
373
379
381extern const char *
383
397 struct {
398 const uint8_t *data;
399 uint16_t length;
400 } key;
408 struct {
409 uint16_t offset;
425 uint16_t length;
443 } iv;
455};
456
457
473
475extern const char *
477
485
487extern const char *
489
490struct rte_crypto_aead_xform {
496 struct {
497 const uint8_t *data;
498 uint16_t length;
499 } key;
500
501 struct {
502 uint16_t offset;
522 uint16_t length;
538 } iv;
540 uint16_t digest_length;
541
542 uint16_t aad_length;
548};
549
557
571 ;
573 union {
578 struct rte_crypto_aead_xform aead;
580 };
581};
582
584
616 struct rte_mbuf *m_src;
617 struct rte_mbuf *m_dst;
620 union {
625 struct rte_security_session *sec_session;
627 };
628
630 union {
631 struct {
632 struct {
633 uint32_t offset;
638 uint32_t length;
644 struct {
645 uint8_t *data;
668 struct {
669 uint8_t *data;
701 } aad;
703 } aead;
704
705 struct {
706 struct {
707 struct {
708 uint32_t offset;
724 uint32_t length;
742 } cipher;
743
744 struct {
745 struct {
746 uint32_t offset;
772 uint32_t length;
796 } data;
799 struct {
800 uint8_t *data;
874 } auth;
875 };
876 };
877};
878
879
885static inline void
887{
888 memset(op, 0, sizeof(*op));
889}
890
891
902static inline struct rte_crypto_sym_xform *
904 void *priv_data, uint8_t nb_xforms)
905{
906 struct rte_crypto_sym_xform *xform;
907
908 sym_op->xform = xform = (struct rte_crypto_sym_xform *)priv_data;
909
910 do {
912 xform = xform->next = --nb_xforms > 0 ? xform + 1 : NULL;
913 } while (xform);
914
915 return sym_op->xform;
916}
917
918
925static inline int
927 struct rte_cryptodev_sym_session *sess)
928{
929 sym_op->session = sess;
930
931 return 0;
932}
933
952__rte_experimental
953static inline int
954rte_crypto_mbuf_to_vec(const struct rte_mbuf *mb, uint32_t ofs, uint32_t len,
955 struct rte_crypto_vec vec[], uint32_t num)
956{
957 uint32_t i;
958 struct rte_mbuf *nseg;
959 uint32_t left;
960 uint32_t seglen;
961
962 /* assuming that requested data starts in the first segment */
963 RTE_ASSERT(mb->data_len > ofs);
964
965 if (mb->nb_segs > num)
966 return -mb->nb_segs;
967
968 vec[0].base = rte_pktmbuf_mtod_offset(mb, void *, ofs);
969 vec[0].iova = rte_pktmbuf_iova_offset(mb, ofs);
970 vec[0].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
971
972 /* whole data lies in the first segment */
973 seglen = mb->data_len - ofs;
974 if (len <= seglen) {
975 vec[0].len = len;
976 return 1;
977 }
978
979 /* data spread across segments */
980 vec[0].len = seglen;
981 left = len - seglen;
982 for (i = 1, nseg = mb->next; nseg != NULL; nseg = nseg->next, i++) {
983
984 vec[i].base = rte_pktmbuf_mtod(nseg, void *);
985 vec[i].iova = rte_pktmbuf_iova(nseg);
986 vec[i].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
987
988 seglen = nseg->data_len;
989 if (left <= seglen) {
990 /* whole requested data is completed */
991 vec[i].len = left;
992 left = 0;
993 i++;
994 break;
995 }
996
997 /* use whole segment */
998 vec[i].len = seglen;
999 left -= seglen;
1000 }
1001
1002 RTE_ASSERT(left == 0);
1003 return i;
1004}
1005
1006
1007#ifdef __cplusplus
1008}
1009#endif
1010
1011#endif /* _RTE_CRYPTO_SYM_H_ */
uint64_t rte_iova_t
Definition: rte_common.h:438
#define RTE_STD_C11
Definition: rte_common.h:42
static void __rte_crypto_sym_op_reset(struct rte_crypto_sym_op *op)
static int __rte_crypto_sym_op_attach_sym_session(struct rte_crypto_sym_op *sym_op, struct rte_cryptodev_sym_session *sess)
rte_crypto_auth_algorithm
@ RTE_CRYPTO_AUTH_SHA512_HMAC
@ RTE_CRYPTO_AUTH_ZUC_EIA3
@ RTE_CRYPTO_AUTH_SHA3_224
@ RTE_CRYPTO_AUTH_AES_CBC_MAC
@ RTE_CRYPTO_AUTH_SHA224_HMAC
@ RTE_CRYPTO_AUTH_AES_XCBC_MAC
@ RTE_CRYPTO_AUTH_SHA3_224_HMAC
@ RTE_CRYPTO_AUTH_SNOW3G_UIA2
@ RTE_CRYPTO_AUTH_SHA1
@ RTE_CRYPTO_AUTH_SHA3_384_HMAC
@ RTE_CRYPTO_AUTH_SHA512
@ RTE_CRYPTO_AUTH_SHA384_HMAC
@ RTE_CRYPTO_AUTH_KASUMI_F9
@ RTE_CRYPTO_AUTH_MD5
@ RTE_CRYPTO_AUTH_MD5_HMAC
@ RTE_CRYPTO_AUTH_SHA384
@ RTE_CRYPTO_AUTH_SHA224
@ RTE_CRYPTO_AUTH_SHA3_512
@ RTE_CRYPTO_AUTH_AES_CMAC
@ RTE_CRYPTO_AUTH_SHA3_256_HMAC
@ RTE_CRYPTO_AUTH_SHA1_HMAC
@ RTE_CRYPTO_AUTH_NULL
@ RTE_CRYPTO_AUTH_SHA3_384
@ RTE_CRYPTO_AUTH_SHA3_256
@ RTE_CRYPTO_AUTH_SHA256
@ RTE_CRYPTO_AUTH_SHA256_HMAC
@ RTE_CRYPTO_AUTH_AES_GMAC
@ RTE_CRYPTO_AUTH_SHA3_512_HMAC
const char * rte_crypto_auth_algorithm_strings[]
const char * rte_crypto_cipher_operation_strings[]
rte_crypto_cipher_operation
@ RTE_CRYPTO_CIPHER_OP_DECRYPT
@ RTE_CRYPTO_CIPHER_OP_ENCRYPT
rte_crypto_sym_xform_type
@ RTE_CRYPTO_SYM_XFORM_NOT_SPECIFIED
@ RTE_CRYPTO_SYM_XFORM_AUTH
@ RTE_CRYPTO_SYM_XFORM_AEAD
@ RTE_CRYPTO_SYM_XFORM_CIPHER
rte_crypto_aead_algorithm
@ RTE_CRYPTO_AEAD_AES_CCM
@ RTE_CRYPTO_AEAD_AES_GCM
@ RTE_CRYPTO_AEAD_CHACHA20_POLY1305
rte_crypto_cipher_algorithm
@ RTE_CRYPTO_CIPHER_DES_CBC
@ RTE_CRYPTO_CIPHER_ARC4
@ RTE_CRYPTO_CIPHER_AES_XTS
@ RTE_CRYPTO_CIPHER_AES_CTR
@ RTE_CRYPTO_CIPHER_AES_DOCSISBPI
@ RTE_CRYPTO_CIPHER_SNOW3G_UEA2
@ RTE_CRYPTO_CIPHER_3DES_ECB
@ RTE_CRYPTO_CIPHER_ZUC_EEA3
@ RTE_CRYPTO_CIPHER_DES_DOCSISBPI
@ RTE_CRYPTO_CIPHER_NULL
@ RTE_CRYPTO_CIPHER_KASUMI_F8
@ RTE_CRYPTO_CIPHER_AES_CBC
@ RTE_CRYPTO_CIPHER_AES_F8
@ RTE_CRYPTO_CIPHER_3DES_CBC
@ RTE_CRYPTO_CIPHER_3DES_CTR
@ RTE_CRYPTO_CIPHER_AES_ECB
const char * rte_crypto_aead_operation_strings[]
rte_crypto_auth_operation
@ RTE_CRYPTO_AUTH_OP_VERIFY
@ RTE_CRYPTO_AUTH_OP_GENERATE
const char * rte_crypto_aead_algorithm_strings[]
rte_crypto_aead_operation
@ RTE_CRYPTO_AEAD_OP_DECRYPT
@ RTE_CRYPTO_AEAD_OP_ENCRYPT
const char * rte_crypto_auth_operation_strings[]
const char * rte_crypto_cipher_algorithm_strings[]
static struct rte_crypto_sym_xform * __rte_crypto_sym_op_sym_xforms_alloc(struct rte_crypto_sym_op *sym_op, void *priv_data, uint8_t nb_xforms)
static __rte_experimental int rte_crypto_mbuf_to_vec(const struct rte_mbuf *mb, uint32_t ofs, uint32_t len, struct rte_crypto_vec vec[], uint32_t num)
static uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
Definition: rte_mbuf.h:1476
#define rte_pktmbuf_iova_offset(m, o)
#define rte_pktmbuf_iova(m)
#define rte_pktmbuf_mtod(m, t)
#define rte_pktmbuf_mtod_offset(m, t, o)
enum rte_crypto_auth_algorithm algo
struct rte_crypto_auth_xform::@109 key
const uint8_t * data
struct rte_crypto_auth_xform::@110 iv
enum rte_crypto_auth_operation op
struct rte_crypto_cipher_xform::@107 key
struct rte_crypto_cipher_xform::@108 iv
enum rte_crypto_cipher_algorithm algo
enum rte_crypto_cipher_operation op
struct rte_crypto_vec * vec
struct rte_cryptodev_sym_session * session
struct rte_crypto_sym_op::@117::@119::@123 digest
struct rte_security_session * sec_session
struct rte_crypto_sym_op::@117::@119::@124 aad
struct rte_mbuf * m_dst
struct rte_crypto_sym_op::@117::@119::@122 data
struct rte_crypto_sym_xform * xform
rte_iova_t phys_addr
struct rte_mbuf * m_src
struct rte_crypto_sgl * src_sgl
struct rte_crypto_sgl * dest_sgl
struct rte_crypto_va_iova_ptr * iv
struct rte_crypto_va_iova_ptr * auth_iv
struct rte_crypto_va_iova_ptr * digest
struct rte_crypto_va_iova_ptr * aad
struct rte_crypto_auth_xform auth
enum rte_crypto_sym_xform_type type
struct rte_crypto_sym_xform * next
struct rte_crypto_cipher_xform cipher
struct rte_crypto_aead_xform aead
rte_iova_t iova
uint32_t tot_len
uint16_t nb_segs
uint16_t buf_len
struct rte_mbuf * next
uint16_t data_len