DPDK 22.11.1
Loading...
Searching...
No Matches
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_compat.h>
24#include <rte_mbuf.h>
25#include <rte_memory.h>
26#include <rte_mempool.h>
27#include <rte_common.h>
28
36 void *base;
40 uint32_t len;
42 uint32_t tot_len;
43};
44
53 uint32_t num;
54};
55
62 void *va;
63 rte_iova_t iova;
64};
65
73 uint32_t num;
82
83 __extension__
84 union {
89 };
90
96 int32_t *status;
97};
98
104 uint64_t raw;
105 struct {
106 struct {
107 uint16_t head;
108 uint16_t tail;
109 } auth, cipher;
110 } ofs;
111};
112
178
180extern const char *
182
190
192extern const char *
194
210 struct {
211 const uint8_t *data;
212 uint16_t length;
213 } key;
245 struct {
246 uint16_t offset;
272 uint16_t length;
287 } iv;
289 uint32_t dataunit_len;
300};
301
379
381extern const char *
383
389
391extern const char *
393
407 struct {
408 const uint8_t *data;
409 uint16_t length;
410 } key;
418 struct {
419 uint16_t offset;
435 uint16_t length;
453 } iv;
465};
466
467
483
485extern const char *
487
495
497extern const char *
499
500struct rte_crypto_aead_xform {
506 struct {
507 const uint8_t *data;
508 uint16_t length;
509 } key;
510
511 struct {
512 uint16_t offset;
532 uint16_t length;
548 } iv;
550 uint16_t digest_length;
551
552 uint16_t aad_length;
558};
559
567
581 ;
583 union {
588 struct rte_crypto_aead_xform aead;
590 };
591};
592
624 struct rte_mbuf *m_src;
625 struct rte_mbuf *m_dst;
628 union {
629 void *session;
633 };
634
636 union {
637 struct {
638 struct {
639 uint32_t offset;
644 uint32_t length;
649 } data;
650 struct {
651 uint8_t *data;
673 } digest;
674 struct {
675 uint8_t *data;
706 rte_iova_t phys_addr;
707 } aad;
709 } aead;
710
711 struct {
712 struct {
713 struct {
714 uint32_t offset;
730 uint32_t length;
747 } data;
748 } cipher;
749
750 struct {
751 struct {
752 uint32_t offset;
778 uint32_t length;
802 } data;
805 struct {
806 uint8_t *data;
877 rte_iova_t phys_addr;
879 } digest;
880 } auth;
881 };
882 };
883};
884
885
891static inline void
893{
894 memset(op, 0, sizeof(*op));
895}
896
897
908static inline struct rte_crypto_sym_xform *
910 void *priv_data, uint8_t nb_xforms)
911{
912 struct rte_crypto_sym_xform *xform;
913
914 sym_op->xform = xform = (struct rte_crypto_sym_xform *)priv_data;
915
916 do {
918 xform = xform->next = --nb_xforms > 0 ? xform + 1 : NULL;
919 } while (xform);
920
921 return sym_op->xform;
922}
923
924
931static inline int
933{
934 sym_op->session = sess;
935
936 return 0;
937}
938
957__rte_experimental
958static inline int
959rte_crypto_mbuf_to_vec(const struct rte_mbuf *mb, uint32_t ofs, uint32_t len,
960 struct rte_crypto_vec vec[], uint32_t num)
961{
962 uint32_t i;
963 struct rte_mbuf *nseg;
964 uint32_t left;
965 uint32_t seglen;
966
967 /* assuming that requested data starts in the first segment */
968 RTE_ASSERT(mb->data_len > ofs);
969
970 if (mb->nb_segs > num)
971 return -mb->nb_segs;
972
973 vec[0].base = rte_pktmbuf_mtod_offset(mb, void *, ofs);
974 vec[0].iova = rte_pktmbuf_iova_offset(mb, ofs);
975 vec[0].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
976
977 /* whole data lies in the first segment */
978 seglen = mb->data_len - ofs;
979 if (len <= seglen) {
980 vec[0].len = len;
981 return 1;
982 }
983
984 /* data spread across segments */
985 vec[0].len = seglen;
986 left = len - seglen;
987 for (i = 1, nseg = mb->next; nseg != NULL; nseg = nseg->next, i++) {
988
989 vec[i].base = rte_pktmbuf_mtod(nseg, void *);
990 vec[i].iova = rte_pktmbuf_iova(nseg);
991 vec[i].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
992
993 seglen = nseg->data_len;
994 if (left <= seglen) {
995 /* whole requested data is completed */
996 vec[i].len = left;
997 left = 0;
998 i++;
999 break;
1000 }
1001
1002 /* use whole segment */
1003 vec[i].len = seglen;
1004 left -= seglen;
1005 }
1006
1007 RTE_ASSERT(left == 0);
1008 return i;
1009}
1010
1011
1012#ifdef __cplusplus
1013}
1014#endif
1015
1016#endif /* _RTE_CRYPTO_SYM_H_ */
uint64_t rte_iova_t
Definition rte_common.h:458
#define RTE_STD_C11
Definition rte_common.h:39
static void __rte_crypto_sym_op_reset(struct rte_crypto_sym_op *op)
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_SM3
@ 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_SM4_ECB
@ 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_SM4_CBC
@ RTE_CRYPTO_CIPHER_3DES_ECB
@ RTE_CRYPTO_CIPHER_ZUC_EEA3
@ RTE_CRYPTO_CIPHER_DES_DOCSISBPI
@ RTE_CRYPTO_CIPHER_NULL
@ RTE_CRYPTO_CIPHER_SM4_CTR
@ 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[]
static int __rte_crypto_sym_op_attach_sym_session(struct rte_crypto_sym_op *sym_op, void *sess)
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:1511
#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::@76 key
enum rte_crypto_auth_operation op
struct rte_crypto_auth_xform::@77 iv
struct rte_crypto_cipher_xform::@74 key
enum rte_crypto_cipher_algorithm algo
struct rte_crypto_cipher_xform::@75 iv
enum rte_crypto_cipher_operation op
struct rte_crypto_vec * vec
struct rte_mbuf * m_dst
struct rte_crypto_sym_xform * xform
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
uint16_t nb_segs
uint16_t buf_len
struct rte_mbuf * next
uint16_t data_len