1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015-2020 Intel Corporation
8 #include <rte_common.h>
9 #include <rte_hexdump.h>
11 #include <rte_malloc.h>
12 #include <rte_memcpy.h>
13 #include <rte_pause.h>
14 #include <rte_bus_vdev.h>
15 #include <rte_ether.h>
17 #include <rte_crypto.h>
18 #include <rte_cryptodev.h>
19 #include <rte_cryptodev_pmd.h>
20 #include <rte_string_fns.h>
22 #ifdef RTE_CRYPTO_SCHEDULER
23 #include <rte_cryptodev_scheduler.h>
24 #include <rte_cryptodev_scheduler_operations.h>
27 #include <rte_lcore.h>
30 #include "test_cryptodev.h"
32 #include "test_cryptodev_blockcipher.h"
33 #include "test_cryptodev_aes_test_vectors.h"
34 #include "test_cryptodev_des_test_vectors.h"
35 #include "test_cryptodev_hash_test_vectors.h"
36 #include "test_cryptodev_kasumi_test_vectors.h"
37 #include "test_cryptodev_kasumi_hash_test_vectors.h"
38 #include "test_cryptodev_snow3g_test_vectors.h"
39 #include "test_cryptodev_snow3g_hash_test_vectors.h"
40 #include "test_cryptodev_zuc_test_vectors.h"
41 #include "test_cryptodev_aead_test_vectors.h"
42 #include "test_cryptodev_hmac_test_vectors.h"
43 #include "test_cryptodev_mixed_test_vectors.h"
44 #ifdef RTE_LIB_SECURITY
45 #include "test_cryptodev_security_pdcp_test_vectors.h"
46 #include "test_cryptodev_security_pdcp_sdap_test_vectors.h"
47 #include "test_cryptodev_security_pdcp_test_func.h"
48 #include "test_cryptodev_security_docsis_test_vectors.h"
50 #define SDAP_DISABLED 0
51 #define SDAP_ENABLED 1
54 #define VDEV_ARGS_SIZE 100
55 #define MAX_NB_SESSIONS 4
57 #define MAX_DRV_SERVICE_CTX_SIZE 256
59 #define MAX_RAW_DEQUEUE_COUNT 65535
62 #define OUT_OF_PLACE 1
65 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
68 static int gbl_driver_id;
70 static enum rte_security_session_action_type gbl_action_type =
71 RTE_SECURITY_ACTION_TYPE_NONE;
73 enum cryptodev_api_test_type global_api_test_type = CRYPTODEV_API_TEST;
75 struct crypto_testsuite_params {
76 struct rte_mempool *mbuf_pool;
77 struct rte_mempool *large_mbuf_pool;
78 struct rte_mempool *op_mpool;
79 struct rte_mempool *session_mpool;
80 struct rte_mempool *session_priv_mpool;
81 struct rte_cryptodev_config conf;
82 struct rte_cryptodev_qp_conf qp_conf;
84 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
85 uint8_t valid_dev_count;
88 struct crypto_unittest_params {
89 struct rte_crypto_sym_xform cipher_xform;
90 struct rte_crypto_sym_xform auth_xform;
91 struct rte_crypto_sym_xform aead_xform;
92 #ifdef RTE_LIB_SECURITY
93 struct rte_security_docsis_xform docsis_xform;
97 struct rte_cryptodev_sym_session *sess;
98 #ifdef RTE_LIB_SECURITY
99 struct rte_security_session *sec_session;
102 #ifdef RTE_LIB_SECURITY
103 enum rte_security_session_action_type type;
105 struct rte_crypto_op *op;
107 struct rte_mbuf *obuf, *ibuf;
112 #define ALIGN_POW2_ROUNDUP(num, align) \
113 (((num) + (align) - 1) & ~((align) - 1))
116 * Forward declarations.
119 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
120 struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
124 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
125 struct crypto_unittest_params *ut_params,
126 struct crypto_testsuite_params *ts_param,
127 const uint8_t *cipher,
128 const uint8_t *digest,
131 static struct rte_mbuf *
132 setup_test_string(struct rte_mempool *mpool,
133 const char *string, size_t len, uint8_t blocksize)
135 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
136 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
138 memset(m->buf_addr, 0, m->buf_len);
140 char *dst = rte_pktmbuf_append(m, t_len);
147 rte_memcpy(dst, string, t_len);
149 memset(dst, 0, t_len);
155 /* Get number of bytes in X bits (rounding up) */
157 ceil_byte_length(uint32_t num_bits)
160 return ((num_bits >> 3) + 1);
162 return (num_bits >> 3);
166 get_raw_dp_dequeue_count(void *user_data __rte_unused)
172 post_process_raw_dp_op(void *user_data, uint32_t index __rte_unused,
173 uint8_t is_op_success)
175 struct rte_crypto_op *op = user_data;
176 op->status = is_op_success ? RTE_CRYPTO_OP_STATUS_SUCCESS :
177 RTE_CRYPTO_OP_STATUS_ERROR;
181 process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
182 struct rte_crypto_op *op, uint8_t is_cipher, uint8_t is_auth,
183 uint8_t len_in_bits, uint8_t cipher_iv_len)
185 struct rte_crypto_sym_op *sop = op->sym;
186 struct rte_crypto_op *ret_op = NULL;
187 struct rte_crypto_vec data_vec[UINT8_MAX];
188 struct rte_crypto_va_iova_ptr cipher_iv, digest, aad_auth_iv;
189 union rte_crypto_sym_ofs ofs;
190 struct rte_crypto_sym_vec vec;
191 struct rte_crypto_sgl sgl;
193 union rte_cryptodev_session_ctx sess;
195 struct rte_crypto_raw_dp_ctx *ctx;
196 uint32_t cipher_offset = 0, cipher_len = 0, auth_offset = 0,
200 int ctx_service_size;
202 int enqueue_status, dequeue_status;
204 ctx_service_size = rte_cryptodev_get_raw_dp_ctx_size(dev_id);
205 if (ctx_service_size < 0) {
206 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
210 ctx = malloc(ctx_service_size);
212 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
216 /* Both are enums, setting crypto_sess will suit any session type */
217 sess.crypto_sess = op->sym->session;
219 if (rte_cryptodev_configure_raw_dp_ctx(dev_id, qp_id, ctx,
220 op->sess_type, sess, 0) < 0) {
221 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
227 aad_auth_iv.iova = 0;
228 aad_auth_iv.va = NULL;
235 vec.digest = &digest;
236 vec.aad = &aad_auth_iv;
237 vec.status = &status;
241 if (is_cipher && is_auth) {
242 cipher_offset = sop->cipher.data.offset;
243 cipher_len = sop->cipher.data.length;
244 auth_offset = sop->auth.data.offset;
245 auth_len = sop->auth.data.length;
246 max_len = RTE_MAX(cipher_offset + cipher_len,
247 auth_offset + auth_len);
249 max_len = max_len >> 3;
250 cipher_offset = cipher_offset >> 3;
251 auth_offset = auth_offset >> 3;
252 cipher_len = cipher_len >> 3;
253 auth_len = auth_len >> 3;
255 ofs.ofs.cipher.head = cipher_offset;
256 ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;
257 ofs.ofs.auth.head = auth_offset;
258 ofs.ofs.auth.tail = max_len - auth_offset - auth_len;
259 cipher_iv.va = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);
260 cipher_iv.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);
261 aad_auth_iv.va = rte_crypto_op_ctod_offset(
262 op, void *, IV_OFFSET + cipher_iv_len);
263 aad_auth_iv.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET +
265 digest.va = (void *)sop->auth.digest.data;
266 digest.iova = sop->auth.digest.phys_addr;
268 } else if (is_cipher) {
269 cipher_offset = sop->cipher.data.offset;
270 cipher_len = sop->cipher.data.length;
271 max_len = cipher_len + cipher_offset;
273 max_len = max_len >> 3;
274 cipher_offset = cipher_offset >> 3;
275 cipher_len = cipher_len >> 3;
277 ofs.ofs.cipher.head = cipher_offset;
278 ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;
279 cipher_iv.va = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);
280 cipher_iv.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);
282 } else if (is_auth) {
283 auth_offset = sop->auth.data.offset;
284 auth_len = sop->auth.data.length;
285 max_len = auth_len + auth_offset;
287 max_len = max_len >> 3;
288 auth_offset = auth_offset >> 3;
289 auth_len = auth_len >> 3;
291 ofs.ofs.auth.head = auth_offset;
292 ofs.ofs.auth.tail = max_len - auth_offset - auth_len;
293 aad_auth_iv.va = rte_crypto_op_ctod_offset(
294 op, void *, IV_OFFSET + cipher_iv_len);
295 aad_auth_iv.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET +
297 digest.va = (void *)sop->auth.digest.data;
298 digest.iova = sop->auth.digest.phys_addr;
301 cipher_offset = sop->aead.data.offset;
302 cipher_len = sop->aead.data.length;
303 max_len = cipher_len + cipher_offset;
305 max_len = max_len >> 3;
306 cipher_offset = cipher_offset >> 3;
307 cipher_len = cipher_len >> 3;
309 ofs.ofs.cipher.head = cipher_offset;
310 ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;
311 cipher_iv.va = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);
312 cipher_iv.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);
313 aad_auth_iv.va = (void *)sop->aead.aad.data;
314 aad_auth_iv.iova = sop->aead.aad.phys_addr;
315 digest.va = (void *)sop->aead.digest.data;
316 digest.iova = sop->aead.digest.phys_addr;
319 n = rte_crypto_mbuf_to_vec(sop->m_src, 0, max_len,
320 data_vec, RTE_DIM(data_vec));
321 if (n < 0 || n > sop->m_src->nb_segs) {
322 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
328 if (rte_cryptodev_raw_enqueue_burst(ctx, &vec, ofs, (void **)&op,
329 &enqueue_status) < 1) {
330 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
334 if (enqueue_status == 0) {
335 status = rte_cryptodev_raw_enqueue_done(ctx, 1);
337 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
340 } else if (enqueue_status < 0) {
341 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
346 while (count++ < MAX_RAW_DEQUEUE_COUNT && n == 0) {
347 n = rte_cryptodev_raw_dequeue_burst(ctx,
348 get_raw_dp_dequeue_count, post_process_raw_dp_op,
349 (void **)&ret_op, 0, &n_success,
351 if (dequeue_status < 0) {
352 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
359 if (n == 1 && dequeue_status == 0) {
360 if (rte_cryptodev_raw_dequeue_done(ctx, 1) < 0) {
361 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
366 op->status = (count == MAX_RAW_DEQUEUE_COUNT + 1 || ret_op != op ||
367 n_success < 1) ? RTE_CRYPTO_OP_STATUS_ERROR :
368 RTE_CRYPTO_OP_STATUS_SUCCESS;
375 process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
378 struct rte_crypto_sym_op *sop;
379 union rte_crypto_sym_ofs ofs;
380 struct rte_crypto_sgl sgl;
381 struct rte_crypto_sym_vec symvec;
382 struct rte_crypto_va_iova_ptr iv_ptr, aad_ptr, digest_ptr;
383 struct rte_crypto_vec vec[UINT8_MAX];
387 n = rte_crypto_mbuf_to_vec(sop->m_src, sop->aead.data.offset,
388 sop->aead.data.length, vec, RTE_DIM(vec));
390 if (n < 0 || n != sop->m_src->nb_segs) {
391 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
399 symvec.digest = &digest_ptr;
400 symvec.aad = &aad_ptr;
404 /* for CPU crypto the IOVA address is not required */
405 iv_ptr.va = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);
406 digest_ptr.va = (void *)sop->aead.digest.data;
407 aad_ptr.va = (void *)sop->aead.aad.data;
411 n = rte_cryptodev_sym_cpu_crypto_process(dev_id, sop->session, ofs,
415 op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
417 op->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
421 process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
424 struct rte_crypto_sym_op *sop;
425 union rte_crypto_sym_ofs ofs;
426 struct rte_crypto_sgl sgl;
427 struct rte_crypto_sym_vec symvec;
428 struct rte_crypto_va_iova_ptr iv_ptr, digest_ptr;
429 struct rte_crypto_vec vec[UINT8_MAX];
433 n = rte_crypto_mbuf_to_vec(sop->m_src, sop->auth.data.offset,
434 sop->auth.data.length, vec, RTE_DIM(vec));
436 if (n < 0 || n != sop->m_src->nb_segs) {
437 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
445 symvec.digest = &digest_ptr;
449 iv_ptr.va = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);
450 digest_ptr.va = (void *)sop->auth.digest.data;
453 ofs.ofs.cipher.head = sop->cipher.data.offset - sop->auth.data.offset;
454 ofs.ofs.cipher.tail = (sop->auth.data.offset + sop->auth.data.length) -
455 (sop->cipher.data.offset + sop->cipher.data.length);
457 n = rte_cryptodev_sym_cpu_crypto_process(dev_id, sop->session, ofs,
461 op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
463 op->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
466 static struct rte_crypto_op *
467 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
470 RTE_VERIFY(gbl_action_type != RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO);
472 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
473 RTE_LOG(ERR, USER1, "Error sending packet for encryption\n");
479 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
482 if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
483 RTE_LOG(DEBUG, USER1, "Operation status %d\n", op->status);
490 static struct crypto_testsuite_params testsuite_params = { NULL };
491 static struct crypto_unittest_params unittest_params;
494 testsuite_setup(void)
496 struct crypto_testsuite_params *ts_params = &testsuite_params;
497 struct rte_cryptodev_info info;
498 uint32_t i = 0, nb_devs, dev_id;
502 memset(ts_params, 0, sizeof(*ts_params));
504 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
505 if (ts_params->mbuf_pool == NULL) {
506 /* Not already created so create */
507 ts_params->mbuf_pool = rte_pktmbuf_pool_create(
509 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
511 if (ts_params->mbuf_pool == NULL) {
512 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
517 ts_params->large_mbuf_pool = rte_mempool_lookup(
518 "CRYPTO_LARGE_MBUFPOOL");
519 if (ts_params->large_mbuf_pool == NULL) {
520 /* Not already created so create */
521 ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
522 "CRYPTO_LARGE_MBUFPOOL",
525 if (ts_params->large_mbuf_pool == NULL) {
527 "Can't create CRYPTO_LARGE_MBUFPOOL\n");
532 ts_params->op_mpool = rte_crypto_op_pool_create(
533 "MBUF_CRYPTO_SYM_OP_POOL",
534 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
535 NUM_MBUFS, MBUF_CACHE_SIZE,
537 sizeof(struct rte_crypto_sym_xform) +
540 if (ts_params->op_mpool == NULL) {
541 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
545 /* Create an AESNI MB device if required */
546 if (gbl_driver_id == rte_cryptodev_driver_id_get(
547 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) {
548 nb_devs = rte_cryptodev_device_count_by_driver(
549 rte_cryptodev_driver_id_get(
550 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
553 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
555 TEST_ASSERT(ret == 0,
556 "Failed to create instance of"
558 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
562 /* Create an AESNI GCM device if required */
563 if (gbl_driver_id == rte_cryptodev_driver_id_get(
564 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))) {
565 nb_devs = rte_cryptodev_device_count_by_driver(
566 rte_cryptodev_driver_id_get(
567 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)));
569 TEST_ASSERT_SUCCESS(rte_vdev_init(
570 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
571 "Failed to create instance of"
573 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
577 /* Create a SNOW 3G device if required */
578 if (gbl_driver_id == rte_cryptodev_driver_id_get(
579 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))) {
580 nb_devs = rte_cryptodev_device_count_by_driver(
581 rte_cryptodev_driver_id_get(
582 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)));
584 TEST_ASSERT_SUCCESS(rte_vdev_init(
585 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
586 "Failed to create instance of"
588 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
592 /* Create a KASUMI device if required */
593 if (gbl_driver_id == rte_cryptodev_driver_id_get(
594 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))) {
595 nb_devs = rte_cryptodev_device_count_by_driver(
596 rte_cryptodev_driver_id_get(
597 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)));
599 TEST_ASSERT_SUCCESS(rte_vdev_init(
600 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
601 "Failed to create instance of"
603 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
607 /* Create a ZUC device if required */
608 if (gbl_driver_id == rte_cryptodev_driver_id_get(
609 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) {
610 nb_devs = rte_cryptodev_device_count_by_driver(
611 rte_cryptodev_driver_id_get(
612 RTE_STR(CRYPTODEV_NAME_ZUC_PMD)));
614 TEST_ASSERT_SUCCESS(rte_vdev_init(
615 RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
616 "Failed to create instance of"
618 RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
622 /* Create a NULL device if required */
623 if (gbl_driver_id == rte_cryptodev_driver_id_get(
624 RTE_STR(CRYPTODEV_NAME_NULL_PMD))) {
625 nb_devs = rte_cryptodev_device_count_by_driver(
626 rte_cryptodev_driver_id_get(
627 RTE_STR(CRYPTODEV_NAME_NULL_PMD)));
630 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
632 TEST_ASSERT(ret == 0,
633 "Failed to create instance of"
635 RTE_STR(CRYPTODEV_NAME_NULL_PMD));
639 /* Create an OPENSSL device if required */
640 if (gbl_driver_id == rte_cryptodev_driver_id_get(
641 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) {
642 nb_devs = rte_cryptodev_device_count_by_driver(
643 rte_cryptodev_driver_id_get(
644 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)));
647 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
650 TEST_ASSERT(ret == 0, "Failed to create "
651 "instance of pmd : %s",
652 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
656 /* Create a ARMv8 device if required */
657 if (gbl_driver_id == rte_cryptodev_driver_id_get(
658 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))) {
659 nb_devs = rte_cryptodev_device_count_by_driver(
660 rte_cryptodev_driver_id_get(
661 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)));
664 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
667 TEST_ASSERT(ret == 0, "Failed to create "
668 "instance of pmd : %s",
669 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
673 /* Create a MVSAM device if required */
674 if (gbl_driver_id == rte_cryptodev_driver_id_get(
675 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD))) {
676 nb_devs = rte_cryptodev_device_count_by_driver(
677 rte_cryptodev_driver_id_get(
678 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)));
681 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD),
684 TEST_ASSERT(ret == 0, "Failed to create "
685 "instance of pmd : %s",
686 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
690 /* Create an CCP device if required */
691 if (gbl_driver_id == rte_cryptodev_driver_id_get(
692 RTE_STR(CRYPTODEV_NAME_CCP_PMD))) {
693 nb_devs = rte_cryptodev_device_count_by_driver(
694 rte_cryptodev_driver_id_get(
695 RTE_STR(CRYPTODEV_NAME_CCP_PMD)));
698 RTE_STR(CRYPTODEV_NAME_CCP_PMD),
701 TEST_ASSERT(ret == 0, "Failed to create "
702 "instance of pmd : %s",
703 RTE_STR(CRYPTODEV_NAME_CCP_PMD));
707 #ifdef RTE_CRYPTO_SCHEDULER
708 char vdev_args[VDEV_ARGS_SIZE] = {""};
709 char temp_str[VDEV_ARGS_SIZE] = {"mode=multi-core,"
710 "ordering=enable,name=cryptodev_test_scheduler,corelist="};
711 uint16_t worker_core_count = 0;
712 uint16_t socket_id = 0;
714 if (gbl_driver_id == rte_cryptodev_driver_id_get(
715 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) {
717 /* Identify the Worker Cores
718 * Use 2 worker cores for the device args
720 RTE_LCORE_FOREACH_WORKER(i) {
721 if (worker_core_count > 1)
723 snprintf(vdev_args, sizeof(vdev_args),
724 "%s%d", temp_str, i);
725 strcpy(temp_str, vdev_args);
726 strlcat(temp_str, ";", sizeof(temp_str));
728 socket_id = rte_lcore_to_socket_id(i);
730 if (worker_core_count != 2) {
732 "Cryptodev scheduler test require at least "
733 "two worker cores to run. "
734 "Please use the correct coremask.\n");
737 strcpy(temp_str, vdev_args);
738 snprintf(vdev_args, sizeof(vdev_args), "%s,socket_id=%d",
739 temp_str, socket_id);
740 RTE_LOG(DEBUG, USER1, "vdev_args: %s\n", vdev_args);
741 nb_devs = rte_cryptodev_device_count_by_driver(
742 rte_cryptodev_driver_id_get(
743 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)));
746 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD),
748 TEST_ASSERT(ret == 0,
749 "Failed to create instance %u of"
751 i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
754 #endif /* RTE_CRYPTO_SCHEDULER */
756 nb_devs = rte_cryptodev_count();
758 RTE_LOG(WARNING, USER1, "No crypto devices found?\n");
762 /* Create list of valid crypto devs */
763 for (i = 0; i < nb_devs; i++) {
764 rte_cryptodev_info_get(i, &info);
765 if (info.driver_id == gbl_driver_id)
766 ts_params->valid_devs[ts_params->valid_dev_count++] = i;
769 if (ts_params->valid_dev_count < 1)
772 /* Set up all the qps on the first of the valid devices found */
774 dev_id = ts_params->valid_devs[0];
776 rte_cryptodev_info_get(dev_id, &info);
778 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
779 ts_params->conf.socket_id = SOCKET_ID_ANY;
780 ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY;
782 unsigned int session_size =
783 rte_cryptodev_sym_get_private_session_size(dev_id);
785 #ifdef RTE_LIB_SECURITY
786 unsigned int security_session_size = rte_security_session_get_size(
787 rte_cryptodev_get_sec_ctx(dev_id));
789 if (session_size < security_session_size)
790 session_size = security_session_size;
793 * Create mempool with maximum number of sessions.
795 if (info.sym.max_nb_sessions != 0 &&
796 info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
797 RTE_LOG(ERR, USER1, "Device does not support "
798 "at least %u sessions\n",
803 ts_params->session_mpool = rte_cryptodev_sym_session_pool_create(
804 "test_sess_mp", MAX_NB_SESSIONS, 0, 0, 0,
806 TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
807 "session mempool allocation failed");
809 ts_params->session_priv_mpool = rte_mempool_create(
813 0, 0, NULL, NULL, NULL,
816 TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
817 "session mempool allocation failed");
821 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
823 "Failed to configure cryptodev %u with %u qps",
824 dev_id, ts_params->conf.nb_queue_pairs);
826 ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
827 ts_params->qp_conf.mp_session = ts_params->session_mpool;
828 ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
830 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
831 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
832 dev_id, qp_id, &ts_params->qp_conf,
833 rte_cryptodev_socket_id(dev_id)),
834 "Failed to setup queue pair %u on cryptodev %u",
842 testsuite_teardown(void)
844 struct crypto_testsuite_params *ts_params = &testsuite_params;
846 if (ts_params->mbuf_pool != NULL) {
847 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
848 rte_mempool_avail_count(ts_params->mbuf_pool));
851 if (ts_params->op_mpool != NULL) {
852 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
853 rte_mempool_avail_count(ts_params->op_mpool));
856 /* Free session mempools */
857 if (ts_params->session_priv_mpool != NULL) {
858 rte_mempool_free(ts_params->session_priv_mpool);
859 ts_params->session_priv_mpool = NULL;
862 if (ts_params->session_mpool != NULL) {
863 rte_mempool_free(ts_params->session_mpool);
864 ts_params->session_mpool = NULL;
869 dev_configure_and_start(uint64_t ff_disable)
871 struct crypto_testsuite_params *ts_params = &testsuite_params;
872 struct crypto_unittest_params *ut_params = &unittest_params;
876 /* Clear unit test parameters before running test */
877 memset(ut_params, 0, sizeof(*ut_params));
879 /* Reconfigure device to default parameters */
880 ts_params->conf.socket_id = SOCKET_ID_ANY;
881 ts_params->conf.ff_disable = ff_disable;
882 ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
883 ts_params->qp_conf.mp_session = ts_params->session_mpool;
884 ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
886 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
888 "Failed to configure cryptodev %u",
889 ts_params->valid_devs[0]);
891 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
892 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
893 ts_params->valid_devs[0], qp_id,
895 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
896 "Failed to setup queue pair %u on cryptodev %u",
897 qp_id, ts_params->valid_devs[0]);
901 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
903 /* Start the device */
904 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
905 "Failed to start cryptodev %u",
906 ts_params->valid_devs[0]);
914 /* Configure and start the device with security feature disabled */
915 return dev_configure_and_start(RTE_CRYPTODEV_FF_SECURITY);
919 ut_setup_security(void)
921 /* Configure and start the device with no features disabled */
922 return dev_configure_and_start(0);
928 struct crypto_testsuite_params *ts_params = &testsuite_params;
929 struct crypto_unittest_params *ut_params = &unittest_params;
930 struct rte_cryptodev_stats stats;
932 /* free crypto session structure */
933 #ifdef RTE_LIB_SECURITY
934 if (ut_params->type == RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL) {
935 if (ut_params->sec_session) {
936 rte_security_session_destroy(rte_cryptodev_get_sec_ctx
937 (ts_params->valid_devs[0]),
938 ut_params->sec_session);
939 ut_params->sec_session = NULL;
944 if (ut_params->sess) {
945 rte_cryptodev_sym_session_clear(
946 ts_params->valid_devs[0],
948 rte_cryptodev_sym_session_free(ut_params->sess);
949 ut_params->sess = NULL;
953 /* free crypto operation structure */
955 rte_crypto_op_free(ut_params->op);
958 * free mbuf - both obuf and ibuf are usually the same,
959 * so check if they point at the same address is necessary,
960 * to avoid freeing the mbuf twice.
962 if (ut_params->obuf) {
963 rte_pktmbuf_free(ut_params->obuf);
964 if (ut_params->ibuf == ut_params->obuf)
968 if (ut_params->ibuf) {
969 rte_pktmbuf_free(ut_params->ibuf);
973 if (ts_params->mbuf_pool != NULL)
974 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
975 rte_mempool_avail_count(ts_params->mbuf_pool));
977 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
979 /* Stop the device */
980 rte_cryptodev_stop(ts_params->valid_devs[0]);
984 test_device_configure_invalid_dev_id(void)
986 struct crypto_testsuite_params *ts_params = &testsuite_params;
987 uint16_t dev_id, num_devs = 0;
989 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
990 "Need at least %d devices for test", 1);
992 /* valid dev_id values */
993 dev_id = ts_params->valid_devs[0];
995 /* Stop the device in case it's started so it can be configured */
996 rte_cryptodev_stop(dev_id);
998 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
999 "Failed test for rte_cryptodev_configure: "
1000 "invalid dev_num %u", dev_id);
1002 /* invalid dev_id values */
1005 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
1006 "Failed test for rte_cryptodev_configure: "
1007 "invalid dev_num %u", dev_id);
1011 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
1012 "Failed test for rte_cryptodev_configure:"
1013 "invalid dev_num %u", dev_id);
1015 return TEST_SUCCESS;
1019 test_device_configure_invalid_queue_pair_ids(void)
1021 struct crypto_testsuite_params *ts_params = &testsuite_params;
1022 uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
1024 /* Stop the device in case it's started so it can be configured */
1025 rte_cryptodev_stop(ts_params->valid_devs[0]);
1027 /* valid - max value queue pairs */
1028 ts_params->conf.nb_queue_pairs = orig_nb_qps;
1030 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
1032 "Failed to configure cryptodev: dev_id %u, qp_id %u",
1033 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
1035 /* valid - one queue pairs */
1036 ts_params->conf.nb_queue_pairs = 1;
1038 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
1040 "Failed to configure cryptodev: dev_id %u, qp_id %u",
1041 ts_params->valid_devs[0],
1042 ts_params->conf.nb_queue_pairs);
1045 /* invalid - zero queue pairs */
1046 ts_params->conf.nb_queue_pairs = 0;
1048 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
1050 "Failed test for rte_cryptodev_configure, dev_id %u,"
1052 ts_params->valid_devs[0],
1053 ts_params->conf.nb_queue_pairs);
1056 /* invalid - max value supported by field queue pairs */
1057 ts_params->conf.nb_queue_pairs = UINT16_MAX;
1059 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
1061 "Failed test for rte_cryptodev_configure, dev_id %u,"
1063 ts_params->valid_devs[0],
1064 ts_params->conf.nb_queue_pairs);
1067 /* invalid - max value + 1 queue pairs */
1068 ts_params->conf.nb_queue_pairs = orig_nb_qps + 1;
1070 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
1072 "Failed test for rte_cryptodev_configure, dev_id %u,"
1074 ts_params->valid_devs[0],
1075 ts_params->conf.nb_queue_pairs);
1077 /* revert to original testsuite value */
1078 ts_params->conf.nb_queue_pairs = orig_nb_qps;
1080 return TEST_SUCCESS;
1084 test_queue_pair_descriptor_setup(void)
1086 struct crypto_testsuite_params *ts_params = &testsuite_params;
1087 struct rte_cryptodev_qp_conf qp_conf = {
1088 .nb_descriptors = MAX_NUM_OPS_INFLIGHT
1092 /* Stop the device in case it's started so it can be configured */
1093 rte_cryptodev_stop(ts_params->valid_devs[0]);
1095 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
1097 "Failed to configure cryptodev %u",
1098 ts_params->valid_devs[0]);
1101 * Test various ring sizes on this device. memzones can't be
1102 * freed so are re-used if ring is released and re-created.
1104 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
1105 qp_conf.mp_session = ts_params->session_mpool;
1106 qp_conf.mp_session_private = ts_params->session_priv_mpool;
1108 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
1109 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
1110 ts_params->valid_devs[0], qp_id, &qp_conf,
1111 rte_cryptodev_socket_id(
1112 ts_params->valid_devs[0])),
1114 "rte_cryptodev_queue_pair_setup: num_inflights "
1115 "%u on qp %u on cryptodev %u",
1116 qp_conf.nb_descriptors, qp_id,
1117 ts_params->valid_devs[0]);
1120 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
1122 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
1123 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
1124 ts_params->valid_devs[0], qp_id, &qp_conf,
1125 rte_cryptodev_socket_id(
1126 ts_params->valid_devs[0])),
1128 " rte_cryptodev_queue_pair_setup: num_inflights"
1129 " %u on qp %u on cryptodev %u",
1130 qp_conf.nb_descriptors, qp_id,
1131 ts_params->valid_devs[0]);
1134 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
1136 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
1137 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
1138 ts_params->valid_devs[0], qp_id, &qp_conf,
1139 rte_cryptodev_socket_id(
1140 ts_params->valid_devs[0])),
1142 "rte_cryptodev_queue_pair_setup: num_inflights"
1143 " %u on qp %u on cryptodev %u",
1144 qp_conf.nb_descriptors, qp_id,
1145 ts_params->valid_devs[0]);
1148 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
1150 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
1151 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
1152 ts_params->valid_devs[0], qp_id, &qp_conf,
1153 rte_cryptodev_socket_id(
1154 ts_params->valid_devs[0])),
1156 " rte_cryptodev_queue_pair_setup:"
1157 "num_inflights %u on qp %u on cryptodev %u",
1158 qp_conf.nb_descriptors, qp_id,
1159 ts_params->valid_devs[0]);
1162 /* test invalid queue pair id */
1163 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
1165 qp_id = ts_params->conf.nb_queue_pairs; /*invalid */
1167 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
1168 ts_params->valid_devs[0],
1170 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
1171 "Failed test for rte_cryptodev_queue_pair_setup:"
1172 "invalid qp %u on cryptodev %u",
1173 qp_id, ts_params->valid_devs[0]);
1175 qp_id = 0xffff; /*invalid*/
1177 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
1178 ts_params->valid_devs[0],
1180 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
1181 "Failed test for rte_cryptodev_queue_pair_setup:"
1182 "invalid qp %u on cryptodev %u",
1183 qp_id, ts_params->valid_devs[0]);
1185 return TEST_SUCCESS;
1188 /* ***** Plaintext data for tests ***** */
1190 const char catch_22_quote_1[] =
1191 "There was only one catch and that was Catch-22, which "
1192 "specified that a concern for one's safety in the face of "
1193 "dangers that were real and immediate was the process of a "
1194 "rational mind. Orr was crazy and could be grounded. All he "
1195 "had to do was ask; and as soon as he did, he would no longer "
1196 "be crazy and would have to fly more missions. Orr would be "
1197 "crazy to fly more missions and sane if he didn't, but if he "
1198 "was sane he had to fly them. If he flew them he was crazy "
1199 "and didn't have to; but if he didn't want to he was sane and "
1200 "had to. Yossarian was moved very deeply by the absolute "
1201 "simplicity of this clause of Catch-22 and let out a "
1202 "respectful whistle. \"That's some catch, that Catch-22\", he "
1203 "observed. \"It's the best there is,\" Doc Daneeka agreed.";
1205 const char catch_22_quote[] =
1206 "What a lousy earth! He wondered how many people were "
1207 "destitute that same night even in his own prosperous country, "
1208 "how many homes were shanties, how many husbands were drunk "
1209 "and wives socked, and how many children were bullied, abused, "
1210 "or abandoned. How many families hungered for food they could "
1211 "not afford to buy? How many hearts were broken? How many "
1212 "suicides would take place that same night, how many people "
1213 "would go insane? How many cockroaches and landlords would "
1214 "triumph? How many winners were losers, successes failures, "
1215 "and rich men poor men? How many wise guys were stupid? How "
1216 "many happy endings were unhappy endings? How many honest men "
1217 "were liars, brave men cowards, loyal men traitors, how many "
1218 "sainted men were corrupt, how many people in positions of "
1219 "trust had sold their souls to bodyguards, how many had never "
1220 "had souls? How many straight-and-narrow paths were crooked "
1221 "paths? How many best families were worst families and how "
1222 "many good people were bad people? When you added them all up "
1223 "and then subtracted, you might be left with only the children, "
1224 "and perhaps with Albert Einstein and an old violinist or "
1225 "sculptor somewhere.";
1227 #define QUOTE_480_BYTES (480)
1228 #define QUOTE_512_BYTES (512)
1229 #define QUOTE_768_BYTES (768)
1230 #define QUOTE_1024_BYTES (1024)
1234 /* ***** SHA1 Hash Tests ***** */
1236 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
1238 static uint8_t hmac_sha1_key[] = {
1239 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
1240 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
1241 0xDE, 0xF4, 0xDE, 0xAD };
1243 /* ***** SHA224 Hash Tests ***** */
1245 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
1248 /* ***** AES-CBC Cipher Tests ***** */
1250 #define CIPHER_KEY_LENGTH_AES_CBC (16)
1251 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
1253 static uint8_t aes_cbc_key[] = {
1254 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
1255 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
1257 static uint8_t aes_cbc_iv[] = {
1258 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1259 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
1262 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
1264 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
1265 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
1266 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
1267 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
1268 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
1269 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
1270 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
1271 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
1272 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
1273 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
1274 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
1275 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
1276 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
1277 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
1278 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
1279 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
1280 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
1281 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
1282 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
1283 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
1284 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
1285 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
1286 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
1287 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1288 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
1289 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
1290 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
1291 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
1292 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
1293 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
1294 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
1295 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
1296 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
1297 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
1298 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
1299 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
1300 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
1301 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
1302 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
1303 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
1304 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
1305 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
1306 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
1307 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
1308 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
1309 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
1310 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
1311 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
1312 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
1313 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
1314 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
1315 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
1316 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
1317 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
1318 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
1319 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
1320 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
1321 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
1322 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
1323 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
1324 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
1325 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
1326 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
1327 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
1328 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
1331 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
1332 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
1333 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1334 0x18, 0x8c, 0x1d, 0x32
1338 /* Multisession Vector context Test */
1339 /*Begin Session 0 */
1340 static uint8_t ms_aes_cbc_key0[] = {
1341 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1342 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1345 static uint8_t ms_aes_cbc_iv0[] = {
1346 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1347 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1350 static const uint8_t ms_aes_cbc_cipher0[] = {
1351 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
1352 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
1353 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
1354 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
1355 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
1356 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
1357 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
1358 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
1359 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
1360 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
1361 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
1362 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
1363 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
1364 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
1365 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
1366 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
1367 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
1368 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
1369 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
1370 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
1371 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
1372 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
1373 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
1374 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
1375 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
1376 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
1377 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
1378 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
1379 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
1380 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
1381 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
1382 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
1383 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
1384 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
1385 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
1386 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
1387 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
1388 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
1389 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
1390 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
1391 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
1392 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
1393 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
1394 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
1395 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
1396 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
1397 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
1398 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
1399 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
1400 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
1401 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
1402 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
1403 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
1404 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
1405 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
1406 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
1407 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
1408 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
1409 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
1410 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
1411 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
1412 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
1413 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
1414 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
1418 static uint8_t ms_hmac_key0[] = {
1419 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1420 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1421 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1422 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1423 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1424 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1425 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1426 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1429 static const uint8_t ms_hmac_digest0[] = {
1430 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1431 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1432 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1433 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1434 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1435 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1436 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1437 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1441 /* Begin session 1 */
1443 static uint8_t ms_aes_cbc_key1[] = {
1444 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1445 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1448 static uint8_t ms_aes_cbc_iv1[] = {
1449 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1450 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1453 static const uint8_t ms_aes_cbc_cipher1[] = {
1454 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1455 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1456 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1457 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1458 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1459 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1460 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1461 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1462 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1463 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1464 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1465 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1466 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1467 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1468 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1469 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1470 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1471 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1472 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1473 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1474 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1475 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1476 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1477 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1478 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1479 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1480 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1481 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1482 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1483 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1484 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1485 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1486 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1487 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1488 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1489 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1490 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1491 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1492 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1493 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1494 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1495 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1496 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1497 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1498 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1499 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1500 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1501 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1502 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1503 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1504 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1505 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1506 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1507 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1508 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1509 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1510 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1511 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1512 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1513 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1514 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1515 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1516 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1517 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1521 static uint8_t ms_hmac_key1[] = {
1522 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1523 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1524 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1525 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1526 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1527 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1528 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1529 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1532 static const uint8_t ms_hmac_digest1[] = {
1533 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1534 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1535 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1536 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1537 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1538 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1539 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1540 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1543 /* Begin Session 2 */
1544 static uint8_t ms_aes_cbc_key2[] = {
1545 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1546 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1549 static uint8_t ms_aes_cbc_iv2[] = {
1550 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1551 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1554 static const uint8_t ms_aes_cbc_cipher2[] = {
1555 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1556 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1557 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1558 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1559 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1560 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1561 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1562 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1563 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1564 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1565 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1566 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1567 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1568 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1569 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1570 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1571 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1572 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1573 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1574 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1575 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1576 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1577 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1578 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1579 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1580 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1581 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1582 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1583 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1584 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1585 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1586 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1587 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1588 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1589 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1590 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1591 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1592 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1593 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1594 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1595 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1596 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1597 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1598 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1599 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1600 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1601 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1602 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1603 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1604 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1605 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1606 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1607 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1608 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1609 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1610 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1611 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1612 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1613 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1614 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1615 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1616 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1617 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1618 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1621 static uint8_t ms_hmac_key2[] = {
1622 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1623 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1624 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1625 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1626 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1627 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1628 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1629 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1632 static const uint8_t ms_hmac_digest2[] = {
1633 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1634 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1635 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1636 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1637 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1638 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1639 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1640 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1647 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1649 struct crypto_testsuite_params *ts_params = &testsuite_params;
1650 struct crypto_unittest_params *ut_params = &unittest_params;
1652 /* Verify the capabilities */
1653 struct rte_cryptodev_sym_capability_idx cap_idx;
1654 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1655 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
1656 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
1659 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1660 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
1661 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
1665 /* Generate test mbuf data and space for digest */
1666 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1667 catch_22_quote, QUOTE_512_BYTES, 0);
1669 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1670 DIGEST_BYTE_LENGTH_SHA1);
1671 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1673 /* Setup Cipher Parameters */
1674 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1675 ut_params->cipher_xform.next = &ut_params->auth_xform;
1677 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1678 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1679 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1680 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1681 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1682 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1684 /* Setup HMAC Parameters */
1685 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1687 ut_params->auth_xform.next = NULL;
1689 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1690 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1691 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1692 ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1693 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1695 ut_params->sess = rte_cryptodev_sym_session_create(
1696 ts_params->session_mpool);
1698 /* Create crypto session*/
1699 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
1700 ut_params->sess, &ut_params->cipher_xform,
1701 ts_params->session_priv_mpool);
1702 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1704 /* Generate crypto op data structure */
1705 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1706 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1707 TEST_ASSERT_NOT_NULL(ut_params->op,
1708 "Failed to allocate symmetric crypto operation struct");
1710 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1712 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1714 /* set crypto operation source mbuf */
1715 sym_op->m_src = ut_params->ibuf;
1717 /* Set crypto operation authentication parameters */
1718 sym_op->auth.digest.data = ut_params->digest;
1719 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1720 ut_params->ibuf, QUOTE_512_BYTES);
1722 sym_op->auth.data.offset = 0;
1723 sym_op->auth.data.length = QUOTE_512_BYTES;
1725 /* Copy IV at the end of the crypto operation */
1726 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1727 aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
1729 /* Set crypto operation cipher parameters */
1730 sym_op->cipher.data.offset = 0;
1731 sym_op->cipher.data.length = QUOTE_512_BYTES;
1733 /* Process crypto operation */
1734 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
1735 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
1738 TEST_ASSERT_NOT_NULL(
1739 process_crypto_request(ts_params->valid_devs[0],
1741 "failed to process sym crypto op");
1743 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1744 "crypto op processing failed");
1747 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
1750 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1751 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1753 "ciphertext data not as expected");
1755 uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1757 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1758 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1759 gbl_driver_id == rte_cryptodev_driver_id_get(
1760 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) ?
1761 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1762 DIGEST_BYTE_LENGTH_SHA1,
1763 "Generated digest data not as expected");
1765 return TEST_SUCCESS;
1768 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1770 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
1772 static uint8_t hmac_sha512_key[] = {
1773 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1774 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1775 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1776 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1777 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1778 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1779 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1780 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1782 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1783 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1784 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1785 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1786 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1787 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1788 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1789 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1790 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1795 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1796 struct crypto_unittest_params *ut_params,
1797 uint8_t *cipher_key,
1801 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1802 struct crypto_unittest_params *ut_params,
1803 struct crypto_testsuite_params *ts_params,
1804 const uint8_t *cipher,
1805 const uint8_t *digest,
1810 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1811 struct crypto_unittest_params *ut_params,
1812 uint8_t *cipher_key,
1816 /* Setup Cipher Parameters */
1817 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1818 ut_params->cipher_xform.next = NULL;
1820 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1821 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1822 ut_params->cipher_xform.cipher.key.data = cipher_key;
1823 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1824 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1825 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1827 /* Setup HMAC Parameters */
1828 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1829 ut_params->auth_xform.next = &ut_params->cipher_xform;
1831 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1832 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1833 ut_params->auth_xform.auth.key.data = hmac_key;
1834 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1835 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1837 return TEST_SUCCESS;
1842 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1843 struct crypto_unittest_params *ut_params,
1844 struct crypto_testsuite_params *ts_params,
1845 const uint8_t *cipher,
1846 const uint8_t *digest,
1849 /* Generate test mbuf data and digest */
1850 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1853 QUOTE_512_BYTES, 0);
1855 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1856 DIGEST_BYTE_LENGTH_SHA512);
1857 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1859 rte_memcpy(ut_params->digest,
1861 DIGEST_BYTE_LENGTH_SHA512);
1863 /* Generate Crypto op data structure */
1864 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1865 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1866 TEST_ASSERT_NOT_NULL(ut_params->op,
1867 "Failed to allocate symmetric crypto operation struct");
1869 rte_crypto_op_attach_sym_session(ut_params->op, sess);
1871 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1873 /* set crypto operation source mbuf */
1874 sym_op->m_src = ut_params->ibuf;
1876 sym_op->auth.digest.data = ut_params->digest;
1877 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1878 ut_params->ibuf, QUOTE_512_BYTES);
1880 sym_op->auth.data.offset = 0;
1881 sym_op->auth.data.length = QUOTE_512_BYTES;
1883 /* Copy IV at the end of the crypto operation */
1884 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1885 iv, CIPHER_IV_LENGTH_AES_CBC);
1887 sym_op->cipher.data.offset = 0;
1888 sym_op->cipher.data.length = QUOTE_512_BYTES;
1890 /* Process crypto operation */
1891 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
1892 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
1894 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
1895 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
1896 ut_params->op, 1, 1, 0, 0);
1898 TEST_ASSERT_NOT_NULL(
1899 process_crypto_request(ts_params->valid_devs[0],
1901 "failed to process sym crypto op");
1903 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1904 "crypto op processing failed");
1906 ut_params->obuf = ut_params->op->sym->m_src;
1909 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1910 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *),
1913 "Plaintext data not as expected");
1916 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1917 "Digest verification failed");
1919 return TEST_SUCCESS;
1923 test_blockcipher(enum blockcipher_test_type test_type)
1925 struct crypto_testsuite_params *ts_params = &testsuite_params;
1928 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1929 ts_params->op_mpool,
1930 ts_params->session_mpool, ts_params->session_priv_mpool,
1931 ts_params->valid_devs[0],
1934 if (status == -ENOTSUP)
1937 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1939 return TEST_SUCCESS;
1943 test_AES_cipheronly_all(void)
1945 return test_blockcipher(BLKCIPHER_AES_CIPHERONLY_TYPE);
1949 test_AES_docsis_all(void)
1951 /* Data-path service does not support DOCSIS yet */
1952 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
1954 return test_blockcipher(BLKCIPHER_AES_DOCSIS_TYPE);
1958 test_DES_docsis_all(void)
1960 /* Data-path service does not support DOCSIS yet */
1961 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
1963 return test_blockcipher(BLKCIPHER_DES_DOCSIS_TYPE);
1967 test_DES_cipheronly_all(void)
1969 return test_blockcipher(BLKCIPHER_DES_CIPHERONLY_TYPE);
1973 test_authonly_all(void)
1975 return test_blockcipher(BLKCIPHER_AUTHONLY_TYPE);
1979 test_AES_chain_all(void)
1981 return test_blockcipher(BLKCIPHER_AES_CHAIN_TYPE);
1985 test_3DES_chain_all(void)
1987 return test_blockcipher(BLKCIPHER_3DES_CHAIN_TYPE);
1991 test_3DES_cipheronly_all(void)
1993 return test_blockcipher(BLKCIPHER_3DES_CIPHERONLY_TYPE);
1996 /* ***** SNOW 3G Tests ***** */
1998 create_wireless_algo_hash_session(uint8_t dev_id,
1999 const uint8_t *key, const uint8_t key_len,
2000 const uint8_t iv_len, const uint8_t auth_len,
2001 enum rte_crypto_auth_operation op,
2002 enum rte_crypto_auth_algorithm algo)
2004 uint8_t hash_key[key_len];
2007 struct crypto_testsuite_params *ts_params = &testsuite_params;
2008 struct crypto_unittest_params *ut_params = &unittest_params;
2010 memcpy(hash_key, key, key_len);
2012 debug_hexdump(stdout, "key:", key, key_len);
2014 /* Setup Authentication Parameters */
2015 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2016 ut_params->auth_xform.next = NULL;
2018 ut_params->auth_xform.auth.op = op;
2019 ut_params->auth_xform.auth.algo = algo;
2020 ut_params->auth_xform.auth.key.length = key_len;
2021 ut_params->auth_xform.auth.key.data = hash_key;
2022 ut_params->auth_xform.auth.digest_length = auth_len;
2023 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
2024 ut_params->auth_xform.auth.iv.length = iv_len;
2025 ut_params->sess = rte_cryptodev_sym_session_create(
2026 ts_params->session_mpool);
2028 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2029 &ut_params->auth_xform,
2030 ts_params->session_priv_mpool);
2031 TEST_ASSERT_EQUAL(status, 0, "session init failed");
2032 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2037 create_wireless_algo_cipher_session(uint8_t dev_id,
2038 enum rte_crypto_cipher_operation op,
2039 enum rte_crypto_cipher_algorithm algo,
2040 const uint8_t *key, const uint8_t key_len,
2043 uint8_t cipher_key[key_len];
2045 struct crypto_testsuite_params *ts_params = &testsuite_params;
2046 struct crypto_unittest_params *ut_params = &unittest_params;
2048 memcpy(cipher_key, key, key_len);
2050 /* Setup Cipher Parameters */
2051 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2052 ut_params->cipher_xform.next = NULL;
2054 ut_params->cipher_xform.cipher.algo = algo;
2055 ut_params->cipher_xform.cipher.op = op;
2056 ut_params->cipher_xform.cipher.key.data = cipher_key;
2057 ut_params->cipher_xform.cipher.key.length = key_len;
2058 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2059 ut_params->cipher_xform.cipher.iv.length = iv_len;
2061 debug_hexdump(stdout, "key:", key, key_len);
2063 /* Create Crypto session */
2064 ut_params->sess = rte_cryptodev_sym_session_create(
2065 ts_params->session_mpool);
2067 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2068 &ut_params->cipher_xform,
2069 ts_params->session_priv_mpool);
2070 TEST_ASSERT_EQUAL(status, 0, "session init failed");
2071 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2076 create_wireless_algo_cipher_operation(const uint8_t *iv, uint8_t iv_len,
2077 unsigned int cipher_len,
2078 unsigned int cipher_offset)
2080 struct crypto_testsuite_params *ts_params = &testsuite_params;
2081 struct crypto_unittest_params *ut_params = &unittest_params;
2083 /* Generate Crypto op data structure */
2084 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2085 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2086 TEST_ASSERT_NOT_NULL(ut_params->op,
2087 "Failed to allocate pktmbuf offload");
2089 /* Set crypto operation data parameters */
2090 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2092 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2094 /* set crypto operation source mbuf */
2095 sym_op->m_src = ut_params->ibuf;
2098 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2100 sym_op->cipher.data.length = cipher_len;
2101 sym_op->cipher.data.offset = cipher_offset;
2106 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, uint8_t iv_len,
2107 unsigned int cipher_len,
2108 unsigned int cipher_offset)
2110 struct crypto_testsuite_params *ts_params = &testsuite_params;
2111 struct crypto_unittest_params *ut_params = &unittest_params;
2113 /* Generate Crypto op data structure */
2114 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2115 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2116 TEST_ASSERT_NOT_NULL(ut_params->op,
2117 "Failed to allocate pktmbuf offload");
2119 /* Set crypto operation data parameters */
2120 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2122 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2124 /* set crypto operation source mbuf */
2125 sym_op->m_src = ut_params->ibuf;
2126 sym_op->m_dst = ut_params->obuf;
2129 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2131 sym_op->cipher.data.length = cipher_len;
2132 sym_op->cipher.data.offset = cipher_offset;
2137 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
2138 enum rte_crypto_cipher_operation cipher_op,
2139 enum rte_crypto_auth_operation auth_op,
2140 enum rte_crypto_auth_algorithm auth_algo,
2141 enum rte_crypto_cipher_algorithm cipher_algo,
2142 const uint8_t *key, uint8_t key_len,
2143 uint8_t auth_iv_len, uint8_t auth_len,
2144 uint8_t cipher_iv_len)
2147 uint8_t cipher_auth_key[key_len];
2150 struct crypto_testsuite_params *ts_params = &testsuite_params;
2151 struct crypto_unittest_params *ut_params = &unittest_params;
2153 memcpy(cipher_auth_key, key, key_len);
2155 /* Setup Authentication Parameters */
2156 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2157 ut_params->auth_xform.next = NULL;
2159 ut_params->auth_xform.auth.op = auth_op;
2160 ut_params->auth_xform.auth.algo = auth_algo;
2161 ut_params->auth_xform.auth.key.length = key_len;
2162 /* Hash key = cipher key */
2163 ut_params->auth_xform.auth.key.data = cipher_auth_key;
2164 ut_params->auth_xform.auth.digest_length = auth_len;
2165 /* Auth IV will be after cipher IV */
2166 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2167 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2169 /* Setup Cipher Parameters */
2170 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2171 ut_params->cipher_xform.next = &ut_params->auth_xform;
2173 ut_params->cipher_xform.cipher.algo = cipher_algo;
2174 ut_params->cipher_xform.cipher.op = cipher_op;
2175 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2176 ut_params->cipher_xform.cipher.key.length = key_len;
2177 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2178 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2180 debug_hexdump(stdout, "key:", key, key_len);
2182 /* Create Crypto session*/
2183 ut_params->sess = rte_cryptodev_sym_session_create(
2184 ts_params->session_mpool);
2185 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2187 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2188 &ut_params->cipher_xform,
2189 ts_params->session_priv_mpool);
2190 if (status == -ENOTSUP)
2193 TEST_ASSERT_EQUAL(status, 0, "session init failed");
2198 create_wireless_cipher_auth_session(uint8_t dev_id,
2199 enum rte_crypto_cipher_operation cipher_op,
2200 enum rte_crypto_auth_operation auth_op,
2201 enum rte_crypto_auth_algorithm auth_algo,
2202 enum rte_crypto_cipher_algorithm cipher_algo,
2203 const struct wireless_test_data *tdata)
2205 const uint8_t key_len = tdata->key.len;
2206 uint8_t cipher_auth_key[key_len];
2209 struct crypto_testsuite_params *ts_params = &testsuite_params;
2210 struct crypto_unittest_params *ut_params = &unittest_params;
2211 const uint8_t *key = tdata->key.data;
2212 const uint8_t auth_len = tdata->digest.len;
2213 uint8_t cipher_iv_len = tdata->cipher_iv.len;
2214 uint8_t auth_iv_len = tdata->auth_iv.len;
2216 memcpy(cipher_auth_key, key, key_len);
2218 /* Setup Authentication Parameters */
2219 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2220 ut_params->auth_xform.next = NULL;
2222 ut_params->auth_xform.auth.op = auth_op;
2223 ut_params->auth_xform.auth.algo = auth_algo;
2224 ut_params->auth_xform.auth.key.length = key_len;
2225 /* Hash key = cipher key */
2226 ut_params->auth_xform.auth.key.data = cipher_auth_key;
2227 ut_params->auth_xform.auth.digest_length = auth_len;
2228 /* Auth IV will be after cipher IV */
2229 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2230 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2232 /* Setup Cipher Parameters */
2233 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2234 ut_params->cipher_xform.next = &ut_params->auth_xform;
2236 ut_params->cipher_xform.cipher.algo = cipher_algo;
2237 ut_params->cipher_xform.cipher.op = cipher_op;
2238 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2239 ut_params->cipher_xform.cipher.key.length = key_len;
2240 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2241 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2244 debug_hexdump(stdout, "key:", key, key_len);
2246 /* Create Crypto session*/
2247 ut_params->sess = rte_cryptodev_sym_session_create(
2248 ts_params->session_mpool);
2250 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2251 &ut_params->cipher_xform,
2252 ts_params->session_priv_mpool);
2253 if (status == -ENOTSUP)
2256 TEST_ASSERT_EQUAL(status, 0, "session init failed");
2257 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2262 create_zuc_cipher_auth_encrypt_generate_session(uint8_t dev_id,
2263 const struct wireless_test_data *tdata)
2265 return create_wireless_cipher_auth_session(dev_id,
2266 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2267 RTE_CRYPTO_AUTH_OP_GENERATE, RTE_CRYPTO_AUTH_ZUC_EIA3,
2268 RTE_CRYPTO_CIPHER_ZUC_EEA3, tdata);
2272 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
2273 enum rte_crypto_cipher_operation cipher_op,
2274 enum rte_crypto_auth_operation auth_op,
2275 enum rte_crypto_auth_algorithm auth_algo,
2276 enum rte_crypto_cipher_algorithm cipher_algo,
2277 const uint8_t *key, const uint8_t key_len,
2278 uint8_t auth_iv_len, uint8_t auth_len,
2279 uint8_t cipher_iv_len)
2281 uint8_t auth_cipher_key[key_len];
2283 struct crypto_testsuite_params *ts_params = &testsuite_params;
2284 struct crypto_unittest_params *ut_params = &unittest_params;
2286 memcpy(auth_cipher_key, key, key_len);
2288 /* Setup Authentication Parameters */
2289 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2290 ut_params->auth_xform.auth.op = auth_op;
2291 ut_params->auth_xform.next = &ut_params->cipher_xform;
2292 ut_params->auth_xform.auth.algo = auth_algo;
2293 ut_params->auth_xform.auth.key.length = key_len;
2294 ut_params->auth_xform.auth.key.data = auth_cipher_key;
2295 ut_params->auth_xform.auth.digest_length = auth_len;
2296 /* Auth IV will be after cipher IV */
2297 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2298 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2300 /* Setup Cipher Parameters */
2301 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2302 ut_params->cipher_xform.next = NULL;
2303 ut_params->cipher_xform.cipher.algo = cipher_algo;
2304 ut_params->cipher_xform.cipher.op = cipher_op;
2305 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
2306 ut_params->cipher_xform.cipher.key.length = key_len;
2307 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2308 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2310 debug_hexdump(stdout, "key:", key, key_len);
2312 /* Create Crypto session*/
2313 ut_params->sess = rte_cryptodev_sym_session_create(
2314 ts_params->session_mpool);
2315 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2317 if (cipher_op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
2318 ut_params->auth_xform.next = NULL;
2319 ut_params->cipher_xform.next = &ut_params->auth_xform;
2320 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2321 &ut_params->cipher_xform,
2322 ts_params->session_priv_mpool);
2325 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2326 &ut_params->auth_xform,
2327 ts_params->session_priv_mpool);
2329 if (status == -ENOTSUP)
2332 TEST_ASSERT_EQUAL(status, 0, "session init failed");
2338 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
2339 unsigned int auth_tag_len,
2340 const uint8_t *iv, unsigned int iv_len,
2341 unsigned int data_pad_len,
2342 enum rte_crypto_auth_operation op,
2343 unsigned int auth_len, unsigned int auth_offset)
2345 struct crypto_testsuite_params *ts_params = &testsuite_params;
2347 struct crypto_unittest_params *ut_params = &unittest_params;
2349 /* Generate Crypto op data structure */
2350 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2351 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2352 TEST_ASSERT_NOT_NULL(ut_params->op,
2353 "Failed to allocate pktmbuf offload");
2355 /* Set crypto operation data parameters */
2356 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2358 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2360 /* set crypto operation source mbuf */
2361 sym_op->m_src = ut_params->ibuf;
2364 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2367 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2368 ut_params->ibuf, auth_tag_len);
2370 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2371 "no room to append auth tag");
2372 ut_params->digest = sym_op->auth.digest.data;
2373 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2374 ut_params->ibuf, data_pad_len);
2375 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2376 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2378 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2380 debug_hexdump(stdout, "digest:",
2381 sym_op->auth.digest.data,
2384 sym_op->auth.data.length = auth_len;
2385 sym_op->auth.data.offset = auth_offset;
2391 create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata,
2392 enum rte_crypto_auth_operation op)
2394 struct crypto_testsuite_params *ts_params = &testsuite_params;
2395 struct crypto_unittest_params *ut_params = &unittest_params;
2397 const uint8_t *auth_tag = tdata->digest.data;
2398 const unsigned int auth_tag_len = tdata->digest.len;
2399 unsigned int plaintext_len = ceil_byte_length(tdata->plaintext.len);
2400 unsigned int data_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2402 const uint8_t *cipher_iv = tdata->cipher_iv.data;
2403 const uint8_t cipher_iv_len = tdata->cipher_iv.len;
2404 const uint8_t *auth_iv = tdata->auth_iv.data;
2405 const uint8_t auth_iv_len = tdata->auth_iv.len;
2406 const unsigned int cipher_len = tdata->validCipherLenInBits.len;
2407 const unsigned int auth_len = tdata->validAuthLenInBits.len;
2409 /* Generate Crypto op data structure */
2410 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2411 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2412 TEST_ASSERT_NOT_NULL(ut_params->op,
2413 "Failed to allocate pktmbuf offload");
2414 /* Set crypto operation data parameters */
2415 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2417 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2419 /* set crypto operation source mbuf */
2420 sym_op->m_src = ut_params->ibuf;
2423 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2424 ut_params->ibuf, auth_tag_len);
2426 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2427 "no room to append auth tag");
2428 ut_params->digest = sym_op->auth.digest.data;
2429 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2430 ut_params->ibuf, data_pad_len);
2431 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2432 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2434 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2436 debug_hexdump(stdout, "digest:",
2437 sym_op->auth.digest.data,
2440 /* Copy cipher and auth IVs at the end of the crypto operation */
2441 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2443 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2444 iv_ptr += cipher_iv_len;
2445 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2447 sym_op->cipher.data.length = cipher_len;
2448 sym_op->cipher.data.offset = 0;
2449 sym_op->auth.data.length = auth_len;
2450 sym_op->auth.data.offset = 0;
2456 create_zuc_cipher_hash_generate_operation(
2457 const struct wireless_test_data *tdata)
2459 return create_wireless_cipher_hash_operation(tdata,
2460 RTE_CRYPTO_AUTH_OP_GENERATE);
2464 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2465 const unsigned auth_tag_len,
2466 const uint8_t *auth_iv, uint8_t auth_iv_len,
2467 unsigned data_pad_len,
2468 enum rte_crypto_auth_operation op,
2469 const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2470 const unsigned cipher_len, const unsigned cipher_offset,
2471 const unsigned auth_len, const unsigned auth_offset)
2473 struct crypto_testsuite_params *ts_params = &testsuite_params;
2474 struct crypto_unittest_params *ut_params = &unittest_params;
2476 enum rte_crypto_cipher_algorithm cipher_algo =
2477 ut_params->cipher_xform.cipher.algo;
2478 enum rte_crypto_auth_algorithm auth_algo =
2479 ut_params->auth_xform.auth.algo;
2481 /* Generate Crypto op data structure */
2482 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2483 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2484 TEST_ASSERT_NOT_NULL(ut_params->op,
2485 "Failed to allocate pktmbuf offload");
2486 /* Set crypto operation data parameters */
2487 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2489 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2491 /* set crypto operation source mbuf */
2492 sym_op->m_src = ut_params->ibuf;
2495 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2496 ut_params->ibuf, auth_tag_len);
2498 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2499 "no room to append auth tag");
2500 ut_params->digest = sym_op->auth.digest.data;
2502 if (rte_pktmbuf_is_contiguous(ut_params->ibuf)) {
2503 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2504 ut_params->ibuf, data_pad_len);
2506 struct rte_mbuf *m = ut_params->ibuf;
2507 unsigned int offset = data_pad_len;
2509 while (offset > m->data_len && m->next != NULL) {
2510 offset -= m->data_len;
2513 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2517 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2518 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2520 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2522 debug_hexdump(stdout, "digest:",
2523 sym_op->auth.digest.data,
2526 /* Copy cipher and auth IVs at the end of the crypto operation */
2527 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2529 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2530 iv_ptr += cipher_iv_len;
2531 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2533 if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||
2534 cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 ||
2535 cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) {
2536 sym_op->cipher.data.length = cipher_len;
2537 sym_op->cipher.data.offset = cipher_offset;
2539 sym_op->cipher.data.length = cipher_len >> 3;
2540 sym_op->cipher.data.offset = cipher_offset >> 3;
2543 if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 ||
2544 auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 ||
2545 auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {
2546 sym_op->auth.data.length = auth_len;
2547 sym_op->auth.data.offset = auth_offset;
2549 sym_op->auth.data.length = auth_len >> 3;
2550 sym_op->auth.data.offset = auth_offset >> 3;
2557 create_wireless_algo_auth_cipher_operation(
2558 const uint8_t *auth_tag, unsigned int auth_tag_len,
2559 const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2560 const uint8_t *auth_iv, uint8_t auth_iv_len,
2561 unsigned int data_pad_len,
2562 unsigned int cipher_len, unsigned int cipher_offset,
2563 unsigned int auth_len, unsigned int auth_offset,
2564 uint8_t op_mode, uint8_t do_sgl, uint8_t verify)
2566 struct crypto_testsuite_params *ts_params = &testsuite_params;
2567 struct crypto_unittest_params *ut_params = &unittest_params;
2569 enum rte_crypto_cipher_algorithm cipher_algo =
2570 ut_params->cipher_xform.cipher.algo;
2571 enum rte_crypto_auth_algorithm auth_algo =
2572 ut_params->auth_xform.auth.algo;
2574 /* Generate Crypto op data structure */
2575 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2576 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2577 TEST_ASSERT_NOT_NULL(ut_params->op,
2578 "Failed to allocate pktmbuf offload");
2580 /* Set crypto operation data parameters */
2581 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2583 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2585 /* set crypto operation mbufs */
2586 sym_op->m_src = ut_params->ibuf;
2587 if (op_mode == OUT_OF_PLACE)
2588 sym_op->m_dst = ut_params->obuf;
2592 sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(
2593 (op_mode == IN_PLACE ?
2594 ut_params->ibuf : ut_params->obuf),
2595 uint8_t *, data_pad_len);
2596 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2597 (op_mode == IN_PLACE ?
2598 ut_params->ibuf : ut_params->obuf),
2600 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2602 uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3);
2603 struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ?
2604 sym_op->m_src : sym_op->m_dst);
2605 while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) {
2606 remaining_off -= rte_pktmbuf_data_len(sgl_buf);
2607 sgl_buf = sgl_buf->next;
2609 sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf,
2610 uint8_t *, remaining_off);
2611 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(sgl_buf,
2613 memset(sym_op->auth.digest.data, 0, remaining_off);
2614 while (sgl_buf->next != NULL) {
2615 memset(rte_pktmbuf_mtod(sgl_buf, uint8_t *),
2616 0, rte_pktmbuf_data_len(sgl_buf));
2617 sgl_buf = sgl_buf->next;
2621 /* Copy digest for the verification */
2623 memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2625 /* Copy cipher and auth IVs at the end of the crypto operation */
2626 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(
2627 ut_params->op, uint8_t *, IV_OFFSET);
2629 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2630 iv_ptr += cipher_iv_len;
2631 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2633 if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||
2634 cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 ||
2635 cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) {
2636 sym_op->cipher.data.length = cipher_len;
2637 sym_op->cipher.data.offset = cipher_offset;
2639 sym_op->cipher.data.length = cipher_len >> 3;
2640 sym_op->cipher.data.offset = cipher_offset >> 3;
2643 if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 ||
2644 auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 ||
2645 auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {
2646 sym_op->auth.data.length = auth_len;
2647 sym_op->auth.data.offset = auth_offset;
2649 sym_op->auth.data.length = auth_len >> 3;
2650 sym_op->auth.data.offset = auth_offset >> 3;
2657 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2659 struct crypto_testsuite_params *ts_params = &testsuite_params;
2660 struct crypto_unittest_params *ut_params = &unittest_params;
2663 unsigned plaintext_pad_len;
2664 unsigned plaintext_len;
2666 struct rte_cryptodev_info dev_info;
2668 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2669 uint64_t feat_flags = dev_info.feature_flags;
2671 if (!(feat_flags & RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA) &&
2672 ((tdata->validAuthLenInBits.len % 8) != 0)) {
2673 printf("Device doesn't support NON-Byte Aligned Data.\n");
2677 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
2678 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
2679 printf("Device doesn't support RAW data-path APIs.\n");
2683 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
2686 /* Verify the capabilities */
2687 struct rte_cryptodev_sym_capability_idx cap_idx;
2688 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2689 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
2690 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
2694 /* Create SNOW 3G session */
2695 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2696 tdata->key.data, tdata->key.len,
2697 tdata->auth_iv.len, tdata->digest.len,
2698 RTE_CRYPTO_AUTH_OP_GENERATE,
2699 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2703 /* alloc mbuf and set payload */
2704 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2706 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2707 rte_pktmbuf_tailroom(ut_params->ibuf));
2709 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2710 /* Append data which is padded to a multiple of */
2711 /* the algorithms block size */
2712 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2713 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2715 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2717 /* Create SNOW 3G operation */
2718 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2719 tdata->auth_iv.data, tdata->auth_iv.len,
2720 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2721 tdata->validAuthLenInBits.len,
2726 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
2727 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
2728 ut_params->op, 0, 1, 1, 0);
2730 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2732 ut_params->obuf = ut_params->op->sym->m_src;
2733 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2734 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2735 + plaintext_pad_len;
2738 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2741 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2742 "SNOW 3G Generated auth tag not as expected");
2748 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
2750 struct crypto_testsuite_params *ts_params = &testsuite_params;
2751 struct crypto_unittest_params *ut_params = &unittest_params;
2754 unsigned plaintext_pad_len;
2755 unsigned plaintext_len;
2757 struct rte_cryptodev_info dev_info;
2759 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2760 uint64_t feat_flags = dev_info.feature_flags;
2762 if (!(feat_flags & RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA) &&
2763 ((tdata->validAuthLenInBits.len % 8) != 0)) {
2764 printf("Device doesn't support NON-Byte Aligned Data.\n");
2768 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
2769 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
2770 printf("Device doesn't support RAW data-path APIs.\n");
2774 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
2777 /* Verify the capabilities */
2778 struct rte_cryptodev_sym_capability_idx cap_idx;
2779 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2780 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
2781 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
2785 /* Create SNOW 3G session */
2786 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2787 tdata->key.data, tdata->key.len,
2788 tdata->auth_iv.len, tdata->digest.len,
2789 RTE_CRYPTO_AUTH_OP_VERIFY,
2790 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2793 /* alloc mbuf and set payload */
2794 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2796 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2797 rte_pktmbuf_tailroom(ut_params->ibuf));
2799 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2800 /* Append data which is padded to a multiple of */
2801 /* the algorithms block size */
2802 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2803 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2805 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2807 /* Create SNOW 3G operation */
2808 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2810 tdata->auth_iv.data, tdata->auth_iv.len,
2812 RTE_CRYPTO_AUTH_OP_VERIFY,
2813 tdata->validAuthLenInBits.len,
2818 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
2819 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
2820 ut_params->op, 0, 1, 1, 0);
2822 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2824 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2825 ut_params->obuf = ut_params->op->sym->m_src;
2826 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2827 + plaintext_pad_len;
2830 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2839 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
2841 struct crypto_testsuite_params *ts_params = &testsuite_params;
2842 struct crypto_unittest_params *ut_params = &unittest_params;
2845 unsigned plaintext_pad_len;
2846 unsigned plaintext_len;
2848 struct rte_cryptodev_info dev_info;
2850 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2851 uint64_t feat_flags = dev_info.feature_flags;
2853 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
2854 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
2855 printf("Device doesn't support RAW data-path APIs.\n");
2859 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
2862 /* Verify the capabilities */
2863 struct rte_cryptodev_sym_capability_idx cap_idx;
2864 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2865 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9;
2866 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
2870 /* Create KASUMI session */
2871 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2872 tdata->key.data, tdata->key.len,
2873 0, tdata->digest.len,
2874 RTE_CRYPTO_AUTH_OP_GENERATE,
2875 RTE_CRYPTO_AUTH_KASUMI_F9);
2879 /* alloc mbuf and set payload */
2880 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2882 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2883 rte_pktmbuf_tailroom(ut_params->ibuf));
2885 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2886 /* Append data which is padded to a multiple of */
2887 /* the algorithms block size */
2888 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2889 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2891 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2893 /* Create KASUMI operation */
2894 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2896 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2897 tdata->plaintext.len,
2902 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
2903 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
2905 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
2906 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
2907 ut_params->op, 0, 1, 1, 0);
2909 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2912 ut_params->obuf = ut_params->op->sym->m_src;
2913 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2914 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2915 + plaintext_pad_len;
2918 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2921 DIGEST_BYTE_LENGTH_KASUMI_F9,
2922 "KASUMI Generated auth tag not as expected");
2928 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
2930 struct crypto_testsuite_params *ts_params = &testsuite_params;
2931 struct crypto_unittest_params *ut_params = &unittest_params;
2934 unsigned plaintext_pad_len;
2935 unsigned plaintext_len;
2937 struct rte_cryptodev_info dev_info;
2939 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2940 uint64_t feat_flags = dev_info.feature_flags;
2942 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
2943 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
2944 printf("Device doesn't support RAW data-path APIs.\n");
2948 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
2951 /* Verify the capabilities */
2952 struct rte_cryptodev_sym_capability_idx cap_idx;
2953 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2954 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9;
2955 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
2959 /* Create KASUMI session */
2960 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2961 tdata->key.data, tdata->key.len,
2962 0, tdata->digest.len,
2963 RTE_CRYPTO_AUTH_OP_VERIFY,
2964 RTE_CRYPTO_AUTH_KASUMI_F9);
2967 /* alloc mbuf and set payload */
2968 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2970 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2971 rte_pktmbuf_tailroom(ut_params->ibuf));
2973 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2974 /* Append data which is padded to a multiple */
2975 /* of the algorithms block size */
2976 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2977 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2979 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2981 /* Create KASUMI operation */
2982 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2986 RTE_CRYPTO_AUTH_OP_VERIFY,
2987 tdata->plaintext.len,
2992 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
2993 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
2994 ut_params->op, 0, 1, 1, 0);
2996 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2998 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2999 ut_params->obuf = ut_params->op->sym->m_src;
3000 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3001 + plaintext_pad_len;
3004 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
3013 test_snow3g_hash_generate_test_case_1(void)
3015 return test_snow3g_authentication(&snow3g_hash_test_case_1);
3019 test_snow3g_hash_generate_test_case_2(void)
3021 return test_snow3g_authentication(&snow3g_hash_test_case_2);
3025 test_snow3g_hash_generate_test_case_3(void)
3027 return test_snow3g_authentication(&snow3g_hash_test_case_3);
3031 test_snow3g_hash_generate_test_case_4(void)
3033 return test_snow3g_authentication(&snow3g_hash_test_case_4);
3037 test_snow3g_hash_generate_test_case_5(void)
3039 return test_snow3g_authentication(&snow3g_hash_test_case_5);
3043 test_snow3g_hash_generate_test_case_6(void)
3045 return test_snow3g_authentication(&snow3g_hash_test_case_6);
3049 test_snow3g_hash_verify_test_case_1(void)
3051 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
3056 test_snow3g_hash_verify_test_case_2(void)
3058 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
3062 test_snow3g_hash_verify_test_case_3(void)
3064 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
3068 test_snow3g_hash_verify_test_case_4(void)
3070 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
3074 test_snow3g_hash_verify_test_case_5(void)
3076 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
3080 test_snow3g_hash_verify_test_case_6(void)
3082 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
3086 test_kasumi_hash_generate_test_case_1(void)
3088 return test_kasumi_authentication(&kasumi_hash_test_case_1);
3092 test_kasumi_hash_generate_test_case_2(void)
3094 return test_kasumi_authentication(&kasumi_hash_test_case_2);
3098 test_kasumi_hash_generate_test_case_3(void)
3100 return test_kasumi_authentication(&kasumi_hash_test_case_3);
3104 test_kasumi_hash_generate_test_case_4(void)
3106 return test_kasumi_authentication(&kasumi_hash_test_case_4);
3110 test_kasumi_hash_generate_test_case_5(void)
3112 return test_kasumi_authentication(&kasumi_hash_test_case_5);
3116 test_kasumi_hash_generate_test_case_6(void)
3118 return test_kasumi_authentication(&kasumi_hash_test_case_6);
3122 test_kasumi_hash_verify_test_case_1(void)
3124 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
3128 test_kasumi_hash_verify_test_case_2(void)
3130 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
3134 test_kasumi_hash_verify_test_case_3(void)
3136 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
3140 test_kasumi_hash_verify_test_case_4(void)
3142 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
3146 test_kasumi_hash_verify_test_case_5(void)
3148 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
3152 test_kasumi_encryption(const struct kasumi_test_data *tdata)
3154 struct crypto_testsuite_params *ts_params = &testsuite_params;
3155 struct crypto_unittest_params *ut_params = &unittest_params;
3158 uint8_t *plaintext, *ciphertext;
3159 unsigned plaintext_pad_len;
3160 unsigned plaintext_len;
3161 struct rte_cryptodev_info dev_info;
3163 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3164 uint64_t feat_flags = dev_info.feature_flags;
3166 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
3167 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
3168 printf("Device doesn't support RAW data-path APIs.\n");
3172 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3175 /* Verify the capabilities */
3176 struct rte_cryptodev_sym_capability_idx cap_idx;
3177 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3178 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3179 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3183 /* Create KASUMI session */
3184 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3185 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3186 RTE_CRYPTO_CIPHER_KASUMI_F8,
3187 tdata->key.data, tdata->key.len,
3188 tdata->cipher_iv.len);
3192 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3194 /* Clear mbuf payload */
3195 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3196 rte_pktmbuf_tailroom(ut_params->ibuf));
3198 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3199 /* Append data which is padded to a multiple */
3200 /* of the algorithms block size */
3201 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3202 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3204 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3206 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3208 /* Create KASUMI operation */
3209 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3210 tdata->cipher_iv.len,
3211 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3212 tdata->validCipherOffsetInBits.len);
3216 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3217 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
3218 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
3220 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3222 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3224 ut_params->obuf = ut_params->op->sym->m_dst;
3225 if (ut_params->obuf)
3226 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3228 ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3230 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3232 const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3233 (tdata->validCipherOffsetInBits.len >> 3);
3235 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3237 reference_ciphertext,
3238 tdata->validCipherLenInBits.len,
3239 "KASUMI Ciphertext data not as expected");
3244 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
3246 struct crypto_testsuite_params *ts_params = &testsuite_params;
3247 struct crypto_unittest_params *ut_params = &unittest_params;
3251 unsigned int plaintext_pad_len;
3252 unsigned int plaintext_len;
3254 uint8_t buffer[10000];
3255 const uint8_t *ciphertext;
3257 struct rte_cryptodev_info dev_info;
3259 /* Verify the capabilities */
3260 struct rte_cryptodev_sym_capability_idx cap_idx;
3261 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3262 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3263 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3267 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3269 uint64_t feat_flags = dev_info.feature_flags;
3271 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
3272 printf("Device doesn't support in-place scatter-gather. "
3277 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
3278 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
3279 printf("Device doesn't support RAW data-path APIs.\n");
3283 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3286 /* Create KASUMI session */
3287 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3288 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3289 RTE_CRYPTO_CIPHER_KASUMI_F8,
3290 tdata->key.data, tdata->key.len,
3291 tdata->cipher_iv.len);
3295 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3298 /* Append data which is padded to a multiple */
3299 /* of the algorithms block size */
3300 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3302 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3303 plaintext_pad_len, 10, 0);
3305 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3307 /* Create KASUMI operation */
3308 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3309 tdata->cipher_iv.len,
3310 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3311 tdata->validCipherOffsetInBits.len);
3315 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3316 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
3317 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
3319 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3321 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3323 ut_params->obuf = ut_params->op->sym->m_dst;
3325 if (ut_params->obuf)
3326 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3327 plaintext_len, buffer);
3329 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3330 tdata->validCipherOffsetInBits.len >> 3,
3331 plaintext_len, buffer);
3334 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3336 const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3337 (tdata->validCipherOffsetInBits.len >> 3);
3339 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3341 reference_ciphertext,
3342 tdata->validCipherLenInBits.len,
3343 "KASUMI Ciphertext data not as expected");
3348 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
3350 struct crypto_testsuite_params *ts_params = &testsuite_params;
3351 struct crypto_unittest_params *ut_params = &unittest_params;
3354 uint8_t *plaintext, *ciphertext;
3355 unsigned plaintext_pad_len;
3356 unsigned plaintext_len;
3358 /* Verify the capabilities */
3359 struct rte_cryptodev_sym_capability_idx cap_idx;
3360 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3361 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3362 /* Data-path service does not support OOP */
3363 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3367 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3370 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3373 /* Create KASUMI session */
3374 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3375 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3376 RTE_CRYPTO_CIPHER_KASUMI_F8,
3377 tdata->key.data, tdata->key.len,
3378 tdata->cipher_iv.len);
3382 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3383 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3385 /* Clear mbuf payload */
3386 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3387 rte_pktmbuf_tailroom(ut_params->ibuf));
3389 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3390 /* Append data which is padded to a multiple */
3391 /* of the algorithms block size */
3392 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3393 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3395 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3396 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3398 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3400 /* Create KASUMI operation */
3401 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3402 tdata->cipher_iv.len,
3403 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3404 tdata->validCipherOffsetInBits.len);
3408 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3410 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3412 ut_params->obuf = ut_params->op->sym->m_dst;
3413 if (ut_params->obuf)
3414 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3416 ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3418 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3420 const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3421 (tdata->validCipherOffsetInBits.len >> 3);
3423 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3425 reference_ciphertext,
3426 tdata->validCipherLenInBits.len,
3427 "KASUMI Ciphertext data not as expected");
3432 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
3434 struct crypto_testsuite_params *ts_params = &testsuite_params;
3435 struct crypto_unittest_params *ut_params = &unittest_params;
3438 unsigned int plaintext_pad_len;
3439 unsigned int plaintext_len;
3441 const uint8_t *ciphertext;
3442 uint8_t buffer[2048];
3444 struct rte_cryptodev_info dev_info;
3446 /* Verify the capabilities */
3447 struct rte_cryptodev_sym_capability_idx cap_idx;
3448 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3449 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3450 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3454 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3457 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3460 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3462 uint64_t feat_flags = dev_info.feature_flags;
3463 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
3464 printf("Device doesn't support out-of-place scatter-gather "
3465 "in both input and output mbufs. "
3470 /* Create KASUMI session */
3471 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3472 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3473 RTE_CRYPTO_CIPHER_KASUMI_F8,
3474 tdata->key.data, tdata->key.len,
3475 tdata->cipher_iv.len);
3479 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3480 /* Append data which is padded to a multiple */
3481 /* of the algorithms block size */
3482 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3484 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3485 plaintext_pad_len, 10, 0);
3486 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3487 plaintext_pad_len, 3, 0);
3489 /* Append data which is padded to a multiple */
3490 /* of the algorithms block size */
3491 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3493 /* Create KASUMI operation */
3494 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3495 tdata->cipher_iv.len,
3496 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3497 tdata->validCipherOffsetInBits.len);
3501 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3503 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3505 ut_params->obuf = ut_params->op->sym->m_dst;
3506 if (ut_params->obuf)
3507 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3508 plaintext_pad_len, buffer);
3510 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3511 tdata->validCipherOffsetInBits.len >> 3,
3512 plaintext_pad_len, buffer);
3514 const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3515 (tdata->validCipherOffsetInBits.len >> 3);
3517 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3519 reference_ciphertext,
3520 tdata->validCipherLenInBits.len,
3521 "KASUMI Ciphertext data not as expected");
3527 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
3529 struct crypto_testsuite_params *ts_params = &testsuite_params;
3530 struct crypto_unittest_params *ut_params = &unittest_params;
3533 uint8_t *ciphertext, *plaintext;
3534 unsigned ciphertext_pad_len;
3535 unsigned ciphertext_len;
3537 /* Verify the capabilities */
3538 struct rte_cryptodev_sym_capability_idx cap_idx;
3539 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3540 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3541 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3545 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3548 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3551 /* Create KASUMI session */
3552 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3553 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3554 RTE_CRYPTO_CIPHER_KASUMI_F8,
3555 tdata->key.data, tdata->key.len,
3556 tdata->cipher_iv.len);
3560 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3561 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3563 /* Clear mbuf payload */
3564 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3565 rte_pktmbuf_tailroom(ut_params->ibuf));
3567 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3568 /* Append data which is padded to a multiple */
3569 /* of the algorithms block size */
3570 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3571 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3572 ciphertext_pad_len);
3573 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3574 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3576 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3578 /* Create KASUMI operation */
3579 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3580 tdata->cipher_iv.len,
3581 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3582 tdata->validCipherOffsetInBits.len);
3586 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3588 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3590 ut_params->obuf = ut_params->op->sym->m_dst;
3591 if (ut_params->obuf)
3592 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3594 plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3596 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3598 const uint8_t *reference_plaintext = tdata->plaintext.data +
3599 (tdata->validCipherOffsetInBits.len >> 3);
3601 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3603 reference_plaintext,
3604 tdata->validCipherLenInBits.len,
3605 "KASUMI Plaintext data not as expected");
3610 test_kasumi_decryption(const struct kasumi_test_data *tdata)
3612 struct crypto_testsuite_params *ts_params = &testsuite_params;
3613 struct crypto_unittest_params *ut_params = &unittest_params;
3616 uint8_t *ciphertext, *plaintext;
3617 unsigned ciphertext_pad_len;
3618 unsigned ciphertext_len;
3619 struct rte_cryptodev_info dev_info;
3621 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3622 uint64_t feat_flags = dev_info.feature_flags;
3624 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
3625 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
3626 printf("Device doesn't support RAW data-path APIs.\n");
3630 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3633 /* Verify the capabilities */
3634 struct rte_cryptodev_sym_capability_idx cap_idx;
3635 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3636 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
3637 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3641 /* Create KASUMI session */
3642 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3643 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3644 RTE_CRYPTO_CIPHER_KASUMI_F8,
3645 tdata->key.data, tdata->key.len,
3646 tdata->cipher_iv.len);
3650 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3652 /* Clear mbuf payload */
3653 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3654 rte_pktmbuf_tailroom(ut_params->ibuf));
3656 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3657 /* Append data which is padded to a multiple */
3658 /* of the algorithms block size */
3659 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3660 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3661 ciphertext_pad_len);
3662 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3664 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3666 /* Create KASUMI operation */
3667 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3668 tdata->cipher_iv.len,
3669 tdata->ciphertext.len,
3670 tdata->validCipherOffsetInBits.len);
3674 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3675 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
3676 ut_params->op, 1, 0, 1, 0);
3678 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3680 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3682 ut_params->obuf = ut_params->op->sym->m_dst;
3683 if (ut_params->obuf)
3684 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3686 plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3688 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3690 const uint8_t *reference_plaintext = tdata->plaintext.data +
3691 (tdata->validCipherOffsetInBits.len >> 3);
3693 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3695 reference_plaintext,
3696 tdata->validCipherLenInBits.len,
3697 "KASUMI Plaintext data not as expected");
3702 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3704 struct crypto_testsuite_params *ts_params = &testsuite_params;
3705 struct crypto_unittest_params *ut_params = &unittest_params;
3708 uint8_t *plaintext, *ciphertext;
3709 unsigned plaintext_pad_len;
3710 unsigned plaintext_len;
3711 struct rte_cryptodev_info dev_info;
3713 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3714 uint64_t feat_flags = dev_info.feature_flags;
3716 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
3717 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
3718 printf("Device doesn't support RAW data-path APIs.\n");
3722 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3725 /* Verify the capabilities */
3726 struct rte_cryptodev_sym_capability_idx cap_idx;
3727 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3728 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
3729 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3733 /* Create SNOW 3G session */
3734 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3735 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3736 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3737 tdata->key.data, tdata->key.len,
3738 tdata->cipher_iv.len);
3742 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3744 /* Clear mbuf payload */
3745 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3746 rte_pktmbuf_tailroom(ut_params->ibuf));
3748 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3749 /* Append data which is padded to a multiple of */
3750 /* the algorithms block size */
3751 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3752 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3754 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3756 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3758 /* Create SNOW 3G operation */
3759 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3760 tdata->cipher_iv.len,
3761 tdata->validCipherLenInBits.len,
3766 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3767 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
3768 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
3770 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3772 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3774 ut_params->obuf = ut_params->op->sym->m_dst;
3775 if (ut_params->obuf)
3776 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3778 ciphertext = plaintext;
3780 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3783 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3785 tdata->ciphertext.data,
3786 tdata->validDataLenInBits.len,
3787 "SNOW 3G Ciphertext data not as expected");
3793 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
3795 struct crypto_testsuite_params *ts_params = &testsuite_params;
3796 struct crypto_unittest_params *ut_params = &unittest_params;
3797 uint8_t *plaintext, *ciphertext;
3800 unsigned plaintext_pad_len;
3801 unsigned plaintext_len;
3803 /* Verify the capabilities */
3804 struct rte_cryptodev_sym_capability_idx cap_idx;
3805 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3806 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
3807 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3811 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3814 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3817 /* Create SNOW 3G session */
3818 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3819 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3820 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3821 tdata->key.data, tdata->key.len,
3822 tdata->cipher_iv.len);
3826 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3827 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3829 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3830 "Failed to allocate input buffer in mempool");
3831 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3832 "Failed to allocate output buffer in mempool");
3834 /* Clear mbuf payload */
3835 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3836 rte_pktmbuf_tailroom(ut_params->ibuf));
3838 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3839 /* Append data which is padded to a multiple of */
3840 /* the algorithms block size */
3841 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3842 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3844 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3845 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3847 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3849 /* Create SNOW 3G operation */
3850 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3851 tdata->cipher_iv.len,
3852 tdata->validCipherLenInBits.len,
3857 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3859 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3861 ut_params->obuf = ut_params->op->sym->m_dst;
3862 if (ut_params->obuf)
3863 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3865 ciphertext = plaintext;
3867 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3870 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3872 tdata->ciphertext.data,
3873 tdata->validDataLenInBits.len,
3874 "SNOW 3G Ciphertext data not as expected");
3879 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
3881 struct crypto_testsuite_params *ts_params = &testsuite_params;
3882 struct crypto_unittest_params *ut_params = &unittest_params;
3885 unsigned int plaintext_pad_len;
3886 unsigned int plaintext_len;
3887 uint8_t buffer[10000];
3888 const uint8_t *ciphertext;
3890 struct rte_cryptodev_info dev_info;
3892 /* Verify the capabilities */
3893 struct rte_cryptodev_sym_capability_idx cap_idx;
3894 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3895 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
3896 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3900 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
3903 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
3906 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3908 uint64_t feat_flags = dev_info.feature_flags;
3910 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
3911 printf("Device doesn't support out-of-place scatter-gather "
3912 "in both input and output mbufs. "
3917 /* Create SNOW 3G session */
3918 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3919 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3920 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3921 tdata->key.data, tdata->key.len,
3922 tdata->cipher_iv.len);
3926 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3927 /* Append data which is padded to a multiple of */
3928 /* the algorithms block size */
3929 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3931 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3932 plaintext_pad_len, 10, 0);
3933 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3934 plaintext_pad_len, 3, 0);
3936 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3937 "Failed to allocate input buffer in mempool");
3938 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3939 "Failed to allocate output buffer in mempool");
3941 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3943 /* Create SNOW 3G operation */
3944 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3945 tdata->cipher_iv.len,
3946 tdata->validCipherLenInBits.len,
3951 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3953 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3955 ut_params->obuf = ut_params->op->sym->m_dst;
3956 if (ut_params->obuf)
3957 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3958 plaintext_len, buffer);
3960 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
3961 plaintext_len, buffer);
3963 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3966 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3968 tdata->ciphertext.data,
3969 tdata->validDataLenInBits.len,
3970 "SNOW 3G Ciphertext data not as expected");
3975 /* Shift right a buffer by "offset" bits, "offset" < 8 */
3977 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
3979 uint8_t curr_byte, prev_byte;
3980 uint32_t length_in_bytes = ceil_byte_length(length + offset);
3981 uint8_t lower_byte_mask = (1 << offset) - 1;
3984 prev_byte = buffer[0];
3985 buffer[0] >>= offset;
3987 for (i = 1; i < length_in_bytes; i++) {
3988 curr_byte = buffer[i];
3989 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
3990 (curr_byte >> offset);
3991 prev_byte = curr_byte;
3996 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
3998 struct crypto_testsuite_params *ts_params = &testsuite_params;
3999 struct crypto_unittest_params *ut_params = &unittest_params;
4000 uint8_t *plaintext, *ciphertext;
4002 uint32_t plaintext_len;
4003 uint32_t plaintext_pad_len;
4004 uint8_t extra_offset = 4;
4005 uint8_t *expected_ciphertext_shifted;
4006 struct rte_cryptodev_info dev_info;
4008 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4009 uint64_t feat_flags = dev_info.feature_flags;
4011 if (!(feat_flags & RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA) &&
4012 ((tdata->validDataLenInBits.len % 8) != 0)) {
4013 printf("Device doesn't support NON-Byte Aligned Data.\n");
4017 /* Verify the capabilities */
4018 struct rte_cryptodev_sym_capability_idx cap_idx;
4019 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4020 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4021 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4025 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4028 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4031 /* Create SNOW 3G session */
4032 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4033 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4034 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4035 tdata->key.data, tdata->key.len,
4036 tdata->cipher_iv.len);
4040 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4041 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4043 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4044 "Failed to allocate input buffer in mempool");
4045 TEST_ASSERT_NOT_NULL(ut_params->obuf,
4046 "Failed to allocate output buffer in mempool");
4048 /* Clear mbuf payload */
4049 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4050 rte_pktmbuf_tailroom(ut_params->ibuf));
4052 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
4054 * Append data which is padded to a
4055 * multiple of the algorithms block size
4057 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4059 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
4062 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4064 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
4065 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
4067 #ifdef RTE_APP_TEST_DEBUG
4068 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
4070 /* Create SNOW 3G operation */
4071 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4072 tdata->cipher_iv.len,
4073 tdata->validCipherLenInBits.len,
4078 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4080 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4082 ut_params->obuf = ut_params->op->sym->m_dst;
4083 if (ut_params->obuf)
4084 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4086 ciphertext = plaintext;
4088 #ifdef RTE_APP_TEST_DEBUG
4089 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4092 expected_ciphertext_shifted = rte_malloc(NULL, plaintext_len, 8);
4094 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
4095 "failed to reserve memory for ciphertext shifted\n");
4097 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
4098 ceil_byte_length(tdata->ciphertext.len));
4099 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
4102 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
4104 expected_ciphertext_shifted,
4105 tdata->validDataLenInBits.len,
4107 "SNOW 3G Ciphertext data not as expected");
4111 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
4113 struct crypto_testsuite_params *ts_params = &testsuite_params;
4114 struct crypto_unittest_params *ut_params = &unittest_params;
4118 uint8_t *plaintext, *ciphertext;
4119 unsigned ciphertext_pad_len;
4120 unsigned ciphertext_len;
4121 struct rte_cryptodev_info dev_info;
4123 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4124 uint64_t feat_flags = dev_info.feature_flags;
4126 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4127 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4128 printf("Device doesn't support RAW data-path APIs.\n");
4132 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4135 /* Verify the capabilities */
4136 struct rte_cryptodev_sym_capability_idx cap_idx;
4137 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4138 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4139 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4143 /* Create SNOW 3G session */
4144 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4145 RTE_CRYPTO_CIPHER_OP_DECRYPT,
4146 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4147 tdata->key.data, tdata->key.len,
4148 tdata->cipher_iv.len);
4152 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4154 /* Clear mbuf payload */
4155 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4156 rte_pktmbuf_tailroom(ut_params->ibuf));
4158 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4159 /* Append data which is padded to a multiple of */
4160 /* the algorithms block size */
4161 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4162 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4163 ciphertext_pad_len);
4164 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4166 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4168 /* Create SNOW 3G operation */
4169 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4170 tdata->cipher_iv.len,
4171 tdata->validCipherLenInBits.len,
4172 tdata->cipher.offset_bits);
4176 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4177 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
4178 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
4180 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4182 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4183 ut_params->obuf = ut_params->op->sym->m_dst;
4184 if (ut_params->obuf)
4185 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4187 plaintext = ciphertext;
4189 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4192 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4193 tdata->plaintext.data,
4194 tdata->validDataLenInBits.len,
4195 "SNOW 3G Plaintext data not as expected");
4199 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
4201 struct crypto_testsuite_params *ts_params = &testsuite_params;
4202 struct crypto_unittest_params *ut_params = &unittest_params;
4206 uint8_t *plaintext, *ciphertext;
4207 unsigned ciphertext_pad_len;
4208 unsigned ciphertext_len;
4210 /* Verify the capabilities */
4211 struct rte_cryptodev_sym_capability_idx cap_idx;
4212 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4213 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4214 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4218 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4221 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4224 /* Create SNOW 3G session */
4225 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4226 RTE_CRYPTO_CIPHER_OP_DECRYPT,
4227 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4228 tdata->key.data, tdata->key.len,
4229 tdata->cipher_iv.len);
4233 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4234 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4236 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4237 "Failed to allocate input buffer");
4238 TEST_ASSERT_NOT_NULL(ut_params->obuf,
4239 "Failed to allocate output buffer");
4241 /* Clear mbuf payload */
4242 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4243 rte_pktmbuf_tailroom(ut_params->ibuf));
4245 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4246 rte_pktmbuf_tailroom(ut_params->obuf));
4248 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4249 /* Append data which is padded to a multiple of */
4250 /* the algorithms block size */
4251 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4252 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4253 ciphertext_pad_len);
4254 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4255 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4257 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4259 /* Create SNOW 3G operation */
4260 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4261 tdata->cipher_iv.len,
4262 tdata->validCipherLenInBits.len,
4267 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4269 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4270 ut_params->obuf = ut_params->op->sym->m_dst;
4271 if (ut_params->obuf)
4272 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4274 plaintext = ciphertext;
4276 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4279 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4280 tdata->plaintext.data,
4281 tdata->validDataLenInBits.len,
4282 "SNOW 3G Plaintext data not as expected");
4287 test_zuc_cipher_auth(const struct wireless_test_data *tdata)
4289 struct crypto_testsuite_params *ts_params = &testsuite_params;
4290 struct crypto_unittest_params *ut_params = &unittest_params;
4294 uint8_t *plaintext, *ciphertext;
4295 unsigned int plaintext_pad_len;
4296 unsigned int plaintext_len;
4298 struct rte_cryptodev_info dev_info;
4299 struct rte_cryptodev_sym_capability_idx cap_idx;
4301 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4302 uint64_t feat_flags = dev_info.feature_flags;
4304 if (!(feat_flags & RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA) &&
4305 ((tdata->validAuthLenInBits.len % 8 != 0) ||
4306 (tdata->validDataLenInBits.len % 8 != 0))) {
4307 printf("Device doesn't support NON-Byte Aligned Data.\n");
4311 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4312 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4313 printf("Device doesn't support RAW data-path APIs.\n");
4317 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4320 /* Check if device supports ZUC EEA3 */
4321 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4322 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
4324 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4328 /* Check if device supports ZUC EIA3 */
4329 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4330 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
4332 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4336 /* Create ZUC session */
4337 retval = create_zuc_cipher_auth_encrypt_generate_session(
4338 ts_params->valid_devs[0],
4342 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4344 /* clear mbuf payload */
4345 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4346 rte_pktmbuf_tailroom(ut_params->ibuf));
4348 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4349 /* Append data which is padded to a multiple of */
4350 /* the algorithms block size */
4351 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4352 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4354 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4356 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4358 /* Create ZUC operation */
4359 retval = create_zuc_cipher_hash_generate_operation(tdata);
4363 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4364 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
4365 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
4367 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4369 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4370 ut_params->obuf = ut_params->op->sym->m_src;
4371 if (ut_params->obuf)
4372 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4374 ciphertext = plaintext;
4376 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4378 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4380 tdata->ciphertext.data,
4381 tdata->validDataLenInBits.len,
4382 "ZUC Ciphertext data not as expected");
4384 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4385 + plaintext_pad_len;
4388 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4392 "ZUC Generated auth tag not as expected");
4397 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
4399 struct crypto_testsuite_params *ts_params = &testsuite_params;
4400 struct crypto_unittest_params *ut_params = &unittest_params;
4404 uint8_t *plaintext, *ciphertext;
4405 unsigned plaintext_pad_len;
4406 unsigned plaintext_len;
4407 struct rte_cryptodev_info dev_info;
4409 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4410 uint64_t feat_flags = dev_info.feature_flags;
4412 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4413 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4414 printf("Device doesn't support RAW data-path APIs.\n");
4418 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4421 /* Verify the capabilities */
4422 struct rte_cryptodev_sym_capability_idx cap_idx;
4423 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4424 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
4425 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4428 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4429 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4430 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4434 /* Create SNOW 3G session */
4435 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
4436 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4437 RTE_CRYPTO_AUTH_OP_GENERATE,
4438 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4439 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4440 tdata->key.data, tdata->key.len,
4441 tdata->auth_iv.len, tdata->digest.len,
4442 tdata->cipher_iv.len);
4445 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4447 /* clear mbuf payload */
4448 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4449 rte_pktmbuf_tailroom(ut_params->ibuf));
4451 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4452 /* Append data which is padded to a multiple of */
4453 /* the algorithms block size */
4454 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4455 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4457 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4459 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4461 /* Create SNOW 3G operation */
4462 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
4463 tdata->digest.len, tdata->auth_iv.data,
4465 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4466 tdata->cipher_iv.data, tdata->cipher_iv.len,
4467 tdata->validCipherLenInBits.len,
4469 tdata->validAuthLenInBits.len,
4475 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4476 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
4477 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
4479 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4481 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4482 ut_params->obuf = ut_params->op->sym->m_src;
4483 if (ut_params->obuf)
4484 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4486 ciphertext = plaintext;
4488 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4490 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4492 tdata->ciphertext.data,
4493 tdata->validDataLenInBits.len,
4494 "SNOW 3G Ciphertext data not as expected");
4496 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4497 + plaintext_pad_len;
4500 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4503 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4504 "SNOW 3G Generated auth tag not as expected");
4509 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,
4510 uint8_t op_mode, uint8_t verify)
4512 struct crypto_testsuite_params *ts_params = &testsuite_params;
4513 struct crypto_unittest_params *ut_params = &unittest_params;
4517 uint8_t *plaintext = NULL, *ciphertext = NULL;
4518 unsigned int plaintext_pad_len;
4519 unsigned int plaintext_len;
4520 unsigned int ciphertext_pad_len;
4521 unsigned int ciphertext_len;
4523 struct rte_cryptodev_info dev_info;
4525 /* Verify the capabilities */
4526 struct rte_cryptodev_sym_capability_idx cap_idx;
4527 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4528 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
4529 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4532 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4533 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4534 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4538 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4541 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4543 uint64_t feat_flags = dev_info.feature_flags;
4545 if (op_mode == OUT_OF_PLACE) {
4546 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4547 printf("Device doesn't support digest encrypted.\n");
4550 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4554 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4555 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4556 printf("Device doesn't support RAW data-path APIs.\n");
4560 /* Create SNOW 3G session */
4561 retval = create_wireless_algo_auth_cipher_session(
4562 ts_params->valid_devs[0],
4563 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4564 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4565 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4566 : RTE_CRYPTO_AUTH_OP_GENERATE),
4567 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4568 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4569 tdata->key.data, tdata->key.len,
4570 tdata->auth_iv.len, tdata->digest.len,
4571 tdata->cipher_iv.len);
4576 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4577 if (op_mode == OUT_OF_PLACE)
4578 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4580 /* clear mbuf payload */
4581 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4582 rte_pktmbuf_tailroom(ut_params->ibuf));
4583 if (op_mode == OUT_OF_PLACE)
4584 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4585 rte_pktmbuf_tailroom(ut_params->obuf));
4587 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4588 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4589 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4590 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4593 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4594 ciphertext_pad_len);
4595 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4596 if (op_mode == OUT_OF_PLACE)
4597 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4598 debug_hexdump(stdout, "ciphertext:", ciphertext,
4601 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4603 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4604 if (op_mode == OUT_OF_PLACE)
4605 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4606 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4609 /* Create SNOW 3G operation */
4610 retval = create_wireless_algo_auth_cipher_operation(
4611 tdata->digest.data, tdata->digest.len,
4612 tdata->cipher_iv.data, tdata->cipher_iv.len,
4613 tdata->auth_iv.data, tdata->auth_iv.len,
4614 (tdata->digest.offset_bytes == 0 ?
4615 (verify ? ciphertext_pad_len : plaintext_pad_len)
4616 : tdata->digest.offset_bytes),
4617 tdata->validCipherLenInBits.len,
4618 tdata->cipher.offset_bits,
4619 tdata->validAuthLenInBits.len,
4620 tdata->auth.offset_bits,
4621 op_mode, 0, verify);
4626 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4627 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
4628 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
4630 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4633 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4635 ut_params->obuf = (op_mode == IN_PLACE ?
4636 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4639 if (ut_params->obuf)
4640 plaintext = rte_pktmbuf_mtod(ut_params->obuf,
4643 plaintext = ciphertext +
4644 (tdata->cipher.offset_bits >> 3);
4646 debug_hexdump(stdout, "plaintext:", plaintext,
4647 (tdata->plaintext.len >> 3) - tdata->digest.len);
4648 debug_hexdump(stdout, "plaintext expected:",
4649 tdata->plaintext.data,
4650 (tdata->plaintext.len >> 3) - tdata->digest.len);
4652 if (ut_params->obuf)
4653 ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
4656 ciphertext = plaintext;
4658 debug_hexdump(stdout, "ciphertext:", ciphertext,
4660 debug_hexdump(stdout, "ciphertext expected:",
4661 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4663 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4664 + (tdata->digest.offset_bytes == 0 ?
4665 plaintext_pad_len : tdata->digest.offset_bytes);
4667 debug_hexdump(stdout, "digest:", ut_params->digest,
4669 debug_hexdump(stdout, "digest expected:", tdata->digest.data,
4675 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4677 tdata->plaintext.data,
4678 tdata->plaintext.len >> 3,
4679 "SNOW 3G Plaintext data not as expected");
4681 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4683 tdata->ciphertext.data,
4684 tdata->validDataLenInBits.len,
4685 "SNOW 3G Ciphertext data not as expected");
4687 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4690 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4691 "SNOW 3G Generated auth tag not as expected");
4697 test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,
4698 uint8_t op_mode, uint8_t verify)
4700 struct crypto_testsuite_params *ts_params = &testsuite_params;
4701 struct crypto_unittest_params *ut_params = &unittest_params;
4705 const uint8_t *plaintext = NULL;
4706 const uint8_t *ciphertext = NULL;
4707 const uint8_t *digest = NULL;
4708 unsigned int plaintext_pad_len;
4709 unsigned int plaintext_len;
4710 unsigned int ciphertext_pad_len;
4711 unsigned int ciphertext_len;
4712 uint8_t buffer[10000];
4713 uint8_t digest_buffer[10000];
4715 struct rte_cryptodev_info dev_info;
4717 /* Verify the capabilities */
4718 struct rte_cryptodev_sym_capability_idx cap_idx;
4719 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4720 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
4721 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4724 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4725 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
4726 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4730 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4733 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4735 uint64_t feat_flags = dev_info.feature_flags;
4737 if (op_mode == IN_PLACE) {
4738 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
4739 printf("Device doesn't support in-place scatter-gather "
4740 "in both input and output mbufs.\n");
4743 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4744 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4745 printf("Device doesn't support RAW data-path APIs.\n");
4749 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4751 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
4752 printf("Device doesn't support out-of-place scatter-gather "
4753 "in both input and output mbufs.\n");
4756 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4757 printf("Device doesn't support digest encrypted.\n");
4762 /* Create SNOW 3G session */
4763 retval = create_wireless_algo_auth_cipher_session(
4764 ts_params->valid_devs[0],
4765 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4766 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4767 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4768 : RTE_CRYPTO_AUTH_OP_GENERATE),
4769 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4770 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4771 tdata->key.data, tdata->key.len,
4772 tdata->auth_iv.len, tdata->digest.len,
4773 tdata->cipher_iv.len);
4778 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4779 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4780 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4781 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4783 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4784 plaintext_pad_len, 15, 0);
4785 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4786 "Failed to allocate input buffer in mempool");
4788 if (op_mode == OUT_OF_PLACE) {
4789 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
4790 plaintext_pad_len, 15, 0);
4791 TEST_ASSERT_NOT_NULL(ut_params->obuf,
4792 "Failed to allocate output buffer in mempool");
4796 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
4797 tdata->ciphertext.data);
4798 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4799 ciphertext_len, buffer);
4800 debug_hexdump(stdout, "ciphertext:", ciphertext,
4803 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
4804 tdata->plaintext.data);
4805 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4806 plaintext_len, buffer);
4807 debug_hexdump(stdout, "plaintext:", plaintext,
4810 memset(buffer, 0, sizeof(buffer));
4812 /* Create SNOW 3G operation */
4813 retval = create_wireless_algo_auth_cipher_operation(
4814 tdata->digest.data, tdata->digest.len,
4815 tdata->cipher_iv.data, tdata->cipher_iv.len,
4816 tdata->auth_iv.data, tdata->auth_iv.len,
4817 (tdata->digest.offset_bytes == 0 ?
4818 (verify ? ciphertext_pad_len : plaintext_pad_len)
4819 : tdata->digest.offset_bytes),
4820 tdata->validCipherLenInBits.len,
4821 tdata->cipher.offset_bits,
4822 tdata->validAuthLenInBits.len,
4823 tdata->auth.offset_bits,
4824 op_mode, 1, verify);
4829 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4830 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
4831 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
4833 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4836 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4838 ut_params->obuf = (op_mode == IN_PLACE ?
4839 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4842 if (ut_params->obuf)
4843 plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
4844 plaintext_len, buffer);
4846 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4847 plaintext_len, buffer);
4849 debug_hexdump(stdout, "plaintext:", plaintext,
4850 (tdata->plaintext.len >> 3) - tdata->digest.len);
4851 debug_hexdump(stdout, "plaintext expected:",
4852 tdata->plaintext.data,
4853 (tdata->plaintext.len >> 3) - tdata->digest.len);
4855 if (ut_params->obuf)
4856 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
4857 ciphertext_len, buffer);
4859 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4860 ciphertext_len, buffer);
4862 debug_hexdump(stdout, "ciphertext:", ciphertext,
4864 debug_hexdump(stdout, "ciphertext expected:",
4865 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4867 if (ut_params->obuf)
4868 digest = rte_pktmbuf_read(ut_params->obuf,
4869 (tdata->digest.offset_bytes == 0 ?
4870 plaintext_pad_len : tdata->digest.offset_bytes),
4871 tdata->digest.len, digest_buffer);
4873 digest = rte_pktmbuf_read(ut_params->ibuf,
4874 (tdata->digest.offset_bytes == 0 ?
4875 plaintext_pad_len : tdata->digest.offset_bytes),
4876 tdata->digest.len, digest_buffer);
4878 debug_hexdump(stdout, "digest:", digest,
4880 debug_hexdump(stdout, "digest expected:",
4881 tdata->digest.data, tdata->digest.len);
4886 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4888 tdata->plaintext.data,
4889 tdata->plaintext.len >> 3,
4890 "SNOW 3G Plaintext data not as expected");
4892 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4894 tdata->ciphertext.data,
4895 tdata->validDataLenInBits.len,
4896 "SNOW 3G Ciphertext data not as expected");
4898 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4901 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4902 "SNOW 3G Generated auth tag not as expected");
4908 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata,
4909 uint8_t op_mode, uint8_t verify)
4911 struct crypto_testsuite_params *ts_params = &testsuite_params;
4912 struct crypto_unittest_params *ut_params = &unittest_params;
4916 uint8_t *plaintext = NULL, *ciphertext = NULL;
4917 unsigned int plaintext_pad_len;
4918 unsigned int plaintext_len;
4919 unsigned int ciphertext_pad_len;
4920 unsigned int ciphertext_len;
4922 struct rte_cryptodev_info dev_info;
4924 /* Verify the capabilities */
4925 struct rte_cryptodev_sym_capability_idx cap_idx;
4926 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4927 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9;
4928 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4931 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4932 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
4933 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4937 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4939 uint64_t feat_flags = dev_info.feature_flags;
4941 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
4942 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
4943 printf("Device doesn't support RAW data-path APIs.\n");
4947 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
4950 if (op_mode == OUT_OF_PLACE) {
4951 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
4953 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4954 printf("Device doesn't support digest encrypted.\n");
4959 /* Create KASUMI session */
4960 retval = create_wireless_algo_auth_cipher_session(
4961 ts_params->valid_devs[0],
4962 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4963 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4964 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4965 : RTE_CRYPTO_AUTH_OP_GENERATE),
4966 RTE_CRYPTO_AUTH_KASUMI_F9,
4967 RTE_CRYPTO_CIPHER_KASUMI_F8,
4968 tdata->key.data, tdata->key.len,
4969 0, tdata->digest.len,
4970 tdata->cipher_iv.len);
4975 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4976 if (op_mode == OUT_OF_PLACE)
4977 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4979 /* clear mbuf payload */
4980 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4981 rte_pktmbuf_tailroom(ut_params->ibuf));
4982 if (op_mode == OUT_OF_PLACE)
4983 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4984 rte_pktmbuf_tailroom(ut_params->obuf));
4986 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4987 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4988 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4989 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4992 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4993 ciphertext_pad_len);
4994 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4995 if (op_mode == OUT_OF_PLACE)
4996 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4997 debug_hexdump(stdout, "ciphertext:", ciphertext,
5000 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5002 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5003 if (op_mode == OUT_OF_PLACE)
5004 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
5005 debug_hexdump(stdout, "plaintext:", plaintext,
5009 /* Create KASUMI operation */
5010 retval = create_wireless_algo_auth_cipher_operation(
5011 tdata->digest.data, tdata->digest.len,
5012 tdata->cipher_iv.data, tdata->cipher_iv.len,
5014 (tdata->digest.offset_bytes == 0 ?
5015 (verify ? ciphertext_pad_len : plaintext_pad_len)
5016 : tdata->digest.offset_bytes),
5017 tdata->validCipherLenInBits.len,
5018 tdata->validCipherOffsetInBits.len,
5019 tdata->validAuthLenInBits.len,
5021 op_mode, 0, verify);
5026 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5027 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5028 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
5030 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5033 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5035 ut_params->obuf = (op_mode == IN_PLACE ?
5036 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5040 if (ut_params->obuf)
5041 plaintext = rte_pktmbuf_mtod(ut_params->obuf,
5044 plaintext = ciphertext;
5046 debug_hexdump(stdout, "plaintext:", plaintext,
5047 (tdata->plaintext.len >> 3) - tdata->digest.len);
5048 debug_hexdump(stdout, "plaintext expected:",
5049 tdata->plaintext.data,
5050 (tdata->plaintext.len >> 3) - tdata->digest.len);
5052 if (ut_params->obuf)
5053 ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
5056 ciphertext = plaintext;
5058 debug_hexdump(stdout, "ciphertext:", ciphertext,
5060 debug_hexdump(stdout, "ciphertext expected:",
5061 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5063 ut_params->digest = rte_pktmbuf_mtod(
5064 ut_params->obuf, uint8_t *) +
5065 (tdata->digest.offset_bytes == 0 ?
5066 plaintext_pad_len : tdata->digest.offset_bytes);
5068 debug_hexdump(stdout, "digest:", ut_params->digest,
5070 debug_hexdump(stdout, "digest expected:",
5071 tdata->digest.data, tdata->digest.len);
5076 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5078 tdata->plaintext.data,
5079 tdata->plaintext.len >> 3,
5080 "KASUMI Plaintext data not as expected");
5082 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5084 tdata->ciphertext.data,
5085 tdata->ciphertext.len >> 3,
5086 "KASUMI Ciphertext data not as expected");
5088 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5091 DIGEST_BYTE_LENGTH_KASUMI_F9,
5092 "KASUMI Generated auth tag not as expected");
5098 test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata,
5099 uint8_t op_mode, uint8_t verify)
5101 struct crypto_testsuite_params *ts_params = &testsuite_params;
5102 struct crypto_unittest_params *ut_params = &unittest_params;
5106 const uint8_t *plaintext = NULL;
5107 const uint8_t *ciphertext = NULL;
5108 const uint8_t *digest = NULL;
5109 unsigned int plaintext_pad_len;
5110 unsigned int plaintext_len;
5111 unsigned int ciphertext_pad_len;
5112 unsigned int ciphertext_len;
5113 uint8_t buffer[10000];
5114 uint8_t digest_buffer[10000];
5116 struct rte_cryptodev_info dev_info;
5118 /* Verify the capabilities */
5119 struct rte_cryptodev_sym_capability_idx cap_idx;
5120 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5121 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9;
5122 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5125 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5126 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
5127 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5131 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
5134 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5136 uint64_t feat_flags = dev_info.feature_flags;
5138 if (op_mode == IN_PLACE) {
5139 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5140 printf("Device doesn't support in-place scatter-gather "
5141 "in both input and output mbufs.\n");
5144 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5145 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5146 printf("Device doesn't support RAW data-path APIs.\n");
5150 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5152 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5153 printf("Device doesn't support out-of-place scatter-gather "
5154 "in both input and output mbufs.\n");
5157 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5158 printf("Device doesn't support digest encrypted.\n");
5163 /* Create KASUMI session */
5164 retval = create_wireless_algo_auth_cipher_session(
5165 ts_params->valid_devs[0],
5166 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5167 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5168 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5169 : RTE_CRYPTO_AUTH_OP_GENERATE),
5170 RTE_CRYPTO_AUTH_KASUMI_F9,
5171 RTE_CRYPTO_CIPHER_KASUMI_F8,
5172 tdata->key.data, tdata->key.len,
5173 0, tdata->digest.len,
5174 tdata->cipher_iv.len);
5179 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5180 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5181 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5182 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5184 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5185 plaintext_pad_len, 15, 0);
5186 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5187 "Failed to allocate input buffer in mempool");
5189 if (op_mode == OUT_OF_PLACE) {
5190 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
5191 plaintext_pad_len, 15, 0);
5192 TEST_ASSERT_NOT_NULL(ut_params->obuf,
5193 "Failed to allocate output buffer in mempool");
5197 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
5198 tdata->ciphertext.data);
5199 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5200 ciphertext_len, buffer);
5201 debug_hexdump(stdout, "ciphertext:", ciphertext,
5204 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5205 tdata->plaintext.data);
5206 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5207 plaintext_len, buffer);
5208 debug_hexdump(stdout, "plaintext:", plaintext,
5211 memset(buffer, 0, sizeof(buffer));
5213 /* Create KASUMI operation */
5214 retval = create_wireless_algo_auth_cipher_operation(
5215 tdata->digest.data, tdata->digest.len,
5216 tdata->cipher_iv.data, tdata->cipher_iv.len,
5218 (tdata->digest.offset_bytes == 0 ?
5219 (verify ? ciphertext_pad_len : plaintext_pad_len)
5220 : tdata->digest.offset_bytes),
5221 tdata->validCipherLenInBits.len,
5222 tdata->validCipherOffsetInBits.len,
5223 tdata->validAuthLenInBits.len,
5225 op_mode, 1, verify);
5230 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5231 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5232 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
5234 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5237 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5239 ut_params->obuf = (op_mode == IN_PLACE ?
5240 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5243 if (ut_params->obuf)
5244 plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
5245 plaintext_len, buffer);
5247 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5248 plaintext_len, buffer);
5250 debug_hexdump(stdout, "plaintext:", plaintext,
5251 (tdata->plaintext.len >> 3) - tdata->digest.len);
5252 debug_hexdump(stdout, "plaintext expected:",
5253 tdata->plaintext.data,
5254 (tdata->plaintext.len >> 3) - tdata->digest.len);
5256 if (ut_params->obuf)
5257 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
5258 ciphertext_len, buffer);
5260 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5261 ciphertext_len, buffer);
5263 debug_hexdump(stdout, "ciphertext:", ciphertext,
5265 debug_hexdump(stdout, "ciphertext expected:",
5266 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5268 if (ut_params->obuf)
5269 digest = rte_pktmbuf_read(ut_params->obuf,
5270 (tdata->digest.offset_bytes == 0 ?
5271 plaintext_pad_len : tdata->digest.offset_bytes),
5272 tdata->digest.len, digest_buffer);
5274 digest = rte_pktmbuf_read(ut_params->ibuf,
5275 (tdata->digest.offset_bytes == 0 ?
5276 plaintext_pad_len : tdata->digest.offset_bytes),
5277 tdata->digest.len, digest_buffer);
5279 debug_hexdump(stdout, "digest:", digest,
5281 debug_hexdump(stdout, "digest expected:",
5282 tdata->digest.data, tdata->digest.len);
5287 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5289 tdata->plaintext.data,
5290 tdata->plaintext.len >> 3,
5291 "KASUMI Plaintext data not as expected");
5293 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5295 tdata->ciphertext.data,
5296 tdata->validDataLenInBits.len,
5297 "KASUMI Ciphertext data not as expected");
5299 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5302 DIGEST_BYTE_LENGTH_KASUMI_F9,
5303 "KASUMI Generated auth tag not as expected");
5309 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
5311 struct crypto_testsuite_params *ts_params = &testsuite_params;
5312 struct crypto_unittest_params *ut_params = &unittest_params;
5316 uint8_t *plaintext, *ciphertext;
5317 unsigned plaintext_pad_len;
5318 unsigned plaintext_len;
5319 struct rte_cryptodev_info dev_info;
5321 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5322 uint64_t feat_flags = dev_info.feature_flags;
5324 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5325 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5326 printf("Device doesn't support RAW data-path APIs.\n");
5330 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
5333 /* Verify the capabilities */
5334 struct rte_cryptodev_sym_capability_idx cap_idx;
5335 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5336 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9;
5337 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5340 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5341 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;
5342 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5346 /* Create KASUMI session */
5347 retval = create_wireless_algo_cipher_auth_session(
5348 ts_params->valid_devs[0],
5349 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5350 RTE_CRYPTO_AUTH_OP_GENERATE,
5351 RTE_CRYPTO_AUTH_KASUMI_F9,
5352 RTE_CRYPTO_CIPHER_KASUMI_F8,
5353 tdata->key.data, tdata->key.len,
5354 0, tdata->digest.len,
5355 tdata->cipher_iv.len);
5359 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5361 /* clear mbuf payload */
5362 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5363 rte_pktmbuf_tailroom(ut_params->ibuf));
5365 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5366 /* Append data which is padded to a multiple of */
5367 /* the algorithms block size */
5368 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5369 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5371 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5373 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5375 /* Create KASUMI operation */
5376 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
5377 tdata->digest.len, NULL, 0,
5378 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5379 tdata->cipher_iv.data, tdata->cipher_iv.len,
5380 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
5381 tdata->validCipherOffsetInBits.len,
5382 tdata->validAuthLenInBits.len,
5388 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5389 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5390 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
5392 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5394 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5396 if (ut_params->op->sym->m_dst)
5397 ut_params->obuf = ut_params->op->sym->m_dst;
5399 ut_params->obuf = ut_params->op->sym->m_src;
5401 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5402 tdata->validCipherOffsetInBits.len >> 3);
5404 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5405 + plaintext_pad_len;
5407 const uint8_t *reference_ciphertext = tdata->ciphertext.data +
5408 (tdata->validCipherOffsetInBits.len >> 3);
5410 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5412 reference_ciphertext,
5413 tdata->validCipherLenInBits.len,
5414 "KASUMI Ciphertext data not as expected");
5417 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5420 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
5421 "KASUMI Generated auth tag not as expected");
5426 test_zuc_encryption(const struct wireless_test_data *tdata)
5428 struct crypto_testsuite_params *ts_params = &testsuite_params;
5429 struct crypto_unittest_params *ut_params = &unittest_params;
5432 uint8_t *plaintext, *ciphertext;
5433 unsigned plaintext_pad_len;
5434 unsigned plaintext_len;
5435 struct rte_cryptodev_info dev_info;
5437 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5438 uint64_t feat_flags = dev_info.feature_flags;
5440 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5441 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5442 printf("Device doesn't support RAW data-path APIs.\n");
5446 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
5449 struct rte_cryptodev_sym_capability_idx cap_idx;
5451 /* Check if device supports ZUC EEA3 */
5452 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5453 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5455 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5459 /* Create ZUC session */
5460 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5461 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5462 RTE_CRYPTO_CIPHER_ZUC_EEA3,
5463 tdata->key.data, tdata->key.len,
5464 tdata->cipher_iv.len);
5468 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5470 /* Clear mbuf payload */
5471 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5472 rte_pktmbuf_tailroom(ut_params->ibuf));
5474 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5475 /* Append data which is padded to a multiple */
5476 /* of the algorithms block size */
5477 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5478 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5480 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5482 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5484 /* Create ZUC operation */
5485 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5486 tdata->cipher_iv.len,
5487 tdata->plaintext.len,
5492 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5493 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5494 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
5496 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5498 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5500 ut_params->obuf = ut_params->op->sym->m_dst;
5501 if (ut_params->obuf)
5502 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
5504 ciphertext = plaintext;
5506 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5509 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5511 tdata->ciphertext.data,
5512 tdata->validCipherLenInBits.len,
5513 "ZUC Ciphertext data not as expected");
5518 test_zuc_encryption_sgl(const struct wireless_test_data *tdata)
5520 struct crypto_testsuite_params *ts_params = &testsuite_params;
5521 struct crypto_unittest_params *ut_params = &unittest_params;
5525 unsigned int plaintext_pad_len;
5526 unsigned int plaintext_len;
5527 const uint8_t *ciphertext;
5528 uint8_t ciphertext_buffer[2048];
5529 struct rte_cryptodev_info dev_info;
5531 struct rte_cryptodev_sym_capability_idx cap_idx;
5533 /* Check if device supports ZUC EEA3 */
5534 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5535 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5537 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5541 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
5544 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5546 uint64_t feat_flags = dev_info.feature_flags;
5548 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5549 printf("Device doesn't support in-place scatter-gather. "
5554 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5555 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5556 printf("Device doesn't support RAW data-path APIs.\n");
5560 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5562 /* Append data which is padded to a multiple */
5563 /* of the algorithms block size */
5564 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5566 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5567 plaintext_pad_len, 10, 0);
5569 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5570 tdata->plaintext.data);
5572 /* Create ZUC session */
5573 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5574 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5575 RTE_CRYPTO_CIPHER_ZUC_EEA3,
5576 tdata->key.data, tdata->key.len,
5577 tdata->cipher_iv.len);
5581 /* Clear mbuf payload */
5583 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
5585 /* Create ZUC operation */
5586 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5587 tdata->cipher_iv.len, tdata->plaintext.len,
5592 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5593 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5594 ut_params->op, 1, 0, 1, tdata->cipher_iv.len);
5596 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5598 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5600 ut_params->obuf = ut_params->op->sym->m_dst;
5601 if (ut_params->obuf)
5602 ciphertext = rte_pktmbuf_read(ut_params->obuf,
5603 0, plaintext_len, ciphertext_buffer);
5605 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
5606 0, plaintext_len, ciphertext_buffer);
5609 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5612 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5614 tdata->ciphertext.data,
5615 tdata->validCipherLenInBits.len,
5616 "ZUC Ciphertext data not as expected");
5622 test_zuc_authentication(const struct wireless_test_data *tdata)
5624 struct crypto_testsuite_params *ts_params = &testsuite_params;
5625 struct crypto_unittest_params *ut_params = &unittest_params;
5628 unsigned plaintext_pad_len;
5629 unsigned plaintext_len;
5632 struct rte_cryptodev_sym_capability_idx cap_idx;
5633 struct rte_cryptodev_info dev_info;
5635 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5636 uint64_t feat_flags = dev_info.feature_flags;
5638 if (!(feat_flags & RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA) &&
5639 (tdata->validAuthLenInBits.len % 8 != 0)) {
5640 printf("Device doesn't support NON-Byte Aligned Data.\n");
5644 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5645 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5646 printf("Device doesn't support RAW data-path APIs.\n");
5650 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
5653 /* Check if device supports ZUC EIA3 */
5654 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5655 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5657 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5661 /* Create ZUC session */
5662 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
5663 tdata->key.data, tdata->key.len,
5664 tdata->auth_iv.len, tdata->digest.len,
5665 RTE_CRYPTO_AUTH_OP_GENERATE,
5666 RTE_CRYPTO_AUTH_ZUC_EIA3);
5670 /* alloc mbuf and set payload */
5671 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5673 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5674 rte_pktmbuf_tailroom(ut_params->ibuf));
5676 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5677 /* Append data which is padded to a multiple of */
5678 /* the algorithms block size */
5679 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5680 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5682 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5684 /* Create ZUC operation */
5685 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
5686 tdata->auth_iv.data, tdata->auth_iv.len,
5687 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5688 tdata->validAuthLenInBits.len,
5693 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5694 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5695 ut_params->op, 0, 1, 1, 0);
5697 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5699 ut_params->obuf = ut_params->op->sym->m_src;
5700 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5701 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5702 + plaintext_pad_len;
5705 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5709 "ZUC Generated auth tag not as expected");
5715 test_zuc_auth_cipher(const struct wireless_test_data *tdata,
5716 uint8_t op_mode, uint8_t verify)
5718 struct crypto_testsuite_params *ts_params = &testsuite_params;
5719 struct crypto_unittest_params *ut_params = &unittest_params;
5723 uint8_t *plaintext = NULL, *ciphertext = NULL;
5724 unsigned int plaintext_pad_len;
5725 unsigned int plaintext_len;
5726 unsigned int ciphertext_pad_len;
5727 unsigned int ciphertext_len;
5729 struct rte_cryptodev_info dev_info;
5730 struct rte_cryptodev_sym_capability_idx cap_idx;
5732 /* Check if device supports ZUC EIA3 */
5733 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5734 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5736 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5740 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5742 uint64_t feat_flags = dev_info.feature_flags;
5744 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5745 printf("Device doesn't support digest encrypted.\n");
5748 if (op_mode == IN_PLACE) {
5749 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5750 printf("Device doesn't support in-place scatter-gather "
5751 "in both input and output mbufs.\n");
5755 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5756 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5757 printf("Device doesn't support RAW data-path APIs.\n");
5761 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5763 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5764 printf("Device doesn't support out-of-place scatter-gather "
5765 "in both input and output mbufs.\n");
5770 /* Create ZUC session */
5771 retval = create_wireless_algo_auth_cipher_session(
5772 ts_params->valid_devs[0],
5773 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5774 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5775 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5776 : RTE_CRYPTO_AUTH_OP_GENERATE),
5777 RTE_CRYPTO_AUTH_ZUC_EIA3,
5778 RTE_CRYPTO_CIPHER_ZUC_EEA3,
5779 tdata->key.data, tdata->key.len,
5780 tdata->auth_iv.len, tdata->digest.len,
5781 tdata->cipher_iv.len);
5786 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5787 if (op_mode == OUT_OF_PLACE)
5788 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5790 /* clear mbuf payload */
5791 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5792 rte_pktmbuf_tailroom(ut_params->ibuf));
5793 if (op_mode == OUT_OF_PLACE)
5794 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5795 rte_pktmbuf_tailroom(ut_params->obuf));
5797 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5798 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5799 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5800 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5803 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5804 ciphertext_pad_len);
5805 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
5806 if (op_mode == OUT_OF_PLACE)
5807 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
5808 debug_hexdump(stdout, "ciphertext:", ciphertext,
5811 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5813 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5814 if (op_mode == OUT_OF_PLACE)
5815 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
5816 debug_hexdump(stdout, "plaintext:", plaintext,
5820 /* Create ZUC operation */
5821 retval = create_wireless_algo_auth_cipher_operation(
5822 tdata->digest.data, tdata->digest.len,
5823 tdata->cipher_iv.data, tdata->cipher_iv.len,
5824 tdata->auth_iv.data, tdata->auth_iv.len,
5825 (tdata->digest.offset_bytes == 0 ?
5826 (verify ? ciphertext_pad_len : plaintext_pad_len)
5827 : tdata->digest.offset_bytes),
5828 tdata->validCipherLenInBits.len,
5829 tdata->validCipherOffsetInBits.len,
5830 tdata->validAuthLenInBits.len,
5832 op_mode, 0, verify);
5837 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5838 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
5839 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
5841 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5844 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5846 ut_params->obuf = (op_mode == IN_PLACE ?
5847 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5851 if (ut_params->obuf)
5852 plaintext = rte_pktmbuf_mtod(ut_params->obuf,
5855 plaintext = ciphertext;
5857 debug_hexdump(stdout, "plaintext:", plaintext,
5858 (tdata->plaintext.len >> 3) - tdata->digest.len);
5859 debug_hexdump(stdout, "plaintext expected:",
5860 tdata->plaintext.data,
5861 (tdata->plaintext.len >> 3) - tdata->digest.len);
5863 if (ut_params->obuf)
5864 ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
5867 ciphertext = plaintext;
5869 debug_hexdump(stdout, "ciphertext:", ciphertext,
5871 debug_hexdump(stdout, "ciphertext expected:",
5872 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5874 ut_params->digest = rte_pktmbuf_mtod(
5875 ut_params->obuf, uint8_t *) +
5876 (tdata->digest.offset_bytes == 0 ?
5877 plaintext_pad_len : tdata->digest.offset_bytes);
5879 debug_hexdump(stdout, "digest:", ut_params->digest,
5881 debug_hexdump(stdout, "digest expected:",
5882 tdata->digest.data, tdata->digest.len);
5887 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5889 tdata->plaintext.data,
5890 tdata->plaintext.len >> 3,
5891 "ZUC Plaintext data not as expected");
5893 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5895 tdata->ciphertext.data,
5896 tdata->ciphertext.len >> 3,
5897 "ZUC Ciphertext data not as expected");
5899 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5902 DIGEST_BYTE_LENGTH_KASUMI_F9,
5903 "ZUC Generated auth tag not as expected");
5909 test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata,
5910 uint8_t op_mode, uint8_t verify)
5912 struct crypto_testsuite_params *ts_params = &testsuite_params;
5913 struct crypto_unittest_params *ut_params = &unittest_params;
5917 const uint8_t *plaintext = NULL;
5918 const uint8_t *ciphertext = NULL;
5919 const uint8_t *digest = NULL;
5920 unsigned int plaintext_pad_len;
5921 unsigned int plaintext_len;
5922 unsigned int ciphertext_pad_len;
5923 unsigned int ciphertext_len;
5924 uint8_t buffer[10000];
5925 uint8_t digest_buffer[10000];
5927 struct rte_cryptodev_info dev_info;
5928 struct rte_cryptodev_sym_capability_idx cap_idx;
5930 /* Check if device supports ZUC EIA3 */
5931 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5932 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5934 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5938 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5940 uint64_t feat_flags = dev_info.feature_flags;
5942 if (op_mode == IN_PLACE) {
5943 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5944 printf("Device doesn't support in-place scatter-gather "
5945 "in both input and output mbufs.\n");
5949 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
5950 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
5951 printf("Device doesn't support RAW data-path APIs.\n");
5955 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
5957 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5958 printf("Device doesn't support out-of-place scatter-gather "
5959 "in both input and output mbufs.\n");
5962 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5963 printf("Device doesn't support digest encrypted.\n");
5968 /* Create ZUC session */
5969 retval = create_wireless_algo_auth_cipher_session(
5970 ts_params->valid_devs[0],
5971 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5972 : RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5973 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5974 : RTE_CRYPTO_AUTH_OP_GENERATE),
5975 RTE_CRYPTO_AUTH_ZUC_EIA3,
5976 RTE_CRYPTO_CIPHER_ZUC_EEA3,
5977 tdata->key.data, tdata->key.len,
5978 tdata->auth_iv.len, tdata->digest.len,
5979 tdata->cipher_iv.len);
5984 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5985 plaintext_len = ceil_byte_length(tdata->plaintext.len);
5986 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5987 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5989 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5990 plaintext_pad_len, 15, 0);
5991 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5992 "Failed to allocate input buffer in mempool");
5994 if (op_mode == OUT_OF_PLACE) {
5995 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
5996 plaintext_pad_len, 15, 0);
5997 TEST_ASSERT_NOT_NULL(ut_params->obuf,
5998 "Failed to allocate output buffer in mempool");
6002 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
6003 tdata->ciphertext.data);
6004 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
6005 ciphertext_len, buffer);
6006 debug_hexdump(stdout, "ciphertext:", ciphertext,
6009 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
6010 tdata->plaintext.data);
6011 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
6012 plaintext_len, buffer);
6013 debug_hexdump(stdout, "plaintext:", plaintext,
6016 memset(buffer, 0, sizeof(buffer));
6018 /* Create ZUC operation */
6019 retval = create_wireless_algo_auth_cipher_operation(
6020 tdata->digest.data, tdata->digest.len,
6021 tdata->cipher_iv.data, tdata->cipher_iv.len,
6023 (tdata->digest.offset_bytes == 0 ?
6024 (verify ? ciphertext_pad_len : plaintext_pad_len)
6025 : tdata->digest.offset_bytes),
6026 tdata->validCipherLenInBits.len,
6027 tdata->validCipherOffsetInBits.len,
6028 tdata->validAuthLenInBits.len,
6030 op_mode, 1, verify);
6035 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6036 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
6037 ut_params->op, 1, 1, 1, tdata->cipher_iv.len);
6039 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6042 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
6044 ut_params->obuf = (op_mode == IN_PLACE ?
6045 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
6048 if (ut_params->obuf)
6049 plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
6050 plaintext_len, buffer);
6052 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
6053 plaintext_len, buffer);
6055 debug_hexdump(stdout, "plaintext:", plaintext,
6056 (tdata->plaintext.len >> 3) - tdata->digest.len);
6057 debug_hexdump(stdout, "plaintext expected:",
6058 tdata->plaintext.data,
6059 (tdata->plaintext.len >> 3) - tdata->digest.len);
6061 if (ut_params->obuf)
6062 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
6063 ciphertext_len, buffer);
6065 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
6066 ciphertext_len, buffer);
6068 debug_hexdump(stdout, "ciphertext:", ciphertext,
6070 debug_hexdump(stdout, "ciphertext expected:",
6071 tdata->ciphertext.data, tdata->ciphertext.len >> 3);
6073 if (ut_params->obuf)
6074 digest = rte_pktmbuf_read(ut_params->obuf,
6075 (tdata->digest.offset_bytes == 0 ?
6076 plaintext_pad_len : tdata->digest.offset_bytes),
6077 tdata->digest.len, digest_buffer);
6079 digest = rte_pktmbuf_read(ut_params->ibuf,
6080 (tdata->digest.offset_bytes == 0 ?
6081 plaintext_pad_len : tdata->digest.offset_bytes),
6082 tdata->digest.len, digest_buffer);
6084 debug_hexdump(stdout, "digest:", digest,
6086 debug_hexdump(stdout, "digest expected:",
6087 tdata->digest.data, tdata->digest.len);
6092 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6094 tdata->plaintext.data,
6095 tdata->plaintext.len >> 3,
6096 "ZUC Plaintext data not as expected");
6098 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6100 tdata->ciphertext.data,
6101 tdata->validDataLenInBits.len,
6102 "ZUC Ciphertext data not as expected");
6104 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6107 DIGEST_BYTE_LENGTH_KASUMI_F9,
6108 "ZUC Generated auth tag not as expected");
6114 test_kasumi_encryption_test_case_1(void)
6116 return test_kasumi_encryption(&kasumi_test_case_1);
6120 test_kasumi_encryption_test_case_1_sgl(void)
6122 return test_kasumi_encryption_sgl(&kasumi_test_case_1);
6126 test_kasumi_encryption_test_case_1_oop(void)
6128 return test_kasumi_encryption_oop(&kasumi_test_case_1);
6132 test_kasumi_encryption_test_case_1_oop_sgl(void)
6134 return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
6138 test_kasumi_encryption_test_case_2(void)
6140 return test_kasumi_encryption(&kasumi_test_case_2);
6144 test_kasumi_encryption_test_case_3(void)
6146 return test_kasumi_encryption(&kasumi_test_case_3);
6150 test_kasumi_encryption_test_case_4(void)
6152 return test_kasumi_encryption(&kasumi_test_case_4);
6156 test_kasumi_encryption_test_case_5(void)
6158 return test_kasumi_encryption(&kasumi_test_case_5);
6162 test_kasumi_decryption_test_case_1(void)
6164 return test_kasumi_decryption(&kasumi_test_case_1);
6168 test_kasumi_decryption_test_case_1_oop(void)
6170 return test_kasumi_decryption_oop(&kasumi_test_case_1);
6174 test_kasumi_decryption_test_case_2(void)
6176 return test_kasumi_decryption(&kasumi_test_case_2);
6180 test_kasumi_decryption_test_case_3(void)
6182 /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */
6183 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6185 return test_kasumi_decryption(&kasumi_test_case_3);
6189 test_kasumi_decryption_test_case_4(void)
6191 return test_kasumi_decryption(&kasumi_test_case_4);
6195 test_kasumi_decryption_test_case_5(void)
6197 return test_kasumi_decryption(&kasumi_test_case_5);
6200 test_snow3g_encryption_test_case_1(void)
6202 return test_snow3g_encryption(&snow3g_test_case_1);
6206 test_snow3g_encryption_test_case_1_oop(void)
6208 return test_snow3g_encryption_oop(&snow3g_test_case_1);
6212 test_snow3g_encryption_test_case_1_oop_sgl(void)
6214 return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
6219 test_snow3g_encryption_test_case_1_offset_oop(void)
6221 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
6225 test_snow3g_encryption_test_case_2(void)
6227 return test_snow3g_encryption(&snow3g_test_case_2);
6231 test_snow3g_encryption_test_case_3(void)
6233 return test_snow3g_encryption(&snow3g_test_case_3);
6237 test_snow3g_encryption_test_case_4(void)
6239 return test_snow3g_encryption(&snow3g_test_case_4);
6243 test_snow3g_encryption_test_case_5(void)
6245 return test_snow3g_encryption(&snow3g_test_case_5);
6249 test_snow3g_decryption_test_case_1(void)
6251 return test_snow3g_decryption(&snow3g_test_case_1);
6255 test_snow3g_decryption_test_case_1_oop(void)
6257 return test_snow3g_decryption_oop(&snow3g_test_case_1);
6261 test_snow3g_decryption_test_case_2(void)
6263 return test_snow3g_decryption(&snow3g_test_case_2);
6267 test_snow3g_decryption_test_case_3(void)
6269 return test_snow3g_decryption(&snow3g_test_case_3);
6273 test_snow3g_decryption_test_case_4(void)
6275 return test_snow3g_decryption(&snow3g_test_case_4);
6279 test_snow3g_decryption_test_case_5(void)
6281 return test_snow3g_decryption(&snow3g_test_case_5);
6285 * Function prepares snow3g_hash_test_data from snow3g_test_data.
6286 * Pattern digest from snow3g_test_data must be allocated as
6287 * 4 last bytes in plaintext.
6290 snow3g_hash_test_vector_setup(const struct snow3g_test_data *pattern,
6291 struct snow3g_hash_test_data *output)
6293 if ((pattern != NULL) && (output != NULL)) {
6294 output->key.len = pattern->key.len;
6296 memcpy(output->key.data,
6297 pattern->key.data, pattern->key.len);
6299 output->auth_iv.len = pattern->auth_iv.len;
6301 memcpy(output->auth_iv.data,
6302 pattern->auth_iv.data, pattern->auth_iv.len);
6304 output->plaintext.len = pattern->plaintext.len;
6306 memcpy(output->plaintext.data,
6307 pattern->plaintext.data, pattern->plaintext.len >> 3);
6309 output->digest.len = pattern->digest.len;
6311 memcpy(output->digest.data,
6312 &pattern->plaintext.data[pattern->digest.offset_bytes],
6313 pattern->digest.len);
6315 output->validAuthLenInBits.len =
6316 pattern->validAuthLenInBits.len;
6321 * Test case verify computed cipher and digest from snow3g_test_case_7 data.
6324 test_snow3g_decryption_with_digest_test_case_1(void)
6326 struct snow3g_hash_test_data snow3g_hash_data;
6329 * Function prepare data for hash veryfication test case.
6330 * Digest is allocated in 4 last bytes in plaintext, pattern.
6332 snow3g_hash_test_vector_setup(&snow3g_test_case_7, &snow3g_hash_data);
6334 return test_snow3g_decryption(&snow3g_test_case_7) &
6335 test_snow3g_authentication_verify(&snow3g_hash_data);
6339 test_snow3g_cipher_auth_test_case_1(void)
6341 return test_snow3g_cipher_auth(&snow3g_test_case_3);
6345 test_snow3g_auth_cipher_test_case_1(void)
6347 return test_snow3g_auth_cipher(
6348 &snow3g_auth_cipher_test_case_1, IN_PLACE, 0);
6352 test_snow3g_auth_cipher_test_case_2(void)
6354 return test_snow3g_auth_cipher(
6355 &snow3g_auth_cipher_test_case_2, IN_PLACE, 0);
6359 test_snow3g_auth_cipher_test_case_2_oop(void)
6361 return test_snow3g_auth_cipher(
6362 &snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6366 test_snow3g_auth_cipher_part_digest_enc(void)
6368 return test_snow3g_auth_cipher(
6369 &snow3g_auth_cipher_partial_digest_encryption,
6374 test_snow3g_auth_cipher_part_digest_enc_oop(void)
6376 return test_snow3g_auth_cipher(
6377 &snow3g_auth_cipher_partial_digest_encryption,
6382 test_snow3g_auth_cipher_test_case_3_sgl(void)
6384 /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */
6385 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6387 return test_snow3g_auth_cipher_sgl(
6388 &snow3g_auth_cipher_test_case_3, IN_PLACE, 0);
6392 test_snow3g_auth_cipher_test_case_3_oop_sgl(void)
6394 return test_snow3g_auth_cipher_sgl(
6395 &snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 0);
6399 test_snow3g_auth_cipher_part_digest_enc_sgl(void)
6401 /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */
6402 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6404 return test_snow3g_auth_cipher_sgl(
6405 &snow3g_auth_cipher_partial_digest_encryption,
6410 test_snow3g_auth_cipher_part_digest_enc_oop_sgl(void)
6412 return test_snow3g_auth_cipher_sgl(
6413 &snow3g_auth_cipher_partial_digest_encryption,
6418 test_snow3g_auth_cipher_verify_test_case_1(void)
6420 return test_snow3g_auth_cipher(
6421 &snow3g_auth_cipher_test_case_1, IN_PLACE, 1);
6425 test_snow3g_auth_cipher_verify_test_case_2(void)
6427 return test_snow3g_auth_cipher(
6428 &snow3g_auth_cipher_test_case_2, IN_PLACE, 1);
6432 test_snow3g_auth_cipher_verify_test_case_2_oop(void)
6434 return test_snow3g_auth_cipher(
6435 &snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6439 test_snow3g_auth_cipher_verify_part_digest_enc(void)
6441 return test_snow3g_auth_cipher(
6442 &snow3g_auth_cipher_partial_digest_encryption,
6447 test_snow3g_auth_cipher_verify_part_digest_enc_oop(void)
6449 return test_snow3g_auth_cipher(
6450 &snow3g_auth_cipher_partial_digest_encryption,
6455 test_snow3g_auth_cipher_verify_test_case_3_sgl(void)
6457 return test_snow3g_auth_cipher_sgl(
6458 &snow3g_auth_cipher_test_case_3, IN_PLACE, 1);
6462 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl(void)
6464 return test_snow3g_auth_cipher_sgl(
6465 &snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 1);
6469 test_snow3g_auth_cipher_verify_part_digest_enc_sgl(void)
6471 return test_snow3g_auth_cipher_sgl(
6472 &snow3g_auth_cipher_partial_digest_encryption,
6477 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl(void)
6479 return test_snow3g_auth_cipher_sgl(
6480 &snow3g_auth_cipher_partial_digest_encryption,
6485 test_snow3g_auth_cipher_with_digest_test_case_1(void)
6487 return test_snow3g_auth_cipher(
6488 &snow3g_test_case_7, IN_PLACE, 0);
6492 test_kasumi_auth_cipher_test_case_1(void)
6494 return test_kasumi_auth_cipher(
6495 &kasumi_test_case_3, IN_PLACE, 0);
6499 test_kasumi_auth_cipher_test_case_2(void)
6501 return test_kasumi_auth_cipher(
6502 &kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6506 test_kasumi_auth_cipher_test_case_2_oop(void)
6508 return test_kasumi_auth_cipher(
6509 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6513 test_kasumi_auth_cipher_test_case_2_sgl(void)
6515 return test_kasumi_auth_cipher_sgl(
6516 &kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6520 test_kasumi_auth_cipher_test_case_2_oop_sgl(void)
6522 return test_kasumi_auth_cipher_sgl(
6523 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6527 test_kasumi_auth_cipher_verify_test_case_1(void)
6529 return test_kasumi_auth_cipher(
6530 &kasumi_test_case_3, IN_PLACE, 1);
6534 test_kasumi_auth_cipher_verify_test_case_2(void)
6536 return test_kasumi_auth_cipher(
6537 &kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6541 test_kasumi_auth_cipher_verify_test_case_2_oop(void)
6543 return test_kasumi_auth_cipher(
6544 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6548 test_kasumi_auth_cipher_verify_test_case_2_sgl(void)
6550 return test_kasumi_auth_cipher_sgl(
6551 &kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6555 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl(void)
6557 return test_kasumi_auth_cipher_sgl(
6558 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6562 test_kasumi_cipher_auth_test_case_1(void)
6564 return test_kasumi_cipher_auth(&kasumi_test_case_6);
6568 test_zuc_encryption_test_case_1(void)
6570 return test_zuc_encryption(&zuc_test_case_cipher_193b);
6574 test_zuc_encryption_test_case_2(void)
6576 return test_zuc_encryption(&zuc_test_case_cipher_800b);
6580 test_zuc_encryption_test_case_3(void)
6582 return test_zuc_encryption(&zuc_test_case_cipher_1570b);
6586 test_zuc_encryption_test_case_4(void)
6588 return test_zuc_encryption(&zuc_test_case_cipher_2798b);
6592 test_zuc_encryption_test_case_5(void)
6594 return test_zuc_encryption(&zuc_test_case_cipher_4019b);
6598 test_zuc_encryption_test_case_6_sgl(void)
6600 return test_zuc_encryption_sgl(&zuc_test_case_cipher_193b);
6604 test_zuc_hash_generate_test_case_1(void)
6606 return test_zuc_authentication(&zuc_test_case_auth_1b);
6610 test_zuc_hash_generate_test_case_2(void)
6612 return test_zuc_authentication(&zuc_test_case_auth_90b);
6616 test_zuc_hash_generate_test_case_3(void)
6618 return test_zuc_authentication(&zuc_test_case_auth_577b);
6622 test_zuc_hash_generate_test_case_4(void)
6624 return test_zuc_authentication(&zuc_test_case_auth_2079b);
6628 test_zuc_hash_generate_test_case_5(void)
6630 return test_zuc_authentication(&zuc_test_auth_5670b);
6634 test_zuc_hash_generate_test_case_6(void)
6636 return test_zuc_authentication(&zuc_test_case_auth_128b);
6640 test_zuc_hash_generate_test_case_7(void)
6642 return test_zuc_authentication(&zuc_test_case_auth_2080b);
6646 test_zuc_hash_generate_test_case_8(void)
6648 return test_zuc_authentication(&zuc_test_case_auth_584b);
6652 test_zuc_cipher_auth_test_case_1(void)
6654 return test_zuc_cipher_auth(&zuc_test_case_cipher_200b_auth_200b);
6658 test_zuc_cipher_auth_test_case_2(void)
6660 return test_zuc_cipher_auth(&zuc_test_case_cipher_800b_auth_120b);
6664 test_zuc_auth_cipher_test_case_1(void)
6666 return test_zuc_auth_cipher(
6667 &zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6671 test_zuc_auth_cipher_test_case_1_oop(void)
6673 return test_zuc_auth_cipher(
6674 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6678 test_zuc_auth_cipher_test_case_1_sgl(void)
6680 return test_zuc_auth_cipher_sgl(
6681 &zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6685 test_zuc_auth_cipher_test_case_1_oop_sgl(void)
6687 return test_zuc_auth_cipher_sgl(
6688 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6692 test_zuc_auth_cipher_verify_test_case_1(void)
6694 return test_zuc_auth_cipher(
6695 &zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6699 test_zuc_auth_cipher_verify_test_case_1_oop(void)
6701 return test_zuc_auth_cipher(
6702 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6706 test_zuc_auth_cipher_verify_test_case_1_sgl(void)
6708 return test_zuc_auth_cipher_sgl(
6709 &zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6713 test_zuc_auth_cipher_verify_test_case_1_oop_sgl(void)
6715 return test_zuc_auth_cipher_sgl(
6716 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6720 test_mixed_check_if_unsupported(const struct mixed_cipher_auth_test_data *tdata)
6722 uint8_t dev_id = testsuite_params.valid_devs[0];
6724 struct rte_cryptodev_sym_capability_idx cap_idx;
6726 /* Check if device supports particular cipher algorithm */
6727 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6728 cap_idx.algo.cipher = tdata->cipher_algo;
6729 if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL)
6732 /* Check if device supports particular hash algorithm */
6733 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6734 cap_idx.algo.auth = tdata->auth_algo;
6735 if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL)
6742 test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,
6743 uint8_t op_mode, uint8_t verify)
6745 struct crypto_testsuite_params *ts_params = &testsuite_params;
6746 struct crypto_unittest_params *ut_params = &unittest_params;
6750 uint8_t *plaintext = NULL, *ciphertext = NULL;
6751 unsigned int plaintext_pad_len;
6752 unsigned int plaintext_len;
6753 unsigned int ciphertext_pad_len;
6754 unsigned int ciphertext_len;
6756 struct rte_cryptodev_info dev_info;
6758 /* Check if device supports particular algorithms separately */
6759 if (test_mixed_check_if_unsupported(tdata))
6761 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6764 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
6766 uint64_t feat_flags = dev_info.feature_flags;
6768 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
6769 printf("Device doesn't support digest encrypted.\n");
6773 if (op_mode == OUT_OF_PLACE)
6776 /* Create the session */
6778 retval = create_wireless_algo_cipher_auth_session(
6779 ts_params->valid_devs[0],
6780 RTE_CRYPTO_CIPHER_OP_DECRYPT,
6781 RTE_CRYPTO_AUTH_OP_VERIFY,
6784 tdata->auth_key.data, tdata->auth_key.len,
6785 tdata->auth_iv.len, tdata->digest_enc.len,
6786 tdata->cipher_iv.len);
6788 retval = create_wireless_algo_auth_cipher_session(
6789 ts_params->valid_devs[0],
6790 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6791 RTE_CRYPTO_AUTH_OP_GENERATE,
6794 tdata->auth_key.data, tdata->auth_key.len,
6795 tdata->auth_iv.len, tdata->digest_enc.len,
6796 tdata->cipher_iv.len);
6800 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6801 if (op_mode == OUT_OF_PLACE)
6802 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6804 /* clear mbuf payload */
6805 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6806 rte_pktmbuf_tailroom(ut_params->ibuf));
6807 if (op_mode == OUT_OF_PLACE) {
6809 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
6810 rte_pktmbuf_tailroom(ut_params->obuf));
6813 ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits);
6814 plaintext_len = ceil_byte_length(tdata->plaintext.len_bits);
6815 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
6816 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
6819 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6820 ciphertext_pad_len);
6821 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
6822 if (op_mode == OUT_OF_PLACE)
6823 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
6824 debug_hexdump(stdout, "ciphertext:", ciphertext,
6827 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6829 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
6830 if (op_mode == OUT_OF_PLACE)
6831 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
6832 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
6835 /* Create the operation */
6836 retval = create_wireless_algo_auth_cipher_operation(
6837 tdata->digest_enc.data, tdata->digest_enc.len,
6838 tdata->cipher_iv.data, tdata->cipher_iv.len,
6839 tdata->auth_iv.data, tdata->auth_iv.len,
6840 (tdata->digest_enc.offset == 0 ?
6842 : tdata->digest_enc.offset),
6843 tdata->validCipherLen.len_bits,
6844 tdata->cipher.offset_bits,
6845 tdata->validAuthLen.len_bits,
6846 tdata->auth.offset_bits,
6847 op_mode, 0, verify);
6852 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6855 /* Check if the op failed because the device doesn't */
6856 /* support this particular combination of algorithms */
6857 if (ut_params->op == NULL && ut_params->op->status ==
6858 RTE_CRYPTO_OP_STATUS_INVALID_SESSION) {
6859 printf("Device doesn't support this mixed combination. "
6864 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
6866 ut_params->obuf = (op_mode == IN_PLACE ?
6867 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
6870 if (ut_params->obuf)
6871 plaintext = rte_pktmbuf_mtod(ut_params->obuf,
6874 plaintext = ciphertext +
6875 (tdata->cipher.offset_bits >> 3);
6877 debug_hexdump(stdout, "plaintext:", plaintext,
6878 tdata->plaintext.len_bits >> 3);
6879 debug_hexdump(stdout, "plaintext expected:",
6880 tdata->plaintext.data,
6881 tdata->plaintext.len_bits >> 3);
6883 if (ut_params->obuf)
6884 ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
6887 ciphertext = plaintext;
6889 debug_hexdump(stdout, "ciphertext:", ciphertext,
6891 debug_hexdump(stdout, "ciphertext expected:",
6892 tdata->ciphertext.data,
6893 tdata->ciphertext.len_bits >> 3);
6895 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
6896 + (tdata->digest_enc.offset == 0 ?
6897 plaintext_pad_len : tdata->digest_enc.offset);
6899 debug_hexdump(stdout, "digest:", ut_params->digest,
6900 tdata->digest_enc.len);
6901 debug_hexdump(stdout, "digest expected:",
6902 tdata->digest_enc.data,
6903 tdata->digest_enc.len);
6908 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6910 tdata->plaintext.data,
6911 tdata->plaintext.len_bits >> 3,
6912 "Plaintext data not as expected");
6914 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6916 tdata->ciphertext.data,
6917 tdata->validDataLen.len_bits,
6918 "Ciphertext data not as expected");
6920 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6922 tdata->digest_enc.data,
6923 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
6924 "Generated auth tag not as expected");
6927 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6928 "crypto op processing failed");
6934 test_mixed_auth_cipher_sgl(const struct mixed_cipher_auth_test_data *tdata,
6935 uint8_t op_mode, uint8_t verify)
6937 struct crypto_testsuite_params *ts_params = &testsuite_params;
6938 struct crypto_unittest_params *ut_params = &unittest_params;
6942 const uint8_t *plaintext = NULL;
6943 const uint8_t *ciphertext = NULL;
6944 const uint8_t *digest = NULL;
6945 unsigned int plaintext_pad_len;
6946 unsigned int plaintext_len;
6947 unsigned int ciphertext_pad_len;
6948 unsigned int ciphertext_len;
6949 uint8_t buffer[10000];
6950 uint8_t digest_buffer[10000];
6952 struct rte_cryptodev_info dev_info;
6954 /* Check if device supports particular algorithms */
6955 if (test_mixed_check_if_unsupported(tdata))
6957 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
6960 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
6962 uint64_t feat_flags = dev_info.feature_flags;
6964 if (op_mode == IN_PLACE) {
6965 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
6966 printf("Device doesn't support in-place scatter-gather "
6967 "in both input and output mbufs.\n");
6971 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
6972 printf("Device doesn't support out-of-place scatter-gather "
6973 "in both input and output mbufs.\n");
6976 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
6977 printf("Device doesn't support digest encrypted.\n");
6982 /* Create the session */
6984 retval = create_wireless_algo_cipher_auth_session(
6985 ts_params->valid_devs[0],
6986 RTE_CRYPTO_CIPHER_OP_DECRYPT,
6987 RTE_CRYPTO_AUTH_OP_VERIFY,
6990 tdata->auth_key.data, tdata->auth_key.len,
6991 tdata->auth_iv.len, tdata->digest_enc.len,
6992 tdata->cipher_iv.len);
6994 retval = create_wireless_algo_auth_cipher_session(
6995 ts_params->valid_devs[0],
6996 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6997 RTE_CRYPTO_AUTH_OP_GENERATE,
7000 tdata->auth_key.data, tdata->auth_key.len,
7001 tdata->auth_iv.len, tdata->digest_enc.len,
7002 tdata->cipher_iv.len);
7006 ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits);
7007 plaintext_len = ceil_byte_length(tdata->plaintext.len_bits);
7008 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
7009 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
7011 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
7012 ciphertext_pad_len, 15, 0);
7013 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
7014 "Failed to allocate input buffer in mempool");
7016 if (op_mode == OUT_OF_PLACE) {
7017 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
7018 plaintext_pad_len, 15, 0);
7019 TEST_ASSERT_NOT_NULL(ut_params->obuf,
7020 "Failed to allocate output buffer in mempool");
7024 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
7025 tdata->ciphertext.data);
7026 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
7027 ciphertext_len, buffer);
7028 debug_hexdump(stdout, "ciphertext:", ciphertext,
7031 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
7032 tdata->plaintext.data);
7033 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
7034 plaintext_len, buffer);
7035 debug_hexdump(stdout, "plaintext:", plaintext,
7038 memset(buffer, 0, sizeof(buffer));
7040 /* Create the operation */
7041 retval = create_wireless_algo_auth_cipher_operation(
7042 tdata->digest_enc.data, tdata->digest_enc.len,
7043 tdata->cipher_iv.data, tdata->cipher_iv.len,
7044 tdata->auth_iv.data, tdata->auth_iv.len,
7045 (tdata->digest_enc.offset == 0 ?
7047 : tdata->digest_enc.offset),
7048 tdata->validCipherLen.len_bits,
7049 tdata->cipher.offset_bits,
7050 tdata->validAuthLen.len_bits,
7051 tdata->auth.offset_bits,
7052 op_mode, 1, verify);
7057 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
7060 /* Check if the op failed because the device doesn't */
7061 /* support this particular combination of algorithms */
7062 if (ut_params->op == NULL && ut_params->op->status ==
7063 RTE_CRYPTO_OP_STATUS_INVALID_SESSION) {
7064 printf("Device doesn't support this mixed combination. "
7069 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
7071 ut_params->obuf = (op_mode == IN_PLACE ?
7072 ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
7075 if (ut_params->obuf)
7076 plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
7077 plaintext_len, buffer);
7079 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
7080 plaintext_len, buffer);
7082 debug_hexdump(stdout, "plaintext:", plaintext,
7083 (tdata->plaintext.len_bits >> 3) -
7084 tdata->digest_enc.len);
7085 debug_hexdump(stdout, "plaintext expected:",
7086 tdata->plaintext.data,
7087 (tdata->plaintext.len_bits >> 3) -
7088 tdata->digest_enc.len);
7090 if (ut_params->obuf)
7091 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
7092 ciphertext_len, buffer);
7094 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
7095 ciphertext_len, buffer);
7097 debug_hexdump(stdout, "ciphertext:", ciphertext,
7099 debug_hexdump(stdout, "ciphertext expected:",
7100 tdata->ciphertext.data,
7101 tdata->ciphertext.len_bits >> 3);
7103 if (ut_params->obuf)
7104 digest = rte_pktmbuf_read(ut_params->obuf,
7105 (tdata->digest_enc.offset == 0 ?
7107 tdata->digest_enc.offset),
7108 tdata->digest_enc.len, digest_buffer);
7110 digest = rte_pktmbuf_read(ut_params->ibuf,
7111 (tdata->digest_enc.offset == 0 ?
7113 tdata->digest_enc.offset),
7114 tdata->digest_enc.len, digest_buffer);
7116 debug_hexdump(stdout, "digest:", digest,
7117 tdata->digest_enc.len);
7118 debug_hexdump(stdout, "digest expected:",
7119 tdata->digest_enc.data, tdata->digest_enc.len);
7124 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
7126 tdata->plaintext.data,
7127 tdata->plaintext.len_bits >> 3,
7128 "Plaintext data not as expected");
7130 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
7132 tdata->ciphertext.data,
7133 tdata->validDataLen.len_bits,
7134 "Ciphertext data not as expected");
7135 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7137 tdata->digest_enc.data,
7138 tdata->digest_enc.len,
7139 "Generated auth tag not as expected");
7142 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7143 "crypto op processing failed");
7148 /** AUTH AES CMAC + CIPHER AES CTR */
7151 test_aes_cmac_aes_ctr_digest_enc_test_case_1(void)
7153 return test_mixed_auth_cipher(
7154 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0);
7158 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void)
7160 return test_mixed_auth_cipher(
7161 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7165 test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void)
7167 return test_mixed_auth_cipher_sgl(
7168 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0);
7172 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void)
7174 return test_mixed_auth_cipher_sgl(
7175 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7179 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1(void)
7181 return test_mixed_auth_cipher(
7182 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1);
7186 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void)
7188 return test_mixed_auth_cipher(
7189 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7193 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void)
7195 return test_mixed_auth_cipher_sgl(
7196 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1);
7200 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void)
7202 return test_mixed_auth_cipher_sgl(
7203 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7206 /** MIXED AUTH + CIPHER */
7209 test_auth_zuc_cipher_snow_test_case_1(void)
7211 return test_mixed_auth_cipher(
7212 &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7216 test_verify_auth_zuc_cipher_snow_test_case_1(void)
7218 return test_mixed_auth_cipher(
7219 &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7223 test_auth_aes_cmac_cipher_snow_test_case_1(void)
7225 return test_mixed_auth_cipher(
7226 &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7230 test_verify_auth_aes_cmac_cipher_snow_test_case_1(void)
7232 return test_mixed_auth_cipher(
7233 &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7237 test_auth_zuc_cipher_aes_ctr_test_case_1(void)
7239 return test_mixed_auth_cipher(
7240 &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7244 test_verify_auth_zuc_cipher_aes_ctr_test_case_1(void)
7246 return test_mixed_auth_cipher(
7247 &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7251 test_auth_snow_cipher_aes_ctr_test_case_1(void)
7253 return test_mixed_auth_cipher(
7254 &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7258 test_verify_auth_snow_cipher_aes_ctr_test_case_1(void)
7260 return test_mixed_auth_cipher(
7261 &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7265 test_auth_snow_cipher_zuc_test_case_1(void)
7267 return test_mixed_auth_cipher(
7268 &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7272 test_verify_auth_snow_cipher_zuc_test_case_1(void)
7274 return test_mixed_auth_cipher(
7275 &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7279 test_auth_aes_cmac_cipher_zuc_test_case_1(void)
7281 return test_mixed_auth_cipher(
7282 &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7286 test_verify_auth_aes_cmac_cipher_zuc_test_case_1(void)
7288 return test_mixed_auth_cipher(
7289 &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7293 test_auth_null_cipher_snow_test_case_1(void)
7295 return test_mixed_auth_cipher(
7296 &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7300 test_verify_auth_null_cipher_snow_test_case_1(void)
7302 return test_mixed_auth_cipher(
7303 &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7307 test_auth_null_cipher_zuc_test_case_1(void)
7309 return test_mixed_auth_cipher(
7310 &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7314 test_verify_auth_null_cipher_zuc_test_case_1(void)
7316 return test_mixed_auth_cipher(
7317 &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7321 test_auth_snow_cipher_null_test_case_1(void)
7323 return test_mixed_auth_cipher(
7324 &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7328 test_verify_auth_snow_cipher_null_test_case_1(void)
7330 return test_mixed_auth_cipher(
7331 &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7335 test_auth_zuc_cipher_null_test_case_1(void)
7337 return test_mixed_auth_cipher(
7338 &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7342 test_verify_auth_zuc_cipher_null_test_case_1(void)
7344 return test_mixed_auth_cipher(
7345 &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7349 test_auth_null_cipher_aes_ctr_test_case_1(void)
7351 return test_mixed_auth_cipher(
7352 &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7356 test_verify_auth_null_cipher_aes_ctr_test_case_1(void)
7358 return test_mixed_auth_cipher(
7359 &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7363 test_auth_aes_cmac_cipher_null_test_case_1(void)
7365 return test_mixed_auth_cipher(
7366 &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7370 test_verify_auth_aes_cmac_cipher_null_test_case_1(void)
7372 return test_mixed_auth_cipher(
7373 &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7376 /* ***** AEAD algorithm Tests ***** */
7379 create_aead_session(uint8_t dev_id, enum rte_crypto_aead_algorithm algo,
7380 enum rte_crypto_aead_operation op,
7381 const uint8_t *key, const uint8_t key_len,
7382 const uint16_t aad_len, const uint8_t auth_len,
7385 uint8_t aead_key[key_len];
7387 struct crypto_testsuite_params *ts_params = &testsuite_params;
7388 struct crypto_unittest_params *ut_params = &unittest_params;
7390 memcpy(aead_key, key, key_len);
7392 /* Setup AEAD Parameters */
7393 ut_params->aead_xform.type = RTE_CRYPTO_SYM_XFORM_AEAD;
7394 ut_params->aead_xform.next = NULL;
7395 ut_params->aead_xform.aead.algo = algo;
7396 ut_params->aead_xform.aead.op = op;
7397 ut_params->aead_xform.aead.key.data = aead_key;
7398 ut_params->aead_xform.aead.key.length = key_len;
7399 ut_params->aead_xform.aead.iv.offset = IV_OFFSET;
7400 ut_params->aead_xform.aead.iv.length = iv_len;
7401 ut_params->aead_xform.aead.digest_length = auth_len;
7402 ut_params->aead_xform.aead.aad_length = aad_len;
7404 debug_hexdump(stdout, "key:", key, key_len);
7406 /* Create Crypto session*/
7407 ut_params->sess = rte_cryptodev_sym_session_create(
7408 ts_params->session_mpool);
7410 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
7411 &ut_params->aead_xform,
7412 ts_params->session_priv_mpool);
7414 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
7420 create_aead_xform(struct rte_crypto_op *op,
7421 enum rte_crypto_aead_algorithm algo,
7422 enum rte_crypto_aead_operation aead_op,
7423 uint8_t *key, const uint8_t key_len,
7424 const uint8_t aad_len, const uint8_t auth_len,
7427 TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 1),
7428 "failed to allocate space for crypto transform");
7430 struct rte_crypto_sym_op *sym_op = op->sym;
7432 /* Setup AEAD Parameters */
7433 sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
7434 sym_op->xform->next = NULL;
7435 sym_op->xform->aead.algo = algo;
7436 sym_op->xform->aead.op = aead_op;
7437 sym_op->xform->aead.key.data = key;
7438 sym_op->xform->aead.key.length = key_len;
7439 sym_op->xform->aead.iv.offset = IV_OFFSET;
7440 sym_op->xform->aead.iv.length = iv_len;
7441 sym_op->xform->aead.digest_length = auth_len;
7442 sym_op->xform->aead.aad_length = aad_len;
7444 debug_hexdump(stdout, "key:", key, key_len);
7450 create_aead_operation(enum rte_crypto_aead_operation op,
7451 const struct aead_test_data *tdata)
7453 struct crypto_testsuite_params *ts_params = &testsuite_params;
7454 struct crypto_unittest_params *ut_params = &unittest_params;
7456 uint8_t *plaintext, *ciphertext;
7457 unsigned int aad_pad_len, plaintext_pad_len;
7459 /* Generate Crypto op data structure */
7460 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7461 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7462 TEST_ASSERT_NOT_NULL(ut_params->op,
7463 "Failed to allocate symmetric crypto operation struct");
7465 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7467 /* Append aad data */
7468 if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
7469 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len + 18, 16);
7470 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7472 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
7473 "no room to append aad");
7475 sym_op->aead.aad.phys_addr =
7476 rte_pktmbuf_iova(ut_params->ibuf);
7477 /* Copy AAD 18 bytes after the AAD pointer, according to the API */
7478 memcpy(sym_op->aead.aad.data + 18, tdata->aad.data, tdata->aad.len);
7479 debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
7482 /* Append IV at the end of the crypto operation*/
7483 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
7484 uint8_t *, IV_OFFSET);
7486 /* Copy IV 1 byte after the IV pointer, according to the API */
7487 rte_memcpy(iv_ptr + 1, tdata->iv.data, tdata->iv.len);
7488 debug_hexdump(stdout, "iv:", iv_ptr,
7491 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
7492 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7494 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
7495 "no room to append aad");
7497 sym_op->aead.aad.phys_addr =
7498 rte_pktmbuf_iova(ut_params->ibuf);
7499 memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len);
7500 debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
7503 /* Append IV at the end of the crypto operation*/
7504 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
7505 uint8_t *, IV_OFFSET);
7507 if (tdata->iv.len == 0) {
7508 rte_memcpy(iv_ptr, tdata->iv.data, AES_GCM_J0_LENGTH);
7509 debug_hexdump(stdout, "iv:", iv_ptr,
7512 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
7513 debug_hexdump(stdout, "iv:", iv_ptr,
7518 /* Append plaintext/ciphertext */
7519 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
7520 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7521 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7523 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
7525 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
7526 debug_hexdump(stdout, "plaintext:", plaintext,
7527 tdata->plaintext.len);
7529 if (ut_params->obuf) {
7530 ciphertext = (uint8_t *)rte_pktmbuf_append(
7532 plaintext_pad_len + aad_pad_len);
7533 TEST_ASSERT_NOT_NULL(ciphertext,
7534 "no room to append ciphertext");
7536 memset(ciphertext + aad_pad_len, 0,
7537 tdata->ciphertext.len);
7540 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
7541 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7543 TEST_ASSERT_NOT_NULL(ciphertext,
7544 "no room to append ciphertext");
7546 memcpy(ciphertext, tdata->ciphertext.data,
7547 tdata->ciphertext.len);
7548 debug_hexdump(stdout, "ciphertext:", ciphertext,
7549 tdata->ciphertext.len);
7551 if (ut_params->obuf) {
7552 plaintext = (uint8_t *)rte_pktmbuf_append(
7554 plaintext_pad_len + aad_pad_len);
7555 TEST_ASSERT_NOT_NULL(plaintext,
7556 "no room to append plaintext");
7558 memset(plaintext + aad_pad_len, 0,
7559 tdata->plaintext.len);
7563 /* Append digest data */
7564 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
7565 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
7566 ut_params->obuf ? ut_params->obuf :
7568 tdata->auth_tag.len);
7569 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
7570 "no room to append digest");
7571 memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len);
7572 sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
7573 ut_params->obuf ? ut_params->obuf :
7578 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
7579 ut_params->ibuf, tdata->auth_tag.len);
7580 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
7581 "no room to append digest");
7582 sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
7584 plaintext_pad_len + aad_pad_len);
7586 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
7587 tdata->auth_tag.len);
7588 debug_hexdump(stdout, "digest:",
7589 sym_op->aead.digest.data,
7590 tdata->auth_tag.len);
7593 sym_op->aead.data.length = tdata->plaintext.len;
7594 sym_op->aead.data.offset = aad_pad_len;
7600 test_authenticated_encryption(const struct aead_test_data *tdata)
7602 struct crypto_testsuite_params *ts_params = &testsuite_params;
7603 struct crypto_unittest_params *ut_params = &unittest_params;
7606 uint8_t *ciphertext, *auth_tag;
7607 uint16_t plaintext_pad_len;
7609 struct rte_cryptodev_info dev_info;
7611 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
7612 uint64_t feat_flags = dev_info.feature_flags;
7614 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
7615 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
7616 printf("Device doesn't support RAW data-path APIs.\n");
7620 /* Verify the capabilities */
7621 struct rte_cryptodev_sym_capability_idx cap_idx;
7622 const struct rte_cryptodev_symmetric_capability *capability;
7623 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
7624 cap_idx.algo.aead = tdata->algo;
7625 capability = rte_cryptodev_sym_capability_get(
7626 ts_params->valid_devs[0], &cap_idx);
7627 if (capability == NULL)
7629 if (rte_cryptodev_sym_capability_check_aead(
7630 capability, tdata->key.len, tdata->auth_tag.len,
7631 tdata->aad.len, tdata->iv.len))
7634 /* Create AEAD session */
7635 retval = create_aead_session(ts_params->valid_devs[0],
7637 RTE_CRYPTO_AEAD_OP_ENCRYPT,
7638 tdata->key.data, tdata->key.len,
7639 tdata->aad.len, tdata->auth_tag.len,
7644 if (tdata->aad.len > MBUF_SIZE) {
7645 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
7646 /* Populate full size of add data */
7647 for (i = 32; i < MAX_AAD_LENGTH; i += 32)
7648 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
7650 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7652 /* clear mbuf payload */
7653 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7654 rte_pktmbuf_tailroom(ut_params->ibuf));
7656 /* Create AEAD operation */
7657 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
7661 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7663 ut_params->op->sym->m_src = ut_params->ibuf;
7665 /* Process crypto operation */
7666 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
7667 process_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);
7668 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
7669 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
7670 ut_params->op, 0, 0, 0, 0);
7672 TEST_ASSERT_NOT_NULL(
7673 process_crypto_request(ts_params->valid_devs[0],
7674 ut_params->op), "failed to process sym crypto op");
7676 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7677 "crypto op processing failed");
7679 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7681 if (ut_params->op->sym->m_dst) {
7682 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
7684 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7685 uint8_t *, plaintext_pad_len);
7687 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7689 ut_params->op->sym->cipher.data.offset);
7690 auth_tag = ciphertext + plaintext_pad_len;
7693 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
7694 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
7697 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7699 tdata->ciphertext.data,
7700 tdata->ciphertext.len,
7701 "Ciphertext data not as expected");
7703 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7705 tdata->auth_tag.data,
7706 tdata->auth_tag.len,
7707 "Generated auth tag not as expected");
7713 #ifdef RTE_LIB_SECURITY
7715 security_proto_supported(enum rte_security_session_action_type action,
7716 enum rte_security_session_protocol proto)
7718 struct crypto_testsuite_params *ts_params = &testsuite_params;
7720 const struct rte_security_capability *capabilities;
7721 const struct rte_security_capability *capability;
7724 struct rte_security_ctx *ctx = (struct rte_security_ctx *)
7725 rte_cryptodev_get_sec_ctx(
7726 ts_params->valid_devs[0]);
7729 capabilities = rte_security_capabilities_get(ctx);
7731 if (capabilities == NULL)
7734 while ((capability = &capabilities[i++])->action !=
7735 RTE_SECURITY_ACTION_TYPE_NONE) {
7736 if (capability->action == action &&
7737 capability->protocol == proto)
7744 /* Basic algorithm run function for async inplace mode.
7745 * Creates a session from input parameters and runs one operation
7746 * on input_vec. Checks the output of the crypto operation against
7749 static int test_pdcp_proto(int i, int oop, enum rte_crypto_cipher_operation opc,
7750 enum rte_crypto_auth_operation opa,
7751 const uint8_t *input_vec, unsigned int input_vec_len,
7752 const uint8_t *output_vec,
7753 unsigned int output_vec_len,
7754 enum rte_crypto_cipher_algorithm cipher_alg,
7755 const uint8_t *cipher_key, uint32_t cipher_key_len,
7756 enum rte_crypto_auth_algorithm auth_alg,
7757 const uint8_t *auth_key, uint32_t auth_key_len,
7758 uint8_t bearer, enum rte_security_pdcp_domain domain,
7759 uint8_t packet_direction, uint8_t sn_size,
7760 uint32_t hfn, uint32_t hfn_threshold, uint8_t sdap)
7762 struct crypto_testsuite_params *ts_params = &testsuite_params;
7763 struct crypto_unittest_params *ut_params = &unittest_params;
7765 int ret = TEST_SUCCESS;
7766 struct rte_security_ctx *ctx = (struct rte_security_ctx *)
7767 rte_cryptodev_get_sec_ctx(
7768 ts_params->valid_devs[0]);
7770 /* Verify the capabilities */
7771 struct rte_security_capability_idx sec_cap_idx;
7773 sec_cap_idx.action = ut_params->type;
7774 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_PDCP;
7775 sec_cap_idx.pdcp.domain = domain;
7776 if (rte_security_capability_get(ctx, &sec_cap_idx) == NULL)
7779 /* Generate test mbuf data */
7780 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7782 /* clear mbuf payload */
7783 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7784 rte_pktmbuf_tailroom(ut_params->ibuf));
7786 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7788 memcpy(plaintext, input_vec, input_vec_len);
7790 /* Out of place support */
7793 * For out-op-place we need to alloc another mbuf
7795 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7796 rte_pktmbuf_append(ut_params->obuf, output_vec_len);
7799 /* Setup Cipher Parameters */
7800 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
7801 ut_params->cipher_xform.cipher.algo = cipher_alg;
7802 ut_params->cipher_xform.cipher.op = opc;
7803 ut_params->cipher_xform.cipher.key.data = cipher_key;
7804 ut_params->cipher_xform.cipher.key.length = cipher_key_len;
7805 ut_params->cipher_xform.cipher.iv.length =
7806 packet_direction ? 4 : 0;
7807 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
7809 /* Setup HMAC Parameters if ICV header is required */
7810 if (auth_alg != 0) {
7811 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
7812 ut_params->auth_xform.next = NULL;
7813 ut_params->auth_xform.auth.algo = auth_alg;
7814 ut_params->auth_xform.auth.op = opa;
7815 ut_params->auth_xform.auth.key.data = auth_key;
7816 ut_params->auth_xform.auth.key.length = auth_key_len;
7818 ut_params->cipher_xform.next = &ut_params->auth_xform;
7820 ut_params->cipher_xform.next = NULL;
7823 struct rte_security_session_conf sess_conf = {
7824 .action_type = ut_params->type,
7825 .protocol = RTE_SECURITY_PROTOCOL_PDCP,
7829 .pkt_dir = packet_direction,
7831 .hfn = packet_direction ? 0 : hfn,
7833 * hfn can be set as pdcp_test_hfn[i]
7834 * if hfn_ovrd is not set. Here, PDCP
7835 * packet direction is just used to
7836 * run half of the cases with session
7837 * HFN and other half with per packet
7840 .hfn_threshold = hfn_threshold,
7841 .hfn_ovrd = packet_direction ? 1 : 0,
7842 .sdap_enabled = sdap,
7844 .crypto_xform = &ut_params->cipher_xform
7847 /* Create security session */
7848 ut_params->sec_session = rte_security_session_create(ctx,
7849 &sess_conf, ts_params->session_mpool,
7850 ts_params->session_priv_mpool);
7852 if (!ut_params->sec_session) {
7853 printf("TestCase %s()-%d line %d failed %s: ",
7854 __func__, i, __LINE__, "Failed to allocate session");
7859 /* Generate crypto op data structure */
7860 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7861 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7862 if (!ut_params->op) {
7863 printf("TestCase %s()-%d line %d failed %s: ",
7864 __func__, i, __LINE__,
7865 "Failed to allocate symmetric crypto operation struct");
7870 uint32_t *per_pkt_hfn = rte_crypto_op_ctod_offset(ut_params->op,
7871 uint32_t *, IV_OFFSET);
7872 *per_pkt_hfn = packet_direction ? hfn : 0;
7874 rte_security_attach_session(ut_params->op, ut_params->sec_session);
7876 /* set crypto operation source mbuf */
7877 ut_params->op->sym->m_src = ut_params->ibuf;
7879 ut_params->op->sym->m_dst = ut_params->obuf;
7881 /* Process crypto operation */
7882 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op)
7884 printf("TestCase %s()-%d line %d failed %s: ",
7885 __func__, i, __LINE__,
7886 "failed to process sym crypto op");
7891 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
7892 printf("TestCase %s()-%d line %d failed %s: ",
7893 __func__, i, __LINE__, "crypto op processing failed");
7899 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
7902 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
7906 if (memcmp(ciphertext, output_vec, output_vec_len)) {
7907 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
7908 rte_hexdump(stdout, "encrypted", ciphertext, output_vec_len);
7909 rte_hexdump(stdout, "reference", output_vec, output_vec_len);
7915 rte_crypto_op_free(ut_params->op);
7916 ut_params->op = NULL;
7918 if (ut_params->sec_session)
7919 rte_security_session_destroy(ctx, ut_params->sec_session);
7920 ut_params->sec_session = NULL;
7922 rte_pktmbuf_free(ut_params->ibuf);
7923 ut_params->ibuf = NULL;
7925 rte_pktmbuf_free(ut_params->obuf);
7926 ut_params->obuf = NULL;
7933 test_pdcp_proto_SGL(int i, int oop,
7934 enum rte_crypto_cipher_operation opc,
7935 enum rte_crypto_auth_operation opa,
7937 unsigned int input_vec_len,
7938 uint8_t *output_vec,
7939 unsigned int output_vec_len,
7941 uint32_t fragsz_oop)
7943 struct crypto_testsuite_params *ts_params = &testsuite_params;
7944 struct crypto_unittest_params *ut_params = &unittest_params;
7946 struct rte_mbuf *buf, *buf_oop = NULL;
7947 int ret = TEST_SUCCESS;
7951 unsigned int trn_data = 0;
7952 struct rte_security_ctx *ctx = (struct rte_security_ctx *)
7953 rte_cryptodev_get_sec_ctx(
7954 ts_params->valid_devs[0]);
7956 /* Verify the capabilities */
7957 struct rte_security_capability_idx sec_cap_idx;
7959 sec_cap_idx.action = ut_params->type;
7960 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_PDCP;
7961 sec_cap_idx.pdcp.domain = pdcp_test_params[i].domain;
7962 if (rte_security_capability_get(ctx, &sec_cap_idx) == NULL)
7965 if (fragsz > input_vec_len)
7966 fragsz = input_vec_len;
7968 uint16_t plaintext_len = fragsz;
7969 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
7971 if (fragsz_oop > output_vec_len)
7972 frag_size_oop = output_vec_len;
7975 if (input_vec_len % fragsz != 0) {
7976 if (input_vec_len / fragsz + 1 > 16)
7978 } else if (input_vec_len / fragsz > 16)
7981 /* Out of place support */
7984 * For out-op-place we need to alloc another mbuf
7986 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7987 rte_pktmbuf_append(ut_params->obuf, frag_size_oop);
7988 buf_oop = ut_params->obuf;
7991 /* Generate test mbuf data */
7992 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7994 /* clear mbuf payload */
7995 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7996 rte_pktmbuf_tailroom(ut_params->ibuf));
7998 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8000 memcpy(plaintext, input_vec, plaintext_len);
8001 trn_data += plaintext_len;
8003 buf = ut_params->ibuf;
8006 * Loop until no more fragments
8009 while (trn_data < input_vec_len) {
8011 to_trn = (input_vec_len - trn_data < fragsz) ?
8012 (input_vec_len - trn_data) : fragsz;
8014 to_trn_tbl[ecx++] = to_trn;
8016 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8019 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
8020 rte_pktmbuf_tailroom(buf));
8023 if (oop && !fragsz_oop) {
8025 rte_pktmbuf_alloc(ts_params->mbuf_pool);
8026 buf_oop = buf_oop->next;
8027 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
8028 0, rte_pktmbuf_tailroom(buf_oop));
8029 rte_pktmbuf_append(buf_oop, to_trn);
8032 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
8035 memcpy(plaintext, input_vec + trn_data, to_trn);
8039 ut_params->ibuf->nb_segs = segs;
8042 if (fragsz_oop && oop) {
8046 trn_data = frag_size_oop;
8047 while (trn_data < output_vec_len) {
8050 (output_vec_len - trn_data <
8052 (output_vec_len - trn_data) :
8055 to_trn_tbl[ecx++] = to_trn;
8058 rte_pktmbuf_alloc(ts_params->mbuf_pool);
8059 buf_oop = buf_oop->next;
8060 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
8061 0, rte_pktmbuf_tailroom(buf_oop));
8062 rte_pktmbuf_append(buf_oop, to_trn);
8066 ut_params->obuf->nb_segs = segs;
8069 /* Setup Cipher Parameters */
8070 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8071 ut_params->cipher_xform.cipher.algo = pdcp_test_params[i].cipher_alg;
8072 ut_params->cipher_xform.cipher.op = opc;
8073 ut_params->cipher_xform.cipher.key.data = pdcp_test_crypto_key[i];
8074 ut_params->cipher_xform.cipher.key.length =
8075 pdcp_test_params[i].cipher_key_len;
8076 ut_params->cipher_xform.cipher.iv.length = 0;
8078 /* Setup HMAC Parameters if ICV header is required */
8079 if (pdcp_test_params[i].auth_alg != 0) {
8080 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8081 ut_params->auth_xform.next = NULL;
8082 ut_params->auth_xform.auth.algo = pdcp_test_params[i].auth_alg;
8083 ut_params->auth_xform.auth.op = opa;
8084 ut_params->auth_xform.auth.key.data = pdcp_test_auth_key[i];
8085 ut_params->auth_xform.auth.key.length =
8086 pdcp_test_params[i].auth_key_len;
8088 ut_params->cipher_xform.next = &ut_params->auth_xform;
8090 ut_params->cipher_xform.next = NULL;
8093 struct rte_security_session_conf sess_conf = {
8094 .action_type = ut_params->type,
8095 .protocol = RTE_SECURITY_PROTOCOL_PDCP,
8097 .bearer = pdcp_test_bearer[i],
8098 .domain = pdcp_test_params[i].domain,
8099 .pkt_dir = pdcp_test_packet_direction[i],
8100 .sn_size = pdcp_test_data_sn_size[i],
8101 .hfn = pdcp_test_hfn[i],
8102 .hfn_threshold = pdcp_test_hfn_threshold[i],
8105 .crypto_xform = &ut_params->cipher_xform
8108 /* Create security session */
8109 ut_params->sec_session = rte_security_session_create(ctx,
8110 &sess_conf, ts_params->session_mpool,
8111 ts_params->session_priv_mpool);
8113 if (!ut_params->sec_session) {
8114 printf("TestCase %s()-%d line %d failed %s: ",
8115 __func__, i, __LINE__, "Failed to allocate session");
8120 /* Generate crypto op data structure */
8121 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8122 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8123 if (!ut_params->op) {
8124 printf("TestCase %s()-%d line %d failed %s: ",
8125 __func__, i, __LINE__,
8126 "Failed to allocate symmetric crypto operation struct");
8131 rte_security_attach_session(ut_params->op, ut_params->sec_session);
8133 /* set crypto operation source mbuf */
8134 ut_params->op->sym->m_src = ut_params->ibuf;
8136 ut_params->op->sym->m_dst = ut_params->obuf;
8138 /* Process crypto operation */
8139 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op)
8141 printf("TestCase %s()-%d line %d failed %s: ",
8142 __func__, i, __LINE__,
8143 "failed to process sym crypto op");
8148 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
8149 printf("TestCase %s()-%d line %d failed %s: ",
8150 __func__, i, __LINE__, "crypto op processing failed");
8156 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
8159 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
8163 fragsz = frag_size_oop;
8164 if (memcmp(ciphertext, output_vec, fragsz)) {
8165 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
8166 rte_hexdump(stdout, "encrypted", ciphertext, fragsz);
8167 rte_hexdump(stdout, "reference", output_vec, fragsz);
8172 buf = ut_params->op->sym->m_src->next;
8174 buf = ut_params->op->sym->m_dst->next;
8176 unsigned int off = fragsz;
8180 ciphertext = rte_pktmbuf_mtod(buf,
8182 if (memcmp(ciphertext, output_vec + off, to_trn_tbl[ecx])) {
8183 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
8184 rte_hexdump(stdout, "encrypted", ciphertext, to_trn_tbl[ecx]);
8185 rte_hexdump(stdout, "reference", output_vec + off,
8190 off += to_trn_tbl[ecx++];
8194 rte_crypto_op_free(ut_params->op);
8195 ut_params->op = NULL;
8197 if (ut_params->sec_session)
8198 rte_security_session_destroy(ctx, ut_params->sec_session);
8199 ut_params->sec_session = NULL;
8201 rte_pktmbuf_free(ut_params->ibuf);
8202 ut_params->ibuf = NULL;
8204 rte_pktmbuf_free(ut_params->obuf);
8205 ut_params->obuf = NULL;
8212 test_pdcp_proto_cplane_encap(int i)
8214 return test_pdcp_proto(
8215 i, 0, RTE_CRYPTO_CIPHER_OP_ENCRYPT, RTE_CRYPTO_AUTH_OP_GENERATE,
8216 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8217 pdcp_test_data_out[i], pdcp_test_data_in_len[i] + 4,
8218 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8219 pdcp_test_params[i].cipher_key_len,
8220 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8221 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8222 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8223 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8224 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8228 test_pdcp_proto_uplane_encap(int i)
8230 return test_pdcp_proto(
8231 i, 0, RTE_CRYPTO_CIPHER_OP_ENCRYPT, RTE_CRYPTO_AUTH_OP_GENERATE,
8232 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8233 pdcp_test_data_out[i], pdcp_test_data_in_len[i],
8234 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8235 pdcp_test_params[i].cipher_key_len,
8236 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8237 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8238 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8239 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8240 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8244 test_pdcp_proto_uplane_encap_with_int(int i)
8246 return test_pdcp_proto(
8247 i, 0, RTE_CRYPTO_CIPHER_OP_ENCRYPT, RTE_CRYPTO_AUTH_OP_GENERATE,
8248 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8249 pdcp_test_data_out[i], pdcp_test_data_in_len[i] + 4,
8250 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8251 pdcp_test_params[i].cipher_key_len,
8252 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8253 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8254 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8255 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8256 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8260 test_pdcp_proto_cplane_decap(int i)
8262 return test_pdcp_proto(
8263 i, 0, RTE_CRYPTO_CIPHER_OP_DECRYPT, RTE_CRYPTO_AUTH_OP_VERIFY,
8264 pdcp_test_data_out[i], pdcp_test_data_in_len[i] + 4,
8265 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8266 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8267 pdcp_test_params[i].cipher_key_len,
8268 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8269 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8270 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8271 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8272 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8276 test_pdcp_proto_uplane_decap(int i)
8278 return test_pdcp_proto(
8279 i, 0, RTE_CRYPTO_CIPHER_OP_DECRYPT, RTE_CRYPTO_AUTH_OP_VERIFY,
8280 pdcp_test_data_out[i], pdcp_test_data_in_len[i],
8281 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8282 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8283 pdcp_test_params[i].cipher_key_len,
8284 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8285 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8286 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8287 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8288 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8292 test_pdcp_proto_uplane_decap_with_int(int i)
8294 return test_pdcp_proto(
8295 i, 0, RTE_CRYPTO_CIPHER_OP_DECRYPT, RTE_CRYPTO_AUTH_OP_VERIFY,
8296 pdcp_test_data_out[i], pdcp_test_data_in_len[i] + 4,
8297 pdcp_test_data_in[i], pdcp_test_data_in_len[i],
8298 pdcp_test_params[i].cipher_alg, pdcp_test_crypto_key[i],
8299 pdcp_test_params[i].cipher_key_len,
8300 pdcp_test_params[i].auth_alg, pdcp_test_auth_key[i],
8301 pdcp_test_params[i].auth_key_len, pdcp_test_bearer[i],
8302 pdcp_test_params[i].domain, pdcp_test_packet_direction[i],
8303 pdcp_test_data_sn_size[i], pdcp_test_hfn[i],
8304 pdcp_test_hfn_threshold[i], SDAP_DISABLED);
8308 test_PDCP_PROTO_SGL_in_place_32B(void)
8310 /* i can be used for running any PDCP case
8311 * In this case it is uplane 12-bit AES-SNOW DL encap
8313 int i = PDCP_UPLANE_12BIT_OFFSET + AES_ENC + SNOW_AUTH + DOWNLINK;
8314 return test_pdcp_proto_SGL(i, IN_PLACE,
8315 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8316 RTE_CRYPTO_AUTH_OP_GENERATE,
8317 pdcp_test_data_in[i],
8318 pdcp_test_data_in_len[i],
8319 pdcp_test_data_out[i],
8320 pdcp_test_data_in_len[i]+4,
8324 test_PDCP_PROTO_SGL_oop_32B_128B(void)
8326 /* i can be used for running any PDCP case
8327 * In this case it is uplane 18-bit NULL-NULL DL encap
8329 int i = PDCP_UPLANE_18BIT_OFFSET + NULL_ENC + NULL_AUTH + DOWNLINK;
8330 return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8331 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8332 RTE_CRYPTO_AUTH_OP_GENERATE,
8333 pdcp_test_data_in[i],
8334 pdcp_test_data_in_len[i],
8335 pdcp_test_data_out[i],
8336 pdcp_test_data_in_len[i]+4,
8340 test_PDCP_PROTO_SGL_oop_32B_40B(void)
8342 /* i can be used for running any PDCP case
8343 * In this case it is uplane 18-bit AES DL encap
8345 int i = PDCP_UPLANE_OFFSET + AES_ENC + EIGHTEEN_BIT_SEQ_NUM_OFFSET
8347 return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8348 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8349 RTE_CRYPTO_AUTH_OP_GENERATE,
8350 pdcp_test_data_in[i],
8351 pdcp_test_data_in_len[i],
8352 pdcp_test_data_out[i],
8353 pdcp_test_data_in_len[i],
8357 test_PDCP_PROTO_SGL_oop_128B_32B(void)
8359 /* i can be used for running any PDCP case
8360 * In this case it is cplane 12-bit AES-ZUC DL encap
8362 int i = PDCP_CPLANE_LONG_SN_OFFSET + AES_ENC + ZUC_AUTH + DOWNLINK;
8363 return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8364 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8365 RTE_CRYPTO_AUTH_OP_GENERATE,
8366 pdcp_test_data_in[i],
8367 pdcp_test_data_in_len[i],
8368 pdcp_test_data_out[i],
8369 pdcp_test_data_in_len[i]+4,
8374 test_PDCP_SDAP_PROTO_encap_all(void)
8376 int i = 0, size = 0;
8377 int err, all_err = TEST_SUCCESS;
8378 const struct pdcp_sdap_test *cur_test;
8380 size = ARRAY_SIZE(list_pdcp_sdap_tests);
8382 for (i = 0; i < size; i++) {
8383 cur_test = &list_pdcp_sdap_tests[i];
8384 err = test_pdcp_proto(
8385 i, 0, RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8386 RTE_CRYPTO_AUTH_OP_GENERATE, cur_test->data_in,
8387 cur_test->in_len, cur_test->data_out,
8388 cur_test->in_len + ((cur_test->auth_key) ? 4 : 0),
8389 cur_test->param.cipher_alg, cur_test->cipher_key,
8390 cur_test->param.cipher_key_len,
8391 cur_test->param.auth_alg,
8392 cur_test->auth_key, cur_test->param.auth_key_len,
8393 cur_test->bearer, cur_test->param.domain,
8394 cur_test->packet_direction, cur_test->sn_size,
8396 cur_test->hfn_threshold, SDAP_ENABLED);
8398 printf("\t%d) %s: Encapsulation failed\n",
8400 cur_test->param.name);
8403 printf("\t%d) %s: Encap PASS\n", cur_test->test_idx,
8404 cur_test->param.name);
8410 printf("Success: %d, Failure: %d\n", size + all_err, -all_err);
8412 return (all_err == TEST_SUCCESS) ? TEST_SUCCESS : TEST_FAILED;
8416 test_PDCP_SDAP_PROTO_decap_all(void)
8418 int i = 0, size = 0;
8419 int err, all_err = TEST_SUCCESS;
8420 const struct pdcp_sdap_test *cur_test;
8422 size = ARRAY_SIZE(list_pdcp_sdap_tests);
8424 for (i = 0; i < size; i++) {
8425 cur_test = &list_pdcp_sdap_tests[i];
8426 err = test_pdcp_proto(
8427 i, 0, RTE_CRYPTO_CIPHER_OP_DECRYPT,
8428 RTE_CRYPTO_AUTH_OP_VERIFY,
8430 cur_test->in_len + ((cur_test->auth_key) ? 4 : 0),
8431 cur_test->data_in, cur_test->in_len,
8432 cur_test->param.cipher_alg,
8433 cur_test->cipher_key, cur_test->param.cipher_key_len,
8434 cur_test->param.auth_alg, cur_test->auth_key,
8435 cur_test->param.auth_key_len, cur_test->bearer,
8436 cur_test->param.domain, cur_test->packet_direction,
8437 cur_test->sn_size, cur_test->hfn,
8438 cur_test->hfn_threshold, SDAP_ENABLED);
8440 printf("\t%d) %s: Decapsulation failed\n",
8442 cur_test->param.name);
8445 printf("\t%d) %s: Decap PASS\n", cur_test->test_idx,
8446 cur_test->param.name);
8452 printf("Success: %d, Failure: %d\n", size + all_err, -all_err);
8454 return (all_err == TEST_SUCCESS) ? TEST_SUCCESS : TEST_FAILED;
8458 test_PDCP_PROTO_all(void)
8460 struct crypto_testsuite_params *ts_params = &testsuite_params;
8461 struct crypto_unittest_params *ut_params = &unittest_params;
8462 struct rte_cryptodev_info dev_info;
8465 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
8466 uint64_t feat_flags = dev_info.feature_flags;
8468 if (!(feat_flags & RTE_CRYPTODEV_FF_SECURITY))
8471 /* Set action type */
8472 ut_params->type = gbl_action_type == RTE_SECURITY_ACTION_TYPE_NONE ?
8473 RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL :
8476 if (security_proto_supported(ut_params->type,
8477 RTE_SECURITY_PROTOCOL_PDCP) < 0)
8480 status = test_PDCP_PROTO_cplane_encap_all();
8481 status += test_PDCP_PROTO_cplane_decap_all();
8482 status += test_PDCP_PROTO_uplane_encap_all();
8483 status += test_PDCP_PROTO_uplane_decap_all();
8484 status += test_PDCP_PROTO_SGL_in_place_32B();
8485 status += test_PDCP_PROTO_SGL_oop_32B_128B();
8486 status += test_PDCP_PROTO_SGL_oop_32B_40B();
8487 status += test_PDCP_PROTO_SGL_oop_128B_32B();
8488 status += test_PDCP_SDAP_PROTO_encap_all();
8489 status += test_PDCP_SDAP_PROTO_decap_all();
8494 return TEST_SUCCESS;
8498 test_docsis_proto_uplink(int i, struct docsis_test_data *d_td)
8500 struct crypto_testsuite_params *ts_params = &testsuite_params;
8501 struct crypto_unittest_params *ut_params = &unittest_params;
8502 uint8_t *plaintext, *ciphertext;
8504 int32_t cipher_len, crc_len;
8505 uint32_t crc_data_len;
8506 int ret = TEST_SUCCESS;
8508 struct rte_security_ctx *ctx = (struct rte_security_ctx *)
8509 rte_cryptodev_get_sec_ctx(
8510 ts_params->valid_devs[0]);
8512 /* Verify the capabilities */
8513 struct rte_security_capability_idx sec_cap_idx;
8514 const struct rte_security_capability *sec_cap;
8515 const struct rte_cryptodev_capabilities *crypto_cap;
8516 const struct rte_cryptodev_symmetric_capability *sym_cap;
8519 sec_cap_idx.action = ut_params->type;
8520 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_DOCSIS;
8521 sec_cap_idx.docsis.direction = RTE_SECURITY_DOCSIS_UPLINK;
8523 sec_cap = rte_security_capability_get(ctx, &sec_cap_idx);
8524 if (sec_cap == NULL)
8527 while ((crypto_cap = &sec_cap->crypto_capabilities[j++])->op !=
8528 RTE_CRYPTO_OP_TYPE_UNDEFINED) {
8529 if (crypto_cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
8530 crypto_cap->sym.xform_type ==
8531 RTE_CRYPTO_SYM_XFORM_CIPHER &&
8532 crypto_cap->sym.cipher.algo ==
8533 RTE_CRYPTO_CIPHER_AES_DOCSISBPI) {
8534 sym_cap = &crypto_cap->sym;
8535 if (rte_cryptodev_sym_capability_check_cipher(sym_cap,
8542 if (crypto_cap->op == RTE_CRYPTO_OP_TYPE_UNDEFINED)
8545 /* Setup source mbuf payload */
8546 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8547 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8548 rte_pktmbuf_tailroom(ut_params->ibuf));
8550 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8551 d_td->ciphertext.len);
8553 memcpy(ciphertext, d_td->ciphertext.data, d_td->ciphertext.len);
8555 /* Setup cipher session parameters */
8556 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8557 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_DOCSISBPI;
8558 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
8559 ut_params->cipher_xform.cipher.key.data = d_td->key.data;
8560 ut_params->cipher_xform.cipher.key.length = d_td->key.len;
8561 ut_params->cipher_xform.cipher.iv.length = d_td->iv.len;
8562 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
8563 ut_params->cipher_xform.next = NULL;
8565 /* Setup DOCSIS session parameters */
8566 ut_params->docsis_xform.direction = RTE_SECURITY_DOCSIS_UPLINK;
8568 struct rte_security_session_conf sess_conf = {
8569 .action_type = ut_params->type,
8570 .protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
8571 .docsis = ut_params->docsis_xform,
8572 .crypto_xform = &ut_params->cipher_xform,
8575 /* Create security session */
8576 ut_params->sec_session = rte_security_session_create(ctx, &sess_conf,
8577 ts_params->session_mpool,
8578 ts_params->session_priv_mpool);
8580 if (!ut_params->sec_session) {
8581 printf("TestCase %s(%d) line %d: %s\n",
8582 __func__, i, __LINE__, "failed to allocate session");
8587 /* Generate crypto op data structure */
8588 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8589 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8590 if (!ut_params->op) {
8591 printf("TestCase %s(%d) line %d: %s\n",
8592 __func__, i, __LINE__,
8593 "failed to allocate symmetric crypto operation");
8598 /* Setup CRC operation parameters */
8599 crc_len = d_td->ciphertext.no_crc == false ?
8600 (d_td->ciphertext.len -
8601 d_td->ciphertext.crc_offset -
8602 RTE_ETHER_CRC_LEN) :
8604 crc_len = crc_len > 0 ? crc_len : 0;
8605 crc_data_len = crc_len == 0 ? 0 : RTE_ETHER_CRC_LEN;
8606 ut_params->op->sym->auth.data.length = crc_len;
8607 ut_params->op->sym->auth.data.offset = d_td->ciphertext.crc_offset;
8609 /* Setup cipher operation parameters */
8610 cipher_len = d_td->ciphertext.no_cipher == false ?
8611 (d_td->ciphertext.len -
8612 d_td->ciphertext.cipher_offset) :
8614 cipher_len = cipher_len > 0 ? cipher_len : 0;
8615 ut_params->op->sym->cipher.data.length = cipher_len;
8616 ut_params->op->sym->cipher.data.offset = d_td->ciphertext.cipher_offset;
8618 /* Setup cipher IV */
8619 iv_ptr = (uint8_t *)ut_params->op + IV_OFFSET;
8620 rte_memcpy(iv_ptr, d_td->iv.data, d_td->iv.len);
8622 /* Attach session to operation */
8623 rte_security_attach_session(ut_params->op, ut_params->sec_session);
8625 /* Set crypto operation mbufs */
8626 ut_params->op->sym->m_src = ut_params->ibuf;
8627 ut_params->op->sym->m_dst = NULL;
8629 /* Process crypto operation */
8630 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op) ==
8632 printf("TestCase %s(%d) line %d: %s\n",
8633 __func__, i, __LINE__,
8634 "failed to process security crypto op");
8639 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
8640 printf("TestCase %s(%d) line %d: %s\n",
8641 __func__, i, __LINE__, "crypto op processing failed");
8646 /* Validate plaintext */
8647 plaintext = ciphertext;
8649 if (memcmp(plaintext, d_td->plaintext.data,
8650 d_td->plaintext.len - crc_data_len)) {
8651 printf("TestCase %s(%d) line %d: %s\n",
8652 __func__, i, __LINE__, "plaintext not as expected\n");
8653 rte_hexdump(stdout, "expected", d_td->plaintext.data,
8654 d_td->plaintext.len);
8655 rte_hexdump(stdout, "actual", plaintext, d_td->plaintext.len);
8661 rte_crypto_op_free(ut_params->op);
8662 ut_params->op = NULL;
8664 if (ut_params->sec_session)
8665 rte_security_session_destroy(ctx, ut_params->sec_session);
8666 ut_params->sec_session = NULL;
8668 rte_pktmbuf_free(ut_params->ibuf);
8669 ut_params->ibuf = NULL;
8675 test_docsis_proto_downlink(int i, struct docsis_test_data *d_td)
8677 struct crypto_testsuite_params *ts_params = &testsuite_params;
8678 struct crypto_unittest_params *ut_params = &unittest_params;
8679 uint8_t *plaintext, *ciphertext;
8681 int32_t cipher_len, crc_len;
8682 int ret = TEST_SUCCESS;
8684 struct rte_security_ctx *ctx = (struct rte_security_ctx *)
8685 rte_cryptodev_get_sec_ctx(
8686 ts_params->valid_devs[0]);
8688 /* Verify the capabilities */
8689 struct rte_security_capability_idx sec_cap_idx;
8690 const struct rte_security_capability *sec_cap;
8691 const struct rte_cryptodev_capabilities *crypto_cap;
8692 const struct rte_cryptodev_symmetric_capability *sym_cap;
8695 sec_cap_idx.action = ut_params->type;
8696 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_DOCSIS;
8697 sec_cap_idx.docsis.direction = RTE_SECURITY_DOCSIS_DOWNLINK;
8699 sec_cap = rte_security_capability_get(ctx, &sec_cap_idx);
8700 if (sec_cap == NULL)
8703 while ((crypto_cap = &sec_cap->crypto_capabilities[j++])->op !=
8704 RTE_CRYPTO_OP_TYPE_UNDEFINED) {
8705 if (crypto_cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
8706 crypto_cap->sym.xform_type ==
8707 RTE_CRYPTO_SYM_XFORM_CIPHER &&
8708 crypto_cap->sym.cipher.algo ==
8709 RTE_CRYPTO_CIPHER_AES_DOCSISBPI) {
8710 sym_cap = &crypto_cap->sym;
8711 if (rte_cryptodev_sym_capability_check_cipher(sym_cap,
8718 if (crypto_cap->op == RTE_CRYPTO_OP_TYPE_UNDEFINED)
8721 /* Setup source mbuf payload */
8722 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8723 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8724 rte_pktmbuf_tailroom(ut_params->ibuf));
8726 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8727 d_td->plaintext.len);
8729 memcpy(plaintext, d_td->plaintext.data, d_td->plaintext.len);
8731 /* Setup cipher session parameters */
8732 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8733 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_DOCSISBPI;
8734 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8735 ut_params->cipher_xform.cipher.key.data = d_td->key.data;
8736 ut_params->cipher_xform.cipher.key.length = d_td->key.len;
8737 ut_params->cipher_xform.cipher.iv.length = d_td->iv.len;
8738 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
8739 ut_params->cipher_xform.next = NULL;
8741 /* Setup DOCSIS session parameters */
8742 ut_params->docsis_xform.direction = RTE_SECURITY_DOCSIS_DOWNLINK;
8744 struct rte_security_session_conf sess_conf = {
8745 .action_type = ut_params->type,
8746 .protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
8747 .docsis = ut_params->docsis_xform,
8748 .crypto_xform = &ut_params->cipher_xform,
8751 /* Create security session */
8752 ut_params->sec_session = rte_security_session_create(ctx, &sess_conf,
8753 ts_params->session_mpool,
8754 ts_params->session_priv_mpool);
8756 if (!ut_params->sec_session) {
8757 printf("TestCase %s(%d) line %d: %s\n",
8758 __func__, i, __LINE__, "failed to allocate session");
8763 /* Generate crypto op data structure */
8764 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8765 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8766 if (!ut_params->op) {
8767 printf("TestCase %s(%d) line %d: %s\n",
8768 __func__, i, __LINE__,
8769 "failed to allocate security crypto operation");
8774 /* Setup CRC operation parameters */
8775 crc_len = d_td->plaintext.no_crc == false ?
8776 (d_td->plaintext.len -
8777 d_td->plaintext.crc_offset -
8778 RTE_ETHER_CRC_LEN) :
8780 crc_len = crc_len > 0 ? crc_len : 0;
8781 ut_params->op->sym->auth.data.length = crc_len;
8782 ut_params->op->sym->auth.data.offset = d_td->plaintext.crc_offset;
8784 /* Setup cipher operation parameters */
8785 cipher_len = d_td->plaintext.no_cipher == false ?
8786 (d_td->plaintext.len -
8787 d_td->plaintext.cipher_offset) :
8789 cipher_len = cipher_len > 0 ? cipher_len : 0;
8790 ut_params->op->sym->cipher.data.length = cipher_len;
8791 ut_params->op->sym->cipher.data.offset = d_td->plaintext.cipher_offset;
8793 /* Setup cipher IV */
8794 iv_ptr = (uint8_t *)ut_params->op + IV_OFFSET;
8795 rte_memcpy(iv_ptr, d_td->iv.data, d_td->iv.len);
8797 /* Attach session to operation */
8798 rte_security_attach_session(ut_params->op, ut_params->sec_session);
8800 /* Set crypto operation mbufs */
8801 ut_params->op->sym->m_src = ut_params->ibuf;
8802 ut_params->op->sym->m_dst = NULL;
8804 /* Process crypto operation */
8805 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op) ==
8807 printf("TestCase %s(%d) line %d: %s\n",
8808 __func__, i, __LINE__,
8809 "failed to process security crypto op");
8814 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
8815 printf("TestCase %s(%d) line %d: %s\n",
8816 __func__, i, __LINE__, "crypto op processing failed");
8821 /* Validate ciphertext */
8822 ciphertext = plaintext;
8824 if (memcmp(ciphertext, d_td->ciphertext.data, d_td->ciphertext.len)) {
8825 printf("TestCase %s(%d) line %d: %s\n",
8826 __func__, i, __LINE__, "ciphertext not as expected\n");
8827 rte_hexdump(stdout, "expected", d_td->ciphertext.data,
8828 d_td->ciphertext.len);
8829 rte_hexdump(stdout, "actual", ciphertext, d_td->ciphertext.len);
8835 rte_crypto_op_free(ut_params->op);
8836 ut_params->op = NULL;
8838 if (ut_params->sec_session)
8839 rte_security_session_destroy(ctx, ut_params->sec_session);
8840 ut_params->sec_session = NULL;
8842 rte_pktmbuf_free(ut_params->ibuf);
8843 ut_params->ibuf = NULL;
8848 #define TEST_DOCSIS_COUNT(func) do { \
8850 if (ret == TEST_SUCCESS) { \
8851 printf("\t%2d)", n++); \
8852 printf("+++++ PASSED:" #func"\n"); \
8854 } else if (ret == -ENOTSUP) { \
8855 printf("\t%2d)", n++); \
8856 printf("~~~~~ UNSUPP:" #func"\n"); \
8859 printf("\t%2d)", n++); \
8860 printf("----- FAILED:" #func"\n"); \
8866 test_DOCSIS_PROTO_uplink_all(void)
8868 int p = 0, u = 0, f = 0, n = 0;
8870 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(1, &docsis_test_case_1));
8871 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(2, &docsis_test_case_2));
8872 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(3, &docsis_test_case_3));
8873 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(4, &docsis_test_case_4));
8874 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(5, &docsis_test_case_5));
8875 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(6, &docsis_test_case_6));
8876 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(7, &docsis_test_case_7));
8877 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(8, &docsis_test_case_8));
8878 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(9, &docsis_test_case_9));
8879 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(10, &docsis_test_case_10));
8880 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(11, &docsis_test_case_11));
8881 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(12, &docsis_test_case_12));
8882 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(13, &docsis_test_case_13));
8883 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(14, &docsis_test_case_14));
8884 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(15, &docsis_test_case_15));
8885 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(16, &docsis_test_case_16));
8886 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(17, &docsis_test_case_17));
8887 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(18, &docsis_test_case_18));
8888 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(19, &docsis_test_case_19));
8889 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(20, &docsis_test_case_20));
8890 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(21, &docsis_test_case_21));
8891 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(22, &docsis_test_case_22));
8892 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(23, &docsis_test_case_23));
8893 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(24, &docsis_test_case_24));
8894 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(25, &docsis_test_case_25));
8895 TEST_DOCSIS_COUNT(test_docsis_proto_uplink(26, &docsis_test_case_26));
8898 printf("## %s: %d passed out of %d (%d unsupported)\n",
8905 test_DOCSIS_PROTO_downlink_all(void)
8907 int p = 0, u = 0, f = 0, n = 0;
8909 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(1, &docsis_test_case_1));
8910 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(2, &docsis_test_case_2));
8911 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(3, &docsis_test_case_3));
8912 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(4, &docsis_test_case_4));
8913 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(5, &docsis_test_case_5));
8914 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(6, &docsis_test_case_6));
8915 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(7, &docsis_test_case_7));
8916 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(8, &docsis_test_case_8));
8917 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(9, &docsis_test_case_9));
8918 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(10, &docsis_test_case_10));
8919 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(11, &docsis_test_case_11));
8920 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(12, &docsis_test_case_12));
8921 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(13, &docsis_test_case_13));
8922 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(14, &docsis_test_case_14));
8923 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(15, &docsis_test_case_15));
8924 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(16, &docsis_test_case_16));
8925 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(17, &docsis_test_case_17));
8926 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(18, &docsis_test_case_18));
8927 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(19, &docsis_test_case_19));
8928 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(20, &docsis_test_case_20));
8929 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(21, &docsis_test_case_21));
8930 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(22, &docsis_test_case_22));
8931 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(23, &docsis_test_case_23));
8932 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(24, &docsis_test_case_24));
8933 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(25, &docsis_test_case_25));
8934 TEST_DOCSIS_COUNT(test_docsis_proto_downlink(26, &docsis_test_case_26));
8937 printf("## %s: %d passed out of %d (%d unsupported)\n",
8944 test_DOCSIS_PROTO_all(void)
8946 struct crypto_testsuite_params *ts_params = &testsuite_params;
8947 struct crypto_unittest_params *ut_params = &unittest_params;
8948 struct rte_cryptodev_info dev_info;
8951 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
8952 uint64_t feat_flags = dev_info.feature_flags;
8954 if (!(feat_flags & RTE_CRYPTODEV_FF_SECURITY))
8957 /* Set action type */
8958 ut_params->type = gbl_action_type == RTE_SECURITY_ACTION_TYPE_NONE ?
8959 RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL :
8962 if (security_proto_supported(ut_params->type,
8963 RTE_SECURITY_PROTOCOL_DOCSIS) < 0)
8966 status = test_DOCSIS_PROTO_uplink_all();
8967 status += test_DOCSIS_PROTO_downlink_all();
8972 return TEST_SUCCESS;
8977 test_AES_GCM_authenticated_encryption_test_case_1(void)
8979 return test_authenticated_encryption(&gcm_test_case_1);
8983 test_AES_GCM_authenticated_encryption_test_case_2(void)
8985 return test_authenticated_encryption(&gcm_test_case_2);
8989 test_AES_GCM_authenticated_encryption_test_case_3(void)
8991 return test_authenticated_encryption(&gcm_test_case_3);
8995 test_AES_GCM_authenticated_encryption_test_case_4(void)
8997 return test_authenticated_encryption(&gcm_test_case_4);
9001 test_AES_GCM_authenticated_encryption_test_case_5(void)
9003 return test_authenticated_encryption(&gcm_test_case_5);
9007 test_AES_GCM_authenticated_encryption_test_case_6(void)
9009 return test_authenticated_encryption(&gcm_test_case_6);
9013 test_AES_GCM_authenticated_encryption_test_case_7(void)
9015 return test_authenticated_encryption(&gcm_test_case_7);
9019 test_AES_GCM_authenticated_encryption_test_case_8(void)
9021 return test_authenticated_encryption(&gcm_test_case_8);
9025 test_AES_GCM_J0_authenticated_encryption_test_case_1(void)
9027 return test_authenticated_encryption(&gcm_J0_test_case_1);
9031 test_AES_GCM_auth_encryption_test_case_192_1(void)
9033 return test_authenticated_encryption(&gcm_test_case_192_1);
9037 test_AES_GCM_auth_encryption_test_case_192_2(void)
9039 return test_authenticated_encryption(&gcm_test_case_192_2);
9043 test_AES_GCM_auth_encryption_test_case_192_3(void)
9045 return test_authenticated_encryption(&gcm_test_case_192_3);
9049 test_AES_GCM_auth_encryption_test_case_192_4(void)
9051 return test_authenticated_encryption(&gcm_test_case_192_4);
9055 test_AES_GCM_auth_encryption_test_case_192_5(void)
9057 return test_authenticated_encryption(&gcm_test_case_192_5);
9061 test_AES_GCM_auth_encryption_test_case_192_6(void)
9063 return test_authenticated_encryption(&gcm_test_case_192_6);
9067 test_AES_GCM_auth_encryption_test_case_192_7(void)
9069 return test_authenticated_encryption(&gcm_test_case_192_7);
9073 test_AES_GCM_auth_encryption_test_case_256_1(void)
9075 return test_authenticated_encryption(&gcm_test_case_256_1);
9079 test_AES_GCM_auth_encryption_test_case_256_2(void)
9081 return test_authenticated_encryption(&gcm_test_case_256_2);
9085 test_AES_GCM_auth_encryption_test_case_256_3(void)
9087 return test_authenticated_encryption(&gcm_test_case_256_3);
9091 test_AES_GCM_auth_encryption_test_case_256_4(void)
9093 return test_authenticated_encryption(&gcm_test_case_256_4);
9097 test_AES_GCM_auth_encryption_test_case_256_5(void)
9099 return test_authenticated_encryption(&gcm_test_case_256_5);
9103 test_AES_GCM_auth_encryption_test_case_256_6(void)
9105 return test_authenticated_encryption(&gcm_test_case_256_6);
9109 test_AES_GCM_auth_encryption_test_case_256_7(void)
9111 return test_authenticated_encryption(&gcm_test_case_256_7);
9115 test_AES_GCM_auth_encryption_test_case_aad_1(void)
9117 return test_authenticated_encryption(&gcm_test_case_aad_1);
9121 test_AES_GCM_auth_encryption_test_case_aad_2(void)
9123 return test_authenticated_encryption(&gcm_test_case_aad_2);
9127 test_AES_GCM_auth_encryption_fail_iv_corrupt(void)
9129 struct aead_test_data tdata;
9132 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9133 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9134 tdata.iv.data[0] += 1;
9135 res = test_authenticated_encryption(&tdata);
9136 if (res == -ENOTSUP)
9138 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9139 return TEST_SUCCESS;
9143 test_AES_GCM_auth_encryption_fail_in_data_corrupt(void)
9145 struct aead_test_data tdata;
9148 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9149 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9150 tdata.plaintext.data[0] += 1;
9151 res = test_authenticated_encryption(&tdata);
9152 if (res == -ENOTSUP)
9154 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9155 return TEST_SUCCESS;
9159 test_AES_GCM_auth_encryption_fail_out_data_corrupt(void)
9161 struct aead_test_data tdata;
9164 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9165 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9166 tdata.ciphertext.data[0] += 1;
9167 res = test_authenticated_encryption(&tdata);
9168 if (res == -ENOTSUP)
9170 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9171 return TEST_SUCCESS;
9175 test_AES_GCM_auth_encryption_fail_aad_len_corrupt(void)
9177 struct aead_test_data tdata;
9180 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9181 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9183 res = test_authenticated_encryption(&tdata);
9184 if (res == -ENOTSUP)
9186 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9187 return TEST_SUCCESS;
9191 test_AES_GCM_auth_encryption_fail_aad_corrupt(void)
9193 struct aead_test_data tdata;
9194 uint8_t aad[gcm_test_case_7.aad.len];
9197 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9198 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9199 memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len);
9201 tdata.aad.data = aad;
9202 res = test_authenticated_encryption(&tdata);
9203 if (res == -ENOTSUP)
9205 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9206 return TEST_SUCCESS;
9210 test_AES_GCM_auth_encryption_fail_tag_corrupt(void)
9212 struct aead_test_data tdata;
9215 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9216 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9217 tdata.auth_tag.data[0] += 1;
9218 res = test_authenticated_encryption(&tdata);
9219 if (res == -ENOTSUP)
9221 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
9222 return TEST_SUCCESS;
9226 test_authenticated_decryption(const struct aead_test_data *tdata)
9228 struct crypto_testsuite_params *ts_params = &testsuite_params;
9229 struct crypto_unittest_params *ut_params = &unittest_params;
9234 struct rte_cryptodev_info dev_info;
9236 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
9237 uint64_t feat_flags = dev_info.feature_flags;
9239 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
9240 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
9241 printf("Device doesn't support RAW data-path APIs.\n");
9245 /* Verify the capabilities */
9246 struct rte_cryptodev_sym_capability_idx cap_idx;
9247 const struct rte_cryptodev_symmetric_capability *capability;
9248 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
9249 cap_idx.algo.aead = tdata->algo;
9250 capability = rte_cryptodev_sym_capability_get(
9251 ts_params->valid_devs[0], &cap_idx);
9252 if (capability == NULL)
9254 if (rte_cryptodev_sym_capability_check_aead(
9255 capability, tdata->key.len, tdata->auth_tag.len,
9256 tdata->aad.len, tdata->iv.len))
9259 /* Create AEAD session */
9260 retval = create_aead_session(ts_params->valid_devs[0],
9262 RTE_CRYPTO_AEAD_OP_DECRYPT,
9263 tdata->key.data, tdata->key.len,
9264 tdata->aad.len, tdata->auth_tag.len,
9269 /* alloc mbuf and set payload */
9270 if (tdata->aad.len > MBUF_SIZE) {
9271 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
9272 /* Populate full size of add data */
9273 for (i = 32; i < MAX_AAD_LENGTH; i += 32)
9274 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
9276 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9278 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9279 rte_pktmbuf_tailroom(ut_params->ibuf));
9281 /* Create AEAD operation */
9282 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
9286 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9288 ut_params->op->sym->m_src = ut_params->ibuf;
9290 /* Process crypto operation */
9291 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
9292 process_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);
9293 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
9294 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
9295 ut_params->op, 0, 0, 0, 0);
9297 TEST_ASSERT_NOT_NULL(
9298 process_crypto_request(ts_params->valid_devs[0],
9299 ut_params->op), "failed to process sym crypto op");
9301 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9302 "crypto op processing failed");
9304 if (ut_params->op->sym->m_dst)
9305 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
9308 plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
9310 ut_params->op->sym->cipher.data.offset);
9312 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
9315 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9317 tdata->plaintext.data,
9318 tdata->plaintext.len,
9319 "Plaintext data not as expected");
9321 TEST_ASSERT_EQUAL(ut_params->op->status,
9322 RTE_CRYPTO_OP_STATUS_SUCCESS,
9323 "Authentication failed");
9329 test_AES_GCM_authenticated_decryption_test_case_1(void)
9331 return test_authenticated_decryption(&gcm_test_case_1);
9335 test_AES_GCM_authenticated_decryption_test_case_2(void)
9337 return test_authenticated_decryption(&gcm_test_case_2);
9341 test_AES_GCM_authenticated_decryption_test_case_3(void)
9343 return test_authenticated_decryption(&gcm_test_case_3);
9347 test_AES_GCM_authenticated_decryption_test_case_4(void)
9349 return test_authenticated_decryption(&gcm_test_case_4);
9353 test_AES_GCM_authenticated_decryption_test_case_5(void)
9355 return test_authenticated_decryption(&gcm_test_case_5);
9359 test_AES_GCM_authenticated_decryption_test_case_6(void)
9361 return test_authenticated_decryption(&gcm_test_case_6);
9365 test_AES_GCM_authenticated_decryption_test_case_7(void)
9367 return test_authenticated_decryption(&gcm_test_case_7);
9371 test_AES_GCM_authenticated_decryption_test_case_8(void)
9373 return test_authenticated_decryption(&gcm_test_case_8);
9377 test_AES_GCM_J0_authenticated_decryption_test_case_1(void)
9379 return test_authenticated_decryption(&gcm_J0_test_case_1);
9383 test_AES_GCM_auth_decryption_test_case_192_1(void)
9385 return test_authenticated_decryption(&gcm_test_case_192_1);
9389 test_AES_GCM_auth_decryption_test_case_192_2(void)
9391 return test_authenticated_decryption(&gcm_test_case_192_2);
9395 test_AES_GCM_auth_decryption_test_case_192_3(void)
9397 return test_authenticated_decryption(&gcm_test_case_192_3);
9401 test_AES_GCM_auth_decryption_test_case_192_4(void)
9403 return test_authenticated_decryption(&gcm_test_case_192_4);
9407 test_AES_GCM_auth_decryption_test_case_192_5(void)
9409 return test_authenticated_decryption(&gcm_test_case_192_5);
9413 test_AES_GCM_auth_decryption_test_case_192_6(void)
9415 return test_authenticated_decryption(&gcm_test_case_192_6);
9419 test_AES_GCM_auth_decryption_test_case_192_7(void)
9421 return test_authenticated_decryption(&gcm_test_case_192_7);
9425 test_AES_GCM_auth_decryption_test_case_256_1(void)
9427 return test_authenticated_decryption(&gcm_test_case_256_1);
9431 test_AES_GCM_auth_decryption_test_case_256_2(void)
9433 return test_authenticated_decryption(&gcm_test_case_256_2);
9437 test_AES_GCM_auth_decryption_test_case_256_3(void)
9439 return test_authenticated_decryption(&gcm_test_case_256_3);
9443 test_AES_GCM_auth_decryption_test_case_256_4(void)
9445 return test_authenticated_decryption(&gcm_test_case_256_4);
9449 test_AES_GCM_auth_decryption_test_case_256_5(void)
9451 return test_authenticated_decryption(&gcm_test_case_256_5);
9455 test_AES_GCM_auth_decryption_test_case_256_6(void)
9457 return test_authenticated_decryption(&gcm_test_case_256_6);
9461 test_AES_GCM_auth_decryption_test_case_256_7(void)
9463 return test_authenticated_decryption(&gcm_test_case_256_7);
9467 test_AES_GCM_auth_decryption_test_case_aad_1(void)
9469 return test_authenticated_decryption(&gcm_test_case_aad_1);
9473 test_AES_GCM_auth_decryption_test_case_aad_2(void)
9475 return test_authenticated_decryption(&gcm_test_case_aad_2);
9479 test_AES_GCM_auth_decryption_fail_iv_corrupt(void)
9481 struct aead_test_data tdata;
9484 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9485 tdata.iv.data[0] += 1;
9486 res = test_authenticated_decryption(&tdata);
9487 if (res == -ENOTSUP)
9489 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
9490 return TEST_SUCCESS;
9494 test_AES_GCM_auth_decryption_fail_in_data_corrupt(void)
9496 struct aead_test_data tdata;
9499 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
9500 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9501 tdata.plaintext.data[0] += 1;
9502 res = test_authenticated_decryption(&tdata);
9503 if (res == -ENOTSUP)
9505 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
9506 return TEST_SUCCESS;
9510 test_AES_GCM_auth_decryption_fail_out_data_corrupt(void)
9512 struct aead_test_data tdata;
9515 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9516 tdata.ciphertext.data[0] += 1;
9517 res = test_authenticated_decryption(&tdata);
9518 if (res == -ENOTSUP)
9520 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
9521 return TEST_SUCCESS;
9525 test_AES_GCM_auth_decryption_fail_aad_len_corrupt(void)
9527 struct aead_test_data tdata;
9530 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9532 res = test_authenticated_decryption(&tdata);
9533 if (res == -ENOTSUP)
9535 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
9536 return TEST_SUCCESS;
9540 test_AES_GCM_auth_decryption_fail_aad_corrupt(void)
9542 struct aead_test_data tdata;
9543 uint8_t aad[gcm_test_case_7.aad.len];
9546 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9547 memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len);
9549 tdata.aad.data = aad;
9550 res = test_authenticated_decryption(&tdata);
9551 if (res == -ENOTSUP)
9553 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
9554 return TEST_SUCCESS;
9558 test_AES_GCM_auth_decryption_fail_tag_corrupt(void)
9560 struct aead_test_data tdata;
9563 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
9564 tdata.auth_tag.data[0] += 1;
9565 res = test_authenticated_decryption(&tdata);
9566 if (res == -ENOTSUP)
9568 TEST_ASSERT_EQUAL(res, TEST_FAILED, "authentication not failed");
9569 return TEST_SUCCESS;
9573 test_authenticated_encryption_oop(const struct aead_test_data *tdata)
9575 struct crypto_testsuite_params *ts_params = &testsuite_params;
9576 struct crypto_unittest_params *ut_params = &unittest_params;
9579 uint8_t *ciphertext, *auth_tag;
9580 uint16_t plaintext_pad_len;
9582 /* Verify the capabilities */
9583 struct rte_cryptodev_sym_capability_idx cap_idx;
9584 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
9585 cap_idx.algo.aead = tdata->algo;
9586 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
9590 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
9593 /* not supported with CPU crypto */
9594 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
9597 /* Create AEAD session */
9598 retval = create_aead_session(ts_params->valid_devs[0],
9600 RTE_CRYPTO_AEAD_OP_ENCRYPT,
9601 tdata->key.data, tdata->key.len,
9602 tdata->aad.len, tdata->auth_tag.len,
9607 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9608 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9610 /* clear mbuf payload */
9611 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9612 rte_pktmbuf_tailroom(ut_params->ibuf));
9613 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
9614 rte_pktmbuf_tailroom(ut_params->obuf));
9616 /* Create AEAD operation */
9617 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
9621 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9623 ut_params->op->sym->m_src = ut_params->ibuf;
9624 ut_params->op->sym->m_dst = ut_params->obuf;
9626 /* Process crypto operation */
9627 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9628 ut_params->op), "failed to process sym crypto op");
9630 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9631 "crypto op processing failed");
9633 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
9635 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
9636 ut_params->op->sym->cipher.data.offset);
9637 auth_tag = ciphertext + plaintext_pad_len;
9639 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
9640 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
9643 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9645 tdata->ciphertext.data,
9646 tdata->ciphertext.len,
9647 "Ciphertext data not as expected");
9649 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9651 tdata->auth_tag.data,
9652 tdata->auth_tag.len,
9653 "Generated auth tag not as expected");
9660 test_AES_GCM_authenticated_encryption_oop_test_case_1(void)
9662 return test_authenticated_encryption_oop(&gcm_test_case_5);
9666 test_authenticated_decryption_oop(const struct aead_test_data *tdata)
9668 struct crypto_testsuite_params *ts_params = &testsuite_params;
9669 struct crypto_unittest_params *ut_params = &unittest_params;
9674 /* Verify the capabilities */
9675 struct rte_cryptodev_sym_capability_idx cap_idx;
9676 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
9677 cap_idx.algo.aead = tdata->algo;
9678 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
9682 /* not supported with CPU crypto and raw data-path APIs*/
9683 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO ||
9684 global_api_test_type == CRYPTODEV_RAW_API_TEST)
9687 /* Create AEAD session */
9688 retval = create_aead_session(ts_params->valid_devs[0],
9690 RTE_CRYPTO_AEAD_OP_DECRYPT,
9691 tdata->key.data, tdata->key.len,
9692 tdata->aad.len, tdata->auth_tag.len,
9697 /* alloc mbuf and set payload */
9698 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9699 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9701 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9702 rte_pktmbuf_tailroom(ut_params->ibuf));
9703 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
9704 rte_pktmbuf_tailroom(ut_params->obuf));
9706 /* Create AEAD operation */
9707 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
9711 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9713 ut_params->op->sym->m_src = ut_params->ibuf;
9714 ut_params->op->sym->m_dst = ut_params->obuf;
9716 /* Process crypto operation */
9717 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9718 ut_params->op), "failed to process sym crypto op");
9720 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9721 "crypto op processing failed");
9723 plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
9724 ut_params->op->sym->cipher.data.offset);
9726 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
9729 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9731 tdata->plaintext.data,
9732 tdata->plaintext.len,
9733 "Plaintext data not as expected");
9735 TEST_ASSERT_EQUAL(ut_params->op->status,
9736 RTE_CRYPTO_OP_STATUS_SUCCESS,
9737 "Authentication failed");
9742 test_AES_GCM_authenticated_decryption_oop_test_case_1(void)
9744 return test_authenticated_decryption_oop(&gcm_test_case_5);
9748 test_authenticated_encryption_sessionless(
9749 const struct aead_test_data *tdata)
9751 struct crypto_testsuite_params *ts_params = &testsuite_params;
9752 struct crypto_unittest_params *ut_params = &unittest_params;
9755 uint8_t *ciphertext, *auth_tag;
9756 uint16_t plaintext_pad_len;
9757 uint8_t key[tdata->key.len + 1];
9758 struct rte_cryptodev_info dev_info;
9760 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
9761 uint64_t feat_flags = dev_info.feature_flags;
9763 if (!(feat_flags & RTE_CRYPTODEV_FF_SYM_SESSIONLESS)) {
9764 printf("Device doesn't support Sessionless ops.\n");
9768 /* not supported with CPU crypto */
9769 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
9772 /* Verify the capabilities */
9773 struct rte_cryptodev_sym_capability_idx cap_idx;
9774 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
9775 cap_idx.algo.aead = tdata->algo;
9776 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
9780 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9782 /* clear mbuf payload */
9783 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9784 rte_pktmbuf_tailroom(ut_params->ibuf));
9786 /* Create AEAD operation */
9787 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
9791 /* Create GCM xform */
9792 memcpy(key, tdata->key.data, tdata->key.len);
9793 retval = create_aead_xform(ut_params->op,
9795 RTE_CRYPTO_AEAD_OP_ENCRYPT,
9796 key, tdata->key.len,
9797 tdata->aad.len, tdata->auth_tag.len,
9802 ut_params->op->sym->m_src = ut_params->ibuf;
9804 TEST_ASSERT_EQUAL(ut_params->op->sess_type,
9805 RTE_CRYPTO_OP_SESSIONLESS,
9806 "crypto op session type not sessionless");
9808 /* Process crypto operation */
9809 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9810 ut_params->op), "failed to process sym crypto op");
9812 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9814 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9815 "crypto op status not success");
9817 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
9819 ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9820 ut_params->op->sym->cipher.data.offset);
9821 auth_tag = ciphertext + plaintext_pad_len;
9823 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
9824 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
9827 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9829 tdata->ciphertext.data,
9830 tdata->ciphertext.len,
9831 "Ciphertext data not as expected");
9833 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9835 tdata->auth_tag.data,
9836 tdata->auth_tag.len,
9837 "Generated auth tag not as expected");
9844 test_AES_GCM_authenticated_encryption_sessionless_test_case_1(void)
9846 return test_authenticated_encryption_sessionless(
9851 test_authenticated_decryption_sessionless(
9852 const struct aead_test_data *tdata)
9854 struct crypto_testsuite_params *ts_params = &testsuite_params;
9855 struct crypto_unittest_params *ut_params = &unittest_params;
9859 uint8_t key[tdata->key.len + 1];
9860 struct rte_cryptodev_info dev_info;
9862 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
9863 uint64_t feat_flags = dev_info.feature_flags;
9865 if (!(feat_flags & RTE_CRYPTODEV_FF_SYM_SESSIONLESS)) {
9866 printf("Device doesn't support Sessionless ops.\n");
9870 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
9871 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
9872 printf("Device doesn't support RAW data-path APIs.\n");
9876 /* not supported with CPU crypto */
9877 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
9880 /* Verify the capabilities */
9881 struct rte_cryptodev_sym_capability_idx cap_idx;
9882 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
9883 cap_idx.algo.aead = tdata->algo;
9884 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
9888 /* alloc mbuf and set payload */
9889 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9891 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9892 rte_pktmbuf_tailroom(ut_params->ibuf));
9894 /* Create AEAD operation */
9895 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
9899 /* Create AEAD xform */
9900 memcpy(key, tdata->key.data, tdata->key.len);
9901 retval = create_aead_xform(ut_params->op,
9903 RTE_CRYPTO_AEAD_OP_DECRYPT,
9904 key, tdata->key.len,
9905 tdata->aad.len, tdata->auth_tag.len,
9910 ut_params->op->sym->m_src = ut_params->ibuf;
9912 TEST_ASSERT_EQUAL(ut_params->op->sess_type,
9913 RTE_CRYPTO_OP_SESSIONLESS,
9914 "crypto op session type not sessionless");
9916 /* Process crypto operation */
9917 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
9918 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
9919 ut_params->op, 0, 0, 0, 0);
9921 TEST_ASSERT_NOT_NULL(process_crypto_request(
9922 ts_params->valid_devs[0], ut_params->op),
9923 "failed to process sym crypto op");
9925 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9927 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9928 "crypto op status not success");
9930 plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9931 ut_params->op->sym->cipher.data.offset);
9933 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
9936 TEST_ASSERT_BUFFERS_ARE_EQUAL(
9938 tdata->plaintext.data,
9939 tdata->plaintext.len,
9940 "Plaintext data not as expected");
9942 TEST_ASSERT_EQUAL(ut_params->op->status,
9943 RTE_CRYPTO_OP_STATUS_SUCCESS,
9944 "Authentication failed");
9949 test_AES_GCM_authenticated_decryption_sessionless_test_case_1(void)
9951 return test_authenticated_decryption_sessionless(
9956 test_AES_CCM_authenticated_encryption_test_case_128_1(void)
9958 return test_authenticated_encryption(&ccm_test_case_128_1);
9962 test_AES_CCM_authenticated_encryption_test_case_128_2(void)
9964 return test_authenticated_encryption(&ccm_test_case_128_2);
9968 test_AES_CCM_authenticated_encryption_test_case_128_3(void)
9970 return test_authenticated_encryption(&ccm_test_case_128_3);
9974 test_AES_CCM_authenticated_decryption_test_case_128_1(void)
9976 return test_authenticated_decryption(&ccm_test_case_128_1);
9980 test_AES_CCM_authenticated_decryption_test_case_128_2(void)
9982 return test_authenticated_decryption(&ccm_test_case_128_2);
9986 test_AES_CCM_authenticated_decryption_test_case_128_3(void)
9988 return test_authenticated_decryption(&ccm_test_case_128_3);
9992 test_AES_CCM_authenticated_encryption_test_case_192_1(void)
9994 return test_authenticated_encryption(&ccm_test_case_192_1);
9998 test_AES_CCM_authenticated_encryption_test_case_192_2(void)
10000 return test_authenticated_encryption(&ccm_test_case_192_2);
10004 test_AES_CCM_authenticated_encryption_test_case_192_3(void)
10006 return test_authenticated_encryption(&ccm_test_case_192_3);
10010 test_AES_CCM_authenticated_decryption_test_case_192_1(void)
10012 return test_authenticated_decryption(&ccm_test_case_192_1);
10016 test_AES_CCM_authenticated_decryption_test_case_192_2(void)
10018 return test_authenticated_decryption(&ccm_test_case_192_2);
10022 test_AES_CCM_authenticated_decryption_test_case_192_3(void)
10024 return test_authenticated_decryption(&ccm_test_case_192_3);
10028 test_AES_CCM_authenticated_encryption_test_case_256_1(void)
10030 return test_authenticated_encryption(&ccm_test_case_256_1);
10034 test_AES_CCM_authenticated_encryption_test_case_256_2(void)
10036 return test_authenticated_encryption(&ccm_test_case_256_2);
10040 test_AES_CCM_authenticated_encryption_test_case_256_3(void)
10042 return test_authenticated_encryption(&ccm_test_case_256_3);
10046 test_AES_CCM_authenticated_decryption_test_case_256_1(void)
10048 return test_authenticated_decryption(&ccm_test_case_256_1);
10052 test_AES_CCM_authenticated_decryption_test_case_256_2(void)
10054 return test_authenticated_decryption(&ccm_test_case_256_2);
10058 test_AES_CCM_authenticated_decryption_test_case_256_3(void)
10060 return test_authenticated_decryption(&ccm_test_case_256_3);
10066 struct crypto_testsuite_params *ts_params = &testsuite_params;
10067 struct rte_cryptodev_stats stats;
10069 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
10072 /* Verify the capabilities */
10073 struct rte_cryptodev_sym_capability_idx cap_idx;
10074 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10075 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
10076 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10079 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10080 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
10081 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10085 if (rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
10089 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
10090 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
10091 &stats) == -ENODEV),
10092 "rte_cryptodev_stats_get invalid dev failed");
10093 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
10094 "rte_cryptodev_stats_get invalid Param failed");
10096 /* Test expected values */
10097 test_AES_CBC_HMAC_SHA1_encrypt_digest();
10098 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
10100 "rte_cryptodev_stats_get failed");
10101 TEST_ASSERT((stats.enqueued_count == 1),
10102 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10103 TEST_ASSERT((stats.dequeued_count == 1),
10104 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10105 TEST_ASSERT((stats.enqueue_err_count == 0),
10106 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10107 TEST_ASSERT((stats.dequeue_err_count == 0),
10108 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10110 /* invalid device but should ignore and not reset device stats*/
10111 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
10112 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
10114 "rte_cryptodev_stats_get failed");
10115 TEST_ASSERT((stats.enqueued_count == 1),
10116 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10118 /* check that a valid reset clears stats */
10119 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
10120 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
10122 "rte_cryptodev_stats_get failed");
10123 TEST_ASSERT((stats.enqueued_count == 0),
10124 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10125 TEST_ASSERT((stats.dequeued_count == 0),
10126 "rte_cryptodev_stats_get returned unexpected enqueued stat");
10128 return TEST_SUCCESS;
10131 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
10132 struct crypto_unittest_params *ut_params,
10133 enum rte_crypto_auth_operation op,
10134 const struct HMAC_MD5_vector *test_case)
10138 memcpy(key, test_case->key.data, test_case->key.len);
10140 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10141 ut_params->auth_xform.next = NULL;
10142 ut_params->auth_xform.auth.op = op;
10144 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
10146 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
10147 ut_params->auth_xform.auth.key.length = test_case->key.len;
10148 ut_params->auth_xform.auth.key.data = key;
10150 ut_params->sess = rte_cryptodev_sym_session_create(
10151 ts_params->session_mpool);
10153 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10154 ut_params->sess, &ut_params->auth_xform,
10155 ts_params->session_priv_mpool);
10157 if (ut_params->sess == NULL)
10158 return TEST_FAILED;
10160 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10162 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
10163 rte_pktmbuf_tailroom(ut_params->ibuf));
10168 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
10169 const struct HMAC_MD5_vector *test_case,
10170 uint8_t **plaintext)
10172 uint16_t plaintext_pad_len;
10174 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10176 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
10179 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
10180 plaintext_pad_len);
10181 memcpy(*plaintext, test_case->plaintext.data,
10182 test_case->plaintext.len);
10184 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10185 ut_params->ibuf, MD5_DIGEST_LEN);
10186 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10187 "no room to append digest");
10188 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10189 ut_params->ibuf, plaintext_pad_len);
10191 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
10192 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
10193 test_case->auth_tag.len);
10196 sym_op->auth.data.offset = 0;
10197 sym_op->auth.data.length = test_case->plaintext.len;
10199 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10200 ut_params->op->sym->m_src = ut_params->ibuf;
10206 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
10208 uint16_t plaintext_pad_len;
10209 uint8_t *plaintext, *auth_tag;
10211 struct crypto_testsuite_params *ts_params = &testsuite_params;
10212 struct crypto_unittest_params *ut_params = &unittest_params;
10213 struct rte_cryptodev_info dev_info;
10215 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
10216 uint64_t feat_flags = dev_info.feature_flags;
10218 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
10219 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
10220 printf("Device doesn't support RAW data-path APIs.\n");
10224 /* Verify the capabilities */
10225 struct rte_cryptodev_sym_capability_idx cap_idx;
10226 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10227 cap_idx.algo.auth = RTE_CRYPTO_AUTH_MD5_HMAC;
10228 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10232 if (MD5_HMAC_create_session(ts_params, ut_params,
10233 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
10234 return TEST_FAILED;
10236 /* Generate Crypto op data structure */
10237 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10238 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10239 TEST_ASSERT_NOT_NULL(ut_params->op,
10240 "Failed to allocate symmetric crypto operation struct");
10242 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
10245 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
10246 return TEST_FAILED;
10248 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
10249 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
10251 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
10252 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
10253 ut_params->op, 0, 1, 0, 0);
10255 TEST_ASSERT_NOT_NULL(
10256 process_crypto_request(ts_params->valid_devs[0],
10258 "failed to process sym crypto op");
10260 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10261 "crypto op processing failed");
10263 if (ut_params->op->sym->m_dst) {
10264 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
10265 uint8_t *, plaintext_pad_len);
10267 auth_tag = plaintext + plaintext_pad_len;
10270 TEST_ASSERT_BUFFERS_ARE_EQUAL(
10272 test_case->auth_tag.data,
10273 test_case->auth_tag.len,
10274 "HMAC_MD5 generated tag not as expected");
10276 return TEST_SUCCESS;
10280 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
10282 uint8_t *plaintext;
10284 struct crypto_testsuite_params *ts_params = &testsuite_params;
10285 struct crypto_unittest_params *ut_params = &unittest_params;
10286 struct rte_cryptodev_info dev_info;
10288 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
10289 uint64_t feat_flags = dev_info.feature_flags;
10291 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
10292 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
10293 printf("Device doesn't support RAW data-path APIs.\n");
10297 /* Verify the capabilities */
10298 struct rte_cryptodev_sym_capability_idx cap_idx;
10299 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10300 cap_idx.algo.auth = RTE_CRYPTO_AUTH_MD5_HMAC;
10301 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10305 if (MD5_HMAC_create_session(ts_params, ut_params,
10306 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
10307 return TEST_FAILED;
10310 /* Generate Crypto op data structure */
10311 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10312 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10313 TEST_ASSERT_NOT_NULL(ut_params->op,
10314 "Failed to allocate symmetric crypto operation struct");
10316 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
10317 return TEST_FAILED;
10319 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
10320 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
10322 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
10323 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
10324 ut_params->op, 0, 1, 0, 0);
10326 TEST_ASSERT_NOT_NULL(
10327 process_crypto_request(ts_params->valid_devs[0],
10329 "failed to process sym crypto op");
10331 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10332 "HMAC_MD5 crypto op processing failed");
10334 return TEST_SUCCESS;
10338 test_MD5_HMAC_generate_case_1(void)
10340 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
10344 test_MD5_HMAC_verify_case_1(void)
10346 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
10350 test_MD5_HMAC_generate_case_2(void)
10352 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
10356 test_MD5_HMAC_verify_case_2(void)
10358 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
10362 test_multi_session(void)
10364 struct crypto_testsuite_params *ts_params = &testsuite_params;
10365 struct crypto_unittest_params *ut_params = &unittest_params;
10367 struct rte_cryptodev_info dev_info;
10368 struct rte_cryptodev_sym_session **sessions;
10372 /* Verify the capabilities */
10373 struct rte_cryptodev_sym_capability_idx cap_idx;
10374 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10375 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA512_HMAC;
10376 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10379 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10380 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
10381 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10385 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
10386 aes_cbc_key, hmac_sha512_key);
10389 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
10391 sessions = rte_malloc(NULL,
10392 (sizeof(struct rte_cryptodev_sym_session *) *
10393 MAX_NB_SESSIONS) + 1, 0);
10395 /* Create multiple crypto sessions*/
10396 for (i = 0; i < MAX_NB_SESSIONS; i++) {
10398 sessions[i] = rte_cryptodev_sym_session_create(
10399 ts_params->session_mpool);
10401 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10402 sessions[i], &ut_params->auth_xform,
10403 ts_params->session_priv_mpool);
10404 TEST_ASSERT_NOT_NULL(sessions[i],
10405 "Session creation failed at session number %u",
10408 /* Attempt to send a request on each session */
10409 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
10413 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
10414 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
10416 "Failed to perform decrypt on request number %u.", i);
10417 /* free crypto operation structure */
10419 rte_crypto_op_free(ut_params->op);
10422 * free mbuf - both obuf and ibuf are usually the same,
10423 * so check if they point at the same address is necessary,
10424 * to avoid freeing the mbuf twice.
10426 if (ut_params->obuf) {
10427 rte_pktmbuf_free(ut_params->obuf);
10428 if (ut_params->ibuf == ut_params->obuf)
10429 ut_params->ibuf = 0;
10430 ut_params->obuf = 0;
10432 if (ut_params->ibuf) {
10433 rte_pktmbuf_free(ut_params->ibuf);
10434 ut_params->ibuf = 0;
10438 /* Next session create should fail */
10439 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10440 sessions[i], &ut_params->auth_xform,
10441 ts_params->session_priv_mpool);
10442 TEST_ASSERT_NULL(sessions[i],
10443 "Session creation succeeded unexpectedly!");
10445 for (i = 0; i < MAX_NB_SESSIONS; i++) {
10446 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
10448 rte_cryptodev_sym_session_free(sessions[i]);
10451 rte_free(sessions);
10453 return TEST_SUCCESS;
10456 struct multi_session_params {
10457 struct crypto_unittest_params ut_params;
10458 uint8_t *cipher_key;
10460 const uint8_t *cipher;
10461 const uint8_t *digest;
10465 #define MB_SESSION_NUMBER 3
10468 test_multi_session_random_usage(void)
10470 struct crypto_testsuite_params *ts_params = &testsuite_params;
10471 struct rte_cryptodev_info dev_info;
10472 struct rte_cryptodev_sym_session **sessions;
10474 struct multi_session_params ut_paramz[] = {
10477 .cipher_key = ms_aes_cbc_key0,
10478 .hmac_key = ms_hmac_key0,
10479 .cipher = ms_aes_cbc_cipher0,
10480 .digest = ms_hmac_digest0,
10481 .iv = ms_aes_cbc_iv0
10484 .cipher_key = ms_aes_cbc_key1,
10485 .hmac_key = ms_hmac_key1,
10486 .cipher = ms_aes_cbc_cipher1,
10487 .digest = ms_hmac_digest1,
10488 .iv = ms_aes_cbc_iv1
10491 .cipher_key = ms_aes_cbc_key2,
10492 .hmac_key = ms_hmac_key2,
10493 .cipher = ms_aes_cbc_cipher2,
10494 .digest = ms_hmac_digest2,
10495 .iv = ms_aes_cbc_iv2
10500 /* Verify the capabilities */
10501 struct rte_cryptodev_sym_capability_idx cap_idx;
10502 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10503 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA512_HMAC;
10504 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10507 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10508 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
10509 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10513 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
10515 sessions = rte_malloc(NULL,
10516 (sizeof(struct rte_cryptodev_sym_session *)
10517 * MAX_NB_SESSIONS) + 1, 0);
10519 for (i = 0; i < MB_SESSION_NUMBER; i++) {
10520 sessions[i] = rte_cryptodev_sym_session_create(
10521 ts_params->session_mpool);
10523 rte_memcpy(&ut_paramz[i].ut_params, &unittest_params,
10524 sizeof(struct crypto_unittest_params));
10526 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
10527 &ut_paramz[i].ut_params,
10528 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
10530 /* Create multiple crypto sessions*/
10531 rte_cryptodev_sym_session_init(
10532 ts_params->valid_devs[0],
10534 &ut_paramz[i].ut_params.auth_xform,
10535 ts_params->session_priv_mpool);
10537 TEST_ASSERT_NOT_NULL(sessions[i],
10538 "Session creation failed at session number %u",
10544 for (i = 0; i < 40000; i++) {
10546 j = rand() % MB_SESSION_NUMBER;
10548 TEST_ASSERT_SUCCESS(
10549 test_AES_CBC_HMAC_SHA512_decrypt_perform(
10551 &ut_paramz[j].ut_params,
10552 ts_params, ut_paramz[j].cipher,
10553 ut_paramz[j].digest,
10555 "Failed to perform decrypt on request number %u.", i);
10557 if (ut_paramz[j].ut_params.op)
10558 rte_crypto_op_free(ut_paramz[j].ut_params.op);
10561 * free mbuf - both obuf and ibuf are usually the same,
10562 * so check if they point at the same address is necessary,
10563 * to avoid freeing the mbuf twice.
10565 if (ut_paramz[j].ut_params.obuf) {
10566 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
10567 if (ut_paramz[j].ut_params.ibuf
10568 == ut_paramz[j].ut_params.obuf)
10569 ut_paramz[j].ut_params.ibuf = 0;
10570 ut_paramz[j].ut_params.obuf = 0;
10572 if (ut_paramz[j].ut_params.ibuf) {
10573 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
10574 ut_paramz[j].ut_params.ibuf = 0;
10578 for (i = 0; i < MB_SESSION_NUMBER; i++) {
10579 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
10581 rte_cryptodev_sym_session_free(sessions[i]);
10584 rte_free(sessions);
10586 return TEST_SUCCESS;
10589 uint8_t orig_data[] = {0xab, 0xab, 0xab, 0xab,
10590 0xab, 0xab, 0xab, 0xab,
10591 0xab, 0xab, 0xab, 0xab,
10592 0xab, 0xab, 0xab, 0xab};
10595 test_null_invalid_operation(void)
10597 struct crypto_testsuite_params *ts_params = &testsuite_params;
10598 struct crypto_unittest_params *ut_params = &unittest_params;
10601 /* This test is for NULL PMD only */
10602 if (gbl_driver_id != rte_cryptodev_driver_id_get(
10603 RTE_STR(CRYPTODEV_NAME_NULL_PMD)))
10606 /* Setup Cipher Parameters */
10607 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10608 ut_params->cipher_xform.next = NULL;
10610 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
10611 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10613 ut_params->sess = rte_cryptodev_sym_session_create(
10614 ts_params->session_mpool);
10616 /* Create Crypto session*/
10617 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10618 ut_params->sess, &ut_params->cipher_xform,
10619 ts_params->session_priv_mpool);
10620 TEST_ASSERT(ret < 0,
10621 "Session creation succeeded unexpectedly");
10624 /* Setup HMAC Parameters */
10625 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10626 ut_params->auth_xform.next = NULL;
10628 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
10629 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10631 ut_params->sess = rte_cryptodev_sym_session_create(
10632 ts_params->session_mpool);
10634 /* Create Crypto session*/
10635 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10636 ut_params->sess, &ut_params->auth_xform,
10637 ts_params->session_priv_mpool);
10638 TEST_ASSERT(ret < 0,
10639 "Session creation succeeded unexpectedly");
10641 return TEST_SUCCESS;
10645 #define NULL_BURST_LENGTH (32)
10648 test_null_burst_operation(void)
10650 struct crypto_testsuite_params *ts_params = &testsuite_params;
10651 struct crypto_unittest_params *ut_params = &unittest_params;
10653 unsigned i, burst_len = NULL_BURST_LENGTH;
10655 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
10656 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
10658 /* This test is for NULL PMD only */
10659 if (gbl_driver_id != rte_cryptodev_driver_id_get(
10660 RTE_STR(CRYPTODEV_NAME_NULL_PMD)))
10663 /* Setup Cipher Parameters */
10664 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10665 ut_params->cipher_xform.next = &ut_params->auth_xform;
10667 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
10668 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10670 /* Setup HMAC Parameters */
10671 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10672 ut_params->auth_xform.next = NULL;
10674 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
10675 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10677 ut_params->sess = rte_cryptodev_sym_session_create(
10678 ts_params->session_mpool);
10680 /* Create Crypto session*/
10681 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10682 ut_params->sess, &ut_params->cipher_xform,
10683 ts_params->session_priv_mpool);
10684 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10686 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
10687 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
10688 burst_len, "failed to generate burst of crypto ops");
10690 /* Generate an operation for each mbuf in burst */
10691 for (i = 0; i < burst_len; i++) {
10692 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10694 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
10696 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
10700 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
10702 burst[i]->sym->m_src = m;
10705 /* Process crypto operation */
10706 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
10707 0, burst, burst_len),
10709 "Error enqueuing burst");
10711 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
10712 0, burst_dequeued, burst_len),
10714 "Error dequeuing burst");
10717 for (i = 0; i < burst_len; i++) {
10719 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
10720 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
10722 "data not as expected");
10724 rte_pktmbuf_free(burst[i]->sym->m_src);
10725 rte_crypto_op_free(burst[i]);
10728 return TEST_SUCCESS;
10732 generate_gmac_large_plaintext(uint8_t *data)
10736 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
10737 memcpy(&data[i], &data[0], 32);
10741 create_gmac_operation(enum rte_crypto_auth_operation op,
10742 const struct gmac_test_data *tdata)
10744 struct crypto_testsuite_params *ts_params = &testsuite_params;
10745 struct crypto_unittest_params *ut_params = &unittest_params;
10746 struct rte_crypto_sym_op *sym_op;
10748 uint32_t plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
10750 /* Generate Crypto op data structure */
10751 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10752 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10753 TEST_ASSERT_NOT_NULL(ut_params->op,
10754 "Failed to allocate symmetric crypto operation struct");
10756 sym_op = ut_params->op->sym;
10758 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10759 ut_params->ibuf, tdata->gmac_tag.len);
10760 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10761 "no room to append digest");
10763 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10764 ut_params->ibuf, plaintext_pad_len);
10766 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
10767 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
10768 tdata->gmac_tag.len);
10769 debug_hexdump(stdout, "digest:",
10770 sym_op->auth.digest.data,
10771 tdata->gmac_tag.len);
10774 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
10775 uint8_t *, IV_OFFSET);
10777 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
10779 debug_hexdump(stdout, "iv:", iv_ptr, tdata->iv.len);
10781 sym_op->cipher.data.length = 0;
10782 sym_op->cipher.data.offset = 0;
10784 sym_op->auth.data.offset = 0;
10785 sym_op->auth.data.length = tdata->plaintext.len;
10791 create_gmac_operation_sgl(enum rte_crypto_auth_operation op,
10792 const struct gmac_test_data *tdata,
10793 void *digest_mem, uint64_t digest_phys)
10795 struct crypto_testsuite_params *ts_params = &testsuite_params;
10796 struct crypto_unittest_params *ut_params = &unittest_params;
10797 struct rte_crypto_sym_op *sym_op;
10799 /* Generate Crypto op data structure */
10800 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10801 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10802 TEST_ASSERT_NOT_NULL(ut_params->op,
10803 "Failed to allocate symmetric crypto operation struct");
10805 sym_op = ut_params->op->sym;
10807 sym_op->auth.digest.data = digest_mem;
10808 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10809 "no room to append digest");
10811 sym_op->auth.digest.phys_addr = digest_phys;
10813 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
10814 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
10815 tdata->gmac_tag.len);
10816 debug_hexdump(stdout, "digest:",
10817 sym_op->auth.digest.data,
10818 tdata->gmac_tag.len);
10821 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
10822 uint8_t *, IV_OFFSET);
10824 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
10826 debug_hexdump(stdout, "iv:", iv_ptr, tdata->iv.len);
10828 sym_op->cipher.data.length = 0;
10829 sym_op->cipher.data.offset = 0;
10831 sym_op->auth.data.offset = 0;
10832 sym_op->auth.data.length = tdata->plaintext.len;
10837 static int create_gmac_session(uint8_t dev_id,
10838 const struct gmac_test_data *tdata,
10839 enum rte_crypto_auth_operation auth_op)
10841 uint8_t auth_key[tdata->key.len];
10843 struct crypto_testsuite_params *ts_params = &testsuite_params;
10844 struct crypto_unittest_params *ut_params = &unittest_params;
10846 memcpy(auth_key, tdata->key.data, tdata->key.len);
10848 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10849 ut_params->auth_xform.next = NULL;
10851 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
10852 ut_params->auth_xform.auth.op = auth_op;
10853 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
10854 ut_params->auth_xform.auth.key.length = tdata->key.len;
10855 ut_params->auth_xform.auth.key.data = auth_key;
10856 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
10857 ut_params->auth_xform.auth.iv.length = tdata->iv.len;
10860 ut_params->sess = rte_cryptodev_sym_session_create(
10861 ts_params->session_mpool);
10863 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
10864 &ut_params->auth_xform,
10865 ts_params->session_priv_mpool);
10867 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10873 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
10875 struct crypto_testsuite_params *ts_params = &testsuite_params;
10876 struct crypto_unittest_params *ut_params = &unittest_params;
10877 struct rte_cryptodev_info dev_info;
10879 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
10880 uint64_t feat_flags = dev_info.feature_flags;
10882 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
10883 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
10884 printf("Device doesn't support RAW data-path APIs.\n");
10890 uint8_t *auth_tag, *plaintext;
10891 uint16_t plaintext_pad_len;
10893 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
10894 "No GMAC length in the source data");
10896 /* Verify the capabilities */
10897 struct rte_cryptodev_sym_capability_idx cap_idx;
10898 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10899 cap_idx.algo.auth = RTE_CRYPTO_AUTH_AES_GMAC;
10900 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
10904 retval = create_gmac_session(ts_params->valid_devs[0],
10905 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
10910 if (tdata->plaintext.len > MBUF_SIZE)
10911 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
10913 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10914 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
10915 "Failed to allocate input buffer in mempool");
10917 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
10918 rte_pktmbuf_tailroom(ut_params->ibuf));
10920 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
10922 * Runtime generate the large plain text instead of use hard code
10923 * plain text vector. It is done to avoid create huge source file
10924 * with the test vector.
10926 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
10927 generate_gmac_large_plaintext(tdata->plaintext.data);
10929 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
10930 plaintext_pad_len);
10931 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
10933 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
10934 debug_hexdump(stdout, "plaintext:", plaintext,
10935 tdata->plaintext.len);
10937 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
10943 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10945 ut_params->op->sym->m_src = ut_params->ibuf;
10947 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
10948 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
10950 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
10951 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
10952 ut_params->op, 0, 1, 0, 0);
10954 TEST_ASSERT_NOT_NULL(
10955 process_crypto_request(ts_params->valid_devs[0],
10956 ut_params->op), "failed to process sym crypto op");
10958 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10959 "crypto op processing failed");
10961 if (ut_params->op->sym->m_dst) {
10962 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
10963 uint8_t *, plaintext_pad_len);
10965 auth_tag = plaintext + plaintext_pad_len;
10968 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
10970 TEST_ASSERT_BUFFERS_ARE_EQUAL(
10972 tdata->gmac_tag.data,
10973 tdata->gmac_tag.len,
10974 "GMAC Generated auth tag not as expected");
10980 test_AES_GMAC_authentication_test_case_1(void)
10982 return test_AES_GMAC_authentication(&gmac_test_case_1);
10986 test_AES_GMAC_authentication_test_case_2(void)
10988 return test_AES_GMAC_authentication(&gmac_test_case_2);
10992 test_AES_GMAC_authentication_test_case_3(void)
10994 return test_AES_GMAC_authentication(&gmac_test_case_3);
10998 test_AES_GMAC_authentication_test_case_4(void)
11000 return test_AES_GMAC_authentication(&gmac_test_case_4);
11004 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
11006 struct crypto_testsuite_params *ts_params = &testsuite_params;
11007 struct crypto_unittest_params *ut_params = &unittest_params;
11009 uint32_t plaintext_pad_len;
11010 uint8_t *plaintext;
11011 struct rte_cryptodev_info dev_info;
11013 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
11014 uint64_t feat_flags = dev_info.feature_flags;
11016 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
11017 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
11018 printf("Device doesn't support RAW data-path APIs.\n");
11022 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
11023 "No GMAC length in the source data");
11025 /* Verify the capabilities */
11026 struct rte_cryptodev_sym_capability_idx cap_idx;
11027 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11028 cap_idx.algo.auth = RTE_CRYPTO_AUTH_AES_GMAC;
11029 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11033 retval = create_gmac_session(ts_params->valid_devs[0],
11034 tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
11039 if (tdata->plaintext.len > MBUF_SIZE)
11040 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
11042 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11043 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11044 "Failed to allocate input buffer in mempool");
11046 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11047 rte_pktmbuf_tailroom(ut_params->ibuf));
11049 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
11052 * Runtime generate the large plain text instead of use hard code
11053 * plain text vector. It is done to avoid create huge source file
11054 * with the test vector.
11056 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
11057 generate_gmac_large_plaintext(tdata->plaintext.data);
11059 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11060 plaintext_pad_len);
11061 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11063 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
11064 debug_hexdump(stdout, "plaintext:", plaintext,
11065 tdata->plaintext.len);
11067 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
11073 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11075 ut_params->op->sym->m_src = ut_params->ibuf;
11077 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
11078 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
11080 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
11081 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
11082 ut_params->op, 0, 1, 0, 0);
11084 TEST_ASSERT_NOT_NULL(
11085 process_crypto_request(ts_params->valid_devs[0],
11086 ut_params->op), "failed to process sym crypto op");
11088 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
11089 "crypto op processing failed");
11096 test_AES_GMAC_authentication_verify_test_case_1(void)
11098 return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
11102 test_AES_GMAC_authentication_verify_test_case_2(void)
11104 return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
11108 test_AES_GMAC_authentication_verify_test_case_3(void)
11110 return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
11114 test_AES_GMAC_authentication_verify_test_case_4(void)
11116 return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
11120 test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
11123 struct crypto_testsuite_params *ts_params = &testsuite_params;
11124 struct crypto_unittest_params *ut_params = &unittest_params;
11125 struct rte_cryptodev_info dev_info;
11126 uint64_t feature_flags;
11127 unsigned int trn_data = 0;
11128 void *digest_mem = NULL;
11130 unsigned int to_trn = 0;
11131 struct rte_mbuf *buf = NULL;
11132 uint8_t *auth_tag, *plaintext;
11135 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
11136 "No GMAC length in the source data");
11138 /* Verify the capabilities */
11139 struct rte_cryptodev_sym_capability_idx cap_idx;
11140 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11141 cap_idx.algo.auth = RTE_CRYPTO_AUTH_AES_GMAC;
11142 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11146 /* Check for any input SGL support */
11147 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
11148 feature_flags = dev_info.feature_flags;
11150 if ((!(feature_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) &&
11151 (!(feature_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)) &&
11152 (!(feature_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)))
11155 if (fragsz > tdata->plaintext.len)
11156 fragsz = tdata->plaintext.len;
11158 uint16_t plaintext_len = fragsz;
11160 retval = create_gmac_session(ts_params->valid_devs[0],
11161 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
11166 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11167 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11168 "Failed to allocate input buffer in mempool");
11170 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11171 rte_pktmbuf_tailroom(ut_params->ibuf));
11173 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11175 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11177 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
11179 trn_data += plaintext_len;
11181 buf = ut_params->ibuf;
11184 * Loop until no more fragments
11187 while (trn_data < tdata->plaintext.len) {
11189 to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
11190 (tdata->plaintext.len - trn_data) : fragsz;
11192 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11195 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
11196 rte_pktmbuf_tailroom(buf));
11198 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
11201 memcpy(plaintext, tdata->plaintext.data + trn_data,
11203 trn_data += to_trn;
11204 if (trn_data == tdata->plaintext.len)
11205 digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
11206 tdata->gmac_tag.len);
11208 ut_params->ibuf->nb_segs = segs;
11211 * Place digest at the end of the last buffer
11213 uint64_t digest_phys = rte_pktmbuf_iova(buf) + to_trn;
11216 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11217 + tdata->gmac_tag.len);
11218 digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf,
11219 tdata->plaintext.len);
11222 retval = create_gmac_operation_sgl(RTE_CRYPTO_AUTH_OP_GENERATE,
11223 tdata, digest_mem, digest_phys);
11228 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11230 ut_params->op->sym->m_src = ut_params->ibuf;
11232 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
11235 TEST_ASSERT_NOT_NULL(
11236 process_crypto_request(ts_params->valid_devs[0],
11237 ut_params->op), "failed to process sym crypto op");
11239 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
11240 "crypto op processing failed");
11242 auth_tag = digest_mem;
11243 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
11244 TEST_ASSERT_BUFFERS_ARE_EQUAL(
11246 tdata->gmac_tag.data,
11247 tdata->gmac_tag.len,
11248 "GMAC Generated auth tag not as expected");
11253 /* Segment size not multiple of block size (16B) */
11255 test_AES_GMAC_authentication_SGL_40B(void)
11257 return test_AES_GMAC_authentication_SGL(&gmac_test_case_1, 40);
11261 test_AES_GMAC_authentication_SGL_80B(void)
11263 return test_AES_GMAC_authentication_SGL(&gmac_test_case_1, 80);
11267 test_AES_GMAC_authentication_SGL_2048B(void)
11269 return test_AES_GMAC_authentication_SGL(&gmac_test_case_5, 2048);
11272 /* Segment size not multiple of block size (16B) */
11274 test_AES_GMAC_authentication_SGL_2047B(void)
11276 return test_AES_GMAC_authentication_SGL(&gmac_test_case_5, 2047);
11279 struct test_crypto_vector {
11280 enum rte_crypto_cipher_algorithm crypto_algo;
11281 unsigned int cipher_offset;
11282 unsigned int cipher_len;
11295 const uint8_t *data;
11300 const uint8_t *data;
11304 enum rte_crypto_auth_algorithm auth_algo;
11305 unsigned int auth_offset;
11313 const uint8_t *data;
11323 static const struct test_crypto_vector
11324 hmac_sha1_test_crypto_vector = {
11325 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
11327 .data = plaintext_hash,
11332 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
11333 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
11334 0xDE, 0xF4, 0xDE, 0xAD
11340 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
11341 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
11342 0x3F, 0x91, 0x64, 0x59
11348 static const struct test_crypto_vector
11349 aes128_gmac_test_vector = {
11350 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
11352 .data = plaintext_hash,
11357 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
11358 0x08, 0x09, 0x0A, 0x0B
11364 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
11365 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
11371 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
11372 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
11378 static const struct test_crypto_vector
11379 aes128cbc_hmac_sha1_test_vector = {
11380 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
11381 .cipher_offset = 0,
11385 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
11386 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
11392 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
11393 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
11398 .data = plaintext_hash,
11402 .data = ciphertext512_aes128cbc,
11405 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
11409 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
11410 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
11411 0xDE, 0xF4, 0xDE, 0xAD
11417 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
11418 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
11419 0x18, 0x8C, 0x1D, 0x32
11425 static const struct test_crypto_vector
11426 aes128cbc_hmac_sha1_aad_test_vector = {
11427 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
11428 .cipher_offset = 8,
11432 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
11433 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
11439 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
11440 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
11445 .data = plaintext_hash,
11449 .data = ciphertext512_aes128cbc_aad,
11452 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
11456 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
11457 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
11458 0xDE, 0xF4, 0xDE, 0xAD
11464 0x6D, 0xF3, 0x50, 0x79, 0x7A, 0x2A, 0xAC, 0x7F,
11465 0xA6, 0xF0, 0xC6, 0x38, 0x1F, 0xA4, 0xDD, 0x9B,
11466 0x62, 0x0F, 0xFB, 0x10
11473 data_corruption(uint8_t *data)
11479 tag_corruption(uint8_t *data, unsigned int tag_offset)
11481 data[tag_offset] += 1;
11485 create_auth_session(struct crypto_unittest_params *ut_params,
11487 const struct test_crypto_vector *reference,
11488 enum rte_crypto_auth_operation auth_op)
11490 struct crypto_testsuite_params *ts_params = &testsuite_params;
11491 uint8_t auth_key[reference->auth_key.len + 1];
11493 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
11495 /* Setup Authentication Parameters */
11496 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11497 ut_params->auth_xform.auth.op = auth_op;
11498 ut_params->auth_xform.next = NULL;
11499 ut_params->auth_xform.auth.algo = reference->auth_algo;
11500 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
11501 ut_params->auth_xform.auth.key.data = auth_key;
11502 ut_params->auth_xform.auth.digest_length = reference->digest.len;
11504 /* Create Crypto session*/
11505 ut_params->sess = rte_cryptodev_sym_session_create(
11506 ts_params->session_mpool);
11508 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
11509 &ut_params->auth_xform,
11510 ts_params->session_priv_mpool);
11512 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
11518 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
11520 const struct test_crypto_vector *reference,
11521 enum rte_crypto_auth_operation auth_op,
11522 enum rte_crypto_cipher_operation cipher_op)
11524 struct crypto_testsuite_params *ts_params = &testsuite_params;
11525 uint8_t cipher_key[reference->cipher_key.len + 1];
11526 uint8_t auth_key[reference->auth_key.len + 1];
11528 memcpy(cipher_key, reference->cipher_key.data,
11529 reference->cipher_key.len);
11530 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
11532 /* Setup Authentication Parameters */
11533 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11534 ut_params->auth_xform.auth.op = auth_op;
11535 ut_params->auth_xform.auth.algo = reference->auth_algo;
11536 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
11537 ut_params->auth_xform.auth.key.data = auth_key;
11538 ut_params->auth_xform.auth.digest_length = reference->digest.len;
11540 if (reference->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) {
11541 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
11542 ut_params->auth_xform.auth.iv.length = reference->iv.len;
11544 ut_params->auth_xform.next = &ut_params->cipher_xform;
11546 /* Setup Cipher Parameters */
11547 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
11548 ut_params->cipher_xform.next = NULL;
11549 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
11550 ut_params->cipher_xform.cipher.op = cipher_op;
11551 ut_params->cipher_xform.cipher.key.data = cipher_key;
11552 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
11553 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
11554 ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
11557 /* Create Crypto session*/
11558 ut_params->sess = rte_cryptodev_sym_session_create(
11559 ts_params->session_mpool);
11561 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
11562 &ut_params->auth_xform,
11563 ts_params->session_priv_mpool);
11565 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
11571 create_auth_operation(struct crypto_testsuite_params *ts_params,
11572 struct crypto_unittest_params *ut_params,
11573 const struct test_crypto_vector *reference,
11574 unsigned int auth_generate)
11576 /* Generate Crypto op data structure */
11577 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
11578 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
11579 TEST_ASSERT_NOT_NULL(ut_params->op,
11580 "Failed to allocate pktmbuf offload");
11582 /* Set crypto operation data parameters */
11583 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11585 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
11587 /* set crypto operation source mbuf */
11588 sym_op->m_src = ut_params->ibuf;
11591 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
11592 ut_params->ibuf, reference->digest.len);
11594 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
11595 "no room to append auth tag");
11597 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
11598 ut_params->ibuf, reference->plaintext.len);
11601 memset(sym_op->auth.digest.data, 0, reference->digest.len);
11603 memcpy(sym_op->auth.digest.data,
11604 reference->digest.data,
11605 reference->digest.len);
11607 debug_hexdump(stdout, "digest:",
11608 sym_op->auth.digest.data,
11609 reference->digest.len);
11611 sym_op->auth.data.length = reference->plaintext.len;
11612 sym_op->auth.data.offset = 0;
11618 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
11619 struct crypto_unittest_params *ut_params,
11620 const struct test_crypto_vector *reference,
11621 unsigned int auth_generate)
11623 /* Generate Crypto op data structure */
11624 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
11625 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
11626 TEST_ASSERT_NOT_NULL(ut_params->op,
11627 "Failed to allocate pktmbuf offload");
11629 /* Set crypto operation data parameters */
11630 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11632 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
11634 /* set crypto operation source mbuf */
11635 sym_op->m_src = ut_params->ibuf;
11638 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
11639 ut_params->ibuf, reference->digest.len);
11641 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
11642 "no room to append auth tag");
11644 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
11645 ut_params->ibuf, reference->ciphertext.len);
11648 memset(sym_op->auth.digest.data, 0, reference->digest.len);
11650 memcpy(sym_op->auth.digest.data,
11651 reference->digest.data,
11652 reference->digest.len);
11654 debug_hexdump(stdout, "digest:",
11655 sym_op->auth.digest.data,
11656 reference->digest.len);
11658 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
11659 reference->iv.data, reference->iv.len);
11661 sym_op->cipher.data.length = 0;
11662 sym_op->cipher.data.offset = 0;
11664 sym_op->auth.data.length = reference->plaintext.len;
11665 sym_op->auth.data.offset = 0;
11671 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
11672 struct crypto_unittest_params *ut_params,
11673 const struct test_crypto_vector *reference,
11674 unsigned int auth_generate)
11676 /* Generate Crypto op data structure */
11677 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
11678 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
11679 TEST_ASSERT_NOT_NULL(ut_params->op,
11680 "Failed to allocate pktmbuf offload");
11682 /* Set crypto operation data parameters */
11683 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11685 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
11687 /* set crypto operation source mbuf */
11688 sym_op->m_src = ut_params->ibuf;
11691 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
11692 ut_params->ibuf, reference->digest.len);
11694 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
11695 "no room to append auth tag");
11697 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
11698 ut_params->ibuf, reference->ciphertext.len);
11701 memset(sym_op->auth.digest.data, 0, reference->digest.len);
11703 memcpy(sym_op->auth.digest.data,
11704 reference->digest.data,
11705 reference->digest.len);
11707 debug_hexdump(stdout, "digest:",
11708 sym_op->auth.digest.data,
11709 reference->digest.len);
11711 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
11712 reference->iv.data, reference->iv.len);
11714 sym_op->cipher.data.length = reference->cipher_len;
11715 sym_op->cipher.data.offset = reference->cipher_offset;
11717 sym_op->auth.data.length = reference->plaintext.len;
11718 sym_op->auth.data.offset = reference->auth_offset;
11724 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
11725 struct crypto_unittest_params *ut_params,
11726 const struct test_crypto_vector *reference)
11728 return create_auth_operation(ts_params, ut_params, reference, 0);
11732 create_auth_verify_GMAC_operation(
11733 struct crypto_testsuite_params *ts_params,
11734 struct crypto_unittest_params *ut_params,
11735 const struct test_crypto_vector *reference)
11737 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
11741 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
11742 struct crypto_unittest_params *ut_params,
11743 const struct test_crypto_vector *reference)
11745 return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
11749 test_authentication_verify_fail_when_data_corruption(
11750 struct crypto_testsuite_params *ts_params,
11751 struct crypto_unittest_params *ut_params,
11752 const struct test_crypto_vector *reference,
11753 unsigned int data_corrupted)
11757 uint8_t *plaintext;
11758 struct rte_cryptodev_info dev_info;
11760 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
11761 uint64_t feat_flags = dev_info.feature_flags;
11763 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
11764 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
11765 printf("Device doesn't support RAW data-path APIs.\n");
11769 /* Verify the capabilities */
11770 struct rte_cryptodev_sym_capability_idx cap_idx;
11771 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11772 cap_idx.algo.auth = reference->auth_algo;
11773 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11778 /* Create session */
11779 retval = create_auth_session(ut_params,
11780 ts_params->valid_devs[0],
11782 RTE_CRYPTO_AUTH_OP_VERIFY);
11786 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11787 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11788 "Failed to allocate input buffer in mempool");
11790 /* clear mbuf payload */
11791 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11792 rte_pktmbuf_tailroom(ut_params->ibuf));
11794 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11795 reference->plaintext.len);
11796 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11797 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
11799 debug_hexdump(stdout, "plaintext:", plaintext,
11800 reference->plaintext.len);
11802 /* Create operation */
11803 retval = create_auth_verify_operation(ts_params, ut_params, reference);
11808 if (data_corrupted)
11809 data_corruption(plaintext);
11811 tag_corruption(plaintext, reference->plaintext.len);
11813 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) {
11814 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
11816 TEST_ASSERT_NOT_EQUAL(ut_params->op->status,
11817 RTE_CRYPTO_OP_STATUS_SUCCESS,
11818 "authentication not failed");
11819 } else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
11820 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
11821 ut_params->op, 0, 1, 0, 0);
11823 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11825 TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
11832 test_authentication_verify_GMAC_fail_when_corruption(
11833 struct crypto_testsuite_params *ts_params,
11834 struct crypto_unittest_params *ut_params,
11835 const struct test_crypto_vector *reference,
11836 unsigned int data_corrupted)
11839 uint8_t *plaintext;
11840 struct rte_cryptodev_info dev_info;
11842 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
11843 uint64_t feat_flags = dev_info.feature_flags;
11845 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
11846 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
11847 printf("Device doesn't support RAW data-path APIs.\n");
11851 /* Verify the capabilities */
11852 struct rte_cryptodev_sym_capability_idx cap_idx;
11853 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11854 cap_idx.algo.auth = reference->auth_algo;
11855 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11859 /* Create session */
11860 retval = create_auth_cipher_session(ut_params,
11861 ts_params->valid_devs[0],
11863 RTE_CRYPTO_AUTH_OP_VERIFY,
11864 RTE_CRYPTO_CIPHER_OP_DECRYPT);
11868 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11869 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11870 "Failed to allocate input buffer in mempool");
11872 /* clear mbuf payload */
11873 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11874 rte_pktmbuf_tailroom(ut_params->ibuf));
11876 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11877 reference->plaintext.len);
11878 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11879 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
11881 debug_hexdump(stdout, "plaintext:", plaintext,
11882 reference->plaintext.len);
11884 /* Create operation */
11885 retval = create_auth_verify_GMAC_operation(ts_params,
11892 if (data_corrupted)
11893 data_corruption(plaintext);
11895 tag_corruption(plaintext, reference->aad.len);
11897 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) {
11898 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
11900 TEST_ASSERT_NOT_EQUAL(ut_params->op->status,
11901 RTE_CRYPTO_OP_STATUS_SUCCESS,
11902 "authentication not failed");
11903 } else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
11904 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
11905 ut_params->op, 0, 1, 0, 0);
11907 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11909 TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
11916 test_authenticated_decryption_fail_when_corruption(
11917 struct crypto_testsuite_params *ts_params,
11918 struct crypto_unittest_params *ut_params,
11919 const struct test_crypto_vector *reference,
11920 unsigned int data_corrupted)
11924 uint8_t *ciphertext;
11925 struct rte_cryptodev_info dev_info;
11927 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
11928 uint64_t feat_flags = dev_info.feature_flags;
11930 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
11931 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
11932 printf("Device doesn't support RAW data-path APIs.\n");
11936 /* Verify the capabilities */
11937 struct rte_cryptodev_sym_capability_idx cap_idx;
11938 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11939 cap_idx.algo.auth = reference->auth_algo;
11940 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11943 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
11944 cap_idx.algo.cipher = reference->crypto_algo;
11945 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
11949 /* Create session */
11950 retval = create_auth_cipher_session(ut_params,
11951 ts_params->valid_devs[0],
11953 RTE_CRYPTO_AUTH_OP_VERIFY,
11954 RTE_CRYPTO_CIPHER_OP_DECRYPT);
11958 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11959 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11960 "Failed to allocate input buffer in mempool");
11962 /* clear mbuf payload */
11963 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11964 rte_pktmbuf_tailroom(ut_params->ibuf));
11966 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11967 reference->ciphertext.len);
11968 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
11969 memcpy(ciphertext, reference->ciphertext.data,
11970 reference->ciphertext.len);
11972 /* Create operation */
11973 retval = create_cipher_auth_verify_operation(ts_params,
11980 if (data_corrupted)
11981 data_corruption(ciphertext);
11983 tag_corruption(ciphertext, reference->ciphertext.len);
11985 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) {
11986 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
11988 TEST_ASSERT_NOT_EQUAL(ut_params->op->status,
11989 RTE_CRYPTO_OP_STATUS_SUCCESS,
11990 "authentication not failed");
11991 } else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
11992 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
11993 ut_params->op, 1, 1, 0, 0);
11995 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11997 TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
12004 test_authenticated_encryt_with_esn(
12005 struct crypto_testsuite_params *ts_params,
12006 struct crypto_unittest_params *ut_params,
12007 const struct test_crypto_vector *reference)
12011 uint8_t *authciphertext, *plaintext, *auth_tag;
12012 uint16_t plaintext_pad_len;
12013 uint8_t cipher_key[reference->cipher_key.len + 1];
12014 uint8_t auth_key[reference->auth_key.len + 1];
12015 struct rte_cryptodev_info dev_info;
12017 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
12018 uint64_t feat_flags = dev_info.feature_flags;
12020 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
12021 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
12022 printf("Device doesn't support RAW data-path APIs.\n");
12026 /* Verify the capabilities */
12027 struct rte_cryptodev_sym_capability_idx cap_idx;
12028 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
12029 cap_idx.algo.auth = reference->auth_algo;
12030 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
12033 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
12034 cap_idx.algo.cipher = reference->crypto_algo;
12035 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
12039 /* Create session */
12040 memcpy(cipher_key, reference->cipher_key.data,
12041 reference->cipher_key.len);
12042 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
12044 /* Setup Cipher Parameters */
12045 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
12046 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
12047 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
12048 ut_params->cipher_xform.cipher.key.data = cipher_key;
12049 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
12050 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
12051 ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
12053 ut_params->cipher_xform.next = &ut_params->auth_xform;
12055 /* Setup Authentication Parameters */
12056 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
12057 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
12058 ut_params->auth_xform.auth.algo = reference->auth_algo;
12059 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
12060 ut_params->auth_xform.auth.key.data = auth_key;
12061 ut_params->auth_xform.auth.digest_length = reference->digest.len;
12062 ut_params->auth_xform.next = NULL;
12064 /* Create Crypto session*/
12065 ut_params->sess = rte_cryptodev_sym_session_create(
12066 ts_params->session_mpool);
12068 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
12070 &ut_params->cipher_xform,
12071 ts_params->session_priv_mpool);
12073 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
12075 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
12076 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
12077 "Failed to allocate input buffer in mempool");
12079 /* clear mbuf payload */
12080 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
12081 rte_pktmbuf_tailroom(ut_params->ibuf));
12083 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
12084 reference->plaintext.len);
12085 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
12086 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
12088 /* Create operation */
12089 retval = create_cipher_auth_operation(ts_params,
12096 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
12097 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
12099 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
12100 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
12101 ut_params->op, 1, 1, 0, 0);
12103 ut_params->op = process_crypto_request(
12104 ts_params->valid_devs[0], ut_params->op);
12106 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
12108 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
12109 "crypto op processing failed");
12111 plaintext_pad_len = RTE_ALIGN_CEIL(reference->plaintext.len, 16);
12113 authciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
12114 ut_params->op->sym->auth.data.offset);
12115 auth_tag = authciphertext + plaintext_pad_len;
12116 debug_hexdump(stdout, "ciphertext:", authciphertext,
12117 reference->ciphertext.len);
12118 debug_hexdump(stdout, "auth tag:", auth_tag, reference->digest.len);
12120 /* Validate obuf */
12121 TEST_ASSERT_BUFFERS_ARE_EQUAL(
12123 reference->ciphertext.data,
12124 reference->ciphertext.len,
12125 "Ciphertext data not as expected");
12127 TEST_ASSERT_BUFFERS_ARE_EQUAL(
12129 reference->digest.data,
12130 reference->digest.len,
12131 "Generated digest not as expected");
12133 return TEST_SUCCESS;
12138 test_authenticated_decrypt_with_esn(
12139 struct crypto_testsuite_params *ts_params,
12140 struct crypto_unittest_params *ut_params,
12141 const struct test_crypto_vector *reference)
12145 uint8_t *ciphertext;
12146 uint8_t cipher_key[reference->cipher_key.len + 1];
12147 uint8_t auth_key[reference->auth_key.len + 1];
12148 struct rte_cryptodev_info dev_info;
12150 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
12151 uint64_t feat_flags = dev_info.feature_flags;
12153 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
12154 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
12155 printf("Device doesn't support RAW data-path APIs.\n");
12159 /* Verify the capabilities */
12160 struct rte_cryptodev_sym_capability_idx cap_idx;
12161 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
12162 cap_idx.algo.auth = reference->auth_algo;
12163 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
12166 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
12167 cap_idx.algo.cipher = reference->crypto_algo;
12168 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
12172 /* Create session */
12173 memcpy(cipher_key, reference->cipher_key.data,
12174 reference->cipher_key.len);
12175 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
12177 /* Setup Authentication Parameters */
12178 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
12179 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
12180 ut_params->auth_xform.auth.algo = reference->auth_algo;
12181 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
12182 ut_params->auth_xform.auth.key.data = auth_key;
12183 ut_params->auth_xform.auth.digest_length = reference->digest.len;
12184 ut_params->auth_xform.next = &ut_params->cipher_xform;
12186 /* Setup Cipher Parameters */
12187 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
12188 ut_params->cipher_xform.next = NULL;
12189 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
12190 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
12191 ut_params->cipher_xform.cipher.key.data = cipher_key;
12192 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
12193 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
12194 ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
12196 /* Create Crypto session*/
12197 ut_params->sess = rte_cryptodev_sym_session_create(
12198 ts_params->session_mpool);
12200 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
12202 &ut_params->auth_xform,
12203 ts_params->session_priv_mpool);
12205 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
12207 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
12208 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
12209 "Failed to allocate input buffer in mempool");
12211 /* clear mbuf payload */
12212 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
12213 rte_pktmbuf_tailroom(ut_params->ibuf));
12215 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
12216 reference->ciphertext.len);
12217 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
12218 memcpy(ciphertext, reference->ciphertext.data,
12219 reference->ciphertext.len);
12221 /* Create operation */
12222 retval = create_cipher_auth_verify_operation(ts_params,
12229 if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
12230 process_cpu_crypt_auth_op(ts_params->valid_devs[0],
12232 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
12233 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
12234 ut_params->op, 1, 1, 0, 0);
12236 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
12239 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
12240 TEST_ASSERT_EQUAL(ut_params->op->status,
12241 RTE_CRYPTO_OP_STATUS_SUCCESS,
12242 "crypto op processing passed");
12244 ut_params->obuf = ut_params->op->sym->m_src;
12245 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
12251 create_aead_operation_SGL(enum rte_crypto_aead_operation op,
12252 const struct aead_test_data *tdata,
12253 void *digest_mem, uint64_t digest_phys)
12255 struct crypto_testsuite_params *ts_params = &testsuite_params;
12256 struct crypto_unittest_params *ut_params = &unittest_params;
12258 const unsigned int auth_tag_len = tdata->auth_tag.len;
12259 const unsigned int iv_len = tdata->iv.len;
12260 unsigned int aad_len = tdata->aad.len;
12261 unsigned int aad_len_pad = 0;
12263 /* Generate Crypto op data structure */
12264 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
12265 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
12266 TEST_ASSERT_NOT_NULL(ut_params->op,
12267 "Failed to allocate symmetric crypto operation struct");
12269 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
12271 sym_op->aead.digest.data = digest_mem;
12273 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
12274 "no room to append digest");
12276 sym_op->aead.digest.phys_addr = digest_phys;
12278 if (op == RTE_CRYPTO_AEAD_OP_DECRYPT) {
12279 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
12281 debug_hexdump(stdout, "digest:",
12282 sym_op->aead.digest.data,
12286 /* Append aad data */
12287 if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
12288 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
12289 uint8_t *, IV_OFFSET);
12291 /* Copy IV 1 byte after the IV pointer, according to the API */
12292 rte_memcpy(iv_ptr + 1, tdata->iv.data, iv_len);
12294 aad_len = RTE_ALIGN_CEIL(aad_len + 18, 16);
12296 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
12297 ut_params->ibuf, aad_len);
12298 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
12299 "no room to prepend aad");
12300 sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
12303 memset(sym_op->aead.aad.data, 0, aad_len);
12304 /* Copy AAD 18 bytes after the AAD pointer, according to the API */
12305 rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
12307 debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
12308 debug_hexdump(stdout, "aad:",
12309 sym_op->aead.aad.data, aad_len);
12311 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
12312 uint8_t *, IV_OFFSET);
12314 rte_memcpy(iv_ptr, tdata->iv.data, iv_len);
12316 aad_len_pad = RTE_ALIGN_CEIL(aad_len, 16);
12318 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
12319 ut_params->ibuf, aad_len_pad);
12320 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
12321 "no room to prepend aad");
12322 sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
12325 memset(sym_op->aead.aad.data, 0, aad_len);
12326 rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
12328 debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
12329 debug_hexdump(stdout, "aad:",
12330 sym_op->aead.aad.data, aad_len);
12333 sym_op->aead.data.length = tdata->plaintext.len;
12334 sym_op->aead.data.offset = aad_len_pad;
12339 #define SGL_MAX_NO 16
12342 test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
12343 const int oop, uint32_t fragsz, uint32_t fragsz_oop)
12345 struct crypto_testsuite_params *ts_params = &testsuite_params;
12346 struct crypto_unittest_params *ut_params = &unittest_params;
12347 struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
12350 int to_trn_tbl[SGL_MAX_NO];
12352 unsigned int trn_data = 0;
12353 uint8_t *plaintext, *ciphertext, *auth_tag;
12354 struct rte_cryptodev_info dev_info;
12356 /* Verify the capabilities */
12357 struct rte_cryptodev_sym_capability_idx cap_idx;
12358 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
12359 cap_idx.algo.aead = tdata->algo;
12360 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
12364 /* OOP not supported with CPU crypto */
12365 if (oop && gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
12368 /* Detailed check for the particular SGL support flag */
12369 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
12371 unsigned int sgl_in = fragsz < tdata->plaintext.len;
12372 if (sgl_in && (!(dev_info.feature_flags &
12373 RTE_CRYPTODEV_FF_IN_PLACE_SGL)))
12376 uint64_t feat_flags = dev_info.feature_flags;
12378 if ((global_api_test_type == CRYPTODEV_RAW_API_TEST) &&
12379 (!(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) {
12380 printf("Device doesn't support RAW data-path APIs.\n");
12384 unsigned int sgl_in = fragsz < tdata->plaintext.len;
12385 unsigned int sgl_out = (fragsz_oop ? fragsz_oop : fragsz) <
12386 tdata->plaintext.len;
12387 /* Raw data path API does not support OOP */
12388 if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
12390 if (sgl_in && !sgl_out) {
12391 if (!(dev_info.feature_flags &
12392 RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT))
12394 } else if (!sgl_in && sgl_out) {
12395 if (!(dev_info.feature_flags &
12396 RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT))
12398 } else if (sgl_in && sgl_out) {
12399 if (!(dev_info.feature_flags &
12400 RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT))
12405 if (fragsz > tdata->plaintext.len)
12406 fragsz = tdata->plaintext.len;
12408 uint16_t plaintext_len = fragsz;
12409 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
12411 if (fragsz_oop > tdata->plaintext.len)
12412 frag_size_oop = tdata->plaintext.len;
12415 void *digest_mem = NULL;
12417 uint32_t prepend_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
12419 if (tdata->plaintext.len % fragsz != 0) {
12420 if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
12423 if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
12428 * For out-op-place we need to alloc another mbuf
12431 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
12432 rte_pktmbuf_append(ut_params->obuf,
12433 frag_size_oop + prepend_len);
12434 buf_oop = ut_params->obuf;
12437 /* Create AEAD session */
12438 retval = create_aead_session(ts_params->valid_devs[0],
12440 RTE_CRYPTO_AEAD_OP_ENCRYPT,
12441 tdata->key.data, tdata->key.len,
12442 tdata->aad.len, tdata->auth_tag.len,
12447 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
12449 /* clear mbuf payload */
12450 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
12451 rte_pktmbuf_tailroom(ut_params->ibuf));
12453 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
12456 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
12458 trn_data += plaintext_len;
12460 buf = ut_params->ibuf;
12463 * Loop until no more fragments
12466 while (trn_data < tdata->plaintext.len) {
12468 to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
12469 (tdata->plaintext.len - trn_data) : fragsz;
12471 to_trn_tbl[ecx++] = to_trn;
12473 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
12476 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
12477 rte_pktmbuf_tailroom(buf));
12480 if (oop && !fragsz_oop) {
12481 buf_last_oop = buf_oop->next =
12482 rte_pktmbuf_alloc(ts_params->mbuf_pool);
12483 buf_oop = buf_oop->next;
12484 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
12485 0, rte_pktmbuf_tailroom(buf_oop));
12486 rte_pktmbuf_append(buf_oop, to_trn);
12489 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
12492 memcpy(plaintext, tdata->plaintext.data + trn_data,
12494 trn_data += to_trn;
12495 if (trn_data == tdata->plaintext.len) {
12498 digest_mem = rte_pktmbuf_append(buf_oop,
12499 tdata->auth_tag.len);
12501 digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
12502 tdata->auth_tag.len);
12506 uint64_t digest_phys = 0;
12508 ut_params->ibuf->nb_segs = segs;
12511 if (fragsz_oop && oop) {
12515 if (frag_size_oop == tdata->plaintext.len) {
12516 digest_mem = rte_pktmbuf_append(ut_params->obuf,
12517 tdata->auth_tag.len);
12519 digest_phys = rte_pktmbuf_iova_offset(
12521 tdata->plaintext.len + prepend_len);
12524 trn_data = frag_size_oop;
12525 while (trn_data < tdata->plaintext.len) {
12528 (tdata->plaintext.len - trn_data <
12530 (tdata->plaintext.len - trn_data) :
12533 to_trn_tbl[ecx++] = to_trn;
12535 buf_last_oop = buf_oop->next =
12536 rte_pktmbuf_alloc(ts_params->mbuf_pool);
12537 buf_oop = buf_oop->next;
12538 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
12539 0, rte_pktmbuf_tailroom(buf_oop));
12540 rte_pktmbuf_append(buf_oop, to_trn);
12542 trn_data += to_trn;
12544 if (trn_data == tdata->plaintext.len) {
12545 digest_mem = rte_pktmbuf_append(buf_oop,
12546 tdata->auth_tag.len);
12550 ut_params->obuf->nb_segs = segs;
12554 * Place digest at the end of the last buffer
12557 digest_phys = rte_pktmbuf_iova(buf) + to_trn;
12558 if (oop && buf_last_oop)
12559 digest_phys = rte_pktmbuf_iova(buf_last_oop) + to_trn;
12561 if (!digest_mem && !oop) {
12562 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
12563 + tdata->auth_tag.len);
12564 digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf,
12565 tdata->plaintext.len);
12568 /* Create AEAD operation */
12569 retval = create_aead_operation_SGL(RTE_CRYPTO_AEAD_OP_ENCRYPT,
12570 tdata, digest_mem, digest_phys);
12575 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
12577 ut_params->op->sym->m_src = ut_params->ibuf;
12579 ut_params->op->sym->m_dst = ut_params->obuf;
12581 /* Process crypto operation */
12582 if (oop == IN_PLACE &&
12583 gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)
12584 process_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);
12585 else if (global_api_test_type == CRYPTODEV_RAW_API_TEST)
12586 process_sym_raw_dp_op(ts_params->valid_devs[0], 0,
12587 ut_params->op, 0, 0, 0, 0);
12589 TEST_ASSERT_NOT_NULL(
12590 process_crypto_request(ts_params->valid_devs[0],
12591 ut_params->op), "failed to process sym crypto op");
12593 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
12594 "crypto op processing failed");
12597 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
12598 uint8_t *, prepend_len);
12600 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
12601 uint8_t *, prepend_len);
12605 fragsz = fragsz_oop;
12607 TEST_ASSERT_BUFFERS_ARE_EQUAL(
12609 tdata->ciphertext.data,
12611 "Ciphertext data not as expected");
12613 buf = ut_params->op->sym->m_src->next;
12615 buf = ut_params->op->sym->m_dst->next;
12617 unsigned int off = fragsz;
12621 ciphertext = rte_pktmbuf_mtod(buf,
12624 TEST_ASSERT_BUFFERS_ARE_EQUAL(
12626 tdata->ciphertext.data + off,
12628 "Ciphertext data not as expected");
12630 off += to_trn_tbl[ecx++];
12634 auth_tag = digest_mem;
12635 TEST_ASSERT_BUFFERS_ARE_EQUAL(
12637 tdata->auth_tag.data,
12638 tdata->auth_tag.len,
12639 "Generated auth tag not as expected");
12645 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
12647 return test_authenticated_encryption_SGL(
12648 &gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
12652 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
12654 return test_authenticated_encryption_SGL(
12655 &gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
12659 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
12661 return test_authenticated_encryption_SGL(
12662 &gcm_test_case_8, OUT_OF_PLACE, 400,
12663 gcm_test_case_8.plaintext.len);
12667 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
12669 /* This test is not for OPENSSL PMD */
12670 if (gbl_driver_id == rte_cryptodev_driver_id_get(
12671 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)))
12674 return test_authenticated_encryption_SGL(
12675 &gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
12679 test_authentication_verify_fail_when_data_corrupted(
12680 struct crypto_testsuite_params *ts_params,
12681 struct crypto_unittest_params *ut_params,
12682 const struct test_crypto_vector *reference)
12684 return test_authentication_verify_fail_when_data_corruption(
12685 ts_params, ut_params, reference, 1);
12689 test_authentication_verify_fail_when_tag_corrupted(
12690 struct crypto_testsuite_params *ts_params,
12691 struct crypto_unittest_params *ut_params,
12692 const struct test_crypto_vector *reference)
12694 return test_authentication_verify_fail_when_data_corruption(
12695 ts_params, ut_params, reference, 0);
12699 test_authentication_verify_GMAC_fail_when_data_corrupted(
12700 struct crypto_testsuite_params *ts_params,
12701 struct crypto_unittest_params *ut_params,
12702 const struct test_crypto_vector *reference)
12704 return test_authentication_verify_GMAC_fail_when_corruption(
12705 ts_params, ut_params, reference, 1);
12709 test_authentication_verify_GMAC_fail_when_tag_corrupted(
12710 struct crypto_testsuite_params *ts_params,
12711 struct crypto_unittest_params *ut_params,
12712 const struct test_crypto_vector *reference)
12714 return test_authentication_verify_GMAC_fail_when_corruption(
12715 ts_params, ut_params, reference, 0);
12719 test_authenticated_decryption_fail_when_data_corrupted(
12720 struct crypto_testsuite_params *ts_params,
12721 struct crypto_unittest_params *ut_params,
12722 const struct test_crypto_vector *reference)
12724 return test_authenticated_decryption_fail_when_corruption(
12725 ts_params, ut_params, reference, 1);
12729 test_authenticated_decryption_fail_when_tag_corrupted(
12730 struct crypto_testsuite_params *ts_params,
12731 struct crypto_unittest_params *ut_params,
12732 const struct test_crypto_vector *reference)
12734 return test_authenticated_decryption_fail_when_corruption(
12735 ts_params, ut_params, reference, 0);
12739 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
12741 return test_authentication_verify_fail_when_data_corrupted(
12742 &testsuite_params, &unittest_params,
12743 &hmac_sha1_test_crypto_vector);
12747 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
12749 return test_authentication_verify_fail_when_tag_corrupted(
12750 &testsuite_params, &unittest_params,
12751 &hmac_sha1_test_crypto_vector);
12755 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
12757 return test_authentication_verify_GMAC_fail_when_data_corrupted(
12758 &testsuite_params, &unittest_params,
12759 &aes128_gmac_test_vector);
12763 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
12765 return test_authentication_verify_GMAC_fail_when_tag_corrupted(
12766 &testsuite_params, &unittest_params,
12767 &aes128_gmac_test_vector);
12771 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
12773 return test_authenticated_decryption_fail_when_data_corrupted(
12776 &aes128cbc_hmac_sha1_test_vector);
12780 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
12782 return test_authenticated_decryption_fail_when_tag_corrupted(
12785 &aes128cbc_hmac_sha1_test_vector);
12789 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check(void)
12791 return test_authenticated_encryt_with_esn(
12794 &aes128cbc_hmac_sha1_aad_test_vector);
12798 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check(void)
12800 return test_authenticated_decrypt_with_esn(
12803 &aes128cbc_hmac_sha1_aad_test_vector);
12807 test_chacha20_poly1305_encrypt_test_case_rfc8439(void)
12809 return test_authenticated_encryption(&chacha20_poly1305_case_rfc8439);
12813 test_chacha20_poly1305_decrypt_test_case_rfc8439(void)
12815 return test_authenticated_decryption(&chacha20_poly1305_case_rfc8439);
12818 #ifdef RTE_CRYPTO_SCHEDULER
12820 /* global AESNI worker IDs for the scheduler test */
12821 uint8_t aesni_ids[2];
12824 test_scheduler_attach_slave_op(void)
12826 struct crypto_testsuite_params *ts_params = &testsuite_params;
12827 uint8_t sched_id = ts_params->valid_devs[0];
12828 uint32_t nb_devs, i, nb_devs_attached = 0;
12830 char vdev_name[32];
12832 /* create 2 AESNI_MB if necessary */
12833 nb_devs = rte_cryptodev_device_count_by_driver(
12834 rte_cryptodev_driver_id_get(
12835 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
12837 for (i = nb_devs; i < 2; i++) {
12838 snprintf(vdev_name, sizeof(vdev_name), "%s_%u",
12839 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
12841 ret = rte_vdev_init(vdev_name, NULL);
12843 TEST_ASSERT(ret == 0,
12844 "Failed to create instance %u of"
12846 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
12850 /* attach 2 AESNI_MB cdevs */
12851 for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
12853 struct rte_cryptodev_info info;
12854 unsigned int session_size;
12856 rte_cryptodev_info_get(i, &info);
12857 if (info.driver_id != rte_cryptodev_driver_id_get(
12858 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)))
12861 session_size = rte_cryptodev_sym_get_private_session_size(i);
12863 * Create the session mempool again, since now there are new devices
12864 * to use the mempool.
12866 if (ts_params->session_mpool) {
12867 rte_mempool_free(ts_params->session_mpool);
12868 ts_params->session_mpool = NULL;
12870 if (ts_params->session_priv_mpool) {
12871 rte_mempool_free(ts_params->session_priv_mpool);
12872 ts_params->session_priv_mpool = NULL;
12875 if (info.sym.max_nb_sessions != 0 &&
12876 info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
12877 RTE_LOG(ERR, USER1,
12878 "Device does not support "
12879 "at least %u sessions\n",
12881 return TEST_FAILED;
12884 * Create mempool with maximum number of sessions,
12885 * to include the session headers
12887 if (ts_params->session_mpool == NULL) {
12888 ts_params->session_mpool =
12889 rte_cryptodev_sym_session_pool_create(
12891 MAX_NB_SESSIONS, 0, 0, 0,
12893 TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
12894 "session mempool allocation failed");
12898 * Create mempool with maximum number of sessions,
12899 * to include device specific session private data
12901 if (ts_params->session_priv_mpool == NULL) {
12902 ts_params->session_priv_mpool = rte_mempool_create(
12903 "test_sess_mp_priv",
12906 0, 0, NULL, NULL, NULL,
12907 NULL, SOCKET_ID_ANY,
12910 TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
12911 "session mempool allocation failed");
12914 ts_params->qp_conf.mp_session = ts_params->session_mpool;
12915 ts_params->qp_conf.mp_session_private =
12916 ts_params->session_priv_mpool;
12918 ret = rte_cryptodev_scheduler_worker_attach(sched_id,
12921 TEST_ASSERT(ret == 0,
12922 "Failed to attach device %u of pmd : %s", i,
12923 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
12925 aesni_ids[nb_devs_attached] = (uint8_t)i;
12927 nb_devs_attached++;
12934 test_scheduler_detach_slave_op(void)
12936 struct crypto_testsuite_params *ts_params = &testsuite_params;
12937 uint8_t sched_id = ts_params->valid_devs[0];
12941 for (i = 0; i < 2; i++) {
12942 ret = rte_cryptodev_scheduler_worker_detach(sched_id,
12944 TEST_ASSERT(ret == 0,
12945 "Failed to detach device %u", aesni_ids[i]);
12952 test_scheduler_mode_op(enum rte_cryptodev_scheduler_mode scheduler_mode)
12954 struct crypto_testsuite_params *ts_params = &testsuite_params;
12955 uint8_t sched_id = ts_params->valid_devs[0];
12957 return rte_cryptodev_scheduler_mode_set(sched_id,
12962 test_scheduler_mode_roundrobin_op(void)
12964 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_ROUNDROBIN) ==
12965 0, "Failed to set roundrobin mode");
12971 test_scheduler_mode_multicore_op(void)
12973 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_MULTICORE) ==
12974 0, "Failed to set multicore mode");
12980 test_scheduler_mode_failover_op(void)
12982 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_FAILOVER) ==
12983 0, "Failed to set failover mode");
12989 test_scheduler_mode_pkt_size_distr_op(void)
12991 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_PKT_SIZE_DISTR) ==
12992 0, "Failed to set pktsize mode");
12997 static struct unit_test_suite cryptodev_scheduler_testsuite = {
12998 .suite_name = "Crypto Device Scheduler Unit Test Suite",
12999 .setup = testsuite_setup,
13000 .teardown = testsuite_teardown,
13001 .unit_test_cases = {
13003 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
13004 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_multicore_op),
13005 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13006 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13007 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13008 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
13011 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
13012 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_roundrobin_op),
13013 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13014 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13015 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13016 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
13019 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
13020 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_failover_op),
13021 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13022 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13023 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13024 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
13027 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
13028 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_pkt_size_distr_op),
13029 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13030 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13031 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13032 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
13034 TEST_CASES_END() /**< NULL terminate unit test array */
13038 #endif /* RTE_CRYPTO_SCHEDULER */
13040 static struct unit_test_suite cryptodev_testsuite = {
13041 .suite_name = "Crypto Unit Test Suite",
13042 .setup = testsuite_setup,
13043 .teardown = testsuite_teardown,
13044 .unit_test_cases = {
13045 TEST_CASE_ST(ut_setup, ut_teardown,
13046 test_device_configure_invalid_dev_id),
13047 TEST_CASE_ST(ut_setup, ut_teardown,
13048 test_queue_pair_descriptor_setup),
13049 TEST_CASE_ST(ut_setup, ut_teardown,
13050 test_device_configure_invalid_queue_pair_ids),
13052 TEST_CASE_ST(ut_setup, ut_teardown,
13053 test_multi_session),
13054 TEST_CASE_ST(ut_setup, ut_teardown,
13055 test_multi_session_random_usage),
13057 TEST_CASE_ST(ut_setup, ut_teardown,
13058 test_null_invalid_operation),
13059 TEST_CASE_ST(ut_setup, ut_teardown, test_null_burst_operation),
13061 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13062 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13063 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all),
13064 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all),
13065 TEST_CASE_ST(ut_setup, ut_teardown, test_DES_cipheronly_all),
13066 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_all),
13067 TEST_CASE_ST(ut_setup, ut_teardown, test_DES_docsis_all),
13068 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13069 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
13071 /** AES CCM Authenticated Encryption 128 bits key */
13072 TEST_CASE_ST(ut_setup, ut_teardown,
13073 test_AES_CCM_authenticated_encryption_test_case_128_1),
13074 TEST_CASE_ST(ut_setup, ut_teardown,
13075 test_AES_CCM_authenticated_encryption_test_case_128_2),
13076 TEST_CASE_ST(ut_setup, ut_teardown,
13077 test_AES_CCM_authenticated_encryption_test_case_128_3),
13079 /** AES CCM Authenticated Decryption 128 bits key*/
13080 TEST_CASE_ST(ut_setup, ut_teardown,
13081 test_AES_CCM_authenticated_decryption_test_case_128_1),
13082 TEST_CASE_ST(ut_setup, ut_teardown,
13083 test_AES_CCM_authenticated_decryption_test_case_128_2),
13084 TEST_CASE_ST(ut_setup, ut_teardown,
13085 test_AES_CCM_authenticated_decryption_test_case_128_3),
13087 /** AES CCM Authenticated Encryption 192 bits key */
13088 TEST_CASE_ST(ut_setup, ut_teardown,
13089 test_AES_CCM_authenticated_encryption_test_case_192_1),
13090 TEST_CASE_ST(ut_setup, ut_teardown,
13091 test_AES_CCM_authenticated_encryption_test_case_192_2),
13092 TEST_CASE_ST(ut_setup, ut_teardown,
13093 test_AES_CCM_authenticated_encryption_test_case_192_3),
13095 /** AES CCM Authenticated Decryption 192 bits key*/
13096 TEST_CASE_ST(ut_setup, ut_teardown,
13097 test_AES_CCM_authenticated_decryption_test_case_192_1),
13098 TEST_CASE_ST(ut_setup, ut_teardown,
13099 test_AES_CCM_authenticated_decryption_test_case_192_2),
13100 TEST_CASE_ST(ut_setup, ut_teardown,
13101 test_AES_CCM_authenticated_decryption_test_case_192_3),
13103 /** AES CCM Authenticated Encryption 256 bits key */
13104 TEST_CASE_ST(ut_setup, ut_teardown,
13105 test_AES_CCM_authenticated_encryption_test_case_256_1),
13106 TEST_CASE_ST(ut_setup, ut_teardown,
13107 test_AES_CCM_authenticated_encryption_test_case_256_2),
13108 TEST_CASE_ST(ut_setup, ut_teardown,
13109 test_AES_CCM_authenticated_encryption_test_case_256_3),
13111 /** AES CCM Authenticated Decryption 256 bits key*/
13112 TEST_CASE_ST(ut_setup, ut_teardown,
13113 test_AES_CCM_authenticated_decryption_test_case_256_1),
13114 TEST_CASE_ST(ut_setup, ut_teardown,
13115 test_AES_CCM_authenticated_decryption_test_case_256_2),
13116 TEST_CASE_ST(ut_setup, ut_teardown,
13117 test_AES_CCM_authenticated_decryption_test_case_256_3),
13119 /** AES GCM Authenticated Encryption */
13120 TEST_CASE_ST(ut_setup, ut_teardown,
13121 test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
13122 TEST_CASE_ST(ut_setup, ut_teardown,
13123 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
13124 TEST_CASE_ST(ut_setup, ut_teardown,
13125 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
13126 TEST_CASE_ST(ut_setup, ut_teardown,
13127 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
13128 TEST_CASE_ST(ut_setup, ut_teardown,
13129 test_AES_GCM_authenticated_encryption_test_case_1),
13130 TEST_CASE_ST(ut_setup, ut_teardown,
13131 test_AES_GCM_authenticated_encryption_test_case_2),
13132 TEST_CASE_ST(ut_setup, ut_teardown,
13133 test_AES_GCM_authenticated_encryption_test_case_3),
13134 TEST_CASE_ST(ut_setup, ut_teardown,
13135 test_AES_GCM_authenticated_encryption_test_case_4),
13136 TEST_CASE_ST(ut_setup, ut_teardown,
13137 test_AES_GCM_authenticated_encryption_test_case_5),
13138 TEST_CASE_ST(ut_setup, ut_teardown,
13139 test_AES_GCM_authenticated_encryption_test_case_6),
13140 TEST_CASE_ST(ut_setup, ut_teardown,
13141 test_AES_GCM_authenticated_encryption_test_case_7),
13142 TEST_CASE_ST(ut_setup, ut_teardown,
13143 test_AES_GCM_authenticated_encryption_test_case_8),
13144 TEST_CASE_ST(ut_setup, ut_teardown,
13145 test_AES_GCM_J0_authenticated_encryption_test_case_1),
13147 /** AES GCM Authenticated Decryption */
13148 TEST_CASE_ST(ut_setup, ut_teardown,
13149 test_AES_GCM_authenticated_decryption_test_case_1),
13150 TEST_CASE_ST(ut_setup, ut_teardown,
13151 test_AES_GCM_authenticated_decryption_test_case_2),
13152 TEST_CASE_ST(ut_setup, ut_teardown,
13153 test_AES_GCM_authenticated_decryption_test_case_3),
13154 TEST_CASE_ST(ut_setup, ut_teardown,
13155 test_AES_GCM_authenticated_decryption_test_case_4),
13156 TEST_CASE_ST(ut_setup, ut_teardown,
13157 test_AES_GCM_authenticated_decryption_test_case_5),
13158 TEST_CASE_ST(ut_setup, ut_teardown,
13159 test_AES_GCM_authenticated_decryption_test_case_6),
13160 TEST_CASE_ST(ut_setup, ut_teardown,
13161 test_AES_GCM_authenticated_decryption_test_case_7),
13162 TEST_CASE_ST(ut_setup, ut_teardown,
13163 test_AES_GCM_authenticated_decryption_test_case_8),
13164 TEST_CASE_ST(ut_setup, ut_teardown,
13165 test_AES_GCM_J0_authenticated_decryption_test_case_1),
13167 /** AES GCM Authenticated Encryption 192 bits key */
13168 TEST_CASE_ST(ut_setup, ut_teardown,
13169 test_AES_GCM_auth_encryption_test_case_192_1),
13170 TEST_CASE_ST(ut_setup, ut_teardown,
13171 test_AES_GCM_auth_encryption_test_case_192_2),
13172 TEST_CASE_ST(ut_setup, ut_teardown,
13173 test_AES_GCM_auth_encryption_test_case_192_3),
13174 TEST_CASE_ST(ut_setup, ut_teardown,
13175 test_AES_GCM_auth_encryption_test_case_192_4),
13176 TEST_CASE_ST(ut_setup, ut_teardown,
13177 test_AES_GCM_auth_encryption_test_case_192_5),
13178 TEST_CASE_ST(ut_setup, ut_teardown,
13179 test_AES_GCM_auth_encryption_test_case_192_6),
13180 TEST_CASE_ST(ut_setup, ut_teardown,
13181 test_AES_GCM_auth_encryption_test_case_192_7),
13183 /** AES GCM Authenticated Decryption 192 bits key */
13184 TEST_CASE_ST(ut_setup, ut_teardown,
13185 test_AES_GCM_auth_decryption_test_case_192_1),
13186 TEST_CASE_ST(ut_setup, ut_teardown,
13187 test_AES_GCM_auth_decryption_test_case_192_2),
13188 TEST_CASE_ST(ut_setup, ut_teardown,
13189 test_AES_GCM_auth_decryption_test_case_192_3),
13190 TEST_CASE_ST(ut_setup, ut_teardown,
13191 test_AES_GCM_auth_decryption_test_case_192_4),
13192 TEST_CASE_ST(ut_setup, ut_teardown,
13193 test_AES_GCM_auth_decryption_test_case_192_5),
13194 TEST_CASE_ST(ut_setup, ut_teardown,
13195 test_AES_GCM_auth_decryption_test_case_192_6),
13196 TEST_CASE_ST(ut_setup, ut_teardown,
13197 test_AES_GCM_auth_decryption_test_case_192_7),
13199 /** AES GCM Authenticated Encryption 256 bits key */
13200 TEST_CASE_ST(ut_setup, ut_teardown,
13201 test_AES_GCM_auth_encryption_test_case_256_1),
13202 TEST_CASE_ST(ut_setup, ut_teardown,
13203 test_AES_GCM_auth_encryption_test_case_256_2),
13204 TEST_CASE_ST(ut_setup, ut_teardown,
13205 test_AES_GCM_auth_encryption_test_case_256_3),
13206 TEST_CASE_ST(ut_setup, ut_teardown,
13207 test_AES_GCM_auth_encryption_test_case_256_4),
13208 TEST_CASE_ST(ut_setup, ut_teardown,
13209 test_AES_GCM_auth_encryption_test_case_256_5),
13210 TEST_CASE_ST(ut_setup, ut_teardown,
13211 test_AES_GCM_auth_encryption_test_case_256_6),
13212 TEST_CASE_ST(ut_setup, ut_teardown,
13213 test_AES_GCM_auth_encryption_test_case_256_7),
13215 /** AES GCM Authenticated Decryption 256 bits key */
13216 TEST_CASE_ST(ut_setup, ut_teardown,
13217 test_AES_GCM_auth_decryption_test_case_256_1),
13218 TEST_CASE_ST(ut_setup, ut_teardown,
13219 test_AES_GCM_auth_decryption_test_case_256_2),
13220 TEST_CASE_ST(ut_setup, ut_teardown,
13221 test_AES_GCM_auth_decryption_test_case_256_3),
13222 TEST_CASE_ST(ut_setup, ut_teardown,
13223 test_AES_GCM_auth_decryption_test_case_256_4),
13224 TEST_CASE_ST(ut_setup, ut_teardown,
13225 test_AES_GCM_auth_decryption_test_case_256_5),
13226 TEST_CASE_ST(ut_setup, ut_teardown,
13227 test_AES_GCM_auth_decryption_test_case_256_6),
13228 TEST_CASE_ST(ut_setup, ut_teardown,
13229 test_AES_GCM_auth_decryption_test_case_256_7),
13231 /** AES GCM Authenticated Encryption big aad size */
13232 TEST_CASE_ST(ut_setup, ut_teardown,
13233 test_AES_GCM_auth_encryption_test_case_aad_1),
13234 TEST_CASE_ST(ut_setup, ut_teardown,
13235 test_AES_GCM_auth_encryption_test_case_aad_2),
13237 /** AES GCM Authenticated Decryption big aad size */
13238 TEST_CASE_ST(ut_setup, ut_teardown,
13239 test_AES_GCM_auth_decryption_test_case_aad_1),
13240 TEST_CASE_ST(ut_setup, ut_teardown,
13241 test_AES_GCM_auth_decryption_test_case_aad_2),
13243 /** Out of place tests */
13244 TEST_CASE_ST(ut_setup, ut_teardown,
13245 test_AES_GCM_authenticated_encryption_oop_test_case_1),
13246 TEST_CASE_ST(ut_setup, ut_teardown,
13247 test_AES_GCM_authenticated_decryption_oop_test_case_1),
13249 /** Session-less tests */
13250 TEST_CASE_ST(ut_setup, ut_teardown,
13251 test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
13252 TEST_CASE_ST(ut_setup, ut_teardown,
13253 test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
13255 /** AES GMAC Authentication */
13256 TEST_CASE_ST(ut_setup, ut_teardown,
13257 test_AES_GMAC_authentication_test_case_1),
13258 TEST_CASE_ST(ut_setup, ut_teardown,
13259 test_AES_GMAC_authentication_verify_test_case_1),
13260 TEST_CASE_ST(ut_setup, ut_teardown,
13261 test_AES_GMAC_authentication_test_case_2),
13262 TEST_CASE_ST(ut_setup, ut_teardown,
13263 test_AES_GMAC_authentication_verify_test_case_2),
13264 TEST_CASE_ST(ut_setup, ut_teardown,
13265 test_AES_GMAC_authentication_test_case_3),
13266 TEST_CASE_ST(ut_setup, ut_teardown,
13267 test_AES_GMAC_authentication_verify_test_case_3),
13268 TEST_CASE_ST(ut_setup, ut_teardown,
13269 test_AES_GMAC_authentication_test_case_4),
13270 TEST_CASE_ST(ut_setup, ut_teardown,
13271 test_AES_GMAC_authentication_verify_test_case_4),
13272 TEST_CASE_ST(ut_setup, ut_teardown,
13273 test_AES_GMAC_authentication_SGL_40B),
13274 TEST_CASE_ST(ut_setup, ut_teardown,
13275 test_AES_GMAC_authentication_SGL_80B),
13276 TEST_CASE_ST(ut_setup, ut_teardown,
13277 test_AES_GMAC_authentication_SGL_2048B),
13278 TEST_CASE_ST(ut_setup, ut_teardown,
13279 test_AES_GMAC_authentication_SGL_2047B),
13281 /** Chacha20-Poly1305 */
13282 TEST_CASE_ST(ut_setup, ut_teardown,
13283 test_chacha20_poly1305_encrypt_test_case_rfc8439),
13284 TEST_CASE_ST(ut_setup, ut_teardown,
13285 test_chacha20_poly1305_decrypt_test_case_rfc8439),
13286 /** SNOW 3G encrypt only (UEA2) */
13287 TEST_CASE_ST(ut_setup, ut_teardown,
13288 test_snow3g_encryption_test_case_1),
13289 TEST_CASE_ST(ut_setup, ut_teardown,
13290 test_snow3g_encryption_test_case_2),
13291 TEST_CASE_ST(ut_setup, ut_teardown,
13292 test_snow3g_encryption_test_case_3),
13293 TEST_CASE_ST(ut_setup, ut_teardown,
13294 test_snow3g_encryption_test_case_4),
13295 TEST_CASE_ST(ut_setup, ut_teardown,
13296 test_snow3g_encryption_test_case_5),
13298 TEST_CASE_ST(ut_setup, ut_teardown,
13299 test_snow3g_encryption_test_case_1_oop),
13300 TEST_CASE_ST(ut_setup, ut_teardown,
13301 test_snow3g_encryption_test_case_1_oop_sgl),
13302 TEST_CASE_ST(ut_setup, ut_teardown,
13303 test_snow3g_encryption_test_case_1_offset_oop),
13304 TEST_CASE_ST(ut_setup, ut_teardown,
13305 test_snow3g_decryption_test_case_1_oop),
13307 /** SNOW 3G generate auth, then encrypt (UEA2) */
13308 TEST_CASE_ST(ut_setup, ut_teardown,
13309 test_snow3g_auth_cipher_test_case_1),
13310 TEST_CASE_ST(ut_setup, ut_teardown,
13311 test_snow3g_auth_cipher_test_case_2),
13312 TEST_CASE_ST(ut_setup, ut_teardown,
13313 test_snow3g_auth_cipher_test_case_2_oop),
13314 TEST_CASE_ST(ut_setup, ut_teardown,
13315 test_snow3g_auth_cipher_part_digest_enc),
13316 TEST_CASE_ST(ut_setup, ut_teardown,
13317 test_snow3g_auth_cipher_part_digest_enc_oop),
13318 TEST_CASE_ST(ut_setup, ut_teardown,
13319 test_snow3g_auth_cipher_test_case_3_sgl),
13320 TEST_CASE_ST(ut_setup, ut_teardown,
13321 test_snow3g_auth_cipher_test_case_3_oop_sgl),
13322 TEST_CASE_ST(ut_setup, ut_teardown,
13323 test_snow3g_auth_cipher_part_digest_enc_sgl),
13324 TEST_CASE_ST(ut_setup, ut_teardown,
13325 test_snow3g_auth_cipher_part_digest_enc_oop_sgl),
13327 /** SNOW 3G decrypt (UEA2), then verify auth */
13328 TEST_CASE_ST(ut_setup, ut_teardown,
13329 test_snow3g_auth_cipher_verify_test_case_1),
13330 TEST_CASE_ST(ut_setup, ut_teardown,
13331 test_snow3g_auth_cipher_verify_test_case_2),
13332 TEST_CASE_ST(ut_setup, ut_teardown,
13333 test_snow3g_auth_cipher_verify_test_case_2_oop),
13334 TEST_CASE_ST(ut_setup, ut_teardown,
13335 test_snow3g_auth_cipher_verify_part_digest_enc),
13336 TEST_CASE_ST(ut_setup, ut_teardown,
13337 test_snow3g_auth_cipher_verify_part_digest_enc_oop),
13338 TEST_CASE_ST(ut_setup, ut_teardown,
13339 test_snow3g_auth_cipher_verify_test_case_3_sgl),
13340 TEST_CASE_ST(ut_setup, ut_teardown,
13341 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl),
13342 TEST_CASE_ST(ut_setup, ut_teardown,
13343 test_snow3g_auth_cipher_verify_part_digest_enc_sgl),
13344 TEST_CASE_ST(ut_setup, ut_teardown,
13345 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl),
13347 /** SNOW 3G decrypt only (UEA2) */
13348 TEST_CASE_ST(ut_setup, ut_teardown,
13349 test_snow3g_decryption_test_case_1),
13350 TEST_CASE_ST(ut_setup, ut_teardown,
13351 test_snow3g_decryption_test_case_2),
13352 TEST_CASE_ST(ut_setup, ut_teardown,
13353 test_snow3g_decryption_test_case_3),
13354 TEST_CASE_ST(ut_setup, ut_teardown,
13355 test_snow3g_decryption_test_case_4),
13356 TEST_CASE_ST(ut_setup, ut_teardown,
13357 test_snow3g_decryption_test_case_5),
13358 TEST_CASE_ST(ut_setup, ut_teardown,
13359 test_snow3g_decryption_with_digest_test_case_1),
13360 TEST_CASE_ST(ut_setup, ut_teardown,
13361 test_snow3g_hash_generate_test_case_1),
13362 TEST_CASE_ST(ut_setup, ut_teardown,
13363 test_snow3g_hash_generate_test_case_2),
13364 TEST_CASE_ST(ut_setup, ut_teardown,
13365 test_snow3g_hash_generate_test_case_3),
13366 /* Tests with buffers which length is not byte-aligned */
13367 TEST_CASE_ST(ut_setup, ut_teardown,
13368 test_snow3g_hash_generate_test_case_4),
13369 TEST_CASE_ST(ut_setup, ut_teardown,
13370 test_snow3g_hash_generate_test_case_5),
13371 TEST_CASE_ST(ut_setup, ut_teardown,
13372 test_snow3g_hash_generate_test_case_6),
13373 TEST_CASE_ST(ut_setup, ut_teardown,
13374 test_snow3g_hash_verify_test_case_1),
13375 TEST_CASE_ST(ut_setup, ut_teardown,
13376 test_snow3g_hash_verify_test_case_2),
13377 TEST_CASE_ST(ut_setup, ut_teardown,
13378 test_snow3g_hash_verify_test_case_3),
13379 /* Tests with buffers which length is not byte-aligned */
13380 TEST_CASE_ST(ut_setup, ut_teardown,
13381 test_snow3g_hash_verify_test_case_4),
13382 TEST_CASE_ST(ut_setup, ut_teardown,
13383 test_snow3g_hash_verify_test_case_5),
13384 TEST_CASE_ST(ut_setup, ut_teardown,
13385 test_snow3g_hash_verify_test_case_6),
13386 TEST_CASE_ST(ut_setup, ut_teardown,
13387 test_snow3g_cipher_auth_test_case_1),
13388 TEST_CASE_ST(ut_setup, ut_teardown,
13389 test_snow3g_auth_cipher_with_digest_test_case_1),
13391 /** ZUC encrypt only (EEA3) */
13392 TEST_CASE_ST(ut_setup, ut_teardown,
13393 test_zuc_encryption_test_case_1),
13394 TEST_CASE_ST(ut_setup, ut_teardown,
13395 test_zuc_encryption_test_case_2),
13396 TEST_CASE_ST(ut_setup, ut_teardown,
13397 test_zuc_encryption_test_case_3),
13398 TEST_CASE_ST(ut_setup, ut_teardown,
13399 test_zuc_encryption_test_case_4),
13400 TEST_CASE_ST(ut_setup, ut_teardown,
13401 test_zuc_encryption_test_case_5),
13402 TEST_CASE_ST(ut_setup, ut_teardown,
13403 test_zuc_encryption_test_case_6_sgl),
13405 /** ZUC authenticate (EIA3) */
13406 TEST_CASE_ST(ut_setup, ut_teardown,
13407 test_zuc_hash_generate_test_case_1),
13408 TEST_CASE_ST(ut_setup, ut_teardown,
13409 test_zuc_hash_generate_test_case_2),
13410 TEST_CASE_ST(ut_setup, ut_teardown,
13411 test_zuc_hash_generate_test_case_3),
13412 TEST_CASE_ST(ut_setup, ut_teardown,
13413 test_zuc_hash_generate_test_case_4),
13414 TEST_CASE_ST(ut_setup, ut_teardown,
13415 test_zuc_hash_generate_test_case_5),
13416 TEST_CASE_ST(ut_setup, ut_teardown,
13417 test_zuc_hash_generate_test_case_6),
13418 TEST_CASE_ST(ut_setup, ut_teardown,
13419 test_zuc_hash_generate_test_case_7),
13420 TEST_CASE_ST(ut_setup, ut_teardown,
13421 test_zuc_hash_generate_test_case_8),
13423 /** ZUC alg-chain (EEA3/EIA3) */
13424 TEST_CASE_ST(ut_setup, ut_teardown,
13425 test_zuc_cipher_auth_test_case_1),
13426 TEST_CASE_ST(ut_setup, ut_teardown,
13427 test_zuc_cipher_auth_test_case_2),
13429 /** ZUC generate auth, then encrypt (EEA3) */
13430 TEST_CASE_ST(ut_setup, ut_teardown,
13431 test_zuc_auth_cipher_test_case_1),
13432 TEST_CASE_ST(ut_setup, ut_teardown,
13433 test_zuc_auth_cipher_test_case_1_oop),
13434 TEST_CASE_ST(ut_setup, ut_teardown,
13435 test_zuc_auth_cipher_test_case_1_sgl),
13436 TEST_CASE_ST(ut_setup, ut_teardown,
13437 test_zuc_auth_cipher_test_case_1_oop_sgl),
13439 /** ZUC decrypt (EEA3), then verify auth */
13440 TEST_CASE_ST(ut_setup, ut_teardown,
13441 test_zuc_auth_cipher_verify_test_case_1),
13442 TEST_CASE_ST(ut_setup, ut_teardown,
13443 test_zuc_auth_cipher_verify_test_case_1_oop),
13444 TEST_CASE_ST(ut_setup, ut_teardown,
13445 test_zuc_auth_cipher_verify_test_case_1_sgl),
13446 TEST_CASE_ST(ut_setup, ut_teardown,
13447 test_zuc_auth_cipher_verify_test_case_1_oop_sgl),
13449 /** HMAC_MD5 Authentication */
13450 TEST_CASE_ST(ut_setup, ut_teardown,
13451 test_MD5_HMAC_generate_case_1),
13452 TEST_CASE_ST(ut_setup, ut_teardown,
13453 test_MD5_HMAC_verify_case_1),
13454 TEST_CASE_ST(ut_setup, ut_teardown,
13455 test_MD5_HMAC_generate_case_2),
13456 TEST_CASE_ST(ut_setup, ut_teardown,
13457 test_MD5_HMAC_verify_case_2),
13459 /** KASUMI hash only (UIA1) */
13460 TEST_CASE_ST(ut_setup, ut_teardown,
13461 test_kasumi_hash_generate_test_case_1),
13462 TEST_CASE_ST(ut_setup, ut_teardown,
13463 test_kasumi_hash_generate_test_case_2),
13464 TEST_CASE_ST(ut_setup, ut_teardown,
13465 test_kasumi_hash_generate_test_case_3),
13466 TEST_CASE_ST(ut_setup, ut_teardown,
13467 test_kasumi_hash_generate_test_case_4),
13468 TEST_CASE_ST(ut_setup, ut_teardown,
13469 test_kasumi_hash_generate_test_case_5),
13470 TEST_CASE_ST(ut_setup, ut_teardown,
13471 test_kasumi_hash_generate_test_case_6),
13473 TEST_CASE_ST(ut_setup, ut_teardown,
13474 test_kasumi_hash_verify_test_case_1),
13475 TEST_CASE_ST(ut_setup, ut_teardown,
13476 test_kasumi_hash_verify_test_case_2),
13477 TEST_CASE_ST(ut_setup, ut_teardown,
13478 test_kasumi_hash_verify_test_case_3),
13479 TEST_CASE_ST(ut_setup, ut_teardown,
13480 test_kasumi_hash_verify_test_case_4),
13481 TEST_CASE_ST(ut_setup, ut_teardown,
13482 test_kasumi_hash_verify_test_case_5),
13484 /** KASUMI encrypt only (UEA1) */
13485 TEST_CASE_ST(ut_setup, ut_teardown,
13486 test_kasumi_encryption_test_case_1),
13487 TEST_CASE_ST(ut_setup, ut_teardown,
13488 test_kasumi_encryption_test_case_1_sgl),
13489 TEST_CASE_ST(ut_setup, ut_teardown,
13490 test_kasumi_encryption_test_case_1_oop),
13491 TEST_CASE_ST(ut_setup, ut_teardown,
13492 test_kasumi_encryption_test_case_1_oop_sgl),
13493 TEST_CASE_ST(ut_setup, ut_teardown,
13494 test_kasumi_encryption_test_case_2),
13495 TEST_CASE_ST(ut_setup, ut_teardown,
13496 test_kasumi_encryption_test_case_3),
13497 TEST_CASE_ST(ut_setup, ut_teardown,
13498 test_kasumi_encryption_test_case_4),
13499 TEST_CASE_ST(ut_setup, ut_teardown,
13500 test_kasumi_encryption_test_case_5),
13502 /** KASUMI decrypt only (UEA1) */
13503 TEST_CASE_ST(ut_setup, ut_teardown,
13504 test_kasumi_decryption_test_case_1),
13505 TEST_CASE_ST(ut_setup, ut_teardown,
13506 test_kasumi_decryption_test_case_2),
13507 TEST_CASE_ST(ut_setup, ut_teardown,
13508 test_kasumi_decryption_test_case_3),
13509 TEST_CASE_ST(ut_setup, ut_teardown,
13510 test_kasumi_decryption_test_case_4),
13511 TEST_CASE_ST(ut_setup, ut_teardown,
13512 test_kasumi_decryption_test_case_5),
13513 TEST_CASE_ST(ut_setup, ut_teardown,
13514 test_kasumi_decryption_test_case_1_oop),
13516 TEST_CASE_ST(ut_setup, ut_teardown,
13517 test_kasumi_cipher_auth_test_case_1),
13519 /** KASUMI generate auth, then encrypt (F8) */
13520 TEST_CASE_ST(ut_setup, ut_teardown,
13521 test_kasumi_auth_cipher_test_case_1),
13522 TEST_CASE_ST(ut_setup, ut_teardown,
13523 test_kasumi_auth_cipher_test_case_2),
13524 TEST_CASE_ST(ut_setup, ut_teardown,
13525 test_kasumi_auth_cipher_test_case_2_oop),
13526 TEST_CASE_ST(ut_setup, ut_teardown,
13527 test_kasumi_auth_cipher_test_case_2_sgl),
13528 TEST_CASE_ST(ut_setup, ut_teardown,
13529 test_kasumi_auth_cipher_test_case_2_oop_sgl),
13531 /** KASUMI decrypt (F8), then verify auth */
13532 TEST_CASE_ST(ut_setup, ut_teardown,
13533 test_kasumi_auth_cipher_verify_test_case_1),
13534 TEST_CASE_ST(ut_setup, ut_teardown,
13535 test_kasumi_auth_cipher_verify_test_case_2),
13536 TEST_CASE_ST(ut_setup, ut_teardown,
13537 test_kasumi_auth_cipher_verify_test_case_2_oop),
13538 TEST_CASE_ST(ut_setup, ut_teardown,
13539 test_kasumi_auth_cipher_verify_test_case_2_sgl),
13540 TEST_CASE_ST(ut_setup, ut_teardown,
13541 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl),
13543 /** ESN Testcase */
13544 TEST_CASE_ST(ut_setup, ut_teardown,
13545 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check),
13546 TEST_CASE_ST(ut_setup, ut_teardown,
13547 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check),
13549 /** Negative tests */
13550 TEST_CASE_ST(ut_setup, ut_teardown,
13551 authentication_verify_HMAC_SHA1_fail_data_corrupt),
13552 TEST_CASE_ST(ut_setup, ut_teardown,
13553 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
13554 TEST_CASE_ST(ut_setup, ut_teardown,
13555 test_AES_GCM_auth_encryption_fail_iv_corrupt),
13556 TEST_CASE_ST(ut_setup, ut_teardown,
13557 test_AES_GCM_auth_encryption_fail_in_data_corrupt),
13558 TEST_CASE_ST(ut_setup, ut_teardown,
13559 test_AES_GCM_auth_encryption_fail_out_data_corrupt),
13560 TEST_CASE_ST(ut_setup, ut_teardown,
13561 test_AES_GCM_auth_encryption_fail_aad_len_corrupt),
13562 TEST_CASE_ST(ut_setup, ut_teardown,
13563 test_AES_GCM_auth_encryption_fail_aad_corrupt),
13564 TEST_CASE_ST(ut_setup, ut_teardown,
13565 test_AES_GCM_auth_encryption_fail_tag_corrupt),
13566 TEST_CASE_ST(ut_setup, ut_teardown,
13567 test_AES_GCM_auth_decryption_fail_iv_corrupt),
13568 TEST_CASE_ST(ut_setup, ut_teardown,
13569 test_AES_GCM_auth_decryption_fail_in_data_corrupt),
13570 TEST_CASE_ST(ut_setup, ut_teardown,
13571 test_AES_GCM_auth_decryption_fail_out_data_corrupt),
13572 TEST_CASE_ST(ut_setup, ut_teardown,
13573 test_AES_GCM_auth_decryption_fail_aad_len_corrupt),
13574 TEST_CASE_ST(ut_setup, ut_teardown,
13575 test_AES_GCM_auth_decryption_fail_aad_corrupt),
13576 TEST_CASE_ST(ut_setup, ut_teardown,
13577 test_AES_GCM_auth_decryption_fail_tag_corrupt),
13578 TEST_CASE_ST(ut_setup, ut_teardown,
13579 authentication_verify_AES128_GMAC_fail_data_corrupt),
13580 TEST_CASE_ST(ut_setup, ut_teardown,
13581 authentication_verify_AES128_GMAC_fail_tag_corrupt),
13582 TEST_CASE_ST(ut_setup, ut_teardown,
13583 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13584 TEST_CASE_ST(ut_setup, ut_teardown,
13585 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13587 /** Mixed CIPHER + HASH algorithms */
13588 /** AUTH AES CMAC + CIPHER AES CTR */
13589 TEST_CASE_ST(ut_setup, ut_teardown,
13590 test_aes_cmac_aes_ctr_digest_enc_test_case_1),
13591 TEST_CASE_ST(ut_setup, ut_teardown,
13592 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop),
13593 TEST_CASE_ST(ut_setup, ut_teardown,
13594 test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl),
13595 TEST_CASE_ST(ut_setup, ut_teardown,
13596 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl),
13597 TEST_CASE_ST(ut_setup, ut_teardown,
13598 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1),
13599 TEST_CASE_ST(ut_setup, ut_teardown,
13600 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop),
13601 TEST_CASE_ST(ut_setup, ut_teardown,
13602 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl),
13603 TEST_CASE_ST(ut_setup, ut_teardown,
13604 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl),
13606 /** AUTH ZUC + CIPHER SNOW3G */
13607 TEST_CASE_ST(ut_setup, ut_teardown,
13608 test_auth_zuc_cipher_snow_test_case_1),
13609 TEST_CASE_ST(ut_setup, ut_teardown,
13610 test_verify_auth_zuc_cipher_snow_test_case_1),
13611 /** AUTH AES CMAC + CIPHER SNOW3G */
13612 TEST_CASE_ST(ut_setup, ut_teardown,
13613 test_auth_aes_cmac_cipher_snow_test_case_1),
13614 TEST_CASE_ST(ut_setup, ut_teardown,
13615 test_verify_auth_aes_cmac_cipher_snow_test_case_1),
13616 /** AUTH ZUC + CIPHER AES CTR */
13617 TEST_CASE_ST(ut_setup, ut_teardown,
13618 test_auth_zuc_cipher_aes_ctr_test_case_1),
13619 TEST_CASE_ST(ut_setup, ut_teardown,
13620 test_verify_auth_zuc_cipher_aes_ctr_test_case_1),
13621 /** AUTH SNOW3G + CIPHER AES CTR */
13622 TEST_CASE_ST(ut_setup, ut_teardown,
13623 test_auth_snow_cipher_aes_ctr_test_case_1),
13624 TEST_CASE_ST(ut_setup, ut_teardown,
13625 test_verify_auth_snow_cipher_aes_ctr_test_case_1),
13626 /** AUTH SNOW3G + CIPHER ZUC */
13627 TEST_CASE_ST(ut_setup, ut_teardown,
13628 test_auth_snow_cipher_zuc_test_case_1),
13629 TEST_CASE_ST(ut_setup, ut_teardown,
13630 test_verify_auth_snow_cipher_zuc_test_case_1),
13631 /** AUTH AES CMAC + CIPHER ZUC */
13632 TEST_CASE_ST(ut_setup, ut_teardown,
13633 test_auth_aes_cmac_cipher_zuc_test_case_1),
13634 TEST_CASE_ST(ut_setup, ut_teardown,
13635 test_verify_auth_aes_cmac_cipher_zuc_test_case_1),
13637 /** AUTH NULL + CIPHER SNOW3G */
13638 TEST_CASE_ST(ut_setup, ut_teardown,
13639 test_auth_null_cipher_snow_test_case_1),
13640 TEST_CASE_ST(ut_setup, ut_teardown,
13641 test_verify_auth_null_cipher_snow_test_case_1),
13642 /** AUTH NULL + CIPHER ZUC */
13643 TEST_CASE_ST(ut_setup, ut_teardown,
13644 test_auth_null_cipher_zuc_test_case_1),
13645 TEST_CASE_ST(ut_setup, ut_teardown,
13646 test_verify_auth_null_cipher_zuc_test_case_1),
13647 /** AUTH SNOW3G + CIPHER NULL */
13648 TEST_CASE_ST(ut_setup, ut_teardown,
13649 test_auth_snow_cipher_null_test_case_1),
13650 TEST_CASE_ST(ut_setup, ut_teardown,
13651 test_verify_auth_snow_cipher_null_test_case_1),
13652 /** AUTH ZUC + CIPHER NULL */
13653 TEST_CASE_ST(ut_setup, ut_teardown,
13654 test_auth_zuc_cipher_null_test_case_1),
13655 TEST_CASE_ST(ut_setup, ut_teardown,
13656 test_verify_auth_zuc_cipher_null_test_case_1),
13657 /** AUTH NULL + CIPHER AES CTR */
13658 TEST_CASE_ST(ut_setup, ut_teardown,
13659 test_auth_null_cipher_aes_ctr_test_case_1),
13660 TEST_CASE_ST(ut_setup, ut_teardown,
13661 test_verify_auth_null_cipher_aes_ctr_test_case_1),
13662 /** AUTH AES CMAC + CIPHER NULL */
13663 TEST_CASE_ST(ut_setup, ut_teardown,
13664 test_auth_aes_cmac_cipher_null_test_case_1),
13665 TEST_CASE_ST(ut_setup, ut_teardown,
13666 test_verify_auth_aes_cmac_cipher_null_test_case_1),
13668 #ifdef RTE_LIB_SECURITY
13669 TEST_CASE_ST(ut_setup_security, ut_teardown,
13670 test_PDCP_PROTO_all),
13671 TEST_CASE_ST(ut_setup_security, ut_teardown,
13672 test_DOCSIS_PROTO_all),
13674 TEST_CASES_END() /**< NULL terminate unit test array */
13678 static struct unit_test_suite cryptodev_virtio_testsuite = {
13679 .suite_name = "Crypto VIRTIO Unit Test Suite",
13680 .setup = testsuite_setup,
13681 .teardown = testsuite_teardown,
13682 .unit_test_cases = {
13683 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13685 TEST_CASES_END() /**< NULL terminate unit test array */
13689 static struct unit_test_suite cryptodev_caam_jr_testsuite = {
13690 .suite_name = "Crypto CAAM JR Unit Test Suite",
13691 .setup = testsuite_setup,
13692 .teardown = testsuite_teardown,
13693 .unit_test_cases = {
13694 TEST_CASE_ST(ut_setup, ut_teardown,
13695 test_device_configure_invalid_dev_id),
13696 TEST_CASE_ST(ut_setup, ut_teardown,
13697 test_multi_session),
13699 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13700 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all),
13701 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13702 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all),
13703 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13705 TEST_CASES_END() /**< NULL terminate unit test array */
13709 static struct unit_test_suite cryptodev_mrvl_testsuite = {
13710 .suite_name = "Crypto Device Marvell Component Test Suite",
13711 .setup = testsuite_setup,
13712 .teardown = testsuite_teardown,
13713 .unit_test_cases = {
13714 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
13715 TEST_CASE_ST(ut_setup, ut_teardown,
13716 test_multi_session_random_usage),
13717 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13718 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13719 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13720 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all),
13721 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all),
13723 /** Negative tests */
13724 TEST_CASE_ST(ut_setup, ut_teardown,
13725 authentication_verify_HMAC_SHA1_fail_data_corrupt),
13726 TEST_CASE_ST(ut_setup, ut_teardown,
13727 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
13728 TEST_CASE_ST(ut_setup, ut_teardown,
13729 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13730 TEST_CASE_ST(ut_setup, ut_teardown,
13731 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13733 TEST_CASES_END() /**< NULL terminate unit test array */
13737 static struct unit_test_suite cryptodev_ccp_testsuite = {
13738 .suite_name = "Crypto Device CCP Unit Test Suite",
13739 .setup = testsuite_setup,
13740 .teardown = testsuite_teardown,
13741 .unit_test_cases = {
13742 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
13743 TEST_CASE_ST(ut_setup, ut_teardown,
13744 test_multi_session_random_usage),
13745 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),
13746 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),
13747 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all),
13748 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all),
13749 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),
13751 /** Negative tests */
13752 TEST_CASE_ST(ut_setup, ut_teardown,
13753 authentication_verify_HMAC_SHA1_fail_data_corrupt),
13754 TEST_CASE_ST(ut_setup, ut_teardown,
13755 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
13756 TEST_CASE_ST(ut_setup, ut_teardown,
13757 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13758 TEST_CASE_ST(ut_setup, ut_teardown,
13759 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13761 TEST_CASES_END() /**< NULL terminate unit test array */
13766 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
13768 gbl_driver_id = rte_cryptodev_driver_id_get(
13769 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
13771 if (gbl_driver_id == -1) {
13772 RTE_LOG(ERR, USER1, "QAT PMD must be loaded.\n");
13773 return TEST_SKIPPED;
13776 return unit_test_suite_runner(&cryptodev_testsuite);
13780 test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/)
13782 gbl_driver_id = rte_cryptodev_driver_id_get(
13783 RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD));
13785 if (gbl_driver_id == -1) {
13786 RTE_LOG(ERR, USER1, "VIRTIO PMD must be loaded.\n");
13787 return TEST_FAILED;
13790 return unit_test_suite_runner(&cryptodev_virtio_testsuite);
13794 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
13796 gbl_driver_id = rte_cryptodev_driver_id_get(
13797 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
13799 if (gbl_driver_id == -1) {
13800 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded.\n");
13801 return TEST_SKIPPED;
13804 return unit_test_suite_runner(&cryptodev_testsuite);
13808 test_cryptodev_cpu_aesni_mb(void)
13811 enum rte_security_session_action_type at;
13813 gbl_driver_id = rte_cryptodev_driver_id_get(
13814 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
13816 if (gbl_driver_id == -1) {
13817 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded.\n");
13818 return TEST_SKIPPED;
13821 at = gbl_action_type;
13822 gbl_action_type = RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO;
13823 rc = unit_test_suite_runner(&cryptodev_testsuite);
13824 gbl_action_type = at;
13829 test_cryptodev_openssl(void)
13831 gbl_driver_id = rte_cryptodev_driver_id_get(
13832 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
13834 if (gbl_driver_id == -1) {
13835 RTE_LOG(ERR, USER1, "OPENSSL PMD must be loaded.\n");
13836 return TEST_SKIPPED;
13839 return unit_test_suite_runner(&cryptodev_testsuite);
13843 test_cryptodev_aesni_gcm(void)
13845 gbl_driver_id = rte_cryptodev_driver_id_get(
13846 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
13848 if (gbl_driver_id == -1) {
13849 RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded.\n");
13850 return TEST_SKIPPED;
13853 return unit_test_suite_runner(&cryptodev_testsuite);
13857 test_cryptodev_cpu_aesni_gcm(void)
13860 enum rte_security_session_action_type at;
13862 gbl_driver_id = rte_cryptodev_driver_id_get(
13863 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
13865 if (gbl_driver_id == -1) {
13866 RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded.\n");
13867 return TEST_SKIPPED;
13870 at = gbl_action_type;
13871 gbl_action_type = RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO;
13872 rc = unit_test_suite_runner(&cryptodev_testsuite);
13873 gbl_action_type = at;
13878 test_cryptodev_null(void)
13880 gbl_driver_id = rte_cryptodev_driver_id_get(
13881 RTE_STR(CRYPTODEV_NAME_NULL_PMD));
13883 if (gbl_driver_id == -1) {
13884 RTE_LOG(ERR, USER1, "NULL PMD must be loaded.\n");
13885 return TEST_SKIPPED;
13888 return unit_test_suite_runner(&cryptodev_testsuite);
13892 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
13894 gbl_driver_id = rte_cryptodev_driver_id_get(
13895 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
13897 if (gbl_driver_id == -1) {
13898 RTE_LOG(ERR, USER1, "SNOW3G PMD must be loaded.\n");
13899 return TEST_SKIPPED;
13902 return unit_test_suite_runner(&cryptodev_testsuite);
13906 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
13908 gbl_driver_id = rte_cryptodev_driver_id_get(
13909 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
13911 if (gbl_driver_id == -1) {
13912 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded.\n");
13913 return TEST_SKIPPED;
13916 return unit_test_suite_runner(&cryptodev_testsuite);
13920 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
13922 gbl_driver_id = rte_cryptodev_driver_id_get(
13923 RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
13925 if (gbl_driver_id == -1) {
13926 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded.\n");
13927 return TEST_SKIPPED;
13930 return unit_test_suite_runner(&cryptodev_testsuite);
13934 test_cryptodev_armv8(void)
13936 gbl_driver_id = rte_cryptodev_driver_id_get(
13937 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
13939 if (gbl_driver_id == -1) {
13940 RTE_LOG(ERR, USER1, "ARMV8 PMD must be loaded.\n");
13941 return TEST_SKIPPED;
13944 return unit_test_suite_runner(&cryptodev_testsuite);
13948 test_cryptodev_mrvl(void)
13950 gbl_driver_id = rte_cryptodev_driver_id_get(
13951 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
13953 if (gbl_driver_id == -1) {
13954 RTE_LOG(ERR, USER1, "MVSAM PMD must be loaded.\n");
13955 return TEST_SKIPPED;
13958 return unit_test_suite_runner(&cryptodev_mrvl_testsuite);
13961 #ifdef RTE_CRYPTO_SCHEDULER
13964 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
13966 gbl_driver_id = rte_cryptodev_driver_id_get(
13967 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
13969 if (gbl_driver_id == -1) {
13970 RTE_LOG(ERR, USER1, "SCHEDULER PMD must be loaded.\n");
13971 return TEST_SKIPPED;
13974 if (rte_cryptodev_driver_id_get(
13975 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) == -1) {
13976 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded.\n");
13977 return TEST_SKIPPED;
13979 return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
13982 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
13987 test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
13989 gbl_driver_id = rte_cryptodev_driver_id_get(
13990 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD));
13992 if (gbl_driver_id == -1) {
13993 RTE_LOG(ERR, USER1, "DPAA2 SEC PMD must be loaded.\n");
13994 return TEST_SKIPPED;
13997 return unit_test_suite_runner(&cryptodev_testsuite);
14001 test_cryptodev_dpaa_sec(void /*argv __rte_unused, int argc __rte_unused*/)
14003 gbl_driver_id = rte_cryptodev_driver_id_get(
14004 RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD));
14006 if (gbl_driver_id == -1) {
14007 RTE_LOG(ERR, USER1, "DPAA SEC PMD must be loaded.\n");
14008 return TEST_SKIPPED;
14011 return unit_test_suite_runner(&cryptodev_testsuite);
14015 test_cryptodev_ccp(void)
14017 gbl_driver_id = rte_cryptodev_driver_id_get(
14018 RTE_STR(CRYPTODEV_NAME_CCP_PMD));
14020 if (gbl_driver_id == -1) {
14021 RTE_LOG(ERR, USER1, "CCP PMD must be loaded.\n");
14022 return TEST_FAILED;
14025 return unit_test_suite_runner(&cryptodev_ccp_testsuite);
14029 test_cryptodev_octeontx(void)
14031 gbl_driver_id = rte_cryptodev_driver_id_get(
14032 RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD));
14033 if (gbl_driver_id == -1) {
14034 RTE_LOG(ERR, USER1, "OCTEONTX PMD must be loaded.\n");
14035 return TEST_FAILED;
14037 return unit_test_suite_runner(&cryptodev_testsuite);
14041 test_cryptodev_octeontx2(void)
14043 gbl_driver_id = rte_cryptodev_driver_id_get(
14044 RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD));
14045 if (gbl_driver_id == -1) {
14046 RTE_LOG(ERR, USER1, "OCTEON TX2 PMD must be loaded.\n");
14047 return TEST_FAILED;
14049 return unit_test_suite_runner(&cryptodev_testsuite);
14053 test_cryptodev_caam_jr(void /*argv __rte_unused, int argc __rte_unused*/)
14055 gbl_driver_id = rte_cryptodev_driver_id_get(
14056 RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD));
14058 if (gbl_driver_id == -1) {
14059 RTE_LOG(ERR, USER1, "CAAM_JR PMD must be loaded.\n");
14060 return TEST_FAILED;
14063 return unit_test_suite_runner(&cryptodev_caam_jr_testsuite);
14067 test_cryptodev_nitrox(void)
14069 gbl_driver_id = rte_cryptodev_driver_id_get(
14070 RTE_STR(CRYPTODEV_NAME_NITROX_PMD));
14072 if (gbl_driver_id == -1) {
14073 RTE_LOG(ERR, USER1, "NITROX PMD must be loaded.\n");
14074 return TEST_FAILED;
14077 return unit_test_suite_runner(&cryptodev_testsuite);
14081 test_cryptodev_bcmfs(void)
14083 gbl_driver_id = rte_cryptodev_driver_id_get(
14084 RTE_STR(CRYPTODEV_NAME_BCMFS_PMD));
14086 if (gbl_driver_id == -1) {
14087 RTE_LOG(ERR, USER1, "BCMFS PMD must be loaded.\n");
14088 return TEST_FAILED;
14091 return unit_test_suite_runner(&cryptodev_testsuite);
14095 test_cryptodev_qat_raw_api(void /*argv __rte_unused, int argc __rte_unused*/)
14099 gbl_driver_id = rte_cryptodev_driver_id_get(
14100 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
14102 if (gbl_driver_id == -1) {
14103 RTE_LOG(ERR, USER1, "QAT PMD must be loaded.\n");
14104 return TEST_SKIPPED;
14107 global_api_test_type = CRYPTODEV_RAW_API_TEST;
14108 ret = unit_test_suite_runner(&cryptodev_testsuite);
14109 global_api_test_type = CRYPTODEV_API_TEST;
14114 REGISTER_TEST_COMMAND(cryptodev_qat_raw_api_autotest,
14115 test_cryptodev_qat_raw_api);
14116 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
14117 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
14118 REGISTER_TEST_COMMAND(cryptodev_cpu_aesni_mb_autotest,
14119 test_cryptodev_cpu_aesni_mb);
14120 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
14121 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
14122 REGISTER_TEST_COMMAND(cryptodev_cpu_aesni_gcm_autotest,
14123 test_cryptodev_cpu_aesni_gcm);
14124 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
14125 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
14126 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
14127 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
14128 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);
14129 REGISTER_TEST_COMMAND(cryptodev_sw_mvsam_autotest, test_cryptodev_mrvl);
14130 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec);
14131 REGISTER_TEST_COMMAND(cryptodev_dpaa_sec_autotest, test_cryptodev_dpaa_sec);
14132 REGISTER_TEST_COMMAND(cryptodev_ccp_autotest, test_cryptodev_ccp);
14133 REGISTER_TEST_COMMAND(cryptodev_virtio_autotest, test_cryptodev_virtio);
14134 REGISTER_TEST_COMMAND(cryptodev_octeontx_autotest, test_cryptodev_octeontx);
14135 REGISTER_TEST_COMMAND(cryptodev_octeontx2_autotest, test_cryptodev_octeontx2);
14136 REGISTER_TEST_COMMAND(cryptodev_caam_jr_autotest, test_cryptodev_caam_jr);
14137 REGISTER_TEST_COMMAND(cryptodev_nitrox_autotest, test_cryptodev_nitrox);
14138 REGISTER_TEST_COMMAND(cryptodev_bcmfs_autotest, test_cryptodev_bcmfs);