xref: /dpdk/app/test/test_cryptodev.c (revision ff53baa9)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015-2019 Intel Corporation
3  */
4 
5 #include <time.h>
6 
7 #include <rte_common.h>
8 #include <rte_hexdump.h>
9 #include <rte_mbuf.h>
10 #include <rte_malloc.h>
11 #include <rte_memcpy.h>
12 #include <rte_pause.h>
13 #include <rte_bus_vdev.h>
14 
15 #include <rte_crypto.h>
16 #include <rte_cryptodev.h>
17 #include <rte_cryptodev_pmd.h>
18 #include <rte_string_fns.h>
19 
20 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
21 #include <rte_cryptodev_scheduler.h>
22 #include <rte_cryptodev_scheduler_operations.h>
23 #endif
24 
25 #include <rte_lcore.h>
26 
27 #include "test.h"
28 #include "test_cryptodev.h"
29 
30 #include "test_cryptodev_blockcipher.h"
31 #include "test_cryptodev_aes_test_vectors.h"
32 #include "test_cryptodev_des_test_vectors.h"
33 #include "test_cryptodev_hash_test_vectors.h"
34 #include "test_cryptodev_kasumi_test_vectors.h"
35 #include "test_cryptodev_kasumi_hash_test_vectors.h"
36 #include "test_cryptodev_snow3g_test_vectors.h"
37 #include "test_cryptodev_snow3g_hash_test_vectors.h"
38 #include "test_cryptodev_zuc_test_vectors.h"
39 #include "test_cryptodev_aead_test_vectors.h"
40 #include "test_cryptodev_hmac_test_vectors.h"
41 
42 #define VDEV_ARGS_SIZE 100
43 #define MAX_NB_SESSIONS 4
44 
45 #define IN_PLACE 0
46 #define OUT_OF_PLACE 1
47 
48 static int gbl_driver_id;
49 
50 struct crypto_testsuite_params {
51 	struct rte_mempool *mbuf_pool;
52 	struct rte_mempool *large_mbuf_pool;
53 	struct rte_mempool *op_mpool;
54 	struct rte_mempool *session_mpool;
55 	struct rte_mempool *session_priv_mpool;
56 	struct rte_cryptodev_config conf;
57 	struct rte_cryptodev_qp_conf qp_conf;
58 
59 	uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
60 	uint8_t valid_dev_count;
61 };
62 
63 struct crypto_unittest_params {
64 	struct rte_crypto_sym_xform cipher_xform;
65 	struct rte_crypto_sym_xform auth_xform;
66 	struct rte_crypto_sym_xform aead_xform;
67 
68 	struct rte_cryptodev_sym_session *sess;
69 
70 	struct rte_crypto_op *op;
71 
72 	struct rte_mbuf *obuf, *ibuf;
73 
74 	uint8_t *digest;
75 };
76 
77 #define ALIGN_POW2_ROUNDUP(num, align) \
78 	(((num) + (align) - 1) & ~((align) - 1))
79 
80 /*
81  * Forward declarations.
82  */
83 static int
84 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
85 		struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
86 		uint8_t *hmac_key);
87 
88 static int
89 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
90 		struct crypto_unittest_params *ut_params,
91 		struct crypto_testsuite_params *ts_param,
92 		const uint8_t *cipher,
93 		const uint8_t *digest,
94 		const uint8_t *iv);
95 
96 static struct rte_mbuf *
97 setup_test_string(struct rte_mempool *mpool,
98 		const char *string, size_t len, uint8_t blocksize)
99 {
100 	struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
101 	size_t t_len = len - (blocksize ? (len % blocksize) : 0);
102 
103 	memset(m->buf_addr, 0, m->buf_len);
104 	if (m) {
105 		char *dst = rte_pktmbuf_append(m, t_len);
106 
107 		if (!dst) {
108 			rte_pktmbuf_free(m);
109 			return NULL;
110 		}
111 		if (string != NULL)
112 			rte_memcpy(dst, string, t_len);
113 		else
114 			memset(dst, 0, t_len);
115 	}
116 
117 	return m;
118 }
119 
120 /* Get number of bytes in X bits (rounding up) */
121 static uint32_t
122 ceil_byte_length(uint32_t num_bits)
123 {
124 	if (num_bits % 8)
125 		return ((num_bits >> 3) + 1);
126 	else
127 		return (num_bits >> 3);
128 }
129 
130 static struct rte_crypto_op *
131 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
132 {
133 	if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
134 		printf("Error sending packet for encryption");
135 		return NULL;
136 	}
137 
138 	op = NULL;
139 
140 	while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
141 		rte_pause();
142 
143 	return op;
144 }
145 
146 static struct crypto_testsuite_params testsuite_params = { NULL };
147 static struct crypto_unittest_params unittest_params;
148 
149 static int
150 testsuite_setup(void)
151 {
152 	struct crypto_testsuite_params *ts_params = &testsuite_params;
153 	struct rte_cryptodev_info info;
154 	uint32_t i = 0, nb_devs, dev_id;
155 	int ret;
156 	uint16_t qp_id;
157 
158 	memset(ts_params, 0, sizeof(*ts_params));
159 
160 	ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
161 	if (ts_params->mbuf_pool == NULL) {
162 		/* Not already created so create */
163 		ts_params->mbuf_pool = rte_pktmbuf_pool_create(
164 				"CRYPTO_MBUFPOOL",
165 				NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
166 				rte_socket_id());
167 		if (ts_params->mbuf_pool == NULL) {
168 			RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
169 			return TEST_FAILED;
170 		}
171 	}
172 
173 	ts_params->large_mbuf_pool = rte_mempool_lookup(
174 			"CRYPTO_LARGE_MBUFPOOL");
175 	if (ts_params->large_mbuf_pool == NULL) {
176 		/* Not already created so create */
177 		ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
178 				"CRYPTO_LARGE_MBUFPOOL",
179 				1, 0, 0, UINT16_MAX,
180 				rte_socket_id());
181 		if (ts_params->large_mbuf_pool == NULL) {
182 			RTE_LOG(ERR, USER1,
183 				"Can't create CRYPTO_LARGE_MBUFPOOL\n");
184 			return TEST_FAILED;
185 		}
186 	}
187 
188 	ts_params->op_mpool = rte_crypto_op_pool_create(
189 			"MBUF_CRYPTO_SYM_OP_POOL",
190 			RTE_CRYPTO_OP_TYPE_SYMMETRIC,
191 			NUM_MBUFS, MBUF_CACHE_SIZE,
192 			DEFAULT_NUM_XFORMS *
193 			sizeof(struct rte_crypto_sym_xform) +
194 			MAXIMUM_IV_LENGTH,
195 			rte_socket_id());
196 	if (ts_params->op_mpool == NULL) {
197 		RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
198 		return TEST_FAILED;
199 	}
200 
201 	/* Create an AESNI MB device if required */
202 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
203 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) {
204 		nb_devs = rte_cryptodev_device_count_by_driver(
205 				rte_cryptodev_driver_id_get(
206 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
207 		if (nb_devs < 1) {
208 			ret = rte_vdev_init(
209 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
210 
211 			TEST_ASSERT(ret == 0,
212 				"Failed to create instance of"
213 				" pmd : %s",
214 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
215 		}
216 	}
217 
218 	/* Create an AESNI GCM device if required */
219 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
220 			RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))) {
221 		nb_devs = rte_cryptodev_device_count_by_driver(
222 				rte_cryptodev_driver_id_get(
223 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)));
224 		if (nb_devs < 1) {
225 			TEST_ASSERT_SUCCESS(rte_vdev_init(
226 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
227 				"Failed to create instance of"
228 				" pmd : %s",
229 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
230 		}
231 	}
232 
233 	/* Create a SNOW 3G device if required */
234 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
235 			RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))) {
236 		nb_devs = rte_cryptodev_device_count_by_driver(
237 				rte_cryptodev_driver_id_get(
238 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)));
239 		if (nb_devs < 1) {
240 			TEST_ASSERT_SUCCESS(rte_vdev_init(
241 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
242 				"Failed to create instance of"
243 				" pmd : %s",
244 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
245 		}
246 	}
247 
248 	/* Create a KASUMI device if required */
249 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
250 			RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))) {
251 		nb_devs = rte_cryptodev_device_count_by_driver(
252 				rte_cryptodev_driver_id_get(
253 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)));
254 		if (nb_devs < 1) {
255 			TEST_ASSERT_SUCCESS(rte_vdev_init(
256 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
257 				"Failed to create instance of"
258 				" pmd : %s",
259 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
260 		}
261 	}
262 
263 	/* Create a ZUC device if required */
264 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
265 			RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) {
266 		nb_devs = rte_cryptodev_device_count_by_driver(
267 				rte_cryptodev_driver_id_get(
268 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD)));
269 		if (nb_devs < 1) {
270 			TEST_ASSERT_SUCCESS(rte_vdev_init(
271 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
272 				"Failed to create instance of"
273 				" pmd : %s",
274 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
275 		}
276 	}
277 
278 	/* Create a NULL device if required */
279 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
280 			RTE_STR(CRYPTODEV_NAME_NULL_PMD))) {
281 		nb_devs = rte_cryptodev_device_count_by_driver(
282 				rte_cryptodev_driver_id_get(
283 				RTE_STR(CRYPTODEV_NAME_NULL_PMD)));
284 		if (nb_devs < 1) {
285 			ret = rte_vdev_init(
286 				RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
287 
288 			TEST_ASSERT(ret == 0,
289 				"Failed to create instance of"
290 				" pmd : %s",
291 				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
292 		}
293 	}
294 
295 	/* Create an OPENSSL device if required */
296 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
297 			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) {
298 		nb_devs = rte_cryptodev_device_count_by_driver(
299 				rte_cryptodev_driver_id_get(
300 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)));
301 		if (nb_devs < 1) {
302 			ret = rte_vdev_init(
303 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
304 				NULL);
305 
306 			TEST_ASSERT(ret == 0, "Failed to create "
307 				"instance of pmd : %s",
308 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
309 		}
310 	}
311 
312 	/* Create a ARMv8 device if required */
313 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
314 			RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))) {
315 		nb_devs = rte_cryptodev_device_count_by_driver(
316 				rte_cryptodev_driver_id_get(
317 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)));
318 		if (nb_devs < 1) {
319 			ret = rte_vdev_init(
320 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
321 				NULL);
322 
323 			TEST_ASSERT(ret == 0, "Failed to create "
324 				"instance of pmd : %s",
325 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
326 		}
327 	}
328 
329 	/* Create a MVSAM device if required */
330 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
331 			RTE_STR(CRYPTODEV_NAME_MVSAM_PMD))) {
332 		nb_devs = rte_cryptodev_device_count_by_driver(
333 				rte_cryptodev_driver_id_get(
334 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)));
335 		if (nb_devs < 1) {
336 			ret = rte_vdev_init(
337 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD),
338 				NULL);
339 
340 			TEST_ASSERT(ret == 0, "Failed to create "
341 				"instance of pmd : %s",
342 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
343 		}
344 	}
345 
346 	/* Create an CCP device if required */
347 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
348 			RTE_STR(CRYPTODEV_NAME_CCP_PMD))) {
349 		nb_devs = rte_cryptodev_device_count_by_driver(
350 				rte_cryptodev_driver_id_get(
351 				RTE_STR(CRYPTODEV_NAME_CCP_PMD)));
352 		if (nb_devs < 1) {
353 			ret = rte_vdev_init(
354 				RTE_STR(CRYPTODEV_NAME_CCP_PMD),
355 				NULL);
356 
357 			TEST_ASSERT(ret == 0, "Failed to create "
358 				"instance of pmd : %s",
359 				RTE_STR(CRYPTODEV_NAME_CCP_PMD));
360 		}
361 	}
362 
363 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
364 	char vdev_args[VDEV_ARGS_SIZE] = {""};
365 	char temp_str[VDEV_ARGS_SIZE] = {"mode=multi-core,"
366 		"ordering=enable,name=cryptodev_test_scheduler,corelist="};
367 	uint16_t slave_core_count = 0;
368 	uint16_t socket_id = 0;
369 
370 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
371 			RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) {
372 
373 		/* Identify the Slave Cores
374 		 * Use 2 slave cores for the device args
375 		 */
376 		RTE_LCORE_FOREACH_SLAVE(i) {
377 			if (slave_core_count > 1)
378 				break;
379 			snprintf(vdev_args, sizeof(vdev_args),
380 					"%s%d", temp_str, i);
381 			strcpy(temp_str, vdev_args);
382 			strlcat(temp_str, ";", sizeof(temp_str));
383 			slave_core_count++;
384 			socket_id = rte_lcore_to_socket_id(i);
385 		}
386 		if (slave_core_count != 2) {
387 			RTE_LOG(ERR, USER1,
388 				"Cryptodev scheduler test require at least "
389 				"two slave cores to run. "
390 				"Please use the correct coremask.\n");
391 			return TEST_FAILED;
392 		}
393 		strcpy(temp_str, vdev_args);
394 		snprintf(vdev_args, sizeof(vdev_args), "%s,socket_id=%d",
395 				temp_str, socket_id);
396 		RTE_LOG(DEBUG, USER1, "vdev_args: %s\n", vdev_args);
397 		nb_devs = rte_cryptodev_device_count_by_driver(
398 				rte_cryptodev_driver_id_get(
399 				RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)));
400 		if (nb_devs < 1) {
401 			ret = rte_vdev_init(
402 				RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD),
403 					vdev_args);
404 			TEST_ASSERT(ret == 0,
405 				"Failed to create instance %u of"
406 				" pmd : %s",
407 				i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
408 		}
409 	}
410 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
411 
412 	nb_devs = rte_cryptodev_count();
413 	if (nb_devs < 1) {
414 		RTE_LOG(WARNING, USER1, "No crypto devices found?\n");
415 		return TEST_SKIPPED;
416 	}
417 
418 	/* Create list of valid crypto devs */
419 	for (i = 0; i < nb_devs; i++) {
420 		rte_cryptodev_info_get(i, &info);
421 		if (info.driver_id == gbl_driver_id)
422 			ts_params->valid_devs[ts_params->valid_dev_count++] = i;
423 	}
424 
425 	if (ts_params->valid_dev_count < 1)
426 		return TEST_FAILED;
427 
428 	/* Set up all the qps on the first of the valid devices found */
429 
430 	dev_id = ts_params->valid_devs[0];
431 
432 	rte_cryptodev_info_get(dev_id, &info);
433 
434 	ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
435 	ts_params->conf.socket_id = SOCKET_ID_ANY;
436 	ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY;
437 
438 	unsigned int session_size =
439 		rte_cryptodev_sym_get_private_session_size(dev_id);
440 
441 	/*
442 	 * Create mempool with maximum number of sessions * 2,
443 	 * to include the session headers
444 	 */
445 	if (info.sym.max_nb_sessions != 0 &&
446 			info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
447 		RTE_LOG(ERR, USER1, "Device does not support "
448 				"at least %u sessions\n",
449 				MAX_NB_SESSIONS);
450 		return TEST_FAILED;
451 	}
452 
453 	ts_params->session_mpool = rte_cryptodev_sym_session_pool_create(
454 			"test_sess_mp", MAX_NB_SESSIONS, 0, 0, 0,
455 			SOCKET_ID_ANY);
456 	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
457 			"session mempool allocation failed");
458 
459 	ts_params->session_priv_mpool = rte_mempool_create(
460 			"test_sess_mp_priv",
461 			MAX_NB_SESSIONS,
462 			session_size,
463 			0, 0, NULL, NULL, NULL,
464 			NULL, SOCKET_ID_ANY,
465 			0);
466 	TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
467 			"session mempool allocation failed");
468 
469 
470 
471 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
472 			&ts_params->conf),
473 			"Failed to configure cryptodev %u with %u qps",
474 			dev_id, ts_params->conf.nb_queue_pairs);
475 
476 	ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
477 	ts_params->qp_conf.mp_session = ts_params->session_mpool;
478 	ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
479 
480 	for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
481 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
482 			dev_id, qp_id, &ts_params->qp_conf,
483 			rte_cryptodev_socket_id(dev_id)),
484 			"Failed to setup queue pair %u on cryptodev %u",
485 			qp_id, dev_id);
486 	}
487 
488 	return TEST_SUCCESS;
489 }
490 
491 static void
492 testsuite_teardown(void)
493 {
494 	struct crypto_testsuite_params *ts_params = &testsuite_params;
495 
496 	if (ts_params->mbuf_pool != NULL) {
497 		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
498 		rte_mempool_avail_count(ts_params->mbuf_pool));
499 	}
500 
501 	if (ts_params->op_mpool != NULL) {
502 		RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
503 		rte_mempool_avail_count(ts_params->op_mpool));
504 	}
505 
506 	/* Free session mempools */
507 	if (ts_params->session_priv_mpool != NULL) {
508 		rte_mempool_free(ts_params->session_priv_mpool);
509 		ts_params->session_priv_mpool = NULL;
510 	}
511 
512 	if (ts_params->session_mpool != NULL) {
513 		rte_mempool_free(ts_params->session_mpool);
514 		ts_params->session_mpool = NULL;
515 	}
516 }
517 
518 static int
519 ut_setup(void)
520 {
521 	struct crypto_testsuite_params *ts_params = &testsuite_params;
522 	struct crypto_unittest_params *ut_params = &unittest_params;
523 
524 	uint16_t qp_id;
525 
526 	/* Clear unit test parameters before running test */
527 	memset(ut_params, 0, sizeof(*ut_params));
528 
529 	/* Reconfigure device to default parameters */
530 	ts_params->conf.socket_id = SOCKET_ID_ANY;
531 	ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY;
532 	ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
533 	ts_params->qp_conf.mp_session = ts_params->session_mpool;
534 	ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
535 
536 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
537 			&ts_params->conf),
538 			"Failed to configure cryptodev %u",
539 			ts_params->valid_devs[0]);
540 
541 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
542 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
543 			ts_params->valid_devs[0], qp_id,
544 			&ts_params->qp_conf,
545 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
546 			"Failed to setup queue pair %u on cryptodev %u",
547 			qp_id, ts_params->valid_devs[0]);
548 	}
549 
550 
551 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
552 
553 	/* Start the device */
554 	TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
555 			"Failed to start cryptodev %u",
556 			ts_params->valid_devs[0]);
557 
558 	return TEST_SUCCESS;
559 }
560 
561 static void
562 ut_teardown(void)
563 {
564 	struct crypto_testsuite_params *ts_params = &testsuite_params;
565 	struct crypto_unittest_params *ut_params = &unittest_params;
566 	struct rte_cryptodev_stats stats;
567 
568 	/* free crypto session structure */
569 	if (ut_params->sess) {
570 		rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
571 				ut_params->sess);
572 		rte_cryptodev_sym_session_free(ut_params->sess);
573 		ut_params->sess = NULL;
574 	}
575 
576 	/* free crypto operation structure */
577 	if (ut_params->op)
578 		rte_crypto_op_free(ut_params->op);
579 
580 	/*
581 	 * free mbuf - both obuf and ibuf are usually the same,
582 	 * so check if they point at the same address is necessary,
583 	 * to avoid freeing the mbuf twice.
584 	 */
585 	if (ut_params->obuf) {
586 		rte_pktmbuf_free(ut_params->obuf);
587 		if (ut_params->ibuf == ut_params->obuf)
588 			ut_params->ibuf = 0;
589 		ut_params->obuf = 0;
590 	}
591 	if (ut_params->ibuf) {
592 		rte_pktmbuf_free(ut_params->ibuf);
593 		ut_params->ibuf = 0;
594 	}
595 
596 	if (ts_params->mbuf_pool != NULL)
597 		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
598 			rte_mempool_avail_count(ts_params->mbuf_pool));
599 
600 	rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
601 
602 	/* Stop the device */
603 	rte_cryptodev_stop(ts_params->valid_devs[0]);
604 }
605 
606 static int
607 test_device_configure_invalid_dev_id(void)
608 {
609 	struct crypto_testsuite_params *ts_params = &testsuite_params;
610 	uint16_t dev_id, num_devs = 0;
611 
612 	TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
613 			"Need at least %d devices for test", 1);
614 
615 	/* valid dev_id values */
616 	dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
617 
618 	/* Stop the device in case it's started so it can be configured */
619 	rte_cryptodev_stop(dev_id);
620 
621 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
622 			"Failed test for rte_cryptodev_configure: "
623 			"invalid dev_num %u", dev_id);
624 
625 	/* invalid dev_id values */
626 	dev_id = num_devs;
627 
628 	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
629 			"Failed test for rte_cryptodev_configure: "
630 			"invalid dev_num %u", dev_id);
631 
632 	dev_id = 0xff;
633 
634 	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
635 			"Failed test for rte_cryptodev_configure:"
636 			"invalid dev_num %u", dev_id);
637 
638 	return TEST_SUCCESS;
639 }
640 
641 static int
642 test_device_configure_invalid_queue_pair_ids(void)
643 {
644 	struct crypto_testsuite_params *ts_params = &testsuite_params;
645 	uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
646 
647 	/* Stop the device in case it's started so it can be configured */
648 	rte_cryptodev_stop(ts_params->valid_devs[0]);
649 
650 	/* valid - one queue pairs */
651 	ts_params->conf.nb_queue_pairs = 1;
652 
653 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
654 			&ts_params->conf),
655 			"Failed to configure cryptodev: dev_id %u, qp_id %u",
656 			ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
657 
658 
659 	/* valid - max value queue pairs */
660 	ts_params->conf.nb_queue_pairs = orig_nb_qps;
661 
662 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
663 			&ts_params->conf),
664 			"Failed to configure cryptodev: dev_id %u, qp_id %u",
665 			ts_params->valid_devs[0],
666 			ts_params->conf.nb_queue_pairs);
667 
668 
669 	/* invalid - zero queue pairs */
670 	ts_params->conf.nb_queue_pairs = 0;
671 
672 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
673 			&ts_params->conf),
674 			"Failed test for rte_cryptodev_configure, dev_id %u,"
675 			" invalid qps: %u",
676 			ts_params->valid_devs[0],
677 			ts_params->conf.nb_queue_pairs);
678 
679 
680 	/* invalid - max value supported by field queue pairs */
681 	ts_params->conf.nb_queue_pairs = UINT16_MAX;
682 
683 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
684 			&ts_params->conf),
685 			"Failed test for rte_cryptodev_configure, dev_id %u,"
686 			" invalid qps: %u",
687 			ts_params->valid_devs[0],
688 			ts_params->conf.nb_queue_pairs);
689 
690 
691 	/* invalid - max value + 1 queue pairs */
692 	ts_params->conf.nb_queue_pairs = orig_nb_qps + 1;
693 
694 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
695 			&ts_params->conf),
696 			"Failed test for rte_cryptodev_configure, dev_id %u,"
697 			" invalid qps: %u",
698 			ts_params->valid_devs[0],
699 			ts_params->conf.nb_queue_pairs);
700 
701 	/* revert to original testsuite value */
702 	ts_params->conf.nb_queue_pairs = orig_nb_qps;
703 
704 	return TEST_SUCCESS;
705 }
706 
707 static int
708 test_queue_pair_descriptor_setup(void)
709 {
710 	struct crypto_testsuite_params *ts_params = &testsuite_params;
711 	struct rte_cryptodev_info dev_info;
712 	struct rte_cryptodev_qp_conf qp_conf = {
713 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
714 	};
715 
716 	uint16_t qp_id;
717 
718 	/* Stop the device in case it's started so it can be configured */
719 	rte_cryptodev_stop(ts_params->valid_devs[0]);
720 
721 
722 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
723 
724 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
725 			&ts_params->conf),
726 			"Failed to configure cryptodev %u",
727 			ts_params->valid_devs[0]);
728 
729 	/*
730 	 * Test various ring sizes on this device. memzones can't be
731 	 * freed so are re-used if ring is released and re-created.
732 	 */
733 	qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
734 	qp_conf.mp_session = ts_params->session_mpool;
735 	qp_conf.mp_session_private = ts_params->session_priv_mpool;
736 
737 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
738 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
739 				ts_params->valid_devs[0], qp_id, &qp_conf,
740 				rte_cryptodev_socket_id(
741 						ts_params->valid_devs[0])),
742 				"Failed test for "
743 				"rte_cryptodev_queue_pair_setup: num_inflights "
744 				"%u on qp %u on cryptodev %u",
745 				qp_conf.nb_descriptors, qp_id,
746 				ts_params->valid_devs[0]);
747 	}
748 
749 	qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
750 
751 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
752 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
753 				ts_params->valid_devs[0], qp_id, &qp_conf,
754 				rte_cryptodev_socket_id(
755 						ts_params->valid_devs[0])),
756 				"Failed test for"
757 				" rte_cryptodev_queue_pair_setup: num_inflights"
758 				" %u on qp %u on cryptodev %u",
759 				qp_conf.nb_descriptors, qp_id,
760 				ts_params->valid_devs[0]);
761 	}
762 
763 	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
764 
765 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
766 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
767 				ts_params->valid_devs[0], qp_id, &qp_conf,
768 				rte_cryptodev_socket_id(
769 						ts_params->valid_devs[0])),
770 				"Failed test for "
771 				"rte_cryptodev_queue_pair_setup: num_inflights"
772 				" %u on qp %u on cryptodev %u",
773 				qp_conf.nb_descriptors, qp_id,
774 				ts_params->valid_devs[0]);
775 	}
776 
777 	/* invalid number of descriptors - max supported + 2 */
778 	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
779 
780 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
781 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
782 				ts_params->valid_devs[0], qp_id, &qp_conf,
783 				rte_cryptodev_socket_id(
784 						ts_params->valid_devs[0])),
785 				"Unexpectedly passed test for "
786 				"rte_cryptodev_queue_pair_setup:"
787 				"num_inflights %u on qp %u on cryptodev %u",
788 				qp_conf.nb_descriptors, qp_id,
789 				ts_params->valid_devs[0]);
790 	}
791 
792 	/* invalid number of descriptors - max value of parameter */
793 	qp_conf.nb_descriptors = UINT32_MAX-1;
794 
795 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
796 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
797 				ts_params->valid_devs[0], qp_id, &qp_conf,
798 				rte_cryptodev_socket_id(
799 						ts_params->valid_devs[0])),
800 				"Unexpectedly passed test for "
801 				"rte_cryptodev_queue_pair_setup:"
802 				"num_inflights %u on qp %u on cryptodev %u",
803 				qp_conf.nb_descriptors, qp_id,
804 				ts_params->valid_devs[0]);
805 	}
806 
807 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
808 
809 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
810 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
811 				ts_params->valid_devs[0], qp_id, &qp_conf,
812 				rte_cryptodev_socket_id(
813 						ts_params->valid_devs[0])),
814 				"Failed test for"
815 				" rte_cryptodev_queue_pair_setup:"
816 				"num_inflights %u on qp %u on cryptodev %u",
817 				qp_conf.nb_descriptors, qp_id,
818 				ts_params->valid_devs[0]);
819 	}
820 
821 	/* invalid number of descriptors - max supported + 1 */
822 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
823 
824 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
825 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
826 				ts_params->valid_devs[0], qp_id, &qp_conf,
827 				rte_cryptodev_socket_id(
828 						ts_params->valid_devs[0])),
829 				"Unexpectedly passed test for "
830 				"rte_cryptodev_queue_pair_setup:"
831 				"num_inflights %u on qp %u on cryptodev %u",
832 				qp_conf.nb_descriptors, qp_id,
833 				ts_params->valid_devs[0]);
834 	}
835 
836 	/* test invalid queue pair id */
837 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;	/*valid */
838 
839 	qp_id = ts_params->conf.nb_queue_pairs;		/*invalid */
840 
841 	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
842 			ts_params->valid_devs[0],
843 			qp_id, &qp_conf,
844 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
845 			"Failed test for rte_cryptodev_queue_pair_setup:"
846 			"invalid qp %u on cryptodev %u",
847 			qp_id, ts_params->valid_devs[0]);
848 
849 	qp_id = 0xffff; /*invalid*/
850 
851 	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
852 			ts_params->valid_devs[0],
853 			qp_id, &qp_conf,
854 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
855 			"Failed test for rte_cryptodev_queue_pair_setup:"
856 			"invalid qp %u on cryptodev %u",
857 			qp_id, ts_params->valid_devs[0]);
858 
859 	return TEST_SUCCESS;
860 }
861 
862 /* ***** Plaintext data for tests ***** */
863 
864 const char catch_22_quote_1[] =
865 		"There was only one catch and that was Catch-22, which "
866 		"specified that a concern for one's safety in the face of "
867 		"dangers that were real and immediate was the process of a "
868 		"rational mind. Orr was crazy and could be grounded. All he "
869 		"had to do was ask; and as soon as he did, he would no longer "
870 		"be crazy and would have to fly more missions. Orr would be "
871 		"crazy to fly more missions and sane if he didn't, but if he "
872 		"was sane he had to fly them. If he flew them he was crazy "
873 		"and didn't have to; but if he didn't want to he was sane and "
874 		"had to. Yossarian was moved very deeply by the absolute "
875 		"simplicity of this clause of Catch-22 and let out a "
876 		"respectful whistle. \"That's some catch, that Catch-22\", he "
877 		"observed. \"It's the best there is,\" Doc Daneeka agreed.";
878 
879 const char catch_22_quote[] =
880 		"What a lousy earth! He wondered how many people were "
881 		"destitute that same night even in his own prosperous country, "
882 		"how many homes were shanties, how many husbands were drunk "
883 		"and wives socked, and how many children were bullied, abused, "
884 		"or abandoned. How many families hungered for food they could "
885 		"not afford to buy? How many hearts were broken? How many "
886 		"suicides would take place that same night, how many people "
887 		"would go insane? How many cockroaches and landlords would "
888 		"triumph? How many winners were losers, successes failures, "
889 		"and rich men poor men? How many wise guys were stupid? How "
890 		"many happy endings were unhappy endings? How many honest men "
891 		"were liars, brave men cowards, loyal men traitors, how many "
892 		"sainted men were corrupt, how many people in positions of "
893 		"trust had sold their souls to bodyguards, how many had never "
894 		"had souls? How many straight-and-narrow paths were crooked "
895 		"paths? How many best families were worst families and how "
896 		"many good people were bad people? When you added them all up "
897 		"and then subtracted, you might be left with only the children, "
898 		"and perhaps with Albert Einstein and an old violinist or "
899 		"sculptor somewhere.";
900 
901 #define QUOTE_480_BYTES		(480)
902 #define QUOTE_512_BYTES		(512)
903 #define QUOTE_768_BYTES		(768)
904 #define QUOTE_1024_BYTES	(1024)
905 
906 
907 
908 /* ***** SHA1 Hash Tests ***** */
909 
910 #define HMAC_KEY_LENGTH_SHA1	(DIGEST_BYTE_LENGTH_SHA1)
911 
912 static uint8_t hmac_sha1_key[] = {
913 	0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
914 	0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
915 	0xDE, 0xF4, 0xDE, 0xAD };
916 
917 /* ***** SHA224 Hash Tests ***** */
918 
919 #define HMAC_KEY_LENGTH_SHA224	(DIGEST_BYTE_LENGTH_SHA224)
920 
921 
922 /* ***** AES-CBC Cipher Tests ***** */
923 
924 #define CIPHER_KEY_LENGTH_AES_CBC	(16)
925 #define CIPHER_IV_LENGTH_AES_CBC	(CIPHER_KEY_LENGTH_AES_CBC)
926 
927 static uint8_t aes_cbc_key[] = {
928 	0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
929 	0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
930 
931 static uint8_t aes_cbc_iv[] = {
932 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
933 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
934 
935 
936 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
937 
938 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
939 	0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
940 	0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
941 	0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
942 	0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
943 	0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
944 	0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
945 	0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
946 	0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
947 	0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
948 	0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
949 	0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
950 	0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
951 	0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
952 	0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
953 	0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
954 	0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
955 	0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
956 	0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
957 	0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
958 	0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
959 	0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
960 	0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
961 	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
962 	0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
963 	0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
964 	0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
965 	0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
966 	0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
967 	0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
968 	0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
969 	0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
970 	0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
971 	0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
972 	0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
973 	0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
974 	0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
975 	0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
976 	0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
977 	0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
978 	0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
979 	0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
980 	0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
981 	0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
982 	0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
983 	0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
984 	0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
985 	0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
986 	0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
987 	0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
988 	0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
989 	0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
990 	0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
991 	0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
992 	0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
993 	0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
994 	0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
995 	0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
996 	0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
997 	0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
998 	0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
999 	0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
1000 	0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
1001 	0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
1002 	0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
1003 };
1004 
1005 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
1006 	0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
1007 	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1008 	0x18, 0x8c, 0x1d, 0x32
1009 };
1010 
1011 
1012 /* Multisession Vector context Test */
1013 /*Begin Session 0 */
1014 static uint8_t ms_aes_cbc_key0[] = {
1015 	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1016 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1017 };
1018 
1019 static uint8_t ms_aes_cbc_iv0[] = {
1020 	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1021 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1022 };
1023 
1024 static const uint8_t ms_aes_cbc_cipher0[] = {
1025 		0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
1026 		0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
1027 		0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
1028 		0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
1029 		0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
1030 		0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
1031 		0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
1032 		0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
1033 		0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
1034 		0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
1035 		0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
1036 		0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
1037 		0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
1038 		0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
1039 		0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
1040 		0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
1041 		0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
1042 		0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
1043 		0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
1044 		0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
1045 		0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
1046 		0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
1047 		0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
1048 		0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
1049 		0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
1050 		0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
1051 		0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
1052 		0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
1053 		0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
1054 		0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
1055 		0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
1056 		0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
1057 		0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
1058 		0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
1059 		0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
1060 		0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
1061 		0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
1062 		0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
1063 		0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
1064 		0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
1065 		0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
1066 		0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
1067 		0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
1068 		0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
1069 		0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
1070 		0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
1071 		0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
1072 		0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
1073 		0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
1074 		0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
1075 		0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
1076 		0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
1077 		0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
1078 		0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
1079 		0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
1080 		0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
1081 		0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
1082 		0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
1083 		0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
1084 		0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
1085 		0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
1086 		0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
1087 		0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
1088 		0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
1089 };
1090 
1091 
1092 static  uint8_t ms_hmac_key0[] = {
1093 		0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1094 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1095 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1096 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1097 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1098 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1099 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1100 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1101 };
1102 
1103 static const uint8_t ms_hmac_digest0[] = {
1104 		0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1105 		0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1106 		0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1107 		0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1108 		0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1109 		0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1110 		0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1111 		0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1112 		};
1113 
1114 /* End Session 0 */
1115 /* Begin session 1 */
1116 
1117 static  uint8_t ms_aes_cbc_key1[] = {
1118 		0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1119 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1120 };
1121 
1122 static  uint8_t ms_aes_cbc_iv1[] = {
1123 	0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1124 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1125 };
1126 
1127 static const uint8_t ms_aes_cbc_cipher1[] = {
1128 		0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1129 		0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1130 		0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1131 		0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1132 		0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1133 		0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1134 		0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1135 		0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1136 		0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1137 		0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1138 		0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1139 		0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1140 		0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1141 		0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1142 		0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1143 		0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1144 		0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1145 		0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1146 		0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1147 		0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1148 		0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1149 		0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1150 		0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1151 		0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1152 		0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1153 		0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1154 		0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1155 		0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1156 		0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1157 		0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1158 		0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1159 		0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1160 		0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1161 		0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1162 		0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1163 		0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1164 		0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1165 		0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1166 		0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1167 		0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1168 		0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1169 		0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1170 		0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1171 		0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1172 		0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1173 		0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1174 		0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1175 		0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1176 		0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1177 		0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1178 		0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1179 		0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1180 		0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1181 		0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1182 		0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1183 		0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1184 		0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1185 		0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1186 		0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1187 		0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1188 		0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1189 		0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1190 		0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1191 		0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1192 
1193 };
1194 
1195 static uint8_t ms_hmac_key1[] = {
1196 		0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1197 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1198 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1199 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1200 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1201 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1202 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1203 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1204 };
1205 
1206 static const uint8_t ms_hmac_digest1[] = {
1207 		0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1208 		0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1209 		0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1210 		0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1211 		0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1212 		0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1213 		0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1214 		0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1215 };
1216 /* End Session 1  */
1217 /* Begin Session 2 */
1218 static  uint8_t ms_aes_cbc_key2[] = {
1219 		0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1220 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1221 };
1222 
1223 static  uint8_t ms_aes_cbc_iv2[] = {
1224 		0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1225 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1226 };
1227 
1228 static const uint8_t ms_aes_cbc_cipher2[] = {
1229 		0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1230 		0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1231 		0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1232 		0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1233 		0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1234 		0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1235 		0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1236 		0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1237 		0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1238 		0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1239 		0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1240 		0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1241 		0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1242 		0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1243 		0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1244 		0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1245 		0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1246 		0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1247 		0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1248 		0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1249 		0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1250 		0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1251 		0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1252 		0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1253 		0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1254 		0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1255 		0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1256 		0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1257 		0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1258 		0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1259 		0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1260 		0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1261 		0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1262 		0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1263 		0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1264 		0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1265 		0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1266 		0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1267 		0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1268 		0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1269 		0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1270 		0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1271 		0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1272 		0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1273 		0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1274 		0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1275 		0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1276 		0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1277 		0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1278 		0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1279 		0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1280 		0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1281 		0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1282 		0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1283 		0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1284 		0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1285 		0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1286 		0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1287 		0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1288 		0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1289 		0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1290 		0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1291 		0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1292 		0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1293 };
1294 
1295 static  uint8_t ms_hmac_key2[] = {
1296 		0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1297 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1298 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1299 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1300 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1301 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1302 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1303 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1304 };
1305 
1306 static const uint8_t ms_hmac_digest2[] = {
1307 		0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1308 		0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1309 		0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1310 		0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1311 		0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1312 		0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1313 		0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1314 		0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1315 };
1316 
1317 /* End Session 2 */
1318 
1319 
1320 static int
1321 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1322 {
1323 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1324 	struct crypto_unittest_params *ut_params = &unittest_params;
1325 
1326 	/* Generate test mbuf data and space for digest */
1327 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1328 			catch_22_quote,	QUOTE_512_BYTES, 0);
1329 
1330 	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1331 			DIGEST_BYTE_LENGTH_SHA1);
1332 	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1333 
1334 	/* Setup Cipher Parameters */
1335 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1336 	ut_params->cipher_xform.next = &ut_params->auth_xform;
1337 
1338 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1339 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1340 	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1341 	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1342 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1343 	ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1344 
1345 	/* Setup HMAC Parameters */
1346 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1347 
1348 	ut_params->auth_xform.next = NULL;
1349 
1350 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1351 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1352 	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1353 	ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1354 	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1355 
1356 	ut_params->sess = rte_cryptodev_sym_session_create(
1357 			ts_params->session_mpool);
1358 
1359 	/* Create crypto session*/
1360 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
1361 			ut_params->sess, &ut_params->cipher_xform,
1362 			ts_params->session_priv_mpool);
1363 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1364 
1365 	/* Generate crypto op data structure */
1366 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1367 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1368 	TEST_ASSERT_NOT_NULL(ut_params->op,
1369 			"Failed to allocate symmetric crypto operation struct");
1370 
1371 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1372 
1373 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1374 
1375 	/* set crypto operation source mbuf */
1376 	sym_op->m_src = ut_params->ibuf;
1377 
1378 	/* Set crypto operation authentication parameters */
1379 	sym_op->auth.digest.data = ut_params->digest;
1380 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1381 			ut_params->ibuf, QUOTE_512_BYTES);
1382 
1383 	sym_op->auth.data.offset = 0;
1384 	sym_op->auth.data.length = QUOTE_512_BYTES;
1385 
1386 	/* Copy IV at the end of the crypto operation */
1387 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1388 			aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
1389 
1390 	/* Set crypto operation cipher parameters */
1391 	sym_op->cipher.data.offset = 0;
1392 	sym_op->cipher.data.length = QUOTE_512_BYTES;
1393 
1394 	/* Process crypto operation */
1395 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1396 			ut_params->op), "failed to process sym crypto op");
1397 
1398 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1399 			"crypto op processing failed");
1400 
1401 	/* Validate obuf */
1402 	uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
1403 			uint8_t *);
1404 
1405 	TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1406 			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1407 			QUOTE_512_BYTES,
1408 			"ciphertext data not as expected");
1409 
1410 	uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1411 
1412 	TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1413 			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1414 			gbl_driver_id == rte_cryptodev_driver_id_get(
1415 					RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) ?
1416 					TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1417 					DIGEST_BYTE_LENGTH_SHA1,
1418 			"Generated digest data not as expected");
1419 
1420 	return TEST_SUCCESS;
1421 }
1422 
1423 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1424 
1425 #define HMAC_KEY_LENGTH_SHA512  (DIGEST_BYTE_LENGTH_SHA512)
1426 
1427 static uint8_t hmac_sha512_key[] = {
1428 	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1429 	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1430 	0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1431 	0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1432 	0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1433 	0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1434 	0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1435 	0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1436 
1437 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1438 	0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1439 	0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1440 	0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1441 	0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1442 	0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1443 	0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1444 	0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1445 	0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1446 
1447 
1448 
1449 static int
1450 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1451 		struct crypto_unittest_params *ut_params,
1452 		uint8_t *cipher_key,
1453 		uint8_t *hmac_key);
1454 
1455 static int
1456 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1457 		struct crypto_unittest_params *ut_params,
1458 		struct crypto_testsuite_params *ts_params,
1459 		const uint8_t *cipher,
1460 		const uint8_t *digest,
1461 		const uint8_t *iv);
1462 
1463 
1464 static int
1465 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1466 		struct crypto_unittest_params *ut_params,
1467 		uint8_t *cipher_key,
1468 		uint8_t *hmac_key)
1469 {
1470 
1471 	/* Setup Cipher Parameters */
1472 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1473 	ut_params->cipher_xform.next = NULL;
1474 
1475 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1476 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1477 	ut_params->cipher_xform.cipher.key.data = cipher_key;
1478 	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1479 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1480 	ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1481 
1482 	/* Setup HMAC Parameters */
1483 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1484 	ut_params->auth_xform.next = &ut_params->cipher_xform;
1485 
1486 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1487 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1488 	ut_params->auth_xform.auth.key.data = hmac_key;
1489 	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1490 	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1491 
1492 	return TEST_SUCCESS;
1493 }
1494 
1495 
1496 static int
1497 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1498 		struct crypto_unittest_params *ut_params,
1499 		struct crypto_testsuite_params *ts_params,
1500 		const uint8_t *cipher,
1501 		const uint8_t *digest,
1502 		const uint8_t *iv)
1503 {
1504 	/* Generate test mbuf data and digest */
1505 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1506 			(const char *)
1507 			cipher,
1508 			QUOTE_512_BYTES, 0);
1509 
1510 	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1511 			DIGEST_BYTE_LENGTH_SHA512);
1512 	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1513 
1514 	rte_memcpy(ut_params->digest,
1515 			digest,
1516 			DIGEST_BYTE_LENGTH_SHA512);
1517 
1518 	/* Generate Crypto op data structure */
1519 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1520 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1521 	TEST_ASSERT_NOT_NULL(ut_params->op,
1522 			"Failed to allocate symmetric crypto operation struct");
1523 
1524 	rte_crypto_op_attach_sym_session(ut_params->op, sess);
1525 
1526 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1527 
1528 	/* set crypto operation source mbuf */
1529 	sym_op->m_src = ut_params->ibuf;
1530 
1531 	sym_op->auth.digest.data = ut_params->digest;
1532 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1533 			ut_params->ibuf, QUOTE_512_BYTES);
1534 
1535 	sym_op->auth.data.offset = 0;
1536 	sym_op->auth.data.length = QUOTE_512_BYTES;
1537 
1538 	/* Copy IV at the end of the crypto operation */
1539 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1540 			iv, CIPHER_IV_LENGTH_AES_CBC);
1541 
1542 	sym_op->cipher.data.offset = 0;
1543 	sym_op->cipher.data.length = QUOTE_512_BYTES;
1544 
1545 	/* Process crypto operation */
1546 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1547 			ut_params->op), "failed to process sym crypto op");
1548 
1549 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1550 			"crypto op processing failed");
1551 
1552 	ut_params->obuf = ut_params->op->sym->m_src;
1553 
1554 	/* Validate obuf */
1555 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
1556 			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *),
1557 			catch_22_quote,
1558 			QUOTE_512_BYTES,
1559 			"Plaintext data not as expected");
1560 
1561 	/* Validate obuf */
1562 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1563 			"Digest verification failed");
1564 
1565 	return TEST_SUCCESS;
1566 }
1567 
1568 static int
1569 test_AES_cipheronly_mb_all(void)
1570 {
1571 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1572 	int status;
1573 
1574 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1575 		ts_params->op_mpool,
1576 		ts_params->session_mpool, ts_params->session_priv_mpool,
1577 		ts_params->valid_devs[0],
1578 		rte_cryptodev_driver_id_get(
1579 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1580 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1581 
1582 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1583 
1584 	return TEST_SUCCESS;
1585 }
1586 
1587 static int
1588 test_AES_docsis_mb_all(void)
1589 {
1590 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1591 	int status;
1592 
1593 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1594 		ts_params->op_mpool,
1595 		ts_params->session_mpool, ts_params->session_priv_mpool,
1596 		ts_params->valid_devs[0],
1597 		rte_cryptodev_driver_id_get(
1598 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1599 		BLKCIPHER_AES_DOCSIS_TYPE);
1600 
1601 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1602 
1603 	return TEST_SUCCESS;
1604 }
1605 
1606 static int
1607 test_AES_docsis_qat_all(void)
1608 {
1609 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1610 	int status;
1611 
1612 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1613 		ts_params->op_mpool,
1614 		ts_params->session_mpool, ts_params->session_priv_mpool,
1615 		ts_params->valid_devs[0],
1616 		rte_cryptodev_driver_id_get(
1617 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1618 		BLKCIPHER_AES_DOCSIS_TYPE);
1619 
1620 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1621 
1622 	return TEST_SUCCESS;
1623 }
1624 
1625 static int
1626 test_DES_docsis_qat_all(void)
1627 {
1628 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1629 	int status;
1630 
1631 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1632 		ts_params->op_mpool,
1633 		ts_params->session_mpool, ts_params->session_priv_mpool,
1634 		ts_params->valid_devs[0],
1635 		rte_cryptodev_driver_id_get(
1636 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1637 		BLKCIPHER_DES_DOCSIS_TYPE);
1638 
1639 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1640 
1641 	return TEST_SUCCESS;
1642 }
1643 
1644 static int
1645 test_authonly_mb_all(void)
1646 {
1647 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1648 	int status;
1649 
1650 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1651 		ts_params->op_mpool,
1652 		ts_params->session_mpool, ts_params->session_priv_mpool,
1653 		ts_params->valid_devs[0],
1654 		rte_cryptodev_driver_id_get(
1655 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1656 		BLKCIPHER_AUTHONLY_TYPE);
1657 
1658 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1659 
1660 	return TEST_SUCCESS;
1661 }
1662 
1663 static int
1664 test_authonly_qat_all(void)
1665 {
1666 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1667 	int status;
1668 
1669 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1670 		ts_params->op_mpool,
1671 		ts_params->session_mpool, ts_params->session_priv_mpool,
1672 		ts_params->valid_devs[0],
1673 		rte_cryptodev_driver_id_get(
1674 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1675 		BLKCIPHER_AUTHONLY_TYPE);
1676 
1677 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1678 
1679 	return TEST_SUCCESS;
1680 }
1681 
1682 static int
1683 test_AES_chain_null_all(void)
1684 {
1685 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1686 	int status;
1687 
1688 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1689 		ts_params->op_mpool,
1690 		ts_params->session_mpool, ts_params->session_priv_mpool,
1691 		ts_params->valid_devs[0],
1692 		rte_cryptodev_driver_id_get(
1693 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1694 		BLKCIPHER_AES_CHAIN_TYPE);
1695 
1696 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1697 
1698 	return TEST_SUCCESS;
1699 }
1700 
1701 static int
1702 test_AES_cipheronly_null_all(void)
1703 {
1704 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1705 	int status;
1706 
1707 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1708 		ts_params->op_mpool,
1709 		ts_params->session_mpool, ts_params->session_priv_mpool,
1710 		ts_params->valid_devs[0],
1711 		rte_cryptodev_driver_id_get(
1712 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1713 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1714 
1715 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1716 
1717 	return TEST_SUCCESS;
1718 }
1719 
1720 static int
1721 test_authonly_null_all(void)
1722 {
1723 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1724 	int status;
1725 
1726 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1727 		ts_params->op_mpool,
1728 		ts_params->session_mpool, ts_params->session_priv_mpool,
1729 		ts_params->valid_devs[0],
1730 		rte_cryptodev_driver_id_get(
1731 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1732 		BLKCIPHER_AUTHONLY_TYPE);
1733 
1734 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1735 
1736 	return TEST_SUCCESS;
1737 }
1738 
1739 static int
1740 test_AES_chain_mb_all(void)
1741 {
1742 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1743 	int status;
1744 
1745 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1746 		ts_params->op_mpool,
1747 		ts_params->session_mpool, ts_params->session_priv_mpool,
1748 		ts_params->valid_devs[0],
1749 		rte_cryptodev_driver_id_get(
1750 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1751 		BLKCIPHER_AES_CHAIN_TYPE);
1752 
1753 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1754 
1755 	return TEST_SUCCESS;
1756 }
1757 
1758 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
1759 
1760 static int
1761 test_AES_cipheronly_scheduler_all(void)
1762 {
1763 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1764 	int status;
1765 
1766 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1767 		ts_params->op_mpool,
1768 		ts_params->session_mpool, ts_params->session_priv_mpool,
1769 		ts_params->valid_devs[0],
1770 		rte_cryptodev_driver_id_get(
1771 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1772 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1773 
1774 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1775 
1776 	return TEST_SUCCESS;
1777 }
1778 
1779 static int
1780 test_AES_chain_scheduler_all(void)
1781 {
1782 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1783 	int status;
1784 
1785 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1786 		ts_params->op_mpool,
1787 		ts_params->session_mpool, ts_params->session_priv_mpool,
1788 		ts_params->valid_devs[0],
1789 		rte_cryptodev_driver_id_get(
1790 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1791 		BLKCIPHER_AES_CHAIN_TYPE);
1792 
1793 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1794 
1795 	return TEST_SUCCESS;
1796 }
1797 
1798 static int
1799 test_authonly_scheduler_all(void)
1800 {
1801 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1802 	int status;
1803 
1804 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1805 		ts_params->op_mpool,
1806 		ts_params->session_mpool, ts_params->session_priv_mpool,
1807 		ts_params->valid_devs[0],
1808 		rte_cryptodev_driver_id_get(
1809 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1810 		BLKCIPHER_AUTHONLY_TYPE);
1811 
1812 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1813 
1814 	return TEST_SUCCESS;
1815 }
1816 
1817 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
1818 
1819 static int
1820 test_AES_chain_openssl_all(void)
1821 {
1822 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1823 	int status;
1824 
1825 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1826 		ts_params->op_mpool,
1827 		ts_params->session_mpool, ts_params->session_priv_mpool,
1828 		ts_params->valid_devs[0],
1829 		rte_cryptodev_driver_id_get(
1830 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1831 		BLKCIPHER_AES_CHAIN_TYPE);
1832 
1833 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1834 
1835 	return TEST_SUCCESS;
1836 }
1837 
1838 static int
1839 test_AES_cipheronly_openssl_all(void)
1840 {
1841 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1842 	int status;
1843 
1844 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1845 		ts_params->op_mpool,
1846 		ts_params->session_mpool, ts_params->session_priv_mpool,
1847 		ts_params->valid_devs[0],
1848 		rte_cryptodev_driver_id_get(
1849 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1850 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1851 
1852 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1853 
1854 	return TEST_SUCCESS;
1855 }
1856 
1857 static int
1858 test_AES_chain_ccp_all(void)
1859 {
1860 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1861 	int status;
1862 
1863 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1864 		ts_params->op_mpool,
1865 		ts_params->session_mpool, ts_params->session_priv_mpool,
1866 		ts_params->valid_devs[0],
1867 		rte_cryptodev_driver_id_get(
1868 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
1869 		BLKCIPHER_AES_CHAIN_TYPE);
1870 
1871 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1872 
1873 	return TEST_SUCCESS;
1874 }
1875 
1876 static int
1877 test_AES_cipheronly_ccp_all(void)
1878 {
1879 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1880 	int status;
1881 
1882 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1883 		ts_params->op_mpool,
1884 		ts_params->session_mpool, ts_params->session_priv_mpool,
1885 		ts_params->valid_devs[0],
1886 		rte_cryptodev_driver_id_get(
1887 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
1888 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1889 
1890 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1891 
1892 	return TEST_SUCCESS;
1893 }
1894 
1895 static int
1896 test_AES_chain_qat_all(void)
1897 {
1898 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1899 	int status;
1900 
1901 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1902 		ts_params->op_mpool,
1903 		ts_params->session_mpool, ts_params->session_priv_mpool,
1904 		ts_params->valid_devs[0],
1905 		rte_cryptodev_driver_id_get(
1906 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1907 		BLKCIPHER_AES_CHAIN_TYPE);
1908 
1909 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1910 
1911 	return TEST_SUCCESS;
1912 }
1913 
1914 static int
1915 test_AES_cipheronly_qat_all(void)
1916 {
1917 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1918 	int status;
1919 
1920 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1921 		ts_params->op_mpool,
1922 		ts_params->session_mpool, ts_params->session_priv_mpool,
1923 		ts_params->valid_devs[0],
1924 		rte_cryptodev_driver_id_get(
1925 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1926 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1927 
1928 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1929 
1930 	return TEST_SUCCESS;
1931 }
1932 
1933 static int
1934 test_AES_cipheronly_virtio_all(void)
1935 {
1936 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1937 	int status;
1938 
1939 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1940 		ts_params->op_mpool,
1941 		ts_params->session_mpool, ts_params->session_priv_mpool,
1942 		ts_params->valid_devs[0],
1943 		rte_cryptodev_driver_id_get(
1944 		RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD)),
1945 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1946 
1947 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1948 
1949 	return TEST_SUCCESS;
1950 }
1951 
1952 static int
1953 test_AES_chain_caam_jr_all(void)
1954 {
1955 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1956 	int status;
1957 
1958 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1959 		ts_params->op_mpool,
1960 		ts_params->session_mpool, ts_params->session_priv_mpool,
1961 		ts_params->valid_devs[0],
1962 		rte_cryptodev_driver_id_get(
1963 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
1964 		BLKCIPHER_AES_CHAIN_TYPE);
1965 
1966 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1967 
1968 	return TEST_SUCCESS;
1969 }
1970 
1971 static int
1972 test_AES_cipheronly_caam_jr_all(void)
1973 {
1974 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1975 	int status;
1976 
1977 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1978 		ts_params->op_mpool,
1979 		ts_params->session_mpool, ts_params->session_priv_mpool,
1980 		ts_params->valid_devs[0],
1981 		rte_cryptodev_driver_id_get(
1982 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
1983 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1984 
1985 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1986 
1987 	return TEST_SUCCESS;
1988 }
1989 
1990 static int
1991 test_authonly_caam_jr_all(void)
1992 {
1993 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1994 	int status;
1995 
1996 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1997 		ts_params->op_mpool,
1998 		ts_params->session_mpool, ts_params->session_priv_mpool,
1999 		ts_params->valid_devs[0],
2000 		rte_cryptodev_driver_id_get(
2001 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
2002 		BLKCIPHER_AUTHONLY_TYPE);
2003 
2004 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2005 
2006 	return TEST_SUCCESS;
2007 }
2008 
2009 
2010 static int
2011 test_AES_chain_dpaa_sec_all(void)
2012 {
2013 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2014 	int status;
2015 
2016 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2017 		ts_params->op_mpool,
2018 		ts_params->session_mpool, ts_params->session_priv_mpool,
2019 		ts_params->valid_devs[0],
2020 		rte_cryptodev_driver_id_get(
2021 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2022 		BLKCIPHER_AES_CHAIN_TYPE);
2023 
2024 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2025 
2026 	return TEST_SUCCESS;
2027 }
2028 
2029 static int
2030 test_AES_cipheronly_dpaa_sec_all(void)
2031 {
2032 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2033 	int status;
2034 
2035 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2036 		ts_params->op_mpool,
2037 		ts_params->session_mpool, ts_params->session_priv_mpool,
2038 		ts_params->valid_devs[0],
2039 		rte_cryptodev_driver_id_get(
2040 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2041 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2042 
2043 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2044 
2045 	return TEST_SUCCESS;
2046 }
2047 
2048 static int
2049 test_authonly_dpaa_sec_all(void)
2050 {
2051 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2052 	int status;
2053 
2054 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2055 		ts_params->op_mpool,
2056 		ts_params->session_mpool, ts_params->session_priv_mpool,
2057 		ts_params->valid_devs[0],
2058 		rte_cryptodev_driver_id_get(
2059 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2060 		BLKCIPHER_AUTHONLY_TYPE);
2061 
2062 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2063 
2064 	return TEST_SUCCESS;
2065 }
2066 
2067 static int
2068 test_AES_chain_dpaa2_sec_all(void)
2069 {
2070 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2071 	int status;
2072 
2073 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2074 		ts_params->op_mpool,
2075 		ts_params->session_mpool, ts_params->session_priv_mpool,
2076 		ts_params->valid_devs[0],
2077 		rte_cryptodev_driver_id_get(
2078 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2079 		BLKCIPHER_AES_CHAIN_TYPE);
2080 
2081 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2082 
2083 	return TEST_SUCCESS;
2084 }
2085 
2086 static int
2087 test_AES_cipheronly_dpaa2_sec_all(void)
2088 {
2089 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2090 	int status;
2091 
2092 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2093 		ts_params->op_mpool,
2094 		ts_params->session_mpool, ts_params->session_priv_mpool,
2095 		ts_params->valid_devs[0],
2096 		rte_cryptodev_driver_id_get(
2097 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2098 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2099 
2100 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2101 
2102 	return TEST_SUCCESS;
2103 }
2104 
2105 static int
2106 test_authonly_dpaa2_sec_all(void)
2107 {
2108 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2109 	int status;
2110 
2111 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2112 		ts_params->op_mpool,
2113 		ts_params->session_mpool, ts_params->session_priv_mpool,
2114 		ts_params->valid_devs[0],
2115 		rte_cryptodev_driver_id_get(
2116 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2117 		BLKCIPHER_AUTHONLY_TYPE);
2118 
2119 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2120 
2121 	return TEST_SUCCESS;
2122 }
2123 
2124 static int
2125 test_authonly_openssl_all(void)
2126 {
2127 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2128 	int status;
2129 
2130 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2131 		ts_params->op_mpool,
2132 		ts_params->session_mpool, ts_params->session_priv_mpool,
2133 		ts_params->valid_devs[0],
2134 		rte_cryptodev_driver_id_get(
2135 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
2136 		BLKCIPHER_AUTHONLY_TYPE);
2137 
2138 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2139 
2140 	return TEST_SUCCESS;
2141 }
2142 
2143 static int
2144 test_authonly_ccp_all(void)
2145 {
2146 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2147 	int status;
2148 
2149 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2150 		ts_params->op_mpool,
2151 		ts_params->session_mpool, ts_params->session_priv_mpool,
2152 		ts_params->valid_devs[0],
2153 		rte_cryptodev_driver_id_get(
2154 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
2155 		BLKCIPHER_AUTHONLY_TYPE);
2156 
2157 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2158 
2159 	return TEST_SUCCESS;
2160 }
2161 
2162 static int
2163 test_AES_chain_armv8_all(void)
2164 {
2165 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2166 	int status;
2167 
2168 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2169 		ts_params->op_mpool,
2170 		ts_params->session_mpool, ts_params->session_priv_mpool,
2171 		ts_params->valid_devs[0],
2172 		rte_cryptodev_driver_id_get(
2173 		RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)),
2174 		BLKCIPHER_AES_CHAIN_TYPE);
2175 
2176 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2177 
2178 	return TEST_SUCCESS;
2179 }
2180 
2181 static int
2182 test_AES_chain_mrvl_all(void)
2183 {
2184 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2185 	int status;
2186 
2187 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2188 		ts_params->op_mpool,
2189 		ts_params->session_mpool, ts_params->session_priv_mpool,
2190 		ts_params->valid_devs[0],
2191 		rte_cryptodev_driver_id_get(
2192 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2193 		BLKCIPHER_AES_CHAIN_TYPE);
2194 
2195 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2196 
2197 	return TEST_SUCCESS;
2198 }
2199 
2200 static int
2201 test_AES_cipheronly_mrvl_all(void)
2202 {
2203 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2204 	int status;
2205 
2206 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2207 		ts_params->op_mpool,
2208 		ts_params->session_mpool, ts_params->session_priv_mpool,
2209 		ts_params->valid_devs[0],
2210 		rte_cryptodev_driver_id_get(
2211 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2212 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2213 
2214 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2215 
2216 	return TEST_SUCCESS;
2217 }
2218 
2219 static int
2220 test_authonly_mrvl_all(void)
2221 {
2222 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2223 	int status;
2224 
2225 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2226 		ts_params->op_mpool,
2227 		ts_params->session_mpool, ts_params->session_priv_mpool,
2228 		ts_params->valid_devs[0],
2229 		rte_cryptodev_driver_id_get(
2230 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2231 		BLKCIPHER_AUTHONLY_TYPE);
2232 
2233 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2234 
2235 	return TEST_SUCCESS;
2236 }
2237 
2238 static int
2239 test_3DES_chain_mrvl_all(void)
2240 {
2241 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2242 	int status;
2243 
2244 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2245 		ts_params->op_mpool,
2246 		ts_params->session_mpool, ts_params->session_priv_mpool,
2247 		ts_params->valid_devs[0],
2248 		rte_cryptodev_driver_id_get(
2249 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2250 		BLKCIPHER_3DES_CHAIN_TYPE);
2251 
2252 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2253 
2254 	return TEST_SUCCESS;
2255 }
2256 
2257 static int
2258 test_3DES_cipheronly_mrvl_all(void)
2259 {
2260 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2261 	int status;
2262 
2263 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2264 		ts_params->op_mpool,
2265 		ts_params->session_mpool, ts_params->session_priv_mpool,
2266 		ts_params->valid_devs[0],
2267 		rte_cryptodev_driver_id_get(
2268 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2269 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
2270 
2271 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2272 
2273 	return TEST_SUCCESS;
2274 }
2275 
2276 static int
2277 test_AES_chain_octeontx_all(void)
2278 {
2279 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2280 	int status;
2281 
2282 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2283 		ts_params->op_mpool, ts_params->session_mpool,
2284 		ts_params->session_priv_mpool,
2285 		ts_params->valid_devs[0],
2286 		rte_cryptodev_driver_id_get(
2287 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2288 		BLKCIPHER_AES_CHAIN_TYPE);
2289 
2290 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2291 
2292 	return TEST_SUCCESS;
2293 }
2294 
2295 static int
2296 test_AES_cipheronly_octeontx_all(void)
2297 {
2298 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2299 	int status;
2300 
2301 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2302 		ts_params->op_mpool, ts_params->session_mpool,
2303 		ts_params->session_priv_mpool,
2304 		ts_params->valid_devs[0],
2305 		rte_cryptodev_driver_id_get(
2306 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2307 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2308 
2309 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2310 
2311 	return TEST_SUCCESS;
2312 }
2313 
2314 static int
2315 test_3DES_chain_octeontx_all(void)
2316 {
2317 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2318 	int status;
2319 
2320 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2321 		ts_params->op_mpool, ts_params->session_mpool,
2322 		ts_params->session_priv_mpool,
2323 		ts_params->valid_devs[0],
2324 		rte_cryptodev_driver_id_get(
2325 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2326 		BLKCIPHER_3DES_CHAIN_TYPE);
2327 
2328 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2329 
2330 	return TEST_SUCCESS;
2331 }
2332 
2333 static int
2334 test_3DES_cipheronly_octeontx_all(void)
2335 {
2336 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2337 	int status;
2338 
2339 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2340 		ts_params->op_mpool, ts_params->session_mpool,
2341 		ts_params->session_priv_mpool,
2342 		ts_params->valid_devs[0],
2343 		rte_cryptodev_driver_id_get(
2344 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2345 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
2346 
2347 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2348 
2349 	return TEST_SUCCESS;
2350 }
2351 
2352 static int
2353 test_authonly_octeontx_all(void)
2354 {
2355 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2356 	int status;
2357 
2358 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2359 		ts_params->op_mpool, ts_params->session_mpool,
2360 		ts_params->session_priv_mpool,
2361 		ts_params->valid_devs[0],
2362 		rte_cryptodev_driver_id_get(
2363 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2364 		BLKCIPHER_AUTHONLY_TYPE);
2365 
2366 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2367 
2368 	return TEST_SUCCESS;
2369 }
2370 
2371 /* ***** SNOW 3G Tests ***** */
2372 static int
2373 create_wireless_algo_hash_session(uint8_t dev_id,
2374 	const uint8_t *key, const uint8_t key_len,
2375 	const uint8_t iv_len, const uint8_t auth_len,
2376 	enum rte_crypto_auth_operation op,
2377 	enum rte_crypto_auth_algorithm algo)
2378 {
2379 	uint8_t hash_key[key_len];
2380 	int status;
2381 
2382 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2383 	struct crypto_unittest_params *ut_params = &unittest_params;
2384 
2385 	memcpy(hash_key, key, key_len);
2386 
2387 	debug_hexdump(stdout, "key:", key, key_len);
2388 
2389 	/* Setup Authentication Parameters */
2390 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2391 	ut_params->auth_xform.next = NULL;
2392 
2393 	ut_params->auth_xform.auth.op = op;
2394 	ut_params->auth_xform.auth.algo = algo;
2395 	ut_params->auth_xform.auth.key.length = key_len;
2396 	ut_params->auth_xform.auth.key.data = hash_key;
2397 	ut_params->auth_xform.auth.digest_length = auth_len;
2398 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
2399 	ut_params->auth_xform.auth.iv.length = iv_len;
2400 	ut_params->sess = rte_cryptodev_sym_session_create(
2401 			ts_params->session_mpool);
2402 
2403 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2404 			&ut_params->auth_xform,
2405 			ts_params->session_priv_mpool);
2406 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2407 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2408 	return 0;
2409 }
2410 
2411 static int
2412 create_wireless_algo_cipher_session(uint8_t dev_id,
2413 			enum rte_crypto_cipher_operation op,
2414 			enum rte_crypto_cipher_algorithm algo,
2415 			const uint8_t *key, const uint8_t key_len,
2416 			uint8_t iv_len)
2417 {
2418 	uint8_t cipher_key[key_len];
2419 	int status;
2420 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2421 	struct crypto_unittest_params *ut_params = &unittest_params;
2422 
2423 	memcpy(cipher_key, key, key_len);
2424 
2425 	/* Setup Cipher Parameters */
2426 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2427 	ut_params->cipher_xform.next = NULL;
2428 
2429 	ut_params->cipher_xform.cipher.algo = algo;
2430 	ut_params->cipher_xform.cipher.op = op;
2431 	ut_params->cipher_xform.cipher.key.data = cipher_key;
2432 	ut_params->cipher_xform.cipher.key.length = key_len;
2433 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2434 	ut_params->cipher_xform.cipher.iv.length = iv_len;
2435 
2436 	debug_hexdump(stdout, "key:", key, key_len);
2437 
2438 	/* Create Crypto session */
2439 	ut_params->sess = rte_cryptodev_sym_session_create(
2440 			ts_params->session_mpool);
2441 
2442 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2443 			&ut_params->cipher_xform,
2444 			ts_params->session_priv_mpool);
2445 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2446 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2447 	return 0;
2448 }
2449 
2450 static int
2451 create_wireless_algo_cipher_operation(const uint8_t *iv, uint8_t iv_len,
2452 			unsigned int cipher_len,
2453 			unsigned int cipher_offset)
2454 {
2455 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2456 	struct crypto_unittest_params *ut_params = &unittest_params;
2457 
2458 	/* Generate Crypto op data structure */
2459 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2460 				RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2461 	TEST_ASSERT_NOT_NULL(ut_params->op,
2462 				"Failed to allocate pktmbuf offload");
2463 
2464 	/* Set crypto operation data parameters */
2465 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2466 
2467 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2468 
2469 	/* set crypto operation source mbuf */
2470 	sym_op->m_src = ut_params->ibuf;
2471 
2472 	/* iv */
2473 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2474 			iv, iv_len);
2475 	sym_op->cipher.data.length = cipher_len;
2476 	sym_op->cipher.data.offset = cipher_offset;
2477 	return 0;
2478 }
2479 
2480 static int
2481 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, uint8_t iv_len,
2482 			unsigned int cipher_len,
2483 			unsigned int cipher_offset)
2484 {
2485 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2486 	struct crypto_unittest_params *ut_params = &unittest_params;
2487 
2488 	/* Generate Crypto op data structure */
2489 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2490 				RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2491 	TEST_ASSERT_NOT_NULL(ut_params->op,
2492 				"Failed to allocate pktmbuf offload");
2493 
2494 	/* Set crypto operation data parameters */
2495 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2496 
2497 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2498 
2499 	/* set crypto operation source mbuf */
2500 	sym_op->m_src = ut_params->ibuf;
2501 	sym_op->m_dst = ut_params->obuf;
2502 
2503 	/* iv */
2504 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2505 			iv, iv_len);
2506 	sym_op->cipher.data.length = cipher_len;
2507 	sym_op->cipher.data.offset = cipher_offset;
2508 	return 0;
2509 }
2510 
2511 static int
2512 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
2513 		enum rte_crypto_cipher_operation cipher_op,
2514 		enum rte_crypto_auth_operation auth_op,
2515 		enum rte_crypto_auth_algorithm auth_algo,
2516 		enum rte_crypto_cipher_algorithm cipher_algo,
2517 		const uint8_t *key, uint8_t key_len,
2518 		uint8_t auth_iv_len, uint8_t auth_len,
2519 		uint8_t cipher_iv_len)
2520 
2521 {
2522 	uint8_t cipher_auth_key[key_len];
2523 	int status;
2524 
2525 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2526 	struct crypto_unittest_params *ut_params = &unittest_params;
2527 
2528 	memcpy(cipher_auth_key, key, key_len);
2529 
2530 	/* Setup Authentication Parameters */
2531 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2532 	ut_params->auth_xform.next = NULL;
2533 
2534 	ut_params->auth_xform.auth.op = auth_op;
2535 	ut_params->auth_xform.auth.algo = auth_algo;
2536 	ut_params->auth_xform.auth.key.length = key_len;
2537 	/* Hash key = cipher key */
2538 	ut_params->auth_xform.auth.key.data = cipher_auth_key;
2539 	ut_params->auth_xform.auth.digest_length = auth_len;
2540 	/* Auth IV will be after cipher IV */
2541 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2542 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2543 
2544 	/* Setup Cipher Parameters */
2545 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2546 	ut_params->cipher_xform.next = &ut_params->auth_xform;
2547 
2548 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2549 	ut_params->cipher_xform.cipher.op = cipher_op;
2550 	ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2551 	ut_params->cipher_xform.cipher.key.length = key_len;
2552 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2553 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2554 
2555 	debug_hexdump(stdout, "key:", key, key_len);
2556 
2557 	/* Create Crypto session*/
2558 	ut_params->sess = rte_cryptodev_sym_session_create(
2559 			ts_params->session_mpool);
2560 
2561 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2562 			&ut_params->cipher_xform,
2563 			ts_params->session_priv_mpool);
2564 
2565 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2566 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2567 	return 0;
2568 }
2569 
2570 static int
2571 create_wireless_cipher_auth_session(uint8_t dev_id,
2572 		enum rte_crypto_cipher_operation cipher_op,
2573 		enum rte_crypto_auth_operation auth_op,
2574 		enum rte_crypto_auth_algorithm auth_algo,
2575 		enum rte_crypto_cipher_algorithm cipher_algo,
2576 		const struct wireless_test_data *tdata)
2577 {
2578 	const uint8_t key_len = tdata->key.len;
2579 	uint8_t cipher_auth_key[key_len];
2580 	int status;
2581 
2582 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2583 	struct crypto_unittest_params *ut_params = &unittest_params;
2584 	const uint8_t *key = tdata->key.data;
2585 	const uint8_t auth_len = tdata->digest.len;
2586 	uint8_t cipher_iv_len = tdata->cipher_iv.len;
2587 	uint8_t auth_iv_len = tdata->auth_iv.len;
2588 
2589 	memcpy(cipher_auth_key, key, key_len);
2590 
2591 	/* Setup Authentication Parameters */
2592 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2593 	ut_params->auth_xform.next = NULL;
2594 
2595 	ut_params->auth_xform.auth.op = auth_op;
2596 	ut_params->auth_xform.auth.algo = auth_algo;
2597 	ut_params->auth_xform.auth.key.length = key_len;
2598 	/* Hash key = cipher key */
2599 	ut_params->auth_xform.auth.key.data = cipher_auth_key;
2600 	ut_params->auth_xform.auth.digest_length = auth_len;
2601 	/* Auth IV will be after cipher IV */
2602 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2603 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2604 
2605 	/* Setup Cipher Parameters */
2606 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2607 	ut_params->cipher_xform.next = &ut_params->auth_xform;
2608 
2609 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2610 	ut_params->cipher_xform.cipher.op = cipher_op;
2611 	ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2612 	ut_params->cipher_xform.cipher.key.length = key_len;
2613 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2614 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2615 
2616 
2617 	debug_hexdump(stdout, "key:", key, key_len);
2618 
2619 	/* Create Crypto session*/
2620 	ut_params->sess = rte_cryptodev_sym_session_create(
2621 			ts_params->session_mpool);
2622 
2623 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2624 			&ut_params->cipher_xform,
2625 			ts_params->session_priv_mpool);
2626 
2627 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2628 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2629 	return 0;
2630 }
2631 
2632 static int
2633 create_zuc_cipher_auth_encrypt_generate_session(uint8_t dev_id,
2634 		const struct wireless_test_data *tdata)
2635 {
2636 	return create_wireless_cipher_auth_session(dev_id,
2637 		RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2638 		RTE_CRYPTO_AUTH_OP_GENERATE, RTE_CRYPTO_AUTH_ZUC_EIA3,
2639 		RTE_CRYPTO_CIPHER_ZUC_EEA3, tdata);
2640 }
2641 
2642 static int
2643 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
2644 		enum rte_crypto_cipher_operation cipher_op,
2645 		enum rte_crypto_auth_operation auth_op,
2646 		enum rte_crypto_auth_algorithm auth_algo,
2647 		enum rte_crypto_cipher_algorithm cipher_algo,
2648 		const uint8_t *key, const uint8_t key_len,
2649 		uint8_t auth_iv_len, uint8_t auth_len,
2650 		uint8_t cipher_iv_len)
2651 {
2652 	uint8_t auth_cipher_key[key_len];
2653 	int status;
2654 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2655 	struct crypto_unittest_params *ut_params = &unittest_params;
2656 
2657 	memcpy(auth_cipher_key, key, key_len);
2658 
2659 	/* Setup Authentication Parameters */
2660 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2661 	ut_params->auth_xform.auth.op = auth_op;
2662 	ut_params->auth_xform.next = &ut_params->cipher_xform;
2663 	ut_params->auth_xform.auth.algo = auth_algo;
2664 	ut_params->auth_xform.auth.key.length = key_len;
2665 	ut_params->auth_xform.auth.key.data = auth_cipher_key;
2666 	ut_params->auth_xform.auth.digest_length = auth_len;
2667 	/* Auth IV will be after cipher IV */
2668 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2669 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2670 
2671 	/* Setup Cipher Parameters */
2672 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2673 	ut_params->cipher_xform.next = NULL;
2674 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2675 	ut_params->cipher_xform.cipher.op = cipher_op;
2676 	ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
2677 	ut_params->cipher_xform.cipher.key.length = key_len;
2678 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2679 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2680 
2681 	debug_hexdump(stdout, "key:", key, key_len);
2682 
2683 	/* Create Crypto session*/
2684 	ut_params->sess = rte_cryptodev_sym_session_create(
2685 			ts_params->session_mpool);
2686 
2687 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2688 			&ut_params->auth_xform,
2689 			ts_params->session_priv_mpool);
2690 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2691 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2692 
2693 	return 0;
2694 }
2695 
2696 static int
2697 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
2698 		unsigned int auth_tag_len,
2699 		const uint8_t *iv, unsigned int iv_len,
2700 		unsigned int data_pad_len,
2701 		enum rte_crypto_auth_operation op,
2702 		unsigned int auth_len, unsigned int auth_offset)
2703 {
2704 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2705 
2706 	struct crypto_unittest_params *ut_params = &unittest_params;
2707 
2708 	/* Generate Crypto op data structure */
2709 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2710 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2711 	TEST_ASSERT_NOT_NULL(ut_params->op,
2712 		"Failed to allocate pktmbuf offload");
2713 
2714 	/* Set crypto operation data parameters */
2715 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2716 
2717 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2718 
2719 	/* set crypto operation source mbuf */
2720 	sym_op->m_src = ut_params->ibuf;
2721 
2722 	/* iv */
2723 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2724 			iv, iv_len);
2725 	/* digest */
2726 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2727 					ut_params->ibuf, auth_tag_len);
2728 
2729 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2730 				"no room to append auth tag");
2731 	ut_params->digest = sym_op->auth.digest.data;
2732 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2733 			ut_params->ibuf, data_pad_len);
2734 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2735 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2736 	else
2737 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2738 
2739 	debug_hexdump(stdout, "digest:",
2740 		sym_op->auth.digest.data,
2741 		auth_tag_len);
2742 
2743 	sym_op->auth.data.length = auth_len;
2744 	sym_op->auth.data.offset = auth_offset;
2745 
2746 	return 0;
2747 }
2748 
2749 static int
2750 create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata,
2751 	enum rte_crypto_auth_operation op)
2752 {
2753 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2754 	struct crypto_unittest_params *ut_params = &unittest_params;
2755 
2756 	const uint8_t *auth_tag = tdata->digest.data;
2757 	const unsigned int auth_tag_len = tdata->digest.len;
2758 	unsigned int plaintext_len = ceil_byte_length(tdata->plaintext.len);
2759 	unsigned int data_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2760 
2761 	const uint8_t *cipher_iv = tdata->cipher_iv.data;
2762 	const uint8_t cipher_iv_len = tdata->cipher_iv.len;
2763 	const uint8_t *auth_iv = tdata->auth_iv.data;
2764 	const uint8_t auth_iv_len = tdata->auth_iv.len;
2765 	const unsigned int cipher_len = tdata->validCipherLenInBits.len;
2766 	const unsigned int auth_len = tdata->validAuthLenInBits.len;
2767 
2768 	/* Generate Crypto op data structure */
2769 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2770 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2771 	TEST_ASSERT_NOT_NULL(ut_params->op,
2772 			"Failed to allocate pktmbuf offload");
2773 	/* Set crypto operation data parameters */
2774 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2775 
2776 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2777 
2778 	/* set crypto operation source mbuf */
2779 	sym_op->m_src = ut_params->ibuf;
2780 
2781 	/* digest */
2782 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2783 			ut_params->ibuf, auth_tag_len);
2784 
2785 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2786 			"no room to append auth tag");
2787 	ut_params->digest = sym_op->auth.digest.data;
2788 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2789 			ut_params->ibuf, data_pad_len);
2790 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2791 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2792 	else
2793 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2794 
2795 	debug_hexdump(stdout, "digest:",
2796 		sym_op->auth.digest.data,
2797 		auth_tag_len);
2798 
2799 	/* Copy cipher and auth IVs at the end of the crypto operation */
2800 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2801 						IV_OFFSET);
2802 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2803 	iv_ptr += cipher_iv_len;
2804 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2805 
2806 	sym_op->cipher.data.length = cipher_len;
2807 	sym_op->cipher.data.offset = 0;
2808 	sym_op->auth.data.length = auth_len;
2809 	sym_op->auth.data.offset = 0;
2810 
2811 	return 0;
2812 }
2813 
2814 static int
2815 create_zuc_cipher_hash_generate_operation(
2816 		const struct wireless_test_data *tdata)
2817 {
2818 	return create_wireless_cipher_hash_operation(tdata,
2819 		RTE_CRYPTO_AUTH_OP_GENERATE);
2820 }
2821 
2822 static int
2823 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2824 		const unsigned auth_tag_len,
2825 		const uint8_t *auth_iv, uint8_t auth_iv_len,
2826 		unsigned data_pad_len,
2827 		enum rte_crypto_auth_operation op,
2828 		const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2829 		const unsigned cipher_len, const unsigned cipher_offset,
2830 		const unsigned auth_len, const unsigned auth_offset)
2831 {
2832 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2833 	struct crypto_unittest_params *ut_params = &unittest_params;
2834 
2835 	/* Generate Crypto op data structure */
2836 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2837 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2838 	TEST_ASSERT_NOT_NULL(ut_params->op,
2839 			"Failed to allocate pktmbuf offload");
2840 	/* Set crypto operation data parameters */
2841 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2842 
2843 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2844 
2845 	/* set crypto operation source mbuf */
2846 	sym_op->m_src = ut_params->ibuf;
2847 
2848 	/* digest */
2849 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2850 			ut_params->ibuf, auth_tag_len);
2851 
2852 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2853 			"no room to append auth tag");
2854 	ut_params->digest = sym_op->auth.digest.data;
2855 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2856 			ut_params->ibuf, data_pad_len);
2857 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2858 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2859 	else
2860 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2861 
2862 	debug_hexdump(stdout, "digest:",
2863 		sym_op->auth.digest.data,
2864 		auth_tag_len);
2865 
2866 	/* Copy cipher and auth IVs at the end of the crypto operation */
2867 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2868 						IV_OFFSET);
2869 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2870 	iv_ptr += cipher_iv_len;
2871 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2872 
2873 	sym_op->cipher.data.length = cipher_len;
2874 	sym_op->cipher.data.offset = cipher_offset;
2875 	sym_op->auth.data.length = auth_len;
2876 	sym_op->auth.data.offset = auth_offset;
2877 
2878 	return 0;
2879 }
2880 
2881 static int
2882 create_wireless_algo_auth_cipher_operation(unsigned int auth_tag_len,
2883 		const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2884 		const uint8_t *auth_iv, uint8_t auth_iv_len,
2885 		unsigned int data_pad_len,
2886 		unsigned int cipher_len, unsigned int cipher_offset,
2887 		unsigned int auth_len, unsigned int auth_offset,
2888 		uint8_t op_mode, uint8_t do_sgl)
2889 {
2890 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2891 	struct crypto_unittest_params *ut_params = &unittest_params;
2892 
2893 	/* Generate Crypto op data structure */
2894 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2895 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2896 	TEST_ASSERT_NOT_NULL(ut_params->op,
2897 			"Failed to allocate pktmbuf offload");
2898 
2899 	/* Set crypto operation data parameters */
2900 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2901 
2902 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2903 
2904 	/* set crypto operation mbufs */
2905 	sym_op->m_src = ut_params->ibuf;
2906 	if (op_mode == OUT_OF_PLACE)
2907 		sym_op->m_dst = ut_params->obuf;
2908 
2909 	/* digest */
2910 	if (!do_sgl) {
2911 		sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(
2912 			(op_mode == IN_PLACE ?
2913 				ut_params->ibuf : ut_params->obuf),
2914 			uint8_t *, data_pad_len);
2915 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2916 			(op_mode == IN_PLACE ?
2917 				ut_params->ibuf : ut_params->obuf),
2918 			data_pad_len);
2919 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2920 	} else {
2921 		uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3);
2922 		struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ?
2923 				sym_op->m_src : sym_op->m_dst);
2924 		while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) {
2925 			remaining_off -= rte_pktmbuf_data_len(sgl_buf);
2926 			sgl_buf = sgl_buf->next;
2927 		}
2928 		sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf,
2929 				uint8_t *, remaining_off);
2930 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(sgl_buf,
2931 				remaining_off);
2932 		memset(sym_op->auth.digest.data, 0, remaining_off);
2933 		while (sgl_buf->next != NULL) {
2934 			memset(rte_pktmbuf_mtod(sgl_buf, uint8_t *),
2935 				0, rte_pktmbuf_data_len(sgl_buf));
2936 			sgl_buf = sgl_buf->next;
2937 		}
2938 	}
2939 
2940 	/* Copy cipher and auth IVs at the end of the crypto operation */
2941 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(
2942 			ut_params->op, uint8_t *, IV_OFFSET);
2943 
2944 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2945 	iv_ptr += cipher_iv_len;
2946 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2947 
2948 	sym_op->cipher.data.length = cipher_len;
2949 	sym_op->cipher.data.offset = cipher_offset;
2950 
2951 	sym_op->auth.data.length = auth_len;
2952 	sym_op->auth.data.offset = auth_offset;
2953 
2954 	return 0;
2955 }
2956 
2957 static int
2958 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2959 {
2960 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2961 	struct crypto_unittest_params *ut_params = &unittest_params;
2962 
2963 	int retval;
2964 	unsigned plaintext_pad_len;
2965 	unsigned plaintext_len;
2966 	uint8_t *plaintext;
2967 
2968 	/* Create SNOW 3G session */
2969 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2970 			tdata->key.data, tdata->key.len,
2971 			tdata->auth_iv.len, tdata->digest.len,
2972 			RTE_CRYPTO_AUTH_OP_GENERATE,
2973 			RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2974 	if (retval < 0)
2975 		return retval;
2976 
2977 	/* alloc mbuf and set payload */
2978 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2979 
2980 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2981 	rte_pktmbuf_tailroom(ut_params->ibuf));
2982 
2983 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
2984 	/* Append data which is padded to a multiple of */
2985 	/* the algorithms block size */
2986 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2987 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2988 				plaintext_pad_len);
2989 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2990 
2991 	/* Create SNOW 3G operation */
2992 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2993 			tdata->auth_iv.data, tdata->auth_iv.len,
2994 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2995 			tdata->validAuthLenInBits.len,
2996 			0);
2997 	if (retval < 0)
2998 		return retval;
2999 
3000 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3001 				ut_params->op);
3002 	ut_params->obuf = ut_params->op->sym->m_src;
3003 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3004 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3005 			+ plaintext_pad_len;
3006 
3007 	/* Validate obuf */
3008 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
3009 	ut_params->digest,
3010 	tdata->digest.data,
3011 	DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3012 	"SNOW 3G Generated auth tag not as expected");
3013 
3014 	return 0;
3015 }
3016 
3017 static int
3018 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
3019 {
3020 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3021 	struct crypto_unittest_params *ut_params = &unittest_params;
3022 
3023 	int retval;
3024 	unsigned plaintext_pad_len;
3025 	unsigned plaintext_len;
3026 	uint8_t *plaintext;
3027 
3028 	/* Create SNOW 3G session */
3029 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3030 				tdata->key.data, tdata->key.len,
3031 				tdata->auth_iv.len, tdata->digest.len,
3032 				RTE_CRYPTO_AUTH_OP_VERIFY,
3033 				RTE_CRYPTO_AUTH_SNOW3G_UIA2);
3034 	if (retval < 0)
3035 		return retval;
3036 	/* alloc mbuf and set payload */
3037 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3038 
3039 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3040 	rte_pktmbuf_tailroom(ut_params->ibuf));
3041 
3042 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3043 	/* Append data which is padded to a multiple of */
3044 	/* the algorithms block size */
3045 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3046 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3047 				plaintext_pad_len);
3048 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3049 
3050 	/* Create SNOW 3G operation */
3051 	retval = create_wireless_algo_hash_operation(tdata->digest.data,
3052 			tdata->digest.len,
3053 			tdata->auth_iv.data, tdata->auth_iv.len,
3054 			plaintext_pad_len,
3055 			RTE_CRYPTO_AUTH_OP_VERIFY,
3056 			tdata->validAuthLenInBits.len,
3057 			0);
3058 	if (retval < 0)
3059 		return retval;
3060 
3061 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3062 				ut_params->op);
3063 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3064 	ut_params->obuf = ut_params->op->sym->m_src;
3065 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3066 				+ plaintext_pad_len;
3067 
3068 	/* Validate obuf */
3069 	if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
3070 		return 0;
3071 	else
3072 		return -1;
3073 
3074 	return 0;
3075 }
3076 
3077 static int
3078 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
3079 {
3080 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3081 	struct crypto_unittest_params *ut_params = &unittest_params;
3082 
3083 	int retval;
3084 	unsigned plaintext_pad_len;
3085 	unsigned plaintext_len;
3086 	uint8_t *plaintext;
3087 
3088 	/* Create KASUMI session */
3089 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3090 			tdata->key.data, tdata->key.len,
3091 			0, tdata->digest.len,
3092 			RTE_CRYPTO_AUTH_OP_GENERATE,
3093 			RTE_CRYPTO_AUTH_KASUMI_F9);
3094 	if (retval < 0)
3095 		return retval;
3096 
3097 	/* alloc mbuf and set payload */
3098 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3099 
3100 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3101 	rte_pktmbuf_tailroom(ut_params->ibuf));
3102 
3103 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3104 	/* Append data which is padded to a multiple of */
3105 	/* the algorithms block size */
3106 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3107 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3108 				plaintext_pad_len);
3109 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3110 
3111 	/* Create KASUMI operation */
3112 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
3113 			NULL, 0,
3114 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3115 			tdata->plaintext.len,
3116 			0);
3117 	if (retval < 0)
3118 		return retval;
3119 
3120 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3121 				ut_params->op);
3122 	ut_params->obuf = ut_params->op->sym->m_src;
3123 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3124 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3125 			+ plaintext_pad_len;
3126 
3127 	/* Validate obuf */
3128 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
3129 	ut_params->digest,
3130 	tdata->digest.data,
3131 	DIGEST_BYTE_LENGTH_KASUMI_F9,
3132 	"KASUMI Generated auth tag not as expected");
3133 
3134 	return 0;
3135 }
3136 
3137 static int
3138 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
3139 {
3140 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3141 	struct crypto_unittest_params *ut_params = &unittest_params;
3142 
3143 	int retval;
3144 	unsigned plaintext_pad_len;
3145 	unsigned plaintext_len;
3146 	uint8_t *plaintext;
3147 
3148 	/* Create KASUMI session */
3149 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3150 				tdata->key.data, tdata->key.len,
3151 				0, tdata->digest.len,
3152 				RTE_CRYPTO_AUTH_OP_VERIFY,
3153 				RTE_CRYPTO_AUTH_KASUMI_F9);
3154 	if (retval < 0)
3155 		return retval;
3156 	/* alloc mbuf and set payload */
3157 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3158 
3159 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3160 	rte_pktmbuf_tailroom(ut_params->ibuf));
3161 
3162 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3163 	/* Append data which is padded to a multiple */
3164 	/* of the algorithms block size */
3165 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3166 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3167 				plaintext_pad_len);
3168 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3169 
3170 	/* Create KASUMI operation */
3171 	retval = create_wireless_algo_hash_operation(tdata->digest.data,
3172 			tdata->digest.len,
3173 			NULL, 0,
3174 			plaintext_pad_len,
3175 			RTE_CRYPTO_AUTH_OP_VERIFY,
3176 			tdata->plaintext.len,
3177 			0);
3178 	if (retval < 0)
3179 		return retval;
3180 
3181 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3182 				ut_params->op);
3183 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3184 	ut_params->obuf = ut_params->op->sym->m_src;
3185 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3186 				+ plaintext_pad_len;
3187 
3188 	/* Validate obuf */
3189 	if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
3190 		return 0;
3191 	else
3192 		return -1;
3193 
3194 	return 0;
3195 }
3196 
3197 static int
3198 test_snow3g_hash_generate_test_case_1(void)
3199 {
3200 	return test_snow3g_authentication(&snow3g_hash_test_case_1);
3201 }
3202 
3203 static int
3204 test_snow3g_hash_generate_test_case_2(void)
3205 {
3206 	return test_snow3g_authentication(&snow3g_hash_test_case_2);
3207 }
3208 
3209 static int
3210 test_snow3g_hash_generate_test_case_3(void)
3211 {
3212 	return test_snow3g_authentication(&snow3g_hash_test_case_3);
3213 }
3214 
3215 static int
3216 test_snow3g_hash_generate_test_case_4(void)
3217 {
3218 	return test_snow3g_authentication(&snow3g_hash_test_case_4);
3219 }
3220 
3221 static int
3222 test_snow3g_hash_generate_test_case_5(void)
3223 {
3224 	return test_snow3g_authentication(&snow3g_hash_test_case_5);
3225 }
3226 
3227 static int
3228 test_snow3g_hash_generate_test_case_6(void)
3229 {
3230 	return test_snow3g_authentication(&snow3g_hash_test_case_6);
3231 }
3232 
3233 static int
3234 test_snow3g_hash_verify_test_case_1(void)
3235 {
3236 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
3237 
3238 }
3239 
3240 static int
3241 test_snow3g_hash_verify_test_case_2(void)
3242 {
3243 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
3244 }
3245 
3246 static int
3247 test_snow3g_hash_verify_test_case_3(void)
3248 {
3249 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
3250 }
3251 
3252 static int
3253 test_snow3g_hash_verify_test_case_4(void)
3254 {
3255 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
3256 }
3257 
3258 static int
3259 test_snow3g_hash_verify_test_case_5(void)
3260 {
3261 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
3262 }
3263 
3264 static int
3265 test_snow3g_hash_verify_test_case_6(void)
3266 {
3267 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
3268 }
3269 
3270 static int
3271 test_kasumi_hash_generate_test_case_1(void)
3272 {
3273 	return test_kasumi_authentication(&kasumi_hash_test_case_1);
3274 }
3275 
3276 static int
3277 test_kasumi_hash_generate_test_case_2(void)
3278 {
3279 	return test_kasumi_authentication(&kasumi_hash_test_case_2);
3280 }
3281 
3282 static int
3283 test_kasumi_hash_generate_test_case_3(void)
3284 {
3285 	return test_kasumi_authentication(&kasumi_hash_test_case_3);
3286 }
3287 
3288 static int
3289 test_kasumi_hash_generate_test_case_4(void)
3290 {
3291 	return test_kasumi_authentication(&kasumi_hash_test_case_4);
3292 }
3293 
3294 static int
3295 test_kasumi_hash_generate_test_case_5(void)
3296 {
3297 	return test_kasumi_authentication(&kasumi_hash_test_case_5);
3298 }
3299 
3300 static int
3301 test_kasumi_hash_generate_test_case_6(void)
3302 {
3303 	return test_kasumi_authentication(&kasumi_hash_test_case_6);
3304 }
3305 
3306 static int
3307 test_kasumi_hash_verify_test_case_1(void)
3308 {
3309 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
3310 }
3311 
3312 static int
3313 test_kasumi_hash_verify_test_case_2(void)
3314 {
3315 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
3316 }
3317 
3318 static int
3319 test_kasumi_hash_verify_test_case_3(void)
3320 {
3321 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
3322 }
3323 
3324 static int
3325 test_kasumi_hash_verify_test_case_4(void)
3326 {
3327 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
3328 }
3329 
3330 static int
3331 test_kasumi_hash_verify_test_case_5(void)
3332 {
3333 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
3334 }
3335 
3336 static int
3337 test_kasumi_encryption(const struct kasumi_test_data *tdata)
3338 {
3339 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3340 	struct crypto_unittest_params *ut_params = &unittest_params;
3341 
3342 	int retval;
3343 	uint8_t *plaintext, *ciphertext;
3344 	unsigned plaintext_pad_len;
3345 	unsigned plaintext_len;
3346 
3347 	/* Create KASUMI session */
3348 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3349 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3350 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3351 					tdata->key.data, tdata->key.len,
3352 					tdata->cipher_iv.len);
3353 	if (retval < 0)
3354 		return retval;
3355 
3356 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3357 
3358 	/* Clear mbuf payload */
3359 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3360 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3361 
3362 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3363 	/* Append data which is padded to a multiple */
3364 	/* of the algorithms block size */
3365 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3366 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3367 				plaintext_pad_len);
3368 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3369 
3370 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3371 
3372 	/* Create KASUMI operation */
3373 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3374 				tdata->cipher_iv.len,
3375 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3376 				tdata->validCipherOffsetInBits.len);
3377 	if (retval < 0)
3378 		return retval;
3379 
3380 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3381 						ut_params->op);
3382 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3383 
3384 	ut_params->obuf = ut_params->op->sym->m_dst;
3385 	if (ut_params->obuf)
3386 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3387 	else
3388 		ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3389 
3390 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3391 
3392 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3393 				(tdata->validCipherOffsetInBits.len >> 3);
3394 	/* Validate obuf */
3395 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3396 		ciphertext,
3397 		reference_ciphertext,
3398 		tdata->validCipherLenInBits.len,
3399 		"KASUMI Ciphertext data not as expected");
3400 	return 0;
3401 }
3402 
3403 static int
3404 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
3405 {
3406 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3407 	struct crypto_unittest_params *ut_params = &unittest_params;
3408 
3409 	int retval;
3410 
3411 	unsigned int plaintext_pad_len;
3412 	unsigned int plaintext_len;
3413 
3414 	uint8_t buffer[10000];
3415 	const uint8_t *ciphertext;
3416 
3417 	struct rte_cryptodev_info dev_info;
3418 
3419 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3420 
3421 	uint64_t feat_flags = dev_info.feature_flags;
3422 
3423 	if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
3424 		printf("Device doesn't support in-place scatter-gather. "
3425 				"Test Skipped.\n");
3426 		return -ENOTSUP;
3427 	}
3428 
3429 	/* Create KASUMI session */
3430 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3431 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3432 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3433 					tdata->key.data, tdata->key.len,
3434 					tdata->cipher_iv.len);
3435 	if (retval < 0)
3436 		return retval;
3437 
3438 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3439 
3440 
3441 	/* Append data which is padded to a multiple */
3442 	/* of the algorithms block size */
3443 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3444 
3445 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3446 			plaintext_pad_len, 10, 0);
3447 
3448 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3449 
3450 	/* Create KASUMI operation */
3451 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3452 				tdata->cipher_iv.len,
3453 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3454 				tdata->validCipherOffsetInBits.len);
3455 	if (retval < 0)
3456 		return retval;
3457 
3458 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3459 						ut_params->op);
3460 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3461 
3462 	ut_params->obuf = ut_params->op->sym->m_dst;
3463 
3464 	if (ut_params->obuf)
3465 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3466 				plaintext_len, buffer);
3467 	else
3468 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3469 				tdata->validCipherOffsetInBits.len >> 3,
3470 				plaintext_len, buffer);
3471 
3472 	/* Validate obuf */
3473 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3474 
3475 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3476 				(tdata->validCipherOffsetInBits.len >> 3);
3477 	/* Validate obuf */
3478 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3479 		ciphertext,
3480 		reference_ciphertext,
3481 		tdata->validCipherLenInBits.len,
3482 		"KASUMI Ciphertext data not as expected");
3483 	return 0;
3484 }
3485 
3486 static int
3487 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
3488 {
3489 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3490 	struct crypto_unittest_params *ut_params = &unittest_params;
3491 
3492 	int retval;
3493 	uint8_t *plaintext, *ciphertext;
3494 	unsigned plaintext_pad_len;
3495 	unsigned plaintext_len;
3496 
3497 	/* Create KASUMI session */
3498 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3499 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3500 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3501 					tdata->key.data, tdata->key.len,
3502 					tdata->cipher_iv.len);
3503 	if (retval < 0)
3504 		return retval;
3505 
3506 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3507 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3508 
3509 	/* Clear mbuf payload */
3510 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3511 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3512 
3513 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3514 	/* Append data which is padded to a multiple */
3515 	/* of the algorithms block size */
3516 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3517 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3518 				plaintext_pad_len);
3519 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3520 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3521 
3522 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3523 
3524 	/* Create KASUMI operation */
3525 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3526 				tdata->cipher_iv.len,
3527 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3528 				tdata->validCipherOffsetInBits.len);
3529 	if (retval < 0)
3530 		return retval;
3531 
3532 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3533 						ut_params->op);
3534 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3535 
3536 	ut_params->obuf = ut_params->op->sym->m_dst;
3537 	if (ut_params->obuf)
3538 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3539 	else
3540 		ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3541 
3542 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3543 
3544 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3545 				(tdata->validCipherOffsetInBits.len >> 3);
3546 	/* Validate obuf */
3547 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3548 		ciphertext,
3549 		reference_ciphertext,
3550 		tdata->validCipherLenInBits.len,
3551 		"KASUMI Ciphertext data not as expected");
3552 	return 0;
3553 }
3554 
3555 static int
3556 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
3557 {
3558 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3559 	struct crypto_unittest_params *ut_params = &unittest_params;
3560 
3561 	int retval;
3562 	unsigned int plaintext_pad_len;
3563 	unsigned int plaintext_len;
3564 
3565 	const uint8_t *ciphertext;
3566 	uint8_t buffer[2048];
3567 
3568 	struct rte_cryptodev_info dev_info;
3569 
3570 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3571 
3572 	uint64_t feat_flags = dev_info.feature_flags;
3573 	if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
3574 		printf("Device doesn't support out-of-place scatter-gather "
3575 				"in both input and output mbufs. "
3576 				"Test Skipped.\n");
3577 		return -ENOTSUP;
3578 	}
3579 
3580 	/* Create KASUMI session */
3581 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3582 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3583 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3584 					tdata->key.data, tdata->key.len,
3585 					tdata->cipher_iv.len);
3586 	if (retval < 0)
3587 		return retval;
3588 
3589 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3590 	/* Append data which is padded to a multiple */
3591 	/* of the algorithms block size */
3592 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3593 
3594 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3595 			plaintext_pad_len, 10, 0);
3596 	ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3597 			plaintext_pad_len, 3, 0);
3598 
3599 	/* Append data which is padded to a multiple */
3600 	/* of the algorithms block size */
3601 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3602 
3603 	/* Create KASUMI operation */
3604 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3605 				tdata->cipher_iv.len,
3606 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3607 				tdata->validCipherOffsetInBits.len);
3608 	if (retval < 0)
3609 		return retval;
3610 
3611 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3612 						ut_params->op);
3613 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3614 
3615 	ut_params->obuf = ut_params->op->sym->m_dst;
3616 	if (ut_params->obuf)
3617 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3618 				plaintext_pad_len, buffer);
3619 	else
3620 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3621 				tdata->validCipherOffsetInBits.len >> 3,
3622 				plaintext_pad_len, buffer);
3623 
3624 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3625 				(tdata->validCipherOffsetInBits.len >> 3);
3626 	/* Validate obuf */
3627 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3628 		ciphertext,
3629 		reference_ciphertext,
3630 		tdata->validCipherLenInBits.len,
3631 		"KASUMI Ciphertext data not as expected");
3632 	return 0;
3633 }
3634 
3635 
3636 static int
3637 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
3638 {
3639 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3640 	struct crypto_unittest_params *ut_params = &unittest_params;
3641 
3642 	int retval;
3643 	uint8_t *ciphertext, *plaintext;
3644 	unsigned ciphertext_pad_len;
3645 	unsigned ciphertext_len;
3646 
3647 	/* Create KASUMI session */
3648 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3649 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
3650 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3651 					tdata->key.data, tdata->key.len,
3652 					tdata->cipher_iv.len);
3653 	if (retval < 0)
3654 		return retval;
3655 
3656 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3657 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3658 
3659 	/* Clear mbuf payload */
3660 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3661 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3662 
3663 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3664 	/* Append data which is padded to a multiple */
3665 	/* of the algorithms block size */
3666 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3667 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3668 				ciphertext_pad_len);
3669 	rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3670 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3671 
3672 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3673 
3674 	/* Create KASUMI operation */
3675 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3676 				tdata->cipher_iv.len,
3677 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3678 				tdata->validCipherOffsetInBits.len);
3679 	if (retval < 0)
3680 		return retval;
3681 
3682 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3683 						ut_params->op);
3684 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3685 
3686 	ut_params->obuf = ut_params->op->sym->m_dst;
3687 	if (ut_params->obuf)
3688 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3689 	else
3690 		plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3691 
3692 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3693 
3694 	const uint8_t *reference_plaintext = tdata->plaintext.data +
3695 				(tdata->validCipherOffsetInBits.len >> 3);
3696 	/* Validate obuf */
3697 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3698 		plaintext,
3699 		reference_plaintext,
3700 		tdata->validCipherLenInBits.len,
3701 		"KASUMI Plaintext data not as expected");
3702 	return 0;
3703 }
3704 
3705 static int
3706 test_kasumi_decryption(const struct kasumi_test_data *tdata)
3707 {
3708 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3709 	struct crypto_unittest_params *ut_params = &unittest_params;
3710 
3711 	int retval;
3712 	uint8_t *ciphertext, *plaintext;
3713 	unsigned ciphertext_pad_len;
3714 	unsigned ciphertext_len;
3715 
3716 	/* Create KASUMI session */
3717 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3718 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
3719 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3720 					tdata->key.data, tdata->key.len,
3721 					tdata->cipher_iv.len);
3722 	if (retval < 0)
3723 		return retval;
3724 
3725 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3726 
3727 	/* Clear mbuf payload */
3728 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3729 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3730 
3731 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3732 	/* Append data which is padded to a multiple */
3733 	/* of the algorithms block size */
3734 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3735 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3736 				ciphertext_pad_len);
3737 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3738 
3739 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3740 
3741 	/* Create KASUMI operation */
3742 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3743 					tdata->cipher_iv.len,
3744 					tdata->ciphertext.len,
3745 					tdata->validCipherOffsetInBits.len);
3746 	if (retval < 0)
3747 		return retval;
3748 
3749 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3750 						ut_params->op);
3751 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3752 
3753 	ut_params->obuf = ut_params->op->sym->m_dst;
3754 	if (ut_params->obuf)
3755 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3756 	else
3757 		plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3758 
3759 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3760 
3761 	const uint8_t *reference_plaintext = tdata->plaintext.data +
3762 				(tdata->validCipherOffsetInBits.len >> 3);
3763 	/* Validate obuf */
3764 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3765 		plaintext,
3766 		reference_plaintext,
3767 		tdata->validCipherLenInBits.len,
3768 		"KASUMI Plaintext data not as expected");
3769 	return 0;
3770 }
3771 
3772 static int
3773 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3774 {
3775 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3776 	struct crypto_unittest_params *ut_params = &unittest_params;
3777 
3778 	int retval;
3779 	uint8_t *plaintext, *ciphertext;
3780 	unsigned plaintext_pad_len;
3781 	unsigned plaintext_len;
3782 
3783 	/* Create SNOW 3G session */
3784 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3785 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3786 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3787 					tdata->key.data, tdata->key.len,
3788 					tdata->cipher_iv.len);
3789 	if (retval < 0)
3790 		return retval;
3791 
3792 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3793 
3794 	/* Clear mbuf payload */
3795 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3796 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3797 
3798 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3799 	/* Append data which is padded to a multiple of */
3800 	/* the algorithms block size */
3801 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3802 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3803 				plaintext_pad_len);
3804 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3805 
3806 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3807 
3808 	/* Create SNOW 3G operation */
3809 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3810 					tdata->cipher_iv.len,
3811 					tdata->validCipherLenInBits.len,
3812 					0);
3813 	if (retval < 0)
3814 		return retval;
3815 
3816 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3817 						ut_params->op);
3818 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3819 
3820 	ut_params->obuf = ut_params->op->sym->m_dst;
3821 	if (ut_params->obuf)
3822 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3823 	else
3824 		ciphertext = plaintext;
3825 
3826 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3827 
3828 	/* Validate obuf */
3829 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3830 		ciphertext,
3831 		tdata->ciphertext.data,
3832 		tdata->validDataLenInBits.len,
3833 		"SNOW 3G Ciphertext data not as expected");
3834 	return 0;
3835 }
3836 
3837 
3838 static int
3839 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
3840 {
3841 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3842 	struct crypto_unittest_params *ut_params = &unittest_params;
3843 	uint8_t *plaintext, *ciphertext;
3844 
3845 	int retval;
3846 	unsigned plaintext_pad_len;
3847 	unsigned plaintext_len;
3848 
3849 	/* Create SNOW 3G session */
3850 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3851 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3852 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3853 					tdata->key.data, tdata->key.len,
3854 					tdata->cipher_iv.len);
3855 	if (retval < 0)
3856 		return retval;
3857 
3858 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3859 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3860 
3861 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3862 			"Failed to allocate input buffer in mempool");
3863 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
3864 			"Failed to allocate output buffer in mempool");
3865 
3866 	/* Clear mbuf payload */
3867 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3868 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3869 
3870 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3871 	/* Append data which is padded to a multiple of */
3872 	/* the algorithms block size */
3873 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3874 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3875 				plaintext_pad_len);
3876 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3877 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3878 
3879 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3880 
3881 	/* Create SNOW 3G operation */
3882 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3883 					tdata->cipher_iv.len,
3884 					tdata->validCipherLenInBits.len,
3885 					0);
3886 	if (retval < 0)
3887 		return retval;
3888 
3889 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3890 						ut_params->op);
3891 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3892 
3893 	ut_params->obuf = ut_params->op->sym->m_dst;
3894 	if (ut_params->obuf)
3895 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3896 	else
3897 		ciphertext = plaintext;
3898 
3899 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3900 
3901 	/* Validate obuf */
3902 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3903 		ciphertext,
3904 		tdata->ciphertext.data,
3905 		tdata->validDataLenInBits.len,
3906 		"SNOW 3G Ciphertext data not as expected");
3907 	return 0;
3908 }
3909 
3910 static int
3911 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
3912 {
3913 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3914 	struct crypto_unittest_params *ut_params = &unittest_params;
3915 
3916 	int retval;
3917 	unsigned int plaintext_pad_len;
3918 	unsigned int plaintext_len;
3919 	uint8_t buffer[10000];
3920 	const uint8_t *ciphertext;
3921 
3922 	struct rte_cryptodev_info dev_info;
3923 
3924 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3925 
3926 	uint64_t feat_flags = dev_info.feature_flags;
3927 
3928 	if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
3929 		printf("Device doesn't support out-of-place scatter-gather "
3930 				"in both input and output mbufs. "
3931 				"Test Skipped.\n");
3932 		return -ENOTSUP;
3933 	}
3934 
3935 	/* Create SNOW 3G session */
3936 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3937 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3938 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3939 					tdata->key.data, tdata->key.len,
3940 					tdata->cipher_iv.len);
3941 	if (retval < 0)
3942 		return retval;
3943 
3944 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3945 	/* Append data which is padded to a multiple of */
3946 	/* the algorithms block size */
3947 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3948 
3949 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3950 			plaintext_pad_len, 10, 0);
3951 	ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3952 			plaintext_pad_len, 3, 0);
3953 
3954 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3955 			"Failed to allocate input buffer in mempool");
3956 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
3957 			"Failed to allocate output buffer in mempool");
3958 
3959 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3960 
3961 	/* Create SNOW 3G operation */
3962 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3963 					tdata->cipher_iv.len,
3964 					tdata->validCipherLenInBits.len,
3965 					0);
3966 	if (retval < 0)
3967 		return retval;
3968 
3969 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3970 						ut_params->op);
3971 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3972 
3973 	ut_params->obuf = ut_params->op->sym->m_dst;
3974 	if (ut_params->obuf)
3975 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3976 				plaintext_len, buffer);
3977 	else
3978 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
3979 				plaintext_len, buffer);
3980 
3981 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3982 
3983 	/* Validate obuf */
3984 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3985 		ciphertext,
3986 		tdata->ciphertext.data,
3987 		tdata->validDataLenInBits.len,
3988 		"SNOW 3G Ciphertext data not as expected");
3989 
3990 	return 0;
3991 }
3992 
3993 /* Shift right a buffer by "offset" bits, "offset" < 8 */
3994 static void
3995 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
3996 {
3997 	uint8_t curr_byte, prev_byte;
3998 	uint32_t length_in_bytes = ceil_byte_length(length + offset);
3999 	uint8_t lower_byte_mask = (1 << offset) - 1;
4000 	unsigned i;
4001 
4002 	prev_byte = buffer[0];
4003 	buffer[0] >>= offset;
4004 
4005 	for (i = 1; i < length_in_bytes; i++) {
4006 		curr_byte = buffer[i];
4007 		buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
4008 				(curr_byte >> offset);
4009 		prev_byte = curr_byte;
4010 	}
4011 }
4012 
4013 static int
4014 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
4015 {
4016 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4017 	struct crypto_unittest_params *ut_params = &unittest_params;
4018 	uint8_t *plaintext, *ciphertext;
4019 	int retval;
4020 	uint32_t plaintext_len;
4021 	uint32_t plaintext_pad_len;
4022 	uint8_t extra_offset = 4;
4023 	uint8_t *expected_ciphertext_shifted;
4024 
4025 	/* Create SNOW 3G session */
4026 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4027 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4028 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4029 					tdata->key.data, tdata->key.len,
4030 					tdata->cipher_iv.len);
4031 	if (retval < 0)
4032 		return retval;
4033 
4034 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4035 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4036 
4037 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4038 			"Failed to allocate input buffer in mempool");
4039 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4040 			"Failed to allocate output buffer in mempool");
4041 
4042 	/* Clear mbuf payload */
4043 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4044 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4045 
4046 	plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
4047 	/*
4048 	 * Append data which is padded to a
4049 	 * multiple of the algorithms block size
4050 	 */
4051 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4052 
4053 	plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
4054 						plaintext_pad_len);
4055 
4056 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4057 
4058 	memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
4059 	buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
4060 
4061 #ifdef RTE_APP_TEST_DEBUG
4062 	rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
4063 #endif
4064 	/* Create SNOW 3G operation */
4065 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4066 					tdata->cipher_iv.len,
4067 					tdata->validCipherLenInBits.len,
4068 					extra_offset);
4069 	if (retval < 0)
4070 		return retval;
4071 
4072 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4073 						ut_params->op);
4074 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4075 
4076 	ut_params->obuf = ut_params->op->sym->m_dst;
4077 	if (ut_params->obuf)
4078 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4079 	else
4080 		ciphertext = plaintext;
4081 
4082 #ifdef RTE_APP_TEST_DEBUG
4083 	rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4084 #endif
4085 
4086 	expected_ciphertext_shifted = rte_malloc(NULL, plaintext_len, 8);
4087 
4088 	TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
4089 			"failed to reserve memory for ciphertext shifted\n");
4090 
4091 	memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
4092 			ceil_byte_length(tdata->ciphertext.len));
4093 	buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
4094 			extra_offset);
4095 	/* Validate obuf */
4096 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
4097 		ciphertext,
4098 		expected_ciphertext_shifted,
4099 		tdata->validDataLenInBits.len,
4100 		extra_offset,
4101 		"SNOW 3G Ciphertext data not as expected");
4102 	return 0;
4103 }
4104 
4105 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
4106 {
4107 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4108 	struct crypto_unittest_params *ut_params = &unittest_params;
4109 
4110 	int retval;
4111 
4112 	uint8_t *plaintext, *ciphertext;
4113 	unsigned ciphertext_pad_len;
4114 	unsigned ciphertext_len;
4115 
4116 	/* Create SNOW 3G session */
4117 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4118 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
4119 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4120 					tdata->key.data, tdata->key.len,
4121 					tdata->cipher_iv.len);
4122 	if (retval < 0)
4123 		return retval;
4124 
4125 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4126 
4127 	/* Clear mbuf payload */
4128 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4129 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4130 
4131 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4132 	/* Append data which is padded to a multiple of */
4133 	/* the algorithms block size */
4134 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4135 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4136 				ciphertext_pad_len);
4137 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4138 
4139 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4140 
4141 	/* Create SNOW 3G operation */
4142 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4143 					tdata->cipher_iv.len,
4144 					tdata->validCipherLenInBits.len,
4145 					tdata->cipher.offset_bits);
4146 	if (retval < 0)
4147 		return retval;
4148 
4149 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4150 						ut_params->op);
4151 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4152 	ut_params->obuf = ut_params->op->sym->m_dst;
4153 	if (ut_params->obuf)
4154 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4155 	else
4156 		plaintext = ciphertext;
4157 
4158 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4159 
4160 	/* Validate obuf */
4161 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4162 				tdata->plaintext.data,
4163 				tdata->validDataLenInBits.len,
4164 				"SNOW 3G Plaintext data not as expected");
4165 	return 0;
4166 }
4167 
4168 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
4169 {
4170 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4171 	struct crypto_unittest_params *ut_params = &unittest_params;
4172 
4173 	int retval;
4174 
4175 	uint8_t *plaintext, *ciphertext;
4176 	unsigned ciphertext_pad_len;
4177 	unsigned ciphertext_len;
4178 
4179 	/* Create SNOW 3G session */
4180 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4181 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
4182 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4183 					tdata->key.data, tdata->key.len,
4184 					tdata->cipher_iv.len);
4185 	if (retval < 0)
4186 		return retval;
4187 
4188 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4189 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4190 
4191 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4192 			"Failed to allocate input buffer");
4193 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4194 			"Failed to allocate output buffer");
4195 
4196 	/* Clear mbuf payload */
4197 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4198 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4199 
4200 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4201 		       rte_pktmbuf_tailroom(ut_params->obuf));
4202 
4203 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4204 	/* Append data which is padded to a multiple of */
4205 	/* the algorithms block size */
4206 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4207 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4208 				ciphertext_pad_len);
4209 	rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4210 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4211 
4212 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4213 
4214 	/* Create SNOW 3G operation */
4215 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4216 					tdata->cipher_iv.len,
4217 					tdata->validCipherLenInBits.len,
4218 					0);
4219 	if (retval < 0)
4220 		return retval;
4221 
4222 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4223 						ut_params->op);
4224 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4225 	ut_params->obuf = ut_params->op->sym->m_dst;
4226 	if (ut_params->obuf)
4227 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4228 	else
4229 		plaintext = ciphertext;
4230 
4231 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4232 
4233 	/* Validate obuf */
4234 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4235 				tdata->plaintext.data,
4236 				tdata->validDataLenInBits.len,
4237 				"SNOW 3G Plaintext data not as expected");
4238 	return 0;
4239 }
4240 
4241 static int
4242 test_zuc_cipher_auth(const struct wireless_test_data *tdata)
4243 {
4244 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4245 	struct crypto_unittest_params *ut_params = &unittest_params;
4246 
4247 	int retval;
4248 
4249 	uint8_t *plaintext, *ciphertext;
4250 	unsigned int plaintext_pad_len;
4251 	unsigned int plaintext_len;
4252 
4253 	struct rte_cryptodev_sym_capability_idx cap_idx;
4254 
4255 	/* Check if device supports ZUC EEA3 */
4256 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4257 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
4258 
4259 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4260 			&cap_idx) == NULL)
4261 		return -ENOTSUP;
4262 
4263 	/* Check if device supports ZUC EIA3 */
4264 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4265 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
4266 
4267 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4268 			&cap_idx) == NULL)
4269 		return -ENOTSUP;
4270 
4271 	/* Create ZUC session */
4272 	retval = create_zuc_cipher_auth_encrypt_generate_session(
4273 			ts_params->valid_devs[0],
4274 			tdata);
4275 	if (retval < 0)
4276 		return retval;
4277 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4278 
4279 	/* clear mbuf payload */
4280 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4281 			rte_pktmbuf_tailroom(ut_params->ibuf));
4282 
4283 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4284 	/* Append data which is padded to a multiple of */
4285 	/* the algorithms block size */
4286 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4287 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4288 				plaintext_pad_len);
4289 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4290 
4291 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4292 
4293 	/* Create ZUC operation */
4294 	retval = create_zuc_cipher_hash_generate_operation(tdata);
4295 	if (retval < 0)
4296 		return retval;
4297 
4298 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4299 			ut_params->op);
4300 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4301 	ut_params->obuf = ut_params->op->sym->m_src;
4302 	if (ut_params->obuf)
4303 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4304 	else
4305 		ciphertext = plaintext;
4306 
4307 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4308 	/* Validate obuf */
4309 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4310 			ciphertext,
4311 			tdata->ciphertext.data,
4312 			tdata->validDataLenInBits.len,
4313 			"ZUC Ciphertext data not as expected");
4314 
4315 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4316 	    + plaintext_pad_len;
4317 
4318 	/* Validate obuf */
4319 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
4320 			ut_params->digest,
4321 			tdata->digest.data,
4322 			4,
4323 			"ZUC Generated auth tag not as expected");
4324 	return 0;
4325 }
4326 
4327 static int
4328 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
4329 {
4330 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4331 	struct crypto_unittest_params *ut_params = &unittest_params;
4332 
4333 	int retval;
4334 
4335 	uint8_t *plaintext, *ciphertext;
4336 	unsigned plaintext_pad_len;
4337 	unsigned plaintext_len;
4338 
4339 	/* Create SNOW 3G session */
4340 	retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
4341 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4342 			RTE_CRYPTO_AUTH_OP_GENERATE,
4343 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4344 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4345 			tdata->key.data, tdata->key.len,
4346 			tdata->auth_iv.len, tdata->digest.len,
4347 			tdata->cipher_iv.len);
4348 	if (retval < 0)
4349 		return retval;
4350 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4351 
4352 	/* clear mbuf payload */
4353 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4354 			rte_pktmbuf_tailroom(ut_params->ibuf));
4355 
4356 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4357 	/* Append data which is padded to a multiple of */
4358 	/* the algorithms block size */
4359 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4360 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4361 				plaintext_pad_len);
4362 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4363 
4364 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4365 
4366 	/* Create SNOW 3G operation */
4367 	retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
4368 			tdata->digest.len, tdata->auth_iv.data,
4369 			tdata->auth_iv.len,
4370 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4371 			tdata->cipher_iv.data, tdata->cipher_iv.len,
4372 			tdata->validCipherLenInBits.len,
4373 			0,
4374 			tdata->validAuthLenInBits.len,
4375 			0
4376 			);
4377 	if (retval < 0)
4378 		return retval;
4379 
4380 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4381 			ut_params->op);
4382 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4383 	ut_params->obuf = ut_params->op->sym->m_src;
4384 	if (ut_params->obuf)
4385 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4386 	else
4387 		ciphertext = plaintext;
4388 
4389 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4390 	/* Validate obuf */
4391 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4392 			ciphertext,
4393 			tdata->ciphertext.data,
4394 			tdata->validDataLenInBits.len,
4395 			"SNOW 3G Ciphertext data not as expected");
4396 
4397 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4398 	    + plaintext_pad_len;
4399 
4400 	/* Validate obuf */
4401 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
4402 			ut_params->digest,
4403 			tdata->digest.data,
4404 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4405 			"SNOW 3G Generated auth tag not as expected");
4406 	return 0;
4407 }
4408 
4409 static int
4410 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,
4411 	uint8_t op_mode, uint8_t verify)
4412 {
4413 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4414 	struct crypto_unittest_params *ut_params = &unittest_params;
4415 
4416 	int retval;
4417 
4418 	uint8_t *plaintext = NULL, *ciphertext = NULL;
4419 	unsigned int plaintext_pad_len;
4420 	unsigned int plaintext_len;
4421 	unsigned int ciphertext_pad_len;
4422 	unsigned int ciphertext_len;
4423 
4424 	struct rte_cryptodev_info dev_info;
4425 
4426 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4427 
4428 	uint64_t feat_flags = dev_info.feature_flags;
4429 
4430 	if (op_mode == OUT_OF_PLACE) {
4431 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4432 			printf("Device doesn't support digest encrypted.\n");
4433 			return -ENOTSUP;
4434 		}
4435 	}
4436 
4437 	/* Create SNOW 3G session */
4438 	retval = create_wireless_algo_auth_cipher_session(
4439 			ts_params->valid_devs[0],
4440 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4441 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4442 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4443 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4444 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4445 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4446 			tdata->key.data, tdata->key.len,
4447 			tdata->auth_iv.len, tdata->digest.len,
4448 			tdata->cipher_iv.len);
4449 
4450 	if (retval < 0)
4451 		return retval;
4452 
4453 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4454 	if (op_mode == OUT_OF_PLACE)
4455 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4456 
4457 	/* clear mbuf payload */
4458 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4459 		rte_pktmbuf_tailroom(ut_params->ibuf));
4460 	if (op_mode == OUT_OF_PLACE)
4461 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4462 			rte_pktmbuf_tailroom(ut_params->obuf));
4463 
4464 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4465 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4466 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4467 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4468 
4469 	if (verify) {
4470 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4471 					ciphertext_pad_len);
4472 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4473 		if (op_mode == OUT_OF_PLACE)
4474 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4475 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4476 			ciphertext_len);
4477 	} else {
4478 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4479 					plaintext_pad_len);
4480 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4481 		if (op_mode == OUT_OF_PLACE)
4482 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4483 		debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4484 	}
4485 
4486 	/* Create SNOW 3G operation */
4487 	retval = create_wireless_algo_auth_cipher_operation(
4488 		tdata->digest.len,
4489 		tdata->cipher_iv.data, tdata->cipher_iv.len,
4490 		tdata->auth_iv.data, tdata->auth_iv.len,
4491 		(tdata->digest.offset_bytes == 0 ?
4492 		(verify ? ciphertext_pad_len : plaintext_pad_len)
4493 			: tdata->digest.offset_bytes),
4494 		tdata->validCipherLenInBits.len,
4495 		tdata->cipher.offset_bits,
4496 		tdata->validAuthLenInBits.len,
4497 		tdata->auth.offset_bits,
4498 		op_mode, 0);
4499 
4500 	if (retval < 0)
4501 		return retval;
4502 
4503 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4504 			ut_params->op);
4505 
4506 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4507 
4508 	ut_params->obuf = (op_mode == IN_PLACE ?
4509 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4510 
4511 	if (verify) {
4512 		if (ut_params->obuf)
4513 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
4514 							uint8_t *);
4515 		else
4516 			plaintext = ciphertext +
4517 				(tdata->cipher.offset_bits >> 3);
4518 
4519 		debug_hexdump(stdout, "plaintext:", plaintext,
4520 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4521 		debug_hexdump(stdout, "plaintext expected:",
4522 			tdata->plaintext.data,
4523 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4524 	} else {
4525 		if (ut_params->obuf)
4526 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
4527 							uint8_t *);
4528 		else
4529 			ciphertext = plaintext;
4530 
4531 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4532 			ciphertext_len);
4533 		debug_hexdump(stdout, "ciphertext expected:",
4534 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4535 
4536 		ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4537 			+ (tdata->digest.offset_bytes == 0 ?
4538 		plaintext_pad_len : tdata->digest.offset_bytes);
4539 
4540 		debug_hexdump(stdout, "digest:", ut_params->digest,
4541 			tdata->digest.len);
4542 		debug_hexdump(stdout, "digest expected:", tdata->digest.data,
4543 				tdata->digest.len);
4544 	}
4545 
4546 	/* Validate obuf */
4547 	if (verify) {
4548 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4549 			plaintext,
4550 			tdata->plaintext.data,
4551 			tdata->plaintext.len >> 3,
4552 			"SNOW 3G Plaintext data not as expected");
4553 	} else {
4554 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4555 			ciphertext,
4556 			tdata->ciphertext.data,
4557 			tdata->validDataLenInBits.len,
4558 			"SNOW 3G Ciphertext data not as expected");
4559 
4560 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
4561 			ut_params->digest,
4562 			tdata->digest.data,
4563 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4564 			"SNOW 3G Generated auth tag not as expected");
4565 	}
4566 	return 0;
4567 }
4568 
4569 static int
4570 test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,
4571 	uint8_t op_mode, uint8_t verify)
4572 {
4573 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4574 	struct crypto_unittest_params *ut_params = &unittest_params;
4575 
4576 	int retval;
4577 
4578 	const uint8_t *plaintext = NULL;
4579 	const uint8_t *ciphertext = NULL;
4580 	const uint8_t *digest = NULL;
4581 	unsigned int plaintext_pad_len;
4582 	unsigned int plaintext_len;
4583 	unsigned int ciphertext_pad_len;
4584 	unsigned int ciphertext_len;
4585 	uint8_t buffer[10000];
4586 	uint8_t digest_buffer[10000];
4587 
4588 	struct rte_cryptodev_info dev_info;
4589 
4590 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4591 
4592 	uint64_t feat_flags = dev_info.feature_flags;
4593 
4594 	if (op_mode == IN_PLACE) {
4595 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
4596 			printf("Device doesn't support in-place scatter-gather "
4597 					"in both input and output mbufs.\n");
4598 			return -ENOTSUP;
4599 		}
4600 	} else {
4601 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
4602 			printf("Device doesn't support out-of-place scatter-gather "
4603 					"in both input and output mbufs.\n");
4604 			return -ENOTSUP;
4605 		}
4606 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4607 			printf("Device doesn't support digest encrypted.\n");
4608 			return -ENOTSUP;
4609 		}
4610 	}
4611 
4612 	/* Create SNOW 3G session */
4613 	retval = create_wireless_algo_auth_cipher_session(
4614 			ts_params->valid_devs[0],
4615 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4616 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4617 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4618 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4619 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4620 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4621 			tdata->key.data, tdata->key.len,
4622 			tdata->auth_iv.len, tdata->digest.len,
4623 			tdata->cipher_iv.len);
4624 
4625 	if (retval < 0)
4626 		return retval;
4627 
4628 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4629 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4630 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4631 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4632 
4633 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4634 			plaintext_pad_len, 15, 0);
4635 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4636 			"Failed to allocate input buffer in mempool");
4637 
4638 	if (op_mode == OUT_OF_PLACE) {
4639 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
4640 				plaintext_pad_len, 15, 0);
4641 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
4642 				"Failed to allocate output buffer in mempool");
4643 	}
4644 
4645 	if (verify) {
4646 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
4647 			tdata->ciphertext.data);
4648 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4649 					ciphertext_len, buffer);
4650 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4651 			ciphertext_len);
4652 	} else {
4653 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
4654 			tdata->plaintext.data);
4655 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4656 					plaintext_len, buffer);
4657 		debug_hexdump(stdout, "plaintext:", plaintext,
4658 			plaintext_len);
4659 	}
4660 	memset(buffer, 0, sizeof(buffer));
4661 
4662 	/* Create SNOW 3G operation */
4663 	retval = create_wireless_algo_auth_cipher_operation(
4664 		tdata->digest.len,
4665 		tdata->cipher_iv.data, tdata->cipher_iv.len,
4666 		tdata->auth_iv.data, tdata->auth_iv.len,
4667 		(tdata->digest.offset_bytes == 0 ?
4668 		(verify ? ciphertext_pad_len : plaintext_pad_len)
4669 			: tdata->digest.offset_bytes),
4670 		tdata->validCipherLenInBits.len,
4671 		tdata->cipher.offset_bits,
4672 		tdata->validAuthLenInBits.len,
4673 		tdata->auth.offset_bits,
4674 		op_mode, 1);
4675 
4676 	if (retval < 0)
4677 		return retval;
4678 
4679 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4680 			ut_params->op);
4681 
4682 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4683 
4684 	ut_params->obuf = (op_mode == IN_PLACE ?
4685 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4686 
4687 	if (verify) {
4688 		if (ut_params->obuf)
4689 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
4690 					plaintext_len, buffer);
4691 		else
4692 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4693 					plaintext_len, buffer);
4694 
4695 		debug_hexdump(stdout, "plaintext:", plaintext,
4696 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4697 		debug_hexdump(stdout, "plaintext expected:",
4698 			tdata->plaintext.data,
4699 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4700 	} else {
4701 		if (ut_params->obuf)
4702 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
4703 					ciphertext_len, buffer);
4704 		else
4705 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4706 					ciphertext_len, buffer);
4707 
4708 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4709 			ciphertext_len);
4710 		debug_hexdump(stdout, "ciphertext expected:",
4711 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4712 
4713 		if (ut_params->obuf)
4714 			digest = rte_pktmbuf_read(ut_params->obuf,
4715 				(tdata->digest.offset_bytes == 0 ?
4716 				plaintext_pad_len : tdata->digest.offset_bytes),
4717 				tdata->digest.len, digest_buffer);
4718 		else
4719 			digest = rte_pktmbuf_read(ut_params->ibuf,
4720 				(tdata->digest.offset_bytes == 0 ?
4721 				plaintext_pad_len : tdata->digest.offset_bytes),
4722 				tdata->digest.len, digest_buffer);
4723 
4724 		debug_hexdump(stdout, "digest:", digest,
4725 			tdata->digest.len);
4726 		debug_hexdump(stdout, "digest expected:",
4727 			tdata->digest.data, tdata->digest.len);
4728 	}
4729 
4730 	/* Validate obuf */
4731 	if (verify) {
4732 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4733 			plaintext,
4734 			tdata->plaintext.data,
4735 			tdata->plaintext.len >> 3,
4736 			"SNOW 3G Plaintext data not as expected");
4737 	} else {
4738 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4739 			ciphertext,
4740 			tdata->ciphertext.data,
4741 			tdata->validDataLenInBits.len,
4742 			"SNOW 3G Ciphertext data not as expected");
4743 
4744 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
4745 			digest,
4746 			tdata->digest.data,
4747 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4748 			"SNOW 3G Generated auth tag not as expected");
4749 	}
4750 	return 0;
4751 }
4752 
4753 static int
4754 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata,
4755 	uint8_t op_mode, uint8_t verify)
4756 {
4757 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4758 	struct crypto_unittest_params *ut_params = &unittest_params;
4759 
4760 	int retval;
4761 
4762 	uint8_t *plaintext = NULL, *ciphertext = NULL;
4763 	unsigned int plaintext_pad_len;
4764 	unsigned int plaintext_len;
4765 	unsigned int ciphertext_pad_len;
4766 	unsigned int ciphertext_len;
4767 
4768 	struct rte_cryptodev_info dev_info;
4769 
4770 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4771 
4772 	uint64_t feat_flags = dev_info.feature_flags;
4773 
4774 	if (op_mode == OUT_OF_PLACE) {
4775 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4776 			printf("Device doesn't support digest encrypted.\n");
4777 			return -ENOTSUP;
4778 		}
4779 	}
4780 
4781 	/* Create KASUMI session */
4782 	retval = create_wireless_algo_auth_cipher_session(
4783 			ts_params->valid_devs[0],
4784 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4785 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4786 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4787 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4788 			RTE_CRYPTO_AUTH_KASUMI_F9,
4789 			RTE_CRYPTO_CIPHER_KASUMI_F8,
4790 			tdata->key.data, tdata->key.len,
4791 			0, tdata->digest.len,
4792 			tdata->cipher_iv.len);
4793 
4794 	if (retval < 0)
4795 		return retval;
4796 
4797 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4798 	if (op_mode == OUT_OF_PLACE)
4799 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4800 
4801 	/* clear mbuf payload */
4802 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4803 		rte_pktmbuf_tailroom(ut_params->ibuf));
4804 	if (op_mode == OUT_OF_PLACE)
4805 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4806 			rte_pktmbuf_tailroom(ut_params->obuf));
4807 
4808 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4809 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4810 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4811 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4812 
4813 	if (verify) {
4814 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4815 					ciphertext_pad_len);
4816 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4817 		if (op_mode == OUT_OF_PLACE)
4818 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4819 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4820 			ciphertext_len);
4821 	} else {
4822 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4823 					plaintext_pad_len);
4824 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4825 		if (op_mode == OUT_OF_PLACE)
4826 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4827 		debug_hexdump(stdout, "plaintext:", plaintext,
4828 			plaintext_len);
4829 	}
4830 
4831 	/* Create KASUMI operation */
4832 	retval = create_wireless_algo_auth_cipher_operation(
4833 		tdata->digest.len,
4834 		tdata->cipher_iv.data, tdata->cipher_iv.len,
4835 		NULL, 0,
4836 		(tdata->digest.offset_bytes == 0 ?
4837 		(verify ? ciphertext_pad_len : plaintext_pad_len)
4838 			: tdata->digest.offset_bytes),
4839 		tdata->validCipherLenInBits.len,
4840 		tdata->validCipherOffsetInBits.len,
4841 		tdata->validAuthLenInBits.len,
4842 		0,
4843 		op_mode, 0);
4844 
4845 	if (retval < 0)
4846 		return retval;
4847 
4848 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4849 			ut_params->op);
4850 
4851 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4852 
4853 	ut_params->obuf = (op_mode == IN_PLACE ?
4854 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4855 
4856 
4857 	if (verify) {
4858 		if (ut_params->obuf)
4859 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
4860 							uint8_t *);
4861 		else
4862 			plaintext = ciphertext;
4863 
4864 		debug_hexdump(stdout, "plaintext:", plaintext,
4865 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4866 		debug_hexdump(stdout, "plaintext expected:",
4867 			tdata->plaintext.data,
4868 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4869 	} else {
4870 		if (ut_params->obuf)
4871 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
4872 							uint8_t *);
4873 		else
4874 			ciphertext = plaintext;
4875 
4876 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4877 			ciphertext_len);
4878 		debug_hexdump(stdout, "ciphertext expected:",
4879 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4880 
4881 		ut_params->digest = rte_pktmbuf_mtod(
4882 			ut_params->obuf, uint8_t *) +
4883 			(tdata->digest.offset_bytes == 0 ?
4884 			plaintext_pad_len : tdata->digest.offset_bytes);
4885 
4886 		debug_hexdump(stdout, "digest:", ut_params->digest,
4887 			tdata->digest.len);
4888 		debug_hexdump(stdout, "digest expected:",
4889 			tdata->digest.data, tdata->digest.len);
4890 	}
4891 
4892 	/* Validate obuf */
4893 	if (verify) {
4894 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4895 			plaintext,
4896 			tdata->plaintext.data,
4897 			tdata->plaintext.len >> 3,
4898 			"KASUMI Plaintext data not as expected");
4899 	} else {
4900 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4901 			ciphertext,
4902 			tdata->ciphertext.data,
4903 			tdata->ciphertext.len >> 3,
4904 			"KASUMI Ciphertext data not as expected");
4905 
4906 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
4907 			ut_params->digest,
4908 			tdata->digest.data,
4909 			DIGEST_BYTE_LENGTH_KASUMI_F9,
4910 			"KASUMI Generated auth tag not as expected");
4911 	}
4912 	return 0;
4913 }
4914 
4915 static int
4916 test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata,
4917 	uint8_t op_mode, uint8_t verify)
4918 {
4919 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4920 	struct crypto_unittest_params *ut_params = &unittest_params;
4921 
4922 	int retval;
4923 
4924 	const uint8_t *plaintext = NULL;
4925 	const uint8_t *ciphertext = NULL;
4926 	const uint8_t *digest = NULL;
4927 	unsigned int plaintext_pad_len;
4928 	unsigned int plaintext_len;
4929 	unsigned int ciphertext_pad_len;
4930 	unsigned int ciphertext_len;
4931 	uint8_t buffer[10000];
4932 	uint8_t digest_buffer[10000];
4933 
4934 	struct rte_cryptodev_info dev_info;
4935 
4936 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4937 
4938 	uint64_t feat_flags = dev_info.feature_flags;
4939 
4940 	if (op_mode == IN_PLACE) {
4941 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
4942 			printf("Device doesn't support in-place scatter-gather "
4943 					"in both input and output mbufs.\n");
4944 			return -ENOTSUP;
4945 		}
4946 	} else {
4947 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
4948 			printf("Device doesn't support out-of-place scatter-gather "
4949 					"in both input and output mbufs.\n");
4950 			return -ENOTSUP;
4951 		}
4952 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4953 			printf("Device doesn't support digest encrypted.\n");
4954 			return -ENOTSUP;
4955 		}
4956 	}
4957 
4958 	/* Create KASUMI session */
4959 	retval = create_wireless_algo_auth_cipher_session(
4960 			ts_params->valid_devs[0],
4961 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4962 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4963 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4964 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4965 			RTE_CRYPTO_AUTH_KASUMI_F9,
4966 			RTE_CRYPTO_CIPHER_KASUMI_F8,
4967 			tdata->key.data, tdata->key.len,
4968 			0, tdata->digest.len,
4969 			tdata->cipher_iv.len);
4970 
4971 	if (retval < 0)
4972 		return retval;
4973 
4974 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4975 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4976 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4977 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4978 
4979 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4980 			plaintext_pad_len, 15, 0);
4981 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4982 			"Failed to allocate input buffer in mempool");
4983 
4984 	if (op_mode == OUT_OF_PLACE) {
4985 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
4986 				plaintext_pad_len, 15, 0);
4987 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
4988 				"Failed to allocate output buffer in mempool");
4989 	}
4990 
4991 	if (verify) {
4992 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
4993 			tdata->ciphertext.data);
4994 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4995 					ciphertext_len, buffer);
4996 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4997 			ciphertext_len);
4998 	} else {
4999 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5000 			tdata->plaintext.data);
5001 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5002 					plaintext_len, buffer);
5003 		debug_hexdump(stdout, "plaintext:", plaintext,
5004 			plaintext_len);
5005 	}
5006 	memset(buffer, 0, sizeof(buffer));
5007 
5008 	/* Create KASUMI operation */
5009 	retval = create_wireless_algo_auth_cipher_operation(
5010 		tdata->digest.len,
5011 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5012 		NULL, 0,
5013 		(tdata->digest.offset_bytes == 0 ?
5014 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5015 			: tdata->digest.offset_bytes),
5016 		tdata->validCipherLenInBits.len,
5017 		tdata->validCipherOffsetInBits.len,
5018 		tdata->validAuthLenInBits.len,
5019 		0,
5020 		op_mode, 1);
5021 
5022 	if (retval < 0)
5023 		return retval;
5024 
5025 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5026 			ut_params->op);
5027 
5028 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5029 
5030 	ut_params->obuf = (op_mode == IN_PLACE ?
5031 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5032 
5033 	if (verify) {
5034 		if (ut_params->obuf)
5035 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
5036 					plaintext_len, buffer);
5037 		else
5038 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5039 					plaintext_len, buffer);
5040 
5041 		debug_hexdump(stdout, "plaintext:", plaintext,
5042 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5043 		debug_hexdump(stdout, "plaintext expected:",
5044 			tdata->plaintext.data,
5045 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5046 	} else {
5047 		if (ut_params->obuf)
5048 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
5049 					ciphertext_len, buffer);
5050 		else
5051 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5052 					ciphertext_len, buffer);
5053 
5054 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5055 			ciphertext_len);
5056 		debug_hexdump(stdout, "ciphertext expected:",
5057 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5058 
5059 		if (ut_params->obuf)
5060 			digest = rte_pktmbuf_read(ut_params->obuf,
5061 				(tdata->digest.offset_bytes == 0 ?
5062 				plaintext_pad_len : tdata->digest.offset_bytes),
5063 				tdata->digest.len, digest_buffer);
5064 		else
5065 			digest = rte_pktmbuf_read(ut_params->ibuf,
5066 				(tdata->digest.offset_bytes == 0 ?
5067 				plaintext_pad_len : tdata->digest.offset_bytes),
5068 				tdata->digest.len, digest_buffer);
5069 
5070 		debug_hexdump(stdout, "digest:", digest,
5071 			tdata->digest.len);
5072 		debug_hexdump(stdout, "digest expected:",
5073 			tdata->digest.data, tdata->digest.len);
5074 	}
5075 
5076 	/* Validate obuf */
5077 	if (verify) {
5078 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5079 			plaintext,
5080 			tdata->plaintext.data,
5081 			tdata->plaintext.len >> 3,
5082 			"KASUMI Plaintext data not as expected");
5083 	} else {
5084 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5085 			ciphertext,
5086 			tdata->ciphertext.data,
5087 			tdata->validDataLenInBits.len,
5088 			"KASUMI Ciphertext data not as expected");
5089 
5090 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5091 			digest,
5092 			tdata->digest.data,
5093 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5094 			"KASUMI Generated auth tag not as expected");
5095 	}
5096 	return 0;
5097 }
5098 
5099 static int
5100 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
5101 {
5102 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5103 	struct crypto_unittest_params *ut_params = &unittest_params;
5104 
5105 	int retval;
5106 
5107 	uint8_t *plaintext, *ciphertext;
5108 	unsigned plaintext_pad_len;
5109 	unsigned plaintext_len;
5110 
5111 	/* Create KASUMI session */
5112 	retval = create_wireless_algo_cipher_auth_session(
5113 			ts_params->valid_devs[0],
5114 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5115 			RTE_CRYPTO_AUTH_OP_GENERATE,
5116 			RTE_CRYPTO_AUTH_KASUMI_F9,
5117 			RTE_CRYPTO_CIPHER_KASUMI_F8,
5118 			tdata->key.data, tdata->key.len,
5119 			0, tdata->digest.len,
5120 			tdata->cipher_iv.len);
5121 	if (retval < 0)
5122 		return retval;
5123 
5124 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5125 
5126 	/* clear mbuf payload */
5127 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5128 			rte_pktmbuf_tailroom(ut_params->ibuf));
5129 
5130 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5131 	/* Append data which is padded to a multiple of */
5132 	/* the algorithms block size */
5133 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5134 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5135 				plaintext_pad_len);
5136 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5137 
5138 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5139 
5140 	/* Create KASUMI operation */
5141 	retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
5142 				tdata->digest.len, NULL, 0,
5143 				plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5144 				tdata->cipher_iv.data, tdata->cipher_iv.len,
5145 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
5146 				tdata->validCipherOffsetInBits.len,
5147 				tdata->validAuthLenInBits.len,
5148 				0
5149 				);
5150 	if (retval < 0)
5151 		return retval;
5152 
5153 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5154 			ut_params->op);
5155 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5156 
5157 	if (ut_params->op->sym->m_dst)
5158 		ut_params->obuf = ut_params->op->sym->m_dst;
5159 	else
5160 		ut_params->obuf = ut_params->op->sym->m_src;
5161 
5162 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5163 				tdata->validCipherOffsetInBits.len >> 3);
5164 
5165 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5166 			+ plaintext_pad_len;
5167 
5168 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
5169 				(tdata->validCipherOffsetInBits.len >> 3);
5170 	/* Validate obuf */
5171 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5172 		ciphertext,
5173 		reference_ciphertext,
5174 		tdata->validCipherLenInBits.len,
5175 		"KASUMI Ciphertext data not as expected");
5176 
5177 	/* Validate obuf */
5178 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
5179 		ut_params->digest,
5180 		tdata->digest.data,
5181 		DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
5182 		"KASUMI Generated auth tag not as expected");
5183 	return 0;
5184 }
5185 
5186 static int
5187 test_zuc_encryption(const struct wireless_test_data *tdata)
5188 {
5189 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5190 	struct crypto_unittest_params *ut_params = &unittest_params;
5191 
5192 	int retval;
5193 	uint8_t *plaintext, *ciphertext;
5194 	unsigned plaintext_pad_len;
5195 	unsigned plaintext_len;
5196 
5197 	struct rte_cryptodev_sym_capability_idx cap_idx;
5198 
5199 	/* Check if device supports ZUC EEA3 */
5200 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5201 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5202 
5203 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5204 			&cap_idx) == NULL)
5205 		return -ENOTSUP;
5206 
5207 	/* Create ZUC session */
5208 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5209 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5210 					RTE_CRYPTO_CIPHER_ZUC_EEA3,
5211 					tdata->key.data, tdata->key.len,
5212 					tdata->cipher_iv.len);
5213 	if (retval < 0)
5214 		return retval;
5215 
5216 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5217 
5218 	/* Clear mbuf payload */
5219 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5220 	       rte_pktmbuf_tailroom(ut_params->ibuf));
5221 
5222 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5223 	/* Append data which is padded to a multiple */
5224 	/* of the algorithms block size */
5225 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5226 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5227 				plaintext_pad_len);
5228 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5229 
5230 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5231 
5232 	/* Create ZUC operation */
5233 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5234 					tdata->cipher_iv.len,
5235 					tdata->plaintext.len,
5236 					0);
5237 	if (retval < 0)
5238 		return retval;
5239 
5240 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5241 						ut_params->op);
5242 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5243 
5244 	ut_params->obuf = ut_params->op->sym->m_dst;
5245 	if (ut_params->obuf)
5246 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
5247 	else
5248 		ciphertext = plaintext;
5249 
5250 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5251 
5252 	/* Validate obuf */
5253 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5254 		ciphertext,
5255 		tdata->ciphertext.data,
5256 		tdata->validCipherLenInBits.len,
5257 		"ZUC Ciphertext data not as expected");
5258 	return 0;
5259 }
5260 
5261 static int
5262 test_zuc_encryption_sgl(const struct wireless_test_data *tdata)
5263 {
5264 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5265 	struct crypto_unittest_params *ut_params = &unittest_params;
5266 
5267 	int retval;
5268 
5269 	unsigned int plaintext_pad_len;
5270 	unsigned int plaintext_len;
5271 	const uint8_t *ciphertext;
5272 	uint8_t ciphertext_buffer[2048];
5273 	struct rte_cryptodev_info dev_info;
5274 
5275 	struct rte_cryptodev_sym_capability_idx cap_idx;
5276 
5277 	/* Check if device supports ZUC EEA3 */
5278 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5279 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5280 
5281 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5282 			&cap_idx) == NULL)
5283 		return -ENOTSUP;
5284 
5285 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5286 
5287 	uint64_t feat_flags = dev_info.feature_flags;
5288 
5289 	if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5290 		printf("Device doesn't support in-place scatter-gather. "
5291 				"Test Skipped.\n");
5292 		return -ENOTSUP;
5293 	}
5294 
5295 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5296 
5297 	/* Append data which is padded to a multiple */
5298 	/* of the algorithms block size */
5299 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5300 
5301 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5302 			plaintext_pad_len, 10, 0);
5303 
5304 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5305 			tdata->plaintext.data);
5306 
5307 	/* Create ZUC session */
5308 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5309 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5310 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5311 			tdata->key.data, tdata->key.len,
5312 			tdata->cipher_iv.len);
5313 	if (retval < 0)
5314 		return retval;
5315 
5316 	/* Clear mbuf payload */
5317 
5318 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
5319 
5320 	/* Create ZUC operation */
5321 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5322 			tdata->cipher_iv.len, tdata->plaintext.len,
5323 			0);
5324 	if (retval < 0)
5325 		return retval;
5326 
5327 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5328 						ut_params->op);
5329 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5330 
5331 	ut_params->obuf = ut_params->op->sym->m_dst;
5332 	if (ut_params->obuf)
5333 		ciphertext = rte_pktmbuf_read(ut_params->obuf,
5334 			0, plaintext_len, ciphertext_buffer);
5335 	else
5336 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
5337 			0, plaintext_len, ciphertext_buffer);
5338 
5339 	/* Validate obuf */
5340 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5341 
5342 	/* Validate obuf */
5343 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5344 		ciphertext,
5345 		tdata->ciphertext.data,
5346 		tdata->validCipherLenInBits.len,
5347 		"ZUC Ciphertext data not as expected");
5348 
5349 	return 0;
5350 }
5351 
5352 static int
5353 test_zuc_authentication(const struct wireless_test_data *tdata)
5354 {
5355 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5356 	struct crypto_unittest_params *ut_params = &unittest_params;
5357 
5358 	int retval;
5359 	unsigned plaintext_pad_len;
5360 	unsigned plaintext_len;
5361 	uint8_t *plaintext;
5362 
5363 	struct rte_cryptodev_sym_capability_idx cap_idx;
5364 
5365 	/* Check if device supports ZUC EIA3 */
5366 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5367 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5368 
5369 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5370 			&cap_idx) == NULL)
5371 		return -ENOTSUP;
5372 
5373 	/* Create ZUC session */
5374 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
5375 			tdata->key.data, tdata->key.len,
5376 			tdata->auth_iv.len, tdata->digest.len,
5377 			RTE_CRYPTO_AUTH_OP_GENERATE,
5378 			RTE_CRYPTO_AUTH_ZUC_EIA3);
5379 	if (retval < 0)
5380 		return retval;
5381 
5382 	/* alloc mbuf and set payload */
5383 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5384 
5385 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5386 	rte_pktmbuf_tailroom(ut_params->ibuf));
5387 
5388 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5389 	/* Append data which is padded to a multiple of */
5390 	/* the algorithms block size */
5391 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5392 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5393 				plaintext_pad_len);
5394 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5395 
5396 	/* Create ZUC operation */
5397 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
5398 			tdata->auth_iv.data, tdata->auth_iv.len,
5399 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5400 			tdata->validAuthLenInBits.len,
5401 			0);
5402 	if (retval < 0)
5403 		return retval;
5404 
5405 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5406 				ut_params->op);
5407 	ut_params->obuf = ut_params->op->sym->m_src;
5408 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5409 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5410 			+ plaintext_pad_len;
5411 
5412 	/* Validate obuf */
5413 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
5414 	ut_params->digest,
5415 	tdata->digest.data,
5416 	DIGEST_BYTE_LENGTH_KASUMI_F9,
5417 	"ZUC Generated auth tag not as expected");
5418 
5419 	return 0;
5420 }
5421 
5422 static int
5423 test_zuc_auth_cipher(const struct wireless_test_data *tdata,
5424 	uint8_t op_mode, uint8_t verify)
5425 {
5426 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5427 	struct crypto_unittest_params *ut_params = &unittest_params;
5428 
5429 	int retval;
5430 
5431 	uint8_t *plaintext = NULL, *ciphertext = NULL;
5432 	unsigned int plaintext_pad_len;
5433 	unsigned int plaintext_len;
5434 	unsigned int ciphertext_pad_len;
5435 	unsigned int ciphertext_len;
5436 
5437 	struct rte_cryptodev_info dev_info;
5438 	struct rte_cryptodev_sym_capability_idx cap_idx;
5439 
5440 	/* Check if device supports ZUC EIA3 */
5441 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5442 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5443 
5444 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5445 			&cap_idx) == NULL)
5446 		return -ENOTSUP;
5447 
5448 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5449 
5450 	uint64_t feat_flags = dev_info.feature_flags;
5451 
5452 	if (op_mode == OUT_OF_PLACE) {
5453 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5454 			printf("Device doesn't support digest encrypted.\n");
5455 			return -ENOTSUP;
5456 		}
5457 	}
5458 
5459 	/* Create ZUC session */
5460 	retval = create_wireless_algo_auth_cipher_session(
5461 			ts_params->valid_devs[0],
5462 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5463 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5464 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5465 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5466 			RTE_CRYPTO_AUTH_ZUC_EIA3,
5467 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5468 			tdata->key.data, tdata->key.len,
5469 			tdata->auth_iv.len, tdata->digest.len,
5470 			tdata->cipher_iv.len);
5471 
5472 	if (retval < 0)
5473 		return retval;
5474 
5475 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5476 	if (op_mode == OUT_OF_PLACE)
5477 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5478 
5479 	/* clear mbuf payload */
5480 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5481 		rte_pktmbuf_tailroom(ut_params->ibuf));
5482 	if (op_mode == OUT_OF_PLACE)
5483 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5484 			rte_pktmbuf_tailroom(ut_params->obuf));
5485 
5486 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5487 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5488 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5489 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5490 
5491 	if (verify) {
5492 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5493 					ciphertext_pad_len);
5494 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
5495 		if (op_mode == OUT_OF_PLACE)
5496 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
5497 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5498 			ciphertext_len);
5499 	} else {
5500 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5501 					plaintext_pad_len);
5502 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5503 		if (op_mode == OUT_OF_PLACE)
5504 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
5505 		debug_hexdump(stdout, "plaintext:", plaintext,
5506 			plaintext_len);
5507 	}
5508 
5509 	/* Create ZUC operation */
5510 	retval = create_wireless_algo_auth_cipher_operation(
5511 		tdata->digest.len,
5512 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5513 		tdata->auth_iv.data, tdata->auth_iv.len,
5514 		(tdata->digest.offset_bytes == 0 ?
5515 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5516 			: tdata->digest.offset_bytes),
5517 		tdata->validCipherLenInBits.len,
5518 		tdata->validCipherOffsetInBits.len,
5519 		tdata->validAuthLenInBits.len,
5520 		0,
5521 		op_mode, 0);
5522 
5523 	if (retval < 0)
5524 		return retval;
5525 
5526 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5527 			ut_params->op);
5528 
5529 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5530 
5531 	ut_params->obuf = (op_mode == IN_PLACE ?
5532 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5533 
5534 
5535 	if (verify) {
5536 		if (ut_params->obuf)
5537 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
5538 							uint8_t *);
5539 		else
5540 			plaintext = ciphertext;
5541 
5542 		debug_hexdump(stdout, "plaintext:", plaintext,
5543 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5544 		debug_hexdump(stdout, "plaintext expected:",
5545 			tdata->plaintext.data,
5546 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5547 	} else {
5548 		if (ut_params->obuf)
5549 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
5550 							uint8_t *);
5551 		else
5552 			ciphertext = plaintext;
5553 
5554 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5555 			ciphertext_len);
5556 		debug_hexdump(stdout, "ciphertext expected:",
5557 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5558 
5559 		ut_params->digest = rte_pktmbuf_mtod(
5560 			ut_params->obuf, uint8_t *) +
5561 			(tdata->digest.offset_bytes == 0 ?
5562 			plaintext_pad_len : tdata->digest.offset_bytes);
5563 
5564 		debug_hexdump(stdout, "digest:", ut_params->digest,
5565 			tdata->digest.len);
5566 		debug_hexdump(stdout, "digest expected:",
5567 			tdata->digest.data, tdata->digest.len);
5568 	}
5569 
5570 	/* Validate obuf */
5571 	if (verify) {
5572 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5573 			plaintext,
5574 			tdata->plaintext.data,
5575 			tdata->plaintext.len >> 3,
5576 			"ZUC Plaintext data not as expected");
5577 	} else {
5578 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5579 			ciphertext,
5580 			tdata->ciphertext.data,
5581 			tdata->ciphertext.len >> 3,
5582 			"ZUC Ciphertext data not as expected");
5583 
5584 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5585 			ut_params->digest,
5586 			tdata->digest.data,
5587 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5588 			"ZUC Generated auth tag not as expected");
5589 	}
5590 	return 0;
5591 }
5592 
5593 static int
5594 test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata,
5595 	uint8_t op_mode, uint8_t verify)
5596 {
5597 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5598 	struct crypto_unittest_params *ut_params = &unittest_params;
5599 
5600 	int retval;
5601 
5602 	const uint8_t *plaintext = NULL;
5603 	const uint8_t *ciphertext = NULL;
5604 	const uint8_t *digest = NULL;
5605 	unsigned int plaintext_pad_len;
5606 	unsigned int plaintext_len;
5607 	unsigned int ciphertext_pad_len;
5608 	unsigned int ciphertext_len;
5609 	uint8_t buffer[10000];
5610 	uint8_t digest_buffer[10000];
5611 
5612 	struct rte_cryptodev_info dev_info;
5613 	struct rte_cryptodev_sym_capability_idx cap_idx;
5614 
5615 	/* Check if device supports ZUC EIA3 */
5616 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5617 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5618 
5619 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5620 			&cap_idx) == NULL)
5621 		return -ENOTSUP;
5622 
5623 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5624 
5625 	uint64_t feat_flags = dev_info.feature_flags;
5626 
5627 	if (op_mode == IN_PLACE) {
5628 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5629 			printf("Device doesn't support in-place scatter-gather "
5630 					"in both input and output mbufs.\n");
5631 			return -ENOTSUP;
5632 		}
5633 	} else {
5634 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5635 			printf("Device doesn't support out-of-place scatter-gather "
5636 					"in both input and output mbufs.\n");
5637 			return -ENOTSUP;
5638 		}
5639 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5640 			printf("Device doesn't support digest encrypted.\n");
5641 			return -ENOTSUP;
5642 		}
5643 	}
5644 
5645 	/* Create ZUC session */
5646 	retval = create_wireless_algo_auth_cipher_session(
5647 			ts_params->valid_devs[0],
5648 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5649 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5650 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5651 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5652 			RTE_CRYPTO_AUTH_ZUC_EIA3,
5653 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5654 			tdata->key.data, tdata->key.len,
5655 			tdata->auth_iv.len, tdata->digest.len,
5656 			tdata->cipher_iv.len);
5657 
5658 	if (retval < 0)
5659 		return retval;
5660 
5661 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5662 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5663 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5664 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5665 
5666 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5667 			plaintext_pad_len, 15, 0);
5668 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5669 			"Failed to allocate input buffer in mempool");
5670 
5671 	if (op_mode == OUT_OF_PLACE) {
5672 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
5673 				plaintext_pad_len, 15, 0);
5674 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
5675 				"Failed to allocate output buffer in mempool");
5676 	}
5677 
5678 	if (verify) {
5679 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
5680 			tdata->ciphertext.data);
5681 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5682 					ciphertext_len, buffer);
5683 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5684 			ciphertext_len);
5685 	} else {
5686 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5687 			tdata->plaintext.data);
5688 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5689 					plaintext_len, buffer);
5690 		debug_hexdump(stdout, "plaintext:", plaintext,
5691 			plaintext_len);
5692 	}
5693 	memset(buffer, 0, sizeof(buffer));
5694 
5695 	/* Create ZUC operation */
5696 	retval = create_wireless_algo_auth_cipher_operation(
5697 		tdata->digest.len,
5698 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5699 		NULL, 0,
5700 		(tdata->digest.offset_bytes == 0 ?
5701 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5702 			: tdata->digest.offset_bytes),
5703 		tdata->validCipherLenInBits.len,
5704 		tdata->validCipherOffsetInBits.len,
5705 		tdata->validAuthLenInBits.len,
5706 		0,
5707 		op_mode, 1);
5708 
5709 	if (retval < 0)
5710 		return retval;
5711 
5712 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5713 			ut_params->op);
5714 
5715 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5716 
5717 	ut_params->obuf = (op_mode == IN_PLACE ?
5718 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5719 
5720 	if (verify) {
5721 		if (ut_params->obuf)
5722 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
5723 					plaintext_len, buffer);
5724 		else
5725 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5726 					plaintext_len, buffer);
5727 
5728 		debug_hexdump(stdout, "plaintext:", plaintext,
5729 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5730 		debug_hexdump(stdout, "plaintext expected:",
5731 			tdata->plaintext.data,
5732 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5733 	} else {
5734 		if (ut_params->obuf)
5735 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
5736 					ciphertext_len, buffer);
5737 		else
5738 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5739 					ciphertext_len, buffer);
5740 
5741 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5742 			ciphertext_len);
5743 		debug_hexdump(stdout, "ciphertext expected:",
5744 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5745 
5746 		if (ut_params->obuf)
5747 			digest = rte_pktmbuf_read(ut_params->obuf,
5748 				(tdata->digest.offset_bytes == 0 ?
5749 				plaintext_pad_len : tdata->digest.offset_bytes),
5750 				tdata->digest.len, digest_buffer);
5751 		else
5752 			digest = rte_pktmbuf_read(ut_params->ibuf,
5753 				(tdata->digest.offset_bytes == 0 ?
5754 				plaintext_pad_len : tdata->digest.offset_bytes),
5755 				tdata->digest.len, digest_buffer);
5756 
5757 		debug_hexdump(stdout, "digest:", digest,
5758 			tdata->digest.len);
5759 		debug_hexdump(stdout, "digest expected:",
5760 			tdata->digest.data, tdata->digest.len);
5761 	}
5762 
5763 	/* Validate obuf */
5764 	if (verify) {
5765 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5766 			plaintext,
5767 			tdata->plaintext.data,
5768 			tdata->plaintext.len >> 3,
5769 			"ZUC Plaintext data not as expected");
5770 	} else {
5771 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5772 			ciphertext,
5773 			tdata->ciphertext.data,
5774 			tdata->validDataLenInBits.len,
5775 			"ZUC Ciphertext data not as expected");
5776 
5777 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5778 			digest,
5779 			tdata->digest.data,
5780 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5781 			"ZUC Generated auth tag not as expected");
5782 	}
5783 	return 0;
5784 }
5785 
5786 static int
5787 test_kasumi_encryption_test_case_1(void)
5788 {
5789 	return test_kasumi_encryption(&kasumi_test_case_1);
5790 }
5791 
5792 static int
5793 test_kasumi_encryption_test_case_1_sgl(void)
5794 {
5795 	return test_kasumi_encryption_sgl(&kasumi_test_case_1);
5796 }
5797 
5798 static int
5799 test_kasumi_encryption_test_case_1_oop(void)
5800 {
5801 	return test_kasumi_encryption_oop(&kasumi_test_case_1);
5802 }
5803 
5804 static int
5805 test_kasumi_encryption_test_case_1_oop_sgl(void)
5806 {
5807 	return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
5808 }
5809 
5810 static int
5811 test_kasumi_encryption_test_case_2(void)
5812 {
5813 	return test_kasumi_encryption(&kasumi_test_case_2);
5814 }
5815 
5816 static int
5817 test_kasumi_encryption_test_case_3(void)
5818 {
5819 	return test_kasumi_encryption(&kasumi_test_case_3);
5820 }
5821 
5822 static int
5823 test_kasumi_encryption_test_case_4(void)
5824 {
5825 	return test_kasumi_encryption(&kasumi_test_case_4);
5826 }
5827 
5828 static int
5829 test_kasumi_encryption_test_case_5(void)
5830 {
5831 	return test_kasumi_encryption(&kasumi_test_case_5);
5832 }
5833 
5834 static int
5835 test_kasumi_decryption_test_case_1(void)
5836 {
5837 	return test_kasumi_decryption(&kasumi_test_case_1);
5838 }
5839 
5840 static int
5841 test_kasumi_decryption_test_case_1_oop(void)
5842 {
5843 	return test_kasumi_decryption_oop(&kasumi_test_case_1);
5844 }
5845 
5846 static int
5847 test_kasumi_decryption_test_case_2(void)
5848 {
5849 	return test_kasumi_decryption(&kasumi_test_case_2);
5850 }
5851 
5852 static int
5853 test_kasumi_decryption_test_case_3(void)
5854 {
5855 	return test_kasumi_decryption(&kasumi_test_case_3);
5856 }
5857 
5858 static int
5859 test_kasumi_decryption_test_case_4(void)
5860 {
5861 	return test_kasumi_decryption(&kasumi_test_case_4);
5862 }
5863 
5864 static int
5865 test_kasumi_decryption_test_case_5(void)
5866 {
5867 	return test_kasumi_decryption(&kasumi_test_case_5);
5868 }
5869 static int
5870 test_snow3g_encryption_test_case_1(void)
5871 {
5872 	return test_snow3g_encryption(&snow3g_test_case_1);
5873 }
5874 
5875 static int
5876 test_snow3g_encryption_test_case_1_oop(void)
5877 {
5878 	return test_snow3g_encryption_oop(&snow3g_test_case_1);
5879 }
5880 
5881 static int
5882 test_snow3g_encryption_test_case_1_oop_sgl(void)
5883 {
5884 	return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
5885 }
5886 
5887 
5888 static int
5889 test_snow3g_encryption_test_case_1_offset_oop(void)
5890 {
5891 	return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
5892 }
5893 
5894 static int
5895 test_snow3g_encryption_test_case_2(void)
5896 {
5897 	return test_snow3g_encryption(&snow3g_test_case_2);
5898 }
5899 
5900 static int
5901 test_snow3g_encryption_test_case_3(void)
5902 {
5903 	return test_snow3g_encryption(&snow3g_test_case_3);
5904 }
5905 
5906 static int
5907 test_snow3g_encryption_test_case_4(void)
5908 {
5909 	return test_snow3g_encryption(&snow3g_test_case_4);
5910 }
5911 
5912 static int
5913 test_snow3g_encryption_test_case_5(void)
5914 {
5915 	return test_snow3g_encryption(&snow3g_test_case_5);
5916 }
5917 
5918 static int
5919 test_snow3g_decryption_test_case_1(void)
5920 {
5921 	return test_snow3g_decryption(&snow3g_test_case_1);
5922 }
5923 
5924 static int
5925 test_snow3g_decryption_test_case_1_oop(void)
5926 {
5927 	return test_snow3g_decryption_oop(&snow3g_test_case_1);
5928 }
5929 
5930 static int
5931 test_snow3g_decryption_test_case_2(void)
5932 {
5933 	return test_snow3g_decryption(&snow3g_test_case_2);
5934 }
5935 
5936 static int
5937 test_snow3g_decryption_test_case_3(void)
5938 {
5939 	return test_snow3g_decryption(&snow3g_test_case_3);
5940 }
5941 
5942 static int
5943 test_snow3g_decryption_test_case_4(void)
5944 {
5945 	return test_snow3g_decryption(&snow3g_test_case_4);
5946 }
5947 
5948 static int
5949 test_snow3g_decryption_test_case_5(void)
5950 {
5951 	return test_snow3g_decryption(&snow3g_test_case_5);
5952 }
5953 
5954 /*
5955  * Function prepares snow3g_hash_test_data from snow3g_test_data.
5956  * Pattern digest from snow3g_test_data must be allocated as
5957  * 4 last bytes in plaintext.
5958  */
5959 static void
5960 snow3g_hash_test_vector_setup(const struct snow3g_test_data *pattern,
5961 		struct snow3g_hash_test_data *output)
5962 {
5963 	if ((pattern != NULL) && (output != NULL)) {
5964 		output->key.len = pattern->key.len;
5965 
5966 		memcpy(output->key.data,
5967 		pattern->key.data, pattern->key.len);
5968 
5969 		output->auth_iv.len = pattern->auth_iv.len;
5970 
5971 		memcpy(output->auth_iv.data,
5972 		pattern->auth_iv.data, pattern->auth_iv.len);
5973 
5974 		output->plaintext.len = pattern->plaintext.len;
5975 
5976 		memcpy(output->plaintext.data,
5977 		pattern->plaintext.data, pattern->plaintext.len >> 3);
5978 
5979 		output->digest.len = pattern->digest.len;
5980 
5981 		memcpy(output->digest.data,
5982 		&pattern->plaintext.data[pattern->digest.offset_bytes],
5983 		pattern->digest.len);
5984 
5985 		output->validAuthLenInBits.len =
5986 		pattern->validAuthLenInBits.len;
5987 	}
5988 }
5989 
5990 /*
5991  * Test case verify computed cipher and digest from snow3g_test_case_7 data.
5992  */
5993 static int
5994 test_snow3g_decryption_with_digest_test_case_1(void)
5995 {
5996 	struct snow3g_hash_test_data snow3g_hash_data;
5997 
5998 	/*
5999 	 * Function prepare data for hash veryfication test case.
6000 	 * Digest is allocated in 4 last bytes in plaintext, pattern.
6001 	 */
6002 	snow3g_hash_test_vector_setup(&snow3g_test_case_7, &snow3g_hash_data);
6003 
6004 	return test_snow3g_decryption(&snow3g_test_case_7) &
6005 			test_snow3g_authentication_verify(&snow3g_hash_data);
6006 }
6007 
6008 static int
6009 test_snow3g_cipher_auth_test_case_1(void)
6010 {
6011 	return test_snow3g_cipher_auth(&snow3g_test_case_3);
6012 }
6013 
6014 static int
6015 test_snow3g_auth_cipher_test_case_1(void)
6016 {
6017 	return test_snow3g_auth_cipher(
6018 		&snow3g_auth_cipher_test_case_1, IN_PLACE, 0);
6019 }
6020 
6021 static int
6022 test_snow3g_auth_cipher_test_case_2(void)
6023 {
6024 	return test_snow3g_auth_cipher(
6025 		&snow3g_auth_cipher_test_case_2, IN_PLACE, 0);
6026 }
6027 
6028 static int
6029 test_snow3g_auth_cipher_test_case_2_oop(void)
6030 {
6031 	return test_snow3g_auth_cipher(
6032 		&snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6033 }
6034 
6035 static int
6036 test_snow3g_auth_cipher_part_digest_enc(void)
6037 {
6038 	return test_snow3g_auth_cipher(
6039 		&snow3g_auth_cipher_partial_digest_encryption,
6040 			IN_PLACE, 0);
6041 }
6042 
6043 static int
6044 test_snow3g_auth_cipher_part_digest_enc_oop(void)
6045 {
6046 	return test_snow3g_auth_cipher(
6047 		&snow3g_auth_cipher_partial_digest_encryption,
6048 			OUT_OF_PLACE, 0);
6049 }
6050 
6051 static int
6052 test_snow3g_auth_cipher_test_case_3_sgl(void)
6053 {
6054 	return test_snow3g_auth_cipher_sgl(
6055 		&snow3g_auth_cipher_test_case_3, IN_PLACE, 0);
6056 }
6057 
6058 static int
6059 test_snow3g_auth_cipher_test_case_3_oop_sgl(void)
6060 {
6061 	return test_snow3g_auth_cipher_sgl(
6062 		&snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 0);
6063 }
6064 
6065 static int
6066 test_snow3g_auth_cipher_part_digest_enc_sgl(void)
6067 {
6068 	return test_snow3g_auth_cipher_sgl(
6069 		&snow3g_auth_cipher_partial_digest_encryption,
6070 			IN_PLACE, 0);
6071 }
6072 
6073 static int
6074 test_snow3g_auth_cipher_part_digest_enc_oop_sgl(void)
6075 {
6076 	return test_snow3g_auth_cipher_sgl(
6077 		&snow3g_auth_cipher_partial_digest_encryption,
6078 			OUT_OF_PLACE, 0);
6079 }
6080 
6081 static int
6082 test_snow3g_auth_cipher_verify_test_case_1(void)
6083 {
6084 	return test_snow3g_auth_cipher(
6085 		&snow3g_auth_cipher_test_case_1, IN_PLACE, 1);
6086 }
6087 
6088 static int
6089 test_snow3g_auth_cipher_verify_test_case_2(void)
6090 {
6091 	return test_snow3g_auth_cipher(
6092 		&snow3g_auth_cipher_test_case_2, IN_PLACE, 1);
6093 }
6094 
6095 static int
6096 test_snow3g_auth_cipher_verify_test_case_2_oop(void)
6097 {
6098 	return test_snow3g_auth_cipher(
6099 		&snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6100 }
6101 
6102 static int
6103 test_snow3g_auth_cipher_verify_part_digest_enc(void)
6104 {
6105 	return test_snow3g_auth_cipher(
6106 		&snow3g_auth_cipher_partial_digest_encryption,
6107 			IN_PLACE, 1);
6108 }
6109 
6110 static int
6111 test_snow3g_auth_cipher_verify_part_digest_enc_oop(void)
6112 {
6113 	return test_snow3g_auth_cipher(
6114 		&snow3g_auth_cipher_partial_digest_encryption,
6115 			OUT_OF_PLACE, 1);
6116 }
6117 
6118 static int
6119 test_snow3g_auth_cipher_verify_test_case_3_sgl(void)
6120 {
6121 	return test_snow3g_auth_cipher_sgl(
6122 		&snow3g_auth_cipher_test_case_3, IN_PLACE, 1);
6123 }
6124 
6125 static int
6126 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl(void)
6127 {
6128 	return test_snow3g_auth_cipher_sgl(
6129 		&snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 1);
6130 }
6131 
6132 static int
6133 test_snow3g_auth_cipher_verify_part_digest_enc_sgl(void)
6134 {
6135 	return test_snow3g_auth_cipher_sgl(
6136 		&snow3g_auth_cipher_partial_digest_encryption,
6137 			IN_PLACE, 1);
6138 }
6139 
6140 static int
6141 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl(void)
6142 {
6143 	return test_snow3g_auth_cipher_sgl(
6144 		&snow3g_auth_cipher_partial_digest_encryption,
6145 			OUT_OF_PLACE, 1);
6146 }
6147 
6148 static int
6149 test_snow3g_auth_cipher_with_digest_test_case_1(void)
6150 {
6151 	return test_snow3g_auth_cipher(
6152 		&snow3g_test_case_7, IN_PLACE, 0);
6153 }
6154 
6155 static int
6156 test_kasumi_auth_cipher_test_case_1(void)
6157 {
6158 	return test_kasumi_auth_cipher(
6159 		&kasumi_test_case_3, IN_PLACE, 0);
6160 }
6161 
6162 static int
6163 test_kasumi_auth_cipher_test_case_2(void)
6164 {
6165 	return test_kasumi_auth_cipher(
6166 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6167 }
6168 
6169 static int
6170 test_kasumi_auth_cipher_test_case_2_oop(void)
6171 {
6172 	return test_kasumi_auth_cipher(
6173 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6174 }
6175 
6176 static int
6177 test_kasumi_auth_cipher_test_case_2_sgl(void)
6178 {
6179 	return test_kasumi_auth_cipher_sgl(
6180 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6181 }
6182 
6183 static int
6184 test_kasumi_auth_cipher_test_case_2_oop_sgl(void)
6185 {
6186 	return test_kasumi_auth_cipher_sgl(
6187 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6188 }
6189 
6190 static int
6191 test_kasumi_auth_cipher_verify_test_case_1(void)
6192 {
6193 	return test_kasumi_auth_cipher(
6194 		&kasumi_test_case_3, IN_PLACE, 1);
6195 }
6196 
6197 static int
6198 test_kasumi_auth_cipher_verify_test_case_2(void)
6199 {
6200 	return test_kasumi_auth_cipher(
6201 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6202 }
6203 
6204 static int
6205 test_kasumi_auth_cipher_verify_test_case_2_oop(void)
6206 {
6207 	return test_kasumi_auth_cipher(
6208 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6209 }
6210 
6211 static int
6212 test_kasumi_auth_cipher_verify_test_case_2_sgl(void)
6213 {
6214 	return test_kasumi_auth_cipher_sgl(
6215 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6216 }
6217 
6218 static int
6219 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl(void)
6220 {
6221 	return test_kasumi_auth_cipher_sgl(
6222 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6223 }
6224 
6225 static int
6226 test_kasumi_cipher_auth_test_case_1(void)
6227 {
6228 	return test_kasumi_cipher_auth(&kasumi_test_case_6);
6229 }
6230 
6231 static int
6232 test_zuc_encryption_test_case_1(void)
6233 {
6234 	return test_zuc_encryption(&zuc_test_case_cipher_193b);
6235 }
6236 
6237 static int
6238 test_zuc_encryption_test_case_2(void)
6239 {
6240 	return test_zuc_encryption(&zuc_test_case_cipher_800b);
6241 }
6242 
6243 static int
6244 test_zuc_encryption_test_case_3(void)
6245 {
6246 	return test_zuc_encryption(&zuc_test_case_cipher_1570b);
6247 }
6248 
6249 static int
6250 test_zuc_encryption_test_case_4(void)
6251 {
6252 	return test_zuc_encryption(&zuc_test_case_cipher_2798b);
6253 }
6254 
6255 static int
6256 test_zuc_encryption_test_case_5(void)
6257 {
6258 	return test_zuc_encryption(&zuc_test_case_cipher_4019b);
6259 }
6260 
6261 static int
6262 test_zuc_encryption_test_case_6_sgl(void)
6263 {
6264 	return test_zuc_encryption_sgl(&zuc_test_case_cipher_193b);
6265 }
6266 
6267 static int
6268 test_zuc_hash_generate_test_case_1(void)
6269 {
6270 	return test_zuc_authentication(&zuc_test_case_auth_1b);
6271 }
6272 
6273 static int
6274 test_zuc_hash_generate_test_case_2(void)
6275 {
6276 	return test_zuc_authentication(&zuc_test_case_auth_90b);
6277 }
6278 
6279 static int
6280 test_zuc_hash_generate_test_case_3(void)
6281 {
6282 	return test_zuc_authentication(&zuc_test_case_auth_577b);
6283 }
6284 
6285 static int
6286 test_zuc_hash_generate_test_case_4(void)
6287 {
6288 	return test_zuc_authentication(&zuc_test_case_auth_2079b);
6289 }
6290 
6291 static int
6292 test_zuc_hash_generate_test_case_5(void)
6293 {
6294 	return test_zuc_authentication(&zuc_test_auth_5670b);
6295 }
6296 
6297 static int
6298 test_zuc_hash_generate_test_case_6(void)
6299 {
6300 	return test_zuc_authentication(&zuc_test_case_auth_128b);
6301 }
6302 
6303 static int
6304 test_zuc_hash_generate_test_case_7(void)
6305 {
6306 	return test_zuc_authentication(&zuc_test_case_auth_2080b);
6307 }
6308 
6309 static int
6310 test_zuc_hash_generate_test_case_8(void)
6311 {
6312 	return test_zuc_authentication(&zuc_test_case_auth_584b);
6313 }
6314 
6315 static int
6316 test_zuc_cipher_auth_test_case_1(void)
6317 {
6318 	return test_zuc_cipher_auth(&zuc_test_case_cipher_200b_auth_200b);
6319 }
6320 
6321 static int
6322 test_zuc_cipher_auth_test_case_2(void)
6323 {
6324 	return test_zuc_cipher_auth(&zuc_test_case_cipher_800b_auth_120b);
6325 }
6326 
6327 static int
6328 test_zuc_auth_cipher_test_case_1(void)
6329 {
6330 	return test_zuc_auth_cipher(
6331 		&zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6332 }
6333 
6334 static int
6335 test_zuc_auth_cipher_test_case_1_oop(void)
6336 {
6337 	return test_zuc_auth_cipher(
6338 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6339 }
6340 
6341 static int
6342 test_zuc_auth_cipher_test_case_1_sgl(void)
6343 {
6344 	return test_zuc_auth_cipher_sgl(
6345 		&zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6346 }
6347 
6348 static int
6349 test_zuc_auth_cipher_test_case_1_oop_sgl(void)
6350 {
6351 	return test_zuc_auth_cipher_sgl(
6352 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6353 }
6354 
6355 static int
6356 test_zuc_auth_cipher_verify_test_case_1(void)
6357 {
6358 	return test_zuc_auth_cipher(
6359 		&zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6360 }
6361 
6362 static int
6363 test_zuc_auth_cipher_verify_test_case_1_oop(void)
6364 {
6365 	return test_zuc_auth_cipher(
6366 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6367 }
6368 
6369 static int
6370 test_zuc_auth_cipher_verify_test_case_1_sgl(void)
6371 {
6372 	return test_zuc_auth_cipher_sgl(
6373 		&zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6374 }
6375 
6376 static int
6377 test_zuc_auth_cipher_verify_test_case_1_oop_sgl(void)
6378 {
6379 	return test_zuc_auth_cipher_sgl(
6380 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6381 }
6382 
6383 static int
6384 test_3DES_chain_qat_all(void)
6385 {
6386 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6387 	int status;
6388 
6389 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6390 		ts_params->op_mpool,
6391 		ts_params->session_mpool, ts_params->session_priv_mpool,
6392 		ts_params->valid_devs[0],
6393 		rte_cryptodev_driver_id_get(
6394 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
6395 		BLKCIPHER_3DES_CHAIN_TYPE);
6396 
6397 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6398 
6399 	return TEST_SUCCESS;
6400 }
6401 
6402 static int
6403 test_DES_cipheronly_qat_all(void)
6404 {
6405 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6406 	int status;
6407 
6408 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6409 		ts_params->op_mpool,
6410 		ts_params->session_mpool, ts_params->session_priv_mpool,
6411 		ts_params->valid_devs[0],
6412 		rte_cryptodev_driver_id_get(
6413 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
6414 		BLKCIPHER_DES_CIPHERONLY_TYPE);
6415 
6416 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6417 
6418 	return TEST_SUCCESS;
6419 }
6420 
6421 static int
6422 test_DES_cipheronly_openssl_all(void)
6423 {
6424 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6425 	int status;
6426 
6427 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6428 		ts_params->op_mpool,
6429 		ts_params->session_mpool, ts_params->session_priv_mpool,
6430 		ts_params->valid_devs[0],
6431 		rte_cryptodev_driver_id_get(
6432 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
6433 		BLKCIPHER_DES_CIPHERONLY_TYPE);
6434 
6435 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6436 
6437 	return TEST_SUCCESS;
6438 }
6439 
6440 static int
6441 test_DES_docsis_openssl_all(void)
6442 {
6443 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6444 	int status;
6445 
6446 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6447 		ts_params->op_mpool,
6448 		ts_params->session_mpool, ts_params->session_priv_mpool,
6449 		ts_params->valid_devs[0],
6450 		rte_cryptodev_driver_id_get(
6451 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
6452 		BLKCIPHER_DES_DOCSIS_TYPE);
6453 
6454 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6455 
6456 	return TEST_SUCCESS;
6457 }
6458 
6459 static int
6460 test_DES_cipheronly_mb_all(void)
6461 {
6462 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6463 	int status;
6464 
6465 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6466 		ts_params->op_mpool,
6467 		ts_params->session_mpool, ts_params->session_priv_mpool,
6468 		ts_params->valid_devs[0],
6469 		rte_cryptodev_driver_id_get(
6470 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
6471 		BLKCIPHER_DES_CIPHERONLY_TYPE);
6472 
6473 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6474 
6475 	return TEST_SUCCESS;
6476 }
6477 static int
6478 test_3DES_cipheronly_mb_all(void)
6479 {
6480 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6481 	int status;
6482 
6483 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6484 		ts_params->op_mpool,
6485 		ts_params->session_mpool, ts_params->session_priv_mpool,
6486 		ts_params->valid_devs[0],
6487 		rte_cryptodev_driver_id_get(
6488 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
6489 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6490 
6491 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6492 
6493 	return TEST_SUCCESS;
6494 }
6495 
6496 static int
6497 test_DES_docsis_mb_all(void)
6498 {
6499 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6500 	int status;
6501 
6502 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6503 		ts_params->op_mpool,
6504 		ts_params->session_mpool, ts_params->session_priv_mpool,
6505 		ts_params->valid_devs[0],
6506 		rte_cryptodev_driver_id_get(
6507 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
6508 		BLKCIPHER_DES_DOCSIS_TYPE);
6509 
6510 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6511 
6512 	return TEST_SUCCESS;
6513 }
6514 
6515 static int
6516 test_3DES_chain_caam_jr_all(void)
6517 {
6518 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6519 	int status;
6520 
6521 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6522 		ts_params->op_mpool,
6523 		ts_params->session_mpool, ts_params->session_priv_mpool,
6524 		ts_params->valid_devs[0],
6525 		rte_cryptodev_driver_id_get(
6526 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
6527 		BLKCIPHER_3DES_CHAIN_TYPE);
6528 
6529 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6530 
6531 	return TEST_SUCCESS;
6532 }
6533 
6534 static int
6535 test_3DES_cipheronly_caam_jr_all(void)
6536 {
6537 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6538 	int status;
6539 
6540 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6541 		ts_params->op_mpool,
6542 		ts_params->session_mpool, ts_params->session_priv_mpool,
6543 		ts_params->valid_devs[0],
6544 		rte_cryptodev_driver_id_get(
6545 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
6546 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6547 
6548 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6549 
6550 	return TEST_SUCCESS;
6551 }
6552 
6553 static int
6554 test_3DES_chain_dpaa_sec_all(void)
6555 {
6556 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6557 	int status;
6558 
6559 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6560 		ts_params->op_mpool,
6561 		ts_params->session_mpool, ts_params->session_priv_mpool,
6562 		ts_params->valid_devs[0],
6563 		rte_cryptodev_driver_id_get(
6564 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
6565 		BLKCIPHER_3DES_CHAIN_TYPE);
6566 
6567 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6568 
6569 	return TEST_SUCCESS;
6570 }
6571 
6572 static int
6573 test_3DES_cipheronly_dpaa_sec_all(void)
6574 {
6575 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6576 	int status;
6577 
6578 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6579 		ts_params->op_mpool,
6580 		ts_params->session_mpool, ts_params->session_priv_mpool,
6581 		ts_params->valid_devs[0],
6582 		rte_cryptodev_driver_id_get(
6583 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
6584 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6585 
6586 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6587 
6588 	return TEST_SUCCESS;
6589 }
6590 
6591 static int
6592 test_3DES_chain_dpaa2_sec_all(void)
6593 {
6594 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6595 	int status;
6596 
6597 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6598 		ts_params->op_mpool,
6599 		ts_params->session_mpool, ts_params->session_priv_mpool,
6600 		ts_params->valid_devs[0],
6601 		rte_cryptodev_driver_id_get(
6602 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
6603 		BLKCIPHER_3DES_CHAIN_TYPE);
6604 
6605 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6606 
6607 	return TEST_SUCCESS;
6608 }
6609 
6610 static int
6611 test_3DES_cipheronly_dpaa2_sec_all(void)
6612 {
6613 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6614 	int status;
6615 
6616 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6617 		ts_params->op_mpool,
6618 		ts_params->session_mpool, ts_params->session_priv_mpool,
6619 		ts_params->valid_devs[0],
6620 		rte_cryptodev_driver_id_get(
6621 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
6622 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6623 
6624 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6625 
6626 	return TEST_SUCCESS;
6627 }
6628 
6629 static int
6630 test_3DES_chain_ccp_all(void)
6631 {
6632 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6633 	int status;
6634 
6635 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6636 		ts_params->op_mpool,
6637 		ts_params->session_mpool, ts_params->session_priv_mpool,
6638 		ts_params->valid_devs[0],
6639 		rte_cryptodev_driver_id_get(
6640 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
6641 		BLKCIPHER_3DES_CHAIN_TYPE);
6642 
6643 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6644 
6645 	return TEST_SUCCESS;
6646 }
6647 
6648 static int
6649 test_3DES_cipheronly_ccp_all(void)
6650 {
6651 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6652 	int status;
6653 
6654 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6655 		ts_params->op_mpool,
6656 		ts_params->session_mpool, ts_params->session_priv_mpool,
6657 		ts_params->valid_devs[0],
6658 		rte_cryptodev_driver_id_get(
6659 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
6660 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6661 
6662 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6663 
6664 	return TEST_SUCCESS;
6665 }
6666 
6667 static int
6668 test_3DES_cipheronly_qat_all(void)
6669 {
6670 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6671 	int status;
6672 
6673 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6674 		ts_params->op_mpool,
6675 		ts_params->session_mpool, ts_params->session_priv_mpool,
6676 		ts_params->valid_devs[0],
6677 		rte_cryptodev_driver_id_get(
6678 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
6679 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6680 
6681 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6682 
6683 	return TEST_SUCCESS;
6684 }
6685 
6686 static int
6687 test_3DES_chain_openssl_all(void)
6688 {
6689 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6690 	int status;
6691 
6692 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6693 		ts_params->op_mpool,
6694 		ts_params->session_mpool, ts_params->session_priv_mpool,
6695 		ts_params->valid_devs[0],
6696 		rte_cryptodev_driver_id_get(
6697 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
6698 		BLKCIPHER_3DES_CHAIN_TYPE);
6699 
6700 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6701 
6702 	return TEST_SUCCESS;
6703 }
6704 
6705 static int
6706 test_3DES_cipheronly_openssl_all(void)
6707 {
6708 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6709 	int status;
6710 
6711 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
6712 		ts_params->op_mpool,
6713 		ts_params->session_mpool, ts_params->session_priv_mpool,
6714 		ts_params->valid_devs[0],
6715 		rte_cryptodev_driver_id_get(
6716 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
6717 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
6718 
6719 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
6720 
6721 	return TEST_SUCCESS;
6722 }
6723 
6724 /* ***** AEAD algorithm Tests ***** */
6725 
6726 static int
6727 create_aead_session(uint8_t dev_id, enum rte_crypto_aead_algorithm algo,
6728 		enum rte_crypto_aead_operation op,
6729 		const uint8_t *key, const uint8_t key_len,
6730 		const uint16_t aad_len, const uint8_t auth_len,
6731 		uint8_t iv_len)
6732 {
6733 	uint8_t aead_key[key_len];
6734 
6735 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6736 	struct crypto_unittest_params *ut_params = &unittest_params;
6737 
6738 	memcpy(aead_key, key, key_len);
6739 
6740 	/* Setup AEAD Parameters */
6741 	ut_params->aead_xform.type = RTE_CRYPTO_SYM_XFORM_AEAD;
6742 	ut_params->aead_xform.next = NULL;
6743 	ut_params->aead_xform.aead.algo = algo;
6744 	ut_params->aead_xform.aead.op = op;
6745 	ut_params->aead_xform.aead.key.data = aead_key;
6746 	ut_params->aead_xform.aead.key.length = key_len;
6747 	ut_params->aead_xform.aead.iv.offset = IV_OFFSET;
6748 	ut_params->aead_xform.aead.iv.length = iv_len;
6749 	ut_params->aead_xform.aead.digest_length = auth_len;
6750 	ut_params->aead_xform.aead.aad_length = aad_len;
6751 
6752 	debug_hexdump(stdout, "key:", key, key_len);
6753 
6754 	/* Create Crypto session*/
6755 	ut_params->sess = rte_cryptodev_sym_session_create(
6756 			ts_params->session_mpool);
6757 
6758 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
6759 			&ut_params->aead_xform,
6760 			ts_params->session_priv_mpool);
6761 
6762 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6763 
6764 	return 0;
6765 }
6766 
6767 static int
6768 create_aead_xform(struct rte_crypto_op *op,
6769 		enum rte_crypto_aead_algorithm algo,
6770 		enum rte_crypto_aead_operation aead_op,
6771 		uint8_t *key, const uint8_t key_len,
6772 		const uint8_t aad_len, const uint8_t auth_len,
6773 		uint8_t iv_len)
6774 {
6775 	TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 1),
6776 			"failed to allocate space for crypto transform");
6777 
6778 	struct rte_crypto_sym_op *sym_op = op->sym;
6779 
6780 	/* Setup AEAD Parameters */
6781 	sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
6782 	sym_op->xform->next = NULL;
6783 	sym_op->xform->aead.algo = algo;
6784 	sym_op->xform->aead.op = aead_op;
6785 	sym_op->xform->aead.key.data = key;
6786 	sym_op->xform->aead.key.length = key_len;
6787 	sym_op->xform->aead.iv.offset = IV_OFFSET;
6788 	sym_op->xform->aead.iv.length = iv_len;
6789 	sym_op->xform->aead.digest_length = auth_len;
6790 	sym_op->xform->aead.aad_length = aad_len;
6791 
6792 	debug_hexdump(stdout, "key:", key, key_len);
6793 
6794 	return 0;
6795 }
6796 
6797 static int
6798 create_aead_operation(enum rte_crypto_aead_operation op,
6799 		const struct aead_test_data *tdata)
6800 {
6801 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6802 	struct crypto_unittest_params *ut_params = &unittest_params;
6803 
6804 	uint8_t *plaintext, *ciphertext;
6805 	unsigned int aad_pad_len, plaintext_pad_len;
6806 
6807 	/* Generate Crypto op data structure */
6808 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6809 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6810 	TEST_ASSERT_NOT_NULL(ut_params->op,
6811 			"Failed to allocate symmetric crypto operation struct");
6812 
6813 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6814 
6815 	/* Append aad data */
6816 	if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
6817 		aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len + 18, 16);
6818 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6819 				aad_pad_len);
6820 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
6821 				"no room to append aad");
6822 
6823 		sym_op->aead.aad.phys_addr =
6824 				rte_pktmbuf_iova(ut_params->ibuf);
6825 		/* Copy AAD 18 bytes after the AAD pointer, according to the API */
6826 		memcpy(sym_op->aead.aad.data + 18, tdata->aad.data, tdata->aad.len);
6827 		debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
6828 			tdata->aad.len);
6829 
6830 		/* Append IV at the end of the crypto operation*/
6831 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
6832 				uint8_t *, IV_OFFSET);
6833 
6834 		/* Copy IV 1 byte after the IV pointer, according to the API */
6835 		rte_memcpy(iv_ptr + 1, tdata->iv.data, tdata->iv.len);
6836 		debug_hexdump(stdout, "iv:", iv_ptr,
6837 			tdata->iv.len);
6838 	} else {
6839 		aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
6840 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6841 				aad_pad_len);
6842 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
6843 				"no room to append aad");
6844 
6845 		sym_op->aead.aad.phys_addr =
6846 				rte_pktmbuf_iova(ut_params->ibuf);
6847 		memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len);
6848 		debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
6849 			tdata->aad.len);
6850 
6851 		/* Append IV at the end of the crypto operation*/
6852 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
6853 				uint8_t *, IV_OFFSET);
6854 
6855 		rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
6856 		debug_hexdump(stdout, "iv:", iv_ptr,
6857 			tdata->iv.len);
6858 	}
6859 
6860 	/* Append plaintext/ciphertext */
6861 	if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
6862 		plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
6863 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6864 				plaintext_pad_len);
6865 		TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
6866 
6867 		memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
6868 		debug_hexdump(stdout, "plaintext:", plaintext,
6869 				tdata->plaintext.len);
6870 
6871 		if (ut_params->obuf) {
6872 			ciphertext = (uint8_t *)rte_pktmbuf_append(
6873 					ut_params->obuf,
6874 					plaintext_pad_len + aad_pad_len);
6875 			TEST_ASSERT_NOT_NULL(ciphertext,
6876 					"no room to append ciphertext");
6877 
6878 			memset(ciphertext + aad_pad_len, 0,
6879 					tdata->ciphertext.len);
6880 		}
6881 	} else {
6882 		plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
6883 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6884 				plaintext_pad_len);
6885 		TEST_ASSERT_NOT_NULL(ciphertext,
6886 				"no room to append ciphertext");
6887 
6888 		memcpy(ciphertext, tdata->ciphertext.data,
6889 				tdata->ciphertext.len);
6890 		debug_hexdump(stdout, "ciphertext:", ciphertext,
6891 				tdata->ciphertext.len);
6892 
6893 		if (ut_params->obuf) {
6894 			plaintext = (uint8_t *)rte_pktmbuf_append(
6895 					ut_params->obuf,
6896 					plaintext_pad_len + aad_pad_len);
6897 			TEST_ASSERT_NOT_NULL(plaintext,
6898 					"no room to append plaintext");
6899 
6900 			memset(plaintext + aad_pad_len, 0,
6901 					tdata->plaintext.len);
6902 		}
6903 	}
6904 
6905 	/* Append digest data */
6906 	if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
6907 		sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
6908 				ut_params->obuf ? ut_params->obuf :
6909 						ut_params->ibuf,
6910 						tdata->auth_tag.len);
6911 		TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
6912 				"no room to append digest");
6913 		memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len);
6914 		sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
6915 				ut_params->obuf ? ut_params->obuf :
6916 						ut_params->ibuf,
6917 						plaintext_pad_len +
6918 						aad_pad_len);
6919 	} else {
6920 		sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
6921 				ut_params->ibuf, tdata->auth_tag.len);
6922 		TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
6923 				"no room to append digest");
6924 		sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
6925 				ut_params->ibuf,
6926 				plaintext_pad_len + aad_pad_len);
6927 
6928 		rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
6929 			tdata->auth_tag.len);
6930 		debug_hexdump(stdout, "digest:",
6931 			sym_op->aead.digest.data,
6932 			tdata->auth_tag.len);
6933 	}
6934 
6935 	sym_op->aead.data.length = tdata->plaintext.len;
6936 	sym_op->aead.data.offset = aad_pad_len;
6937 
6938 	return 0;
6939 }
6940 
6941 static int
6942 test_authenticated_encryption(const struct aead_test_data *tdata)
6943 {
6944 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6945 	struct crypto_unittest_params *ut_params = &unittest_params;
6946 
6947 	int retval;
6948 	uint8_t *ciphertext, *auth_tag;
6949 	uint16_t plaintext_pad_len;
6950 	uint32_t i;
6951 
6952 	/* Create AEAD session */
6953 	retval = create_aead_session(ts_params->valid_devs[0],
6954 			tdata->algo,
6955 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
6956 			tdata->key.data, tdata->key.len,
6957 			tdata->aad.len, tdata->auth_tag.len,
6958 			tdata->iv.len);
6959 	if (retval < 0)
6960 		return retval;
6961 
6962 	if (tdata->aad.len > MBUF_SIZE) {
6963 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6964 		/* Populate full size of add data */
6965 		for (i = 32; i < MAX_AAD_LENGTH; i += 32)
6966 			memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
6967 	} else
6968 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6969 
6970 	/* clear mbuf payload */
6971 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6972 			rte_pktmbuf_tailroom(ut_params->ibuf));
6973 
6974 	/* Create AEAD operation */
6975 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
6976 	if (retval < 0)
6977 		return retval;
6978 
6979 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6980 
6981 	ut_params->op->sym->m_src = ut_params->ibuf;
6982 
6983 	/* Process crypto operation */
6984 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6985 			ut_params->op), "failed to process sym crypto op");
6986 
6987 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6988 			"crypto op processing failed");
6989 
6990 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
6991 
6992 	if (ut_params->op->sym->m_dst) {
6993 		ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
6994 				uint8_t *);
6995 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
6996 				uint8_t *, plaintext_pad_len);
6997 	} else {
6998 		ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
6999 				uint8_t *,
7000 				ut_params->op->sym->cipher.data.offset);
7001 		auth_tag = ciphertext + plaintext_pad_len;
7002 	}
7003 
7004 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
7005 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
7006 
7007 	/* Validate obuf */
7008 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7009 			ciphertext,
7010 			tdata->ciphertext.data,
7011 			tdata->ciphertext.len,
7012 			"Ciphertext data not as expected");
7013 
7014 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7015 			auth_tag,
7016 			tdata->auth_tag.data,
7017 			tdata->auth_tag.len,
7018 			"Generated auth tag not as expected");
7019 
7020 	return 0;
7021 
7022 }
7023 
7024 static int
7025 test_AES_GCM_authenticated_encryption_test_case_1(void)
7026 {
7027 	return test_authenticated_encryption(&gcm_test_case_1);
7028 }
7029 
7030 static int
7031 test_AES_GCM_authenticated_encryption_test_case_2(void)
7032 {
7033 	return test_authenticated_encryption(&gcm_test_case_2);
7034 }
7035 
7036 static int
7037 test_AES_GCM_authenticated_encryption_test_case_3(void)
7038 {
7039 	return test_authenticated_encryption(&gcm_test_case_3);
7040 }
7041 
7042 static int
7043 test_AES_GCM_authenticated_encryption_test_case_4(void)
7044 {
7045 	return test_authenticated_encryption(&gcm_test_case_4);
7046 }
7047 
7048 static int
7049 test_AES_GCM_authenticated_encryption_test_case_5(void)
7050 {
7051 	return test_authenticated_encryption(&gcm_test_case_5);
7052 }
7053 
7054 static int
7055 test_AES_GCM_authenticated_encryption_test_case_6(void)
7056 {
7057 	return test_authenticated_encryption(&gcm_test_case_6);
7058 }
7059 
7060 static int
7061 test_AES_GCM_authenticated_encryption_test_case_7(void)
7062 {
7063 	return test_authenticated_encryption(&gcm_test_case_7);
7064 }
7065 
7066 static int
7067 test_AES_GCM_auth_encryption_test_case_192_1(void)
7068 {
7069 	return test_authenticated_encryption(&gcm_test_case_192_1);
7070 }
7071 
7072 static int
7073 test_AES_GCM_auth_encryption_test_case_192_2(void)
7074 {
7075 	return test_authenticated_encryption(&gcm_test_case_192_2);
7076 }
7077 
7078 static int
7079 test_AES_GCM_auth_encryption_test_case_192_3(void)
7080 {
7081 	return test_authenticated_encryption(&gcm_test_case_192_3);
7082 }
7083 
7084 static int
7085 test_AES_GCM_auth_encryption_test_case_192_4(void)
7086 {
7087 	return test_authenticated_encryption(&gcm_test_case_192_4);
7088 }
7089 
7090 static int
7091 test_AES_GCM_auth_encryption_test_case_192_5(void)
7092 {
7093 	return test_authenticated_encryption(&gcm_test_case_192_5);
7094 }
7095 
7096 static int
7097 test_AES_GCM_auth_encryption_test_case_192_6(void)
7098 {
7099 	return test_authenticated_encryption(&gcm_test_case_192_6);
7100 }
7101 
7102 static int
7103 test_AES_GCM_auth_encryption_test_case_192_7(void)
7104 {
7105 	return test_authenticated_encryption(&gcm_test_case_192_7);
7106 }
7107 
7108 static int
7109 test_AES_GCM_auth_encryption_test_case_256_1(void)
7110 {
7111 	return test_authenticated_encryption(&gcm_test_case_256_1);
7112 }
7113 
7114 static int
7115 test_AES_GCM_auth_encryption_test_case_256_2(void)
7116 {
7117 	return test_authenticated_encryption(&gcm_test_case_256_2);
7118 }
7119 
7120 static int
7121 test_AES_GCM_auth_encryption_test_case_256_3(void)
7122 {
7123 	return test_authenticated_encryption(&gcm_test_case_256_3);
7124 }
7125 
7126 static int
7127 test_AES_GCM_auth_encryption_test_case_256_4(void)
7128 {
7129 	return test_authenticated_encryption(&gcm_test_case_256_4);
7130 }
7131 
7132 static int
7133 test_AES_GCM_auth_encryption_test_case_256_5(void)
7134 {
7135 	return test_authenticated_encryption(&gcm_test_case_256_5);
7136 }
7137 
7138 static int
7139 test_AES_GCM_auth_encryption_test_case_256_6(void)
7140 {
7141 	return test_authenticated_encryption(&gcm_test_case_256_6);
7142 }
7143 
7144 static int
7145 test_AES_GCM_auth_encryption_test_case_256_7(void)
7146 {
7147 	return test_authenticated_encryption(&gcm_test_case_256_7);
7148 }
7149 
7150 static int
7151 test_AES_GCM_auth_encryption_test_case_aad_1(void)
7152 {
7153 	return test_authenticated_encryption(&gcm_test_case_aad_1);
7154 }
7155 
7156 static int
7157 test_AES_GCM_auth_encryption_test_case_aad_2(void)
7158 {
7159 	return test_authenticated_encryption(&gcm_test_case_aad_2);
7160 }
7161 
7162 static int
7163 test_authenticated_decryption(const struct aead_test_data *tdata)
7164 {
7165 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7166 	struct crypto_unittest_params *ut_params = &unittest_params;
7167 
7168 	int retval;
7169 	uint8_t *plaintext;
7170 	uint32_t i;
7171 
7172 	/* Create AEAD session */
7173 	retval = create_aead_session(ts_params->valid_devs[0],
7174 			tdata->algo,
7175 			RTE_CRYPTO_AEAD_OP_DECRYPT,
7176 			tdata->key.data, tdata->key.len,
7177 			tdata->aad.len, tdata->auth_tag.len,
7178 			tdata->iv.len);
7179 	if (retval < 0)
7180 		return retval;
7181 
7182 	/* alloc mbuf and set payload */
7183 	if (tdata->aad.len > MBUF_SIZE) {
7184 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
7185 		/* Populate full size of add data */
7186 		for (i = 32; i < MAX_AAD_LENGTH; i += 32)
7187 			memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
7188 	} else
7189 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7190 
7191 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7192 			rte_pktmbuf_tailroom(ut_params->ibuf));
7193 
7194 	/* Create AEAD operation */
7195 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
7196 	if (retval < 0)
7197 		return retval;
7198 
7199 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7200 
7201 	ut_params->op->sym->m_src = ut_params->ibuf;
7202 
7203 	/* Process crypto operation */
7204 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7205 			ut_params->op), "failed to process sym crypto op");
7206 
7207 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7208 			"crypto op processing failed");
7209 
7210 	if (ut_params->op->sym->m_dst)
7211 		plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
7212 				uint8_t *);
7213 	else
7214 		plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7215 				uint8_t *,
7216 				ut_params->op->sym->cipher.data.offset);
7217 
7218 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
7219 
7220 	/* Validate obuf */
7221 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7222 			plaintext,
7223 			tdata->plaintext.data,
7224 			tdata->plaintext.len,
7225 			"Plaintext data not as expected");
7226 
7227 	TEST_ASSERT_EQUAL(ut_params->op->status,
7228 			RTE_CRYPTO_OP_STATUS_SUCCESS,
7229 			"Authentication failed");
7230 	return 0;
7231 }
7232 
7233 static int
7234 test_AES_GCM_authenticated_decryption_test_case_1(void)
7235 {
7236 	return test_authenticated_decryption(&gcm_test_case_1);
7237 }
7238 
7239 static int
7240 test_AES_GCM_authenticated_decryption_test_case_2(void)
7241 {
7242 	return test_authenticated_decryption(&gcm_test_case_2);
7243 }
7244 
7245 static int
7246 test_AES_GCM_authenticated_decryption_test_case_3(void)
7247 {
7248 	return test_authenticated_decryption(&gcm_test_case_3);
7249 }
7250 
7251 static int
7252 test_AES_GCM_authenticated_decryption_test_case_4(void)
7253 {
7254 	return test_authenticated_decryption(&gcm_test_case_4);
7255 }
7256 
7257 static int
7258 test_AES_GCM_authenticated_decryption_test_case_5(void)
7259 {
7260 	return test_authenticated_decryption(&gcm_test_case_5);
7261 }
7262 
7263 static int
7264 test_AES_GCM_authenticated_decryption_test_case_6(void)
7265 {
7266 	return test_authenticated_decryption(&gcm_test_case_6);
7267 }
7268 
7269 static int
7270 test_AES_GCM_authenticated_decryption_test_case_7(void)
7271 {
7272 	return test_authenticated_decryption(&gcm_test_case_7);
7273 }
7274 
7275 static int
7276 test_AES_GCM_auth_decryption_test_case_192_1(void)
7277 {
7278 	return test_authenticated_decryption(&gcm_test_case_192_1);
7279 }
7280 
7281 static int
7282 test_AES_GCM_auth_decryption_test_case_192_2(void)
7283 {
7284 	return test_authenticated_decryption(&gcm_test_case_192_2);
7285 }
7286 
7287 static int
7288 test_AES_GCM_auth_decryption_test_case_192_3(void)
7289 {
7290 	return test_authenticated_decryption(&gcm_test_case_192_3);
7291 }
7292 
7293 static int
7294 test_AES_GCM_auth_decryption_test_case_192_4(void)
7295 {
7296 	return test_authenticated_decryption(&gcm_test_case_192_4);
7297 }
7298 
7299 static int
7300 test_AES_GCM_auth_decryption_test_case_192_5(void)
7301 {
7302 	return test_authenticated_decryption(&gcm_test_case_192_5);
7303 }
7304 
7305 static int
7306 test_AES_GCM_auth_decryption_test_case_192_6(void)
7307 {
7308 	return test_authenticated_decryption(&gcm_test_case_192_6);
7309 }
7310 
7311 static int
7312 test_AES_GCM_auth_decryption_test_case_192_7(void)
7313 {
7314 	return test_authenticated_decryption(&gcm_test_case_192_7);
7315 }
7316 
7317 static int
7318 test_AES_GCM_auth_decryption_test_case_256_1(void)
7319 {
7320 	return test_authenticated_decryption(&gcm_test_case_256_1);
7321 }
7322 
7323 static int
7324 test_AES_GCM_auth_decryption_test_case_256_2(void)
7325 {
7326 	return test_authenticated_decryption(&gcm_test_case_256_2);
7327 }
7328 
7329 static int
7330 test_AES_GCM_auth_decryption_test_case_256_3(void)
7331 {
7332 	return test_authenticated_decryption(&gcm_test_case_256_3);
7333 }
7334 
7335 static int
7336 test_AES_GCM_auth_decryption_test_case_256_4(void)
7337 {
7338 	return test_authenticated_decryption(&gcm_test_case_256_4);
7339 }
7340 
7341 static int
7342 test_AES_GCM_auth_decryption_test_case_256_5(void)
7343 {
7344 	return test_authenticated_decryption(&gcm_test_case_256_5);
7345 }
7346 
7347 static int
7348 test_AES_GCM_auth_decryption_test_case_256_6(void)
7349 {
7350 	return test_authenticated_decryption(&gcm_test_case_256_6);
7351 }
7352 
7353 static int
7354 test_AES_GCM_auth_decryption_test_case_256_7(void)
7355 {
7356 	return test_authenticated_decryption(&gcm_test_case_256_7);
7357 }
7358 
7359 static int
7360 test_AES_GCM_auth_decryption_test_case_aad_1(void)
7361 {
7362 	return test_authenticated_decryption(&gcm_test_case_aad_1);
7363 }
7364 
7365 static int
7366 test_AES_GCM_auth_decryption_test_case_aad_2(void)
7367 {
7368 	return test_authenticated_decryption(&gcm_test_case_aad_2);
7369 }
7370 
7371 static int
7372 test_authenticated_encryption_oop(const struct aead_test_data *tdata)
7373 {
7374 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7375 	struct crypto_unittest_params *ut_params = &unittest_params;
7376 
7377 	int retval;
7378 	uint8_t *ciphertext, *auth_tag;
7379 	uint16_t plaintext_pad_len;
7380 
7381 	/* Create AEAD session */
7382 	retval = create_aead_session(ts_params->valid_devs[0],
7383 			tdata->algo,
7384 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
7385 			tdata->key.data, tdata->key.len,
7386 			tdata->aad.len, tdata->auth_tag.len,
7387 			tdata->iv.len);
7388 	if (retval < 0)
7389 		return retval;
7390 
7391 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7392 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7393 
7394 	/* clear mbuf payload */
7395 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7396 			rte_pktmbuf_tailroom(ut_params->ibuf));
7397 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
7398 			rte_pktmbuf_tailroom(ut_params->obuf));
7399 
7400 	/* Create AEAD operation */
7401 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
7402 	if (retval < 0)
7403 		return retval;
7404 
7405 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7406 
7407 	ut_params->op->sym->m_src = ut_params->ibuf;
7408 	ut_params->op->sym->m_dst = ut_params->obuf;
7409 
7410 	/* Process crypto operation */
7411 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7412 			ut_params->op), "failed to process sym crypto op");
7413 
7414 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7415 			"crypto op processing failed");
7416 
7417 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7418 
7419 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
7420 			ut_params->op->sym->cipher.data.offset);
7421 	auth_tag = ciphertext + plaintext_pad_len;
7422 
7423 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
7424 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
7425 
7426 	/* Validate obuf */
7427 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7428 			ciphertext,
7429 			tdata->ciphertext.data,
7430 			tdata->ciphertext.len,
7431 			"Ciphertext data not as expected");
7432 
7433 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7434 			auth_tag,
7435 			tdata->auth_tag.data,
7436 			tdata->auth_tag.len,
7437 			"Generated auth tag not as expected");
7438 
7439 	return 0;
7440 
7441 }
7442 
7443 static int
7444 test_AES_GCM_authenticated_encryption_oop_test_case_1(void)
7445 {
7446 	return test_authenticated_encryption_oop(&gcm_test_case_5);
7447 }
7448 
7449 static int
7450 test_authenticated_decryption_oop(const struct aead_test_data *tdata)
7451 {
7452 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7453 	struct crypto_unittest_params *ut_params = &unittest_params;
7454 
7455 	int retval;
7456 	uint8_t *plaintext;
7457 
7458 	/* Create AEAD session */
7459 	retval = create_aead_session(ts_params->valid_devs[0],
7460 			tdata->algo,
7461 			RTE_CRYPTO_AEAD_OP_DECRYPT,
7462 			tdata->key.data, tdata->key.len,
7463 			tdata->aad.len, tdata->auth_tag.len,
7464 			tdata->iv.len);
7465 	if (retval < 0)
7466 		return retval;
7467 
7468 	/* alloc mbuf and set payload */
7469 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7470 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7471 
7472 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7473 			rte_pktmbuf_tailroom(ut_params->ibuf));
7474 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
7475 			rte_pktmbuf_tailroom(ut_params->obuf));
7476 
7477 	/* Create AEAD operation */
7478 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
7479 	if (retval < 0)
7480 		return retval;
7481 
7482 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7483 
7484 	ut_params->op->sym->m_src = ut_params->ibuf;
7485 	ut_params->op->sym->m_dst = ut_params->obuf;
7486 
7487 	/* Process crypto operation */
7488 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7489 			ut_params->op), "failed to process sym crypto op");
7490 
7491 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7492 			"crypto op processing failed");
7493 
7494 	plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
7495 			ut_params->op->sym->cipher.data.offset);
7496 
7497 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
7498 
7499 	/* Validate obuf */
7500 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7501 			plaintext,
7502 			tdata->plaintext.data,
7503 			tdata->plaintext.len,
7504 			"Plaintext data not as expected");
7505 
7506 	TEST_ASSERT_EQUAL(ut_params->op->status,
7507 			RTE_CRYPTO_OP_STATUS_SUCCESS,
7508 			"Authentication failed");
7509 	return 0;
7510 }
7511 
7512 static int
7513 test_AES_GCM_authenticated_decryption_oop_test_case_1(void)
7514 {
7515 	return test_authenticated_decryption_oop(&gcm_test_case_5);
7516 }
7517 
7518 static int
7519 test_authenticated_encryption_sessionless(
7520 		const struct aead_test_data *tdata)
7521 {
7522 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7523 	struct crypto_unittest_params *ut_params = &unittest_params;
7524 
7525 	int retval;
7526 	uint8_t *ciphertext, *auth_tag;
7527 	uint16_t plaintext_pad_len;
7528 	uint8_t key[tdata->key.len + 1];
7529 
7530 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7531 
7532 	/* clear mbuf payload */
7533 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7534 			rte_pktmbuf_tailroom(ut_params->ibuf));
7535 
7536 	/* Create AEAD operation */
7537 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
7538 	if (retval < 0)
7539 		return retval;
7540 
7541 	/* Create GCM xform */
7542 	memcpy(key, tdata->key.data, tdata->key.len);
7543 	retval = create_aead_xform(ut_params->op,
7544 			tdata->algo,
7545 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
7546 			key, tdata->key.len,
7547 			tdata->aad.len, tdata->auth_tag.len,
7548 			tdata->iv.len);
7549 	if (retval < 0)
7550 		return retval;
7551 
7552 	ut_params->op->sym->m_src = ut_params->ibuf;
7553 
7554 	TEST_ASSERT_EQUAL(ut_params->op->sess_type,
7555 			RTE_CRYPTO_OP_SESSIONLESS,
7556 			"crypto op session type not sessionless");
7557 
7558 	/* Process crypto operation */
7559 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7560 			ut_params->op), "failed to process sym crypto op");
7561 
7562 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
7563 
7564 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7565 			"crypto op status not success");
7566 
7567 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7568 
7569 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
7570 			ut_params->op->sym->cipher.data.offset);
7571 	auth_tag = ciphertext + plaintext_pad_len;
7572 
7573 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
7574 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
7575 
7576 	/* Validate obuf */
7577 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7578 			ciphertext,
7579 			tdata->ciphertext.data,
7580 			tdata->ciphertext.len,
7581 			"Ciphertext data not as expected");
7582 
7583 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7584 			auth_tag,
7585 			tdata->auth_tag.data,
7586 			tdata->auth_tag.len,
7587 			"Generated auth tag not as expected");
7588 
7589 	return 0;
7590 
7591 }
7592 
7593 static int
7594 test_AES_GCM_authenticated_encryption_sessionless_test_case_1(void)
7595 {
7596 	return test_authenticated_encryption_sessionless(
7597 			&gcm_test_case_5);
7598 }
7599 
7600 static int
7601 test_authenticated_decryption_sessionless(
7602 		const struct aead_test_data *tdata)
7603 {
7604 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7605 	struct crypto_unittest_params *ut_params = &unittest_params;
7606 
7607 	int retval;
7608 	uint8_t *plaintext;
7609 	uint8_t key[tdata->key.len + 1];
7610 
7611 	/* alloc mbuf and set payload */
7612 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7613 
7614 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7615 			rte_pktmbuf_tailroom(ut_params->ibuf));
7616 
7617 	/* Create AEAD operation */
7618 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
7619 	if (retval < 0)
7620 		return retval;
7621 
7622 	/* Create AEAD xform */
7623 	memcpy(key, tdata->key.data, tdata->key.len);
7624 	retval = create_aead_xform(ut_params->op,
7625 			tdata->algo,
7626 			RTE_CRYPTO_AEAD_OP_DECRYPT,
7627 			key, tdata->key.len,
7628 			tdata->aad.len, tdata->auth_tag.len,
7629 			tdata->iv.len);
7630 	if (retval < 0)
7631 		return retval;
7632 
7633 	ut_params->op->sym->m_src = ut_params->ibuf;
7634 
7635 	TEST_ASSERT_EQUAL(ut_params->op->sess_type,
7636 			RTE_CRYPTO_OP_SESSIONLESS,
7637 			"crypto op session type not sessionless");
7638 
7639 	/* Process crypto operation */
7640 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7641 			ut_params->op), "failed to process sym crypto op");
7642 
7643 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
7644 
7645 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7646 			"crypto op status not success");
7647 
7648 	plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
7649 			ut_params->op->sym->cipher.data.offset);
7650 
7651 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
7652 
7653 	/* Validate obuf */
7654 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7655 			plaintext,
7656 			tdata->plaintext.data,
7657 			tdata->plaintext.len,
7658 			"Plaintext data not as expected");
7659 
7660 	TEST_ASSERT_EQUAL(ut_params->op->status,
7661 			RTE_CRYPTO_OP_STATUS_SUCCESS,
7662 			"Authentication failed");
7663 	return 0;
7664 }
7665 
7666 static int
7667 test_AES_GCM_authenticated_decryption_sessionless_test_case_1(void)
7668 {
7669 	return test_authenticated_decryption_sessionless(
7670 			&gcm_test_case_5);
7671 }
7672 
7673 static int
7674 test_AES_CCM_authenticated_encryption_test_case_128_1(void)
7675 {
7676 	return test_authenticated_encryption(&ccm_test_case_128_1);
7677 }
7678 
7679 static int
7680 test_AES_CCM_authenticated_encryption_test_case_128_2(void)
7681 {
7682 	return test_authenticated_encryption(&ccm_test_case_128_2);
7683 }
7684 
7685 static int
7686 test_AES_CCM_authenticated_encryption_test_case_128_3(void)
7687 {
7688 	return test_authenticated_encryption(&ccm_test_case_128_3);
7689 }
7690 
7691 static int
7692 test_AES_CCM_authenticated_decryption_test_case_128_1(void)
7693 {
7694 	return test_authenticated_decryption(&ccm_test_case_128_1);
7695 }
7696 
7697 static int
7698 test_AES_CCM_authenticated_decryption_test_case_128_2(void)
7699 {
7700 	return test_authenticated_decryption(&ccm_test_case_128_2);
7701 }
7702 
7703 static int
7704 test_AES_CCM_authenticated_decryption_test_case_128_3(void)
7705 {
7706 	return test_authenticated_decryption(&ccm_test_case_128_3);
7707 }
7708 
7709 static int
7710 test_AES_CCM_authenticated_encryption_test_case_192_1(void)
7711 {
7712 	return test_authenticated_encryption(&ccm_test_case_192_1);
7713 }
7714 
7715 static int
7716 test_AES_CCM_authenticated_encryption_test_case_192_2(void)
7717 {
7718 	return test_authenticated_encryption(&ccm_test_case_192_2);
7719 }
7720 
7721 static int
7722 test_AES_CCM_authenticated_encryption_test_case_192_3(void)
7723 {
7724 	return test_authenticated_encryption(&ccm_test_case_192_3);
7725 }
7726 
7727 static int
7728 test_AES_CCM_authenticated_decryption_test_case_192_1(void)
7729 {
7730 	return test_authenticated_decryption(&ccm_test_case_192_1);
7731 }
7732 
7733 static int
7734 test_AES_CCM_authenticated_decryption_test_case_192_2(void)
7735 {
7736 	return test_authenticated_decryption(&ccm_test_case_192_2);
7737 }
7738 
7739 static int
7740 test_AES_CCM_authenticated_decryption_test_case_192_3(void)
7741 {
7742 	return test_authenticated_decryption(&ccm_test_case_192_3);
7743 }
7744 
7745 static int
7746 test_AES_CCM_authenticated_encryption_test_case_256_1(void)
7747 {
7748 	return test_authenticated_encryption(&ccm_test_case_256_1);
7749 }
7750 
7751 static int
7752 test_AES_CCM_authenticated_encryption_test_case_256_2(void)
7753 {
7754 	return test_authenticated_encryption(&ccm_test_case_256_2);
7755 }
7756 
7757 static int
7758 test_AES_CCM_authenticated_encryption_test_case_256_3(void)
7759 {
7760 	return test_authenticated_encryption(&ccm_test_case_256_3);
7761 }
7762 
7763 static int
7764 test_AES_CCM_authenticated_decryption_test_case_256_1(void)
7765 {
7766 	return test_authenticated_decryption(&ccm_test_case_256_1);
7767 }
7768 
7769 static int
7770 test_AES_CCM_authenticated_decryption_test_case_256_2(void)
7771 {
7772 	return test_authenticated_decryption(&ccm_test_case_256_2);
7773 }
7774 
7775 static int
7776 test_AES_CCM_authenticated_decryption_test_case_256_3(void)
7777 {
7778 	return test_authenticated_decryption(&ccm_test_case_256_3);
7779 }
7780 
7781 static int
7782 test_stats(void)
7783 {
7784 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7785 	struct rte_cryptodev_stats stats;
7786 	struct rte_cryptodev *dev;
7787 	cryptodev_stats_get_t temp_pfn;
7788 
7789 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
7790 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
7791 			&stats) == -ENODEV),
7792 		"rte_cryptodev_stats_get invalid dev failed");
7793 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
7794 		"rte_cryptodev_stats_get invalid Param failed");
7795 	dev = &rte_cryptodevs[ts_params->valid_devs[0]];
7796 	temp_pfn = dev->dev_ops->stats_get;
7797 	dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
7798 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
7799 			== -ENOTSUP),
7800 		"rte_cryptodev_stats_get invalid Param failed");
7801 	dev->dev_ops->stats_get = temp_pfn;
7802 
7803 	/* Test expected values */
7804 	ut_setup();
7805 	test_AES_CBC_HMAC_SHA1_encrypt_digest();
7806 	ut_teardown();
7807 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
7808 			&stats),
7809 		"rte_cryptodev_stats_get failed");
7810 	TEST_ASSERT((stats.enqueued_count == 1),
7811 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7812 	TEST_ASSERT((stats.dequeued_count == 1),
7813 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7814 	TEST_ASSERT((stats.enqueue_err_count == 0),
7815 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7816 	TEST_ASSERT((stats.dequeue_err_count == 0),
7817 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7818 
7819 	/* invalid device but should ignore and not reset device stats*/
7820 	rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
7821 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
7822 			&stats),
7823 		"rte_cryptodev_stats_get failed");
7824 	TEST_ASSERT((stats.enqueued_count == 1),
7825 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7826 
7827 	/* check that a valid reset clears stats */
7828 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
7829 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
7830 			&stats),
7831 					  "rte_cryptodev_stats_get failed");
7832 	TEST_ASSERT((stats.enqueued_count == 0),
7833 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7834 	TEST_ASSERT((stats.dequeued_count == 0),
7835 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
7836 
7837 	return TEST_SUCCESS;
7838 }
7839 
7840 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
7841 				   struct crypto_unittest_params *ut_params,
7842 				   enum rte_crypto_auth_operation op,
7843 				   const struct HMAC_MD5_vector *test_case)
7844 {
7845 	uint8_t key[64];
7846 
7847 	memcpy(key, test_case->key.data, test_case->key.len);
7848 
7849 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
7850 	ut_params->auth_xform.next = NULL;
7851 	ut_params->auth_xform.auth.op = op;
7852 
7853 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
7854 
7855 	ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
7856 	ut_params->auth_xform.auth.key.length = test_case->key.len;
7857 	ut_params->auth_xform.auth.key.data = key;
7858 
7859 	ut_params->sess = rte_cryptodev_sym_session_create(
7860 			ts_params->session_mpool);
7861 
7862 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
7863 			ut_params->sess, &ut_params->auth_xform,
7864 			ts_params->session_priv_mpool);
7865 
7866 	if (ut_params->sess == NULL)
7867 		return TEST_FAILED;
7868 
7869 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7870 
7871 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7872 			rte_pktmbuf_tailroom(ut_params->ibuf));
7873 
7874 	return 0;
7875 }
7876 
7877 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
7878 			      const struct HMAC_MD5_vector *test_case,
7879 			      uint8_t **plaintext)
7880 {
7881 	uint16_t plaintext_pad_len;
7882 
7883 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7884 
7885 	plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
7886 				16);
7887 
7888 	*plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7889 			plaintext_pad_len);
7890 	memcpy(*plaintext, test_case->plaintext.data,
7891 			test_case->plaintext.len);
7892 
7893 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
7894 			ut_params->ibuf, MD5_DIGEST_LEN);
7895 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
7896 			"no room to append digest");
7897 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
7898 			ut_params->ibuf, plaintext_pad_len);
7899 
7900 	if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
7901 		rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
7902 			   test_case->auth_tag.len);
7903 	}
7904 
7905 	sym_op->auth.data.offset = 0;
7906 	sym_op->auth.data.length = test_case->plaintext.len;
7907 
7908 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7909 	ut_params->op->sym->m_src = ut_params->ibuf;
7910 
7911 	return 0;
7912 }
7913 
7914 static int
7915 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
7916 {
7917 	uint16_t plaintext_pad_len;
7918 	uint8_t *plaintext, *auth_tag;
7919 
7920 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7921 	struct crypto_unittest_params *ut_params = &unittest_params;
7922 
7923 	if (MD5_HMAC_create_session(ts_params, ut_params,
7924 			RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
7925 		return TEST_FAILED;
7926 
7927 	/* Generate Crypto op data structure */
7928 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7929 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7930 	TEST_ASSERT_NOT_NULL(ut_params->op,
7931 			"Failed to allocate symmetric crypto operation struct");
7932 
7933 	plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
7934 				16);
7935 
7936 	if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
7937 		return TEST_FAILED;
7938 
7939 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7940 			ut_params->op), "failed to process sym crypto op");
7941 
7942 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7943 			"crypto op processing failed");
7944 
7945 	if (ut_params->op->sym->m_dst) {
7946 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7947 				uint8_t *, plaintext_pad_len);
7948 	} else {
7949 		auth_tag = plaintext + plaintext_pad_len;
7950 	}
7951 
7952 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7953 			auth_tag,
7954 			test_case->auth_tag.data,
7955 			test_case->auth_tag.len,
7956 			"HMAC_MD5 generated tag not as expected");
7957 
7958 	return TEST_SUCCESS;
7959 }
7960 
7961 static int
7962 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
7963 {
7964 	uint8_t *plaintext;
7965 
7966 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7967 	struct crypto_unittest_params *ut_params = &unittest_params;
7968 
7969 	if (MD5_HMAC_create_session(ts_params, ut_params,
7970 			RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
7971 		return TEST_FAILED;
7972 	}
7973 
7974 	/* Generate Crypto op data structure */
7975 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7976 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7977 	TEST_ASSERT_NOT_NULL(ut_params->op,
7978 			"Failed to allocate symmetric crypto operation struct");
7979 
7980 	if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
7981 		return TEST_FAILED;
7982 
7983 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7984 			ut_params->op), "failed to process sym crypto op");
7985 
7986 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7987 			"HMAC_MD5 crypto op processing failed");
7988 
7989 	return TEST_SUCCESS;
7990 }
7991 
7992 static int
7993 test_MD5_HMAC_generate_case_1(void)
7994 {
7995 	return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
7996 }
7997 
7998 static int
7999 test_MD5_HMAC_verify_case_1(void)
8000 {
8001 	return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
8002 }
8003 
8004 static int
8005 test_MD5_HMAC_generate_case_2(void)
8006 {
8007 	return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
8008 }
8009 
8010 static int
8011 test_MD5_HMAC_verify_case_2(void)
8012 {
8013 	return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
8014 }
8015 
8016 static int
8017 test_multi_session(void)
8018 {
8019 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8020 	struct crypto_unittest_params *ut_params = &unittest_params;
8021 
8022 	struct rte_cryptodev_info dev_info;
8023 	struct rte_cryptodev_sym_session **sessions;
8024 
8025 	uint16_t i;
8026 
8027 	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
8028 			aes_cbc_key, hmac_sha512_key);
8029 
8030 
8031 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
8032 
8033 	sessions = rte_malloc(NULL,
8034 			(sizeof(struct rte_cryptodev_sym_session *) *
8035 			MAX_NB_SESSIONS) + 1, 0);
8036 
8037 	/* Create multiple crypto sessions*/
8038 	for (i = 0; i < MAX_NB_SESSIONS; i++) {
8039 
8040 		sessions[i] = rte_cryptodev_sym_session_create(
8041 				ts_params->session_mpool);
8042 
8043 		rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8044 				sessions[i], &ut_params->auth_xform,
8045 				ts_params->session_priv_mpool);
8046 		TEST_ASSERT_NOT_NULL(sessions[i],
8047 				"Session creation failed at session number %u",
8048 				i);
8049 
8050 		/* Attempt to send a request on each session */
8051 		TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
8052 			sessions[i],
8053 			ut_params,
8054 			ts_params,
8055 			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
8056 			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
8057 			aes_cbc_iv),
8058 			"Failed to perform decrypt on request number %u.", i);
8059 		/* free crypto operation structure */
8060 		if (ut_params->op)
8061 			rte_crypto_op_free(ut_params->op);
8062 
8063 		/*
8064 		 * free mbuf - both obuf and ibuf are usually the same,
8065 		 * so check if they point at the same address is necessary,
8066 		 * to avoid freeing the mbuf twice.
8067 		 */
8068 		if (ut_params->obuf) {
8069 			rte_pktmbuf_free(ut_params->obuf);
8070 			if (ut_params->ibuf == ut_params->obuf)
8071 				ut_params->ibuf = 0;
8072 			ut_params->obuf = 0;
8073 		}
8074 		if (ut_params->ibuf) {
8075 			rte_pktmbuf_free(ut_params->ibuf);
8076 			ut_params->ibuf = 0;
8077 		}
8078 	}
8079 
8080 	/* Next session create should fail */
8081 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8082 			sessions[i], &ut_params->auth_xform,
8083 			ts_params->session_priv_mpool);
8084 	TEST_ASSERT_NULL(sessions[i],
8085 			"Session creation succeeded unexpectedly!");
8086 
8087 	for (i = 0; i < MAX_NB_SESSIONS; i++) {
8088 		rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
8089 				sessions[i]);
8090 		rte_cryptodev_sym_session_free(sessions[i]);
8091 	}
8092 
8093 	rte_free(sessions);
8094 
8095 	return TEST_SUCCESS;
8096 }
8097 
8098 struct multi_session_params {
8099 	struct crypto_unittest_params ut_params;
8100 	uint8_t *cipher_key;
8101 	uint8_t *hmac_key;
8102 	const uint8_t *cipher;
8103 	const uint8_t *digest;
8104 	uint8_t *iv;
8105 };
8106 
8107 #define MB_SESSION_NUMBER 3
8108 
8109 static int
8110 test_multi_session_random_usage(void)
8111 {
8112 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8113 	struct rte_cryptodev_info dev_info;
8114 	struct rte_cryptodev_sym_session **sessions;
8115 	uint32_t i, j;
8116 	struct multi_session_params ut_paramz[] = {
8117 
8118 		{
8119 			.cipher_key = ms_aes_cbc_key0,
8120 			.hmac_key = ms_hmac_key0,
8121 			.cipher = ms_aes_cbc_cipher0,
8122 			.digest = ms_hmac_digest0,
8123 			.iv = ms_aes_cbc_iv0
8124 		},
8125 		{
8126 			.cipher_key = ms_aes_cbc_key1,
8127 			.hmac_key = ms_hmac_key1,
8128 			.cipher = ms_aes_cbc_cipher1,
8129 			.digest = ms_hmac_digest1,
8130 			.iv = ms_aes_cbc_iv1
8131 		},
8132 		{
8133 			.cipher_key = ms_aes_cbc_key2,
8134 			.hmac_key = ms_hmac_key2,
8135 			.cipher = ms_aes_cbc_cipher2,
8136 			.digest = ms_hmac_digest2,
8137 			.iv = ms_aes_cbc_iv2
8138 		},
8139 
8140 	};
8141 
8142 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
8143 
8144 	sessions = rte_malloc(NULL,
8145 			(sizeof(struct rte_cryptodev_sym_session *)
8146 					* MAX_NB_SESSIONS) + 1, 0);
8147 
8148 	for (i = 0; i < MB_SESSION_NUMBER; i++) {
8149 		sessions[i] = rte_cryptodev_sym_session_create(
8150 				ts_params->session_mpool);
8151 
8152 		rte_memcpy(&ut_paramz[i].ut_params, &unittest_params,
8153 				sizeof(struct crypto_unittest_params));
8154 
8155 		test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
8156 				&ut_paramz[i].ut_params,
8157 				ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
8158 
8159 		/* Create multiple crypto sessions*/
8160 		rte_cryptodev_sym_session_init(
8161 				ts_params->valid_devs[0],
8162 				sessions[i],
8163 				&ut_paramz[i].ut_params.auth_xform,
8164 				ts_params->session_priv_mpool);
8165 
8166 		TEST_ASSERT_NOT_NULL(sessions[i],
8167 				"Session creation failed at session number %u",
8168 				i);
8169 
8170 	}
8171 
8172 	srand(time(NULL));
8173 	for (i = 0; i < 40000; i++) {
8174 
8175 		j = rand() % MB_SESSION_NUMBER;
8176 
8177 		TEST_ASSERT_SUCCESS(
8178 			test_AES_CBC_HMAC_SHA512_decrypt_perform(
8179 					sessions[j],
8180 					&ut_paramz[j].ut_params,
8181 					ts_params, ut_paramz[j].cipher,
8182 					ut_paramz[j].digest,
8183 					ut_paramz[j].iv),
8184 			"Failed to perform decrypt on request number %u.", i);
8185 
8186 		if (ut_paramz[j].ut_params.op)
8187 			rte_crypto_op_free(ut_paramz[j].ut_params.op);
8188 
8189 		/*
8190 		 * free mbuf - both obuf and ibuf are usually the same,
8191 		 * so check if they point at the same address is necessary,
8192 		 * to avoid freeing the mbuf twice.
8193 		 */
8194 		if (ut_paramz[j].ut_params.obuf) {
8195 			rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
8196 			if (ut_paramz[j].ut_params.ibuf
8197 					== ut_paramz[j].ut_params.obuf)
8198 				ut_paramz[j].ut_params.ibuf = 0;
8199 			ut_paramz[j].ut_params.obuf = 0;
8200 		}
8201 		if (ut_paramz[j].ut_params.ibuf) {
8202 			rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
8203 			ut_paramz[j].ut_params.ibuf = 0;
8204 		}
8205 	}
8206 
8207 	for (i = 0; i < MB_SESSION_NUMBER; i++) {
8208 		rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
8209 				sessions[i]);
8210 		rte_cryptodev_sym_session_free(sessions[i]);
8211 	}
8212 
8213 	rte_free(sessions);
8214 
8215 	return TEST_SUCCESS;
8216 }
8217 
8218 static int
8219 test_null_cipher_only_operation(void)
8220 {
8221 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8222 	struct crypto_unittest_params *ut_params = &unittest_params;
8223 
8224 	/* Generate test mbuf data and space for digest */
8225 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
8226 			catch_22_quote, QUOTE_512_BYTES, 0);
8227 
8228 	/* Setup Cipher Parameters */
8229 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8230 	ut_params->cipher_xform.next = NULL;
8231 
8232 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
8233 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8234 
8235 	ut_params->sess = rte_cryptodev_sym_session_create(
8236 			ts_params->session_mpool);
8237 
8238 	/* Create Crypto session*/
8239 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8240 				ut_params->sess,
8241 				&ut_params->cipher_xform,
8242 				ts_params->session_priv_mpool);
8243 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8244 
8245 	/* Generate Crypto op data structure */
8246 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8247 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8248 	TEST_ASSERT_NOT_NULL(ut_params->op,
8249 			"Failed to allocate symmetric crypto operation struct");
8250 
8251 	/* Set crypto operation data parameters */
8252 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8253 
8254 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
8255 
8256 	/* set crypto operation source mbuf */
8257 	sym_op->m_src = ut_params->ibuf;
8258 
8259 	sym_op->cipher.data.offset = 0;
8260 	sym_op->cipher.data.length = QUOTE_512_BYTES;
8261 
8262 	/* Process crypto operation */
8263 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
8264 			ut_params->op);
8265 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
8266 
8267 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8268 			"crypto operation processing failed");
8269 
8270 	/* Validate obuf */
8271 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8272 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
8273 			catch_22_quote,
8274 			QUOTE_512_BYTES,
8275 			"Ciphertext data not as expected");
8276 
8277 	return TEST_SUCCESS;
8278 }
8279 uint8_t orig_data[] = {0xab, 0xab, 0xab, 0xab,
8280 			0xab, 0xab, 0xab, 0xab,
8281 			0xab, 0xab, 0xab, 0xab,
8282 			0xab, 0xab, 0xab, 0xab};
8283 static int
8284 test_null_auth_only_operation(void)
8285 {
8286 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8287 	struct crypto_unittest_params *ut_params = &unittest_params;
8288 	uint8_t *digest;
8289 
8290 	/* Generate test mbuf data and space for digest */
8291 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
8292 			catch_22_quote, QUOTE_512_BYTES, 0);
8293 
8294 	/* create a pointer for digest, but don't expect anything to be written
8295 	 * here in a NULL auth algo so no mbuf append done.
8296 	 */
8297 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
8298 			QUOTE_512_BYTES);
8299 	/* prefill the memory pointed to by digest */
8300 	memcpy(digest, orig_data, sizeof(orig_data));
8301 
8302 	/* Setup HMAC Parameters */
8303 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8304 	ut_params->auth_xform.next = NULL;
8305 
8306 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
8307 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
8308 
8309 	ut_params->sess = rte_cryptodev_sym_session_create(
8310 			ts_params->session_mpool);
8311 
8312 	/* Create Crypto session*/
8313 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8314 			ut_params->sess, &ut_params->auth_xform,
8315 			ts_params->session_priv_mpool);
8316 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8317 
8318 	/* Generate Crypto op data structure */
8319 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8320 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8321 	TEST_ASSERT_NOT_NULL(ut_params->op,
8322 			"Failed to allocate symmetric crypto operation struct");
8323 
8324 	/* Set crypto operation data parameters */
8325 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8326 
8327 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
8328 
8329 	sym_op->m_src = ut_params->ibuf;
8330 
8331 	sym_op->auth.data.offset = 0;
8332 	sym_op->auth.data.length = QUOTE_512_BYTES;
8333 	sym_op->auth.digest.data = digest;
8334 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
8335 			QUOTE_512_BYTES);
8336 
8337 	/* Process crypto operation */
8338 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
8339 			ut_params->op);
8340 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
8341 
8342 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8343 			"crypto operation processing failed");
8344 	/* Make sure memory pointed to by digest hasn't been overwritten */
8345 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8346 			orig_data,
8347 			digest,
8348 			sizeof(orig_data),
8349 			"Memory at digest ptr overwritten unexpectedly");
8350 
8351 	return TEST_SUCCESS;
8352 }
8353 
8354 
8355 static int
8356 test_null_cipher_auth_operation(void)
8357 {
8358 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8359 	struct crypto_unittest_params *ut_params = &unittest_params;
8360 	uint8_t *digest;
8361 
8362 	/* Generate test mbuf data and space for digest */
8363 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
8364 			catch_22_quote, QUOTE_512_BYTES, 0);
8365 
8366 	/* create a pointer for digest, but don't expect anything to be written
8367 	 * here in a NULL auth algo so no mbuf append done.
8368 	 */
8369 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
8370 			QUOTE_512_BYTES);
8371 	/* prefill the memory pointed to by digest */
8372 	memcpy(digest, orig_data, sizeof(orig_data));
8373 
8374 	/* Setup Cipher Parameters */
8375 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8376 	ut_params->cipher_xform.next = &ut_params->auth_xform;
8377 
8378 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
8379 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8380 
8381 	/* Setup HMAC Parameters */
8382 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8383 	ut_params->auth_xform.next = NULL;
8384 
8385 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
8386 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
8387 
8388 	ut_params->sess = rte_cryptodev_sym_session_create(
8389 			ts_params->session_mpool);
8390 
8391 	/* Create Crypto session*/
8392 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8393 			ut_params->sess, &ut_params->cipher_xform,
8394 			ts_params->session_priv_mpool);
8395 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8396 
8397 	/* Generate Crypto op data structure */
8398 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8399 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8400 	TEST_ASSERT_NOT_NULL(ut_params->op,
8401 			"Failed to allocate symmetric crypto operation struct");
8402 
8403 	/* Set crypto operation data parameters */
8404 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8405 
8406 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
8407 
8408 	sym_op->m_src = ut_params->ibuf;
8409 
8410 	sym_op->cipher.data.offset = 0;
8411 	sym_op->cipher.data.length = QUOTE_512_BYTES;
8412 
8413 	sym_op->auth.data.offset = 0;
8414 	sym_op->auth.data.length = QUOTE_512_BYTES;
8415 	sym_op->auth.digest.data = digest;
8416 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
8417 			QUOTE_512_BYTES);
8418 
8419 	/* Process crypto operation */
8420 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
8421 			ut_params->op);
8422 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
8423 
8424 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8425 			"crypto operation processing failed");
8426 
8427 	/* Validate obuf */
8428 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8429 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
8430 			catch_22_quote,
8431 			QUOTE_512_BYTES,
8432 			"Ciphertext data not as expected");
8433 	/* Make sure memory pointed to by digest hasn't been overwritten */
8434 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8435 			orig_data,
8436 			digest,
8437 			sizeof(orig_data),
8438 			"Memory at digest ptr overwritten unexpectedly");
8439 
8440 	return TEST_SUCCESS;
8441 }
8442 
8443 static int
8444 test_null_auth_cipher_operation(void)
8445 {
8446 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8447 	struct crypto_unittest_params *ut_params = &unittest_params;
8448 	uint8_t *digest;
8449 
8450 	/* Generate test mbuf data */
8451 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
8452 			catch_22_quote, QUOTE_512_BYTES, 0);
8453 
8454 	/* create a pointer for digest, but don't expect anything to be written
8455 	 * here in a NULL auth algo so no mbuf append done.
8456 	 */
8457 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
8458 				QUOTE_512_BYTES);
8459 	/* prefill the memory pointed to by digest */
8460 	memcpy(digest, orig_data, sizeof(orig_data));
8461 
8462 	/* Setup Cipher Parameters */
8463 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8464 	ut_params->cipher_xform.next = NULL;
8465 
8466 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
8467 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8468 
8469 	/* Setup HMAC Parameters */
8470 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8471 	ut_params->auth_xform.next = &ut_params->cipher_xform;
8472 
8473 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
8474 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
8475 
8476 	ut_params->sess = rte_cryptodev_sym_session_create(
8477 			ts_params->session_mpool);
8478 
8479 	/* Create Crypto session*/
8480 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8481 			ut_params->sess, &ut_params->cipher_xform,
8482 			ts_params->session_priv_mpool);
8483 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8484 
8485 	/* Generate Crypto op data structure */
8486 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8487 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8488 	TEST_ASSERT_NOT_NULL(ut_params->op,
8489 			"Failed to allocate symmetric crypto operation struct");
8490 
8491 	/* Set crypto operation data parameters */
8492 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8493 
8494 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
8495 
8496 	sym_op->m_src = ut_params->ibuf;
8497 
8498 	sym_op->cipher.data.offset = 0;
8499 	sym_op->cipher.data.length = QUOTE_512_BYTES;
8500 
8501 	sym_op->auth.data.offset = 0;
8502 	sym_op->auth.data.length = QUOTE_512_BYTES;
8503 	sym_op->auth.digest.data = digest;
8504 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
8505 					QUOTE_512_BYTES);
8506 
8507 	/* Process crypto operation */
8508 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
8509 			ut_params->op);
8510 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
8511 
8512 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8513 			"crypto operation processing failed");
8514 
8515 	/* Validate obuf */
8516 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8517 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
8518 			catch_22_quote,
8519 			QUOTE_512_BYTES,
8520 			"Ciphertext data not as expected");
8521 	/* Make sure memory pointed to by digest hasn't been overwritten */
8522 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8523 			orig_data,
8524 			digest,
8525 			sizeof(orig_data),
8526 			"Memory at digest ptr overwritten unexpectedly");
8527 
8528 	return TEST_SUCCESS;
8529 }
8530 
8531 
8532 static int
8533 test_null_invalid_operation(void)
8534 {
8535 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8536 	struct crypto_unittest_params *ut_params = &unittest_params;
8537 	int ret;
8538 
8539 	/* Setup Cipher Parameters */
8540 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8541 	ut_params->cipher_xform.next = NULL;
8542 
8543 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
8544 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8545 
8546 	ut_params->sess = rte_cryptodev_sym_session_create(
8547 			ts_params->session_mpool);
8548 
8549 	/* Create Crypto session*/
8550 	ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8551 			ut_params->sess, &ut_params->cipher_xform,
8552 			ts_params->session_priv_mpool);
8553 	TEST_ASSERT(ret < 0,
8554 			"Session creation succeeded unexpectedly");
8555 
8556 
8557 	/* Setup HMAC Parameters */
8558 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8559 	ut_params->auth_xform.next = NULL;
8560 
8561 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
8562 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
8563 
8564 	ut_params->sess = rte_cryptodev_sym_session_create(
8565 			ts_params->session_mpool);
8566 
8567 	/* Create Crypto session*/
8568 	ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8569 			ut_params->sess, &ut_params->auth_xform,
8570 			ts_params->session_priv_mpool);
8571 	TEST_ASSERT(ret < 0,
8572 			"Session creation succeeded unexpectedly");
8573 
8574 	return TEST_SUCCESS;
8575 }
8576 
8577 
8578 #define NULL_BURST_LENGTH (32)
8579 
8580 static int
8581 test_null_burst_operation(void)
8582 {
8583 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8584 	struct crypto_unittest_params *ut_params = &unittest_params;
8585 
8586 	unsigned i, burst_len = NULL_BURST_LENGTH;
8587 
8588 	struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
8589 	struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
8590 
8591 	/* Setup Cipher Parameters */
8592 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8593 	ut_params->cipher_xform.next = &ut_params->auth_xform;
8594 
8595 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
8596 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
8597 
8598 	/* Setup HMAC Parameters */
8599 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8600 	ut_params->auth_xform.next = NULL;
8601 
8602 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
8603 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
8604 
8605 	ut_params->sess = rte_cryptodev_sym_session_create(
8606 			ts_params->session_mpool);
8607 
8608 	/* Create Crypto session*/
8609 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
8610 			ut_params->sess, &ut_params->cipher_xform,
8611 			ts_params->session_priv_mpool);
8612 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8613 
8614 	TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
8615 			RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
8616 			burst_len, "failed to generate burst of crypto ops");
8617 
8618 	/* Generate an operation for each mbuf in burst */
8619 	for (i = 0; i < burst_len; i++) {
8620 		struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8621 
8622 		TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
8623 
8624 		unsigned *data = (unsigned *)rte_pktmbuf_append(m,
8625 				sizeof(unsigned));
8626 		*data = i;
8627 
8628 		rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
8629 
8630 		burst[i]->sym->m_src = m;
8631 	}
8632 
8633 	/* Process crypto operation */
8634 	TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
8635 			0, burst, burst_len),
8636 			burst_len,
8637 			"Error enqueuing burst");
8638 
8639 	TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
8640 			0, burst_dequeued, burst_len),
8641 			burst_len,
8642 			"Error dequeuing burst");
8643 
8644 
8645 	for (i = 0; i < burst_len; i++) {
8646 		TEST_ASSERT_EQUAL(
8647 			*rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
8648 			*rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
8649 					uint32_t *),
8650 			"data not as expected");
8651 
8652 		rte_pktmbuf_free(burst[i]->sym->m_src);
8653 		rte_crypto_op_free(burst[i]);
8654 	}
8655 
8656 	return TEST_SUCCESS;
8657 }
8658 
8659 static void
8660 generate_gmac_large_plaintext(uint8_t *data)
8661 {
8662 	uint16_t i;
8663 
8664 	for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
8665 		memcpy(&data[i], &data[0], 32);
8666 }
8667 
8668 static int
8669 create_gmac_operation(enum rte_crypto_auth_operation op,
8670 		const struct gmac_test_data *tdata)
8671 {
8672 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8673 	struct crypto_unittest_params *ut_params = &unittest_params;
8674 	struct rte_crypto_sym_op *sym_op;
8675 
8676 	uint32_t plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
8677 
8678 	/* Generate Crypto op data structure */
8679 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8680 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8681 	TEST_ASSERT_NOT_NULL(ut_params->op,
8682 			"Failed to allocate symmetric crypto operation struct");
8683 
8684 	sym_op = ut_params->op->sym;
8685 
8686 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
8687 			ut_params->ibuf, tdata->gmac_tag.len);
8688 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
8689 			"no room to append digest");
8690 
8691 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
8692 			ut_params->ibuf, plaintext_pad_len);
8693 
8694 	if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
8695 		rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
8696 				tdata->gmac_tag.len);
8697 		debug_hexdump(stdout, "digest:",
8698 				sym_op->auth.digest.data,
8699 				tdata->gmac_tag.len);
8700 	}
8701 
8702 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
8703 			uint8_t *, IV_OFFSET);
8704 
8705 	rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
8706 
8707 	debug_hexdump(stdout, "iv:", iv_ptr, tdata->iv.len);
8708 
8709 	sym_op->cipher.data.length = 0;
8710 	sym_op->cipher.data.offset = 0;
8711 
8712 	sym_op->auth.data.offset = 0;
8713 	sym_op->auth.data.length = tdata->plaintext.len;
8714 
8715 	return 0;
8716 }
8717 
8718 static int create_gmac_session(uint8_t dev_id,
8719 		const struct gmac_test_data *tdata,
8720 		enum rte_crypto_auth_operation auth_op)
8721 {
8722 	uint8_t auth_key[tdata->key.len];
8723 
8724 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8725 	struct crypto_unittest_params *ut_params = &unittest_params;
8726 
8727 	memcpy(auth_key, tdata->key.data, tdata->key.len);
8728 
8729 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8730 	ut_params->auth_xform.next = NULL;
8731 
8732 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
8733 	ut_params->auth_xform.auth.op = auth_op;
8734 	ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
8735 	ut_params->auth_xform.auth.key.length = tdata->key.len;
8736 	ut_params->auth_xform.auth.key.data = auth_key;
8737 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
8738 	ut_params->auth_xform.auth.iv.length = tdata->iv.len;
8739 
8740 
8741 	ut_params->sess = rte_cryptodev_sym_session_create(
8742 			ts_params->session_mpool);
8743 
8744 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
8745 			&ut_params->auth_xform,
8746 			ts_params->session_priv_mpool);
8747 
8748 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
8749 
8750 	return 0;
8751 }
8752 
8753 static int
8754 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
8755 {
8756 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8757 	struct crypto_unittest_params *ut_params = &unittest_params;
8758 
8759 	int retval;
8760 
8761 	uint8_t *auth_tag, *plaintext;
8762 	uint16_t plaintext_pad_len;
8763 
8764 	TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
8765 			      "No GMAC length in the source data");
8766 
8767 	retval = create_gmac_session(ts_params->valid_devs[0],
8768 			tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
8769 
8770 	if (retval < 0)
8771 		return retval;
8772 
8773 	if (tdata->plaintext.len > MBUF_SIZE)
8774 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
8775 	else
8776 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8777 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
8778 			"Failed to allocate input buffer in mempool");
8779 
8780 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8781 			rte_pktmbuf_tailroom(ut_params->ibuf));
8782 
8783 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
8784 	/*
8785 	 * Runtime generate the large plain text instead of use hard code
8786 	 * plain text vector. It is done to avoid create huge source file
8787 	 * with the test vector.
8788 	 */
8789 	if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
8790 		generate_gmac_large_plaintext(tdata->plaintext.data);
8791 
8792 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8793 				plaintext_pad_len);
8794 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
8795 
8796 	memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
8797 	debug_hexdump(stdout, "plaintext:", plaintext,
8798 			tdata->plaintext.len);
8799 
8800 	retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
8801 			tdata);
8802 
8803 	if (retval < 0)
8804 		return retval;
8805 
8806 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8807 
8808 	ut_params->op->sym->m_src = ut_params->ibuf;
8809 
8810 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
8811 			ut_params->op), "failed to process sym crypto op");
8812 
8813 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8814 			"crypto op processing failed");
8815 
8816 	if (ut_params->op->sym->m_dst) {
8817 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
8818 				uint8_t *, plaintext_pad_len);
8819 	} else {
8820 		auth_tag = plaintext + plaintext_pad_len;
8821 	}
8822 
8823 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
8824 
8825 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8826 			auth_tag,
8827 			tdata->gmac_tag.data,
8828 			tdata->gmac_tag.len,
8829 			"GMAC Generated auth tag not as expected");
8830 
8831 	return 0;
8832 }
8833 
8834 static int
8835 test_AES_GMAC_authentication_test_case_1(void)
8836 {
8837 	return test_AES_GMAC_authentication(&gmac_test_case_1);
8838 }
8839 
8840 static int
8841 test_AES_GMAC_authentication_test_case_2(void)
8842 {
8843 	return test_AES_GMAC_authentication(&gmac_test_case_2);
8844 }
8845 
8846 static int
8847 test_AES_GMAC_authentication_test_case_3(void)
8848 {
8849 	return test_AES_GMAC_authentication(&gmac_test_case_3);
8850 }
8851 
8852 static int
8853 test_AES_GMAC_authentication_test_case_4(void)
8854 {
8855 	return test_AES_GMAC_authentication(&gmac_test_case_4);
8856 }
8857 
8858 static int
8859 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
8860 {
8861 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8862 	struct crypto_unittest_params *ut_params = &unittest_params;
8863 	int retval;
8864 	uint32_t plaintext_pad_len;
8865 	uint8_t *plaintext;
8866 
8867 	TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
8868 			      "No GMAC length in the source data");
8869 
8870 	retval = create_gmac_session(ts_params->valid_devs[0],
8871 			tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
8872 
8873 	if (retval < 0)
8874 		return retval;
8875 
8876 	if (tdata->plaintext.len > MBUF_SIZE)
8877 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
8878 	else
8879 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8880 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
8881 			"Failed to allocate input buffer in mempool");
8882 
8883 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8884 			rte_pktmbuf_tailroom(ut_params->ibuf));
8885 
8886 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
8887 
8888 	/*
8889 	 * Runtime generate the large plain text instead of use hard code
8890 	 * plain text vector. It is done to avoid create huge source file
8891 	 * with the test vector.
8892 	 */
8893 	if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
8894 		generate_gmac_large_plaintext(tdata->plaintext.data);
8895 
8896 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8897 				plaintext_pad_len);
8898 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
8899 
8900 	memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
8901 	debug_hexdump(stdout, "plaintext:", plaintext,
8902 			tdata->plaintext.len);
8903 
8904 	retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
8905 			tdata);
8906 
8907 	if (retval < 0)
8908 		return retval;
8909 
8910 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8911 
8912 	ut_params->op->sym->m_src = ut_params->ibuf;
8913 
8914 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
8915 			ut_params->op), "failed to process sym crypto op");
8916 
8917 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8918 			"crypto op processing failed");
8919 
8920 	return 0;
8921 
8922 }
8923 
8924 static int
8925 test_AES_GMAC_authentication_verify_test_case_1(void)
8926 {
8927 	return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
8928 }
8929 
8930 static int
8931 test_AES_GMAC_authentication_verify_test_case_2(void)
8932 {
8933 	return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
8934 }
8935 
8936 static int
8937 test_AES_GMAC_authentication_verify_test_case_3(void)
8938 {
8939 	return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
8940 }
8941 
8942 static int
8943 test_AES_GMAC_authentication_verify_test_case_4(void)
8944 {
8945 	return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
8946 }
8947 
8948 struct test_crypto_vector {
8949 	enum rte_crypto_cipher_algorithm crypto_algo;
8950 
8951 	struct {
8952 		uint8_t data[64];
8953 		unsigned int len;
8954 	} cipher_key;
8955 
8956 	struct {
8957 		uint8_t data[64];
8958 		unsigned int len;
8959 	} iv;
8960 
8961 	struct {
8962 		const uint8_t *data;
8963 		unsigned int len;
8964 	} plaintext;
8965 
8966 	struct {
8967 		const uint8_t *data;
8968 		unsigned int len;
8969 	} ciphertext;
8970 
8971 	enum rte_crypto_auth_algorithm auth_algo;
8972 
8973 	struct {
8974 		uint8_t data[128];
8975 		unsigned int len;
8976 	} auth_key;
8977 
8978 	struct {
8979 		const uint8_t *data;
8980 		unsigned int len;
8981 	} aad;
8982 
8983 	struct {
8984 		uint8_t data[128];
8985 		unsigned int len;
8986 	} digest;
8987 };
8988 
8989 static const struct test_crypto_vector
8990 hmac_sha1_test_crypto_vector = {
8991 	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
8992 	.plaintext = {
8993 		.data = plaintext_hash,
8994 		.len = 512
8995 	},
8996 	.auth_key = {
8997 		.data = {
8998 			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
8999 			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
9000 			0xDE, 0xF4, 0xDE, 0xAD
9001 		},
9002 		.len = 20
9003 	},
9004 	.digest = {
9005 		.data = {
9006 			0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
9007 			0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
9008 			0x3F, 0x91, 0x64, 0x59
9009 		},
9010 		.len = 20
9011 	}
9012 };
9013 
9014 static const struct test_crypto_vector
9015 aes128_gmac_test_vector = {
9016 	.auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
9017 	.plaintext = {
9018 		.data = plaintext_hash,
9019 		.len = 512
9020 	},
9021 	.iv = {
9022 		.data = {
9023 			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
9024 			0x08, 0x09, 0x0A, 0x0B
9025 		},
9026 		.len = 12
9027 	},
9028 	.auth_key = {
9029 		.data = {
9030 			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
9031 			0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
9032 		},
9033 		.len = 16
9034 	},
9035 	.digest = {
9036 		.data = {
9037 			0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
9038 			0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
9039 		},
9040 		.len = 16
9041 	}
9042 };
9043 
9044 static const struct test_crypto_vector
9045 aes128cbc_hmac_sha1_test_vector = {
9046 	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
9047 	.cipher_key = {
9048 		.data = {
9049 			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
9050 			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
9051 		},
9052 		.len = 16
9053 	},
9054 	.iv = {
9055 		.data = {
9056 			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
9057 			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
9058 		},
9059 		.len = 16
9060 	},
9061 	.plaintext = {
9062 		.data = plaintext_hash,
9063 		.len = 512
9064 	},
9065 	.ciphertext = {
9066 		.data = ciphertext512_aes128cbc,
9067 		.len = 512
9068 	},
9069 	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
9070 	.auth_key = {
9071 		.data = {
9072 			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
9073 			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
9074 			0xDE, 0xF4, 0xDE, 0xAD
9075 		},
9076 		.len = 20
9077 	},
9078 	.digest = {
9079 		.data = {
9080 			0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
9081 			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
9082 			0x18, 0x8C, 0x1D, 0x32
9083 		},
9084 		.len = 20
9085 	}
9086 };
9087 
9088 static void
9089 data_corruption(uint8_t *data)
9090 {
9091 	data[0] += 1;
9092 }
9093 
9094 static void
9095 tag_corruption(uint8_t *data, unsigned int tag_offset)
9096 {
9097 	data[tag_offset] += 1;
9098 }
9099 
9100 static int
9101 create_auth_session(struct crypto_unittest_params *ut_params,
9102 		uint8_t dev_id,
9103 		const struct test_crypto_vector *reference,
9104 		enum rte_crypto_auth_operation auth_op)
9105 {
9106 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9107 	uint8_t auth_key[reference->auth_key.len + 1];
9108 
9109 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
9110 
9111 	/* Setup Authentication Parameters */
9112 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
9113 	ut_params->auth_xform.auth.op = auth_op;
9114 	ut_params->auth_xform.next = NULL;
9115 	ut_params->auth_xform.auth.algo = reference->auth_algo;
9116 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
9117 	ut_params->auth_xform.auth.key.data = auth_key;
9118 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
9119 
9120 	/* Create Crypto session*/
9121 	ut_params->sess = rte_cryptodev_sym_session_create(
9122 			ts_params->session_mpool);
9123 
9124 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
9125 				&ut_params->auth_xform,
9126 				ts_params->session_priv_mpool);
9127 
9128 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
9129 
9130 	return 0;
9131 }
9132 
9133 static int
9134 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
9135 		uint8_t dev_id,
9136 		const struct test_crypto_vector *reference,
9137 		enum rte_crypto_auth_operation auth_op,
9138 		enum rte_crypto_cipher_operation cipher_op)
9139 {
9140 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9141 	uint8_t cipher_key[reference->cipher_key.len + 1];
9142 	uint8_t auth_key[reference->auth_key.len + 1];
9143 
9144 	memcpy(cipher_key, reference->cipher_key.data,
9145 			reference->cipher_key.len);
9146 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
9147 
9148 	/* Setup Authentication Parameters */
9149 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
9150 	ut_params->auth_xform.auth.op = auth_op;
9151 	ut_params->auth_xform.auth.algo = reference->auth_algo;
9152 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
9153 	ut_params->auth_xform.auth.key.data = auth_key;
9154 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
9155 
9156 	if (reference->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) {
9157 		ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
9158 		ut_params->auth_xform.auth.iv.length = reference->iv.len;
9159 	} else {
9160 		ut_params->auth_xform.next = &ut_params->cipher_xform;
9161 
9162 		/* Setup Cipher Parameters */
9163 		ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
9164 		ut_params->cipher_xform.next = NULL;
9165 		ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
9166 		ut_params->cipher_xform.cipher.op = cipher_op;
9167 		ut_params->cipher_xform.cipher.key.data = cipher_key;
9168 		ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
9169 		ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
9170 		ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
9171 	}
9172 
9173 	/* Create Crypto session*/
9174 	ut_params->sess = rte_cryptodev_sym_session_create(
9175 			ts_params->session_mpool);
9176 
9177 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
9178 				&ut_params->auth_xform,
9179 				ts_params->session_priv_mpool);
9180 
9181 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
9182 
9183 	return 0;
9184 }
9185 
9186 static int
9187 create_auth_operation(struct crypto_testsuite_params *ts_params,
9188 		struct crypto_unittest_params *ut_params,
9189 		const struct test_crypto_vector *reference,
9190 		unsigned int auth_generate)
9191 {
9192 	/* Generate Crypto op data structure */
9193 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9194 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9195 	TEST_ASSERT_NOT_NULL(ut_params->op,
9196 			"Failed to allocate pktmbuf offload");
9197 
9198 	/* Set crypto operation data parameters */
9199 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9200 
9201 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9202 
9203 	/* set crypto operation source mbuf */
9204 	sym_op->m_src = ut_params->ibuf;
9205 
9206 	/* digest */
9207 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
9208 			ut_params->ibuf, reference->digest.len);
9209 
9210 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
9211 			"no room to append auth tag");
9212 
9213 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
9214 			ut_params->ibuf, reference->plaintext.len);
9215 
9216 	if (auth_generate)
9217 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
9218 	else
9219 		memcpy(sym_op->auth.digest.data,
9220 				reference->digest.data,
9221 				reference->digest.len);
9222 
9223 	debug_hexdump(stdout, "digest:",
9224 			sym_op->auth.digest.data,
9225 			reference->digest.len);
9226 
9227 	sym_op->auth.data.length = reference->plaintext.len;
9228 	sym_op->auth.data.offset = 0;
9229 
9230 	return 0;
9231 }
9232 
9233 static int
9234 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
9235 		struct crypto_unittest_params *ut_params,
9236 		const struct test_crypto_vector *reference,
9237 		unsigned int auth_generate)
9238 {
9239 	/* Generate Crypto op data structure */
9240 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9241 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9242 	TEST_ASSERT_NOT_NULL(ut_params->op,
9243 			"Failed to allocate pktmbuf offload");
9244 
9245 	/* Set crypto operation data parameters */
9246 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9247 
9248 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9249 
9250 	/* set crypto operation source mbuf */
9251 	sym_op->m_src = ut_params->ibuf;
9252 
9253 	/* digest */
9254 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
9255 			ut_params->ibuf, reference->digest.len);
9256 
9257 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
9258 			"no room to append auth tag");
9259 
9260 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
9261 			ut_params->ibuf, reference->ciphertext.len);
9262 
9263 	if (auth_generate)
9264 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
9265 	else
9266 		memcpy(sym_op->auth.digest.data,
9267 				reference->digest.data,
9268 				reference->digest.len);
9269 
9270 	debug_hexdump(stdout, "digest:",
9271 			sym_op->auth.digest.data,
9272 			reference->digest.len);
9273 
9274 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
9275 			reference->iv.data, reference->iv.len);
9276 
9277 	sym_op->cipher.data.length = 0;
9278 	sym_op->cipher.data.offset = 0;
9279 
9280 	sym_op->auth.data.length = reference->plaintext.len;
9281 	sym_op->auth.data.offset = 0;
9282 
9283 	return 0;
9284 }
9285 
9286 static int
9287 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
9288 		struct crypto_unittest_params *ut_params,
9289 		const struct test_crypto_vector *reference,
9290 		unsigned int auth_generate)
9291 {
9292 	/* Generate Crypto op data structure */
9293 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9294 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9295 	TEST_ASSERT_NOT_NULL(ut_params->op,
9296 			"Failed to allocate pktmbuf offload");
9297 
9298 	/* Set crypto operation data parameters */
9299 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9300 
9301 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9302 
9303 	/* set crypto operation source mbuf */
9304 	sym_op->m_src = ut_params->ibuf;
9305 
9306 	/* digest */
9307 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
9308 			ut_params->ibuf, reference->digest.len);
9309 
9310 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
9311 			"no room to append auth tag");
9312 
9313 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
9314 			ut_params->ibuf, reference->ciphertext.len);
9315 
9316 	if (auth_generate)
9317 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
9318 	else
9319 		memcpy(sym_op->auth.digest.data,
9320 				reference->digest.data,
9321 				reference->digest.len);
9322 
9323 	debug_hexdump(stdout, "digest:",
9324 			sym_op->auth.digest.data,
9325 			reference->digest.len);
9326 
9327 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
9328 			reference->iv.data, reference->iv.len);
9329 
9330 	sym_op->cipher.data.length = reference->ciphertext.len;
9331 	sym_op->cipher.data.offset = 0;
9332 
9333 	sym_op->auth.data.length = reference->ciphertext.len;
9334 	sym_op->auth.data.offset = 0;
9335 
9336 	return 0;
9337 }
9338 
9339 static int
9340 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
9341 		struct crypto_unittest_params *ut_params,
9342 		const struct test_crypto_vector *reference)
9343 {
9344 	return create_auth_operation(ts_params, ut_params, reference, 0);
9345 }
9346 
9347 static int
9348 create_auth_verify_GMAC_operation(
9349 		struct crypto_testsuite_params *ts_params,
9350 		struct crypto_unittest_params *ut_params,
9351 		const struct test_crypto_vector *reference)
9352 {
9353 	return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
9354 }
9355 
9356 static int
9357 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
9358 		struct crypto_unittest_params *ut_params,
9359 		const struct test_crypto_vector *reference)
9360 {
9361 	return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
9362 }
9363 
9364 static int
9365 test_authentication_verify_fail_when_data_corruption(
9366 		struct crypto_testsuite_params *ts_params,
9367 		struct crypto_unittest_params *ut_params,
9368 		const struct test_crypto_vector *reference,
9369 		unsigned int data_corrupted)
9370 {
9371 	int retval;
9372 
9373 	uint8_t *plaintext;
9374 
9375 	/* Create session */
9376 	retval = create_auth_session(ut_params,
9377 			ts_params->valid_devs[0],
9378 			reference,
9379 			RTE_CRYPTO_AUTH_OP_VERIFY);
9380 	if (retval < 0)
9381 		return retval;
9382 
9383 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9384 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
9385 			"Failed to allocate input buffer in mempool");
9386 
9387 	/* clear mbuf payload */
9388 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9389 			rte_pktmbuf_tailroom(ut_params->ibuf));
9390 
9391 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9392 			reference->plaintext.len);
9393 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
9394 	memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
9395 
9396 	debug_hexdump(stdout, "plaintext:", plaintext,
9397 		reference->plaintext.len);
9398 
9399 	/* Create operation */
9400 	retval = create_auth_verify_operation(ts_params, ut_params, reference);
9401 
9402 	if (retval < 0)
9403 		return retval;
9404 
9405 	if (data_corrupted)
9406 		data_corruption(plaintext);
9407 	else
9408 		tag_corruption(plaintext, reference->plaintext.len);
9409 
9410 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
9411 			ut_params->op);
9412 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9413 	TEST_ASSERT_EQUAL(ut_params->op->status,
9414 			RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
9415 			"authentication not failed");
9416 
9417 	ut_params->obuf = ut_params->op->sym->m_src;
9418 	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
9419 
9420 	return 0;
9421 }
9422 
9423 static int
9424 test_authentication_verify_GMAC_fail_when_corruption(
9425 		struct crypto_testsuite_params *ts_params,
9426 		struct crypto_unittest_params *ut_params,
9427 		const struct test_crypto_vector *reference,
9428 		unsigned int data_corrupted)
9429 {
9430 	int retval;
9431 	uint8_t *plaintext;
9432 
9433 	/* Create session */
9434 	retval = create_auth_cipher_session(ut_params,
9435 			ts_params->valid_devs[0],
9436 			reference,
9437 			RTE_CRYPTO_AUTH_OP_VERIFY,
9438 			RTE_CRYPTO_CIPHER_OP_DECRYPT);
9439 	if (retval < 0)
9440 		return retval;
9441 
9442 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9443 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
9444 			"Failed to allocate input buffer in mempool");
9445 
9446 	/* clear mbuf payload */
9447 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9448 			rte_pktmbuf_tailroom(ut_params->ibuf));
9449 
9450 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9451 			reference->plaintext.len);
9452 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
9453 	memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
9454 
9455 	debug_hexdump(stdout, "plaintext:", plaintext,
9456 		reference->plaintext.len);
9457 
9458 	/* Create operation */
9459 	retval = create_auth_verify_GMAC_operation(ts_params,
9460 			ut_params,
9461 			reference);
9462 
9463 	if (retval < 0)
9464 		return retval;
9465 
9466 	if (data_corrupted)
9467 		data_corruption(plaintext);
9468 	else
9469 		tag_corruption(plaintext, reference->aad.len);
9470 
9471 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
9472 			ut_params->op);
9473 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9474 	TEST_ASSERT_EQUAL(ut_params->op->status,
9475 			RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
9476 			"authentication not failed");
9477 
9478 	ut_params->obuf = ut_params->op->sym->m_src;
9479 	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
9480 
9481 	return 0;
9482 }
9483 
9484 static int
9485 test_authenticated_decryption_fail_when_corruption(
9486 		struct crypto_testsuite_params *ts_params,
9487 		struct crypto_unittest_params *ut_params,
9488 		const struct test_crypto_vector *reference,
9489 		unsigned int data_corrupted)
9490 {
9491 	int retval;
9492 
9493 	uint8_t *ciphertext;
9494 
9495 	/* Create session */
9496 	retval = create_auth_cipher_session(ut_params,
9497 			ts_params->valid_devs[0],
9498 			reference,
9499 			RTE_CRYPTO_AUTH_OP_VERIFY,
9500 			RTE_CRYPTO_CIPHER_OP_DECRYPT);
9501 	if (retval < 0)
9502 		return retval;
9503 
9504 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9505 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
9506 			"Failed to allocate input buffer in mempool");
9507 
9508 	/* clear mbuf payload */
9509 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9510 			rte_pktmbuf_tailroom(ut_params->ibuf));
9511 
9512 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9513 			reference->ciphertext.len);
9514 	TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
9515 	memcpy(ciphertext, reference->ciphertext.data,
9516 			reference->ciphertext.len);
9517 
9518 	/* Create operation */
9519 	retval = create_cipher_auth_verify_operation(ts_params,
9520 			ut_params,
9521 			reference);
9522 
9523 	if (retval < 0)
9524 		return retval;
9525 
9526 	if (data_corrupted)
9527 		data_corruption(ciphertext);
9528 	else
9529 		tag_corruption(ciphertext, reference->ciphertext.len);
9530 
9531 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
9532 			ut_params->op);
9533 
9534 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9535 	TEST_ASSERT_EQUAL(ut_params->op->status,
9536 			RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
9537 			"authentication not failed");
9538 
9539 	ut_params->obuf = ut_params->op->sym->m_src;
9540 	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
9541 
9542 	return 0;
9543 }
9544 
9545 static int
9546 create_aead_operation_SGL(enum rte_crypto_aead_operation op,
9547 		const struct aead_test_data *tdata,
9548 		void *digest_mem, uint64_t digest_phys)
9549 {
9550 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9551 	struct crypto_unittest_params *ut_params = &unittest_params;
9552 
9553 	const unsigned int auth_tag_len = tdata->auth_tag.len;
9554 	const unsigned int iv_len = tdata->iv.len;
9555 	unsigned int aad_len = tdata->aad.len;
9556 
9557 	/* Generate Crypto op data structure */
9558 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9559 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9560 	TEST_ASSERT_NOT_NULL(ut_params->op,
9561 		"Failed to allocate symmetric crypto operation struct");
9562 
9563 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9564 
9565 	sym_op->aead.digest.data = digest_mem;
9566 
9567 	TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
9568 			"no room to append digest");
9569 
9570 	sym_op->aead.digest.phys_addr = digest_phys;
9571 
9572 	if (op == RTE_CRYPTO_AEAD_OP_DECRYPT) {
9573 		rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
9574 				auth_tag_len);
9575 		debug_hexdump(stdout, "digest:",
9576 				sym_op->aead.digest.data,
9577 				auth_tag_len);
9578 	}
9579 
9580 	/* Append aad data */
9581 	if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
9582 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
9583 				uint8_t *, IV_OFFSET);
9584 
9585 		/* Copy IV 1 byte after the IV pointer, according to the API */
9586 		rte_memcpy(iv_ptr + 1, tdata->iv.data, iv_len);
9587 
9588 		aad_len = RTE_ALIGN_CEIL(aad_len + 18, 16);
9589 
9590 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
9591 				ut_params->ibuf, aad_len);
9592 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
9593 				"no room to prepend aad");
9594 		sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
9595 				ut_params->ibuf);
9596 
9597 		memset(sym_op->aead.aad.data, 0, aad_len);
9598 		/* Copy AAD 18 bytes after the AAD pointer, according to the API */
9599 		rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
9600 
9601 		debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
9602 		debug_hexdump(stdout, "aad:",
9603 				sym_op->aead.aad.data, aad_len);
9604 	} else {
9605 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
9606 				uint8_t *, IV_OFFSET);
9607 
9608 		rte_memcpy(iv_ptr, tdata->iv.data, iv_len);
9609 
9610 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
9611 				ut_params->ibuf, aad_len);
9612 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
9613 				"no room to prepend aad");
9614 		sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
9615 				ut_params->ibuf);
9616 
9617 		memset(sym_op->aead.aad.data, 0, aad_len);
9618 		rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
9619 
9620 		debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
9621 		debug_hexdump(stdout, "aad:",
9622 				sym_op->aead.aad.data, aad_len);
9623 	}
9624 
9625 	sym_op->aead.data.length = tdata->plaintext.len;
9626 	sym_op->aead.data.offset = aad_len;
9627 
9628 	return 0;
9629 }
9630 
9631 #define SGL_MAX_NO	16
9632 
9633 static int
9634 test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
9635 		const int oop, uint32_t fragsz, uint32_t fragsz_oop)
9636 {
9637 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9638 	struct crypto_unittest_params *ut_params = &unittest_params;
9639 	struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
9640 	int retval;
9641 	int to_trn = 0;
9642 	int to_trn_tbl[SGL_MAX_NO];
9643 	int segs = 1;
9644 	unsigned int trn_data = 0;
9645 	uint8_t *plaintext, *ciphertext, *auth_tag;
9646 
9647 	if (fragsz > tdata->plaintext.len)
9648 		fragsz = tdata->plaintext.len;
9649 
9650 	uint16_t plaintext_len = fragsz;
9651 	uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
9652 
9653 	if (fragsz_oop > tdata->plaintext.len)
9654 		frag_size_oop = tdata->plaintext.len;
9655 
9656 	int ecx = 0;
9657 	void *digest_mem = NULL;
9658 
9659 	uint32_t prepend_len = tdata->aad.len;
9660 
9661 	if (tdata->plaintext.len % fragsz != 0) {
9662 		if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
9663 			return 1;
9664 	}	else {
9665 		if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
9666 			return 1;
9667 	}
9668 
9669 	/*
9670 	 * For out-op-place we need to alloc another mbuf
9671 	 */
9672 	if (oop) {
9673 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9674 		rte_pktmbuf_append(ut_params->obuf,
9675 				frag_size_oop + prepend_len);
9676 		buf_oop = ut_params->obuf;
9677 	}
9678 
9679 	/* Create AEAD session */
9680 	retval = create_aead_session(ts_params->valid_devs[0],
9681 			tdata->algo,
9682 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
9683 			tdata->key.data, tdata->key.len,
9684 			tdata->aad.len, tdata->auth_tag.len,
9685 			tdata->iv.len);
9686 	if (retval < 0)
9687 		return retval;
9688 
9689 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9690 
9691 	/* clear mbuf payload */
9692 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9693 			rte_pktmbuf_tailroom(ut_params->ibuf));
9694 
9695 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9696 			plaintext_len);
9697 
9698 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
9699 
9700 	trn_data += plaintext_len;
9701 
9702 	buf = ut_params->ibuf;
9703 
9704 	/*
9705 	 * Loop until no more fragments
9706 	 */
9707 
9708 	while (trn_data < tdata->plaintext.len) {
9709 		++segs;
9710 		to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
9711 				(tdata->plaintext.len - trn_data) : fragsz;
9712 
9713 		to_trn_tbl[ecx++] = to_trn;
9714 
9715 		buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9716 		buf = buf->next;
9717 
9718 		memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
9719 				rte_pktmbuf_tailroom(buf));
9720 
9721 		/* OOP */
9722 		if (oop && !fragsz_oop) {
9723 			buf_last_oop = buf_oop->next =
9724 					rte_pktmbuf_alloc(ts_params->mbuf_pool);
9725 			buf_oop = buf_oop->next;
9726 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
9727 					0, rte_pktmbuf_tailroom(buf_oop));
9728 			rte_pktmbuf_append(buf_oop, to_trn);
9729 		}
9730 
9731 		plaintext = (uint8_t *)rte_pktmbuf_append(buf,
9732 				to_trn);
9733 
9734 		memcpy(plaintext, tdata->plaintext.data + trn_data,
9735 				to_trn);
9736 		trn_data += to_trn;
9737 		if (trn_data  == tdata->plaintext.len) {
9738 			if (oop) {
9739 				if (!fragsz_oop)
9740 					digest_mem = rte_pktmbuf_append(buf_oop,
9741 						tdata->auth_tag.len);
9742 			} else
9743 				digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
9744 					tdata->auth_tag.len);
9745 		}
9746 	}
9747 
9748 	uint64_t digest_phys = 0;
9749 
9750 	ut_params->ibuf->nb_segs = segs;
9751 
9752 	segs = 1;
9753 	if (fragsz_oop && oop) {
9754 		to_trn = 0;
9755 		ecx = 0;
9756 
9757 		if (frag_size_oop == tdata->plaintext.len) {
9758 			digest_mem = rte_pktmbuf_append(ut_params->obuf,
9759 				tdata->auth_tag.len);
9760 
9761 			digest_phys = rte_pktmbuf_iova_offset(
9762 					ut_params->obuf,
9763 					tdata->plaintext.len + prepend_len);
9764 		}
9765 
9766 		trn_data = frag_size_oop;
9767 		while (trn_data < tdata->plaintext.len) {
9768 			++segs;
9769 			to_trn =
9770 				(tdata->plaintext.len - trn_data <
9771 						frag_size_oop) ?
9772 				(tdata->plaintext.len - trn_data) :
9773 						frag_size_oop;
9774 
9775 			to_trn_tbl[ecx++] = to_trn;
9776 
9777 			buf_last_oop = buf_oop->next =
9778 					rte_pktmbuf_alloc(ts_params->mbuf_pool);
9779 			buf_oop = buf_oop->next;
9780 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
9781 					0, rte_pktmbuf_tailroom(buf_oop));
9782 			rte_pktmbuf_append(buf_oop, to_trn);
9783 
9784 			trn_data += to_trn;
9785 
9786 			if (trn_data  == tdata->plaintext.len) {
9787 				digest_mem = rte_pktmbuf_append(buf_oop,
9788 					tdata->auth_tag.len);
9789 			}
9790 		}
9791 
9792 		ut_params->obuf->nb_segs = segs;
9793 	}
9794 
9795 	/*
9796 	 * Place digest at the end of the last buffer
9797 	 */
9798 	if (!digest_phys)
9799 		digest_phys = rte_pktmbuf_iova(buf) + to_trn;
9800 	if (oop && buf_last_oop)
9801 		digest_phys = rte_pktmbuf_iova(buf_last_oop) + to_trn;
9802 
9803 	if (!digest_mem && !oop) {
9804 		digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9805 				+ tdata->auth_tag.len);
9806 		digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf,
9807 				tdata->plaintext.len);
9808 	}
9809 
9810 	/* Create AEAD operation */
9811 	retval = create_aead_operation_SGL(RTE_CRYPTO_AEAD_OP_ENCRYPT,
9812 			tdata, digest_mem, digest_phys);
9813 
9814 	if (retval < 0)
9815 		return retval;
9816 
9817 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9818 
9819 	ut_params->op->sym->m_src = ut_params->ibuf;
9820 	if (oop)
9821 		ut_params->op->sym->m_dst = ut_params->obuf;
9822 
9823 	/* Process crypto operation */
9824 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9825 			ut_params->op), "failed to process sym crypto op");
9826 
9827 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9828 			"crypto op processing failed");
9829 
9830 
9831 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
9832 			uint8_t *, prepend_len);
9833 	if (oop) {
9834 		ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
9835 				uint8_t *, prepend_len);
9836 	}
9837 
9838 	if (fragsz_oop)
9839 		fragsz = fragsz_oop;
9840 
9841 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9842 			ciphertext,
9843 			tdata->ciphertext.data,
9844 			fragsz,
9845 			"Ciphertext data not as expected");
9846 
9847 	buf = ut_params->op->sym->m_src->next;
9848 	if (oop)
9849 		buf = ut_params->op->sym->m_dst->next;
9850 
9851 	unsigned int off = fragsz;
9852 
9853 	ecx = 0;
9854 	while (buf) {
9855 		ciphertext = rte_pktmbuf_mtod(buf,
9856 				uint8_t *);
9857 
9858 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
9859 				ciphertext,
9860 				tdata->ciphertext.data + off,
9861 				to_trn_tbl[ecx],
9862 				"Ciphertext data not as expected");
9863 
9864 		off += to_trn_tbl[ecx++];
9865 		buf = buf->next;
9866 	}
9867 
9868 	auth_tag = digest_mem;
9869 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9870 			auth_tag,
9871 			tdata->auth_tag.data,
9872 			tdata->auth_tag.len,
9873 			"Generated auth tag not as expected");
9874 
9875 	return 0;
9876 }
9877 
9878 static int
9879 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
9880 {
9881 	return test_authenticated_encryption_SGL(
9882 			&gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
9883 }
9884 
9885 static int
9886 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
9887 {
9888 	return test_authenticated_encryption_SGL(
9889 			&gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
9890 }
9891 
9892 static int
9893 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
9894 {
9895 	return test_authenticated_encryption_SGL(
9896 			&gcm_test_case_8, OUT_OF_PLACE, 400,
9897 			gcm_test_case_8.plaintext.len);
9898 }
9899 
9900 static int
9901 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
9902 {
9903 
9904 	return test_authenticated_encryption_SGL(
9905 			&gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
9906 }
9907 
9908 static int
9909 test_authentication_verify_fail_when_data_corrupted(
9910 		struct crypto_testsuite_params *ts_params,
9911 		struct crypto_unittest_params *ut_params,
9912 		const struct test_crypto_vector *reference)
9913 {
9914 	return test_authentication_verify_fail_when_data_corruption(
9915 			ts_params, ut_params, reference, 1);
9916 }
9917 
9918 static int
9919 test_authentication_verify_fail_when_tag_corrupted(
9920 		struct crypto_testsuite_params *ts_params,
9921 		struct crypto_unittest_params *ut_params,
9922 		const struct test_crypto_vector *reference)
9923 {
9924 	return test_authentication_verify_fail_when_data_corruption(
9925 			ts_params, ut_params, reference, 0);
9926 }
9927 
9928 static int
9929 test_authentication_verify_GMAC_fail_when_data_corrupted(
9930 		struct crypto_testsuite_params *ts_params,
9931 		struct crypto_unittest_params *ut_params,
9932 		const struct test_crypto_vector *reference)
9933 {
9934 	return test_authentication_verify_GMAC_fail_when_corruption(
9935 			ts_params, ut_params, reference, 1);
9936 }
9937 
9938 static int
9939 test_authentication_verify_GMAC_fail_when_tag_corrupted(
9940 		struct crypto_testsuite_params *ts_params,
9941 		struct crypto_unittest_params *ut_params,
9942 		const struct test_crypto_vector *reference)
9943 {
9944 	return test_authentication_verify_GMAC_fail_when_corruption(
9945 			ts_params, ut_params, reference, 0);
9946 }
9947 
9948 static int
9949 test_authenticated_decryption_fail_when_data_corrupted(
9950 		struct crypto_testsuite_params *ts_params,
9951 		struct crypto_unittest_params *ut_params,
9952 		const struct test_crypto_vector *reference)
9953 {
9954 	return test_authenticated_decryption_fail_when_corruption(
9955 			ts_params, ut_params, reference, 1);
9956 }
9957 
9958 static int
9959 test_authenticated_decryption_fail_when_tag_corrupted(
9960 		struct crypto_testsuite_params *ts_params,
9961 		struct crypto_unittest_params *ut_params,
9962 		const struct test_crypto_vector *reference)
9963 {
9964 	return test_authenticated_decryption_fail_when_corruption(
9965 			ts_params, ut_params, reference, 0);
9966 }
9967 
9968 static int
9969 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
9970 {
9971 	return test_authentication_verify_fail_when_data_corrupted(
9972 			&testsuite_params, &unittest_params,
9973 			&hmac_sha1_test_crypto_vector);
9974 }
9975 
9976 static int
9977 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
9978 {
9979 	return test_authentication_verify_fail_when_tag_corrupted(
9980 			&testsuite_params, &unittest_params,
9981 			&hmac_sha1_test_crypto_vector);
9982 }
9983 
9984 static int
9985 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
9986 {
9987 	return test_authentication_verify_GMAC_fail_when_data_corrupted(
9988 			&testsuite_params, &unittest_params,
9989 			&aes128_gmac_test_vector);
9990 }
9991 
9992 static int
9993 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
9994 {
9995 	return test_authentication_verify_GMAC_fail_when_tag_corrupted(
9996 			&testsuite_params, &unittest_params,
9997 			&aes128_gmac_test_vector);
9998 }
9999 
10000 static int
10001 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
10002 {
10003 	return test_authenticated_decryption_fail_when_data_corrupted(
10004 			&testsuite_params,
10005 			&unittest_params,
10006 			&aes128cbc_hmac_sha1_test_vector);
10007 }
10008 
10009 static int
10010 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
10011 {
10012 	return test_authenticated_decryption_fail_when_tag_corrupted(
10013 			&testsuite_params,
10014 			&unittest_params,
10015 			&aes128cbc_hmac_sha1_test_vector);
10016 }
10017 
10018 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
10019 
10020 /* global AESNI slave IDs for the scheduler test */
10021 uint8_t aesni_ids[2];
10022 
10023 static int
10024 test_scheduler_attach_slave_op(void)
10025 {
10026 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10027 	uint8_t sched_id = ts_params->valid_devs[0];
10028 	uint32_t nb_devs, i, nb_devs_attached = 0;
10029 	int ret;
10030 	char vdev_name[32];
10031 
10032 	/* create 2 AESNI_MB if necessary */
10033 	nb_devs = rte_cryptodev_device_count_by_driver(
10034 			rte_cryptodev_driver_id_get(
10035 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
10036 	if (nb_devs < 2) {
10037 		for (i = nb_devs; i < 2; i++) {
10038 			snprintf(vdev_name, sizeof(vdev_name), "%s_%u",
10039 					RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
10040 					i);
10041 			ret = rte_vdev_init(vdev_name, NULL);
10042 
10043 			TEST_ASSERT(ret == 0,
10044 				"Failed to create instance %u of"
10045 				" pmd : %s",
10046 				i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
10047 		}
10048 	}
10049 
10050 	/* attach 2 AESNI_MB cdevs */
10051 	for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
10052 			i++) {
10053 		struct rte_cryptodev_info info;
10054 		unsigned int session_size;
10055 
10056 		rte_cryptodev_info_get(i, &info);
10057 		if (info.driver_id != rte_cryptodev_driver_id_get(
10058 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)))
10059 			continue;
10060 
10061 		session_size = rte_cryptodev_sym_get_private_session_size(i);
10062 		/*
10063 		 * Create the session mempool again, since now there are new devices
10064 		 * to use the mempool.
10065 		 */
10066 		if (ts_params->session_mpool) {
10067 			rte_mempool_free(ts_params->session_mpool);
10068 			ts_params->session_mpool = NULL;
10069 		}
10070 		if (ts_params->session_priv_mpool) {
10071 			rte_mempool_free(ts_params->session_priv_mpool);
10072 			ts_params->session_priv_mpool = NULL;
10073 		}
10074 
10075 		if (info.sym.max_nb_sessions != 0 &&
10076 				info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
10077 			RTE_LOG(ERR, USER1,
10078 					"Device does not support "
10079 					"at least %u sessions\n",
10080 					MAX_NB_SESSIONS);
10081 			return TEST_FAILED;
10082 		}
10083 		/*
10084 		 * Create mempool with maximum number of sessions,
10085 		 * to include the session headers
10086 		 */
10087 		if (ts_params->session_mpool == NULL) {
10088 			ts_params->session_mpool =
10089 				rte_cryptodev_sym_session_pool_create(
10090 						"test_sess_mp",
10091 						MAX_NB_SESSIONS, 0, 0, 0,
10092 						SOCKET_ID_ANY);
10093 			TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
10094 					"session mempool allocation failed");
10095 		}
10096 
10097 		/*
10098 		 * Create mempool with maximum number of sessions,
10099 		 * to include device specific session private data
10100 		 */
10101 		if (ts_params->session_priv_mpool == NULL) {
10102 			ts_params->session_priv_mpool = rte_mempool_create(
10103 					"test_sess_mp_priv",
10104 					MAX_NB_SESSIONS,
10105 					session_size,
10106 					0, 0, NULL, NULL, NULL,
10107 					NULL, SOCKET_ID_ANY,
10108 					0);
10109 
10110 			TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
10111 					"session mempool allocation failed");
10112 		}
10113 
10114 		ts_params->qp_conf.mp_session = ts_params->session_mpool;
10115 		ts_params->qp_conf.mp_session_private =
10116 				ts_params->session_priv_mpool;
10117 
10118 		ret = rte_cryptodev_scheduler_slave_attach(sched_id,
10119 				(uint8_t)i);
10120 
10121 		TEST_ASSERT(ret == 0,
10122 			"Failed to attach device %u of pmd : %s", i,
10123 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
10124 
10125 		aesni_ids[nb_devs_attached] = (uint8_t)i;
10126 
10127 		nb_devs_attached++;
10128 	}
10129 
10130 	return 0;
10131 }
10132 
10133 static int
10134 test_scheduler_detach_slave_op(void)
10135 {
10136 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10137 	uint8_t sched_id = ts_params->valid_devs[0];
10138 	uint32_t i;
10139 	int ret;
10140 
10141 	for (i = 0; i < 2; i++) {
10142 		ret = rte_cryptodev_scheduler_slave_detach(sched_id,
10143 				aesni_ids[i]);
10144 		TEST_ASSERT(ret == 0,
10145 			"Failed to detach device %u", aesni_ids[i]);
10146 	}
10147 
10148 	return 0;
10149 }
10150 
10151 static int
10152 test_scheduler_mode_op(enum rte_cryptodev_scheduler_mode scheduler_mode)
10153 {
10154 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10155 	uint8_t sched_id = ts_params->valid_devs[0];
10156 	/* set mode */
10157 	return rte_cryptodev_scheduler_mode_set(sched_id,
10158 		scheduler_mode);
10159 }
10160 
10161 static int
10162 test_scheduler_mode_roundrobin_op(void)
10163 {
10164 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_ROUNDROBIN) ==
10165 			0, "Failed to set roundrobin mode");
10166 	return 0;
10167 
10168 }
10169 
10170 static int
10171 test_scheduler_mode_multicore_op(void)
10172 {
10173 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_MULTICORE) ==
10174 			0, "Failed to set multicore mode");
10175 
10176 	return 0;
10177 }
10178 
10179 static int
10180 test_scheduler_mode_failover_op(void)
10181 {
10182 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_FAILOVER) ==
10183 			0, "Failed to set failover mode");
10184 
10185 	return 0;
10186 }
10187 
10188 static int
10189 test_scheduler_mode_pkt_size_distr_op(void)
10190 {
10191 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_PKT_SIZE_DISTR) ==
10192 			0, "Failed to set pktsize mode");
10193 
10194 	return 0;
10195 }
10196 
10197 static struct unit_test_suite cryptodev_scheduler_testsuite  = {
10198 	.suite_name = "Crypto Device Scheduler Unit Test Suite",
10199 	.setup = testsuite_setup,
10200 	.teardown = testsuite_teardown,
10201 	.unit_test_cases = {
10202 		/* Multi Core */
10203 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
10204 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_multicore_op),
10205 		TEST_CASE_ST(ut_setup, ut_teardown,
10206 					test_AES_chain_scheduler_all),
10207 		TEST_CASE_ST(ut_setup, ut_teardown,
10208 					test_AES_cipheronly_scheduler_all),
10209 		TEST_CASE_ST(ut_setup, ut_teardown,
10210 					test_authonly_scheduler_all),
10211 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
10212 
10213 		/* Round Robin */
10214 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
10215 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_roundrobin_op),
10216 		TEST_CASE_ST(ut_setup, ut_teardown,
10217 				test_AES_chain_scheduler_all),
10218 		TEST_CASE_ST(ut_setup, ut_teardown,
10219 				test_AES_cipheronly_scheduler_all),
10220 		TEST_CASE_ST(ut_setup, ut_teardown,
10221 				test_authonly_scheduler_all),
10222 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
10223 
10224 		/* Fail over */
10225 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
10226 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_failover_op),
10227 		TEST_CASE_ST(ut_setup, ut_teardown,
10228 					test_AES_chain_scheduler_all),
10229 		TEST_CASE_ST(ut_setup, ut_teardown,
10230 					test_AES_cipheronly_scheduler_all),
10231 		TEST_CASE_ST(ut_setup, ut_teardown,
10232 					test_authonly_scheduler_all),
10233 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
10234 
10235 		/* PKT SIZE */
10236 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
10237 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_pkt_size_distr_op),
10238 		TEST_CASE_ST(ut_setup, ut_teardown,
10239 					test_AES_chain_scheduler_all),
10240 		TEST_CASE_ST(ut_setup, ut_teardown,
10241 					test_AES_cipheronly_scheduler_all),
10242 		TEST_CASE_ST(ut_setup, ut_teardown,
10243 					test_authonly_scheduler_all),
10244 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
10245 
10246 		TEST_CASES_END() /**< NULL terminate unit test array */
10247 	}
10248 };
10249 
10250 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
10251 
10252 static struct unit_test_suite cryptodev_qat_testsuite  = {
10253 	.suite_name = "Crypto QAT Unit Test Suite",
10254 	.setup = testsuite_setup,
10255 	.teardown = testsuite_teardown,
10256 	.unit_test_cases = {
10257 		TEST_CASE_ST(ut_setup, ut_teardown,
10258 				test_device_configure_invalid_dev_id),
10259 		TEST_CASE_ST(ut_setup, ut_teardown,
10260 				test_device_configure_invalid_queue_pair_ids),
10261 		TEST_CASE_ST(ut_setup, ut_teardown,
10262 				test_queue_pair_descriptor_setup),
10263 		TEST_CASE_ST(ut_setup, ut_teardown,
10264 				test_multi_session),
10265 
10266 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
10267 		TEST_CASE_ST(ut_setup, ut_teardown,
10268 						test_AES_cipheronly_qat_all),
10269 		TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
10270 		TEST_CASE_ST(ut_setup, ut_teardown,
10271 						test_3DES_cipheronly_qat_all),
10272 		TEST_CASE_ST(ut_setup, ut_teardown,
10273 						test_DES_cipheronly_qat_all),
10274 		TEST_CASE_ST(ut_setup, ut_teardown,
10275 						test_AES_docsis_qat_all),
10276 		TEST_CASE_ST(ut_setup, ut_teardown,
10277 						test_DES_docsis_qat_all),
10278 		TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_qat_all),
10279 		TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
10280 
10281 		/** AES CCM Authenticated Encryption 128 bits key */
10282 		TEST_CASE_ST(ut_setup, ut_teardown,
10283 			test_AES_CCM_authenticated_encryption_test_case_128_1),
10284 		TEST_CASE_ST(ut_setup, ut_teardown,
10285 			test_AES_CCM_authenticated_encryption_test_case_128_2),
10286 		TEST_CASE_ST(ut_setup, ut_teardown,
10287 			test_AES_CCM_authenticated_encryption_test_case_128_3),
10288 
10289 		/** AES CCM Authenticated Decryption 128 bits key*/
10290 		TEST_CASE_ST(ut_setup, ut_teardown,
10291 			test_AES_CCM_authenticated_decryption_test_case_128_1),
10292 		TEST_CASE_ST(ut_setup, ut_teardown,
10293 			test_AES_CCM_authenticated_decryption_test_case_128_2),
10294 		TEST_CASE_ST(ut_setup, ut_teardown,
10295 			test_AES_CCM_authenticated_decryption_test_case_128_3),
10296 
10297 		/** AES GCM Authenticated Encryption */
10298 		TEST_CASE_ST(ut_setup, ut_teardown,
10299 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
10300 		TEST_CASE_ST(ut_setup, ut_teardown,
10301 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
10302 		TEST_CASE_ST(ut_setup, ut_teardown,
10303 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
10304 		TEST_CASE_ST(ut_setup, ut_teardown,
10305 			test_AES_GCM_authenticated_encryption_test_case_1),
10306 		TEST_CASE_ST(ut_setup, ut_teardown,
10307 			test_AES_GCM_authenticated_encryption_test_case_2),
10308 		TEST_CASE_ST(ut_setup, ut_teardown,
10309 			test_AES_GCM_authenticated_encryption_test_case_3),
10310 		TEST_CASE_ST(ut_setup, ut_teardown,
10311 			test_AES_GCM_authenticated_encryption_test_case_4),
10312 		TEST_CASE_ST(ut_setup, ut_teardown,
10313 			test_AES_GCM_authenticated_encryption_test_case_5),
10314 		TEST_CASE_ST(ut_setup, ut_teardown,
10315 			test_AES_GCM_authenticated_encryption_test_case_6),
10316 		TEST_CASE_ST(ut_setup, ut_teardown,
10317 			test_AES_GCM_authenticated_encryption_test_case_7),
10318 
10319 		/** AES GCM Authenticated Decryption */
10320 		TEST_CASE_ST(ut_setup, ut_teardown,
10321 			test_AES_GCM_authenticated_decryption_test_case_1),
10322 		TEST_CASE_ST(ut_setup, ut_teardown,
10323 			test_AES_GCM_authenticated_decryption_test_case_2),
10324 		TEST_CASE_ST(ut_setup, ut_teardown,
10325 			test_AES_GCM_authenticated_decryption_test_case_3),
10326 		TEST_CASE_ST(ut_setup, ut_teardown,
10327 			test_AES_GCM_authenticated_decryption_test_case_4),
10328 		TEST_CASE_ST(ut_setup, ut_teardown,
10329 			test_AES_GCM_authenticated_decryption_test_case_5),
10330 		TEST_CASE_ST(ut_setup, ut_teardown,
10331 			test_AES_GCM_authenticated_decryption_test_case_6),
10332 		TEST_CASE_ST(ut_setup, ut_teardown,
10333 			test_AES_GCM_authenticated_decryption_test_case_7),
10334 
10335 		/** AES GCM Authenticated Encryption 192 bits key */
10336 		TEST_CASE_ST(ut_setup, ut_teardown,
10337 			test_AES_GCM_auth_encryption_test_case_192_1),
10338 		TEST_CASE_ST(ut_setup, ut_teardown,
10339 			test_AES_GCM_auth_encryption_test_case_192_2),
10340 		TEST_CASE_ST(ut_setup, ut_teardown,
10341 			test_AES_GCM_auth_encryption_test_case_192_3),
10342 		TEST_CASE_ST(ut_setup, ut_teardown,
10343 			test_AES_GCM_auth_encryption_test_case_192_4),
10344 		TEST_CASE_ST(ut_setup, ut_teardown,
10345 			test_AES_GCM_auth_encryption_test_case_192_5),
10346 		TEST_CASE_ST(ut_setup, ut_teardown,
10347 			test_AES_GCM_auth_encryption_test_case_192_6),
10348 		TEST_CASE_ST(ut_setup, ut_teardown,
10349 			test_AES_GCM_auth_encryption_test_case_192_7),
10350 
10351 		/** AES GCM Authenticated Decryption 192 bits key */
10352 		TEST_CASE_ST(ut_setup, ut_teardown,
10353 			test_AES_GCM_auth_decryption_test_case_192_1),
10354 		TEST_CASE_ST(ut_setup, ut_teardown,
10355 			test_AES_GCM_auth_decryption_test_case_192_2),
10356 		TEST_CASE_ST(ut_setup, ut_teardown,
10357 			test_AES_GCM_auth_decryption_test_case_192_3),
10358 		TEST_CASE_ST(ut_setup, ut_teardown,
10359 			test_AES_GCM_auth_decryption_test_case_192_4),
10360 		TEST_CASE_ST(ut_setup, ut_teardown,
10361 			test_AES_GCM_auth_decryption_test_case_192_5),
10362 		TEST_CASE_ST(ut_setup, ut_teardown,
10363 			test_AES_GCM_auth_decryption_test_case_192_6),
10364 		TEST_CASE_ST(ut_setup, ut_teardown,
10365 			test_AES_GCM_auth_decryption_test_case_192_7),
10366 
10367 		/** AES GCM Authenticated Encryption 256 bits key */
10368 		TEST_CASE_ST(ut_setup, ut_teardown,
10369 			test_AES_GCM_auth_encryption_test_case_256_1),
10370 		TEST_CASE_ST(ut_setup, ut_teardown,
10371 			test_AES_GCM_auth_encryption_test_case_256_2),
10372 		TEST_CASE_ST(ut_setup, ut_teardown,
10373 			test_AES_GCM_auth_encryption_test_case_256_3),
10374 		TEST_CASE_ST(ut_setup, ut_teardown,
10375 			test_AES_GCM_auth_encryption_test_case_256_4),
10376 		TEST_CASE_ST(ut_setup, ut_teardown,
10377 			test_AES_GCM_auth_encryption_test_case_256_5),
10378 		TEST_CASE_ST(ut_setup, ut_teardown,
10379 			test_AES_GCM_auth_encryption_test_case_256_6),
10380 		TEST_CASE_ST(ut_setup, ut_teardown,
10381 			test_AES_GCM_auth_encryption_test_case_256_7),
10382 
10383 		/** AES GMAC Authentication */
10384 		TEST_CASE_ST(ut_setup, ut_teardown,
10385 			test_AES_GMAC_authentication_test_case_1),
10386 		TEST_CASE_ST(ut_setup, ut_teardown,
10387 			test_AES_GMAC_authentication_verify_test_case_1),
10388 		TEST_CASE_ST(ut_setup, ut_teardown,
10389 			test_AES_GMAC_authentication_test_case_2),
10390 		TEST_CASE_ST(ut_setup, ut_teardown,
10391 			test_AES_GMAC_authentication_verify_test_case_2),
10392 		TEST_CASE_ST(ut_setup, ut_teardown,
10393 			test_AES_GMAC_authentication_test_case_3),
10394 		TEST_CASE_ST(ut_setup, ut_teardown,
10395 			test_AES_GMAC_authentication_verify_test_case_3),
10396 
10397 		/** SNOW 3G encrypt only (UEA2) */
10398 		TEST_CASE_ST(ut_setup, ut_teardown,
10399 			test_snow3g_encryption_test_case_1),
10400 		TEST_CASE_ST(ut_setup, ut_teardown,
10401 			test_snow3g_encryption_test_case_2),
10402 		TEST_CASE_ST(ut_setup, ut_teardown,
10403 			test_snow3g_encryption_test_case_3),
10404 		TEST_CASE_ST(ut_setup, ut_teardown,
10405 			test_snow3g_encryption_test_case_4),
10406 		TEST_CASE_ST(ut_setup, ut_teardown,
10407 			test_snow3g_encryption_test_case_5),
10408 
10409 		TEST_CASE_ST(ut_setup, ut_teardown,
10410 			test_snow3g_encryption_test_case_1_oop),
10411 		TEST_CASE_ST(ut_setup, ut_teardown,
10412 			test_snow3g_decryption_test_case_1_oop),
10413 
10414 		/** SNOW 3G generate auth, then encrypt (UEA2) */
10415 		TEST_CASE_ST(ut_setup, ut_teardown,
10416 			test_snow3g_auth_cipher_test_case_1),
10417 		TEST_CASE_ST(ut_setup, ut_teardown,
10418 			test_snow3g_auth_cipher_test_case_2),
10419 		TEST_CASE_ST(ut_setup, ut_teardown,
10420 			test_snow3g_auth_cipher_test_case_2_oop),
10421 		TEST_CASE_ST(ut_setup, ut_teardown,
10422 			test_snow3g_auth_cipher_part_digest_enc),
10423 		TEST_CASE_ST(ut_setup, ut_teardown,
10424 			test_snow3g_auth_cipher_part_digest_enc_oop),
10425 		TEST_CASE_ST(ut_setup, ut_teardown,
10426 			test_snow3g_auth_cipher_test_case_3_sgl),
10427 		TEST_CASE_ST(ut_setup, ut_teardown,
10428 			test_snow3g_auth_cipher_test_case_3_oop_sgl),
10429 		TEST_CASE_ST(ut_setup, ut_teardown,
10430 			test_snow3g_auth_cipher_part_digest_enc_sgl),
10431 		TEST_CASE_ST(ut_setup, ut_teardown,
10432 			test_snow3g_auth_cipher_part_digest_enc_oop_sgl),
10433 
10434 		/** SNOW 3G decrypt (UEA2), then verify auth */
10435 		TEST_CASE_ST(ut_setup, ut_teardown,
10436 			test_snow3g_auth_cipher_verify_test_case_1),
10437 		TEST_CASE_ST(ut_setup, ut_teardown,
10438 			test_snow3g_auth_cipher_verify_test_case_2),
10439 		TEST_CASE_ST(ut_setup, ut_teardown,
10440 			test_snow3g_auth_cipher_verify_test_case_2_oop),
10441 		TEST_CASE_ST(ut_setup, ut_teardown,
10442 			test_snow3g_auth_cipher_verify_part_digest_enc),
10443 		TEST_CASE_ST(ut_setup, ut_teardown,
10444 			test_snow3g_auth_cipher_verify_part_digest_enc_oop),
10445 		TEST_CASE_ST(ut_setup, ut_teardown,
10446 			test_snow3g_auth_cipher_verify_test_case_3_sgl),
10447 		TEST_CASE_ST(ut_setup, ut_teardown,
10448 			test_snow3g_auth_cipher_verify_test_case_3_oop_sgl),
10449 		TEST_CASE_ST(ut_setup, ut_teardown,
10450 			test_snow3g_auth_cipher_verify_part_digest_enc_sgl),
10451 		TEST_CASE_ST(ut_setup, ut_teardown,
10452 			test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl),
10453 
10454 		/** SNOW 3G decrypt only (UEA2) */
10455 		TEST_CASE_ST(ut_setup, ut_teardown,
10456 			test_snow3g_decryption_test_case_1),
10457 		TEST_CASE_ST(ut_setup, ut_teardown,
10458 			test_snow3g_decryption_test_case_2),
10459 		TEST_CASE_ST(ut_setup, ut_teardown,
10460 			test_snow3g_decryption_test_case_3),
10461 		TEST_CASE_ST(ut_setup, ut_teardown,
10462 			test_snow3g_decryption_test_case_4),
10463 		TEST_CASE_ST(ut_setup, ut_teardown,
10464 			test_snow3g_decryption_test_case_5),
10465 		TEST_CASE_ST(ut_setup, ut_teardown,
10466 			test_snow3g_decryption_with_digest_test_case_1),
10467 		TEST_CASE_ST(ut_setup, ut_teardown,
10468 			test_snow3g_hash_generate_test_case_1),
10469 		TEST_CASE_ST(ut_setup, ut_teardown,
10470 			test_snow3g_hash_generate_test_case_2),
10471 		TEST_CASE_ST(ut_setup, ut_teardown,
10472 			test_snow3g_hash_generate_test_case_3),
10473 		TEST_CASE_ST(ut_setup, ut_teardown,
10474 			test_snow3g_hash_verify_test_case_1),
10475 		TEST_CASE_ST(ut_setup, ut_teardown,
10476 			test_snow3g_hash_verify_test_case_2),
10477 		TEST_CASE_ST(ut_setup, ut_teardown,
10478 			test_snow3g_hash_verify_test_case_3),
10479 		TEST_CASE_ST(ut_setup, ut_teardown,
10480 			test_snow3g_cipher_auth_test_case_1),
10481 		TEST_CASE_ST(ut_setup, ut_teardown,
10482 			test_snow3g_auth_cipher_with_digest_test_case_1),
10483 
10484 		/** ZUC encrypt only (EEA3) */
10485 		TEST_CASE_ST(ut_setup, ut_teardown,
10486 			test_zuc_encryption_test_case_1),
10487 		TEST_CASE_ST(ut_setup, ut_teardown,
10488 			test_zuc_encryption_test_case_2),
10489 		TEST_CASE_ST(ut_setup, ut_teardown,
10490 			test_zuc_encryption_test_case_3),
10491 		TEST_CASE_ST(ut_setup, ut_teardown,
10492 			test_zuc_encryption_test_case_4),
10493 		TEST_CASE_ST(ut_setup, ut_teardown,
10494 			test_zuc_encryption_test_case_5),
10495 
10496 		/** ZUC authenticate (EIA3) */
10497 		TEST_CASE_ST(ut_setup, ut_teardown,
10498 			test_zuc_hash_generate_test_case_6),
10499 		TEST_CASE_ST(ut_setup, ut_teardown,
10500 			test_zuc_hash_generate_test_case_7),
10501 		TEST_CASE_ST(ut_setup, ut_teardown,
10502 			test_zuc_hash_generate_test_case_8),
10503 
10504 		/** ZUC alg-chain (EEA3/EIA3) */
10505 		TEST_CASE_ST(ut_setup, ut_teardown,
10506 			test_zuc_cipher_auth_test_case_1),
10507 		TEST_CASE_ST(ut_setup, ut_teardown,
10508 			test_zuc_cipher_auth_test_case_2),
10509 
10510 		/** ZUC generate auth, then encrypt (EEA3) */
10511 		TEST_CASE_ST(ut_setup, ut_teardown,
10512 			test_zuc_auth_cipher_test_case_1),
10513 		TEST_CASE_ST(ut_setup, ut_teardown,
10514 			test_zuc_auth_cipher_test_case_1_oop),
10515 		TEST_CASE_ST(ut_setup, ut_teardown,
10516 			test_zuc_auth_cipher_test_case_1_sgl),
10517 		TEST_CASE_ST(ut_setup, ut_teardown,
10518 			test_zuc_auth_cipher_test_case_1_oop_sgl),
10519 
10520 		/** ZUC decrypt (EEA3), then verify auth */
10521 		TEST_CASE_ST(ut_setup, ut_teardown,
10522 			test_zuc_auth_cipher_verify_test_case_1),
10523 		TEST_CASE_ST(ut_setup, ut_teardown,
10524 			test_zuc_auth_cipher_verify_test_case_1_oop),
10525 		TEST_CASE_ST(ut_setup, ut_teardown,
10526 			test_zuc_auth_cipher_verify_test_case_1_sgl),
10527 		TEST_CASE_ST(ut_setup, ut_teardown,
10528 			test_zuc_auth_cipher_verify_test_case_1_oop_sgl),
10529 
10530 		/** HMAC_MD5 Authentication */
10531 		TEST_CASE_ST(ut_setup, ut_teardown,
10532 			test_MD5_HMAC_generate_case_1),
10533 		TEST_CASE_ST(ut_setup, ut_teardown,
10534 			test_MD5_HMAC_verify_case_1),
10535 		TEST_CASE_ST(ut_setup, ut_teardown,
10536 			test_MD5_HMAC_generate_case_2),
10537 		TEST_CASE_ST(ut_setup, ut_teardown,
10538 			test_MD5_HMAC_verify_case_2),
10539 
10540 		/** NULL algo tests done in chain_all,
10541 		 * cipheronly and authonly suites
10542 		 */
10543 
10544 		/** KASUMI tests */
10545 		TEST_CASE_ST(ut_setup, ut_teardown,
10546 			test_kasumi_hash_generate_test_case_1),
10547 		TEST_CASE_ST(ut_setup, ut_teardown,
10548 			test_kasumi_hash_generate_test_case_2),
10549 		TEST_CASE_ST(ut_setup, ut_teardown,
10550 			test_kasumi_hash_generate_test_case_3),
10551 		TEST_CASE_ST(ut_setup, ut_teardown,
10552 			test_kasumi_hash_generate_test_case_4),
10553 		TEST_CASE_ST(ut_setup, ut_teardown,
10554 			test_kasumi_hash_generate_test_case_5),
10555 		TEST_CASE_ST(ut_setup, ut_teardown,
10556 			test_kasumi_hash_generate_test_case_6),
10557 
10558 		TEST_CASE_ST(ut_setup, ut_teardown,
10559 			test_kasumi_hash_verify_test_case_1),
10560 		TEST_CASE_ST(ut_setup, ut_teardown,
10561 			test_kasumi_hash_verify_test_case_2),
10562 		TEST_CASE_ST(ut_setup, ut_teardown,
10563 			test_kasumi_hash_verify_test_case_3),
10564 		TEST_CASE_ST(ut_setup, ut_teardown,
10565 			test_kasumi_hash_verify_test_case_4),
10566 		TEST_CASE_ST(ut_setup, ut_teardown,
10567 			test_kasumi_hash_verify_test_case_5),
10568 
10569 		TEST_CASE_ST(ut_setup, ut_teardown,
10570 			test_kasumi_encryption_test_case_1),
10571 		TEST_CASE_ST(ut_setup, ut_teardown,
10572 			test_kasumi_encryption_test_case_3),
10573 		TEST_CASE_ST(ut_setup, ut_teardown,
10574 			test_kasumi_cipher_auth_test_case_1),
10575 
10576 		/** KASUMI generate auth, then encrypt (F8) */
10577 		TEST_CASE_ST(ut_setup, ut_teardown,
10578 			test_kasumi_auth_cipher_test_case_1),
10579 		TEST_CASE_ST(ut_setup, ut_teardown,
10580 			test_kasumi_auth_cipher_test_case_2),
10581 		TEST_CASE_ST(ut_setup, ut_teardown,
10582 			test_kasumi_auth_cipher_test_case_2_oop),
10583 		TEST_CASE_ST(ut_setup, ut_teardown,
10584 			test_kasumi_auth_cipher_test_case_2_sgl),
10585 		TEST_CASE_ST(ut_setup, ut_teardown,
10586 			test_kasumi_auth_cipher_test_case_2_oop_sgl),
10587 
10588 		/** KASUMI decrypt (F8), then verify auth */
10589 		TEST_CASE_ST(ut_setup, ut_teardown,
10590 			test_kasumi_auth_cipher_verify_test_case_1),
10591 		TEST_CASE_ST(ut_setup, ut_teardown,
10592 			test_kasumi_auth_cipher_verify_test_case_2),
10593 		TEST_CASE_ST(ut_setup, ut_teardown,
10594 			test_kasumi_auth_cipher_verify_test_case_2_oop),
10595 		TEST_CASE_ST(ut_setup, ut_teardown,
10596 			test_kasumi_auth_cipher_verify_test_case_2_sgl),
10597 		TEST_CASE_ST(ut_setup, ut_teardown,
10598 			test_kasumi_auth_cipher_verify_test_case_2_oop_sgl),
10599 
10600 		/** Negative tests */
10601 		TEST_CASE_ST(ut_setup, ut_teardown,
10602 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
10603 		TEST_CASE_ST(ut_setup, ut_teardown,
10604 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
10605 		TEST_CASE_ST(ut_setup, ut_teardown,
10606 			authentication_verify_AES128_GMAC_fail_data_corrupt),
10607 		TEST_CASE_ST(ut_setup, ut_teardown,
10608 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
10609 		TEST_CASE_ST(ut_setup, ut_teardown,
10610 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
10611 		TEST_CASE_ST(ut_setup, ut_teardown,
10612 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
10613 
10614 		TEST_CASES_END() /**< NULL terminate unit test array */
10615 	}
10616 };
10617 
10618 static struct unit_test_suite cryptodev_virtio_testsuite = {
10619 	.suite_name = "Crypto VIRTIO Unit Test Suite",
10620 	.setup = testsuite_setup,
10621 	.teardown = testsuite_teardown,
10622 	.unit_test_cases = {
10623 		TEST_CASE_ST(ut_setup, ut_teardown,
10624 				test_AES_cipheronly_virtio_all),
10625 
10626 		TEST_CASES_END() /**< NULL terminate unit test array */
10627 	}
10628 };
10629 
10630 static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {
10631 	.suite_name = "Crypto Device AESNI MB Unit Test Suite",
10632 	.setup = testsuite_setup,
10633 	.teardown = testsuite_teardown,
10634 	.unit_test_cases = {
10635 #if IMB_VERSION_NUM >= IMB_VERSION(0, 51, 0)
10636 		TEST_CASE_ST(ut_setup, ut_teardown,
10637 			test_AES_GCM_authenticated_encryption_test_case_1),
10638 		TEST_CASE_ST(ut_setup, ut_teardown,
10639 			test_AES_GCM_authenticated_encryption_test_case_2),
10640 		TEST_CASE_ST(ut_setup, ut_teardown,
10641 			test_AES_GCM_authenticated_encryption_test_case_3),
10642 		TEST_CASE_ST(ut_setup, ut_teardown,
10643 			test_AES_GCM_authenticated_encryption_test_case_4),
10644 		TEST_CASE_ST(ut_setup, ut_teardown,
10645 			test_AES_GCM_authenticated_encryption_test_case_5),
10646 		TEST_CASE_ST(ut_setup, ut_teardown,
10647 			test_AES_GCM_authenticated_encryption_test_case_6),
10648 		TEST_CASE_ST(ut_setup, ut_teardown,
10649 			test_AES_GCM_authenticated_encryption_test_case_7),
10650 
10651 		/** AES GCM Authenticated Decryption */
10652 		TEST_CASE_ST(ut_setup, ut_teardown,
10653 			test_AES_GCM_authenticated_decryption_test_case_1),
10654 		TEST_CASE_ST(ut_setup, ut_teardown,
10655 			test_AES_GCM_authenticated_decryption_test_case_2),
10656 		TEST_CASE_ST(ut_setup, ut_teardown,
10657 			test_AES_GCM_authenticated_decryption_test_case_3),
10658 		TEST_CASE_ST(ut_setup, ut_teardown,
10659 			test_AES_GCM_authenticated_decryption_test_case_4),
10660 		TEST_CASE_ST(ut_setup, ut_teardown,
10661 			test_AES_GCM_authenticated_decryption_test_case_5),
10662 		TEST_CASE_ST(ut_setup, ut_teardown,
10663 			test_AES_GCM_authenticated_decryption_test_case_6),
10664 		TEST_CASE_ST(ut_setup, ut_teardown,
10665 			test_AES_GCM_authenticated_decryption_test_case_7),
10666 
10667 		/** AES GCM Authenticated Encryption 192 bits key */
10668 		TEST_CASE_ST(ut_setup, ut_teardown,
10669 			test_AES_GCM_auth_encryption_test_case_192_1),
10670 		TEST_CASE_ST(ut_setup, ut_teardown,
10671 			test_AES_GCM_auth_encryption_test_case_192_2),
10672 		TEST_CASE_ST(ut_setup, ut_teardown,
10673 			test_AES_GCM_auth_encryption_test_case_192_3),
10674 		TEST_CASE_ST(ut_setup, ut_teardown,
10675 			test_AES_GCM_auth_encryption_test_case_192_4),
10676 		TEST_CASE_ST(ut_setup, ut_teardown,
10677 			test_AES_GCM_auth_encryption_test_case_192_5),
10678 		TEST_CASE_ST(ut_setup, ut_teardown,
10679 			test_AES_GCM_auth_encryption_test_case_192_6),
10680 		TEST_CASE_ST(ut_setup, ut_teardown,
10681 			test_AES_GCM_auth_encryption_test_case_192_7),
10682 
10683 		/** AES GCM Authenticated Decryption 192 bits key */
10684 		TEST_CASE_ST(ut_setup, ut_teardown,
10685 			test_AES_GCM_auth_decryption_test_case_192_1),
10686 		TEST_CASE_ST(ut_setup, ut_teardown,
10687 			test_AES_GCM_auth_decryption_test_case_192_2),
10688 		TEST_CASE_ST(ut_setup, ut_teardown,
10689 			test_AES_GCM_auth_decryption_test_case_192_3),
10690 		TEST_CASE_ST(ut_setup, ut_teardown,
10691 			test_AES_GCM_auth_decryption_test_case_192_4),
10692 		TEST_CASE_ST(ut_setup, ut_teardown,
10693 			test_AES_GCM_auth_decryption_test_case_192_5),
10694 		TEST_CASE_ST(ut_setup, ut_teardown,
10695 			test_AES_GCM_auth_decryption_test_case_192_6),
10696 		TEST_CASE_ST(ut_setup, ut_teardown,
10697 			test_AES_GCM_auth_decryption_test_case_192_7),
10698 
10699 		/** AES GCM Authenticated Encryption 256 bits key */
10700 		TEST_CASE_ST(ut_setup, ut_teardown,
10701 			test_AES_GCM_auth_encryption_test_case_256_1),
10702 		TEST_CASE_ST(ut_setup, ut_teardown,
10703 			test_AES_GCM_auth_encryption_test_case_256_2),
10704 		TEST_CASE_ST(ut_setup, ut_teardown,
10705 			test_AES_GCM_auth_encryption_test_case_256_3),
10706 		TEST_CASE_ST(ut_setup, ut_teardown,
10707 			test_AES_GCM_auth_encryption_test_case_256_4),
10708 		TEST_CASE_ST(ut_setup, ut_teardown,
10709 			test_AES_GCM_auth_encryption_test_case_256_5),
10710 		TEST_CASE_ST(ut_setup, ut_teardown,
10711 			test_AES_GCM_auth_encryption_test_case_256_6),
10712 		TEST_CASE_ST(ut_setup, ut_teardown,
10713 			test_AES_GCM_auth_encryption_test_case_256_7),
10714 
10715 		/** AES GCM Authenticated Decryption 256 bits key */
10716 		TEST_CASE_ST(ut_setup, ut_teardown,
10717 			test_AES_GCM_auth_decryption_test_case_256_1),
10718 		TEST_CASE_ST(ut_setup, ut_teardown,
10719 			test_AES_GCM_auth_decryption_test_case_256_2),
10720 		TEST_CASE_ST(ut_setup, ut_teardown,
10721 			test_AES_GCM_auth_decryption_test_case_256_3),
10722 		TEST_CASE_ST(ut_setup, ut_teardown,
10723 			test_AES_GCM_auth_decryption_test_case_256_4),
10724 		TEST_CASE_ST(ut_setup, ut_teardown,
10725 			test_AES_GCM_auth_decryption_test_case_256_5),
10726 		TEST_CASE_ST(ut_setup, ut_teardown,
10727 			test_AES_GCM_auth_decryption_test_case_256_6),
10728 		TEST_CASE_ST(ut_setup, ut_teardown,
10729 			test_AES_GCM_auth_decryption_test_case_256_7),
10730 
10731 		/** AES GCM Authenticated Encryption big aad size */
10732 		TEST_CASE_ST(ut_setup, ut_teardown,
10733 			test_AES_GCM_auth_encryption_test_case_aad_1),
10734 		TEST_CASE_ST(ut_setup, ut_teardown,
10735 			test_AES_GCM_auth_encryption_test_case_aad_2),
10736 
10737 		/** AES GCM Authenticated Decryption big aad size */
10738 		TEST_CASE_ST(ut_setup, ut_teardown,
10739 			test_AES_GCM_auth_decryption_test_case_aad_1),
10740 		TEST_CASE_ST(ut_setup, ut_teardown,
10741 			test_AES_GCM_auth_decryption_test_case_aad_2),
10742 
10743 		/** Session-less tests */
10744 		TEST_CASE_ST(ut_setup, ut_teardown,
10745 			test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
10746 		TEST_CASE_ST(ut_setup, ut_teardown,
10747 			test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
10748 
10749 		/** AES GMAC Authentication */
10750 		TEST_CASE_ST(ut_setup, ut_teardown,
10751 			test_AES_GMAC_authentication_test_case_1),
10752 		TEST_CASE_ST(ut_setup, ut_teardown,
10753 			test_AES_GMAC_authentication_verify_test_case_1),
10754 		TEST_CASE_ST(ut_setup, ut_teardown,
10755 			test_AES_GMAC_authentication_test_case_2),
10756 		TEST_CASE_ST(ut_setup, ut_teardown,
10757 			test_AES_GMAC_authentication_verify_test_case_2),
10758 		TEST_CASE_ST(ut_setup, ut_teardown,
10759 			test_AES_GMAC_authentication_test_case_3),
10760 		TEST_CASE_ST(ut_setup, ut_teardown,
10761 			test_AES_GMAC_authentication_verify_test_case_3),
10762 #endif /* IMB_VERSION_NUM >= IMB_VERSION(0, 51, 0) */
10763 
10764 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
10765 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_mb_all),
10766 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_mb_all),
10767 		TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_mb_all),
10768 		TEST_CASE_ST(ut_setup, ut_teardown,
10769 						test_DES_cipheronly_mb_all),
10770 		TEST_CASE_ST(ut_setup, ut_teardown,
10771 						test_DES_docsis_mb_all),
10772 		TEST_CASE_ST(ut_setup, ut_teardown,
10773 						test_3DES_cipheronly_mb_all),
10774 		TEST_CASE_ST(ut_setup, ut_teardown,
10775 			test_AES_CCM_authenticated_encryption_test_case_128_1),
10776 		TEST_CASE_ST(ut_setup, ut_teardown,
10777 			test_AES_CCM_authenticated_decryption_test_case_128_1),
10778 		TEST_CASE_ST(ut_setup, ut_teardown,
10779 			test_AES_CCM_authenticated_encryption_test_case_128_2),
10780 		TEST_CASE_ST(ut_setup, ut_teardown,
10781 			test_AES_CCM_authenticated_decryption_test_case_128_2),
10782 		TEST_CASE_ST(ut_setup, ut_teardown,
10783 			test_AES_CCM_authenticated_encryption_test_case_128_3),
10784 		TEST_CASE_ST(ut_setup, ut_teardown,
10785 			test_AES_CCM_authenticated_decryption_test_case_128_3),
10786 
10787 		TEST_CASES_END() /**< NULL terminate unit test array */
10788 	}
10789 };
10790 
10791 static struct unit_test_suite cryptodev_openssl_testsuite  = {
10792 	.suite_name = "Crypto Device OPENSSL Unit Test Suite",
10793 	.setup = testsuite_setup,
10794 	.teardown = testsuite_teardown,
10795 	.unit_test_cases = {
10796 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
10797 		TEST_CASE_ST(ut_setup, ut_teardown,
10798 				test_multi_session_random_usage),
10799 		TEST_CASE_ST(ut_setup, ut_teardown,
10800 				test_AES_chain_openssl_all),
10801 		TEST_CASE_ST(ut_setup, ut_teardown,
10802 				test_AES_cipheronly_openssl_all),
10803 		TEST_CASE_ST(ut_setup, ut_teardown,
10804 				test_3DES_chain_openssl_all),
10805 		TEST_CASE_ST(ut_setup, ut_teardown,
10806 				test_3DES_cipheronly_openssl_all),
10807 		TEST_CASE_ST(ut_setup, ut_teardown,
10808 				test_DES_cipheronly_openssl_all),
10809 		TEST_CASE_ST(ut_setup, ut_teardown,
10810 				test_DES_docsis_openssl_all),
10811 		TEST_CASE_ST(ut_setup, ut_teardown,
10812 				test_authonly_openssl_all),
10813 
10814 		/** AES GCM Authenticated Encryption */
10815 		TEST_CASE_ST(ut_setup, ut_teardown,
10816 			test_AES_GCM_authenticated_encryption_test_case_1),
10817 		TEST_CASE_ST(ut_setup, ut_teardown,
10818 			test_AES_GCM_authenticated_encryption_test_case_2),
10819 		TEST_CASE_ST(ut_setup, ut_teardown,
10820 			test_AES_GCM_authenticated_encryption_test_case_3),
10821 		TEST_CASE_ST(ut_setup, ut_teardown,
10822 			test_AES_GCM_authenticated_encryption_test_case_4),
10823 		TEST_CASE_ST(ut_setup, ut_teardown,
10824 			test_AES_GCM_authenticated_encryption_test_case_5),
10825 		TEST_CASE_ST(ut_setup, ut_teardown,
10826 			test_AES_GCM_authenticated_encryption_test_case_6),
10827 		TEST_CASE_ST(ut_setup, ut_teardown,
10828 			test_AES_GCM_authenticated_encryption_test_case_7),
10829 
10830 		/** AES GCM Authenticated Decryption */
10831 		TEST_CASE_ST(ut_setup, ut_teardown,
10832 			test_AES_GCM_authenticated_decryption_test_case_1),
10833 		TEST_CASE_ST(ut_setup, ut_teardown,
10834 			test_AES_GCM_authenticated_decryption_test_case_2),
10835 		TEST_CASE_ST(ut_setup, ut_teardown,
10836 			test_AES_GCM_authenticated_decryption_test_case_3),
10837 		TEST_CASE_ST(ut_setup, ut_teardown,
10838 			test_AES_GCM_authenticated_decryption_test_case_4),
10839 		TEST_CASE_ST(ut_setup, ut_teardown,
10840 			test_AES_GCM_authenticated_decryption_test_case_5),
10841 		TEST_CASE_ST(ut_setup, ut_teardown,
10842 			test_AES_GCM_authenticated_decryption_test_case_6),
10843 		TEST_CASE_ST(ut_setup, ut_teardown,
10844 			test_AES_GCM_authenticated_decryption_test_case_7),
10845 
10846 
10847 		/** AES GCM Authenticated Encryption 192 bits key */
10848 		TEST_CASE_ST(ut_setup, ut_teardown,
10849 			test_AES_GCM_auth_encryption_test_case_192_1),
10850 		TEST_CASE_ST(ut_setup, ut_teardown,
10851 			test_AES_GCM_auth_encryption_test_case_192_2),
10852 		TEST_CASE_ST(ut_setup, ut_teardown,
10853 			test_AES_GCM_auth_encryption_test_case_192_3),
10854 		TEST_CASE_ST(ut_setup, ut_teardown,
10855 			test_AES_GCM_auth_encryption_test_case_192_4),
10856 		TEST_CASE_ST(ut_setup, ut_teardown,
10857 			test_AES_GCM_auth_encryption_test_case_192_5),
10858 		TEST_CASE_ST(ut_setup, ut_teardown,
10859 			test_AES_GCM_auth_encryption_test_case_192_6),
10860 		TEST_CASE_ST(ut_setup, ut_teardown,
10861 			test_AES_GCM_auth_encryption_test_case_192_7),
10862 
10863 		/** AES GCM Authenticated Decryption 192 bits key */
10864 		TEST_CASE_ST(ut_setup, ut_teardown,
10865 			test_AES_GCM_auth_decryption_test_case_192_1),
10866 		TEST_CASE_ST(ut_setup, ut_teardown,
10867 			test_AES_GCM_auth_decryption_test_case_192_2),
10868 		TEST_CASE_ST(ut_setup, ut_teardown,
10869 			test_AES_GCM_auth_decryption_test_case_192_3),
10870 		TEST_CASE_ST(ut_setup, ut_teardown,
10871 			test_AES_GCM_auth_decryption_test_case_192_4),
10872 		TEST_CASE_ST(ut_setup, ut_teardown,
10873 			test_AES_GCM_auth_decryption_test_case_192_5),
10874 		TEST_CASE_ST(ut_setup, ut_teardown,
10875 			test_AES_GCM_auth_decryption_test_case_192_6),
10876 		TEST_CASE_ST(ut_setup, ut_teardown,
10877 			test_AES_GCM_auth_decryption_test_case_192_7),
10878 
10879 		/** AES GCM Authenticated Encryption 256 bits key */
10880 		TEST_CASE_ST(ut_setup, ut_teardown,
10881 			test_AES_GCM_auth_encryption_test_case_256_1),
10882 		TEST_CASE_ST(ut_setup, ut_teardown,
10883 			test_AES_GCM_auth_encryption_test_case_256_2),
10884 		TEST_CASE_ST(ut_setup, ut_teardown,
10885 			test_AES_GCM_auth_encryption_test_case_256_3),
10886 		TEST_CASE_ST(ut_setup, ut_teardown,
10887 			test_AES_GCM_auth_encryption_test_case_256_4),
10888 		TEST_CASE_ST(ut_setup, ut_teardown,
10889 			test_AES_GCM_auth_encryption_test_case_256_5),
10890 		TEST_CASE_ST(ut_setup, ut_teardown,
10891 			test_AES_GCM_auth_encryption_test_case_256_6),
10892 		TEST_CASE_ST(ut_setup, ut_teardown,
10893 			test_AES_GCM_auth_encryption_test_case_256_7),
10894 
10895 		/** AES GCM Authenticated Decryption 256 bits key */
10896 		TEST_CASE_ST(ut_setup, ut_teardown,
10897 			test_AES_GCM_auth_decryption_test_case_256_1),
10898 		TEST_CASE_ST(ut_setup, ut_teardown,
10899 			test_AES_GCM_auth_decryption_test_case_256_2),
10900 		TEST_CASE_ST(ut_setup, ut_teardown,
10901 			test_AES_GCM_auth_decryption_test_case_256_3),
10902 		TEST_CASE_ST(ut_setup, ut_teardown,
10903 			test_AES_GCM_auth_decryption_test_case_256_4),
10904 		TEST_CASE_ST(ut_setup, ut_teardown,
10905 			test_AES_GCM_auth_decryption_test_case_256_5),
10906 		TEST_CASE_ST(ut_setup, ut_teardown,
10907 			test_AES_GCM_auth_decryption_test_case_256_6),
10908 		TEST_CASE_ST(ut_setup, ut_teardown,
10909 			test_AES_GCM_auth_decryption_test_case_256_7),
10910 
10911 		/** AES GMAC Authentication */
10912 		TEST_CASE_ST(ut_setup, ut_teardown,
10913 			test_AES_GMAC_authentication_test_case_1),
10914 		TEST_CASE_ST(ut_setup, ut_teardown,
10915 			test_AES_GMAC_authentication_verify_test_case_1),
10916 		TEST_CASE_ST(ut_setup, ut_teardown,
10917 			test_AES_GMAC_authentication_test_case_2),
10918 		TEST_CASE_ST(ut_setup, ut_teardown,
10919 			test_AES_GMAC_authentication_verify_test_case_2),
10920 		TEST_CASE_ST(ut_setup, ut_teardown,
10921 			test_AES_GMAC_authentication_test_case_3),
10922 		TEST_CASE_ST(ut_setup, ut_teardown,
10923 			test_AES_GMAC_authentication_verify_test_case_3),
10924 		TEST_CASE_ST(ut_setup, ut_teardown,
10925 			test_AES_GMAC_authentication_test_case_4),
10926 		TEST_CASE_ST(ut_setup, ut_teardown,
10927 			test_AES_GMAC_authentication_verify_test_case_4),
10928 
10929 		/** AES CCM Authenticated Encryption 128 bits key */
10930 		TEST_CASE_ST(ut_setup, ut_teardown,
10931 			test_AES_CCM_authenticated_encryption_test_case_128_1),
10932 		TEST_CASE_ST(ut_setup, ut_teardown,
10933 			test_AES_CCM_authenticated_encryption_test_case_128_2),
10934 		TEST_CASE_ST(ut_setup, ut_teardown,
10935 			test_AES_CCM_authenticated_encryption_test_case_128_3),
10936 
10937 		/** AES CCM Authenticated Decryption 128 bits key*/
10938 		TEST_CASE_ST(ut_setup, ut_teardown,
10939 			test_AES_CCM_authenticated_decryption_test_case_128_1),
10940 		TEST_CASE_ST(ut_setup, ut_teardown,
10941 			test_AES_CCM_authenticated_decryption_test_case_128_2),
10942 		TEST_CASE_ST(ut_setup, ut_teardown,
10943 			test_AES_CCM_authenticated_decryption_test_case_128_3),
10944 
10945 		/** AES CCM Authenticated Encryption 192 bits key */
10946 		TEST_CASE_ST(ut_setup, ut_teardown,
10947 			test_AES_CCM_authenticated_encryption_test_case_192_1),
10948 		TEST_CASE_ST(ut_setup, ut_teardown,
10949 			test_AES_CCM_authenticated_encryption_test_case_192_2),
10950 		TEST_CASE_ST(ut_setup, ut_teardown,
10951 			test_AES_CCM_authenticated_encryption_test_case_192_3),
10952 
10953 		/** AES CCM Authenticated Decryption 192 bits key*/
10954 		TEST_CASE_ST(ut_setup, ut_teardown,
10955 			test_AES_CCM_authenticated_decryption_test_case_192_1),
10956 		TEST_CASE_ST(ut_setup, ut_teardown,
10957 			test_AES_CCM_authenticated_decryption_test_case_192_2),
10958 		TEST_CASE_ST(ut_setup, ut_teardown,
10959 			test_AES_CCM_authenticated_decryption_test_case_192_3),
10960 
10961 		/** AES CCM Authenticated Encryption 256 bits key */
10962 		TEST_CASE_ST(ut_setup, ut_teardown,
10963 			test_AES_CCM_authenticated_encryption_test_case_256_1),
10964 		TEST_CASE_ST(ut_setup, ut_teardown,
10965 			test_AES_CCM_authenticated_encryption_test_case_256_2),
10966 		TEST_CASE_ST(ut_setup, ut_teardown,
10967 			test_AES_CCM_authenticated_encryption_test_case_256_3),
10968 
10969 		/** AES CCM Authenticated Decryption 256 bits key*/
10970 		TEST_CASE_ST(ut_setup, ut_teardown,
10971 			test_AES_CCM_authenticated_decryption_test_case_256_1),
10972 		TEST_CASE_ST(ut_setup, ut_teardown,
10973 			test_AES_CCM_authenticated_decryption_test_case_256_2),
10974 		TEST_CASE_ST(ut_setup, ut_teardown,
10975 			test_AES_CCM_authenticated_decryption_test_case_256_3),
10976 
10977 		/** Scatter-Gather */
10978 		TEST_CASE_ST(ut_setup, ut_teardown,
10979 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
10980 
10981 		/** Negative tests */
10982 		TEST_CASE_ST(ut_setup, ut_teardown,
10983 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
10984 		TEST_CASE_ST(ut_setup, ut_teardown,
10985 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
10986 		TEST_CASE_ST(ut_setup, ut_teardown,
10987 			authentication_verify_AES128_GMAC_fail_data_corrupt),
10988 		TEST_CASE_ST(ut_setup, ut_teardown,
10989 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
10990 		TEST_CASE_ST(ut_setup, ut_teardown,
10991 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
10992 		TEST_CASE_ST(ut_setup, ut_teardown,
10993 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
10994 
10995 		TEST_CASES_END() /**< NULL terminate unit test array */
10996 	}
10997 };
10998 
10999 static struct unit_test_suite cryptodev_aesni_gcm_testsuite  = {
11000 	.suite_name = "Crypto Device AESNI GCM Unit Test Suite",
11001 	.setup = testsuite_setup,
11002 	.teardown = testsuite_teardown,
11003 	.unit_test_cases = {
11004 		/** AES GCM Authenticated Encryption */
11005 		TEST_CASE_ST(ut_setup, ut_teardown,
11006 			test_AES_GCM_authenticated_encryption_test_case_1),
11007 		TEST_CASE_ST(ut_setup, ut_teardown,
11008 			test_AES_GCM_authenticated_encryption_test_case_2),
11009 		TEST_CASE_ST(ut_setup, ut_teardown,
11010 			test_AES_GCM_authenticated_encryption_test_case_3),
11011 		TEST_CASE_ST(ut_setup, ut_teardown,
11012 			test_AES_GCM_authenticated_encryption_test_case_4),
11013 		TEST_CASE_ST(ut_setup, ut_teardown,
11014 			test_AES_GCM_authenticated_encryption_test_case_5),
11015 		TEST_CASE_ST(ut_setup, ut_teardown,
11016 			test_AES_GCM_authenticated_encryption_test_case_6),
11017 		TEST_CASE_ST(ut_setup, ut_teardown,
11018 			test_AES_GCM_authenticated_encryption_test_case_7),
11019 
11020 		/** AES GCM Authenticated Decryption */
11021 		TEST_CASE_ST(ut_setup, ut_teardown,
11022 			test_AES_GCM_authenticated_decryption_test_case_1),
11023 		TEST_CASE_ST(ut_setup, ut_teardown,
11024 			test_AES_GCM_authenticated_decryption_test_case_2),
11025 		TEST_CASE_ST(ut_setup, ut_teardown,
11026 			test_AES_GCM_authenticated_decryption_test_case_3),
11027 		TEST_CASE_ST(ut_setup, ut_teardown,
11028 			test_AES_GCM_authenticated_decryption_test_case_4),
11029 		TEST_CASE_ST(ut_setup, ut_teardown,
11030 			test_AES_GCM_authenticated_decryption_test_case_5),
11031 		TEST_CASE_ST(ut_setup, ut_teardown,
11032 			test_AES_GCM_authenticated_decryption_test_case_6),
11033 		TEST_CASE_ST(ut_setup, ut_teardown,
11034 			test_AES_GCM_authenticated_decryption_test_case_7),
11035 
11036 		/** AES GCM Authenticated Encryption 192 bits key */
11037 		TEST_CASE_ST(ut_setup, ut_teardown,
11038 			test_AES_GCM_auth_encryption_test_case_192_1),
11039 		TEST_CASE_ST(ut_setup, ut_teardown,
11040 			test_AES_GCM_auth_encryption_test_case_192_2),
11041 		TEST_CASE_ST(ut_setup, ut_teardown,
11042 			test_AES_GCM_auth_encryption_test_case_192_3),
11043 		TEST_CASE_ST(ut_setup, ut_teardown,
11044 			test_AES_GCM_auth_encryption_test_case_192_4),
11045 		TEST_CASE_ST(ut_setup, ut_teardown,
11046 			test_AES_GCM_auth_encryption_test_case_192_5),
11047 		TEST_CASE_ST(ut_setup, ut_teardown,
11048 			test_AES_GCM_auth_encryption_test_case_192_6),
11049 		TEST_CASE_ST(ut_setup, ut_teardown,
11050 			test_AES_GCM_auth_encryption_test_case_192_7),
11051 
11052 		/** AES GCM Authenticated Decryption 192 bits key */
11053 		TEST_CASE_ST(ut_setup, ut_teardown,
11054 			test_AES_GCM_auth_decryption_test_case_192_1),
11055 		TEST_CASE_ST(ut_setup, ut_teardown,
11056 			test_AES_GCM_auth_decryption_test_case_192_2),
11057 		TEST_CASE_ST(ut_setup, ut_teardown,
11058 			test_AES_GCM_auth_decryption_test_case_192_3),
11059 		TEST_CASE_ST(ut_setup, ut_teardown,
11060 			test_AES_GCM_auth_decryption_test_case_192_4),
11061 		TEST_CASE_ST(ut_setup, ut_teardown,
11062 			test_AES_GCM_auth_decryption_test_case_192_5),
11063 		TEST_CASE_ST(ut_setup, ut_teardown,
11064 			test_AES_GCM_auth_decryption_test_case_192_6),
11065 		TEST_CASE_ST(ut_setup, ut_teardown,
11066 			test_AES_GCM_auth_decryption_test_case_192_7),
11067 
11068 		/** AES GCM Authenticated Encryption 256 bits key */
11069 		TEST_CASE_ST(ut_setup, ut_teardown,
11070 			test_AES_GCM_auth_encryption_test_case_256_1),
11071 		TEST_CASE_ST(ut_setup, ut_teardown,
11072 			test_AES_GCM_auth_encryption_test_case_256_2),
11073 		TEST_CASE_ST(ut_setup, ut_teardown,
11074 			test_AES_GCM_auth_encryption_test_case_256_3),
11075 		TEST_CASE_ST(ut_setup, ut_teardown,
11076 			test_AES_GCM_auth_encryption_test_case_256_4),
11077 		TEST_CASE_ST(ut_setup, ut_teardown,
11078 			test_AES_GCM_auth_encryption_test_case_256_5),
11079 		TEST_CASE_ST(ut_setup, ut_teardown,
11080 			test_AES_GCM_auth_encryption_test_case_256_6),
11081 		TEST_CASE_ST(ut_setup, ut_teardown,
11082 			test_AES_GCM_auth_encryption_test_case_256_7),
11083 
11084 		/** AES GCM Authenticated Decryption 256 bits key */
11085 		TEST_CASE_ST(ut_setup, ut_teardown,
11086 			test_AES_GCM_auth_decryption_test_case_256_1),
11087 		TEST_CASE_ST(ut_setup, ut_teardown,
11088 			test_AES_GCM_auth_decryption_test_case_256_2),
11089 		TEST_CASE_ST(ut_setup, ut_teardown,
11090 			test_AES_GCM_auth_decryption_test_case_256_3),
11091 		TEST_CASE_ST(ut_setup, ut_teardown,
11092 			test_AES_GCM_auth_decryption_test_case_256_4),
11093 		TEST_CASE_ST(ut_setup, ut_teardown,
11094 			test_AES_GCM_auth_decryption_test_case_256_5),
11095 		TEST_CASE_ST(ut_setup, ut_teardown,
11096 			test_AES_GCM_auth_decryption_test_case_256_6),
11097 		TEST_CASE_ST(ut_setup, ut_teardown,
11098 			test_AES_GCM_auth_decryption_test_case_256_7),
11099 
11100 		/** AES GCM Authenticated Encryption big aad size */
11101 		TEST_CASE_ST(ut_setup, ut_teardown,
11102 			test_AES_GCM_auth_encryption_test_case_aad_1),
11103 		TEST_CASE_ST(ut_setup, ut_teardown,
11104 			test_AES_GCM_auth_encryption_test_case_aad_2),
11105 
11106 		/** AES GCM Authenticated Decryption big aad size */
11107 		TEST_CASE_ST(ut_setup, ut_teardown,
11108 			test_AES_GCM_auth_decryption_test_case_aad_1),
11109 		TEST_CASE_ST(ut_setup, ut_teardown,
11110 			test_AES_GCM_auth_decryption_test_case_aad_2),
11111 
11112 		/** AES GMAC Authentication */
11113 		TEST_CASE_ST(ut_setup, ut_teardown,
11114 			test_AES_GMAC_authentication_test_case_1),
11115 		TEST_CASE_ST(ut_setup, ut_teardown,
11116 			test_AES_GMAC_authentication_verify_test_case_1),
11117 		TEST_CASE_ST(ut_setup, ut_teardown,
11118 			test_AES_GMAC_authentication_test_case_3),
11119 		TEST_CASE_ST(ut_setup, ut_teardown,
11120 			test_AES_GMAC_authentication_verify_test_case_3),
11121 		TEST_CASE_ST(ut_setup, ut_teardown,
11122 			test_AES_GMAC_authentication_test_case_4),
11123 		TEST_CASE_ST(ut_setup, ut_teardown,
11124 			test_AES_GMAC_authentication_verify_test_case_4),
11125 
11126 		/** Negative tests */
11127 		TEST_CASE_ST(ut_setup, ut_teardown,
11128 			authentication_verify_AES128_GMAC_fail_data_corrupt),
11129 		TEST_CASE_ST(ut_setup, ut_teardown,
11130 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
11131 
11132 		/** Out of place tests */
11133 		TEST_CASE_ST(ut_setup, ut_teardown,
11134 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
11135 		TEST_CASE_ST(ut_setup, ut_teardown,
11136 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
11137 
11138 		/** Session-less tests */
11139 		TEST_CASE_ST(ut_setup, ut_teardown,
11140 			test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
11141 		TEST_CASE_ST(ut_setup, ut_teardown,
11142 			test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
11143 
11144 		/** Scatter-Gather */
11145 		TEST_CASE_ST(ut_setup, ut_teardown,
11146 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
11147 
11148 		TEST_CASES_END() /**< NULL terminate unit test array */
11149 	}
11150 };
11151 
11152 static struct unit_test_suite cryptodev_sw_kasumi_testsuite  = {
11153 	.suite_name = "Crypto Device SW KASUMI Unit Test Suite",
11154 	.setup = testsuite_setup,
11155 	.teardown = testsuite_teardown,
11156 	.unit_test_cases = {
11157 		/** KASUMI encrypt only (UEA1) */
11158 		TEST_CASE_ST(ut_setup, ut_teardown,
11159 			test_kasumi_encryption_test_case_1),
11160 		TEST_CASE_ST(ut_setup, ut_teardown,
11161 			test_kasumi_encryption_test_case_1_sgl),
11162 		TEST_CASE_ST(ut_setup, ut_teardown,
11163 			test_kasumi_encryption_test_case_2),
11164 		TEST_CASE_ST(ut_setup, ut_teardown,
11165 			test_kasumi_encryption_test_case_3),
11166 		TEST_CASE_ST(ut_setup, ut_teardown,
11167 			test_kasumi_encryption_test_case_4),
11168 		TEST_CASE_ST(ut_setup, ut_teardown,
11169 			test_kasumi_encryption_test_case_5),
11170 		/** KASUMI decrypt only (UEA1) */
11171 		TEST_CASE_ST(ut_setup, ut_teardown,
11172 			test_kasumi_decryption_test_case_1),
11173 		TEST_CASE_ST(ut_setup, ut_teardown,
11174 			test_kasumi_decryption_test_case_2),
11175 		TEST_CASE_ST(ut_setup, ut_teardown,
11176 			test_kasumi_decryption_test_case_3),
11177 		TEST_CASE_ST(ut_setup, ut_teardown,
11178 			test_kasumi_decryption_test_case_4),
11179 		TEST_CASE_ST(ut_setup, ut_teardown,
11180 			test_kasumi_decryption_test_case_5),
11181 
11182 		TEST_CASE_ST(ut_setup, ut_teardown,
11183 			test_kasumi_encryption_test_case_1_oop),
11184 		TEST_CASE_ST(ut_setup, ut_teardown,
11185 			test_kasumi_encryption_test_case_1_oop_sgl),
11186 
11187 
11188 		TEST_CASE_ST(ut_setup, ut_teardown,
11189 			test_kasumi_decryption_test_case_1_oop),
11190 
11191 		/** KASUMI hash only (UIA1) */
11192 		TEST_CASE_ST(ut_setup, ut_teardown,
11193 			test_kasumi_hash_generate_test_case_1),
11194 		TEST_CASE_ST(ut_setup, ut_teardown,
11195 			test_kasumi_hash_generate_test_case_2),
11196 		TEST_CASE_ST(ut_setup, ut_teardown,
11197 			test_kasumi_hash_generate_test_case_3),
11198 		TEST_CASE_ST(ut_setup, ut_teardown,
11199 			test_kasumi_hash_generate_test_case_4),
11200 		TEST_CASE_ST(ut_setup, ut_teardown,
11201 			test_kasumi_hash_generate_test_case_5),
11202 		TEST_CASE_ST(ut_setup, ut_teardown,
11203 			test_kasumi_hash_generate_test_case_6),
11204 		TEST_CASE_ST(ut_setup, ut_teardown,
11205 			test_kasumi_hash_verify_test_case_1),
11206 		TEST_CASE_ST(ut_setup, ut_teardown,
11207 			test_kasumi_hash_verify_test_case_2),
11208 		TEST_CASE_ST(ut_setup, ut_teardown,
11209 			test_kasumi_hash_verify_test_case_3),
11210 		TEST_CASE_ST(ut_setup, ut_teardown,
11211 			test_kasumi_hash_verify_test_case_4),
11212 		TEST_CASE_ST(ut_setup, ut_teardown,
11213 			test_kasumi_hash_verify_test_case_5),
11214 		TEST_CASE_ST(ut_setup, ut_teardown,
11215 			test_kasumi_cipher_auth_test_case_1),
11216 
11217 		/** KASUMI generate auth, then encrypt (F8) */
11218 		TEST_CASE_ST(ut_setup, ut_teardown,
11219 			test_kasumi_auth_cipher_test_case_1),
11220 		TEST_CASE_ST(ut_setup, ut_teardown,
11221 			test_kasumi_auth_cipher_test_case_2),
11222 		TEST_CASE_ST(ut_setup, ut_teardown,
11223 			test_kasumi_auth_cipher_test_case_2_oop),
11224 		TEST_CASE_ST(ut_setup, ut_teardown,
11225 			test_kasumi_auth_cipher_test_case_2_sgl),
11226 		TEST_CASE_ST(ut_setup, ut_teardown,
11227 			test_kasumi_auth_cipher_test_case_2_oop_sgl),
11228 
11229 		/** KASUMI decrypt (F8), then verify auth */
11230 		TEST_CASE_ST(ut_setup, ut_teardown,
11231 			test_kasumi_auth_cipher_verify_test_case_1),
11232 		TEST_CASE_ST(ut_setup, ut_teardown,
11233 			test_kasumi_auth_cipher_verify_test_case_2),
11234 		TEST_CASE_ST(ut_setup, ut_teardown,
11235 			test_kasumi_auth_cipher_verify_test_case_2_oop),
11236 		TEST_CASE_ST(ut_setup, ut_teardown,
11237 			test_kasumi_auth_cipher_verify_test_case_2_sgl),
11238 		TEST_CASE_ST(ut_setup, ut_teardown,
11239 			test_kasumi_auth_cipher_verify_test_case_2_oop_sgl),
11240 		TEST_CASES_END() /**< NULL terminate unit test array */
11241 	}
11242 };
11243 static struct unit_test_suite cryptodev_sw_snow3g_testsuite  = {
11244 	.suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
11245 	.setup = testsuite_setup,
11246 	.teardown = testsuite_teardown,
11247 	.unit_test_cases = {
11248 		/** SNOW 3G encrypt only (UEA2) */
11249 		TEST_CASE_ST(ut_setup, ut_teardown,
11250 			test_snow3g_encryption_test_case_1),
11251 		TEST_CASE_ST(ut_setup, ut_teardown,
11252 			test_snow3g_encryption_test_case_2),
11253 		TEST_CASE_ST(ut_setup, ut_teardown,
11254 			test_snow3g_encryption_test_case_3),
11255 		TEST_CASE_ST(ut_setup, ut_teardown,
11256 			test_snow3g_encryption_test_case_4),
11257 		TEST_CASE_ST(ut_setup, ut_teardown,
11258 			test_snow3g_encryption_test_case_5),
11259 		TEST_CASE_ST(ut_setup, ut_teardown,
11260 			test_snow3g_auth_cipher_with_digest_test_case_1),
11261 
11262 		TEST_CASE_ST(ut_setup, ut_teardown,
11263 			test_snow3g_encryption_test_case_1_oop),
11264 		TEST_CASE_ST(ut_setup, ut_teardown,
11265 				test_snow3g_encryption_test_case_1_oop_sgl),
11266 		TEST_CASE_ST(ut_setup, ut_teardown,
11267 			test_snow3g_decryption_test_case_1_oop),
11268 
11269 		TEST_CASE_ST(ut_setup, ut_teardown,
11270 			test_snow3g_encryption_test_case_1_offset_oop),
11271 
11272 		/** SNOW 3G decrypt only (UEA2) */
11273 		TEST_CASE_ST(ut_setup, ut_teardown,
11274 			test_snow3g_decryption_test_case_1),
11275 		TEST_CASE_ST(ut_setup, ut_teardown,
11276 			test_snow3g_decryption_test_case_2),
11277 		TEST_CASE_ST(ut_setup, ut_teardown,
11278 			test_snow3g_decryption_test_case_3),
11279 		TEST_CASE_ST(ut_setup, ut_teardown,
11280 			test_snow3g_decryption_test_case_4),
11281 		TEST_CASE_ST(ut_setup, ut_teardown,
11282 			test_snow3g_decryption_test_case_5),
11283 		TEST_CASE_ST(ut_setup, ut_teardown,
11284 			test_snow3g_decryption_with_digest_test_case_1),
11285 		TEST_CASE_ST(ut_setup, ut_teardown,
11286 			test_snow3g_hash_generate_test_case_1),
11287 		TEST_CASE_ST(ut_setup, ut_teardown,
11288 			test_snow3g_hash_generate_test_case_2),
11289 		TEST_CASE_ST(ut_setup, ut_teardown,
11290 			test_snow3g_hash_generate_test_case_3),
11291 		/* Tests with buffers which length is not byte-aligned */
11292 		TEST_CASE_ST(ut_setup, ut_teardown,
11293 			test_snow3g_hash_generate_test_case_4),
11294 		TEST_CASE_ST(ut_setup, ut_teardown,
11295 			test_snow3g_hash_generate_test_case_5),
11296 		TEST_CASE_ST(ut_setup, ut_teardown,
11297 			test_snow3g_hash_generate_test_case_6),
11298 		TEST_CASE_ST(ut_setup, ut_teardown,
11299 			test_snow3g_hash_verify_test_case_1),
11300 		TEST_CASE_ST(ut_setup, ut_teardown,
11301 			test_snow3g_hash_verify_test_case_2),
11302 		TEST_CASE_ST(ut_setup, ut_teardown,
11303 			test_snow3g_hash_verify_test_case_3),
11304 		/* Tests with buffers which length is not byte-aligned */
11305 		TEST_CASE_ST(ut_setup, ut_teardown,
11306 			test_snow3g_hash_verify_test_case_4),
11307 		TEST_CASE_ST(ut_setup, ut_teardown,
11308 			test_snow3g_hash_verify_test_case_5),
11309 		TEST_CASE_ST(ut_setup, ut_teardown,
11310 			test_snow3g_hash_verify_test_case_6),
11311 		TEST_CASE_ST(ut_setup, ut_teardown,
11312 			test_snow3g_cipher_auth_test_case_1),
11313 
11314 		/** SNOW 3G generate auth, then encrypt (UEA2) */
11315 		TEST_CASE_ST(ut_setup, ut_teardown,
11316 			test_snow3g_auth_cipher_test_case_1),
11317 		TEST_CASE_ST(ut_setup, ut_teardown,
11318 			test_snow3g_auth_cipher_test_case_2),
11319 		TEST_CASE_ST(ut_setup, ut_teardown,
11320 			test_snow3g_auth_cipher_test_case_2_oop),
11321 		TEST_CASE_ST(ut_setup, ut_teardown,
11322 			test_snow3g_auth_cipher_part_digest_enc),
11323 		TEST_CASE_ST(ut_setup, ut_teardown,
11324 			test_snow3g_auth_cipher_part_digest_enc_oop),
11325 		TEST_CASE_ST(ut_setup, ut_teardown,
11326 			test_snow3g_auth_cipher_test_case_3_sgl),
11327 		TEST_CASE_ST(ut_setup, ut_teardown,
11328 			test_snow3g_auth_cipher_test_case_3_oop_sgl),
11329 		TEST_CASE_ST(ut_setup, ut_teardown,
11330 			test_snow3g_auth_cipher_part_digest_enc_sgl),
11331 		TEST_CASE_ST(ut_setup, ut_teardown,
11332 			test_snow3g_auth_cipher_part_digest_enc_oop_sgl),
11333 
11334 		/** SNOW 3G decrypt (UEA2), then verify auth */
11335 		TEST_CASE_ST(ut_setup, ut_teardown,
11336 			test_snow3g_auth_cipher_verify_test_case_1),
11337 		TEST_CASE_ST(ut_setup, ut_teardown,
11338 			test_snow3g_auth_cipher_verify_test_case_2),
11339 		TEST_CASE_ST(ut_setup, ut_teardown,
11340 			test_snow3g_auth_cipher_verify_test_case_2_oop),
11341 		TEST_CASE_ST(ut_setup, ut_teardown,
11342 			test_snow3g_auth_cipher_verify_part_digest_enc),
11343 		TEST_CASE_ST(ut_setup, ut_teardown,
11344 			test_snow3g_auth_cipher_verify_part_digest_enc_oop),
11345 		TEST_CASE_ST(ut_setup, ut_teardown,
11346 			test_snow3g_auth_cipher_verify_test_case_3_sgl),
11347 		TEST_CASE_ST(ut_setup, ut_teardown,
11348 			test_snow3g_auth_cipher_verify_test_case_3_oop_sgl),
11349 		TEST_CASE_ST(ut_setup, ut_teardown,
11350 			test_snow3g_auth_cipher_verify_part_digest_enc_sgl),
11351 		TEST_CASE_ST(ut_setup, ut_teardown,
11352 			test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl),
11353 
11354 		TEST_CASES_END() /**< NULL terminate unit test array */
11355 	}
11356 };
11357 
11358 static struct unit_test_suite cryptodev_sw_zuc_testsuite  = {
11359 	.suite_name = "Crypto Device SW ZUC Unit Test Suite",
11360 	.setup = testsuite_setup,
11361 	.teardown = testsuite_teardown,
11362 	.unit_test_cases = {
11363 		/** ZUC encrypt only (EEA3) */
11364 		TEST_CASE_ST(ut_setup, ut_teardown,
11365 			test_zuc_encryption_test_case_1),
11366 		TEST_CASE_ST(ut_setup, ut_teardown,
11367 			test_zuc_encryption_test_case_2),
11368 		TEST_CASE_ST(ut_setup, ut_teardown,
11369 			test_zuc_encryption_test_case_3),
11370 		TEST_CASE_ST(ut_setup, ut_teardown,
11371 			test_zuc_encryption_test_case_4),
11372 		TEST_CASE_ST(ut_setup, ut_teardown,
11373 			test_zuc_encryption_test_case_5),
11374 		TEST_CASE_ST(ut_setup, ut_teardown,
11375 			test_zuc_hash_generate_test_case_1),
11376 		TEST_CASE_ST(ut_setup, ut_teardown,
11377 			test_zuc_hash_generate_test_case_2),
11378 		TEST_CASE_ST(ut_setup, ut_teardown,
11379 			test_zuc_hash_generate_test_case_3),
11380 		TEST_CASE_ST(ut_setup, ut_teardown,
11381 			test_zuc_hash_generate_test_case_4),
11382 		TEST_CASE_ST(ut_setup, ut_teardown,
11383 			test_zuc_hash_generate_test_case_5),
11384 		TEST_CASE_ST(ut_setup, ut_teardown,
11385 			test_zuc_encryption_test_case_6_sgl),
11386 		TEST_CASES_END() /**< NULL terminate unit test array */
11387 	}
11388 };
11389 
11390 static struct unit_test_suite cryptodev_caam_jr_testsuite  = {
11391 	.suite_name = "Crypto CAAM JR Unit Test Suite",
11392 	.setup = testsuite_setup,
11393 	.teardown = testsuite_teardown,
11394 	.unit_test_cases = {
11395 		TEST_CASE_ST(ut_setup, ut_teardown,
11396 			     test_device_configure_invalid_dev_id),
11397 		TEST_CASE_ST(ut_setup, ut_teardown,
11398 			     test_multi_session),
11399 
11400 		TEST_CASE_ST(ut_setup, ut_teardown,
11401 			     test_AES_chain_caam_jr_all),
11402 		TEST_CASE_ST(ut_setup, ut_teardown,
11403 			     test_3DES_chain_caam_jr_all),
11404 		TEST_CASE_ST(ut_setup, ut_teardown,
11405 			     test_AES_cipheronly_caam_jr_all),
11406 		TEST_CASE_ST(ut_setup, ut_teardown,
11407 			     test_3DES_cipheronly_caam_jr_all),
11408 		TEST_CASE_ST(ut_setup, ut_teardown,
11409 			     test_authonly_caam_jr_all),
11410 
11411 		TEST_CASES_END() /**< NULL terminate unit test array */
11412 	}
11413 };
11414 
11415 static struct unit_test_suite cryptodev_dpaa_sec_testsuite  = {
11416 	.suite_name = "Crypto DPAA_SEC Unit Test Suite",
11417 	.setup = testsuite_setup,
11418 	.teardown = testsuite_teardown,
11419 	.unit_test_cases = {
11420 		TEST_CASE_ST(ut_setup, ut_teardown,
11421 			     test_device_configure_invalid_dev_id),
11422 		TEST_CASE_ST(ut_setup, ut_teardown,
11423 			     test_multi_session),
11424 
11425 		TEST_CASE_ST(ut_setup, ut_teardown,
11426 			     test_AES_chain_dpaa_sec_all),
11427 		TEST_CASE_ST(ut_setup, ut_teardown,
11428 			     test_3DES_chain_dpaa_sec_all),
11429 		TEST_CASE_ST(ut_setup, ut_teardown,
11430 			     test_AES_cipheronly_dpaa_sec_all),
11431 		TEST_CASE_ST(ut_setup, ut_teardown,
11432 			     test_3DES_cipheronly_dpaa_sec_all),
11433 		TEST_CASE_ST(ut_setup, ut_teardown,
11434 			     test_authonly_dpaa_sec_all),
11435 
11436 		/** AES GCM Authenticated Encryption */
11437 		TEST_CASE_ST(ut_setup, ut_teardown,
11438 			test_AES_GCM_authenticated_encryption_test_case_1),
11439 		TEST_CASE_ST(ut_setup, ut_teardown,
11440 			test_AES_GCM_authenticated_encryption_test_case_2),
11441 		TEST_CASE_ST(ut_setup, ut_teardown,
11442 			test_AES_GCM_authenticated_encryption_test_case_3),
11443 		TEST_CASE_ST(ut_setup, ut_teardown,
11444 			test_AES_GCM_authenticated_encryption_test_case_4),
11445 		TEST_CASE_ST(ut_setup, ut_teardown,
11446 			test_AES_GCM_authenticated_encryption_test_case_5),
11447 		TEST_CASE_ST(ut_setup, ut_teardown,
11448 			test_AES_GCM_authenticated_encryption_test_case_6),
11449 		TEST_CASE_ST(ut_setup, ut_teardown,
11450 			test_AES_GCM_authenticated_encryption_test_case_7),
11451 
11452 		/** AES GCM Authenticated Decryption */
11453 		TEST_CASE_ST(ut_setup, ut_teardown,
11454 			test_AES_GCM_authenticated_decryption_test_case_1),
11455 		TEST_CASE_ST(ut_setup, ut_teardown,
11456 			test_AES_GCM_authenticated_decryption_test_case_2),
11457 		TEST_CASE_ST(ut_setup, ut_teardown,
11458 			test_AES_GCM_authenticated_decryption_test_case_3),
11459 		TEST_CASE_ST(ut_setup, ut_teardown,
11460 			test_AES_GCM_authenticated_decryption_test_case_4),
11461 		TEST_CASE_ST(ut_setup, ut_teardown,
11462 			test_AES_GCM_authenticated_decryption_test_case_5),
11463 		TEST_CASE_ST(ut_setup, ut_teardown,
11464 			test_AES_GCM_authenticated_decryption_test_case_6),
11465 		TEST_CASE_ST(ut_setup, ut_teardown,
11466 			test_AES_GCM_authenticated_decryption_test_case_7),
11467 
11468 		/** AES GCM Authenticated Encryption 256 bits key */
11469 		TEST_CASE_ST(ut_setup, ut_teardown,
11470 			test_AES_GCM_auth_encryption_test_case_256_1),
11471 		TEST_CASE_ST(ut_setup, ut_teardown,
11472 			test_AES_GCM_auth_encryption_test_case_256_2),
11473 		TEST_CASE_ST(ut_setup, ut_teardown,
11474 			test_AES_GCM_auth_encryption_test_case_256_3),
11475 		TEST_CASE_ST(ut_setup, ut_teardown,
11476 			test_AES_GCM_auth_encryption_test_case_256_4),
11477 		TEST_CASE_ST(ut_setup, ut_teardown,
11478 			test_AES_GCM_auth_encryption_test_case_256_5),
11479 		TEST_CASE_ST(ut_setup, ut_teardown,
11480 			test_AES_GCM_auth_encryption_test_case_256_6),
11481 		TEST_CASE_ST(ut_setup, ut_teardown,
11482 			test_AES_GCM_auth_encryption_test_case_256_7),
11483 
11484 		/** AES GCM Authenticated Decryption 256 bits key */
11485 		TEST_CASE_ST(ut_setup, ut_teardown,
11486 			test_AES_GCM_auth_decryption_test_case_256_1),
11487 		TEST_CASE_ST(ut_setup, ut_teardown,
11488 			test_AES_GCM_auth_decryption_test_case_256_2),
11489 		TEST_CASE_ST(ut_setup, ut_teardown,
11490 			test_AES_GCM_auth_decryption_test_case_256_3),
11491 		TEST_CASE_ST(ut_setup, ut_teardown,
11492 			test_AES_GCM_auth_decryption_test_case_256_4),
11493 		TEST_CASE_ST(ut_setup, ut_teardown,
11494 			test_AES_GCM_auth_decryption_test_case_256_5),
11495 		TEST_CASE_ST(ut_setup, ut_teardown,
11496 			test_AES_GCM_auth_decryption_test_case_256_6),
11497 		TEST_CASE_ST(ut_setup, ut_teardown,
11498 			test_AES_GCM_auth_decryption_test_case_256_7),
11499 
11500 		/** Out of place tests */
11501 		TEST_CASE_ST(ut_setup, ut_teardown,
11502 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
11503 		TEST_CASE_ST(ut_setup, ut_teardown,
11504 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
11505 
11506 		/** Scatter-Gather */
11507 		TEST_CASE_ST(ut_setup, ut_teardown,
11508 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
11509 		TEST_CASE_ST(ut_setup, ut_teardown,
11510 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
11511 		TEST_CASE_ST(ut_setup, ut_teardown,
11512 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
11513 		TEST_CASE_ST(ut_setup, ut_teardown,
11514 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
11515 
11516 		TEST_CASES_END() /**< NULL terminate unit test array */
11517 	}
11518 };
11519 
11520 static struct unit_test_suite cryptodev_dpaa2_sec_testsuite  = {
11521 	.suite_name = "Crypto DPAA2_SEC Unit Test Suite",
11522 	.setup = testsuite_setup,
11523 	.teardown = testsuite_teardown,
11524 	.unit_test_cases = {
11525 		TEST_CASE_ST(ut_setup, ut_teardown,
11526 			test_device_configure_invalid_dev_id),
11527 		TEST_CASE_ST(ut_setup, ut_teardown,
11528 			test_multi_session),
11529 
11530 		TEST_CASE_ST(ut_setup, ut_teardown,
11531 			test_AES_chain_dpaa2_sec_all),
11532 		TEST_CASE_ST(ut_setup, ut_teardown,
11533 			test_3DES_chain_dpaa2_sec_all),
11534 		TEST_CASE_ST(ut_setup, ut_teardown,
11535 			test_AES_cipheronly_dpaa2_sec_all),
11536 		TEST_CASE_ST(ut_setup, ut_teardown,
11537 			test_3DES_cipheronly_dpaa2_sec_all),
11538 		TEST_CASE_ST(ut_setup, ut_teardown,
11539 			test_authonly_dpaa2_sec_all),
11540 
11541 		/** AES GCM Authenticated Encryption */
11542 		TEST_CASE_ST(ut_setup, ut_teardown,
11543 			test_AES_GCM_authenticated_encryption_test_case_1),
11544 		TEST_CASE_ST(ut_setup, ut_teardown,
11545 			test_AES_GCM_authenticated_encryption_test_case_2),
11546 		TEST_CASE_ST(ut_setup, ut_teardown,
11547 			test_AES_GCM_authenticated_encryption_test_case_3),
11548 		TEST_CASE_ST(ut_setup, ut_teardown,
11549 			test_AES_GCM_authenticated_encryption_test_case_4),
11550 		TEST_CASE_ST(ut_setup, ut_teardown,
11551 			test_AES_GCM_authenticated_encryption_test_case_5),
11552 		TEST_CASE_ST(ut_setup, ut_teardown,
11553 			test_AES_GCM_authenticated_encryption_test_case_6),
11554 		TEST_CASE_ST(ut_setup, ut_teardown,
11555 			test_AES_GCM_authenticated_encryption_test_case_7),
11556 
11557 		/** AES GCM Authenticated Decryption */
11558 		TEST_CASE_ST(ut_setup, ut_teardown,
11559 			test_AES_GCM_authenticated_decryption_test_case_1),
11560 		TEST_CASE_ST(ut_setup, ut_teardown,
11561 			test_AES_GCM_authenticated_decryption_test_case_2),
11562 		TEST_CASE_ST(ut_setup, ut_teardown,
11563 			test_AES_GCM_authenticated_decryption_test_case_3),
11564 		TEST_CASE_ST(ut_setup, ut_teardown,
11565 			test_AES_GCM_authenticated_decryption_test_case_4),
11566 		TEST_CASE_ST(ut_setup, ut_teardown,
11567 			test_AES_GCM_authenticated_decryption_test_case_5),
11568 		TEST_CASE_ST(ut_setup, ut_teardown,
11569 			test_AES_GCM_authenticated_decryption_test_case_6),
11570 		TEST_CASE_ST(ut_setup, ut_teardown,
11571 			test_AES_GCM_authenticated_decryption_test_case_7),
11572 
11573 		/** AES GCM Authenticated Encryption 192 bits key */
11574 		TEST_CASE_ST(ut_setup, ut_teardown,
11575 			test_AES_GCM_auth_encryption_test_case_192_1),
11576 		TEST_CASE_ST(ut_setup, ut_teardown,
11577 			test_AES_GCM_auth_encryption_test_case_192_2),
11578 		TEST_CASE_ST(ut_setup, ut_teardown,
11579 			test_AES_GCM_auth_encryption_test_case_192_3),
11580 		TEST_CASE_ST(ut_setup, ut_teardown,
11581 			test_AES_GCM_auth_encryption_test_case_192_4),
11582 		TEST_CASE_ST(ut_setup, ut_teardown,
11583 			test_AES_GCM_auth_encryption_test_case_192_5),
11584 		TEST_CASE_ST(ut_setup, ut_teardown,
11585 			test_AES_GCM_auth_encryption_test_case_192_6),
11586 		TEST_CASE_ST(ut_setup, ut_teardown,
11587 			test_AES_GCM_auth_encryption_test_case_192_7),
11588 
11589 		/** AES GCM Authenticated Decryption 192 bits key */
11590 		TEST_CASE_ST(ut_setup, ut_teardown,
11591 			test_AES_GCM_auth_decryption_test_case_192_1),
11592 		TEST_CASE_ST(ut_setup, ut_teardown,
11593 			test_AES_GCM_auth_decryption_test_case_192_2),
11594 		TEST_CASE_ST(ut_setup, ut_teardown,
11595 			test_AES_GCM_auth_decryption_test_case_192_3),
11596 		TEST_CASE_ST(ut_setup, ut_teardown,
11597 			test_AES_GCM_auth_decryption_test_case_192_4),
11598 		TEST_CASE_ST(ut_setup, ut_teardown,
11599 			test_AES_GCM_auth_decryption_test_case_192_5),
11600 		TEST_CASE_ST(ut_setup, ut_teardown,
11601 			test_AES_GCM_auth_decryption_test_case_192_6),
11602 		TEST_CASE_ST(ut_setup, ut_teardown,
11603 			test_AES_GCM_auth_decryption_test_case_192_7),
11604 
11605 		/** AES GCM Authenticated Encryption 256 bits key */
11606 		TEST_CASE_ST(ut_setup, ut_teardown,
11607 			test_AES_GCM_auth_encryption_test_case_256_1),
11608 		TEST_CASE_ST(ut_setup, ut_teardown,
11609 			test_AES_GCM_auth_encryption_test_case_256_2),
11610 		TEST_CASE_ST(ut_setup, ut_teardown,
11611 			test_AES_GCM_auth_encryption_test_case_256_3),
11612 		TEST_CASE_ST(ut_setup, ut_teardown,
11613 			test_AES_GCM_auth_encryption_test_case_256_4),
11614 		TEST_CASE_ST(ut_setup, ut_teardown,
11615 			test_AES_GCM_auth_encryption_test_case_256_5),
11616 		TEST_CASE_ST(ut_setup, ut_teardown,
11617 			test_AES_GCM_auth_encryption_test_case_256_6),
11618 		TEST_CASE_ST(ut_setup, ut_teardown,
11619 			test_AES_GCM_auth_encryption_test_case_256_7),
11620 
11621 		/** AES GCM Authenticated Decryption 256 bits key */
11622 		TEST_CASE_ST(ut_setup, ut_teardown,
11623 			test_AES_GCM_auth_decryption_test_case_256_1),
11624 		TEST_CASE_ST(ut_setup, ut_teardown,
11625 			test_AES_GCM_auth_decryption_test_case_256_2),
11626 		TEST_CASE_ST(ut_setup, ut_teardown,
11627 			test_AES_GCM_auth_decryption_test_case_256_3),
11628 		TEST_CASE_ST(ut_setup, ut_teardown,
11629 			test_AES_GCM_auth_decryption_test_case_256_4),
11630 		TEST_CASE_ST(ut_setup, ut_teardown,
11631 			test_AES_GCM_auth_decryption_test_case_256_5),
11632 		TEST_CASE_ST(ut_setup, ut_teardown,
11633 			test_AES_GCM_auth_decryption_test_case_256_6),
11634 		TEST_CASE_ST(ut_setup, ut_teardown,
11635 			test_AES_GCM_auth_decryption_test_case_256_7),
11636 
11637 		/** Out of place tests */
11638 		TEST_CASE_ST(ut_setup, ut_teardown,
11639 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
11640 		TEST_CASE_ST(ut_setup, ut_teardown,
11641 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
11642 
11643 		/** Scatter-Gather */
11644 		TEST_CASE_ST(ut_setup, ut_teardown,
11645 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
11646 		TEST_CASE_ST(ut_setup, ut_teardown,
11647 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
11648 		TEST_CASE_ST(ut_setup, ut_teardown,
11649 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
11650 		TEST_CASE_ST(ut_setup, ut_teardown,
11651 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
11652 
11653 		TEST_CASES_END() /**< NULL terminate unit test array */
11654 	}
11655 };
11656 
11657 static struct unit_test_suite cryptodev_null_testsuite  = {
11658 	.suite_name = "Crypto Device NULL Unit Test Suite",
11659 	.setup = testsuite_setup,
11660 	.teardown = testsuite_teardown,
11661 	.unit_test_cases = {
11662 		TEST_CASE_ST(ut_setup, ut_teardown,
11663 			test_null_invalid_operation),
11664 		TEST_CASE_ST(ut_setup, ut_teardown,
11665 			test_null_burst_operation),
11666 		TEST_CASE_ST(ut_setup, ut_teardown,
11667 			test_AES_chain_null_all),
11668 		TEST_CASE_ST(ut_setup, ut_teardown,
11669 			test_AES_cipheronly_null_all),
11670 		TEST_CASE_ST(ut_setup, ut_teardown,
11671 				test_authonly_null_all),
11672 
11673 		TEST_CASES_END() /**< NULL terminate unit test array */
11674 	}
11675 };
11676 
11677 static struct unit_test_suite cryptodev_armv8_testsuite  = {
11678 	.suite_name = "Crypto Device ARMv8 Unit Test Suite",
11679 	.setup = testsuite_setup,
11680 	.teardown = testsuite_teardown,
11681 	.unit_test_cases = {
11682 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
11683 
11684 		/** Negative tests */
11685 		TEST_CASE_ST(ut_setup, ut_teardown,
11686 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
11687 		TEST_CASE_ST(ut_setup, ut_teardown,
11688 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
11689 
11690 		TEST_CASES_END() /**< NULL terminate unit test array */
11691 	}
11692 };
11693 
11694 static struct unit_test_suite cryptodev_mrvl_testsuite  = {
11695 	.suite_name = "Crypto Device Marvell Component Test Suite",
11696 	.setup = testsuite_setup,
11697 	.teardown = testsuite_teardown,
11698 	.unit_test_cases = {
11699 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
11700 		TEST_CASE_ST(ut_setup, ut_teardown,
11701 				test_multi_session_random_usage),
11702 		TEST_CASE_ST(ut_setup, ut_teardown,
11703 				test_AES_chain_mrvl_all),
11704 		TEST_CASE_ST(ut_setup, ut_teardown,
11705 				test_AES_cipheronly_mrvl_all),
11706 		TEST_CASE_ST(ut_setup, ut_teardown,
11707 				test_authonly_mrvl_all),
11708 		TEST_CASE_ST(ut_setup, ut_teardown,
11709 				test_3DES_chain_mrvl_all),
11710 		TEST_CASE_ST(ut_setup, ut_teardown,
11711 				test_3DES_cipheronly_mrvl_all),
11712 
11713 		/** Negative tests */
11714 		TEST_CASE_ST(ut_setup, ut_teardown,
11715 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
11716 		TEST_CASE_ST(ut_setup, ut_teardown,
11717 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
11718 		TEST_CASE_ST(ut_setup, ut_teardown,
11719 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
11720 		TEST_CASE_ST(ut_setup, ut_teardown,
11721 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
11722 
11723 		TEST_CASES_END() /**< NULL terminate unit test array */
11724 	}
11725 };
11726 
11727 static struct unit_test_suite cryptodev_ccp_testsuite  = {
11728 	.suite_name = "Crypto Device CCP Unit Test Suite",
11729 	.setup = testsuite_setup,
11730 	.teardown = testsuite_teardown,
11731 	.unit_test_cases = {
11732 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
11733 		TEST_CASE_ST(ut_setup, ut_teardown,
11734 				test_multi_session_random_usage),
11735 		TEST_CASE_ST(ut_setup, ut_teardown,
11736 				test_AES_chain_ccp_all),
11737 		TEST_CASE_ST(ut_setup, ut_teardown,
11738 				test_AES_cipheronly_ccp_all),
11739 		TEST_CASE_ST(ut_setup, ut_teardown,
11740 				test_3DES_chain_ccp_all),
11741 		TEST_CASE_ST(ut_setup, ut_teardown,
11742 				test_3DES_cipheronly_ccp_all),
11743 		TEST_CASE_ST(ut_setup, ut_teardown,
11744 				test_authonly_ccp_all),
11745 
11746 		/** Negative tests */
11747 		TEST_CASE_ST(ut_setup, ut_teardown,
11748 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
11749 		TEST_CASE_ST(ut_setup, ut_teardown,
11750 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
11751 		TEST_CASE_ST(ut_setup, ut_teardown,
11752 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
11753 		TEST_CASE_ST(ut_setup, ut_teardown,
11754 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
11755 
11756 		TEST_CASES_END() /**< NULL terminate unit test array */
11757 	}
11758 };
11759 
11760 static struct unit_test_suite cryptodev_octeontx_testsuite  = {
11761 	.suite_name = "Crypto Device OCTEONTX Unit Test Suite",
11762 	.setup = testsuite_setup,
11763 	.teardown = testsuite_teardown,
11764 	.unit_test_cases = {
11765 		TEST_CASE_ST(ut_setup, ut_teardown,
11766 			test_AES_chain_octeontx_all),
11767 		TEST_CASE_ST(ut_setup, ut_teardown,
11768 			test_AES_cipheronly_octeontx_all),
11769 		TEST_CASE_ST(ut_setup, ut_teardown,
11770 			test_3DES_chain_octeontx_all),
11771 		TEST_CASE_ST(ut_setup, ut_teardown,
11772 			test_3DES_cipheronly_octeontx_all),
11773 		TEST_CASE_ST(ut_setup, ut_teardown,
11774 			test_authonly_octeontx_all),
11775 
11776 		/** AES GCM Authenticated Encryption */
11777 		TEST_CASE_ST(ut_setup, ut_teardown,
11778 			test_AES_GCM_authenticated_encryption_test_case_1),
11779 		TEST_CASE_ST(ut_setup, ut_teardown,
11780 			test_AES_GCM_authenticated_encryption_test_case_2),
11781 		TEST_CASE_ST(ut_setup, ut_teardown,
11782 			test_AES_GCM_authenticated_encryption_test_case_3),
11783 		TEST_CASE_ST(ut_setup, ut_teardown,
11784 			test_AES_GCM_authenticated_encryption_test_case_4),
11785 		TEST_CASE_ST(ut_setup, ut_teardown,
11786 			test_AES_GCM_authenticated_encryption_test_case_5),
11787 		TEST_CASE_ST(ut_setup, ut_teardown,
11788 			test_AES_GCM_authenticated_encryption_test_case_6),
11789 		TEST_CASE_ST(ut_setup, ut_teardown,
11790 			test_AES_GCM_authenticated_encryption_test_case_7),
11791 
11792 		/** AES GCM Authenticated Decryption */
11793 		TEST_CASE_ST(ut_setup, ut_teardown,
11794 			test_AES_GCM_authenticated_decryption_test_case_1),
11795 		TEST_CASE_ST(ut_setup, ut_teardown,
11796 			test_AES_GCM_authenticated_decryption_test_case_2),
11797 		TEST_CASE_ST(ut_setup, ut_teardown,
11798 			test_AES_GCM_authenticated_decryption_test_case_3),
11799 		TEST_CASE_ST(ut_setup, ut_teardown,
11800 			test_AES_GCM_authenticated_decryption_test_case_4),
11801 		TEST_CASE_ST(ut_setup, ut_teardown,
11802 			test_AES_GCM_authenticated_decryption_test_case_5),
11803 		TEST_CASE_ST(ut_setup, ut_teardown,
11804 			test_AES_GCM_authenticated_decryption_test_case_6),
11805 		TEST_CASE_ST(ut_setup, ut_teardown,
11806 			test_AES_GCM_authenticated_decryption_test_case_7),
11807 		/** AES GMAC Authentication */
11808 		TEST_CASE_ST(ut_setup, ut_teardown,
11809 			test_AES_GMAC_authentication_test_case_1),
11810 		TEST_CASE_ST(ut_setup, ut_teardown,
11811 			test_AES_GMAC_authentication_verify_test_case_1),
11812 		TEST_CASE_ST(ut_setup, ut_teardown,
11813 			test_AES_GMAC_authentication_test_case_2),
11814 		TEST_CASE_ST(ut_setup, ut_teardown,
11815 			test_AES_GMAC_authentication_verify_test_case_2),
11816 		TEST_CASE_ST(ut_setup, ut_teardown,
11817 			test_AES_GMAC_authentication_test_case_3),
11818 		TEST_CASE_ST(ut_setup, ut_teardown,
11819 			test_AES_GMAC_authentication_verify_test_case_3),
11820 
11821 		/** SNOW 3G encrypt only (UEA2) */
11822 		TEST_CASE_ST(ut_setup, ut_teardown,
11823 			test_snow3g_encryption_test_case_1),
11824 		TEST_CASE_ST(ut_setup, ut_teardown,
11825 			test_snow3g_encryption_test_case_2),
11826 		TEST_CASE_ST(ut_setup, ut_teardown,
11827 			test_snow3g_encryption_test_case_3),
11828 		TEST_CASE_ST(ut_setup, ut_teardown,
11829 			test_snow3g_encryption_test_case_4),
11830 		TEST_CASE_ST(ut_setup, ut_teardown,
11831 			test_snow3g_encryption_test_case_5),
11832 
11833 		TEST_CASE_ST(ut_setup, ut_teardown,
11834 			test_snow3g_encryption_test_case_1_oop),
11835 		TEST_CASE_ST(ut_setup, ut_teardown,
11836 			test_snow3g_decryption_test_case_1_oop),
11837 		TEST_CASE_ST(ut_setup, ut_teardown,
11838 			test_snow3g_encryption_test_case_1_oop_sgl),
11839 
11840 		/** SNOW 3G decrypt only (UEA2) */
11841 		TEST_CASE_ST(ut_setup, ut_teardown,
11842 			test_snow3g_decryption_test_case_1),
11843 		TEST_CASE_ST(ut_setup, ut_teardown,
11844 			test_snow3g_decryption_test_case_2),
11845 		TEST_CASE_ST(ut_setup, ut_teardown,
11846 			test_snow3g_decryption_test_case_3),
11847 		TEST_CASE_ST(ut_setup, ut_teardown,
11848 			test_snow3g_decryption_test_case_4),
11849 		TEST_CASE_ST(ut_setup, ut_teardown,
11850 			test_snow3g_decryption_test_case_5),
11851 
11852 		TEST_CASE_ST(ut_setup, ut_teardown,
11853 			test_snow3g_hash_generate_test_case_1),
11854 		TEST_CASE_ST(ut_setup, ut_teardown,
11855 			test_snow3g_hash_generate_test_case_2),
11856 		TEST_CASE_ST(ut_setup, ut_teardown,
11857 			test_snow3g_hash_generate_test_case_3),
11858 		TEST_CASE_ST(ut_setup, ut_teardown,
11859 			test_snow3g_hash_verify_test_case_1),
11860 		TEST_CASE_ST(ut_setup, ut_teardown,
11861 			test_snow3g_hash_verify_test_case_2),
11862 		TEST_CASE_ST(ut_setup, ut_teardown,
11863 			test_snow3g_hash_verify_test_case_3),
11864 
11865 		/** ZUC encrypt only (EEA3) */
11866 		TEST_CASE_ST(ut_setup, ut_teardown,
11867 			test_zuc_encryption_test_case_1),
11868 		TEST_CASE_ST(ut_setup, ut_teardown,
11869 			test_zuc_encryption_test_case_2),
11870 		TEST_CASE_ST(ut_setup, ut_teardown,
11871 			test_zuc_encryption_test_case_3),
11872 		TEST_CASE_ST(ut_setup, ut_teardown,
11873 			test_zuc_encryption_test_case_4),
11874 		TEST_CASE_ST(ut_setup, ut_teardown,
11875 			test_zuc_encryption_test_case_5),
11876 		TEST_CASE_ST(ut_setup, ut_teardown,
11877 			test_zuc_hash_generate_test_case_1),
11878 		TEST_CASE_ST(ut_setup, ut_teardown,
11879 			test_zuc_hash_generate_test_case_2),
11880 		TEST_CASE_ST(ut_setup, ut_teardown,
11881 			test_zuc_hash_generate_test_case_3),
11882 		TEST_CASE_ST(ut_setup, ut_teardown,
11883 			test_zuc_hash_generate_test_case_4),
11884 		TEST_CASE_ST(ut_setup, ut_teardown,
11885 			test_zuc_hash_generate_test_case_5),
11886 		TEST_CASE_ST(ut_setup, ut_teardown,
11887 			test_zuc_encryption_test_case_6_sgl),
11888 
11889 		/** KASUMI encrypt only (UEA1) */
11890 		TEST_CASE_ST(ut_setup, ut_teardown,
11891 			test_kasumi_encryption_test_case_1),
11892 		TEST_CASE_ST(ut_setup, ut_teardown,
11893 			test_kasumi_encryption_test_case_2),
11894 		TEST_CASE_ST(ut_setup, ut_teardown,
11895 			test_kasumi_encryption_test_case_3),
11896 		TEST_CASE_ST(ut_setup, ut_teardown,
11897 			test_kasumi_encryption_test_case_4),
11898 		TEST_CASE_ST(ut_setup, ut_teardown,
11899 			test_kasumi_encryption_test_case_5),
11900 		TEST_CASE_ST(ut_setup, ut_teardown,
11901 			test_kasumi_encryption_test_case_1_sgl),
11902 		TEST_CASE_ST(ut_setup, ut_teardown,
11903 			test_kasumi_encryption_test_case_1_oop_sgl),
11904 		/** KASUMI decrypt only (UEA1) */
11905 		TEST_CASE_ST(ut_setup, ut_teardown,
11906 			test_kasumi_decryption_test_case_1),
11907 		TEST_CASE_ST(ut_setup, ut_teardown,
11908 			test_kasumi_decryption_test_case_2),
11909 		TEST_CASE_ST(ut_setup, ut_teardown,
11910 			test_kasumi_decryption_test_case_3),
11911 		TEST_CASE_ST(ut_setup, ut_teardown,
11912 			test_kasumi_decryption_test_case_4),
11913 		TEST_CASE_ST(ut_setup, ut_teardown,
11914 			test_kasumi_decryption_test_case_5),
11915 
11916 		TEST_CASE_ST(ut_setup, ut_teardown,
11917 			test_kasumi_encryption_test_case_1_oop),
11918 		TEST_CASE_ST(ut_setup, ut_teardown,
11919 			test_kasumi_decryption_test_case_1_oop),
11920 
11921 		/** KASUMI hash only (UIA1) */
11922 		TEST_CASE_ST(ut_setup, ut_teardown,
11923 			test_kasumi_hash_generate_test_case_1),
11924 		TEST_CASE_ST(ut_setup, ut_teardown,
11925 			test_kasumi_hash_generate_test_case_2),
11926 		TEST_CASE_ST(ut_setup, ut_teardown,
11927 			test_kasumi_hash_generate_test_case_3),
11928 		TEST_CASE_ST(ut_setup, ut_teardown,
11929 			test_kasumi_hash_generate_test_case_4),
11930 		TEST_CASE_ST(ut_setup, ut_teardown,
11931 			test_kasumi_hash_generate_test_case_5),
11932 		TEST_CASE_ST(ut_setup, ut_teardown,
11933 			test_kasumi_hash_generate_test_case_6),
11934 		TEST_CASE_ST(ut_setup, ut_teardown,
11935 			test_kasumi_hash_verify_test_case_1),
11936 		TEST_CASE_ST(ut_setup, ut_teardown,
11937 			test_kasumi_hash_verify_test_case_2),
11938 		TEST_CASE_ST(ut_setup, ut_teardown,
11939 			test_kasumi_hash_verify_test_case_3),
11940 		TEST_CASE_ST(ut_setup, ut_teardown,
11941 			test_kasumi_hash_verify_test_case_4),
11942 		TEST_CASE_ST(ut_setup, ut_teardown,
11943 			test_kasumi_hash_verify_test_case_5),
11944 
11945 		/** NULL tests */
11946 		TEST_CASE_ST(ut_setup, ut_teardown,
11947 			test_null_cipher_only_operation),
11948 		TEST_CASE_ST(ut_setup, ut_teardown,
11949 			test_null_auth_only_operation),
11950 		TEST_CASE_ST(ut_setup, ut_teardown,
11951 			test_null_cipher_auth_operation),
11952 		TEST_CASE_ST(ut_setup, ut_teardown,
11953 			test_null_auth_cipher_operation),
11954 
11955 		/** Negative tests */
11956 		TEST_CASE_ST(ut_setup, ut_teardown,
11957 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
11958 		TEST_CASE_ST(ut_setup, ut_teardown,
11959 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
11960 		TEST_CASE_ST(ut_setup, ut_teardown,
11961 			authentication_verify_AES128_GMAC_fail_data_corrupt),
11962 		TEST_CASE_ST(ut_setup, ut_teardown,
11963 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
11964 		TEST_CASE_ST(ut_setup, ut_teardown,
11965 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
11966 		TEST_CASE_ST(ut_setup, ut_teardown,
11967 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
11968 		TEST_CASES_END() /**< NULL terminate unit test array */
11969 	}
11970 };
11971 
11972 static int
11973 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
11974 {
11975 	gbl_driver_id =	rte_cryptodev_driver_id_get(
11976 			RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
11977 
11978 	if (gbl_driver_id == -1) {
11979 		RTE_LOG(ERR, USER1, "QAT PMD must be loaded. Check that both "
11980 		"CONFIG_RTE_LIBRTE_PMD_QAT and CONFIG_RTE_LIBRTE_PMD_QAT_SYM "
11981 		"are enabled in config file to run this testsuite.\n");
11982 		return TEST_SKIPPED;
11983 	}
11984 
11985 	return unit_test_suite_runner(&cryptodev_qat_testsuite);
11986 }
11987 
11988 static int
11989 test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/)
11990 {
11991 	gbl_driver_id =	rte_cryptodev_driver_id_get(
11992 			RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD));
11993 
11994 	if (gbl_driver_id == -1) {
11995 		RTE_LOG(ERR, USER1, "VIRTIO PMD must be loaded. Check if "
11996 				"CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO is enabled "
11997 				"in config file to run this testsuite.\n");
11998 		return TEST_FAILED;
11999 	}
12000 
12001 	return unit_test_suite_runner(&cryptodev_virtio_testsuite);
12002 }
12003 
12004 static int
12005 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
12006 {
12007 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12008 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
12009 
12010 	if (gbl_driver_id == -1) {
12011 		RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded. Check if "
12012 				"CONFIG_RTE_LIBRTE_PMD_AESNI_MB is enabled "
12013 				"in config file to run this testsuite.\n");
12014 		return TEST_SKIPPED;
12015 	}
12016 
12017 	return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
12018 }
12019 
12020 static int
12021 test_cryptodev_openssl(void)
12022 {
12023 	gbl_driver_id = rte_cryptodev_driver_id_get(
12024 			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
12025 
12026 	if (gbl_driver_id == -1) {
12027 		RTE_LOG(ERR, USER1, "OPENSSL PMD must be loaded. Check if "
12028 				"CONFIG_RTE_LIBRTE_PMD_OPENSSL is enabled "
12029 				"in config file to run this testsuite.\n");
12030 		return TEST_SKIPPED;
12031 	}
12032 
12033 	return unit_test_suite_runner(&cryptodev_openssl_testsuite);
12034 }
12035 
12036 static int
12037 test_cryptodev_aesni_gcm(void)
12038 {
12039 	gbl_driver_id = rte_cryptodev_driver_id_get(
12040 			RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
12041 
12042 	if (gbl_driver_id == -1) {
12043 		RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded. Check if "
12044 				"CONFIG_RTE_LIBRTE_PMD_AESNI_GCM is enabled "
12045 				"in config file to run this testsuite.\n");
12046 		return TEST_SKIPPED;
12047 	}
12048 
12049 	return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
12050 }
12051 
12052 static int
12053 test_cryptodev_null(void)
12054 {
12055 	gbl_driver_id = rte_cryptodev_driver_id_get(
12056 			RTE_STR(CRYPTODEV_NAME_NULL_PMD));
12057 
12058 	if (gbl_driver_id == -1) {
12059 		RTE_LOG(ERR, USER1, "NULL PMD must be loaded. Check if "
12060 				"CONFIG_RTE_LIBRTE_PMD_NULL is enabled "
12061 				"in config file to run this testsuite.\n");
12062 		return TEST_SKIPPED;
12063 	}
12064 
12065 	return unit_test_suite_runner(&cryptodev_null_testsuite);
12066 }
12067 
12068 static int
12069 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
12070 {
12071 	gbl_driver_id = rte_cryptodev_driver_id_get(
12072 			RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
12073 
12074 	if (gbl_driver_id == -1) {
12075 		RTE_LOG(ERR, USER1, "SNOW3G PMD must be loaded. Check if "
12076 				"CONFIG_RTE_LIBRTE_PMD_SNOW3G is enabled "
12077 				"in config file to run this testsuite.\n");
12078 		return TEST_SKIPPED;
12079 	}
12080 
12081 	return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
12082 }
12083 
12084 static int
12085 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
12086 {
12087 	gbl_driver_id = rte_cryptodev_driver_id_get(
12088 			RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
12089 
12090 	if (gbl_driver_id == -1) {
12091 		RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
12092 				"CONFIG_RTE_LIBRTE_PMD_KASUMI is enabled "
12093 				"in config file to run this testsuite.\n");
12094 		return TEST_SKIPPED;
12095 	}
12096 
12097 	return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
12098 }
12099 
12100 static int
12101 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
12102 {
12103 	gbl_driver_id = rte_cryptodev_driver_id_get(
12104 			RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
12105 
12106 	if (gbl_driver_id == -1) {
12107 		RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
12108 				"CONFIG_RTE_LIBRTE_PMD_ZUC is enabled "
12109 				"in config file to run this testsuite.\n");
12110 		return TEST_SKIPPED;
12111 	}
12112 
12113 	return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
12114 }
12115 
12116 static int
12117 test_cryptodev_armv8(void)
12118 {
12119 	gbl_driver_id = rte_cryptodev_driver_id_get(
12120 			RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
12121 
12122 	if (gbl_driver_id == -1) {
12123 		RTE_LOG(ERR, USER1, "ARMV8 PMD must be loaded. Check if "
12124 				"CONFIG_RTE_LIBRTE_PMD_ARMV8 is enabled "
12125 				"in config file to run this testsuite.\n");
12126 		return TEST_SKIPPED;
12127 	}
12128 
12129 	return unit_test_suite_runner(&cryptodev_armv8_testsuite);
12130 }
12131 
12132 static int
12133 test_cryptodev_mrvl(void)
12134 {
12135 	gbl_driver_id = rte_cryptodev_driver_id_get(
12136 			RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
12137 
12138 	if (gbl_driver_id == -1) {
12139 		RTE_LOG(ERR, USER1, "MVSAM PMD must be loaded. Check if "
12140 				"CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO is enabled "
12141 				"in config file to run this testsuite.\n");
12142 		return TEST_SKIPPED;
12143 	}
12144 
12145 	return unit_test_suite_runner(&cryptodev_mrvl_testsuite);
12146 }
12147 
12148 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
12149 
12150 static int
12151 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
12152 {
12153 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12154 			RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
12155 
12156 	if (gbl_driver_id == -1) {
12157 		RTE_LOG(ERR, USER1, "SCHEDULER PMD must be loaded. Check if "
12158 				"CONFIG_RTE_LIBRTE_PMD_SCHEDULER is enabled "
12159 				"in config file to run this testsuite.\n");
12160 		return TEST_SKIPPED;
12161 	}
12162 
12163 	if (rte_cryptodev_driver_id_get(
12164 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) == -1) {
12165 		RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
12166 			" enabled in config file to run this testsuite.\n");
12167 		return TEST_SKIPPED;
12168 }
12169 	return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
12170 }
12171 
12172 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
12173 
12174 #endif
12175 
12176 static int
12177 test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
12178 {
12179 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12180 			RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD));
12181 
12182 	if (gbl_driver_id == -1) {
12183 		RTE_LOG(ERR, USER1, "DPAA2 SEC PMD must be loaded. Check if "
12184 				"CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC is enabled "
12185 				"in config file to run this testsuite.\n");
12186 		return TEST_SKIPPED;
12187 	}
12188 
12189 	return unit_test_suite_runner(&cryptodev_dpaa2_sec_testsuite);
12190 }
12191 
12192 static int
12193 test_cryptodev_dpaa_sec(void /*argv __rte_unused, int argc __rte_unused*/)
12194 {
12195 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12196 			RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD));
12197 
12198 	if (gbl_driver_id == -1) {
12199 		RTE_LOG(ERR, USER1, "DPAA SEC PMD must be loaded. Check if "
12200 				"CONFIG_RTE_LIBRTE_PMD_DPAA_SEC is enabled "
12201 				"in config file to run this testsuite.\n");
12202 		return TEST_SKIPPED;
12203 	}
12204 
12205 	return unit_test_suite_runner(&cryptodev_dpaa_sec_testsuite);
12206 }
12207 
12208 static int
12209 test_cryptodev_ccp(void)
12210 {
12211 	gbl_driver_id = rte_cryptodev_driver_id_get(
12212 			RTE_STR(CRYPTODEV_NAME_CCP_PMD));
12213 
12214 	if (gbl_driver_id == -1) {
12215 		RTE_LOG(ERR, USER1, "CCP PMD must be loaded. Check if "
12216 				"CONFIG_RTE_LIBRTE_PMD_CCP is enabled "
12217 				"in config file to run this testsuite.\n");
12218 		return TEST_FAILED;
12219 	}
12220 
12221 	return unit_test_suite_runner(&cryptodev_ccp_testsuite);
12222 }
12223 
12224 static int
12225 test_cryptodev_octeontx(void)
12226 {
12227 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12228 			RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD));
12229 	if (gbl_driver_id == -1) {
12230 		RTE_LOG(ERR, USER1, "OCTEONTX PMD must be loaded. Check if "
12231 				"CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO is "
12232 				"enabled in config file to run this "
12233 				"testsuite.\n");
12234 		return TEST_FAILED;
12235 	}
12236 	return unit_test_suite_runner(&cryptodev_octeontx_testsuite);
12237 }
12238 
12239 static int
12240 test_cryptodev_caam_jr(void /*argv __rte_unused, int argc __rte_unused*/)
12241 {
12242 	gbl_driver_id =	rte_cryptodev_driver_id_get(
12243 			RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD));
12244 
12245 	if (gbl_driver_id == -1) {
12246 		RTE_LOG(ERR, USER1, "CAAM_JR PMD must be loaded. Check if "
12247 				"CONFIG_RTE_LIBRTE_PMD_CAAM_JR is enabled "
12248 				"in config file to run this testsuite.\n");
12249 		return TEST_FAILED;
12250 	}
12251 
12252 	return unit_test_suite_runner(&cryptodev_caam_jr_testsuite);
12253 }
12254 
12255 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
12256 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
12257 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
12258 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
12259 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
12260 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
12261 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
12262 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
12263 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);
12264 REGISTER_TEST_COMMAND(cryptodev_sw_mvsam_autotest, test_cryptodev_mrvl);
12265 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec);
12266 REGISTER_TEST_COMMAND(cryptodev_dpaa_sec_autotest, test_cryptodev_dpaa_sec);
12267 REGISTER_TEST_COMMAND(cryptodev_ccp_autotest, test_cryptodev_ccp);
12268 REGISTER_TEST_COMMAND(cryptodev_virtio_autotest, test_cryptodev_virtio);
12269 REGISTER_TEST_COMMAND(cryptodev_octeontx_autotest, test_cryptodev_octeontx);
12270 REGISTER_TEST_COMMAND(cryptodev_caam_jr_autotest, test_cryptodev_caam_jr);
12271