DPDK  23.07.0
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
18 extern "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;
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 
181 };
182 
184 __rte_deprecated
185 extern const char *
187 
194 };
195 
197 extern const char *
199 
215  struct {
216  const uint8_t *data;
217  uint16_t length;
218  } key;
250  struct {
251  uint16_t offset;
277  uint16_t length;
292  } iv;
294  uint32_t dataunit_len;
305 };
306 
388  RTE_CRYPTO_AUTH_SM3_HMAC,
390 };
391 
393 __rte_deprecated
394 extern const char *
396 
401 };
402 
404 extern const char *
406 
420  struct {
421  const uint8_t *data;
422  uint16_t length;
423  } key;
431  struct {
432  uint16_t offset;
448  uint16_t length;
466  } iv;
468  uint16_t digest_length;
478 };
479 
480 
495 };
496 
498 __rte_deprecated
499 extern const char *
501 
508 };
509 
511 extern const char *
513 
514 struct rte_crypto_aead_xform {
517  enum rte_crypto_aead_algorithm algo;
520  struct {
521  const uint8_t *data;
522  uint16_t length;
523  } key;
524 
525  struct {
526  uint16_t offset;
546  uint16_t length;
562  } iv;
564  uint16_t digest_length;
565 
566  uint16_t aad_length;
572 };
573 
580 };
581 
591 /* Structure rte_crypto_sym_xform 8< */
596  ;
598  union {
601  struct rte_crypto_cipher_xform cipher;
603  struct rte_crypto_aead_xform aead;
605  };
606 };
607 /* >8 End of structure rte_crypto_sym_xform. */
608 
639 /* Structure rte_crypto_sym_op 8< */
641  struct rte_mbuf *m_src;
642  struct rte_mbuf *m_dst;
645  union {
646  void *session;
650  };
651 
653  union {
654  struct {
655  struct {
656  uint32_t offset;
661  uint32_t length;
666  } data;
667  struct {
668  uint8_t *data;
690  } digest;
691  struct {
692  uint8_t *data;
723  rte_iova_t phys_addr;
724  } aad;
726  } aead;
727 
728  struct {
729  struct {
730  struct {
731  uint32_t offset;
747  uint32_t length;
764  } data;
765  } cipher;
766 
767  struct {
768  struct {
769  uint32_t offset;
795  uint32_t length;
819  } data;
822  struct {
823  uint8_t *data;
894  rte_iova_t phys_addr;
896  } digest;
897  } auth;
898  };
899  };
900 };
901 /* >8 End of structure rte_crypto_sym_op. */
902 
903 
909 static inline void
911 {
912  memset(op, 0, sizeof(*op));
913 }
914 
915 
926 static inline struct rte_crypto_sym_xform *
928  void *priv_data, uint8_t nb_xforms)
929 {
930  struct rte_crypto_sym_xform *xform;
931 
932  sym_op->xform = xform = (struct rte_crypto_sym_xform *)priv_data;
933 
934  do {
936  xform = xform->next = --nb_xforms > 0 ? xform + 1 : NULL;
937  } while (xform);
938 
939  return sym_op->xform;
940 }
941 
942 
949 static inline int
951 {
952  sym_op->session = sess;
953 
954  return 0;
955 }
956 
975 __rte_experimental
976 static inline int
977 rte_crypto_mbuf_to_vec(const struct rte_mbuf *mb, uint32_t ofs, uint32_t len,
978  struct rte_crypto_vec vec[], uint32_t num)
979 {
980  uint32_t i;
981  struct rte_mbuf *nseg;
982  uint32_t left;
983  uint32_t seglen;
984 
985  /* assuming that requested data starts in the first segment */
986  RTE_ASSERT(mb->data_len > ofs);
987 
988  if (mb->nb_segs > num)
989  return -mb->nb_segs;
990 
991  vec[0].base = rte_pktmbuf_mtod_offset(mb, void *, ofs);
992  vec[0].iova = rte_pktmbuf_iova_offset(mb, ofs);
993  vec[0].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
994 
995  /* whole data lies in the first segment */
996  seglen = mb->data_len - ofs;
997  if (len <= seglen) {
998  vec[0].len = len;
999  return 1;
1000  }
1001 
1002  /* data spread across segments */
1003  vec[0].len = seglen;
1004  left = len - seglen;
1005  for (i = 1, nseg = mb->next; nseg != NULL; nseg = nseg->next, i++) {
1006 
1007  vec[i].base = rte_pktmbuf_mtod(nseg, void *);
1008  vec[i].iova = rte_pktmbuf_iova(nseg);
1009  vec[i].tot_len = mb->buf_len - rte_pktmbuf_headroom(mb) - ofs;
1010 
1011  seglen = nseg->data_len;
1012  if (left <= seglen) {
1013  /* whole requested data is completed */
1014  vec[i].len = left;
1015  left = 0;
1016  i++;
1017  break;
1018  }
1019 
1020  /* use whole segment */
1021  vec[i].len = seglen;
1022  left -= seglen;
1023  }
1024 
1025  RTE_ASSERT(left == 0);
1026  return i;
1027 }
1028 
1029 
1030 #ifdef __cplusplus
1031 }
1032 #endif
1033 
1034 #endif /* _RTE_CRYPTO_SYM_H_ */
struct rte_mbuf * next
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)
struct rte_crypto_va_iova_ptr * auth_iv
static int __rte_crypto_sym_op_attach_sym_session(struct rte_crypto_sym_op *sym_op, void *sess)
__rte_deprecated const char * rte_crypto_auth_algorithm_strings[]
uint64_t rte_iova_t
Definition: rte_common.h:458
#define rte_pktmbuf_iova(m)
uint16_t data_len
__rte_deprecated const char * rte_crypto_aead_algorithm_strings[]
static void __rte_crypto_sym_op_reset(struct rte_crypto_sym_op *op)
struct rte_mbuf * m_src
#define rte_pktmbuf_iova_offset(m, o)
static uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
Definition: rte_mbuf.h:1511
rte_crypto_auth_operation
const char * rte_crypto_cipher_operation_strings[]
struct rte_crypto_sgl * dest_sgl
uint32_t tot_len
uint16_t nb_segs
const char * rte_crypto_aead_operation_strings[]
rte_crypto_cipher_operation
#define rte_pktmbuf_mtod_offset(m, t, o)
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)
rte_crypto_aead_operation
#define rte_pktmbuf_mtod(m, t)
struct rte_mbuf * m_dst
struct rte_crypto_va_iova_ptr * aad
uint16_t buf_len
__rte_deprecated const char * rte_crypto_cipher_algorithm_strings[]
#define RTE_STD_C11
Definition: rte_common.h:39
struct rte_crypto_vec * vec
rte_crypto_auth_algorithm
rte_crypto_sym_xform_type
const uint8_t * data
struct rte_crypto_sym_xform * xform
enum rte_crypto_sym_xform_type type
const char * rte_crypto_auth_operation_strings[]
struct rte_crypto_va_iova_ptr * iv
struct rte_crypto_va_iova_ptr * digest
struct rte_crypto_sgl * src_sgl
struct rte_crypto_sym_xform * next
rte_iova_t phys_addr
rte_iova_t iova
rte_crypto_aead_algorithm
rte_crypto_cipher_algorithm