xref: /dpdk/app/test/test_cryptodev.c (revision 61f7c988)
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 #include "test_cryptodev_mixed_test_vectors.h"
42 #ifdef RTE_LIBRTE_SECURITY
43 #include "test_cryptodev_security_pdcp_test_vectors.h"
44 #include "test_cryptodev_security_pdcp_test_func.h"
45 #endif
46 
47 #define VDEV_ARGS_SIZE 100
48 #define MAX_NB_SESSIONS 4
49 
50 #define IN_PLACE 0
51 #define OUT_OF_PLACE 1
52 
53 static int gbl_driver_id;
54 
55 struct crypto_testsuite_params {
56 	struct rte_mempool *mbuf_pool;
57 	struct rte_mempool *large_mbuf_pool;
58 	struct rte_mempool *op_mpool;
59 	struct rte_mempool *session_mpool;
60 	struct rte_mempool *session_priv_mpool;
61 	struct rte_cryptodev_config conf;
62 	struct rte_cryptodev_qp_conf qp_conf;
63 
64 	uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
65 	uint8_t valid_dev_count;
66 };
67 
68 struct crypto_unittest_params {
69 	struct rte_crypto_sym_xform cipher_xform;
70 	struct rte_crypto_sym_xform auth_xform;
71 	struct rte_crypto_sym_xform aead_xform;
72 
73 	union {
74 		struct rte_cryptodev_sym_session *sess;
75 #ifdef RTE_LIBRTE_SECURITY
76 		struct rte_security_session *sec_session;
77 #endif
78 	};
79 #ifdef RTE_LIBRTE_SECURITY
80 	enum rte_security_session_action_type type;
81 #endif
82 	struct rte_crypto_op *op;
83 
84 	struct rte_mbuf *obuf, *ibuf;
85 
86 	uint8_t *digest;
87 };
88 
89 #define ALIGN_POW2_ROUNDUP(num, align) \
90 	(((num) + (align) - 1) & ~((align) - 1))
91 
92 /*
93  * Forward declarations.
94  */
95 static int
96 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
97 		struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
98 		uint8_t *hmac_key);
99 
100 static int
101 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
102 		struct crypto_unittest_params *ut_params,
103 		struct crypto_testsuite_params *ts_param,
104 		const uint8_t *cipher,
105 		const uint8_t *digest,
106 		const uint8_t *iv);
107 
108 static struct rte_mbuf *
109 setup_test_string(struct rte_mempool *mpool,
110 		const char *string, size_t len, uint8_t blocksize)
111 {
112 	struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
113 	size_t t_len = len - (blocksize ? (len % blocksize) : 0);
114 
115 	memset(m->buf_addr, 0, m->buf_len);
116 	if (m) {
117 		char *dst = rte_pktmbuf_append(m, t_len);
118 
119 		if (!dst) {
120 			rte_pktmbuf_free(m);
121 			return NULL;
122 		}
123 		if (string != NULL)
124 			rte_memcpy(dst, string, t_len);
125 		else
126 			memset(dst, 0, t_len);
127 	}
128 
129 	return m;
130 }
131 
132 /* Get number of bytes in X bits (rounding up) */
133 static uint32_t
134 ceil_byte_length(uint32_t num_bits)
135 {
136 	if (num_bits % 8)
137 		return ((num_bits >> 3) + 1);
138 	else
139 		return (num_bits >> 3);
140 }
141 
142 static struct rte_crypto_op *
143 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
144 {
145 	if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
146 		RTE_LOG(ERR, USER1, "Error sending packet for encryption\n");
147 		return NULL;
148 	}
149 
150 	op = NULL;
151 
152 	while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
153 		rte_pause();
154 
155 	if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
156 		RTE_LOG(DEBUG, USER1, "Operation status %d\n", op->status);
157 		return NULL;
158 	}
159 
160 	return op;
161 }
162 
163 static struct crypto_testsuite_params testsuite_params = { NULL };
164 static struct crypto_unittest_params unittest_params;
165 
166 static int
167 testsuite_setup(void)
168 {
169 	struct crypto_testsuite_params *ts_params = &testsuite_params;
170 	struct rte_cryptodev_info info;
171 	uint32_t i = 0, nb_devs, dev_id;
172 	int ret;
173 	uint16_t qp_id;
174 
175 	memset(ts_params, 0, sizeof(*ts_params));
176 
177 	ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
178 	if (ts_params->mbuf_pool == NULL) {
179 		/* Not already created so create */
180 		ts_params->mbuf_pool = rte_pktmbuf_pool_create(
181 				"CRYPTO_MBUFPOOL",
182 				NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
183 				rte_socket_id());
184 		if (ts_params->mbuf_pool == NULL) {
185 			RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
186 			return TEST_FAILED;
187 		}
188 	}
189 
190 	ts_params->large_mbuf_pool = rte_mempool_lookup(
191 			"CRYPTO_LARGE_MBUFPOOL");
192 	if (ts_params->large_mbuf_pool == NULL) {
193 		/* Not already created so create */
194 		ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
195 				"CRYPTO_LARGE_MBUFPOOL",
196 				1, 0, 0, UINT16_MAX,
197 				rte_socket_id());
198 		if (ts_params->large_mbuf_pool == NULL) {
199 			RTE_LOG(ERR, USER1,
200 				"Can't create CRYPTO_LARGE_MBUFPOOL\n");
201 			return TEST_FAILED;
202 		}
203 	}
204 
205 	ts_params->op_mpool = rte_crypto_op_pool_create(
206 			"MBUF_CRYPTO_SYM_OP_POOL",
207 			RTE_CRYPTO_OP_TYPE_SYMMETRIC,
208 			NUM_MBUFS, MBUF_CACHE_SIZE,
209 			DEFAULT_NUM_XFORMS *
210 			sizeof(struct rte_crypto_sym_xform) +
211 			MAXIMUM_IV_LENGTH,
212 			rte_socket_id());
213 	if (ts_params->op_mpool == NULL) {
214 		RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
215 		return TEST_FAILED;
216 	}
217 
218 	/* Create an AESNI MB device if required */
219 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
220 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) {
221 		nb_devs = rte_cryptodev_device_count_by_driver(
222 				rte_cryptodev_driver_id_get(
223 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
224 		if (nb_devs < 1) {
225 			ret = rte_vdev_init(
226 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
227 
228 			TEST_ASSERT(ret == 0,
229 				"Failed to create instance of"
230 				" pmd : %s",
231 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
232 		}
233 	}
234 
235 	/* Create an AESNI GCM device if required */
236 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
237 			RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))) {
238 		nb_devs = rte_cryptodev_device_count_by_driver(
239 				rte_cryptodev_driver_id_get(
240 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)));
241 		if (nb_devs < 1) {
242 			TEST_ASSERT_SUCCESS(rte_vdev_init(
243 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
244 				"Failed to create instance of"
245 				" pmd : %s",
246 				RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
247 		}
248 	}
249 
250 	/* Create a SNOW 3G device if required */
251 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
252 			RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))) {
253 		nb_devs = rte_cryptodev_device_count_by_driver(
254 				rte_cryptodev_driver_id_get(
255 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)));
256 		if (nb_devs < 1) {
257 			TEST_ASSERT_SUCCESS(rte_vdev_init(
258 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
259 				"Failed to create instance of"
260 				" pmd : %s",
261 				RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
262 		}
263 	}
264 
265 	/* Create a KASUMI device if required */
266 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
267 			RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))) {
268 		nb_devs = rte_cryptodev_device_count_by_driver(
269 				rte_cryptodev_driver_id_get(
270 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)));
271 		if (nb_devs < 1) {
272 			TEST_ASSERT_SUCCESS(rte_vdev_init(
273 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
274 				"Failed to create instance of"
275 				" pmd : %s",
276 				RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
277 		}
278 	}
279 
280 	/* Create a ZUC device if required */
281 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
282 			RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) {
283 		nb_devs = rte_cryptodev_device_count_by_driver(
284 				rte_cryptodev_driver_id_get(
285 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD)));
286 		if (nb_devs < 1) {
287 			TEST_ASSERT_SUCCESS(rte_vdev_init(
288 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
289 				"Failed to create instance of"
290 				" pmd : %s",
291 				RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
292 		}
293 	}
294 
295 	/* Create a NULL device if required */
296 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
297 			RTE_STR(CRYPTODEV_NAME_NULL_PMD))) {
298 		nb_devs = rte_cryptodev_device_count_by_driver(
299 				rte_cryptodev_driver_id_get(
300 				RTE_STR(CRYPTODEV_NAME_NULL_PMD)));
301 		if (nb_devs < 1) {
302 			ret = rte_vdev_init(
303 				RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
304 
305 			TEST_ASSERT(ret == 0,
306 				"Failed to create instance of"
307 				" pmd : %s",
308 				RTE_STR(CRYPTODEV_NAME_NULL_PMD));
309 		}
310 	}
311 
312 	/* Create an OPENSSL device if required */
313 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
314 			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) {
315 		nb_devs = rte_cryptodev_device_count_by_driver(
316 				rte_cryptodev_driver_id_get(
317 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)));
318 		if (nb_devs < 1) {
319 			ret = rte_vdev_init(
320 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
321 				NULL);
322 
323 			TEST_ASSERT(ret == 0, "Failed to create "
324 				"instance of pmd : %s",
325 				RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
326 		}
327 	}
328 
329 	/* Create a ARMv8 device if required */
330 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
331 			RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))) {
332 		nb_devs = rte_cryptodev_device_count_by_driver(
333 				rte_cryptodev_driver_id_get(
334 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)));
335 		if (nb_devs < 1) {
336 			ret = rte_vdev_init(
337 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
338 				NULL);
339 
340 			TEST_ASSERT(ret == 0, "Failed to create "
341 				"instance of pmd : %s",
342 				RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
343 		}
344 	}
345 
346 	/* Create a MVSAM device if required */
347 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
348 			RTE_STR(CRYPTODEV_NAME_MVSAM_PMD))) {
349 		nb_devs = rte_cryptodev_device_count_by_driver(
350 				rte_cryptodev_driver_id_get(
351 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)));
352 		if (nb_devs < 1) {
353 			ret = rte_vdev_init(
354 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD),
355 				NULL);
356 
357 			TEST_ASSERT(ret == 0, "Failed to create "
358 				"instance of pmd : %s",
359 				RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
360 		}
361 	}
362 
363 	/* Create an CCP device if required */
364 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
365 			RTE_STR(CRYPTODEV_NAME_CCP_PMD))) {
366 		nb_devs = rte_cryptodev_device_count_by_driver(
367 				rte_cryptodev_driver_id_get(
368 				RTE_STR(CRYPTODEV_NAME_CCP_PMD)));
369 		if (nb_devs < 1) {
370 			ret = rte_vdev_init(
371 				RTE_STR(CRYPTODEV_NAME_CCP_PMD),
372 				NULL);
373 
374 			TEST_ASSERT(ret == 0, "Failed to create "
375 				"instance of pmd : %s",
376 				RTE_STR(CRYPTODEV_NAME_CCP_PMD));
377 		}
378 	}
379 
380 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
381 	char vdev_args[VDEV_ARGS_SIZE] = {""};
382 	char temp_str[VDEV_ARGS_SIZE] = {"mode=multi-core,"
383 		"ordering=enable,name=cryptodev_test_scheduler,corelist="};
384 	uint16_t slave_core_count = 0;
385 	uint16_t socket_id = 0;
386 
387 	if (gbl_driver_id == rte_cryptodev_driver_id_get(
388 			RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) {
389 
390 		/* Identify the Slave Cores
391 		 * Use 2 slave cores for the device args
392 		 */
393 		RTE_LCORE_FOREACH_SLAVE(i) {
394 			if (slave_core_count > 1)
395 				break;
396 			snprintf(vdev_args, sizeof(vdev_args),
397 					"%s%d", temp_str, i);
398 			strcpy(temp_str, vdev_args);
399 			strlcat(temp_str, ";", sizeof(temp_str));
400 			slave_core_count++;
401 			socket_id = rte_lcore_to_socket_id(i);
402 		}
403 		if (slave_core_count != 2) {
404 			RTE_LOG(ERR, USER1,
405 				"Cryptodev scheduler test require at least "
406 				"two slave cores to run. "
407 				"Please use the correct coremask.\n");
408 			return TEST_FAILED;
409 		}
410 		strcpy(temp_str, vdev_args);
411 		snprintf(vdev_args, sizeof(vdev_args), "%s,socket_id=%d",
412 				temp_str, socket_id);
413 		RTE_LOG(DEBUG, USER1, "vdev_args: %s\n", vdev_args);
414 		nb_devs = rte_cryptodev_device_count_by_driver(
415 				rte_cryptodev_driver_id_get(
416 				RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)));
417 		if (nb_devs < 1) {
418 			ret = rte_vdev_init(
419 				RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD),
420 					vdev_args);
421 			TEST_ASSERT(ret == 0,
422 				"Failed to create instance %u of"
423 				" pmd : %s",
424 				i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
425 		}
426 	}
427 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
428 
429 	nb_devs = rte_cryptodev_count();
430 	if (nb_devs < 1) {
431 		RTE_LOG(WARNING, USER1, "No crypto devices found?\n");
432 		return TEST_SKIPPED;
433 	}
434 
435 	/* Create list of valid crypto devs */
436 	for (i = 0; i < nb_devs; i++) {
437 		rte_cryptodev_info_get(i, &info);
438 		if (info.driver_id == gbl_driver_id)
439 			ts_params->valid_devs[ts_params->valid_dev_count++] = i;
440 	}
441 
442 	if (ts_params->valid_dev_count < 1)
443 		return TEST_FAILED;
444 
445 	/* Set up all the qps on the first of the valid devices found */
446 
447 	dev_id = ts_params->valid_devs[0];
448 
449 	rte_cryptodev_info_get(dev_id, &info);
450 
451 	ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
452 	ts_params->conf.socket_id = SOCKET_ID_ANY;
453 	ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY;
454 
455 	unsigned int session_size =
456 		rte_cryptodev_sym_get_private_session_size(dev_id);
457 
458 	/*
459 	 * Create mempool with maximum number of sessions * 2,
460 	 * to include the session headers
461 	 */
462 	if (info.sym.max_nb_sessions != 0 &&
463 			info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
464 		RTE_LOG(ERR, USER1, "Device does not support "
465 				"at least %u sessions\n",
466 				MAX_NB_SESSIONS);
467 		return TEST_FAILED;
468 	}
469 
470 	ts_params->session_mpool = rte_cryptodev_sym_session_pool_create(
471 			"test_sess_mp", MAX_NB_SESSIONS, 0, 0, 0,
472 			SOCKET_ID_ANY);
473 	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
474 			"session mempool allocation failed");
475 
476 	ts_params->session_priv_mpool = rte_mempool_create(
477 			"test_sess_mp_priv",
478 			MAX_NB_SESSIONS,
479 			session_size,
480 			0, 0, NULL, NULL, NULL,
481 			NULL, SOCKET_ID_ANY,
482 			0);
483 	TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
484 			"session mempool allocation failed");
485 
486 
487 
488 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
489 			&ts_params->conf),
490 			"Failed to configure cryptodev %u with %u qps",
491 			dev_id, ts_params->conf.nb_queue_pairs);
492 
493 	ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
494 	ts_params->qp_conf.mp_session = ts_params->session_mpool;
495 	ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
496 
497 	for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
498 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
499 			dev_id, qp_id, &ts_params->qp_conf,
500 			rte_cryptodev_socket_id(dev_id)),
501 			"Failed to setup queue pair %u on cryptodev %u",
502 			qp_id, dev_id);
503 	}
504 
505 	return TEST_SUCCESS;
506 }
507 
508 static void
509 testsuite_teardown(void)
510 {
511 	struct crypto_testsuite_params *ts_params = &testsuite_params;
512 
513 	if (ts_params->mbuf_pool != NULL) {
514 		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
515 		rte_mempool_avail_count(ts_params->mbuf_pool));
516 	}
517 
518 	if (ts_params->op_mpool != NULL) {
519 		RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
520 		rte_mempool_avail_count(ts_params->op_mpool));
521 	}
522 
523 	/* Free session mempools */
524 	if (ts_params->session_priv_mpool != NULL) {
525 		rte_mempool_free(ts_params->session_priv_mpool);
526 		ts_params->session_priv_mpool = NULL;
527 	}
528 
529 	if (ts_params->session_mpool != NULL) {
530 		rte_mempool_free(ts_params->session_mpool);
531 		ts_params->session_mpool = NULL;
532 	}
533 }
534 
535 static int
536 ut_setup(void)
537 {
538 	struct crypto_testsuite_params *ts_params = &testsuite_params;
539 	struct crypto_unittest_params *ut_params = &unittest_params;
540 
541 	uint16_t qp_id;
542 
543 	/* Clear unit test parameters before running test */
544 	memset(ut_params, 0, sizeof(*ut_params));
545 
546 	/* Reconfigure device to default parameters */
547 	ts_params->conf.socket_id = SOCKET_ID_ANY;
548 	ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY;
549 	ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
550 	ts_params->qp_conf.mp_session = ts_params->session_mpool;
551 	ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool;
552 
553 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
554 			&ts_params->conf),
555 			"Failed to configure cryptodev %u",
556 			ts_params->valid_devs[0]);
557 
558 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
559 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
560 			ts_params->valid_devs[0], qp_id,
561 			&ts_params->qp_conf,
562 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
563 			"Failed to setup queue pair %u on cryptodev %u",
564 			qp_id, ts_params->valid_devs[0]);
565 	}
566 
567 
568 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
569 
570 	/* Start the device */
571 	TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
572 			"Failed to start cryptodev %u",
573 			ts_params->valid_devs[0]);
574 
575 	return TEST_SUCCESS;
576 }
577 
578 static void
579 ut_teardown(void)
580 {
581 	struct crypto_testsuite_params *ts_params = &testsuite_params;
582 	struct crypto_unittest_params *ut_params = &unittest_params;
583 	struct rte_cryptodev_stats stats;
584 
585 	/* free crypto session structure */
586 #ifdef RTE_LIBRTE_SECURITY
587 	if (ut_params->type == RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL) {
588 		if (ut_params->sec_session) {
589 			rte_security_session_destroy(rte_cryptodev_get_sec_ctx
590 						(ts_params->valid_devs[0]),
591 						ut_params->sec_session);
592 			ut_params->sec_session = NULL;
593 		}
594 	} else
595 #endif
596 	{
597 		if (ut_params->sess) {
598 			rte_cryptodev_sym_session_clear(
599 					ts_params->valid_devs[0],
600 					ut_params->sess);
601 			rte_cryptodev_sym_session_free(ut_params->sess);
602 			ut_params->sess = NULL;
603 		}
604 	}
605 
606 	/* free crypto operation structure */
607 	if (ut_params->op)
608 		rte_crypto_op_free(ut_params->op);
609 
610 	/*
611 	 * free mbuf - both obuf and ibuf are usually the same,
612 	 * so check if they point at the same address is necessary,
613 	 * to avoid freeing the mbuf twice.
614 	 */
615 	if (ut_params->obuf) {
616 		rte_pktmbuf_free(ut_params->obuf);
617 		if (ut_params->ibuf == ut_params->obuf)
618 			ut_params->ibuf = 0;
619 		ut_params->obuf = 0;
620 	}
621 	if (ut_params->ibuf) {
622 		rte_pktmbuf_free(ut_params->ibuf);
623 		ut_params->ibuf = 0;
624 	}
625 
626 	if (ts_params->mbuf_pool != NULL)
627 		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
628 			rte_mempool_avail_count(ts_params->mbuf_pool));
629 
630 	rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
631 
632 	/* Stop the device */
633 	rte_cryptodev_stop(ts_params->valid_devs[0]);
634 }
635 
636 static int
637 test_device_configure_invalid_dev_id(void)
638 {
639 	struct crypto_testsuite_params *ts_params = &testsuite_params;
640 	uint16_t dev_id, num_devs = 0;
641 
642 	TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
643 			"Need at least %d devices for test", 1);
644 
645 	/* valid dev_id values */
646 	dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
647 
648 	/* Stop the device in case it's started so it can be configured */
649 	rte_cryptodev_stop(dev_id);
650 
651 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
652 			"Failed test for rte_cryptodev_configure: "
653 			"invalid dev_num %u", dev_id);
654 
655 	/* invalid dev_id values */
656 	dev_id = num_devs;
657 
658 	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
659 			"Failed test for rte_cryptodev_configure: "
660 			"invalid dev_num %u", dev_id);
661 
662 	dev_id = 0xff;
663 
664 	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
665 			"Failed test for rte_cryptodev_configure:"
666 			"invalid dev_num %u", dev_id);
667 
668 	return TEST_SUCCESS;
669 }
670 
671 static int
672 test_device_configure_invalid_queue_pair_ids(void)
673 {
674 	struct crypto_testsuite_params *ts_params = &testsuite_params;
675 	uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
676 
677 	/* Stop the device in case it's started so it can be configured */
678 	rte_cryptodev_stop(ts_params->valid_devs[0]);
679 
680 	/* valid - one queue pairs */
681 	ts_params->conf.nb_queue_pairs = 1;
682 
683 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
684 			&ts_params->conf),
685 			"Failed to configure cryptodev: dev_id %u, qp_id %u",
686 			ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
687 
688 
689 	/* valid - max value queue pairs */
690 	ts_params->conf.nb_queue_pairs = orig_nb_qps;
691 
692 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
693 			&ts_params->conf),
694 			"Failed to configure cryptodev: dev_id %u, qp_id %u",
695 			ts_params->valid_devs[0],
696 			ts_params->conf.nb_queue_pairs);
697 
698 
699 	/* invalid - zero queue pairs */
700 	ts_params->conf.nb_queue_pairs = 0;
701 
702 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
703 			&ts_params->conf),
704 			"Failed test for rte_cryptodev_configure, dev_id %u,"
705 			" invalid qps: %u",
706 			ts_params->valid_devs[0],
707 			ts_params->conf.nb_queue_pairs);
708 
709 
710 	/* invalid - max value supported by field queue pairs */
711 	ts_params->conf.nb_queue_pairs = UINT16_MAX;
712 
713 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
714 			&ts_params->conf),
715 			"Failed test for rte_cryptodev_configure, dev_id %u,"
716 			" invalid qps: %u",
717 			ts_params->valid_devs[0],
718 			ts_params->conf.nb_queue_pairs);
719 
720 
721 	/* invalid - max value + 1 queue pairs */
722 	ts_params->conf.nb_queue_pairs = orig_nb_qps + 1;
723 
724 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
725 			&ts_params->conf),
726 			"Failed test for rte_cryptodev_configure, dev_id %u,"
727 			" invalid qps: %u",
728 			ts_params->valid_devs[0],
729 			ts_params->conf.nb_queue_pairs);
730 
731 	/* revert to original testsuite value */
732 	ts_params->conf.nb_queue_pairs = orig_nb_qps;
733 
734 	return TEST_SUCCESS;
735 }
736 
737 static int
738 test_queue_pair_descriptor_setup(void)
739 {
740 	struct crypto_testsuite_params *ts_params = &testsuite_params;
741 	struct rte_cryptodev_info dev_info;
742 	struct rte_cryptodev_qp_conf qp_conf = {
743 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
744 	};
745 
746 	uint16_t qp_id;
747 
748 	/* Stop the device in case it's started so it can be configured */
749 	rte_cryptodev_stop(ts_params->valid_devs[0]);
750 
751 
752 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
753 
754 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
755 			&ts_params->conf),
756 			"Failed to configure cryptodev %u",
757 			ts_params->valid_devs[0]);
758 
759 	/*
760 	 * Test various ring sizes on this device. memzones can't be
761 	 * freed so are re-used if ring is released and re-created.
762 	 */
763 	qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
764 	qp_conf.mp_session = ts_params->session_mpool;
765 	qp_conf.mp_session_private = ts_params->session_priv_mpool;
766 
767 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
768 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
769 				ts_params->valid_devs[0], qp_id, &qp_conf,
770 				rte_cryptodev_socket_id(
771 						ts_params->valid_devs[0])),
772 				"Failed test for "
773 				"rte_cryptodev_queue_pair_setup: num_inflights "
774 				"%u on qp %u on cryptodev %u",
775 				qp_conf.nb_descriptors, qp_id,
776 				ts_params->valid_devs[0]);
777 	}
778 
779 	qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
780 
781 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
782 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
783 				ts_params->valid_devs[0], qp_id, &qp_conf,
784 				rte_cryptodev_socket_id(
785 						ts_params->valid_devs[0])),
786 				"Failed test for"
787 				" rte_cryptodev_queue_pair_setup: num_inflights"
788 				" %u on qp %u on cryptodev %u",
789 				qp_conf.nb_descriptors, qp_id,
790 				ts_params->valid_devs[0]);
791 	}
792 
793 	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
794 
795 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
796 		TEST_ASSERT_SUCCESS(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 				"Failed test for "
801 				"rte_cryptodev_queue_pair_setup: num_inflights"
802 				" %u on qp %u on cryptodev %u",
803 				qp_conf.nb_descriptors, qp_id,
804 				ts_params->valid_devs[0]);
805 	}
806 
807 	/* invalid number of descriptors - max supported + 2 */
808 	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
809 
810 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
811 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
812 				ts_params->valid_devs[0], qp_id, &qp_conf,
813 				rte_cryptodev_socket_id(
814 						ts_params->valid_devs[0])),
815 				"Unexpectedly passed test for "
816 				"rte_cryptodev_queue_pair_setup:"
817 				"num_inflights %u on qp %u on cryptodev %u",
818 				qp_conf.nb_descriptors, qp_id,
819 				ts_params->valid_devs[0]);
820 	}
821 
822 	/* invalid number of descriptors - max value of parameter */
823 	qp_conf.nb_descriptors = UINT32_MAX-1;
824 
825 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
826 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
827 				ts_params->valid_devs[0], qp_id, &qp_conf,
828 				rte_cryptodev_socket_id(
829 						ts_params->valid_devs[0])),
830 				"Unexpectedly passed test for "
831 				"rte_cryptodev_queue_pair_setup:"
832 				"num_inflights %u on qp %u on cryptodev %u",
833 				qp_conf.nb_descriptors, qp_id,
834 				ts_params->valid_devs[0]);
835 	}
836 
837 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
838 
839 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
840 		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
841 				ts_params->valid_devs[0], qp_id, &qp_conf,
842 				rte_cryptodev_socket_id(
843 						ts_params->valid_devs[0])),
844 				"Failed test for"
845 				" rte_cryptodev_queue_pair_setup:"
846 				"num_inflights %u on qp %u on cryptodev %u",
847 				qp_conf.nb_descriptors, qp_id,
848 				ts_params->valid_devs[0]);
849 	}
850 
851 	/* invalid number of descriptors - max supported + 1 */
852 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
853 
854 	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
855 		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
856 				ts_params->valid_devs[0], qp_id, &qp_conf,
857 				rte_cryptodev_socket_id(
858 						ts_params->valid_devs[0])),
859 				"Unexpectedly passed test for "
860 				"rte_cryptodev_queue_pair_setup:"
861 				"num_inflights %u on qp %u on cryptodev %u",
862 				qp_conf.nb_descriptors, qp_id,
863 				ts_params->valid_devs[0]);
864 	}
865 
866 	/* test invalid queue pair id */
867 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;	/*valid */
868 
869 	qp_id = ts_params->conf.nb_queue_pairs;		/*invalid */
870 
871 	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
872 			ts_params->valid_devs[0],
873 			qp_id, &qp_conf,
874 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
875 			"Failed test for rte_cryptodev_queue_pair_setup:"
876 			"invalid qp %u on cryptodev %u",
877 			qp_id, ts_params->valid_devs[0]);
878 
879 	qp_id = 0xffff; /*invalid*/
880 
881 	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
882 			ts_params->valid_devs[0],
883 			qp_id, &qp_conf,
884 			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
885 			"Failed test for rte_cryptodev_queue_pair_setup:"
886 			"invalid qp %u on cryptodev %u",
887 			qp_id, ts_params->valid_devs[0]);
888 
889 	return TEST_SUCCESS;
890 }
891 
892 /* ***** Plaintext data for tests ***** */
893 
894 const char catch_22_quote_1[] =
895 		"There was only one catch and that was Catch-22, which "
896 		"specified that a concern for one's safety in the face of "
897 		"dangers that were real and immediate was the process of a "
898 		"rational mind. Orr was crazy and could be grounded. All he "
899 		"had to do was ask; and as soon as he did, he would no longer "
900 		"be crazy and would have to fly more missions. Orr would be "
901 		"crazy to fly more missions and sane if he didn't, but if he "
902 		"was sane he had to fly them. If he flew them he was crazy "
903 		"and didn't have to; but if he didn't want to he was sane and "
904 		"had to. Yossarian was moved very deeply by the absolute "
905 		"simplicity of this clause of Catch-22 and let out a "
906 		"respectful whistle. \"That's some catch, that Catch-22\", he "
907 		"observed. \"It's the best there is,\" Doc Daneeka agreed.";
908 
909 const char catch_22_quote[] =
910 		"What a lousy earth! He wondered how many people were "
911 		"destitute that same night even in his own prosperous country, "
912 		"how many homes were shanties, how many husbands were drunk "
913 		"and wives socked, and how many children were bullied, abused, "
914 		"or abandoned. How many families hungered for food they could "
915 		"not afford to buy? How many hearts were broken? How many "
916 		"suicides would take place that same night, how many people "
917 		"would go insane? How many cockroaches and landlords would "
918 		"triumph? How many winners were losers, successes failures, "
919 		"and rich men poor men? How many wise guys were stupid? How "
920 		"many happy endings were unhappy endings? How many honest men "
921 		"were liars, brave men cowards, loyal men traitors, how many "
922 		"sainted men were corrupt, how many people in positions of "
923 		"trust had sold their souls to bodyguards, how many had never "
924 		"had souls? How many straight-and-narrow paths were crooked "
925 		"paths? How many best families were worst families and how "
926 		"many good people were bad people? When you added them all up "
927 		"and then subtracted, you might be left with only the children, "
928 		"and perhaps with Albert Einstein and an old violinist or "
929 		"sculptor somewhere.";
930 
931 #define QUOTE_480_BYTES		(480)
932 #define QUOTE_512_BYTES		(512)
933 #define QUOTE_768_BYTES		(768)
934 #define QUOTE_1024_BYTES	(1024)
935 
936 
937 
938 /* ***** SHA1 Hash Tests ***** */
939 
940 #define HMAC_KEY_LENGTH_SHA1	(DIGEST_BYTE_LENGTH_SHA1)
941 
942 static uint8_t hmac_sha1_key[] = {
943 	0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
944 	0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
945 	0xDE, 0xF4, 0xDE, 0xAD };
946 
947 /* ***** SHA224 Hash Tests ***** */
948 
949 #define HMAC_KEY_LENGTH_SHA224	(DIGEST_BYTE_LENGTH_SHA224)
950 
951 
952 /* ***** AES-CBC Cipher Tests ***** */
953 
954 #define CIPHER_KEY_LENGTH_AES_CBC	(16)
955 #define CIPHER_IV_LENGTH_AES_CBC	(CIPHER_KEY_LENGTH_AES_CBC)
956 
957 static uint8_t aes_cbc_key[] = {
958 	0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
959 	0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
960 
961 static uint8_t aes_cbc_iv[] = {
962 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
963 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
964 
965 
966 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
967 
968 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
969 	0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
970 	0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
971 	0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
972 	0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
973 	0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
974 	0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
975 	0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
976 	0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
977 	0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
978 	0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
979 	0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
980 	0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
981 	0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
982 	0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
983 	0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
984 	0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
985 	0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
986 	0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
987 	0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
988 	0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
989 	0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
990 	0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
991 	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
992 	0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
993 	0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
994 	0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
995 	0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
996 	0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
997 	0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
998 	0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
999 	0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
1000 	0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
1001 	0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
1002 	0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
1003 	0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
1004 	0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
1005 	0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
1006 	0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
1007 	0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
1008 	0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
1009 	0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
1010 	0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
1011 	0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
1012 	0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
1013 	0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
1014 	0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
1015 	0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
1016 	0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
1017 	0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
1018 	0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
1019 	0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
1020 	0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
1021 	0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
1022 	0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
1023 	0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
1024 	0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
1025 	0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
1026 	0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
1027 	0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
1028 	0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
1029 	0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
1030 	0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
1031 	0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
1032 	0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
1033 };
1034 
1035 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
1036 	0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
1037 	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1038 	0x18, 0x8c, 0x1d, 0x32
1039 };
1040 
1041 
1042 /* Multisession Vector context Test */
1043 /*Begin Session 0 */
1044 static uint8_t ms_aes_cbc_key0[] = {
1045 	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1046 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1047 };
1048 
1049 static uint8_t ms_aes_cbc_iv0[] = {
1050 	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1051 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1052 };
1053 
1054 static const uint8_t ms_aes_cbc_cipher0[] = {
1055 		0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
1056 		0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
1057 		0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
1058 		0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
1059 		0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
1060 		0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
1061 		0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
1062 		0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
1063 		0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
1064 		0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
1065 		0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
1066 		0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
1067 		0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
1068 		0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
1069 		0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
1070 		0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
1071 		0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
1072 		0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
1073 		0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
1074 		0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
1075 		0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
1076 		0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
1077 		0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
1078 		0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
1079 		0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
1080 		0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
1081 		0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
1082 		0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
1083 		0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
1084 		0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
1085 		0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
1086 		0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
1087 		0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
1088 		0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
1089 		0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
1090 		0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
1091 		0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
1092 		0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
1093 		0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
1094 		0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
1095 		0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
1096 		0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
1097 		0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
1098 		0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
1099 		0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
1100 		0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
1101 		0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
1102 		0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
1103 		0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
1104 		0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
1105 		0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
1106 		0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
1107 		0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
1108 		0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
1109 		0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
1110 		0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
1111 		0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
1112 		0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
1113 		0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
1114 		0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
1115 		0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
1116 		0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
1117 		0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
1118 		0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
1119 };
1120 
1121 
1122 static  uint8_t ms_hmac_key0[] = {
1123 		0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1124 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1125 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1126 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1127 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1128 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1129 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1130 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1131 };
1132 
1133 static const uint8_t ms_hmac_digest0[] = {
1134 		0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1135 		0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1136 		0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1137 		0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1138 		0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1139 		0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1140 		0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1141 		0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1142 		};
1143 
1144 /* End Session 0 */
1145 /* Begin session 1 */
1146 
1147 static  uint8_t ms_aes_cbc_key1[] = {
1148 		0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1149 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1150 };
1151 
1152 static  uint8_t ms_aes_cbc_iv1[] = {
1153 	0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1154 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1155 };
1156 
1157 static const uint8_t ms_aes_cbc_cipher1[] = {
1158 		0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1159 		0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1160 		0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1161 		0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1162 		0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1163 		0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1164 		0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1165 		0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1166 		0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1167 		0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1168 		0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1169 		0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1170 		0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1171 		0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1172 		0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1173 		0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1174 		0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1175 		0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1176 		0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1177 		0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1178 		0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1179 		0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1180 		0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1181 		0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1182 		0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1183 		0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1184 		0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1185 		0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1186 		0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1187 		0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1188 		0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1189 		0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1190 		0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1191 		0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1192 		0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1193 		0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1194 		0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1195 		0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1196 		0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1197 		0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1198 		0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1199 		0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1200 		0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1201 		0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1202 		0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1203 		0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1204 		0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1205 		0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1206 		0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1207 		0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1208 		0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1209 		0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1210 		0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1211 		0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1212 		0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1213 		0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1214 		0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1215 		0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1216 		0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1217 		0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1218 		0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1219 		0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1220 		0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1221 		0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1222 
1223 };
1224 
1225 static uint8_t ms_hmac_key1[] = {
1226 		0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1227 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1228 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1229 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1230 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1231 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1232 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1233 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1234 };
1235 
1236 static const uint8_t ms_hmac_digest1[] = {
1237 		0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1238 		0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1239 		0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1240 		0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1241 		0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1242 		0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1243 		0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1244 		0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1245 };
1246 /* End Session 1  */
1247 /* Begin Session 2 */
1248 static  uint8_t ms_aes_cbc_key2[] = {
1249 		0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1250 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1251 };
1252 
1253 static  uint8_t ms_aes_cbc_iv2[] = {
1254 		0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1255 		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1256 };
1257 
1258 static const uint8_t ms_aes_cbc_cipher2[] = {
1259 		0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1260 		0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1261 		0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1262 		0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1263 		0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1264 		0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1265 		0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1266 		0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1267 		0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1268 		0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1269 		0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1270 		0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1271 		0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1272 		0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1273 		0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1274 		0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1275 		0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1276 		0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1277 		0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1278 		0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1279 		0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1280 		0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1281 		0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1282 		0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1283 		0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1284 		0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1285 		0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1286 		0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1287 		0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1288 		0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1289 		0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1290 		0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1291 		0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1292 		0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1293 		0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1294 		0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1295 		0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1296 		0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1297 		0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1298 		0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1299 		0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1300 		0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1301 		0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1302 		0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1303 		0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1304 		0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1305 		0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1306 		0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1307 		0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1308 		0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1309 		0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1310 		0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1311 		0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1312 		0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1313 		0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1314 		0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1315 		0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1316 		0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1317 		0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1318 		0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1319 		0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1320 		0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1321 		0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1322 		0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1323 };
1324 
1325 static  uint8_t ms_hmac_key2[] = {
1326 		0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1327 		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1328 		0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1329 		0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1330 		0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1331 		0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1332 		0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1333 		0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1334 };
1335 
1336 static const uint8_t ms_hmac_digest2[] = {
1337 		0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1338 		0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1339 		0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1340 		0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1341 		0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1342 		0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1343 		0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1344 		0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1345 };
1346 
1347 /* End Session 2 */
1348 
1349 
1350 static int
1351 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1352 {
1353 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1354 	struct crypto_unittest_params *ut_params = &unittest_params;
1355 
1356 	/* Generate test mbuf data and space for digest */
1357 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1358 			catch_22_quote,	QUOTE_512_BYTES, 0);
1359 
1360 	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1361 			DIGEST_BYTE_LENGTH_SHA1);
1362 	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1363 
1364 	/* Setup Cipher Parameters */
1365 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1366 	ut_params->cipher_xform.next = &ut_params->auth_xform;
1367 
1368 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1369 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1370 	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1371 	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1372 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1373 	ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1374 
1375 	/* Setup HMAC Parameters */
1376 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1377 
1378 	ut_params->auth_xform.next = NULL;
1379 
1380 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1381 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1382 	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1383 	ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1384 	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1385 
1386 	ut_params->sess = rte_cryptodev_sym_session_create(
1387 			ts_params->session_mpool);
1388 
1389 	/* Create crypto session*/
1390 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
1391 			ut_params->sess, &ut_params->cipher_xform,
1392 			ts_params->session_priv_mpool);
1393 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1394 
1395 	/* Generate crypto op data structure */
1396 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1397 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1398 	TEST_ASSERT_NOT_NULL(ut_params->op,
1399 			"Failed to allocate symmetric crypto operation struct");
1400 
1401 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1402 
1403 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1404 
1405 	/* set crypto operation source mbuf */
1406 	sym_op->m_src = ut_params->ibuf;
1407 
1408 	/* Set crypto operation authentication parameters */
1409 	sym_op->auth.digest.data = ut_params->digest;
1410 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1411 			ut_params->ibuf, QUOTE_512_BYTES);
1412 
1413 	sym_op->auth.data.offset = 0;
1414 	sym_op->auth.data.length = QUOTE_512_BYTES;
1415 
1416 	/* Copy IV at the end of the crypto operation */
1417 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1418 			aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
1419 
1420 	/* Set crypto operation cipher parameters */
1421 	sym_op->cipher.data.offset = 0;
1422 	sym_op->cipher.data.length = QUOTE_512_BYTES;
1423 
1424 	/* Process crypto operation */
1425 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1426 			ut_params->op), "failed to process sym crypto op");
1427 
1428 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1429 			"crypto op processing failed");
1430 
1431 	/* Validate obuf */
1432 	uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
1433 			uint8_t *);
1434 
1435 	TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1436 			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1437 			QUOTE_512_BYTES,
1438 			"ciphertext data not as expected");
1439 
1440 	uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1441 
1442 	TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1443 			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1444 			gbl_driver_id == rte_cryptodev_driver_id_get(
1445 					RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) ?
1446 					TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1447 					DIGEST_BYTE_LENGTH_SHA1,
1448 			"Generated digest data not as expected");
1449 
1450 	return TEST_SUCCESS;
1451 }
1452 
1453 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1454 
1455 #define HMAC_KEY_LENGTH_SHA512  (DIGEST_BYTE_LENGTH_SHA512)
1456 
1457 static uint8_t hmac_sha512_key[] = {
1458 	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1459 	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1460 	0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1461 	0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1462 	0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1463 	0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1464 	0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1465 	0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1466 
1467 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1468 	0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1469 	0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1470 	0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1471 	0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1472 	0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1473 	0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1474 	0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1475 	0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1476 
1477 
1478 
1479 static int
1480 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1481 		struct crypto_unittest_params *ut_params,
1482 		uint8_t *cipher_key,
1483 		uint8_t *hmac_key);
1484 
1485 static int
1486 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1487 		struct crypto_unittest_params *ut_params,
1488 		struct crypto_testsuite_params *ts_params,
1489 		const uint8_t *cipher,
1490 		const uint8_t *digest,
1491 		const uint8_t *iv);
1492 
1493 
1494 static int
1495 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1496 		struct crypto_unittest_params *ut_params,
1497 		uint8_t *cipher_key,
1498 		uint8_t *hmac_key)
1499 {
1500 
1501 	/* Setup Cipher Parameters */
1502 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1503 	ut_params->cipher_xform.next = NULL;
1504 
1505 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1506 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1507 	ut_params->cipher_xform.cipher.key.data = cipher_key;
1508 	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1509 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1510 	ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1511 
1512 	/* Setup HMAC Parameters */
1513 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1514 	ut_params->auth_xform.next = &ut_params->cipher_xform;
1515 
1516 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1517 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1518 	ut_params->auth_xform.auth.key.data = hmac_key;
1519 	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1520 	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1521 
1522 	return TEST_SUCCESS;
1523 }
1524 
1525 
1526 static int
1527 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1528 		struct crypto_unittest_params *ut_params,
1529 		struct crypto_testsuite_params *ts_params,
1530 		const uint8_t *cipher,
1531 		const uint8_t *digest,
1532 		const uint8_t *iv)
1533 {
1534 	/* Generate test mbuf data and digest */
1535 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1536 			(const char *)
1537 			cipher,
1538 			QUOTE_512_BYTES, 0);
1539 
1540 	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1541 			DIGEST_BYTE_LENGTH_SHA512);
1542 	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1543 
1544 	rte_memcpy(ut_params->digest,
1545 			digest,
1546 			DIGEST_BYTE_LENGTH_SHA512);
1547 
1548 	/* Generate Crypto op data structure */
1549 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1550 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1551 	TEST_ASSERT_NOT_NULL(ut_params->op,
1552 			"Failed to allocate symmetric crypto operation struct");
1553 
1554 	rte_crypto_op_attach_sym_session(ut_params->op, sess);
1555 
1556 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1557 
1558 	/* set crypto operation source mbuf */
1559 	sym_op->m_src = ut_params->ibuf;
1560 
1561 	sym_op->auth.digest.data = ut_params->digest;
1562 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
1563 			ut_params->ibuf, QUOTE_512_BYTES);
1564 
1565 	sym_op->auth.data.offset = 0;
1566 	sym_op->auth.data.length = QUOTE_512_BYTES;
1567 
1568 	/* Copy IV at the end of the crypto operation */
1569 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1570 			iv, CIPHER_IV_LENGTH_AES_CBC);
1571 
1572 	sym_op->cipher.data.offset = 0;
1573 	sym_op->cipher.data.length = QUOTE_512_BYTES;
1574 
1575 	/* Process crypto operation */
1576 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1577 			ut_params->op), "failed to process sym crypto op");
1578 
1579 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1580 			"crypto op processing failed");
1581 
1582 	ut_params->obuf = ut_params->op->sym->m_src;
1583 
1584 	/* Validate obuf */
1585 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
1586 			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *),
1587 			catch_22_quote,
1588 			QUOTE_512_BYTES,
1589 			"Plaintext data not as expected");
1590 
1591 	/* Validate obuf */
1592 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1593 			"Digest verification failed");
1594 
1595 	return TEST_SUCCESS;
1596 }
1597 
1598 static int
1599 test_AES_cipheronly_mb_all(void)
1600 {
1601 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1602 	int status;
1603 
1604 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1605 		ts_params->op_mpool,
1606 		ts_params->session_mpool, ts_params->session_priv_mpool,
1607 		ts_params->valid_devs[0],
1608 		rte_cryptodev_driver_id_get(
1609 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1610 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1611 
1612 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1613 
1614 	return TEST_SUCCESS;
1615 }
1616 
1617 static int
1618 test_AES_docsis_mb_all(void)
1619 {
1620 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1621 	int status;
1622 
1623 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1624 		ts_params->op_mpool,
1625 		ts_params->session_mpool, ts_params->session_priv_mpool,
1626 		ts_params->valid_devs[0],
1627 		rte_cryptodev_driver_id_get(
1628 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1629 		BLKCIPHER_AES_DOCSIS_TYPE);
1630 
1631 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1632 
1633 	return TEST_SUCCESS;
1634 }
1635 
1636 static int
1637 test_AES_docsis_qat_all(void)
1638 {
1639 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1640 	int status;
1641 
1642 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1643 		ts_params->op_mpool,
1644 		ts_params->session_mpool, ts_params->session_priv_mpool,
1645 		ts_params->valid_devs[0],
1646 		rte_cryptodev_driver_id_get(
1647 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1648 		BLKCIPHER_AES_DOCSIS_TYPE);
1649 
1650 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1651 
1652 	return TEST_SUCCESS;
1653 }
1654 
1655 static int
1656 test_DES_docsis_qat_all(void)
1657 {
1658 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1659 	int status;
1660 
1661 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1662 		ts_params->op_mpool,
1663 		ts_params->session_mpool, ts_params->session_priv_mpool,
1664 		ts_params->valid_devs[0],
1665 		rte_cryptodev_driver_id_get(
1666 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1667 		BLKCIPHER_DES_DOCSIS_TYPE);
1668 
1669 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1670 
1671 	return TEST_SUCCESS;
1672 }
1673 
1674 static int
1675 test_authonly_mb_all(void)
1676 {
1677 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1678 	int status;
1679 
1680 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1681 		ts_params->op_mpool,
1682 		ts_params->session_mpool, ts_params->session_priv_mpool,
1683 		ts_params->valid_devs[0],
1684 		rte_cryptodev_driver_id_get(
1685 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1686 		BLKCIPHER_AUTHONLY_TYPE);
1687 
1688 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1689 
1690 	return TEST_SUCCESS;
1691 }
1692 
1693 static int
1694 test_authonly_qat_all(void)
1695 {
1696 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1697 	int status;
1698 
1699 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1700 		ts_params->op_mpool,
1701 		ts_params->session_mpool, ts_params->session_priv_mpool,
1702 		ts_params->valid_devs[0],
1703 		rte_cryptodev_driver_id_get(
1704 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1705 		BLKCIPHER_AUTHONLY_TYPE);
1706 
1707 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1708 
1709 	return TEST_SUCCESS;
1710 }
1711 
1712 static int
1713 test_AES_chain_null_all(void)
1714 {
1715 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1716 	int status;
1717 
1718 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1719 		ts_params->op_mpool,
1720 		ts_params->session_mpool, ts_params->session_priv_mpool,
1721 		ts_params->valid_devs[0],
1722 		rte_cryptodev_driver_id_get(
1723 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1724 		BLKCIPHER_AES_CHAIN_TYPE);
1725 
1726 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1727 
1728 	return TEST_SUCCESS;
1729 }
1730 
1731 static int
1732 test_AES_cipheronly_null_all(void)
1733 {
1734 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1735 	int status;
1736 
1737 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1738 		ts_params->op_mpool,
1739 		ts_params->session_mpool, ts_params->session_priv_mpool,
1740 		ts_params->valid_devs[0],
1741 		rte_cryptodev_driver_id_get(
1742 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1743 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1744 
1745 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1746 
1747 	return TEST_SUCCESS;
1748 }
1749 
1750 static int
1751 test_authonly_null_all(void)
1752 {
1753 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1754 	int status;
1755 
1756 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1757 		ts_params->op_mpool,
1758 		ts_params->session_mpool, ts_params->session_priv_mpool,
1759 		ts_params->valid_devs[0],
1760 		rte_cryptodev_driver_id_get(
1761 		RTE_STR(CRYPTODEV_NAME_NULL_PMD)),
1762 		BLKCIPHER_AUTHONLY_TYPE);
1763 
1764 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1765 
1766 	return TEST_SUCCESS;
1767 }
1768 
1769 static int
1770 test_AES_chain_mb_all(void)
1771 {
1772 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1773 	int status;
1774 
1775 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1776 		ts_params->op_mpool,
1777 		ts_params->session_mpool, ts_params->session_priv_mpool,
1778 		ts_params->valid_devs[0],
1779 		rte_cryptodev_driver_id_get(
1780 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1781 		BLKCIPHER_AES_CHAIN_TYPE);
1782 
1783 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1784 
1785 	return TEST_SUCCESS;
1786 }
1787 
1788 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
1789 
1790 static int
1791 test_AES_cipheronly_scheduler_all(void)
1792 {
1793 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1794 	int status;
1795 
1796 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1797 		ts_params->op_mpool,
1798 		ts_params->session_mpool, ts_params->session_priv_mpool,
1799 		ts_params->valid_devs[0],
1800 		rte_cryptodev_driver_id_get(
1801 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1802 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1803 
1804 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1805 
1806 	return TEST_SUCCESS;
1807 }
1808 
1809 static int
1810 test_AES_chain_scheduler_all(void)
1811 {
1812 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1813 	int status;
1814 
1815 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1816 		ts_params->op_mpool,
1817 		ts_params->session_mpool, ts_params->session_priv_mpool,
1818 		ts_params->valid_devs[0],
1819 		rte_cryptodev_driver_id_get(
1820 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1821 		BLKCIPHER_AES_CHAIN_TYPE);
1822 
1823 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1824 
1825 	return TEST_SUCCESS;
1826 }
1827 
1828 static int
1829 test_authonly_scheduler_all(void)
1830 {
1831 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1832 	int status;
1833 
1834 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1835 		ts_params->op_mpool,
1836 		ts_params->session_mpool, ts_params->session_priv_mpool,
1837 		ts_params->valid_devs[0],
1838 		rte_cryptodev_driver_id_get(
1839 		RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1840 		BLKCIPHER_AUTHONLY_TYPE);
1841 
1842 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1843 
1844 	return TEST_SUCCESS;
1845 }
1846 
1847 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
1848 
1849 static int
1850 test_AES_chain_openssl_all(void)
1851 {
1852 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1853 	int status;
1854 
1855 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1856 		ts_params->op_mpool,
1857 		ts_params->session_mpool, ts_params->session_priv_mpool,
1858 		ts_params->valid_devs[0],
1859 		rte_cryptodev_driver_id_get(
1860 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1861 		BLKCIPHER_AES_CHAIN_TYPE);
1862 
1863 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1864 
1865 	return TEST_SUCCESS;
1866 }
1867 
1868 static int
1869 test_AES_cipheronly_openssl_all(void)
1870 {
1871 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1872 	int status;
1873 
1874 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1875 		ts_params->op_mpool,
1876 		ts_params->session_mpool, ts_params->session_priv_mpool,
1877 		ts_params->valid_devs[0],
1878 		rte_cryptodev_driver_id_get(
1879 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1880 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1881 
1882 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1883 
1884 	return TEST_SUCCESS;
1885 }
1886 
1887 static int
1888 test_AES_chain_ccp_all(void)
1889 {
1890 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1891 	int status;
1892 
1893 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1894 		ts_params->op_mpool,
1895 		ts_params->session_mpool, ts_params->session_priv_mpool,
1896 		ts_params->valid_devs[0],
1897 		rte_cryptodev_driver_id_get(
1898 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
1899 		BLKCIPHER_AES_CHAIN_TYPE);
1900 
1901 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1902 
1903 	return TEST_SUCCESS;
1904 }
1905 
1906 static int
1907 test_AES_cipheronly_ccp_all(void)
1908 {
1909 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1910 	int status;
1911 
1912 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1913 		ts_params->op_mpool,
1914 		ts_params->session_mpool, ts_params->session_priv_mpool,
1915 		ts_params->valid_devs[0],
1916 		rte_cryptodev_driver_id_get(
1917 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
1918 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1919 
1920 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1921 
1922 	return TEST_SUCCESS;
1923 }
1924 
1925 static int
1926 test_AES_chain_qat_all(void)
1927 {
1928 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1929 	int status;
1930 
1931 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1932 		ts_params->op_mpool,
1933 		ts_params->session_mpool, ts_params->session_priv_mpool,
1934 		ts_params->valid_devs[0],
1935 		rte_cryptodev_driver_id_get(
1936 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1937 		BLKCIPHER_AES_CHAIN_TYPE);
1938 
1939 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1940 
1941 	return TEST_SUCCESS;
1942 }
1943 
1944 static int
1945 test_AES_cipheronly_qat_all(void)
1946 {
1947 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1948 	int status;
1949 
1950 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1951 		ts_params->op_mpool,
1952 		ts_params->session_mpool, ts_params->session_priv_mpool,
1953 		ts_params->valid_devs[0],
1954 		rte_cryptodev_driver_id_get(
1955 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1956 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1957 
1958 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1959 
1960 	return TEST_SUCCESS;
1961 }
1962 
1963 static int
1964 test_AES_cipheronly_virtio_all(void)
1965 {
1966 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1967 	int status;
1968 
1969 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1970 		ts_params->op_mpool,
1971 		ts_params->session_mpool, ts_params->session_priv_mpool,
1972 		ts_params->valid_devs[0],
1973 		rte_cryptodev_driver_id_get(
1974 		RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD)),
1975 		BLKCIPHER_AES_CIPHERONLY_TYPE);
1976 
1977 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1978 
1979 	return TEST_SUCCESS;
1980 }
1981 
1982 static int
1983 test_AES_chain_caam_jr_all(void)
1984 {
1985 	struct crypto_testsuite_params *ts_params = &testsuite_params;
1986 	int status;
1987 
1988 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1989 		ts_params->op_mpool,
1990 		ts_params->session_mpool, ts_params->session_priv_mpool,
1991 		ts_params->valid_devs[0],
1992 		rte_cryptodev_driver_id_get(
1993 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
1994 		BLKCIPHER_AES_CHAIN_TYPE);
1995 
1996 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
1997 
1998 	return TEST_SUCCESS;
1999 }
2000 
2001 static int
2002 test_AES_cipheronly_caam_jr_all(void)
2003 {
2004 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2005 	int status;
2006 
2007 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2008 		ts_params->op_mpool,
2009 		ts_params->session_mpool, ts_params->session_priv_mpool,
2010 		ts_params->valid_devs[0],
2011 		rte_cryptodev_driver_id_get(
2012 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
2013 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2014 
2015 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2016 
2017 	return TEST_SUCCESS;
2018 }
2019 
2020 static int
2021 test_authonly_caam_jr_all(void)
2022 {
2023 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2024 	int status;
2025 
2026 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2027 		ts_params->op_mpool,
2028 		ts_params->session_mpool, ts_params->session_priv_mpool,
2029 		ts_params->valid_devs[0],
2030 		rte_cryptodev_driver_id_get(
2031 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
2032 		BLKCIPHER_AUTHONLY_TYPE);
2033 
2034 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2035 
2036 	return TEST_SUCCESS;
2037 }
2038 
2039 
2040 static int
2041 test_AES_chain_dpaa_sec_all(void)
2042 {
2043 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2044 	int status;
2045 
2046 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2047 		ts_params->op_mpool,
2048 		ts_params->session_mpool, ts_params->session_priv_mpool,
2049 		ts_params->valid_devs[0],
2050 		rte_cryptodev_driver_id_get(
2051 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2052 		BLKCIPHER_AES_CHAIN_TYPE);
2053 
2054 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2055 
2056 	return TEST_SUCCESS;
2057 }
2058 
2059 static int
2060 test_AES_cipheronly_dpaa_sec_all(void)
2061 {
2062 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2063 	int status;
2064 
2065 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2066 		ts_params->op_mpool,
2067 		ts_params->session_mpool, ts_params->session_priv_mpool,
2068 		ts_params->valid_devs[0],
2069 		rte_cryptodev_driver_id_get(
2070 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2071 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2072 
2073 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2074 
2075 	return TEST_SUCCESS;
2076 }
2077 
2078 static int
2079 test_authonly_dpaa_sec_all(void)
2080 {
2081 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2082 	int status;
2083 
2084 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2085 		ts_params->op_mpool,
2086 		ts_params->session_mpool, ts_params->session_priv_mpool,
2087 		ts_params->valid_devs[0],
2088 		rte_cryptodev_driver_id_get(
2089 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
2090 		BLKCIPHER_AUTHONLY_TYPE);
2091 
2092 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2093 
2094 	return TEST_SUCCESS;
2095 }
2096 
2097 static int
2098 test_AES_chain_dpaa2_sec_all(void)
2099 {
2100 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2101 	int status;
2102 
2103 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2104 		ts_params->op_mpool,
2105 		ts_params->session_mpool, ts_params->session_priv_mpool,
2106 		ts_params->valid_devs[0],
2107 		rte_cryptodev_driver_id_get(
2108 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2109 		BLKCIPHER_AES_CHAIN_TYPE);
2110 
2111 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2112 
2113 	return TEST_SUCCESS;
2114 }
2115 
2116 static int
2117 test_AES_cipheronly_dpaa2_sec_all(void)
2118 {
2119 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2120 	int status;
2121 
2122 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2123 		ts_params->op_mpool,
2124 		ts_params->session_mpool, ts_params->session_priv_mpool,
2125 		ts_params->valid_devs[0],
2126 		rte_cryptodev_driver_id_get(
2127 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2128 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2129 
2130 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2131 
2132 	return TEST_SUCCESS;
2133 }
2134 
2135 static int
2136 test_authonly_dpaa2_sec_all(void)
2137 {
2138 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2139 	int status;
2140 
2141 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2142 		ts_params->op_mpool,
2143 		ts_params->session_mpool, ts_params->session_priv_mpool,
2144 		ts_params->valid_devs[0],
2145 		rte_cryptodev_driver_id_get(
2146 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
2147 		BLKCIPHER_AUTHONLY_TYPE);
2148 
2149 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2150 
2151 	return TEST_SUCCESS;
2152 }
2153 
2154 static int
2155 test_authonly_openssl_all(void)
2156 {
2157 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2158 	int status;
2159 
2160 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2161 		ts_params->op_mpool,
2162 		ts_params->session_mpool, ts_params->session_priv_mpool,
2163 		ts_params->valid_devs[0],
2164 		rte_cryptodev_driver_id_get(
2165 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
2166 		BLKCIPHER_AUTHONLY_TYPE);
2167 
2168 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2169 
2170 	return TEST_SUCCESS;
2171 }
2172 
2173 static int
2174 test_authonly_ccp_all(void)
2175 {
2176 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2177 	int status;
2178 
2179 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2180 		ts_params->op_mpool,
2181 		ts_params->session_mpool, ts_params->session_priv_mpool,
2182 		ts_params->valid_devs[0],
2183 		rte_cryptodev_driver_id_get(
2184 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
2185 		BLKCIPHER_AUTHONLY_TYPE);
2186 
2187 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2188 
2189 	return TEST_SUCCESS;
2190 }
2191 
2192 static int
2193 test_AES_chain_armv8_all(void)
2194 {
2195 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2196 	int status;
2197 
2198 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2199 		ts_params->op_mpool,
2200 		ts_params->session_mpool, ts_params->session_priv_mpool,
2201 		ts_params->valid_devs[0],
2202 		rte_cryptodev_driver_id_get(
2203 		RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)),
2204 		BLKCIPHER_AES_CHAIN_TYPE);
2205 
2206 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2207 
2208 	return TEST_SUCCESS;
2209 }
2210 
2211 static int
2212 test_AES_chain_mrvl_all(void)
2213 {
2214 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2215 	int status;
2216 
2217 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2218 		ts_params->op_mpool,
2219 		ts_params->session_mpool, ts_params->session_priv_mpool,
2220 		ts_params->valid_devs[0],
2221 		rte_cryptodev_driver_id_get(
2222 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2223 		BLKCIPHER_AES_CHAIN_TYPE);
2224 
2225 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2226 
2227 	return TEST_SUCCESS;
2228 }
2229 
2230 static int
2231 test_AES_cipheronly_mrvl_all(void)
2232 {
2233 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2234 	int status;
2235 
2236 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2237 		ts_params->op_mpool,
2238 		ts_params->session_mpool, ts_params->session_priv_mpool,
2239 		ts_params->valid_devs[0],
2240 		rte_cryptodev_driver_id_get(
2241 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2242 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2243 
2244 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2245 
2246 	return TEST_SUCCESS;
2247 }
2248 
2249 static int
2250 test_authonly_mrvl_all(void)
2251 {
2252 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2253 	int status;
2254 
2255 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2256 		ts_params->op_mpool,
2257 		ts_params->session_mpool, ts_params->session_priv_mpool,
2258 		ts_params->valid_devs[0],
2259 		rte_cryptodev_driver_id_get(
2260 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2261 		BLKCIPHER_AUTHONLY_TYPE);
2262 
2263 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2264 
2265 	return TEST_SUCCESS;
2266 }
2267 
2268 static int
2269 test_3DES_chain_mrvl_all(void)
2270 {
2271 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2272 	int status;
2273 
2274 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2275 		ts_params->op_mpool,
2276 		ts_params->session_mpool, ts_params->session_priv_mpool,
2277 		ts_params->valid_devs[0],
2278 		rte_cryptodev_driver_id_get(
2279 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2280 		BLKCIPHER_3DES_CHAIN_TYPE);
2281 
2282 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2283 
2284 	return TEST_SUCCESS;
2285 }
2286 
2287 static int
2288 test_3DES_cipheronly_mrvl_all(void)
2289 {
2290 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2291 	int status;
2292 
2293 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2294 		ts_params->op_mpool,
2295 		ts_params->session_mpool, ts_params->session_priv_mpool,
2296 		ts_params->valid_devs[0],
2297 		rte_cryptodev_driver_id_get(
2298 		RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)),
2299 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
2300 
2301 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2302 
2303 	return TEST_SUCCESS;
2304 }
2305 
2306 static int
2307 test_AES_chain_octeontx_all(void)
2308 {
2309 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2310 	int status;
2311 
2312 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2313 		ts_params->op_mpool, ts_params->session_mpool,
2314 		ts_params->session_priv_mpool,
2315 		ts_params->valid_devs[0],
2316 		rte_cryptodev_driver_id_get(
2317 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2318 		BLKCIPHER_AES_CHAIN_TYPE);
2319 
2320 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2321 
2322 	return TEST_SUCCESS;
2323 }
2324 
2325 static int
2326 test_AES_cipheronly_octeontx_all(void)
2327 {
2328 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2329 	int status;
2330 
2331 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2332 		ts_params->op_mpool, ts_params->session_mpool,
2333 		ts_params->session_priv_mpool,
2334 		ts_params->valid_devs[0],
2335 		rte_cryptodev_driver_id_get(
2336 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2337 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2338 
2339 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2340 
2341 	return TEST_SUCCESS;
2342 }
2343 
2344 static int
2345 test_3DES_chain_octeontx_all(void)
2346 {
2347 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2348 	int status;
2349 
2350 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2351 		ts_params->op_mpool, ts_params->session_mpool,
2352 		ts_params->session_priv_mpool,
2353 		ts_params->valid_devs[0],
2354 		rte_cryptodev_driver_id_get(
2355 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2356 		BLKCIPHER_3DES_CHAIN_TYPE);
2357 
2358 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2359 
2360 	return TEST_SUCCESS;
2361 }
2362 
2363 static int
2364 test_AES_chain_nitrox_all(void)
2365 {
2366 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2367 	int status;
2368 
2369 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2370 		ts_params->op_mpool,
2371 		ts_params->session_mpool, ts_params->session_priv_mpool,
2372 		ts_params->valid_devs[0],
2373 		rte_cryptodev_driver_id_get(
2374 		RTE_STR(CRYPTODEV_NAME_NITROX_PMD)),
2375 		BLKCIPHER_AES_CHAIN_TYPE);
2376 
2377 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2378 
2379 	return TEST_SUCCESS;
2380 }
2381 
2382 static int
2383 test_3DES_cipheronly_octeontx_all(void)
2384 {
2385 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2386 	int status;
2387 
2388 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2389 		ts_params->op_mpool, ts_params->session_mpool,
2390 		ts_params->session_priv_mpool,
2391 		ts_params->valid_devs[0],
2392 		rte_cryptodev_driver_id_get(
2393 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2394 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
2395 
2396 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2397 
2398 	return TEST_SUCCESS;
2399 }
2400 
2401 static int
2402 test_authonly_octeontx_all(void)
2403 {
2404 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2405 	int status;
2406 
2407 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2408 		ts_params->op_mpool, ts_params->session_mpool,
2409 		ts_params->session_priv_mpool,
2410 		ts_params->valid_devs[0],
2411 		rte_cryptodev_driver_id_get(
2412 		RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)),
2413 		BLKCIPHER_AUTHONLY_TYPE);
2414 
2415 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2416 
2417 	return TEST_SUCCESS;
2418 }
2419 
2420 static int
2421 test_AES_chain_octeontx2_all(void)
2422 {
2423 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2424 	int status;
2425 
2426 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2427 		ts_params->op_mpool, ts_params->session_mpool,
2428 		ts_params->session_priv_mpool,
2429 		ts_params->valid_devs[0],
2430 		rte_cryptodev_driver_id_get(
2431 		RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)),
2432 		BLKCIPHER_AES_CHAIN_TYPE);
2433 
2434 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2435 
2436 	return TEST_SUCCESS;
2437 }
2438 
2439 static int
2440 test_AES_cipheronly_octeontx2_all(void)
2441 {
2442 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2443 	int status;
2444 
2445 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2446 		ts_params->op_mpool, ts_params->session_mpool,
2447 		ts_params->session_priv_mpool,
2448 		ts_params->valid_devs[0],
2449 		rte_cryptodev_driver_id_get(
2450 		RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)),
2451 		BLKCIPHER_AES_CIPHERONLY_TYPE);
2452 
2453 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2454 
2455 	return TEST_SUCCESS;
2456 }
2457 
2458 static int
2459 test_3DES_chain_octeontx2_all(void)
2460 {
2461 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2462 	int status;
2463 
2464 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2465 		ts_params->op_mpool, ts_params->session_mpool,
2466 		ts_params->session_priv_mpool,
2467 		ts_params->valid_devs[0],
2468 		rte_cryptodev_driver_id_get(
2469 		RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)),
2470 		BLKCIPHER_3DES_CHAIN_TYPE);
2471 
2472 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2473 
2474 	return TEST_SUCCESS;
2475 }
2476 
2477 static int
2478 test_3DES_cipheronly_octeontx2_all(void)
2479 {
2480 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2481 	int status;
2482 
2483 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2484 		ts_params->op_mpool, ts_params->session_mpool,
2485 		ts_params->session_priv_mpool,
2486 		ts_params->valid_devs[0],
2487 		rte_cryptodev_driver_id_get(
2488 		RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)),
2489 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
2490 
2491 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2492 
2493 	return TEST_SUCCESS;
2494 }
2495 
2496 static int
2497 test_authonly_octeontx2_all(void)
2498 {
2499 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2500 	int status;
2501 
2502 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
2503 		ts_params->op_mpool, ts_params->session_mpool,
2504 		ts_params->session_priv_mpool,
2505 		ts_params->valid_devs[0],
2506 		rte_cryptodev_driver_id_get(
2507 		RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)),
2508 		BLKCIPHER_AUTHONLY_TYPE);
2509 
2510 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
2511 
2512 	return TEST_SUCCESS;
2513 }
2514 
2515 /* ***** SNOW 3G Tests ***** */
2516 static int
2517 create_wireless_algo_hash_session(uint8_t dev_id,
2518 	const uint8_t *key, const uint8_t key_len,
2519 	const uint8_t iv_len, const uint8_t auth_len,
2520 	enum rte_crypto_auth_operation op,
2521 	enum rte_crypto_auth_algorithm algo)
2522 {
2523 	uint8_t hash_key[key_len];
2524 	int status;
2525 
2526 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2527 	struct crypto_unittest_params *ut_params = &unittest_params;
2528 
2529 	memcpy(hash_key, key, key_len);
2530 
2531 	debug_hexdump(stdout, "key:", key, key_len);
2532 
2533 	/* Setup Authentication Parameters */
2534 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2535 	ut_params->auth_xform.next = NULL;
2536 
2537 	ut_params->auth_xform.auth.op = op;
2538 	ut_params->auth_xform.auth.algo = algo;
2539 	ut_params->auth_xform.auth.key.length = key_len;
2540 	ut_params->auth_xform.auth.key.data = hash_key;
2541 	ut_params->auth_xform.auth.digest_length = auth_len;
2542 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
2543 	ut_params->auth_xform.auth.iv.length = iv_len;
2544 	ut_params->sess = rte_cryptodev_sym_session_create(
2545 			ts_params->session_mpool);
2546 
2547 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2548 			&ut_params->auth_xform,
2549 			ts_params->session_priv_mpool);
2550 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2551 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2552 	return 0;
2553 }
2554 
2555 static int
2556 create_wireless_algo_cipher_session(uint8_t dev_id,
2557 			enum rte_crypto_cipher_operation op,
2558 			enum rte_crypto_cipher_algorithm algo,
2559 			const uint8_t *key, const uint8_t key_len,
2560 			uint8_t iv_len)
2561 {
2562 	uint8_t cipher_key[key_len];
2563 	int status;
2564 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2565 	struct crypto_unittest_params *ut_params = &unittest_params;
2566 
2567 	memcpy(cipher_key, key, key_len);
2568 
2569 	/* Setup Cipher Parameters */
2570 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2571 	ut_params->cipher_xform.next = NULL;
2572 
2573 	ut_params->cipher_xform.cipher.algo = algo;
2574 	ut_params->cipher_xform.cipher.op = op;
2575 	ut_params->cipher_xform.cipher.key.data = cipher_key;
2576 	ut_params->cipher_xform.cipher.key.length = key_len;
2577 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2578 	ut_params->cipher_xform.cipher.iv.length = iv_len;
2579 
2580 	debug_hexdump(stdout, "key:", key, key_len);
2581 
2582 	/* Create Crypto session */
2583 	ut_params->sess = rte_cryptodev_sym_session_create(
2584 			ts_params->session_mpool);
2585 
2586 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2587 			&ut_params->cipher_xform,
2588 			ts_params->session_priv_mpool);
2589 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2590 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2591 	return 0;
2592 }
2593 
2594 static int
2595 create_wireless_algo_cipher_operation(const uint8_t *iv, uint8_t iv_len,
2596 			unsigned int cipher_len,
2597 			unsigned int cipher_offset)
2598 {
2599 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2600 	struct crypto_unittest_params *ut_params = &unittest_params;
2601 
2602 	/* Generate Crypto op data structure */
2603 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2604 				RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2605 	TEST_ASSERT_NOT_NULL(ut_params->op,
2606 				"Failed to allocate pktmbuf offload");
2607 
2608 	/* Set crypto operation data parameters */
2609 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2610 
2611 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2612 
2613 	/* set crypto operation source mbuf */
2614 	sym_op->m_src = ut_params->ibuf;
2615 
2616 	/* iv */
2617 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2618 			iv, iv_len);
2619 	sym_op->cipher.data.length = cipher_len;
2620 	sym_op->cipher.data.offset = cipher_offset;
2621 	return 0;
2622 }
2623 
2624 static int
2625 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, uint8_t iv_len,
2626 			unsigned int cipher_len,
2627 			unsigned int cipher_offset)
2628 {
2629 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2630 	struct crypto_unittest_params *ut_params = &unittest_params;
2631 
2632 	/* Generate Crypto op data structure */
2633 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2634 				RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2635 	TEST_ASSERT_NOT_NULL(ut_params->op,
2636 				"Failed to allocate pktmbuf offload");
2637 
2638 	/* Set crypto operation data parameters */
2639 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2640 
2641 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2642 
2643 	/* set crypto operation source mbuf */
2644 	sym_op->m_src = ut_params->ibuf;
2645 	sym_op->m_dst = ut_params->obuf;
2646 
2647 	/* iv */
2648 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2649 			iv, iv_len);
2650 	sym_op->cipher.data.length = cipher_len;
2651 	sym_op->cipher.data.offset = cipher_offset;
2652 	return 0;
2653 }
2654 
2655 static int
2656 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
2657 		enum rte_crypto_cipher_operation cipher_op,
2658 		enum rte_crypto_auth_operation auth_op,
2659 		enum rte_crypto_auth_algorithm auth_algo,
2660 		enum rte_crypto_cipher_algorithm cipher_algo,
2661 		const uint8_t *key, uint8_t key_len,
2662 		uint8_t auth_iv_len, uint8_t auth_len,
2663 		uint8_t cipher_iv_len)
2664 
2665 {
2666 	uint8_t cipher_auth_key[key_len];
2667 	int status;
2668 
2669 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2670 	struct crypto_unittest_params *ut_params = &unittest_params;
2671 
2672 	memcpy(cipher_auth_key, key, key_len);
2673 
2674 	/* Setup Authentication Parameters */
2675 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2676 	ut_params->auth_xform.next = NULL;
2677 
2678 	ut_params->auth_xform.auth.op = auth_op;
2679 	ut_params->auth_xform.auth.algo = auth_algo;
2680 	ut_params->auth_xform.auth.key.length = key_len;
2681 	/* Hash key = cipher key */
2682 	ut_params->auth_xform.auth.key.data = cipher_auth_key;
2683 	ut_params->auth_xform.auth.digest_length = auth_len;
2684 	/* Auth IV will be after cipher IV */
2685 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2686 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2687 
2688 	/* Setup Cipher Parameters */
2689 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2690 	ut_params->cipher_xform.next = &ut_params->auth_xform;
2691 
2692 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2693 	ut_params->cipher_xform.cipher.op = cipher_op;
2694 	ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2695 	ut_params->cipher_xform.cipher.key.length = key_len;
2696 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2697 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2698 
2699 	debug_hexdump(stdout, "key:", key, key_len);
2700 
2701 	/* Create Crypto session*/
2702 	ut_params->sess = rte_cryptodev_sym_session_create(
2703 			ts_params->session_mpool);
2704 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2705 
2706 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2707 			&ut_params->cipher_xform,
2708 			ts_params->session_priv_mpool);
2709 	if (status == -ENOTSUP)
2710 		return status;
2711 
2712 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2713 	return 0;
2714 }
2715 
2716 static int
2717 create_wireless_cipher_auth_session(uint8_t dev_id,
2718 		enum rte_crypto_cipher_operation cipher_op,
2719 		enum rte_crypto_auth_operation auth_op,
2720 		enum rte_crypto_auth_algorithm auth_algo,
2721 		enum rte_crypto_cipher_algorithm cipher_algo,
2722 		const struct wireless_test_data *tdata)
2723 {
2724 	const uint8_t key_len = tdata->key.len;
2725 	uint8_t cipher_auth_key[key_len];
2726 	int status;
2727 
2728 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2729 	struct crypto_unittest_params *ut_params = &unittest_params;
2730 	const uint8_t *key = tdata->key.data;
2731 	const uint8_t auth_len = tdata->digest.len;
2732 	uint8_t cipher_iv_len = tdata->cipher_iv.len;
2733 	uint8_t auth_iv_len = tdata->auth_iv.len;
2734 
2735 	memcpy(cipher_auth_key, key, key_len);
2736 
2737 	/* Setup Authentication Parameters */
2738 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2739 	ut_params->auth_xform.next = NULL;
2740 
2741 	ut_params->auth_xform.auth.op = auth_op;
2742 	ut_params->auth_xform.auth.algo = auth_algo;
2743 	ut_params->auth_xform.auth.key.length = key_len;
2744 	/* Hash key = cipher key */
2745 	ut_params->auth_xform.auth.key.data = cipher_auth_key;
2746 	ut_params->auth_xform.auth.digest_length = auth_len;
2747 	/* Auth IV will be after cipher IV */
2748 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2749 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2750 
2751 	/* Setup Cipher Parameters */
2752 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2753 	ut_params->cipher_xform.next = &ut_params->auth_xform;
2754 
2755 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2756 	ut_params->cipher_xform.cipher.op = cipher_op;
2757 	ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2758 	ut_params->cipher_xform.cipher.key.length = key_len;
2759 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2760 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2761 
2762 
2763 	debug_hexdump(stdout, "key:", key, key_len);
2764 
2765 	/* Create Crypto session*/
2766 	ut_params->sess = rte_cryptodev_sym_session_create(
2767 			ts_params->session_mpool);
2768 
2769 	status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2770 			&ut_params->cipher_xform,
2771 			ts_params->session_priv_mpool);
2772 
2773 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2774 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2775 	return 0;
2776 }
2777 
2778 static int
2779 create_zuc_cipher_auth_encrypt_generate_session(uint8_t dev_id,
2780 		const struct wireless_test_data *tdata)
2781 {
2782 	return create_wireless_cipher_auth_session(dev_id,
2783 		RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2784 		RTE_CRYPTO_AUTH_OP_GENERATE, RTE_CRYPTO_AUTH_ZUC_EIA3,
2785 		RTE_CRYPTO_CIPHER_ZUC_EEA3, tdata);
2786 }
2787 
2788 static int
2789 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
2790 		enum rte_crypto_cipher_operation cipher_op,
2791 		enum rte_crypto_auth_operation auth_op,
2792 		enum rte_crypto_auth_algorithm auth_algo,
2793 		enum rte_crypto_cipher_algorithm cipher_algo,
2794 		const uint8_t *key, const uint8_t key_len,
2795 		uint8_t auth_iv_len, uint8_t auth_len,
2796 		uint8_t cipher_iv_len)
2797 {
2798 	uint8_t auth_cipher_key[key_len];
2799 	int status;
2800 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2801 	struct crypto_unittest_params *ut_params = &unittest_params;
2802 
2803 	memcpy(auth_cipher_key, key, key_len);
2804 
2805 	/* Setup Authentication Parameters */
2806 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2807 	ut_params->auth_xform.auth.op = auth_op;
2808 	ut_params->auth_xform.next = &ut_params->cipher_xform;
2809 	ut_params->auth_xform.auth.algo = auth_algo;
2810 	ut_params->auth_xform.auth.key.length = key_len;
2811 	ut_params->auth_xform.auth.key.data = auth_cipher_key;
2812 	ut_params->auth_xform.auth.digest_length = auth_len;
2813 	/* Auth IV will be after cipher IV */
2814 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2815 	ut_params->auth_xform.auth.iv.length = auth_iv_len;
2816 
2817 	/* Setup Cipher Parameters */
2818 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2819 	ut_params->cipher_xform.next = NULL;
2820 	ut_params->cipher_xform.cipher.algo = cipher_algo;
2821 	ut_params->cipher_xform.cipher.op = cipher_op;
2822 	ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
2823 	ut_params->cipher_xform.cipher.key.length = key_len;
2824 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2825 	ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2826 
2827 	debug_hexdump(stdout, "key:", key, key_len);
2828 
2829 	/* Create Crypto session*/
2830 	ut_params->sess = rte_cryptodev_sym_session_create(
2831 			ts_params->session_mpool);
2832 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2833 
2834 	if (cipher_op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
2835 		ut_params->auth_xform.next = NULL;
2836 		ut_params->cipher_xform.next = &ut_params->auth_xform;
2837 		status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2838 				&ut_params->cipher_xform,
2839 				ts_params->session_priv_mpool);
2840 
2841 	} else
2842 		status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2843 				&ut_params->auth_xform,
2844 				ts_params->session_priv_mpool);
2845 
2846 	if (status == -ENOTSUP)
2847 		return status;
2848 
2849 	TEST_ASSERT_EQUAL(status, 0, "session init failed");
2850 
2851 	return 0;
2852 }
2853 
2854 static int
2855 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
2856 		unsigned int auth_tag_len,
2857 		const uint8_t *iv, unsigned int iv_len,
2858 		unsigned int data_pad_len,
2859 		enum rte_crypto_auth_operation op,
2860 		unsigned int auth_len, unsigned int auth_offset)
2861 {
2862 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2863 
2864 	struct crypto_unittest_params *ut_params = &unittest_params;
2865 
2866 	/* Generate Crypto op data structure */
2867 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2868 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2869 	TEST_ASSERT_NOT_NULL(ut_params->op,
2870 		"Failed to allocate pktmbuf offload");
2871 
2872 	/* Set crypto operation data parameters */
2873 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2874 
2875 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2876 
2877 	/* set crypto operation source mbuf */
2878 	sym_op->m_src = ut_params->ibuf;
2879 
2880 	/* iv */
2881 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2882 			iv, iv_len);
2883 	/* digest */
2884 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2885 					ut_params->ibuf, auth_tag_len);
2886 
2887 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2888 				"no room to append auth tag");
2889 	ut_params->digest = sym_op->auth.digest.data;
2890 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2891 			ut_params->ibuf, data_pad_len);
2892 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2893 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2894 	else
2895 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2896 
2897 	debug_hexdump(stdout, "digest:",
2898 		sym_op->auth.digest.data,
2899 		auth_tag_len);
2900 
2901 	sym_op->auth.data.length = auth_len;
2902 	sym_op->auth.data.offset = auth_offset;
2903 
2904 	return 0;
2905 }
2906 
2907 static int
2908 create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata,
2909 	enum rte_crypto_auth_operation op)
2910 {
2911 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2912 	struct crypto_unittest_params *ut_params = &unittest_params;
2913 
2914 	const uint8_t *auth_tag = tdata->digest.data;
2915 	const unsigned int auth_tag_len = tdata->digest.len;
2916 	unsigned int plaintext_len = ceil_byte_length(tdata->plaintext.len);
2917 	unsigned int data_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2918 
2919 	const uint8_t *cipher_iv = tdata->cipher_iv.data;
2920 	const uint8_t cipher_iv_len = tdata->cipher_iv.len;
2921 	const uint8_t *auth_iv = tdata->auth_iv.data;
2922 	const uint8_t auth_iv_len = tdata->auth_iv.len;
2923 	const unsigned int cipher_len = tdata->validCipherLenInBits.len;
2924 	const unsigned int auth_len = tdata->validAuthLenInBits.len;
2925 
2926 	/* Generate Crypto op data structure */
2927 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2928 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2929 	TEST_ASSERT_NOT_NULL(ut_params->op,
2930 			"Failed to allocate pktmbuf offload");
2931 	/* Set crypto operation data parameters */
2932 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2933 
2934 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2935 
2936 	/* set crypto operation source mbuf */
2937 	sym_op->m_src = ut_params->ibuf;
2938 
2939 	/* digest */
2940 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2941 			ut_params->ibuf, auth_tag_len);
2942 
2943 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2944 			"no room to append auth tag");
2945 	ut_params->digest = sym_op->auth.digest.data;
2946 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
2947 			ut_params->ibuf, data_pad_len);
2948 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2949 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
2950 	else
2951 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2952 
2953 	debug_hexdump(stdout, "digest:",
2954 		sym_op->auth.digest.data,
2955 		auth_tag_len);
2956 
2957 	/* Copy cipher and auth IVs at the end of the crypto operation */
2958 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2959 						IV_OFFSET);
2960 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2961 	iv_ptr += cipher_iv_len;
2962 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2963 
2964 	sym_op->cipher.data.length = cipher_len;
2965 	sym_op->cipher.data.offset = 0;
2966 	sym_op->auth.data.length = auth_len;
2967 	sym_op->auth.data.offset = 0;
2968 
2969 	return 0;
2970 }
2971 
2972 static int
2973 create_zuc_cipher_hash_generate_operation(
2974 		const struct wireless_test_data *tdata)
2975 {
2976 	return create_wireless_cipher_hash_operation(tdata,
2977 		RTE_CRYPTO_AUTH_OP_GENERATE);
2978 }
2979 
2980 static int
2981 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2982 		const unsigned auth_tag_len,
2983 		const uint8_t *auth_iv, uint8_t auth_iv_len,
2984 		unsigned data_pad_len,
2985 		enum rte_crypto_auth_operation op,
2986 		const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2987 		const unsigned cipher_len, const unsigned cipher_offset,
2988 		const unsigned auth_len, const unsigned auth_offset)
2989 {
2990 	struct crypto_testsuite_params *ts_params = &testsuite_params;
2991 	struct crypto_unittest_params *ut_params = &unittest_params;
2992 
2993 	enum rte_crypto_cipher_algorithm cipher_algo =
2994 			ut_params->cipher_xform.cipher.algo;
2995 	enum rte_crypto_auth_algorithm auth_algo =
2996 			ut_params->auth_xform.auth.algo;
2997 
2998 	/* Generate Crypto op data structure */
2999 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3000 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3001 	TEST_ASSERT_NOT_NULL(ut_params->op,
3002 			"Failed to allocate pktmbuf offload");
3003 	/* Set crypto operation data parameters */
3004 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3005 
3006 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3007 
3008 	/* set crypto operation source mbuf */
3009 	sym_op->m_src = ut_params->ibuf;
3010 
3011 	/* digest */
3012 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
3013 			ut_params->ibuf, auth_tag_len);
3014 
3015 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
3016 			"no room to append auth tag");
3017 	ut_params->digest = sym_op->auth.digest.data;
3018 
3019 	if (rte_pktmbuf_is_contiguous(ut_params->ibuf)) {
3020 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
3021 				ut_params->ibuf, data_pad_len);
3022 	} else {
3023 		struct rte_mbuf *m = ut_params->ibuf;
3024 		unsigned int offset = data_pad_len;
3025 
3026 		while (offset > m->data_len && m->next != NULL) {
3027 			offset -= m->data_len;
3028 			m = m->next;
3029 		}
3030 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
3031 			m, offset);
3032 	}
3033 
3034 	if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
3035 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
3036 	else
3037 		rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
3038 
3039 	debug_hexdump(stdout, "digest:",
3040 		sym_op->auth.digest.data,
3041 		auth_tag_len);
3042 
3043 	/* Copy cipher and auth IVs at the end of the crypto operation */
3044 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
3045 						IV_OFFSET);
3046 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
3047 	iv_ptr += cipher_iv_len;
3048 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
3049 
3050 	if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||
3051 		cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 ||
3052 		cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) {
3053 		sym_op->cipher.data.length = cipher_len;
3054 		sym_op->cipher.data.offset = cipher_offset;
3055 	} else {
3056 		sym_op->cipher.data.length = cipher_len >> 3;
3057 		sym_op->cipher.data.offset = cipher_offset >> 3;
3058 	}
3059 
3060 	if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 ||
3061 		auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 ||
3062 		auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {
3063 		sym_op->auth.data.length = auth_len;
3064 		sym_op->auth.data.offset = auth_offset;
3065 	} else {
3066 		sym_op->auth.data.length = auth_len >> 3;
3067 		sym_op->auth.data.offset = auth_offset >> 3;
3068 	}
3069 
3070 	return 0;
3071 }
3072 
3073 static int
3074 create_wireless_algo_auth_cipher_operation(
3075 		const uint8_t *auth_tag, unsigned int auth_tag_len,
3076 		const uint8_t *cipher_iv, uint8_t cipher_iv_len,
3077 		const uint8_t *auth_iv, uint8_t auth_iv_len,
3078 		unsigned int data_pad_len,
3079 		unsigned int cipher_len, unsigned int cipher_offset,
3080 		unsigned int auth_len, unsigned int auth_offset,
3081 		uint8_t op_mode, uint8_t do_sgl, uint8_t verify)
3082 {
3083 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3084 	struct crypto_unittest_params *ut_params = &unittest_params;
3085 
3086 	enum rte_crypto_cipher_algorithm cipher_algo =
3087 			ut_params->cipher_xform.cipher.algo;
3088 	enum rte_crypto_auth_algorithm auth_algo =
3089 			ut_params->auth_xform.auth.algo;
3090 
3091 	/* Generate Crypto op data structure */
3092 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3093 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3094 	TEST_ASSERT_NOT_NULL(ut_params->op,
3095 			"Failed to allocate pktmbuf offload");
3096 
3097 	/* Set crypto operation data parameters */
3098 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3099 
3100 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3101 
3102 	/* set crypto operation mbufs */
3103 	sym_op->m_src = ut_params->ibuf;
3104 	if (op_mode == OUT_OF_PLACE)
3105 		sym_op->m_dst = ut_params->obuf;
3106 
3107 	/* digest */
3108 	if (!do_sgl) {
3109 		sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(
3110 			(op_mode == IN_PLACE ?
3111 				ut_params->ibuf : ut_params->obuf),
3112 			uint8_t *, data_pad_len);
3113 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
3114 			(op_mode == IN_PLACE ?
3115 				ut_params->ibuf : ut_params->obuf),
3116 			data_pad_len);
3117 		memset(sym_op->auth.digest.data, 0, auth_tag_len);
3118 	} else {
3119 		uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3);
3120 		struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ?
3121 				sym_op->m_src : sym_op->m_dst);
3122 		while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) {
3123 			remaining_off -= rte_pktmbuf_data_len(sgl_buf);
3124 			sgl_buf = sgl_buf->next;
3125 		}
3126 		sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf,
3127 				uint8_t *, remaining_off);
3128 		sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(sgl_buf,
3129 				remaining_off);
3130 		memset(sym_op->auth.digest.data, 0, remaining_off);
3131 		while (sgl_buf->next != NULL) {
3132 			memset(rte_pktmbuf_mtod(sgl_buf, uint8_t *),
3133 				0, rte_pktmbuf_data_len(sgl_buf));
3134 			sgl_buf = sgl_buf->next;
3135 		}
3136 	}
3137 
3138 	/* Copy digest for the verification */
3139 	if (verify)
3140 		memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
3141 
3142 	/* Copy cipher and auth IVs at the end of the crypto operation */
3143 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(
3144 			ut_params->op, uint8_t *, IV_OFFSET);
3145 
3146 	rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
3147 	iv_ptr += cipher_iv_len;
3148 	rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
3149 
3150 	if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||
3151 		cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 ||
3152 		cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) {
3153 		sym_op->cipher.data.length = cipher_len;
3154 		sym_op->cipher.data.offset = cipher_offset;
3155 	} else {
3156 		sym_op->cipher.data.length = cipher_len >> 3;
3157 		sym_op->cipher.data.offset = cipher_offset >> 3;
3158 	}
3159 
3160 	if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 ||
3161 		auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 ||
3162 		auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {
3163 		sym_op->auth.data.length = auth_len;
3164 		sym_op->auth.data.offset = auth_offset;
3165 	} else {
3166 		sym_op->auth.data.length = auth_len >> 3;
3167 		sym_op->auth.data.offset = auth_offset >> 3;
3168 	}
3169 
3170 	return 0;
3171 }
3172 
3173 static int
3174 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
3175 {
3176 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3177 	struct crypto_unittest_params *ut_params = &unittest_params;
3178 
3179 	int retval;
3180 	unsigned plaintext_pad_len;
3181 	unsigned plaintext_len;
3182 	uint8_t *plaintext;
3183 
3184 	/* Create SNOW 3G session */
3185 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3186 			tdata->key.data, tdata->key.len,
3187 			tdata->auth_iv.len, tdata->digest.len,
3188 			RTE_CRYPTO_AUTH_OP_GENERATE,
3189 			RTE_CRYPTO_AUTH_SNOW3G_UIA2);
3190 	if (retval < 0)
3191 		return retval;
3192 
3193 	/* alloc mbuf and set payload */
3194 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3195 
3196 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3197 	rte_pktmbuf_tailroom(ut_params->ibuf));
3198 
3199 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3200 	/* Append data which is padded to a multiple of */
3201 	/* the algorithms block size */
3202 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3203 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3204 				plaintext_pad_len);
3205 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3206 
3207 	/* Create SNOW 3G operation */
3208 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
3209 			tdata->auth_iv.data, tdata->auth_iv.len,
3210 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3211 			tdata->validAuthLenInBits.len,
3212 			0);
3213 	if (retval < 0)
3214 		return retval;
3215 
3216 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3217 				ut_params->op);
3218 	ut_params->obuf = ut_params->op->sym->m_src;
3219 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3220 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3221 			+ plaintext_pad_len;
3222 
3223 	/* Validate obuf */
3224 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
3225 	ut_params->digest,
3226 	tdata->digest.data,
3227 	DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3228 	"SNOW 3G Generated auth tag not as expected");
3229 
3230 	return 0;
3231 }
3232 
3233 static int
3234 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
3235 {
3236 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3237 	struct crypto_unittest_params *ut_params = &unittest_params;
3238 
3239 	int retval;
3240 	unsigned plaintext_pad_len;
3241 	unsigned plaintext_len;
3242 	uint8_t *plaintext;
3243 
3244 	/* Create SNOW 3G session */
3245 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3246 				tdata->key.data, tdata->key.len,
3247 				tdata->auth_iv.len, tdata->digest.len,
3248 				RTE_CRYPTO_AUTH_OP_VERIFY,
3249 				RTE_CRYPTO_AUTH_SNOW3G_UIA2);
3250 	if (retval < 0)
3251 		return retval;
3252 	/* alloc mbuf and set payload */
3253 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3254 
3255 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3256 	rte_pktmbuf_tailroom(ut_params->ibuf));
3257 
3258 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3259 	/* Append data which is padded to a multiple of */
3260 	/* the algorithms block size */
3261 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3262 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3263 				plaintext_pad_len);
3264 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3265 
3266 	/* Create SNOW 3G operation */
3267 	retval = create_wireless_algo_hash_operation(tdata->digest.data,
3268 			tdata->digest.len,
3269 			tdata->auth_iv.data, tdata->auth_iv.len,
3270 			plaintext_pad_len,
3271 			RTE_CRYPTO_AUTH_OP_VERIFY,
3272 			tdata->validAuthLenInBits.len,
3273 			0);
3274 	if (retval < 0)
3275 		return retval;
3276 
3277 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3278 				ut_params->op);
3279 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3280 	ut_params->obuf = ut_params->op->sym->m_src;
3281 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3282 				+ plaintext_pad_len;
3283 
3284 	/* Validate obuf */
3285 	if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
3286 		return 0;
3287 	else
3288 		return -1;
3289 
3290 	return 0;
3291 }
3292 
3293 static int
3294 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
3295 {
3296 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3297 	struct crypto_unittest_params *ut_params = &unittest_params;
3298 
3299 	int retval;
3300 	unsigned plaintext_pad_len;
3301 	unsigned plaintext_len;
3302 	uint8_t *plaintext;
3303 
3304 	/* Create KASUMI session */
3305 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3306 			tdata->key.data, tdata->key.len,
3307 			0, tdata->digest.len,
3308 			RTE_CRYPTO_AUTH_OP_GENERATE,
3309 			RTE_CRYPTO_AUTH_KASUMI_F9);
3310 	if (retval < 0)
3311 		return retval;
3312 
3313 	/* alloc mbuf and set payload */
3314 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3315 
3316 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3317 	rte_pktmbuf_tailroom(ut_params->ibuf));
3318 
3319 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3320 	/* Append data which is padded to a multiple of */
3321 	/* the algorithms block size */
3322 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3323 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3324 				plaintext_pad_len);
3325 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3326 
3327 	/* Create KASUMI operation */
3328 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
3329 			NULL, 0,
3330 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3331 			tdata->plaintext.len,
3332 			0);
3333 	if (retval < 0)
3334 		return retval;
3335 
3336 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3337 				ut_params->op);
3338 	ut_params->obuf = ut_params->op->sym->m_src;
3339 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3340 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3341 			+ plaintext_pad_len;
3342 
3343 	/* Validate obuf */
3344 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
3345 	ut_params->digest,
3346 	tdata->digest.data,
3347 	DIGEST_BYTE_LENGTH_KASUMI_F9,
3348 	"KASUMI Generated auth tag not as expected");
3349 
3350 	return 0;
3351 }
3352 
3353 static int
3354 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
3355 {
3356 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3357 	struct crypto_unittest_params *ut_params = &unittest_params;
3358 
3359 	int retval;
3360 	unsigned plaintext_pad_len;
3361 	unsigned plaintext_len;
3362 	uint8_t *plaintext;
3363 
3364 	/* Create KASUMI session */
3365 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3366 				tdata->key.data, tdata->key.len,
3367 				0, tdata->digest.len,
3368 				RTE_CRYPTO_AUTH_OP_VERIFY,
3369 				RTE_CRYPTO_AUTH_KASUMI_F9);
3370 	if (retval < 0)
3371 		return retval;
3372 	/* alloc mbuf and set payload */
3373 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3374 
3375 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3376 	rte_pktmbuf_tailroom(ut_params->ibuf));
3377 
3378 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3379 	/* Append data which is padded to a multiple */
3380 	/* of the algorithms block size */
3381 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3382 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3383 				plaintext_pad_len);
3384 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3385 
3386 	/* Create KASUMI operation */
3387 	retval = create_wireless_algo_hash_operation(tdata->digest.data,
3388 			tdata->digest.len,
3389 			NULL, 0,
3390 			plaintext_pad_len,
3391 			RTE_CRYPTO_AUTH_OP_VERIFY,
3392 			tdata->plaintext.len,
3393 			0);
3394 	if (retval < 0)
3395 		return retval;
3396 
3397 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3398 				ut_params->op);
3399 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3400 	ut_params->obuf = ut_params->op->sym->m_src;
3401 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3402 				+ plaintext_pad_len;
3403 
3404 	/* Validate obuf */
3405 	if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
3406 		return 0;
3407 	else
3408 		return -1;
3409 
3410 	return 0;
3411 }
3412 
3413 static int
3414 test_snow3g_hash_generate_test_case_1(void)
3415 {
3416 	return test_snow3g_authentication(&snow3g_hash_test_case_1);
3417 }
3418 
3419 static int
3420 test_snow3g_hash_generate_test_case_2(void)
3421 {
3422 	return test_snow3g_authentication(&snow3g_hash_test_case_2);
3423 }
3424 
3425 static int
3426 test_snow3g_hash_generate_test_case_3(void)
3427 {
3428 	return test_snow3g_authentication(&snow3g_hash_test_case_3);
3429 }
3430 
3431 static int
3432 test_snow3g_hash_generate_test_case_4(void)
3433 {
3434 	return test_snow3g_authentication(&snow3g_hash_test_case_4);
3435 }
3436 
3437 static int
3438 test_snow3g_hash_generate_test_case_5(void)
3439 {
3440 	return test_snow3g_authentication(&snow3g_hash_test_case_5);
3441 }
3442 
3443 static int
3444 test_snow3g_hash_generate_test_case_6(void)
3445 {
3446 	return test_snow3g_authentication(&snow3g_hash_test_case_6);
3447 }
3448 
3449 static int
3450 test_snow3g_hash_verify_test_case_1(void)
3451 {
3452 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
3453 
3454 }
3455 
3456 static int
3457 test_snow3g_hash_verify_test_case_2(void)
3458 {
3459 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
3460 }
3461 
3462 static int
3463 test_snow3g_hash_verify_test_case_3(void)
3464 {
3465 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
3466 }
3467 
3468 static int
3469 test_snow3g_hash_verify_test_case_4(void)
3470 {
3471 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
3472 }
3473 
3474 static int
3475 test_snow3g_hash_verify_test_case_5(void)
3476 {
3477 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
3478 }
3479 
3480 static int
3481 test_snow3g_hash_verify_test_case_6(void)
3482 {
3483 	return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
3484 }
3485 
3486 static int
3487 test_kasumi_hash_generate_test_case_1(void)
3488 {
3489 	return test_kasumi_authentication(&kasumi_hash_test_case_1);
3490 }
3491 
3492 static int
3493 test_kasumi_hash_generate_test_case_2(void)
3494 {
3495 	return test_kasumi_authentication(&kasumi_hash_test_case_2);
3496 }
3497 
3498 static int
3499 test_kasumi_hash_generate_test_case_3(void)
3500 {
3501 	return test_kasumi_authentication(&kasumi_hash_test_case_3);
3502 }
3503 
3504 static int
3505 test_kasumi_hash_generate_test_case_4(void)
3506 {
3507 	return test_kasumi_authentication(&kasumi_hash_test_case_4);
3508 }
3509 
3510 static int
3511 test_kasumi_hash_generate_test_case_5(void)
3512 {
3513 	return test_kasumi_authentication(&kasumi_hash_test_case_5);
3514 }
3515 
3516 static int
3517 test_kasumi_hash_generate_test_case_6(void)
3518 {
3519 	return test_kasumi_authentication(&kasumi_hash_test_case_6);
3520 }
3521 
3522 static int
3523 test_kasumi_hash_verify_test_case_1(void)
3524 {
3525 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
3526 }
3527 
3528 static int
3529 test_kasumi_hash_verify_test_case_2(void)
3530 {
3531 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
3532 }
3533 
3534 static int
3535 test_kasumi_hash_verify_test_case_3(void)
3536 {
3537 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
3538 }
3539 
3540 static int
3541 test_kasumi_hash_verify_test_case_4(void)
3542 {
3543 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
3544 }
3545 
3546 static int
3547 test_kasumi_hash_verify_test_case_5(void)
3548 {
3549 	return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
3550 }
3551 
3552 static int
3553 test_kasumi_encryption(const struct kasumi_test_data *tdata)
3554 {
3555 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3556 	struct crypto_unittest_params *ut_params = &unittest_params;
3557 
3558 	int retval;
3559 	uint8_t *plaintext, *ciphertext;
3560 	unsigned plaintext_pad_len;
3561 	unsigned plaintext_len;
3562 
3563 	/* Create KASUMI session */
3564 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3565 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3566 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3567 					tdata->key.data, tdata->key.len,
3568 					tdata->cipher_iv.len);
3569 	if (retval < 0)
3570 		return retval;
3571 
3572 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3573 
3574 	/* Clear mbuf payload */
3575 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3576 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3577 
3578 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3579 	/* Append data which is padded to a multiple */
3580 	/* of the algorithms block size */
3581 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3582 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3583 				plaintext_pad_len);
3584 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3585 
3586 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3587 
3588 	/* Create KASUMI operation */
3589 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3590 				tdata->cipher_iv.len,
3591 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3592 				tdata->validCipherOffsetInBits.len);
3593 	if (retval < 0)
3594 		return retval;
3595 
3596 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3597 						ut_params->op);
3598 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3599 
3600 	ut_params->obuf = ut_params->op->sym->m_dst;
3601 	if (ut_params->obuf)
3602 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3603 	else
3604 		ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3605 
3606 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3607 
3608 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3609 				(tdata->validCipherOffsetInBits.len >> 3);
3610 	/* Validate obuf */
3611 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3612 		ciphertext,
3613 		reference_ciphertext,
3614 		tdata->validCipherLenInBits.len,
3615 		"KASUMI Ciphertext data not as expected");
3616 	return 0;
3617 }
3618 
3619 static int
3620 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
3621 {
3622 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3623 	struct crypto_unittest_params *ut_params = &unittest_params;
3624 
3625 	int retval;
3626 
3627 	unsigned int plaintext_pad_len;
3628 	unsigned int plaintext_len;
3629 
3630 	uint8_t buffer[10000];
3631 	const uint8_t *ciphertext;
3632 
3633 	struct rte_cryptodev_info dev_info;
3634 
3635 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3636 
3637 	uint64_t feat_flags = dev_info.feature_flags;
3638 
3639 	if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
3640 		printf("Device doesn't support in-place scatter-gather. "
3641 				"Test Skipped.\n");
3642 		return -ENOTSUP;
3643 	}
3644 
3645 	/* Create KASUMI session */
3646 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3647 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3648 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3649 					tdata->key.data, tdata->key.len,
3650 					tdata->cipher_iv.len);
3651 	if (retval < 0)
3652 		return retval;
3653 
3654 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3655 
3656 
3657 	/* Append data which is padded to a multiple */
3658 	/* of the algorithms block size */
3659 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3660 
3661 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3662 			plaintext_pad_len, 10, 0);
3663 
3664 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3665 
3666 	/* Create KASUMI operation */
3667 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3668 				tdata->cipher_iv.len,
3669 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3670 				tdata->validCipherOffsetInBits.len);
3671 	if (retval < 0)
3672 		return retval;
3673 
3674 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3675 						ut_params->op);
3676 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3677 
3678 	ut_params->obuf = ut_params->op->sym->m_dst;
3679 
3680 	if (ut_params->obuf)
3681 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3682 				plaintext_len, buffer);
3683 	else
3684 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3685 				tdata->validCipherOffsetInBits.len >> 3,
3686 				plaintext_len, buffer);
3687 
3688 	/* Validate obuf */
3689 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3690 
3691 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3692 				(tdata->validCipherOffsetInBits.len >> 3);
3693 	/* Validate obuf */
3694 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3695 		ciphertext,
3696 		reference_ciphertext,
3697 		tdata->validCipherLenInBits.len,
3698 		"KASUMI Ciphertext data not as expected");
3699 	return 0;
3700 }
3701 
3702 static int
3703 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
3704 {
3705 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3706 	struct crypto_unittest_params *ut_params = &unittest_params;
3707 
3708 	int retval;
3709 	uint8_t *plaintext, *ciphertext;
3710 	unsigned plaintext_pad_len;
3711 	unsigned plaintext_len;
3712 
3713 	/* Create KASUMI session */
3714 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3715 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3716 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3717 					tdata->key.data, tdata->key.len,
3718 					tdata->cipher_iv.len);
3719 	if (retval < 0)
3720 		return retval;
3721 
3722 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3723 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3724 
3725 	/* Clear mbuf payload */
3726 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3727 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3728 
3729 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3730 	/* Append data which is padded to a multiple */
3731 	/* of the algorithms block size */
3732 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3733 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3734 				plaintext_pad_len);
3735 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3736 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3737 
3738 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
3739 
3740 	/* Create KASUMI operation */
3741 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3742 				tdata->cipher_iv.len,
3743 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3744 				tdata->validCipherOffsetInBits.len);
3745 	if (retval < 0)
3746 		return retval;
3747 
3748 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3749 						ut_params->op);
3750 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3751 
3752 	ut_params->obuf = ut_params->op->sym->m_dst;
3753 	if (ut_params->obuf)
3754 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3755 	else
3756 		ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3);
3757 
3758 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3759 
3760 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3761 				(tdata->validCipherOffsetInBits.len >> 3);
3762 	/* Validate obuf */
3763 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3764 		ciphertext,
3765 		reference_ciphertext,
3766 		tdata->validCipherLenInBits.len,
3767 		"KASUMI Ciphertext data not as expected");
3768 	return 0;
3769 }
3770 
3771 static int
3772 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
3773 {
3774 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3775 	struct crypto_unittest_params *ut_params = &unittest_params;
3776 
3777 	int retval;
3778 	unsigned int plaintext_pad_len;
3779 	unsigned int plaintext_len;
3780 
3781 	const uint8_t *ciphertext;
3782 	uint8_t buffer[2048];
3783 
3784 	struct rte_cryptodev_info dev_info;
3785 
3786 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3787 
3788 	uint64_t feat_flags = dev_info.feature_flags;
3789 	if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
3790 		printf("Device doesn't support out-of-place scatter-gather "
3791 				"in both input and output mbufs. "
3792 				"Test Skipped.\n");
3793 		return -ENOTSUP;
3794 	}
3795 
3796 	/* Create KASUMI session */
3797 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3798 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3799 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3800 					tdata->key.data, tdata->key.len,
3801 					tdata->cipher_iv.len);
3802 	if (retval < 0)
3803 		return retval;
3804 
3805 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
3806 	/* Append data which is padded to a multiple */
3807 	/* of the algorithms block size */
3808 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3809 
3810 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3811 			plaintext_pad_len, 10, 0);
3812 	ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3813 			plaintext_pad_len, 3, 0);
3814 
3815 	/* Append data which is padded to a multiple */
3816 	/* of the algorithms block size */
3817 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3818 
3819 	/* Create KASUMI operation */
3820 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3821 				tdata->cipher_iv.len,
3822 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3823 				tdata->validCipherOffsetInBits.len);
3824 	if (retval < 0)
3825 		return retval;
3826 
3827 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3828 						ut_params->op);
3829 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3830 
3831 	ut_params->obuf = ut_params->op->sym->m_dst;
3832 	if (ut_params->obuf)
3833 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3834 				plaintext_pad_len, buffer);
3835 	else
3836 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3837 				tdata->validCipherOffsetInBits.len >> 3,
3838 				plaintext_pad_len, buffer);
3839 
3840 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
3841 				(tdata->validCipherOffsetInBits.len >> 3);
3842 	/* Validate obuf */
3843 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3844 		ciphertext,
3845 		reference_ciphertext,
3846 		tdata->validCipherLenInBits.len,
3847 		"KASUMI Ciphertext data not as expected");
3848 	return 0;
3849 }
3850 
3851 
3852 static int
3853 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
3854 {
3855 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3856 	struct crypto_unittest_params *ut_params = &unittest_params;
3857 
3858 	int retval;
3859 	uint8_t *ciphertext, *plaintext;
3860 	unsigned ciphertext_pad_len;
3861 	unsigned ciphertext_len;
3862 
3863 	/* Create KASUMI session */
3864 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3865 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
3866 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3867 					tdata->key.data, tdata->key.len,
3868 					tdata->cipher_iv.len);
3869 	if (retval < 0)
3870 		return retval;
3871 
3872 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3873 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3874 
3875 	/* Clear mbuf payload */
3876 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3877 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3878 
3879 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3880 	/* Append data which is padded to a multiple */
3881 	/* of the algorithms block size */
3882 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3883 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3884 				ciphertext_pad_len);
3885 	rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3886 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3887 
3888 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3889 
3890 	/* Create KASUMI operation */
3891 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3892 				tdata->cipher_iv.len,
3893 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
3894 				tdata->validCipherOffsetInBits.len);
3895 	if (retval < 0)
3896 		return retval;
3897 
3898 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3899 						ut_params->op);
3900 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3901 
3902 	ut_params->obuf = ut_params->op->sym->m_dst;
3903 	if (ut_params->obuf)
3904 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3905 	else
3906 		plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3907 
3908 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3909 
3910 	const uint8_t *reference_plaintext = tdata->plaintext.data +
3911 				(tdata->validCipherOffsetInBits.len >> 3);
3912 	/* Validate obuf */
3913 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3914 		plaintext,
3915 		reference_plaintext,
3916 		tdata->validCipherLenInBits.len,
3917 		"KASUMI Plaintext data not as expected");
3918 	return 0;
3919 }
3920 
3921 static int
3922 test_kasumi_decryption(const struct kasumi_test_data *tdata)
3923 {
3924 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3925 	struct crypto_unittest_params *ut_params = &unittest_params;
3926 
3927 	int retval;
3928 	uint8_t *ciphertext, *plaintext;
3929 	unsigned ciphertext_pad_len;
3930 	unsigned ciphertext_len;
3931 
3932 	/* Create KASUMI session */
3933 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3934 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
3935 					RTE_CRYPTO_CIPHER_KASUMI_F8,
3936 					tdata->key.data, tdata->key.len,
3937 					tdata->cipher_iv.len);
3938 	if (retval < 0)
3939 		return retval;
3940 
3941 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3942 
3943 	/* Clear mbuf payload */
3944 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3945 	       rte_pktmbuf_tailroom(ut_params->ibuf));
3946 
3947 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3948 	/* Append data which is padded to a multiple */
3949 	/* of the algorithms block size */
3950 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3951 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3952 				ciphertext_pad_len);
3953 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3954 
3955 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
3956 
3957 	/* Create KASUMI operation */
3958 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3959 					tdata->cipher_iv.len,
3960 					tdata->ciphertext.len,
3961 					tdata->validCipherOffsetInBits.len);
3962 	if (retval < 0)
3963 		return retval;
3964 
3965 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3966 						ut_params->op);
3967 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3968 
3969 	ut_params->obuf = ut_params->op->sym->m_dst;
3970 	if (ut_params->obuf)
3971 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3972 	else
3973 		plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3);
3974 
3975 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
3976 
3977 	const uint8_t *reference_plaintext = tdata->plaintext.data +
3978 				(tdata->validCipherOffsetInBits.len >> 3);
3979 	/* Validate obuf */
3980 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3981 		plaintext,
3982 		reference_plaintext,
3983 		tdata->validCipherLenInBits.len,
3984 		"KASUMI Plaintext data not as expected");
3985 	return 0;
3986 }
3987 
3988 static int
3989 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3990 {
3991 	struct crypto_testsuite_params *ts_params = &testsuite_params;
3992 	struct crypto_unittest_params *ut_params = &unittest_params;
3993 
3994 	int retval;
3995 	uint8_t *plaintext, *ciphertext;
3996 	unsigned plaintext_pad_len;
3997 	unsigned plaintext_len;
3998 
3999 	/* Create SNOW 3G session */
4000 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4001 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4002 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4003 					tdata->key.data, tdata->key.len,
4004 					tdata->cipher_iv.len);
4005 	if (retval < 0)
4006 		return retval;
4007 
4008 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4009 
4010 	/* Clear mbuf payload */
4011 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4012 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4013 
4014 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4015 	/* Append data which is padded to a multiple of */
4016 	/* the algorithms block size */
4017 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4018 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4019 				plaintext_pad_len);
4020 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4021 
4022 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4023 
4024 	/* Create SNOW 3G operation */
4025 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4026 					tdata->cipher_iv.len,
4027 					tdata->validCipherLenInBits.len,
4028 					0);
4029 	if (retval < 0)
4030 		return retval;
4031 
4032 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4033 						ut_params->op);
4034 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4035 
4036 	ut_params->obuf = ut_params->op->sym->m_dst;
4037 	if (ut_params->obuf)
4038 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4039 	else
4040 		ciphertext = plaintext;
4041 
4042 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4043 
4044 	/* Validate obuf */
4045 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4046 		ciphertext,
4047 		tdata->ciphertext.data,
4048 		tdata->validDataLenInBits.len,
4049 		"SNOW 3G Ciphertext data not as expected");
4050 	return 0;
4051 }
4052 
4053 
4054 static int
4055 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
4056 {
4057 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4058 	struct crypto_unittest_params *ut_params = &unittest_params;
4059 	uint8_t *plaintext, *ciphertext;
4060 
4061 	int retval;
4062 	unsigned plaintext_pad_len;
4063 	unsigned plaintext_len;
4064 
4065 	/* Create SNOW 3G session */
4066 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4067 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4068 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4069 					tdata->key.data, tdata->key.len,
4070 					tdata->cipher_iv.len);
4071 	if (retval < 0)
4072 		return retval;
4073 
4074 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4075 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4076 
4077 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4078 			"Failed to allocate input buffer in mempool");
4079 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4080 			"Failed to allocate output buffer in mempool");
4081 
4082 	/* Clear mbuf payload */
4083 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4084 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4085 
4086 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4087 	/* Append data which is padded to a multiple of */
4088 	/* the algorithms block size */
4089 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4090 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4091 				plaintext_pad_len);
4092 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4093 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4094 
4095 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4096 
4097 	/* Create SNOW 3G operation */
4098 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4099 					tdata->cipher_iv.len,
4100 					tdata->validCipherLenInBits.len,
4101 					0);
4102 	if (retval < 0)
4103 		return retval;
4104 
4105 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4106 						ut_params->op);
4107 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4108 
4109 	ut_params->obuf = ut_params->op->sym->m_dst;
4110 	if (ut_params->obuf)
4111 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4112 	else
4113 		ciphertext = plaintext;
4114 
4115 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4116 
4117 	/* Validate obuf */
4118 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4119 		ciphertext,
4120 		tdata->ciphertext.data,
4121 		tdata->validDataLenInBits.len,
4122 		"SNOW 3G Ciphertext data not as expected");
4123 	return 0;
4124 }
4125 
4126 static int
4127 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
4128 {
4129 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4130 	struct crypto_unittest_params *ut_params = &unittest_params;
4131 
4132 	int retval;
4133 	unsigned int plaintext_pad_len;
4134 	unsigned int plaintext_len;
4135 	uint8_t buffer[10000];
4136 	const uint8_t *ciphertext;
4137 
4138 	struct rte_cryptodev_info dev_info;
4139 
4140 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4141 
4142 	uint64_t feat_flags = dev_info.feature_flags;
4143 
4144 	if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
4145 		printf("Device doesn't support out-of-place scatter-gather "
4146 				"in both input and output mbufs. "
4147 				"Test Skipped.\n");
4148 		return -ENOTSUP;
4149 	}
4150 
4151 	/* Create SNOW 3G session */
4152 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4153 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4154 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4155 					tdata->key.data, tdata->key.len,
4156 					tdata->cipher_iv.len);
4157 	if (retval < 0)
4158 		return retval;
4159 
4160 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4161 	/* Append data which is padded to a multiple of */
4162 	/* the algorithms block size */
4163 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4164 
4165 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4166 			plaintext_pad_len, 10, 0);
4167 	ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
4168 			plaintext_pad_len, 3, 0);
4169 
4170 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4171 			"Failed to allocate input buffer in mempool");
4172 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4173 			"Failed to allocate output buffer in mempool");
4174 
4175 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
4176 
4177 	/* Create SNOW 3G operation */
4178 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4179 					tdata->cipher_iv.len,
4180 					tdata->validCipherLenInBits.len,
4181 					0);
4182 	if (retval < 0)
4183 		return retval;
4184 
4185 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4186 						ut_params->op);
4187 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4188 
4189 	ut_params->obuf = ut_params->op->sym->m_dst;
4190 	if (ut_params->obuf)
4191 		ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
4192 				plaintext_len, buffer);
4193 	else
4194 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4195 				plaintext_len, buffer);
4196 
4197 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4198 
4199 	/* Validate obuf */
4200 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4201 		ciphertext,
4202 		tdata->ciphertext.data,
4203 		tdata->validDataLenInBits.len,
4204 		"SNOW 3G Ciphertext data not as expected");
4205 
4206 	return 0;
4207 }
4208 
4209 /* Shift right a buffer by "offset" bits, "offset" < 8 */
4210 static void
4211 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
4212 {
4213 	uint8_t curr_byte, prev_byte;
4214 	uint32_t length_in_bytes = ceil_byte_length(length + offset);
4215 	uint8_t lower_byte_mask = (1 << offset) - 1;
4216 	unsigned i;
4217 
4218 	prev_byte = buffer[0];
4219 	buffer[0] >>= offset;
4220 
4221 	for (i = 1; i < length_in_bytes; i++) {
4222 		curr_byte = buffer[i];
4223 		buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
4224 				(curr_byte >> offset);
4225 		prev_byte = curr_byte;
4226 	}
4227 }
4228 
4229 static int
4230 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
4231 {
4232 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4233 	struct crypto_unittest_params *ut_params = &unittest_params;
4234 	uint8_t *plaintext, *ciphertext;
4235 	int retval;
4236 	uint32_t plaintext_len;
4237 	uint32_t plaintext_pad_len;
4238 	uint8_t extra_offset = 4;
4239 	uint8_t *expected_ciphertext_shifted;
4240 
4241 	/* Create SNOW 3G session */
4242 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4243 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4244 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4245 					tdata->key.data, tdata->key.len,
4246 					tdata->cipher_iv.len);
4247 	if (retval < 0)
4248 		return retval;
4249 
4250 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4251 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4252 
4253 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4254 			"Failed to allocate input buffer in mempool");
4255 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4256 			"Failed to allocate output buffer in mempool");
4257 
4258 	/* Clear mbuf payload */
4259 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4260 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4261 
4262 	plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
4263 	/*
4264 	 * Append data which is padded to a
4265 	 * multiple of the algorithms block size
4266 	 */
4267 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4268 
4269 	plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
4270 						plaintext_pad_len);
4271 
4272 	rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4273 
4274 	memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
4275 	buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
4276 
4277 #ifdef RTE_APP_TEST_DEBUG
4278 	rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
4279 #endif
4280 	/* Create SNOW 3G operation */
4281 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4282 					tdata->cipher_iv.len,
4283 					tdata->validCipherLenInBits.len,
4284 					extra_offset);
4285 	if (retval < 0)
4286 		return retval;
4287 
4288 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4289 						ut_params->op);
4290 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4291 
4292 	ut_params->obuf = ut_params->op->sym->m_dst;
4293 	if (ut_params->obuf)
4294 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4295 	else
4296 		ciphertext = plaintext;
4297 
4298 #ifdef RTE_APP_TEST_DEBUG
4299 	rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4300 #endif
4301 
4302 	expected_ciphertext_shifted = rte_malloc(NULL, plaintext_len, 8);
4303 
4304 	TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
4305 			"failed to reserve memory for ciphertext shifted\n");
4306 
4307 	memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
4308 			ceil_byte_length(tdata->ciphertext.len));
4309 	buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
4310 			extra_offset);
4311 	/* Validate obuf */
4312 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
4313 		ciphertext,
4314 		expected_ciphertext_shifted,
4315 		tdata->validDataLenInBits.len,
4316 		extra_offset,
4317 		"SNOW 3G Ciphertext data not as expected");
4318 	return 0;
4319 }
4320 
4321 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
4322 {
4323 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4324 	struct crypto_unittest_params *ut_params = &unittest_params;
4325 
4326 	int retval;
4327 
4328 	uint8_t *plaintext, *ciphertext;
4329 	unsigned ciphertext_pad_len;
4330 	unsigned ciphertext_len;
4331 
4332 	/* Create SNOW 3G session */
4333 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4334 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
4335 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4336 					tdata->key.data, tdata->key.len,
4337 					tdata->cipher_iv.len);
4338 	if (retval < 0)
4339 		return retval;
4340 
4341 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4342 
4343 	/* Clear mbuf payload */
4344 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4345 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4346 
4347 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4348 	/* Append data which is padded to a multiple of */
4349 	/* the algorithms block size */
4350 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4351 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4352 				ciphertext_pad_len);
4353 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4354 
4355 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4356 
4357 	/* Create SNOW 3G operation */
4358 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4359 					tdata->cipher_iv.len,
4360 					tdata->validCipherLenInBits.len,
4361 					tdata->cipher.offset_bits);
4362 	if (retval < 0)
4363 		return retval;
4364 
4365 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4366 						ut_params->op);
4367 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4368 	ut_params->obuf = ut_params->op->sym->m_dst;
4369 	if (ut_params->obuf)
4370 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4371 	else
4372 		plaintext = ciphertext;
4373 
4374 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4375 
4376 	/* Validate obuf */
4377 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4378 				tdata->plaintext.data,
4379 				tdata->validDataLenInBits.len,
4380 				"SNOW 3G Plaintext data not as expected");
4381 	return 0;
4382 }
4383 
4384 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
4385 {
4386 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4387 	struct crypto_unittest_params *ut_params = &unittest_params;
4388 
4389 	int retval;
4390 
4391 	uint8_t *plaintext, *ciphertext;
4392 	unsigned ciphertext_pad_len;
4393 	unsigned ciphertext_len;
4394 
4395 	/* Create SNOW 3G session */
4396 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4397 					RTE_CRYPTO_CIPHER_OP_DECRYPT,
4398 					RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4399 					tdata->key.data, tdata->key.len,
4400 					tdata->cipher_iv.len);
4401 	if (retval < 0)
4402 		return retval;
4403 
4404 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4405 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4406 
4407 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4408 			"Failed to allocate input buffer");
4409 	TEST_ASSERT_NOT_NULL(ut_params->obuf,
4410 			"Failed to allocate output buffer");
4411 
4412 	/* Clear mbuf payload */
4413 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4414 	       rte_pktmbuf_tailroom(ut_params->ibuf));
4415 
4416 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4417 		       rte_pktmbuf_tailroom(ut_params->obuf));
4418 
4419 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4420 	/* Append data which is padded to a multiple of */
4421 	/* the algorithms block size */
4422 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4423 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4424 				ciphertext_pad_len);
4425 	rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4426 	memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4427 
4428 	debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len);
4429 
4430 	/* Create SNOW 3G operation */
4431 	retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
4432 					tdata->cipher_iv.len,
4433 					tdata->validCipherLenInBits.len,
4434 					0);
4435 	if (retval < 0)
4436 		return retval;
4437 
4438 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4439 						ut_params->op);
4440 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4441 	ut_params->obuf = ut_params->op->sym->m_dst;
4442 	if (ut_params->obuf)
4443 		plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4444 	else
4445 		plaintext = ciphertext;
4446 
4447 	debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len);
4448 
4449 	/* Validate obuf */
4450 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
4451 				tdata->plaintext.data,
4452 				tdata->validDataLenInBits.len,
4453 				"SNOW 3G Plaintext data not as expected");
4454 	return 0;
4455 }
4456 
4457 static int
4458 test_zuc_cipher_auth(const struct wireless_test_data *tdata)
4459 {
4460 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4461 	struct crypto_unittest_params *ut_params = &unittest_params;
4462 
4463 	int retval;
4464 
4465 	uint8_t *plaintext, *ciphertext;
4466 	unsigned int plaintext_pad_len;
4467 	unsigned int plaintext_len;
4468 
4469 	struct rte_cryptodev_sym_capability_idx cap_idx;
4470 
4471 	/* Check if device supports ZUC EEA3 */
4472 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4473 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
4474 
4475 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4476 			&cap_idx) == NULL)
4477 		return -ENOTSUP;
4478 
4479 	/* Check if device supports ZUC EIA3 */
4480 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4481 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
4482 
4483 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4484 			&cap_idx) == NULL)
4485 		return -ENOTSUP;
4486 
4487 	/* Create ZUC session */
4488 	retval = create_zuc_cipher_auth_encrypt_generate_session(
4489 			ts_params->valid_devs[0],
4490 			tdata);
4491 	if (retval < 0)
4492 		return retval;
4493 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4494 
4495 	/* clear mbuf payload */
4496 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4497 			rte_pktmbuf_tailroom(ut_params->ibuf));
4498 
4499 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4500 	/* Append data which is padded to a multiple of */
4501 	/* the algorithms block size */
4502 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4503 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4504 				plaintext_pad_len);
4505 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4506 
4507 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4508 
4509 	/* Create ZUC operation */
4510 	retval = create_zuc_cipher_hash_generate_operation(tdata);
4511 	if (retval < 0)
4512 		return retval;
4513 
4514 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4515 			ut_params->op);
4516 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4517 	ut_params->obuf = ut_params->op->sym->m_src;
4518 	if (ut_params->obuf)
4519 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4520 	else
4521 		ciphertext = plaintext;
4522 
4523 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4524 	/* Validate obuf */
4525 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4526 			ciphertext,
4527 			tdata->ciphertext.data,
4528 			tdata->validDataLenInBits.len,
4529 			"ZUC Ciphertext data not as expected");
4530 
4531 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4532 	    + plaintext_pad_len;
4533 
4534 	/* Validate obuf */
4535 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
4536 			ut_params->digest,
4537 			tdata->digest.data,
4538 			4,
4539 			"ZUC Generated auth tag not as expected");
4540 	return 0;
4541 }
4542 
4543 static int
4544 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
4545 {
4546 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4547 	struct crypto_unittest_params *ut_params = &unittest_params;
4548 
4549 	int retval;
4550 
4551 	uint8_t *plaintext, *ciphertext;
4552 	unsigned plaintext_pad_len;
4553 	unsigned plaintext_len;
4554 
4555 	/* Create SNOW 3G session */
4556 	retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
4557 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4558 			RTE_CRYPTO_AUTH_OP_GENERATE,
4559 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4560 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4561 			tdata->key.data, tdata->key.len,
4562 			tdata->auth_iv.len, tdata->digest.len,
4563 			tdata->cipher_iv.len);
4564 	if (retval < 0)
4565 		return retval;
4566 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4567 
4568 	/* clear mbuf payload */
4569 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4570 			rte_pktmbuf_tailroom(ut_params->ibuf));
4571 
4572 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4573 	/* Append data which is padded to a multiple of */
4574 	/* the algorithms block size */
4575 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4576 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4577 				plaintext_pad_len);
4578 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4579 
4580 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4581 
4582 	/* Create SNOW 3G operation */
4583 	retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
4584 			tdata->digest.len, tdata->auth_iv.data,
4585 			tdata->auth_iv.len,
4586 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4587 			tdata->cipher_iv.data, tdata->cipher_iv.len,
4588 			tdata->validCipherLenInBits.len,
4589 			0,
4590 			tdata->validAuthLenInBits.len,
4591 			0
4592 			);
4593 	if (retval < 0)
4594 		return retval;
4595 
4596 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4597 			ut_params->op);
4598 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4599 	ut_params->obuf = ut_params->op->sym->m_src;
4600 	if (ut_params->obuf)
4601 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4602 	else
4603 		ciphertext = plaintext;
4604 
4605 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
4606 	/* Validate obuf */
4607 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4608 			ciphertext,
4609 			tdata->ciphertext.data,
4610 			tdata->validDataLenInBits.len,
4611 			"SNOW 3G Ciphertext data not as expected");
4612 
4613 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4614 	    + plaintext_pad_len;
4615 
4616 	/* Validate obuf */
4617 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
4618 			ut_params->digest,
4619 			tdata->digest.data,
4620 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4621 			"SNOW 3G Generated auth tag not as expected");
4622 	return 0;
4623 }
4624 
4625 static int
4626 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,
4627 	uint8_t op_mode, uint8_t verify)
4628 {
4629 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4630 	struct crypto_unittest_params *ut_params = &unittest_params;
4631 
4632 	int retval;
4633 
4634 	uint8_t *plaintext = NULL, *ciphertext = NULL;
4635 	unsigned int plaintext_pad_len;
4636 	unsigned int plaintext_len;
4637 	unsigned int ciphertext_pad_len;
4638 	unsigned int ciphertext_len;
4639 
4640 	struct rte_cryptodev_info dev_info;
4641 
4642 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4643 
4644 	uint64_t feat_flags = dev_info.feature_flags;
4645 
4646 	if (op_mode == OUT_OF_PLACE) {
4647 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4648 			printf("Device doesn't support digest encrypted.\n");
4649 			return -ENOTSUP;
4650 		}
4651 	}
4652 
4653 	/* Create SNOW 3G session */
4654 	retval = create_wireless_algo_auth_cipher_session(
4655 			ts_params->valid_devs[0],
4656 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4657 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4658 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4659 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4660 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4661 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4662 			tdata->key.data, tdata->key.len,
4663 			tdata->auth_iv.len, tdata->digest.len,
4664 			tdata->cipher_iv.len);
4665 
4666 	if (retval < 0)
4667 		return retval;
4668 
4669 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4670 	if (op_mode == OUT_OF_PLACE)
4671 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4672 
4673 	/* clear mbuf payload */
4674 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4675 		rte_pktmbuf_tailroom(ut_params->ibuf));
4676 	if (op_mode == OUT_OF_PLACE)
4677 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4678 			rte_pktmbuf_tailroom(ut_params->obuf));
4679 
4680 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4681 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4682 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4683 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4684 
4685 	if (verify) {
4686 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4687 					ciphertext_pad_len);
4688 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
4689 		if (op_mode == OUT_OF_PLACE)
4690 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
4691 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4692 			ciphertext_len);
4693 	} else {
4694 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4695 					plaintext_pad_len);
4696 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4697 		if (op_mode == OUT_OF_PLACE)
4698 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
4699 		debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
4700 	}
4701 
4702 	/* Create SNOW 3G operation */
4703 	retval = create_wireless_algo_auth_cipher_operation(
4704 		tdata->digest.data, tdata->digest.len,
4705 		tdata->cipher_iv.data, tdata->cipher_iv.len,
4706 		tdata->auth_iv.data, tdata->auth_iv.len,
4707 		(tdata->digest.offset_bytes == 0 ?
4708 		(verify ? ciphertext_pad_len : plaintext_pad_len)
4709 			: tdata->digest.offset_bytes),
4710 		tdata->validCipherLenInBits.len,
4711 		tdata->cipher.offset_bits,
4712 		tdata->validAuthLenInBits.len,
4713 		tdata->auth.offset_bits,
4714 		op_mode, 0, verify);
4715 
4716 	if (retval < 0)
4717 		return retval;
4718 
4719 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4720 			ut_params->op);
4721 
4722 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4723 
4724 	ut_params->obuf = (op_mode == IN_PLACE ?
4725 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4726 
4727 	if (verify) {
4728 		if (ut_params->obuf)
4729 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
4730 							uint8_t *);
4731 		else
4732 			plaintext = ciphertext +
4733 				(tdata->cipher.offset_bits >> 3);
4734 
4735 		debug_hexdump(stdout, "plaintext:", plaintext,
4736 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4737 		debug_hexdump(stdout, "plaintext expected:",
4738 			tdata->plaintext.data,
4739 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4740 	} else {
4741 		if (ut_params->obuf)
4742 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
4743 							uint8_t *);
4744 		else
4745 			ciphertext = plaintext;
4746 
4747 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4748 			ciphertext_len);
4749 		debug_hexdump(stdout, "ciphertext expected:",
4750 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4751 
4752 		ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4753 			+ (tdata->digest.offset_bytes == 0 ?
4754 		plaintext_pad_len : tdata->digest.offset_bytes);
4755 
4756 		debug_hexdump(stdout, "digest:", ut_params->digest,
4757 			tdata->digest.len);
4758 		debug_hexdump(stdout, "digest expected:", tdata->digest.data,
4759 				tdata->digest.len);
4760 	}
4761 
4762 	/* Validate obuf */
4763 	if (verify) {
4764 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4765 			plaintext,
4766 			tdata->plaintext.data,
4767 			tdata->plaintext.len >> 3,
4768 			"SNOW 3G Plaintext data not as expected");
4769 	} else {
4770 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4771 			ciphertext,
4772 			tdata->ciphertext.data,
4773 			tdata->validDataLenInBits.len,
4774 			"SNOW 3G Ciphertext data not as expected");
4775 
4776 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
4777 			ut_params->digest,
4778 			tdata->digest.data,
4779 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4780 			"SNOW 3G Generated auth tag not as expected");
4781 	}
4782 	return 0;
4783 }
4784 
4785 static int
4786 test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,
4787 	uint8_t op_mode, uint8_t verify)
4788 {
4789 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4790 	struct crypto_unittest_params *ut_params = &unittest_params;
4791 
4792 	int retval;
4793 
4794 	const uint8_t *plaintext = NULL;
4795 	const uint8_t *ciphertext = NULL;
4796 	const uint8_t *digest = NULL;
4797 	unsigned int plaintext_pad_len;
4798 	unsigned int plaintext_len;
4799 	unsigned int ciphertext_pad_len;
4800 	unsigned int ciphertext_len;
4801 	uint8_t buffer[10000];
4802 	uint8_t digest_buffer[10000];
4803 
4804 	struct rte_cryptodev_info dev_info;
4805 
4806 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4807 
4808 	uint64_t feat_flags = dev_info.feature_flags;
4809 
4810 	if (op_mode == IN_PLACE) {
4811 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
4812 			printf("Device doesn't support in-place scatter-gather "
4813 					"in both input and output mbufs.\n");
4814 			return -ENOTSUP;
4815 		}
4816 	} else {
4817 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
4818 			printf("Device doesn't support out-of-place scatter-gather "
4819 					"in both input and output mbufs.\n");
4820 			return -ENOTSUP;
4821 		}
4822 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4823 			printf("Device doesn't support digest encrypted.\n");
4824 			return -ENOTSUP;
4825 		}
4826 	}
4827 
4828 	/* Create SNOW 3G session */
4829 	retval = create_wireless_algo_auth_cipher_session(
4830 			ts_params->valid_devs[0],
4831 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
4832 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
4833 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
4834 					: RTE_CRYPTO_AUTH_OP_GENERATE),
4835 			RTE_CRYPTO_AUTH_SNOW3G_UIA2,
4836 			RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
4837 			tdata->key.data, tdata->key.len,
4838 			tdata->auth_iv.len, tdata->digest.len,
4839 			tdata->cipher_iv.len);
4840 
4841 	if (retval < 0)
4842 		return retval;
4843 
4844 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
4845 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
4846 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
4847 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4848 
4849 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4850 			plaintext_pad_len, 15, 0);
4851 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
4852 			"Failed to allocate input buffer in mempool");
4853 
4854 	if (op_mode == OUT_OF_PLACE) {
4855 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
4856 				plaintext_pad_len, 15, 0);
4857 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
4858 				"Failed to allocate output buffer in mempool");
4859 	}
4860 
4861 	if (verify) {
4862 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
4863 			tdata->ciphertext.data);
4864 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4865 					ciphertext_len, buffer);
4866 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4867 			ciphertext_len);
4868 	} else {
4869 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
4870 			tdata->plaintext.data);
4871 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4872 					plaintext_len, buffer);
4873 		debug_hexdump(stdout, "plaintext:", plaintext,
4874 			plaintext_len);
4875 	}
4876 	memset(buffer, 0, sizeof(buffer));
4877 
4878 	/* Create SNOW 3G operation */
4879 	retval = create_wireless_algo_auth_cipher_operation(
4880 		tdata->digest.data, tdata->digest.len,
4881 		tdata->cipher_iv.data, tdata->cipher_iv.len,
4882 		tdata->auth_iv.data, tdata->auth_iv.len,
4883 		(tdata->digest.offset_bytes == 0 ?
4884 		(verify ? ciphertext_pad_len : plaintext_pad_len)
4885 			: tdata->digest.offset_bytes),
4886 		tdata->validCipherLenInBits.len,
4887 		tdata->cipher.offset_bits,
4888 		tdata->validAuthLenInBits.len,
4889 		tdata->auth.offset_bits,
4890 		op_mode, 1, verify);
4891 
4892 	if (retval < 0)
4893 		return retval;
4894 
4895 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4896 			ut_params->op);
4897 
4898 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4899 
4900 	ut_params->obuf = (op_mode == IN_PLACE ?
4901 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
4902 
4903 	if (verify) {
4904 		if (ut_params->obuf)
4905 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
4906 					plaintext_len, buffer);
4907 		else
4908 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
4909 					plaintext_len, buffer);
4910 
4911 		debug_hexdump(stdout, "plaintext:", plaintext,
4912 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4913 		debug_hexdump(stdout, "plaintext expected:",
4914 			tdata->plaintext.data,
4915 			(tdata->plaintext.len >> 3) - tdata->digest.len);
4916 	} else {
4917 		if (ut_params->obuf)
4918 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
4919 					ciphertext_len, buffer);
4920 		else
4921 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
4922 					ciphertext_len, buffer);
4923 
4924 		debug_hexdump(stdout, "ciphertext:", ciphertext,
4925 			ciphertext_len);
4926 		debug_hexdump(stdout, "ciphertext expected:",
4927 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
4928 
4929 		if (ut_params->obuf)
4930 			digest = rte_pktmbuf_read(ut_params->obuf,
4931 				(tdata->digest.offset_bytes == 0 ?
4932 				plaintext_pad_len : tdata->digest.offset_bytes),
4933 				tdata->digest.len, digest_buffer);
4934 		else
4935 			digest = rte_pktmbuf_read(ut_params->ibuf,
4936 				(tdata->digest.offset_bytes == 0 ?
4937 				plaintext_pad_len : tdata->digest.offset_bytes),
4938 				tdata->digest.len, digest_buffer);
4939 
4940 		debug_hexdump(stdout, "digest:", digest,
4941 			tdata->digest.len);
4942 		debug_hexdump(stdout, "digest expected:",
4943 			tdata->digest.data, tdata->digest.len);
4944 	}
4945 
4946 	/* Validate obuf */
4947 	if (verify) {
4948 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4949 			plaintext,
4950 			tdata->plaintext.data,
4951 			tdata->plaintext.len >> 3,
4952 			"SNOW 3G Plaintext data not as expected");
4953 	} else {
4954 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4955 			ciphertext,
4956 			tdata->ciphertext.data,
4957 			tdata->validDataLenInBits.len,
4958 			"SNOW 3G Ciphertext data not as expected");
4959 
4960 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
4961 			digest,
4962 			tdata->digest.data,
4963 			DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4964 			"SNOW 3G Generated auth tag not as expected");
4965 	}
4966 	return 0;
4967 }
4968 
4969 static int
4970 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata,
4971 	uint8_t op_mode, uint8_t verify)
4972 {
4973 	struct crypto_testsuite_params *ts_params = &testsuite_params;
4974 	struct crypto_unittest_params *ut_params = &unittest_params;
4975 
4976 	int retval;
4977 
4978 	uint8_t *plaintext = NULL, *ciphertext = NULL;
4979 	unsigned int plaintext_pad_len;
4980 	unsigned int plaintext_len;
4981 	unsigned int ciphertext_pad_len;
4982 	unsigned int ciphertext_len;
4983 
4984 	struct rte_cryptodev_info dev_info;
4985 
4986 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4987 
4988 	uint64_t feat_flags = dev_info.feature_flags;
4989 
4990 	if (op_mode == OUT_OF_PLACE) {
4991 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
4992 			printf("Device doesn't support digest encrypted.\n");
4993 			return -ENOTSUP;
4994 		}
4995 	}
4996 
4997 	/* Create KASUMI session */
4998 	retval = create_wireless_algo_auth_cipher_session(
4999 			ts_params->valid_devs[0],
5000 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5001 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5002 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5003 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5004 			RTE_CRYPTO_AUTH_KASUMI_F9,
5005 			RTE_CRYPTO_CIPHER_KASUMI_F8,
5006 			tdata->key.data, tdata->key.len,
5007 			0, tdata->digest.len,
5008 			tdata->cipher_iv.len);
5009 
5010 	if (retval < 0)
5011 		return retval;
5012 
5013 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5014 	if (op_mode == OUT_OF_PLACE)
5015 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5016 
5017 	/* clear mbuf payload */
5018 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5019 		rte_pktmbuf_tailroom(ut_params->ibuf));
5020 	if (op_mode == OUT_OF_PLACE)
5021 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5022 			rte_pktmbuf_tailroom(ut_params->obuf));
5023 
5024 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5025 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5026 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5027 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5028 
5029 	if (verify) {
5030 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5031 					ciphertext_pad_len);
5032 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
5033 		if (op_mode == OUT_OF_PLACE)
5034 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
5035 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5036 			ciphertext_len);
5037 	} else {
5038 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5039 					plaintext_pad_len);
5040 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5041 		if (op_mode == OUT_OF_PLACE)
5042 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
5043 		debug_hexdump(stdout, "plaintext:", plaintext,
5044 			plaintext_len);
5045 	}
5046 
5047 	/* Create KASUMI operation */
5048 	retval = create_wireless_algo_auth_cipher_operation(
5049 		tdata->digest.data, tdata->digest.len,
5050 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5051 		NULL, 0,
5052 		(tdata->digest.offset_bytes == 0 ?
5053 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5054 			: tdata->digest.offset_bytes),
5055 		tdata->validCipherLenInBits.len,
5056 		tdata->validCipherOffsetInBits.len,
5057 		tdata->validAuthLenInBits.len,
5058 		0,
5059 		op_mode, 0, verify);
5060 
5061 	if (retval < 0)
5062 		return retval;
5063 
5064 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5065 			ut_params->op);
5066 
5067 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5068 
5069 	ut_params->obuf = (op_mode == IN_PLACE ?
5070 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5071 
5072 
5073 	if (verify) {
5074 		if (ut_params->obuf)
5075 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
5076 							uint8_t *);
5077 		else
5078 			plaintext = ciphertext;
5079 
5080 		debug_hexdump(stdout, "plaintext:", plaintext,
5081 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5082 		debug_hexdump(stdout, "plaintext expected:",
5083 			tdata->plaintext.data,
5084 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5085 	} else {
5086 		if (ut_params->obuf)
5087 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
5088 							uint8_t *);
5089 		else
5090 			ciphertext = plaintext;
5091 
5092 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5093 			ciphertext_len);
5094 		debug_hexdump(stdout, "ciphertext expected:",
5095 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5096 
5097 		ut_params->digest = rte_pktmbuf_mtod(
5098 			ut_params->obuf, uint8_t *) +
5099 			(tdata->digest.offset_bytes == 0 ?
5100 			plaintext_pad_len : tdata->digest.offset_bytes);
5101 
5102 		debug_hexdump(stdout, "digest:", ut_params->digest,
5103 			tdata->digest.len);
5104 		debug_hexdump(stdout, "digest expected:",
5105 			tdata->digest.data, tdata->digest.len);
5106 	}
5107 
5108 	/* Validate obuf */
5109 	if (verify) {
5110 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5111 			plaintext,
5112 			tdata->plaintext.data,
5113 			tdata->plaintext.len >> 3,
5114 			"KASUMI Plaintext data not as expected");
5115 	} else {
5116 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5117 			ciphertext,
5118 			tdata->ciphertext.data,
5119 			tdata->ciphertext.len >> 3,
5120 			"KASUMI Ciphertext data not as expected");
5121 
5122 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5123 			ut_params->digest,
5124 			tdata->digest.data,
5125 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5126 			"KASUMI Generated auth tag not as expected");
5127 	}
5128 	return 0;
5129 }
5130 
5131 static int
5132 test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata,
5133 	uint8_t op_mode, uint8_t verify)
5134 {
5135 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5136 	struct crypto_unittest_params *ut_params = &unittest_params;
5137 
5138 	int retval;
5139 
5140 	const uint8_t *plaintext = NULL;
5141 	const uint8_t *ciphertext = NULL;
5142 	const uint8_t *digest = NULL;
5143 	unsigned int plaintext_pad_len;
5144 	unsigned int plaintext_len;
5145 	unsigned int ciphertext_pad_len;
5146 	unsigned int ciphertext_len;
5147 	uint8_t buffer[10000];
5148 	uint8_t digest_buffer[10000];
5149 
5150 	struct rte_cryptodev_info dev_info;
5151 
5152 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5153 
5154 	uint64_t feat_flags = dev_info.feature_flags;
5155 
5156 	if (op_mode == IN_PLACE) {
5157 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5158 			printf("Device doesn't support in-place scatter-gather "
5159 					"in both input and output mbufs.\n");
5160 			return -ENOTSUP;
5161 		}
5162 	} else {
5163 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5164 			printf("Device doesn't support out-of-place scatter-gather "
5165 					"in both input and output mbufs.\n");
5166 			return -ENOTSUP;
5167 		}
5168 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5169 			printf("Device doesn't support digest encrypted.\n");
5170 			return -ENOTSUP;
5171 		}
5172 	}
5173 
5174 	/* Create KASUMI session */
5175 	retval = create_wireless_algo_auth_cipher_session(
5176 			ts_params->valid_devs[0],
5177 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5178 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5179 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5180 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5181 			RTE_CRYPTO_AUTH_KASUMI_F9,
5182 			RTE_CRYPTO_CIPHER_KASUMI_F8,
5183 			tdata->key.data, tdata->key.len,
5184 			0, tdata->digest.len,
5185 			tdata->cipher_iv.len);
5186 
5187 	if (retval < 0)
5188 		return retval;
5189 
5190 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5191 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5192 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5193 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5194 
5195 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5196 			plaintext_pad_len, 15, 0);
5197 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5198 			"Failed to allocate input buffer in mempool");
5199 
5200 	if (op_mode == OUT_OF_PLACE) {
5201 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
5202 				plaintext_pad_len, 15, 0);
5203 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
5204 				"Failed to allocate output buffer in mempool");
5205 	}
5206 
5207 	if (verify) {
5208 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
5209 			tdata->ciphertext.data);
5210 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5211 					ciphertext_len, buffer);
5212 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5213 			ciphertext_len);
5214 	} else {
5215 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5216 			tdata->plaintext.data);
5217 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5218 					plaintext_len, buffer);
5219 		debug_hexdump(stdout, "plaintext:", plaintext,
5220 			plaintext_len);
5221 	}
5222 	memset(buffer, 0, sizeof(buffer));
5223 
5224 	/* Create KASUMI operation */
5225 	retval = create_wireless_algo_auth_cipher_operation(
5226 		tdata->digest.data, tdata->digest.len,
5227 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5228 		NULL, 0,
5229 		(tdata->digest.offset_bytes == 0 ?
5230 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5231 			: tdata->digest.offset_bytes),
5232 		tdata->validCipherLenInBits.len,
5233 		tdata->validCipherOffsetInBits.len,
5234 		tdata->validAuthLenInBits.len,
5235 		0,
5236 		op_mode, 1, verify);
5237 
5238 	if (retval < 0)
5239 		return retval;
5240 
5241 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5242 			ut_params->op);
5243 
5244 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5245 
5246 	ut_params->obuf = (op_mode == IN_PLACE ?
5247 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5248 
5249 	if (verify) {
5250 		if (ut_params->obuf)
5251 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
5252 					plaintext_len, buffer);
5253 		else
5254 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5255 					plaintext_len, buffer);
5256 
5257 		debug_hexdump(stdout, "plaintext:", plaintext,
5258 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5259 		debug_hexdump(stdout, "plaintext expected:",
5260 			tdata->plaintext.data,
5261 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5262 	} else {
5263 		if (ut_params->obuf)
5264 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
5265 					ciphertext_len, buffer);
5266 		else
5267 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5268 					ciphertext_len, buffer);
5269 
5270 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5271 			ciphertext_len);
5272 		debug_hexdump(stdout, "ciphertext expected:",
5273 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5274 
5275 		if (ut_params->obuf)
5276 			digest = rte_pktmbuf_read(ut_params->obuf,
5277 				(tdata->digest.offset_bytes == 0 ?
5278 				plaintext_pad_len : tdata->digest.offset_bytes),
5279 				tdata->digest.len, digest_buffer);
5280 		else
5281 			digest = rte_pktmbuf_read(ut_params->ibuf,
5282 				(tdata->digest.offset_bytes == 0 ?
5283 				plaintext_pad_len : tdata->digest.offset_bytes),
5284 				tdata->digest.len, digest_buffer);
5285 
5286 		debug_hexdump(stdout, "digest:", digest,
5287 			tdata->digest.len);
5288 		debug_hexdump(stdout, "digest expected:",
5289 			tdata->digest.data, tdata->digest.len);
5290 	}
5291 
5292 	/* Validate obuf */
5293 	if (verify) {
5294 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5295 			plaintext,
5296 			tdata->plaintext.data,
5297 			tdata->plaintext.len >> 3,
5298 			"KASUMI Plaintext data not as expected");
5299 	} else {
5300 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5301 			ciphertext,
5302 			tdata->ciphertext.data,
5303 			tdata->validDataLenInBits.len,
5304 			"KASUMI Ciphertext data not as expected");
5305 
5306 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5307 			digest,
5308 			tdata->digest.data,
5309 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5310 			"KASUMI Generated auth tag not as expected");
5311 	}
5312 	return 0;
5313 }
5314 
5315 static int
5316 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
5317 {
5318 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5319 	struct crypto_unittest_params *ut_params = &unittest_params;
5320 
5321 	int retval;
5322 
5323 	uint8_t *plaintext, *ciphertext;
5324 	unsigned plaintext_pad_len;
5325 	unsigned plaintext_len;
5326 
5327 	/* Create KASUMI session */
5328 	retval = create_wireless_algo_cipher_auth_session(
5329 			ts_params->valid_devs[0],
5330 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5331 			RTE_CRYPTO_AUTH_OP_GENERATE,
5332 			RTE_CRYPTO_AUTH_KASUMI_F9,
5333 			RTE_CRYPTO_CIPHER_KASUMI_F8,
5334 			tdata->key.data, tdata->key.len,
5335 			0, tdata->digest.len,
5336 			tdata->cipher_iv.len);
5337 	if (retval < 0)
5338 		return retval;
5339 
5340 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5341 
5342 	/* clear mbuf payload */
5343 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5344 			rte_pktmbuf_tailroom(ut_params->ibuf));
5345 
5346 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5347 	/* Append data which is padded to a multiple of */
5348 	/* the algorithms block size */
5349 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5350 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5351 				plaintext_pad_len);
5352 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5353 
5354 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5355 
5356 	/* Create KASUMI operation */
5357 	retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
5358 				tdata->digest.len, NULL, 0,
5359 				plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5360 				tdata->cipher_iv.data, tdata->cipher_iv.len,
5361 				RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8),
5362 				tdata->validCipherOffsetInBits.len,
5363 				tdata->validAuthLenInBits.len,
5364 				0
5365 				);
5366 	if (retval < 0)
5367 		return retval;
5368 
5369 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5370 			ut_params->op);
5371 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5372 
5373 	if (ut_params->op->sym->m_dst)
5374 		ut_params->obuf = ut_params->op->sym->m_dst;
5375 	else
5376 		ut_params->obuf = ut_params->op->sym->m_src;
5377 
5378 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5379 				tdata->validCipherOffsetInBits.len >> 3);
5380 
5381 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5382 			+ plaintext_pad_len;
5383 
5384 	const uint8_t *reference_ciphertext = tdata->ciphertext.data +
5385 				(tdata->validCipherOffsetInBits.len >> 3);
5386 	/* Validate obuf */
5387 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5388 		ciphertext,
5389 		reference_ciphertext,
5390 		tdata->validCipherLenInBits.len,
5391 		"KASUMI Ciphertext data not as expected");
5392 
5393 	/* Validate obuf */
5394 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
5395 		ut_params->digest,
5396 		tdata->digest.data,
5397 		DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
5398 		"KASUMI Generated auth tag not as expected");
5399 	return 0;
5400 }
5401 
5402 static int
5403 test_zuc_encryption(const struct wireless_test_data *tdata)
5404 {
5405 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5406 	struct crypto_unittest_params *ut_params = &unittest_params;
5407 
5408 	int retval;
5409 	uint8_t *plaintext, *ciphertext;
5410 	unsigned plaintext_pad_len;
5411 	unsigned plaintext_len;
5412 
5413 	struct rte_cryptodev_sym_capability_idx cap_idx;
5414 
5415 	/* Check if device supports ZUC EEA3 */
5416 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5417 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5418 
5419 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5420 			&cap_idx) == NULL)
5421 		return -ENOTSUP;
5422 
5423 	/* Create ZUC session */
5424 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5425 					RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5426 					RTE_CRYPTO_CIPHER_ZUC_EEA3,
5427 					tdata->key.data, tdata->key.len,
5428 					tdata->cipher_iv.len);
5429 	if (retval < 0)
5430 		return retval;
5431 
5432 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5433 
5434 	/* Clear mbuf payload */
5435 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5436 	       rte_pktmbuf_tailroom(ut_params->ibuf));
5437 
5438 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5439 	/* Append data which is padded to a multiple */
5440 	/* of the algorithms block size */
5441 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5442 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5443 				plaintext_pad_len);
5444 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5445 
5446 	debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
5447 
5448 	/* Create ZUC operation */
5449 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5450 					tdata->cipher_iv.len,
5451 					tdata->plaintext.len,
5452 					0);
5453 	if (retval < 0)
5454 		return retval;
5455 
5456 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5457 						ut_params->op);
5458 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5459 
5460 	ut_params->obuf = ut_params->op->sym->m_dst;
5461 	if (ut_params->obuf)
5462 		ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
5463 	else
5464 		ciphertext = plaintext;
5465 
5466 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5467 
5468 	/* Validate obuf */
5469 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5470 		ciphertext,
5471 		tdata->ciphertext.data,
5472 		tdata->validCipherLenInBits.len,
5473 		"ZUC Ciphertext data not as expected");
5474 	return 0;
5475 }
5476 
5477 static int
5478 test_zuc_encryption_sgl(const struct wireless_test_data *tdata)
5479 {
5480 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5481 	struct crypto_unittest_params *ut_params = &unittest_params;
5482 
5483 	int retval;
5484 
5485 	unsigned int plaintext_pad_len;
5486 	unsigned int plaintext_len;
5487 	const uint8_t *ciphertext;
5488 	uint8_t ciphertext_buffer[2048];
5489 	struct rte_cryptodev_info dev_info;
5490 
5491 	struct rte_cryptodev_sym_capability_idx cap_idx;
5492 
5493 	/* Check if device supports ZUC EEA3 */
5494 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5495 	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
5496 
5497 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5498 			&cap_idx) == NULL)
5499 		return -ENOTSUP;
5500 
5501 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5502 
5503 	uint64_t feat_flags = dev_info.feature_flags;
5504 
5505 	if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5506 		printf("Device doesn't support in-place scatter-gather. "
5507 				"Test Skipped.\n");
5508 		return -ENOTSUP;
5509 	}
5510 
5511 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5512 
5513 	/* Append data which is padded to a multiple */
5514 	/* of the algorithms block size */
5515 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5516 
5517 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5518 			plaintext_pad_len, 10, 0);
5519 
5520 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5521 			tdata->plaintext.data);
5522 
5523 	/* Create ZUC session */
5524 	retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
5525 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5526 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5527 			tdata->key.data, tdata->key.len,
5528 			tdata->cipher_iv.len);
5529 	if (retval < 0)
5530 		return retval;
5531 
5532 	/* Clear mbuf payload */
5533 
5534 	pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
5535 
5536 	/* Create ZUC operation */
5537 	retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
5538 			tdata->cipher_iv.len, tdata->plaintext.len,
5539 			0);
5540 	if (retval < 0)
5541 		return retval;
5542 
5543 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5544 						ut_params->op);
5545 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5546 
5547 	ut_params->obuf = ut_params->op->sym->m_dst;
5548 	if (ut_params->obuf)
5549 		ciphertext = rte_pktmbuf_read(ut_params->obuf,
5550 			0, plaintext_len, ciphertext_buffer);
5551 	else
5552 		ciphertext = rte_pktmbuf_read(ut_params->ibuf,
5553 			0, plaintext_len, ciphertext_buffer);
5554 
5555 	/* Validate obuf */
5556 	debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
5557 
5558 	/* Validate obuf */
5559 	TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5560 		ciphertext,
5561 		tdata->ciphertext.data,
5562 		tdata->validCipherLenInBits.len,
5563 		"ZUC Ciphertext data not as expected");
5564 
5565 	return 0;
5566 }
5567 
5568 static int
5569 test_zuc_authentication(const struct wireless_test_data *tdata)
5570 {
5571 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5572 	struct crypto_unittest_params *ut_params = &unittest_params;
5573 
5574 	int retval;
5575 	unsigned plaintext_pad_len;
5576 	unsigned plaintext_len;
5577 	uint8_t *plaintext;
5578 
5579 	struct rte_cryptodev_sym_capability_idx cap_idx;
5580 
5581 	/* Check if device supports ZUC EIA3 */
5582 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5583 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5584 
5585 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5586 			&cap_idx) == NULL)
5587 		return -ENOTSUP;
5588 
5589 	/* Create ZUC session */
5590 	retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
5591 			tdata->key.data, tdata->key.len,
5592 			tdata->auth_iv.len, tdata->digest.len,
5593 			RTE_CRYPTO_AUTH_OP_GENERATE,
5594 			RTE_CRYPTO_AUTH_ZUC_EIA3);
5595 	if (retval < 0)
5596 		return retval;
5597 
5598 	/* alloc mbuf and set payload */
5599 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5600 
5601 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5602 	rte_pktmbuf_tailroom(ut_params->ibuf));
5603 
5604 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5605 	/* Append data which is padded to a multiple of */
5606 	/* the algorithms block size */
5607 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
5608 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5609 				plaintext_pad_len);
5610 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5611 
5612 	/* Create ZUC operation */
5613 	retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
5614 			tdata->auth_iv.data, tdata->auth_iv.len,
5615 			plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
5616 			tdata->validAuthLenInBits.len,
5617 			0);
5618 	if (retval < 0)
5619 		return retval;
5620 
5621 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5622 				ut_params->op);
5623 	ut_params->obuf = ut_params->op->sym->m_src;
5624 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5625 	ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
5626 			+ plaintext_pad_len;
5627 
5628 	/* Validate obuf */
5629 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
5630 	ut_params->digest,
5631 	tdata->digest.data,
5632 	DIGEST_BYTE_LENGTH_KASUMI_F9,
5633 	"ZUC Generated auth tag not as expected");
5634 
5635 	return 0;
5636 }
5637 
5638 static int
5639 test_zuc_auth_cipher(const struct wireless_test_data *tdata,
5640 	uint8_t op_mode, uint8_t verify)
5641 {
5642 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5643 	struct crypto_unittest_params *ut_params = &unittest_params;
5644 
5645 	int retval;
5646 
5647 	uint8_t *plaintext = NULL, *ciphertext = NULL;
5648 	unsigned int plaintext_pad_len;
5649 	unsigned int plaintext_len;
5650 	unsigned int ciphertext_pad_len;
5651 	unsigned int ciphertext_len;
5652 
5653 	struct rte_cryptodev_info dev_info;
5654 	struct rte_cryptodev_sym_capability_idx cap_idx;
5655 
5656 	/* Check if device supports ZUC EIA3 */
5657 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5658 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5659 
5660 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5661 			&cap_idx) == NULL)
5662 		return -ENOTSUP;
5663 
5664 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5665 
5666 	uint64_t feat_flags = dev_info.feature_flags;
5667 
5668 	if (op_mode == OUT_OF_PLACE) {
5669 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5670 			printf("Device doesn't support digest encrypted.\n");
5671 			return -ENOTSUP;
5672 		}
5673 	}
5674 
5675 	/* Create ZUC session */
5676 	retval = create_wireless_algo_auth_cipher_session(
5677 			ts_params->valid_devs[0],
5678 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5679 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5680 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5681 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5682 			RTE_CRYPTO_AUTH_ZUC_EIA3,
5683 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5684 			tdata->key.data, tdata->key.len,
5685 			tdata->auth_iv.len, tdata->digest.len,
5686 			tdata->cipher_iv.len);
5687 
5688 	if (retval < 0)
5689 		return retval;
5690 
5691 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5692 	if (op_mode == OUT_OF_PLACE)
5693 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5694 
5695 	/* clear mbuf payload */
5696 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5697 		rte_pktmbuf_tailroom(ut_params->ibuf));
5698 	if (op_mode == OUT_OF_PLACE)
5699 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5700 			rte_pktmbuf_tailroom(ut_params->obuf));
5701 
5702 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5703 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5704 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5705 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5706 
5707 	if (verify) {
5708 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5709 					ciphertext_pad_len);
5710 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
5711 		if (op_mode == OUT_OF_PLACE)
5712 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
5713 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5714 			ciphertext_len);
5715 	} else {
5716 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5717 					plaintext_pad_len);
5718 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
5719 		if (op_mode == OUT_OF_PLACE)
5720 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
5721 		debug_hexdump(stdout, "plaintext:", plaintext,
5722 			plaintext_len);
5723 	}
5724 
5725 	/* Create ZUC operation */
5726 	retval = create_wireless_algo_auth_cipher_operation(
5727 		tdata->digest.data, tdata->digest.len,
5728 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5729 		tdata->auth_iv.data, tdata->auth_iv.len,
5730 		(tdata->digest.offset_bytes == 0 ?
5731 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5732 			: tdata->digest.offset_bytes),
5733 		tdata->validCipherLenInBits.len,
5734 		tdata->validCipherOffsetInBits.len,
5735 		tdata->validAuthLenInBits.len,
5736 		0,
5737 		op_mode, 0, verify);
5738 
5739 	if (retval < 0)
5740 		return retval;
5741 
5742 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5743 			ut_params->op);
5744 
5745 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5746 
5747 	ut_params->obuf = (op_mode == IN_PLACE ?
5748 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5749 
5750 
5751 	if (verify) {
5752 		if (ut_params->obuf)
5753 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
5754 							uint8_t *);
5755 		else
5756 			plaintext = ciphertext;
5757 
5758 		debug_hexdump(stdout, "plaintext:", plaintext,
5759 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5760 		debug_hexdump(stdout, "plaintext expected:",
5761 			tdata->plaintext.data,
5762 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5763 	} else {
5764 		if (ut_params->obuf)
5765 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
5766 							uint8_t *);
5767 		else
5768 			ciphertext = plaintext;
5769 
5770 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5771 			ciphertext_len);
5772 		debug_hexdump(stdout, "ciphertext expected:",
5773 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5774 
5775 		ut_params->digest = rte_pktmbuf_mtod(
5776 			ut_params->obuf, uint8_t *) +
5777 			(tdata->digest.offset_bytes == 0 ?
5778 			plaintext_pad_len : tdata->digest.offset_bytes);
5779 
5780 		debug_hexdump(stdout, "digest:", ut_params->digest,
5781 			tdata->digest.len);
5782 		debug_hexdump(stdout, "digest expected:",
5783 			tdata->digest.data, tdata->digest.len);
5784 	}
5785 
5786 	/* Validate obuf */
5787 	if (verify) {
5788 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5789 			plaintext,
5790 			tdata->plaintext.data,
5791 			tdata->plaintext.len >> 3,
5792 			"ZUC Plaintext data not as expected");
5793 	} else {
5794 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5795 			ciphertext,
5796 			tdata->ciphertext.data,
5797 			tdata->ciphertext.len >> 3,
5798 			"ZUC Ciphertext data not as expected");
5799 
5800 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5801 			ut_params->digest,
5802 			tdata->digest.data,
5803 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5804 			"ZUC Generated auth tag not as expected");
5805 	}
5806 	return 0;
5807 }
5808 
5809 static int
5810 test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata,
5811 	uint8_t op_mode, uint8_t verify)
5812 {
5813 	struct crypto_testsuite_params *ts_params = &testsuite_params;
5814 	struct crypto_unittest_params *ut_params = &unittest_params;
5815 
5816 	int retval;
5817 
5818 	const uint8_t *plaintext = NULL;
5819 	const uint8_t *ciphertext = NULL;
5820 	const uint8_t *digest = NULL;
5821 	unsigned int plaintext_pad_len;
5822 	unsigned int plaintext_len;
5823 	unsigned int ciphertext_pad_len;
5824 	unsigned int ciphertext_len;
5825 	uint8_t buffer[10000];
5826 	uint8_t digest_buffer[10000];
5827 
5828 	struct rte_cryptodev_info dev_info;
5829 	struct rte_cryptodev_sym_capability_idx cap_idx;
5830 
5831 	/* Check if device supports ZUC EIA3 */
5832 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5833 	cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
5834 
5835 	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
5836 			&cap_idx) == NULL)
5837 		return -ENOTSUP;
5838 
5839 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5840 
5841 	uint64_t feat_flags = dev_info.feature_flags;
5842 
5843 	if (op_mode == IN_PLACE) {
5844 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
5845 			printf("Device doesn't support in-place scatter-gather "
5846 					"in both input and output mbufs.\n");
5847 			return -ENOTSUP;
5848 		}
5849 	} else {
5850 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
5851 			printf("Device doesn't support out-of-place scatter-gather "
5852 					"in both input and output mbufs.\n");
5853 			return -ENOTSUP;
5854 		}
5855 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
5856 			printf("Device doesn't support digest encrypted.\n");
5857 			return -ENOTSUP;
5858 		}
5859 	}
5860 
5861 	/* Create ZUC session */
5862 	retval = create_wireless_algo_auth_cipher_session(
5863 			ts_params->valid_devs[0],
5864 			(verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT
5865 					: RTE_CRYPTO_CIPHER_OP_ENCRYPT),
5866 			(verify ? RTE_CRYPTO_AUTH_OP_VERIFY
5867 					: RTE_CRYPTO_AUTH_OP_GENERATE),
5868 			RTE_CRYPTO_AUTH_ZUC_EIA3,
5869 			RTE_CRYPTO_CIPHER_ZUC_EEA3,
5870 			tdata->key.data, tdata->key.len,
5871 			tdata->auth_iv.len, tdata->digest.len,
5872 			tdata->cipher_iv.len);
5873 
5874 	if (retval < 0)
5875 		return retval;
5876 
5877 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
5878 	plaintext_len = ceil_byte_length(tdata->plaintext.len);
5879 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
5880 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
5881 
5882 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
5883 			plaintext_pad_len, 15, 0);
5884 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5885 			"Failed to allocate input buffer in mempool");
5886 
5887 	if (op_mode == OUT_OF_PLACE) {
5888 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
5889 				plaintext_pad_len, 15, 0);
5890 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
5891 				"Failed to allocate output buffer in mempool");
5892 	}
5893 
5894 	if (verify) {
5895 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
5896 			tdata->ciphertext.data);
5897 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5898 					ciphertext_len, buffer);
5899 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5900 			ciphertext_len);
5901 	} else {
5902 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
5903 			tdata->plaintext.data);
5904 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5905 					plaintext_len, buffer);
5906 		debug_hexdump(stdout, "plaintext:", plaintext,
5907 			plaintext_len);
5908 	}
5909 	memset(buffer, 0, sizeof(buffer));
5910 
5911 	/* Create ZUC operation */
5912 	retval = create_wireless_algo_auth_cipher_operation(
5913 		tdata->digest.data, tdata->digest.len,
5914 		tdata->cipher_iv.data, tdata->cipher_iv.len,
5915 		NULL, 0,
5916 		(tdata->digest.offset_bytes == 0 ?
5917 		(verify ? ciphertext_pad_len : plaintext_pad_len)
5918 			: tdata->digest.offset_bytes),
5919 		tdata->validCipherLenInBits.len,
5920 		tdata->validCipherOffsetInBits.len,
5921 		tdata->validAuthLenInBits.len,
5922 		0,
5923 		op_mode, 1, verify);
5924 
5925 	if (retval < 0)
5926 		return retval;
5927 
5928 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5929 			ut_params->op);
5930 
5931 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
5932 
5933 	ut_params->obuf = (op_mode == IN_PLACE ?
5934 		ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
5935 
5936 	if (verify) {
5937 		if (ut_params->obuf)
5938 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
5939 					plaintext_len, buffer);
5940 		else
5941 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
5942 					plaintext_len, buffer);
5943 
5944 		debug_hexdump(stdout, "plaintext:", plaintext,
5945 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5946 		debug_hexdump(stdout, "plaintext expected:",
5947 			tdata->plaintext.data,
5948 			(tdata->plaintext.len >> 3) - tdata->digest.len);
5949 	} else {
5950 		if (ut_params->obuf)
5951 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
5952 					ciphertext_len, buffer);
5953 		else
5954 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
5955 					ciphertext_len, buffer);
5956 
5957 		debug_hexdump(stdout, "ciphertext:", ciphertext,
5958 			ciphertext_len);
5959 		debug_hexdump(stdout, "ciphertext expected:",
5960 			tdata->ciphertext.data, tdata->ciphertext.len >> 3);
5961 
5962 		if (ut_params->obuf)
5963 			digest = rte_pktmbuf_read(ut_params->obuf,
5964 				(tdata->digest.offset_bytes == 0 ?
5965 				plaintext_pad_len : tdata->digest.offset_bytes),
5966 				tdata->digest.len, digest_buffer);
5967 		else
5968 			digest = rte_pktmbuf_read(ut_params->ibuf,
5969 				(tdata->digest.offset_bytes == 0 ?
5970 				plaintext_pad_len : tdata->digest.offset_bytes),
5971 				tdata->digest.len, digest_buffer);
5972 
5973 		debug_hexdump(stdout, "digest:", digest,
5974 			tdata->digest.len);
5975 		debug_hexdump(stdout, "digest expected:",
5976 			tdata->digest.data, tdata->digest.len);
5977 	}
5978 
5979 	/* Validate obuf */
5980 	if (verify) {
5981 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5982 			plaintext,
5983 			tdata->plaintext.data,
5984 			tdata->plaintext.len >> 3,
5985 			"ZUC Plaintext data not as expected");
5986 	} else {
5987 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
5988 			ciphertext,
5989 			tdata->ciphertext.data,
5990 			tdata->validDataLenInBits.len,
5991 			"ZUC Ciphertext data not as expected");
5992 
5993 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
5994 			digest,
5995 			tdata->digest.data,
5996 			DIGEST_BYTE_LENGTH_KASUMI_F9,
5997 			"ZUC Generated auth tag not as expected");
5998 	}
5999 	return 0;
6000 }
6001 
6002 static int
6003 test_kasumi_encryption_test_case_1(void)
6004 {
6005 	return test_kasumi_encryption(&kasumi_test_case_1);
6006 }
6007 
6008 static int
6009 test_kasumi_encryption_test_case_1_sgl(void)
6010 {
6011 	return test_kasumi_encryption_sgl(&kasumi_test_case_1);
6012 }
6013 
6014 static int
6015 test_kasumi_encryption_test_case_1_oop(void)
6016 {
6017 	return test_kasumi_encryption_oop(&kasumi_test_case_1);
6018 }
6019 
6020 static int
6021 test_kasumi_encryption_test_case_1_oop_sgl(void)
6022 {
6023 	return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
6024 }
6025 
6026 static int
6027 test_kasumi_encryption_test_case_2(void)
6028 {
6029 	return test_kasumi_encryption(&kasumi_test_case_2);
6030 }
6031 
6032 static int
6033 test_kasumi_encryption_test_case_3(void)
6034 {
6035 	return test_kasumi_encryption(&kasumi_test_case_3);
6036 }
6037 
6038 static int
6039 test_kasumi_encryption_test_case_4(void)
6040 {
6041 	return test_kasumi_encryption(&kasumi_test_case_4);
6042 }
6043 
6044 static int
6045 test_kasumi_encryption_test_case_5(void)
6046 {
6047 	return test_kasumi_encryption(&kasumi_test_case_5);
6048 }
6049 
6050 static int
6051 test_kasumi_decryption_test_case_1(void)
6052 {
6053 	return test_kasumi_decryption(&kasumi_test_case_1);
6054 }
6055 
6056 static int
6057 test_kasumi_decryption_test_case_1_oop(void)
6058 {
6059 	return test_kasumi_decryption_oop(&kasumi_test_case_1);
6060 }
6061 
6062 static int
6063 test_kasumi_decryption_test_case_2(void)
6064 {
6065 	return test_kasumi_decryption(&kasumi_test_case_2);
6066 }
6067 
6068 static int
6069 test_kasumi_decryption_test_case_3(void)
6070 {
6071 	return test_kasumi_decryption(&kasumi_test_case_3);
6072 }
6073 
6074 static int
6075 test_kasumi_decryption_test_case_4(void)
6076 {
6077 	return test_kasumi_decryption(&kasumi_test_case_4);
6078 }
6079 
6080 static int
6081 test_kasumi_decryption_test_case_5(void)
6082 {
6083 	return test_kasumi_decryption(&kasumi_test_case_5);
6084 }
6085 static int
6086 test_snow3g_encryption_test_case_1(void)
6087 {
6088 	return test_snow3g_encryption(&snow3g_test_case_1);
6089 }
6090 
6091 static int
6092 test_snow3g_encryption_test_case_1_oop(void)
6093 {
6094 	return test_snow3g_encryption_oop(&snow3g_test_case_1);
6095 }
6096 
6097 static int
6098 test_snow3g_encryption_test_case_1_oop_sgl(void)
6099 {
6100 	return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
6101 }
6102 
6103 
6104 static int
6105 test_snow3g_encryption_test_case_1_offset_oop(void)
6106 {
6107 	return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
6108 }
6109 
6110 static int
6111 test_snow3g_encryption_test_case_2(void)
6112 {
6113 	return test_snow3g_encryption(&snow3g_test_case_2);
6114 }
6115 
6116 static int
6117 test_snow3g_encryption_test_case_3(void)
6118 {
6119 	return test_snow3g_encryption(&snow3g_test_case_3);
6120 }
6121 
6122 static int
6123 test_snow3g_encryption_test_case_4(void)
6124 {
6125 	return test_snow3g_encryption(&snow3g_test_case_4);
6126 }
6127 
6128 static int
6129 test_snow3g_encryption_test_case_5(void)
6130 {
6131 	return test_snow3g_encryption(&snow3g_test_case_5);
6132 }
6133 
6134 static int
6135 test_snow3g_decryption_test_case_1(void)
6136 {
6137 	return test_snow3g_decryption(&snow3g_test_case_1);
6138 }
6139 
6140 static int
6141 test_snow3g_decryption_test_case_1_oop(void)
6142 {
6143 	return test_snow3g_decryption_oop(&snow3g_test_case_1);
6144 }
6145 
6146 static int
6147 test_snow3g_decryption_test_case_2(void)
6148 {
6149 	return test_snow3g_decryption(&snow3g_test_case_2);
6150 }
6151 
6152 static int
6153 test_snow3g_decryption_test_case_3(void)
6154 {
6155 	return test_snow3g_decryption(&snow3g_test_case_3);
6156 }
6157 
6158 static int
6159 test_snow3g_decryption_test_case_4(void)
6160 {
6161 	return test_snow3g_decryption(&snow3g_test_case_4);
6162 }
6163 
6164 static int
6165 test_snow3g_decryption_test_case_5(void)
6166 {
6167 	return test_snow3g_decryption(&snow3g_test_case_5);
6168 }
6169 
6170 /*
6171  * Function prepares snow3g_hash_test_data from snow3g_test_data.
6172  * Pattern digest from snow3g_test_data must be allocated as
6173  * 4 last bytes in plaintext.
6174  */
6175 static void
6176 snow3g_hash_test_vector_setup(const struct snow3g_test_data *pattern,
6177 		struct snow3g_hash_test_data *output)
6178 {
6179 	if ((pattern != NULL) && (output != NULL)) {
6180 		output->key.len = pattern->key.len;
6181 
6182 		memcpy(output->key.data,
6183 		pattern->key.data, pattern->key.len);
6184 
6185 		output->auth_iv.len = pattern->auth_iv.len;
6186 
6187 		memcpy(output->auth_iv.data,
6188 		pattern->auth_iv.data, pattern->auth_iv.len);
6189 
6190 		output->plaintext.len = pattern->plaintext.len;
6191 
6192 		memcpy(output->plaintext.data,
6193 		pattern->plaintext.data, pattern->plaintext.len >> 3);
6194 
6195 		output->digest.len = pattern->digest.len;
6196 
6197 		memcpy(output->digest.data,
6198 		&pattern->plaintext.data[pattern->digest.offset_bytes],
6199 		pattern->digest.len);
6200 
6201 		output->validAuthLenInBits.len =
6202 		pattern->validAuthLenInBits.len;
6203 	}
6204 }
6205 
6206 /*
6207  * Test case verify computed cipher and digest from snow3g_test_case_7 data.
6208  */
6209 static int
6210 test_snow3g_decryption_with_digest_test_case_1(void)
6211 {
6212 	struct snow3g_hash_test_data snow3g_hash_data;
6213 
6214 	/*
6215 	 * Function prepare data for hash veryfication test case.
6216 	 * Digest is allocated in 4 last bytes in plaintext, pattern.
6217 	 */
6218 	snow3g_hash_test_vector_setup(&snow3g_test_case_7, &snow3g_hash_data);
6219 
6220 	return test_snow3g_decryption(&snow3g_test_case_7) &
6221 			test_snow3g_authentication_verify(&snow3g_hash_data);
6222 }
6223 
6224 static int
6225 test_snow3g_cipher_auth_test_case_1(void)
6226 {
6227 	return test_snow3g_cipher_auth(&snow3g_test_case_3);
6228 }
6229 
6230 static int
6231 test_snow3g_auth_cipher_test_case_1(void)
6232 {
6233 	return test_snow3g_auth_cipher(
6234 		&snow3g_auth_cipher_test_case_1, IN_PLACE, 0);
6235 }
6236 
6237 static int
6238 test_snow3g_auth_cipher_test_case_2(void)
6239 {
6240 	return test_snow3g_auth_cipher(
6241 		&snow3g_auth_cipher_test_case_2, IN_PLACE, 0);
6242 }
6243 
6244 static int
6245 test_snow3g_auth_cipher_test_case_2_oop(void)
6246 {
6247 	return test_snow3g_auth_cipher(
6248 		&snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6249 }
6250 
6251 static int
6252 test_snow3g_auth_cipher_part_digest_enc(void)
6253 {
6254 	return test_snow3g_auth_cipher(
6255 		&snow3g_auth_cipher_partial_digest_encryption,
6256 			IN_PLACE, 0);
6257 }
6258 
6259 static int
6260 test_snow3g_auth_cipher_part_digest_enc_oop(void)
6261 {
6262 	return test_snow3g_auth_cipher(
6263 		&snow3g_auth_cipher_partial_digest_encryption,
6264 			OUT_OF_PLACE, 0);
6265 }
6266 
6267 static int
6268 test_snow3g_auth_cipher_test_case_3_sgl(void)
6269 {
6270 	return test_snow3g_auth_cipher_sgl(
6271 		&snow3g_auth_cipher_test_case_3, IN_PLACE, 0);
6272 }
6273 
6274 static int
6275 test_snow3g_auth_cipher_test_case_3_oop_sgl(void)
6276 {
6277 	return test_snow3g_auth_cipher_sgl(
6278 		&snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 0);
6279 }
6280 
6281 static int
6282 test_snow3g_auth_cipher_part_digest_enc_sgl(void)
6283 {
6284 	return test_snow3g_auth_cipher_sgl(
6285 		&snow3g_auth_cipher_partial_digest_encryption,
6286 			IN_PLACE, 0);
6287 }
6288 
6289 static int
6290 test_snow3g_auth_cipher_part_digest_enc_oop_sgl(void)
6291 {
6292 	return test_snow3g_auth_cipher_sgl(
6293 		&snow3g_auth_cipher_partial_digest_encryption,
6294 			OUT_OF_PLACE, 0);
6295 }
6296 
6297 static int
6298 test_snow3g_auth_cipher_verify_test_case_1(void)
6299 {
6300 	return test_snow3g_auth_cipher(
6301 		&snow3g_auth_cipher_test_case_1, IN_PLACE, 1);
6302 }
6303 
6304 static int
6305 test_snow3g_auth_cipher_verify_test_case_2(void)
6306 {
6307 	return test_snow3g_auth_cipher(
6308 		&snow3g_auth_cipher_test_case_2, IN_PLACE, 1);
6309 }
6310 
6311 static int
6312 test_snow3g_auth_cipher_verify_test_case_2_oop(void)
6313 {
6314 	return test_snow3g_auth_cipher(
6315 		&snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6316 }
6317 
6318 static int
6319 test_snow3g_auth_cipher_verify_part_digest_enc(void)
6320 {
6321 	return test_snow3g_auth_cipher(
6322 		&snow3g_auth_cipher_partial_digest_encryption,
6323 			IN_PLACE, 1);
6324 }
6325 
6326 static int
6327 test_snow3g_auth_cipher_verify_part_digest_enc_oop(void)
6328 {
6329 	return test_snow3g_auth_cipher(
6330 		&snow3g_auth_cipher_partial_digest_encryption,
6331 			OUT_OF_PLACE, 1);
6332 }
6333 
6334 static int
6335 test_snow3g_auth_cipher_verify_test_case_3_sgl(void)
6336 {
6337 	return test_snow3g_auth_cipher_sgl(
6338 		&snow3g_auth_cipher_test_case_3, IN_PLACE, 1);
6339 }
6340 
6341 static int
6342 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl(void)
6343 {
6344 	return test_snow3g_auth_cipher_sgl(
6345 		&snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 1);
6346 }
6347 
6348 static int
6349 test_snow3g_auth_cipher_verify_part_digest_enc_sgl(void)
6350 {
6351 	return test_snow3g_auth_cipher_sgl(
6352 		&snow3g_auth_cipher_partial_digest_encryption,
6353 			IN_PLACE, 1);
6354 }
6355 
6356 static int
6357 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl(void)
6358 {
6359 	return test_snow3g_auth_cipher_sgl(
6360 		&snow3g_auth_cipher_partial_digest_encryption,
6361 			OUT_OF_PLACE, 1);
6362 }
6363 
6364 static int
6365 test_snow3g_auth_cipher_with_digest_test_case_1(void)
6366 {
6367 	return test_snow3g_auth_cipher(
6368 		&snow3g_test_case_7, IN_PLACE, 0);
6369 }
6370 
6371 static int
6372 test_kasumi_auth_cipher_test_case_1(void)
6373 {
6374 	return test_kasumi_auth_cipher(
6375 		&kasumi_test_case_3, IN_PLACE, 0);
6376 }
6377 
6378 static int
6379 test_kasumi_auth_cipher_test_case_2(void)
6380 {
6381 	return test_kasumi_auth_cipher(
6382 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6383 }
6384 
6385 static int
6386 test_kasumi_auth_cipher_test_case_2_oop(void)
6387 {
6388 	return test_kasumi_auth_cipher(
6389 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6390 }
6391 
6392 static int
6393 test_kasumi_auth_cipher_test_case_2_sgl(void)
6394 {
6395 	return test_kasumi_auth_cipher_sgl(
6396 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 0);
6397 }
6398 
6399 static int
6400 test_kasumi_auth_cipher_test_case_2_oop_sgl(void)
6401 {
6402 	return test_kasumi_auth_cipher_sgl(
6403 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0);
6404 }
6405 
6406 static int
6407 test_kasumi_auth_cipher_verify_test_case_1(void)
6408 {
6409 	return test_kasumi_auth_cipher(
6410 		&kasumi_test_case_3, IN_PLACE, 1);
6411 }
6412 
6413 static int
6414 test_kasumi_auth_cipher_verify_test_case_2(void)
6415 {
6416 	return test_kasumi_auth_cipher(
6417 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6418 }
6419 
6420 static int
6421 test_kasumi_auth_cipher_verify_test_case_2_oop(void)
6422 {
6423 	return test_kasumi_auth_cipher(
6424 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6425 }
6426 
6427 static int
6428 test_kasumi_auth_cipher_verify_test_case_2_sgl(void)
6429 {
6430 	return test_kasumi_auth_cipher_sgl(
6431 		&kasumi_auth_cipher_test_case_2, IN_PLACE, 1);
6432 }
6433 
6434 static int
6435 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl(void)
6436 {
6437 	return test_kasumi_auth_cipher_sgl(
6438 		&kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1);
6439 }
6440 
6441 static int
6442 test_kasumi_cipher_auth_test_case_1(void)
6443 {
6444 	return test_kasumi_cipher_auth(&kasumi_test_case_6);
6445 }
6446 
6447 static int
6448 test_zuc_encryption_test_case_1(void)
6449 {
6450 	return test_zuc_encryption(&zuc_test_case_cipher_193b);
6451 }
6452 
6453 static int
6454 test_zuc_encryption_test_case_2(void)
6455 {
6456 	return test_zuc_encryption(&zuc_test_case_cipher_800b);
6457 }
6458 
6459 static int
6460 test_zuc_encryption_test_case_3(void)
6461 {
6462 	return test_zuc_encryption(&zuc_test_case_cipher_1570b);
6463 }
6464 
6465 static int
6466 test_zuc_encryption_test_case_4(void)
6467 {
6468 	return test_zuc_encryption(&zuc_test_case_cipher_2798b);
6469 }
6470 
6471 static int
6472 test_zuc_encryption_test_case_5(void)
6473 {
6474 	return test_zuc_encryption(&zuc_test_case_cipher_4019b);
6475 }
6476 
6477 static int
6478 test_zuc_encryption_test_case_6_sgl(void)
6479 {
6480 	return test_zuc_encryption_sgl(&zuc_test_case_cipher_193b);
6481 }
6482 
6483 static int
6484 test_zuc_hash_generate_test_case_1(void)
6485 {
6486 	return test_zuc_authentication(&zuc_test_case_auth_1b);
6487 }
6488 
6489 static int
6490 test_zuc_hash_generate_test_case_2(void)
6491 {
6492 	return test_zuc_authentication(&zuc_test_case_auth_90b);
6493 }
6494 
6495 static int
6496 test_zuc_hash_generate_test_case_3(void)
6497 {
6498 	return test_zuc_authentication(&zuc_test_case_auth_577b);
6499 }
6500 
6501 static int
6502 test_zuc_hash_generate_test_case_4(void)
6503 {
6504 	return test_zuc_authentication(&zuc_test_case_auth_2079b);
6505 }
6506 
6507 static int
6508 test_zuc_hash_generate_test_case_5(void)
6509 {
6510 	return test_zuc_authentication(&zuc_test_auth_5670b);
6511 }
6512 
6513 static int
6514 test_zuc_hash_generate_test_case_6(void)
6515 {
6516 	return test_zuc_authentication(&zuc_test_case_auth_128b);
6517 }
6518 
6519 static int
6520 test_zuc_hash_generate_test_case_7(void)
6521 {
6522 	return test_zuc_authentication(&zuc_test_case_auth_2080b);
6523 }
6524 
6525 static int
6526 test_zuc_hash_generate_test_case_8(void)
6527 {
6528 	return test_zuc_authentication(&zuc_test_case_auth_584b);
6529 }
6530 
6531 static int
6532 test_zuc_cipher_auth_test_case_1(void)
6533 {
6534 	return test_zuc_cipher_auth(&zuc_test_case_cipher_200b_auth_200b);
6535 }
6536 
6537 static int
6538 test_zuc_cipher_auth_test_case_2(void)
6539 {
6540 	return test_zuc_cipher_auth(&zuc_test_case_cipher_800b_auth_120b);
6541 }
6542 
6543 static int
6544 test_zuc_auth_cipher_test_case_1(void)
6545 {
6546 	return test_zuc_auth_cipher(
6547 		&zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6548 }
6549 
6550 static int
6551 test_zuc_auth_cipher_test_case_1_oop(void)
6552 {
6553 	return test_zuc_auth_cipher(
6554 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6555 }
6556 
6557 static int
6558 test_zuc_auth_cipher_test_case_1_sgl(void)
6559 {
6560 	return test_zuc_auth_cipher_sgl(
6561 		&zuc_auth_cipher_test_case_1, IN_PLACE, 0);
6562 }
6563 
6564 static int
6565 test_zuc_auth_cipher_test_case_1_oop_sgl(void)
6566 {
6567 	return test_zuc_auth_cipher_sgl(
6568 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0);
6569 }
6570 
6571 static int
6572 test_zuc_auth_cipher_verify_test_case_1(void)
6573 {
6574 	return test_zuc_auth_cipher(
6575 		&zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6576 }
6577 
6578 static int
6579 test_zuc_auth_cipher_verify_test_case_1_oop(void)
6580 {
6581 	return test_zuc_auth_cipher(
6582 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6583 }
6584 
6585 static int
6586 test_zuc_auth_cipher_verify_test_case_1_sgl(void)
6587 {
6588 	return test_zuc_auth_cipher_sgl(
6589 		&zuc_auth_cipher_test_case_1, IN_PLACE, 1);
6590 }
6591 
6592 static int
6593 test_zuc_auth_cipher_verify_test_case_1_oop_sgl(void)
6594 {
6595 	return test_zuc_auth_cipher_sgl(
6596 		&zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1);
6597 }
6598 
6599 static int
6600 test_mixed_check_if_unsupported(const struct mixed_cipher_auth_test_data *tdata)
6601 {
6602 	uint8_t dev_id = testsuite_params.valid_devs[0];
6603 
6604 	struct rte_cryptodev_sym_capability_idx cap_idx;
6605 
6606 	/* Check if device supports particular cipher algorithm */
6607 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6608 	cap_idx.algo.cipher = tdata->cipher_algo;
6609 	if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL)
6610 		return -ENOTSUP;
6611 
6612 	/* Check if device supports particular hash algorithm */
6613 	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6614 	cap_idx.algo.auth = tdata->auth_algo;
6615 	if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL)
6616 		return -ENOTSUP;
6617 
6618 	return 0;
6619 }
6620 
6621 static int
6622 test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,
6623 	uint8_t op_mode, uint8_t verify)
6624 {
6625 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6626 	struct crypto_unittest_params *ut_params = &unittest_params;
6627 
6628 	int retval;
6629 
6630 	uint8_t *plaintext = NULL, *ciphertext = NULL;
6631 	unsigned int plaintext_pad_len;
6632 	unsigned int plaintext_len;
6633 	unsigned int ciphertext_pad_len;
6634 	unsigned int ciphertext_len;
6635 
6636 	struct rte_cryptodev_info dev_info;
6637 	struct rte_crypto_op *op;
6638 
6639 	/* Check if device supports particular algorithms separately */
6640 	if (test_mixed_check_if_unsupported(tdata))
6641 		return -ENOTSUP;
6642 
6643 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
6644 
6645 	uint64_t feat_flags = dev_info.feature_flags;
6646 
6647 	if (op_mode == OUT_OF_PLACE) {
6648 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
6649 			printf("Device doesn't support digest encrypted.\n");
6650 			return -ENOTSUP;
6651 		}
6652 	}
6653 
6654 	/* Create the session */
6655 	if (verify)
6656 		retval = create_wireless_algo_cipher_auth_session(
6657 				ts_params->valid_devs[0],
6658 				RTE_CRYPTO_CIPHER_OP_DECRYPT,
6659 				RTE_CRYPTO_AUTH_OP_VERIFY,
6660 				tdata->auth_algo,
6661 				tdata->cipher_algo,
6662 				tdata->auth_key.data, tdata->auth_key.len,
6663 				tdata->auth_iv.len, tdata->digest_enc.len,
6664 				tdata->cipher_iv.len);
6665 	else
6666 		retval = create_wireless_algo_auth_cipher_session(
6667 				ts_params->valid_devs[0],
6668 				RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6669 				RTE_CRYPTO_AUTH_OP_GENERATE,
6670 				tdata->auth_algo,
6671 				tdata->cipher_algo,
6672 				tdata->auth_key.data, tdata->auth_key.len,
6673 				tdata->auth_iv.len, tdata->digest_enc.len,
6674 				tdata->cipher_iv.len);
6675 	if (retval < 0)
6676 		return retval;
6677 
6678 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6679 	if (op_mode == OUT_OF_PLACE)
6680 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6681 
6682 	/* clear mbuf payload */
6683 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6684 		rte_pktmbuf_tailroom(ut_params->ibuf));
6685 	if (op_mode == OUT_OF_PLACE)
6686 		memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
6687 				rte_pktmbuf_tailroom(ut_params->obuf));
6688 
6689 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits);
6690 	plaintext_len = ceil_byte_length(tdata->plaintext.len_bits);
6691 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
6692 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
6693 
6694 	if (verify) {
6695 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6696 				ciphertext_pad_len);
6697 		memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
6698 		if (op_mode == OUT_OF_PLACE)
6699 			rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
6700 		debug_hexdump(stdout, "ciphertext:", ciphertext,
6701 				ciphertext_len);
6702 	} else {
6703 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6704 				plaintext_pad_len);
6705 		memcpy(plaintext, tdata->plaintext.data, plaintext_len);
6706 		if (op_mode == OUT_OF_PLACE)
6707 			rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
6708 		debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len);
6709 	}
6710 
6711 	/* Create the operation */
6712 	retval = create_wireless_algo_auth_cipher_operation(
6713 			tdata->digest_enc.data, tdata->digest_enc.len,
6714 			tdata->cipher_iv.data, tdata->cipher_iv.len,
6715 			tdata->auth_iv.data, tdata->auth_iv.len,
6716 			(tdata->digest_enc.offset == 0 ?
6717 				plaintext_pad_len
6718 				: tdata->digest_enc.offset),
6719 			tdata->validCipherLen.len_bits,
6720 			tdata->cipher.offset_bits,
6721 			tdata->validAuthLen.len_bits,
6722 			tdata->auth.offset_bits,
6723 			op_mode, 0, verify);
6724 
6725 	if (retval < 0)
6726 		return retval;
6727 
6728 	op = process_crypto_request(ts_params->valid_devs[0],
6729 			ut_params->op);
6730 
6731 	/* Check if the op failed because the device doesn't */
6732 	/* support this particular combination of algorithms */
6733 	if (op == NULL && ut_params->op->status ==
6734 			RTE_CRYPTO_OP_STATUS_INVALID_SESSION) {
6735 		printf("Device doesn't support this mixed combination. "
6736 				"Test Skipped.\n");
6737 		return -ENOTSUP;
6738 	}
6739 	ut_params->op = op;
6740 
6741 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
6742 
6743 	ut_params->obuf = (op_mode == IN_PLACE ?
6744 			ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
6745 
6746 	if (verify) {
6747 		if (ut_params->obuf)
6748 			plaintext = rte_pktmbuf_mtod(ut_params->obuf,
6749 							uint8_t *);
6750 		else
6751 			plaintext = ciphertext +
6752 					(tdata->cipher.offset_bits >> 3);
6753 
6754 		debug_hexdump(stdout, "plaintext:", plaintext,
6755 				tdata->plaintext.len_bits >> 3);
6756 		debug_hexdump(stdout, "plaintext expected:",
6757 				tdata->plaintext.data,
6758 				tdata->plaintext.len_bits >> 3);
6759 	} else {
6760 		if (ut_params->obuf)
6761 			ciphertext = rte_pktmbuf_mtod(ut_params->obuf,
6762 					uint8_t *);
6763 		else
6764 			ciphertext = plaintext;
6765 
6766 		debug_hexdump(stdout, "ciphertext:", ciphertext,
6767 				ciphertext_len);
6768 		debug_hexdump(stdout, "ciphertext expected:",
6769 				tdata->ciphertext.data,
6770 				tdata->ciphertext.len_bits >> 3);
6771 
6772 		ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
6773 				+ (tdata->digest_enc.offset == 0 ?
6774 		plaintext_pad_len : tdata->digest_enc.offset);
6775 
6776 		debug_hexdump(stdout, "digest:", ut_params->digest,
6777 				tdata->digest_enc.len);
6778 		debug_hexdump(stdout, "digest expected:",
6779 				tdata->digest_enc.data,
6780 				tdata->digest_enc.len);
6781 	}
6782 
6783 	/* Validate obuf */
6784 	if (verify) {
6785 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6786 				plaintext,
6787 				tdata->plaintext.data,
6788 				tdata->plaintext.len_bits >> 3,
6789 				"Plaintext data not as expected");
6790 	} else {
6791 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
6792 				ciphertext,
6793 				tdata->ciphertext.data,
6794 				tdata->validDataLen.len_bits,
6795 				"Ciphertext data not as expected");
6796 
6797 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
6798 				ut_params->digest,
6799 				tdata->digest_enc.data,
6800 				DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
6801 				"Generated auth tag not as expected");
6802 	}
6803 
6804 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6805 			"crypto op processing failed");
6806 
6807 	return 0;
6808 }
6809 
6810 static int
6811 test_mixed_auth_cipher_sgl(const struct mixed_cipher_auth_test_data *tdata,
6812 	uint8_t op_mode, uint8_t verify)
6813 {
6814 	struct crypto_testsuite_params *ts_params = &testsuite_params;
6815 	struct crypto_unittest_params *ut_params = &unittest_params;
6816 
6817 	int retval;
6818 
6819 	const uint8_t *plaintext = NULL;
6820 	const uint8_t *ciphertext = NULL;
6821 	const uint8_t *digest = NULL;
6822 	unsigned int plaintext_pad_len;
6823 	unsigned int plaintext_len;
6824 	unsigned int ciphertext_pad_len;
6825 	unsigned int ciphertext_len;
6826 	uint8_t buffer[10000];
6827 	uint8_t digest_buffer[10000];
6828 
6829 	struct rte_cryptodev_info dev_info;
6830 	struct rte_crypto_op *op;
6831 
6832 	/* Check if device supports particular algorithms */
6833 	if (test_mixed_check_if_unsupported(tdata))
6834 		return -ENOTSUP;
6835 
6836 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
6837 
6838 	uint64_t feat_flags = dev_info.feature_flags;
6839 
6840 	if (op_mode == IN_PLACE) {
6841 		if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) {
6842 			printf("Device doesn't support in-place scatter-gather "
6843 					"in both input and output mbufs.\n");
6844 			return -ENOTSUP;
6845 		}
6846 	} else {
6847 		if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {
6848 			printf("Device doesn't support out-of-place scatter-gather "
6849 					"in both input and output mbufs.\n");
6850 			return -ENOTSUP;
6851 		}
6852 		if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {
6853 			printf("Device doesn't support digest encrypted.\n");
6854 			return -ENOTSUP;
6855 		}
6856 	}
6857 
6858 	/* Create the session */
6859 	if (verify)
6860 		retval = create_wireless_algo_cipher_auth_session(
6861 				ts_params->valid_devs[0],
6862 				RTE_CRYPTO_CIPHER_OP_DECRYPT,
6863 				RTE_CRYPTO_AUTH_OP_VERIFY,
6864 				tdata->auth_algo,
6865 				tdata->cipher_algo,
6866 				tdata->auth_key.data, tdata->auth_key.len,
6867 				tdata->auth_iv.len, tdata->digest_enc.len,
6868 				tdata->cipher_iv.len);
6869 	else
6870 		retval = create_wireless_algo_auth_cipher_session(
6871 				ts_params->valid_devs[0],
6872 				RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6873 				RTE_CRYPTO_AUTH_OP_GENERATE,
6874 				tdata->auth_algo,
6875 				tdata->cipher_algo,
6876 				tdata->auth_key.data, tdata->auth_key.len,
6877 				tdata->auth_iv.len, tdata->digest_enc.len,
6878 				tdata->cipher_iv.len);
6879 	if (retval < 0)
6880 		return retval;
6881 
6882 	ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits);
6883 	plaintext_len = ceil_byte_length(tdata->plaintext.len_bits);
6884 	ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
6885 	plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
6886 
6887 	ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
6888 			ciphertext_pad_len, 15, 0);
6889 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6890 			"Failed to allocate input buffer in mempool");
6891 
6892 	if (op_mode == OUT_OF_PLACE) {
6893 		ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
6894 				plaintext_pad_len, 15, 0);
6895 		TEST_ASSERT_NOT_NULL(ut_params->obuf,
6896 				"Failed to allocate output buffer in mempool");
6897 	}
6898 
6899 	if (verify) {
6900 		pktmbuf_write(ut_params->ibuf, 0, ciphertext_len,
6901 			tdata->ciphertext.data);
6902 		ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
6903 					ciphertext_len, buffer);
6904 		debug_hexdump(stdout, "ciphertext:", ciphertext,
6905 			ciphertext_len);
6906 	} else {
6907 		pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
6908 			tdata->plaintext.data);
6909 		plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
6910 					plaintext_len, buffer);
6911 		debug_hexdump(stdout, "plaintext:", plaintext,
6912 			plaintext_len);
6913 	}
6914 	memset(buffer, 0, sizeof(buffer));
6915 
6916 	/* Create the operation */
6917 	retval = create_wireless_algo_auth_cipher_operation(
6918 			tdata->digest_enc.data, tdata->digest_enc.len,
6919 			tdata->cipher_iv.data, tdata->cipher_iv.len,
6920 			tdata->auth_iv.data, tdata->auth_iv.len,
6921 			(tdata->digest_enc.offset == 0 ?
6922 				plaintext_pad_len
6923 				: tdata->digest_enc.offset),
6924 			tdata->validCipherLen.len_bits,
6925 			tdata->cipher.offset_bits,
6926 			tdata->validAuthLen.len_bits,
6927 			tdata->auth.offset_bits,
6928 			op_mode, 1, verify);
6929 
6930 	if (retval < 0)
6931 		return retval;
6932 
6933 	op = process_crypto_request(ts_params->valid_devs[0],
6934 			ut_params->op);
6935 
6936 	/* Check if the op failed because the device doesn't */
6937 	/* support this particular combination of algorithms */
6938 	if (op == NULL && ut_params->op->status ==
6939 			RTE_CRYPTO_OP_STATUS_INVALID_SESSION) {
6940 		printf("Device doesn't support this mixed combination. "
6941 				"Test Skipped.\n");
6942 		return -ENOTSUP;
6943 	}
6944 
6945 	ut_params->op = op;
6946 
6947 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
6948 
6949 	ut_params->obuf = (op_mode == IN_PLACE ?
6950 			ut_params->op->sym->m_src : ut_params->op->sym->m_dst);
6951 
6952 	if (verify) {
6953 		if (ut_params->obuf)
6954 			plaintext = rte_pktmbuf_read(ut_params->obuf, 0,
6955 					plaintext_len, buffer);
6956 		else
6957 			plaintext = rte_pktmbuf_read(ut_params->ibuf, 0,
6958 					plaintext_len, buffer);
6959 
6960 		debug_hexdump(stdout, "plaintext:", plaintext,
6961 				(tdata->plaintext.len_bits >> 3) -
6962 				tdata->digest_enc.len);
6963 		debug_hexdump(stdout, "plaintext expected:",
6964 				tdata->plaintext.data,
6965 				(tdata->plaintext.len_bits >> 3) -
6966 				tdata->digest_enc.len);
6967 	} else {
6968 		if (ut_params->obuf)
6969 			ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
6970 					ciphertext_len, buffer);
6971 		else
6972 			ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
6973 					ciphertext_len, buffer);
6974 
6975 		debug_hexdump(stdout, "ciphertext:", ciphertext,
6976 			ciphertext_len);
6977 		debug_hexdump(stdout, "ciphertext expected:",
6978 			tdata->ciphertext.data,
6979 			tdata->ciphertext.len_bits >> 3);
6980 
6981 		if (ut_params->obuf)
6982 			digest = rte_pktmbuf_read(ut_params->obuf,
6983 					(tdata->digest_enc.offset == 0 ?
6984 						plaintext_pad_len :
6985 						tdata->digest_enc.offset),
6986 					tdata->digest_enc.len, digest_buffer);
6987 		else
6988 			digest = rte_pktmbuf_read(ut_params->ibuf,
6989 					(tdata->digest_enc.offset == 0 ?
6990 						plaintext_pad_len :
6991 						tdata->digest_enc.offset),
6992 					tdata->digest_enc.len, digest_buffer);
6993 
6994 		debug_hexdump(stdout, "digest:", digest,
6995 				tdata->digest_enc.len);
6996 		debug_hexdump(stdout, "digest expected:",
6997 				tdata->digest_enc.data, tdata->digest_enc.len);
6998 	}
6999 
7000 	/* Validate obuf */
7001 	if (verify) {
7002 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
7003 				plaintext,
7004 				tdata->plaintext.data,
7005 				tdata->plaintext.len_bits >> 3,
7006 				"Plaintext data not as expected");
7007 	} else {
7008 		TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
7009 				ciphertext,
7010 				tdata->ciphertext.data,
7011 				tdata->validDataLen.len_bits,
7012 				"Ciphertext data not as expected");
7013 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
7014 				digest,
7015 				tdata->digest_enc.data,
7016 				tdata->digest_enc.len,
7017 				"Generated auth tag not as expected");
7018 	}
7019 
7020 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7021 			"crypto op processing failed");
7022 
7023 	return 0;
7024 }
7025 
7026 /** AUTH AES CMAC + CIPHER AES CTR */
7027 
7028 static int
7029 test_aes_cmac_aes_ctr_digest_enc_test_case_1(void)
7030 {
7031 	return test_mixed_auth_cipher(
7032 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0);
7033 }
7034 
7035 static int
7036 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void)
7037 {
7038 	return test_mixed_auth_cipher(
7039 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7040 }
7041 
7042 static int
7043 test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void)
7044 {
7045 	return test_mixed_auth_cipher_sgl(
7046 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0);
7047 }
7048 
7049 static int
7050 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void)
7051 {
7052 	return test_mixed_auth_cipher_sgl(
7053 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7054 }
7055 
7056 static int
7057 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1(void)
7058 {
7059 	return test_mixed_auth_cipher(
7060 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1);
7061 }
7062 
7063 static int
7064 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void)
7065 {
7066 	return test_mixed_auth_cipher(
7067 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7068 }
7069 
7070 static int
7071 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void)
7072 {
7073 	return test_mixed_auth_cipher_sgl(
7074 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1);
7075 }
7076 
7077 static int
7078 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void)
7079 {
7080 	return test_mixed_auth_cipher_sgl(
7081 		&auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7082 }
7083 
7084 /** MIXED AUTH + CIPHER */
7085 
7086 static int
7087 test_auth_zuc_cipher_snow_test_case_1(void)
7088 {
7089 	return test_mixed_auth_cipher(
7090 		&auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7091 }
7092 
7093 static int
7094 test_verify_auth_zuc_cipher_snow_test_case_1(void)
7095 {
7096 	return test_mixed_auth_cipher(
7097 		&auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7098 }
7099 
7100 static int
7101 test_auth_aes_cmac_cipher_snow_test_case_1(void)
7102 {
7103 	return test_mixed_auth_cipher(
7104 		&auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7105 }
7106 
7107 static int
7108 test_verify_auth_aes_cmac_cipher_snow_test_case_1(void)
7109 {
7110 	return test_mixed_auth_cipher(
7111 		&auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7112 }
7113 
7114 static int
7115 test_auth_zuc_cipher_aes_ctr_test_case_1(void)
7116 {
7117 	return test_mixed_auth_cipher(
7118 		&auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7119 }
7120 
7121 static int
7122 test_verify_auth_zuc_cipher_aes_ctr_test_case_1(void)
7123 {
7124 	return test_mixed_auth_cipher(
7125 		&auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7126 }
7127 
7128 static int
7129 test_auth_snow_cipher_aes_ctr_test_case_1(void)
7130 {
7131 	return test_mixed_auth_cipher(
7132 		&auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7133 }
7134 
7135 static int
7136 test_verify_auth_snow_cipher_aes_ctr_test_case_1(void)
7137 {
7138 	return test_mixed_auth_cipher(
7139 		&auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7140 }
7141 
7142 static int
7143 test_auth_snow_cipher_zuc_test_case_1(void)
7144 {
7145 	return test_mixed_auth_cipher(
7146 		&auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7147 }
7148 
7149 static int
7150 test_verify_auth_snow_cipher_zuc_test_case_1(void)
7151 {
7152 	return test_mixed_auth_cipher(
7153 		&auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7154 }
7155 
7156 static int
7157 test_auth_aes_cmac_cipher_zuc_test_case_1(void)
7158 {
7159 	return test_mixed_auth_cipher(
7160 		&auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7161 }
7162 
7163 static int
7164 test_verify_auth_aes_cmac_cipher_zuc_test_case_1(void)
7165 {
7166 	return test_mixed_auth_cipher(
7167 		&auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7168 }
7169 
7170 static int
7171 test_auth_null_cipher_snow_test_case_1(void)
7172 {
7173 	return test_mixed_auth_cipher(
7174 		&auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 0);
7175 }
7176 
7177 static int
7178 test_verify_auth_null_cipher_snow_test_case_1(void)
7179 {
7180 	return test_mixed_auth_cipher(
7181 		&auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 1);
7182 }
7183 
7184 static int
7185 test_auth_null_cipher_zuc_test_case_1(void)
7186 {
7187 	return test_mixed_auth_cipher(
7188 		&auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 0);
7189 }
7190 
7191 static int
7192 test_verify_auth_null_cipher_zuc_test_case_1(void)
7193 {
7194 	return test_mixed_auth_cipher(
7195 		&auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 1);
7196 }
7197 
7198 static int
7199 test_auth_snow_cipher_null_test_case_1(void)
7200 {
7201 	return test_mixed_auth_cipher(
7202 		&auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7203 }
7204 
7205 static int
7206 test_verify_auth_snow_cipher_null_test_case_1(void)
7207 {
7208 	return test_mixed_auth_cipher(
7209 		&auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7210 }
7211 
7212 static int
7213 test_auth_zuc_cipher_null_test_case_1(void)
7214 {
7215 	return test_mixed_auth_cipher(
7216 		&auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7217 }
7218 
7219 static int
7220 test_verify_auth_zuc_cipher_null_test_case_1(void)
7221 {
7222 	return test_mixed_auth_cipher(
7223 		&auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7224 }
7225 
7226 static int
7227 test_auth_null_cipher_aes_ctr_test_case_1(void)
7228 {
7229 	return test_mixed_auth_cipher(
7230 		&auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0);
7231 }
7232 
7233 static int
7234 test_verify_auth_null_cipher_aes_ctr_test_case_1(void)
7235 {
7236 	return test_mixed_auth_cipher(
7237 		&auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1);
7238 }
7239 
7240 static int
7241 test_auth_aes_cmac_cipher_null_test_case_1(void)
7242 {
7243 	return test_mixed_auth_cipher(
7244 		&auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 0);
7245 }
7246 
7247 static int
7248 test_verify_auth_aes_cmac_cipher_null_test_case_1(void)
7249 {
7250 	return test_mixed_auth_cipher(
7251 		&auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 1);
7252 }
7253 
7254 static int
7255 test_3DES_chain_qat_all(void)
7256 {
7257 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7258 	int status;
7259 
7260 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7261 		ts_params->op_mpool,
7262 		ts_params->session_mpool, ts_params->session_priv_mpool,
7263 		ts_params->valid_devs[0],
7264 		rte_cryptodev_driver_id_get(
7265 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
7266 		BLKCIPHER_3DES_CHAIN_TYPE);
7267 
7268 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7269 
7270 	return TEST_SUCCESS;
7271 }
7272 
7273 static int
7274 test_DES_cipheronly_qat_all(void)
7275 {
7276 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7277 	int status;
7278 
7279 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7280 		ts_params->op_mpool,
7281 		ts_params->session_mpool, ts_params->session_priv_mpool,
7282 		ts_params->valid_devs[0],
7283 		rte_cryptodev_driver_id_get(
7284 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
7285 		BLKCIPHER_DES_CIPHERONLY_TYPE);
7286 
7287 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7288 
7289 	return TEST_SUCCESS;
7290 }
7291 
7292 static int
7293 test_DES_cipheronly_openssl_all(void)
7294 {
7295 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7296 	int status;
7297 
7298 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7299 		ts_params->op_mpool,
7300 		ts_params->session_mpool, ts_params->session_priv_mpool,
7301 		ts_params->valid_devs[0],
7302 		rte_cryptodev_driver_id_get(
7303 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
7304 		BLKCIPHER_DES_CIPHERONLY_TYPE);
7305 
7306 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7307 
7308 	return TEST_SUCCESS;
7309 }
7310 
7311 static int
7312 test_DES_docsis_openssl_all(void)
7313 {
7314 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7315 	int status;
7316 
7317 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7318 		ts_params->op_mpool,
7319 		ts_params->session_mpool, ts_params->session_priv_mpool,
7320 		ts_params->valid_devs[0],
7321 		rte_cryptodev_driver_id_get(
7322 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
7323 		BLKCIPHER_DES_DOCSIS_TYPE);
7324 
7325 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7326 
7327 	return TEST_SUCCESS;
7328 }
7329 
7330 static int
7331 test_DES_cipheronly_mb_all(void)
7332 {
7333 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7334 	int status;
7335 
7336 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7337 		ts_params->op_mpool,
7338 		ts_params->session_mpool, ts_params->session_priv_mpool,
7339 		ts_params->valid_devs[0],
7340 		rte_cryptodev_driver_id_get(
7341 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
7342 		BLKCIPHER_DES_CIPHERONLY_TYPE);
7343 
7344 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7345 
7346 	return TEST_SUCCESS;
7347 }
7348 static int
7349 test_3DES_cipheronly_mb_all(void)
7350 {
7351 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7352 	int status;
7353 
7354 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7355 		ts_params->op_mpool,
7356 		ts_params->session_mpool, ts_params->session_priv_mpool,
7357 		ts_params->valid_devs[0],
7358 		rte_cryptodev_driver_id_get(
7359 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
7360 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7361 
7362 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7363 
7364 	return TEST_SUCCESS;
7365 }
7366 
7367 static int
7368 test_DES_docsis_mb_all(void)
7369 {
7370 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7371 	int status;
7372 
7373 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7374 		ts_params->op_mpool,
7375 		ts_params->session_mpool, ts_params->session_priv_mpool,
7376 		ts_params->valid_devs[0],
7377 		rte_cryptodev_driver_id_get(
7378 		RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
7379 		BLKCIPHER_DES_DOCSIS_TYPE);
7380 
7381 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7382 
7383 	return TEST_SUCCESS;
7384 }
7385 
7386 static int
7387 test_3DES_chain_caam_jr_all(void)
7388 {
7389 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7390 	int status;
7391 
7392 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7393 		ts_params->op_mpool,
7394 		ts_params->session_mpool, ts_params->session_priv_mpool,
7395 		ts_params->valid_devs[0],
7396 		rte_cryptodev_driver_id_get(
7397 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
7398 		BLKCIPHER_3DES_CHAIN_TYPE);
7399 
7400 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7401 
7402 	return TEST_SUCCESS;
7403 }
7404 
7405 static int
7406 test_3DES_cipheronly_caam_jr_all(void)
7407 {
7408 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7409 	int status;
7410 
7411 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7412 		ts_params->op_mpool,
7413 		ts_params->session_mpool, ts_params->session_priv_mpool,
7414 		ts_params->valid_devs[0],
7415 		rte_cryptodev_driver_id_get(
7416 		RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)),
7417 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7418 
7419 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7420 
7421 	return TEST_SUCCESS;
7422 }
7423 
7424 static int
7425 test_3DES_chain_dpaa_sec_all(void)
7426 {
7427 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7428 	int status;
7429 
7430 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7431 		ts_params->op_mpool,
7432 		ts_params->session_mpool, ts_params->session_priv_mpool,
7433 		ts_params->valid_devs[0],
7434 		rte_cryptodev_driver_id_get(
7435 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
7436 		BLKCIPHER_3DES_CHAIN_TYPE);
7437 
7438 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7439 
7440 	return TEST_SUCCESS;
7441 }
7442 
7443 static int
7444 test_3DES_cipheronly_dpaa_sec_all(void)
7445 {
7446 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7447 	int status;
7448 
7449 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7450 		ts_params->op_mpool,
7451 		ts_params->session_mpool, ts_params->session_priv_mpool,
7452 		ts_params->valid_devs[0],
7453 		rte_cryptodev_driver_id_get(
7454 		RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)),
7455 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7456 
7457 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7458 
7459 	return TEST_SUCCESS;
7460 }
7461 
7462 static int
7463 test_3DES_chain_dpaa2_sec_all(void)
7464 {
7465 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7466 	int status;
7467 
7468 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7469 		ts_params->op_mpool,
7470 		ts_params->session_mpool, ts_params->session_priv_mpool,
7471 		ts_params->valid_devs[0],
7472 		rte_cryptodev_driver_id_get(
7473 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
7474 		BLKCIPHER_3DES_CHAIN_TYPE);
7475 
7476 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7477 
7478 	return TEST_SUCCESS;
7479 }
7480 
7481 static int
7482 test_3DES_cipheronly_dpaa2_sec_all(void)
7483 {
7484 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7485 	int status;
7486 
7487 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7488 		ts_params->op_mpool,
7489 		ts_params->session_mpool, ts_params->session_priv_mpool,
7490 		ts_params->valid_devs[0],
7491 		rte_cryptodev_driver_id_get(
7492 		RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
7493 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7494 
7495 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7496 
7497 	return TEST_SUCCESS;
7498 }
7499 
7500 static int
7501 test_3DES_chain_ccp_all(void)
7502 {
7503 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7504 	int status;
7505 
7506 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7507 		ts_params->op_mpool,
7508 		ts_params->session_mpool, ts_params->session_priv_mpool,
7509 		ts_params->valid_devs[0],
7510 		rte_cryptodev_driver_id_get(
7511 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
7512 		BLKCIPHER_3DES_CHAIN_TYPE);
7513 
7514 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7515 
7516 	return TEST_SUCCESS;
7517 }
7518 
7519 static int
7520 test_3DES_cipheronly_ccp_all(void)
7521 {
7522 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7523 	int status;
7524 
7525 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7526 		ts_params->op_mpool,
7527 		ts_params->session_mpool, ts_params->session_priv_mpool,
7528 		ts_params->valid_devs[0],
7529 		rte_cryptodev_driver_id_get(
7530 		RTE_STR(CRYPTODEV_NAME_CCP_PMD)),
7531 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7532 
7533 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7534 
7535 	return TEST_SUCCESS;
7536 }
7537 
7538 static int
7539 test_3DES_cipheronly_qat_all(void)
7540 {
7541 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7542 	int status;
7543 
7544 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7545 		ts_params->op_mpool,
7546 		ts_params->session_mpool, ts_params->session_priv_mpool,
7547 		ts_params->valid_devs[0],
7548 		rte_cryptodev_driver_id_get(
7549 		RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
7550 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7551 
7552 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7553 
7554 	return TEST_SUCCESS;
7555 }
7556 
7557 static int
7558 test_3DES_chain_openssl_all(void)
7559 {
7560 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7561 	int status;
7562 
7563 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7564 		ts_params->op_mpool,
7565 		ts_params->session_mpool, ts_params->session_priv_mpool,
7566 		ts_params->valid_devs[0],
7567 		rte_cryptodev_driver_id_get(
7568 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
7569 		BLKCIPHER_3DES_CHAIN_TYPE);
7570 
7571 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7572 
7573 	return TEST_SUCCESS;
7574 }
7575 
7576 static int
7577 test_3DES_cipheronly_openssl_all(void)
7578 {
7579 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7580 	int status;
7581 
7582 	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
7583 		ts_params->op_mpool,
7584 		ts_params->session_mpool, ts_params->session_priv_mpool,
7585 		ts_params->valid_devs[0],
7586 		rte_cryptodev_driver_id_get(
7587 		RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
7588 		BLKCIPHER_3DES_CIPHERONLY_TYPE);
7589 
7590 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
7591 
7592 	return TEST_SUCCESS;
7593 }
7594 
7595 /* ***** AEAD algorithm Tests ***** */
7596 
7597 static int
7598 create_aead_session(uint8_t dev_id, enum rte_crypto_aead_algorithm algo,
7599 		enum rte_crypto_aead_operation op,
7600 		const uint8_t *key, const uint8_t key_len,
7601 		const uint16_t aad_len, const uint8_t auth_len,
7602 		uint8_t iv_len)
7603 {
7604 	uint8_t aead_key[key_len];
7605 
7606 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7607 	struct crypto_unittest_params *ut_params = &unittest_params;
7608 
7609 	memcpy(aead_key, key, key_len);
7610 
7611 	/* Setup AEAD Parameters */
7612 	ut_params->aead_xform.type = RTE_CRYPTO_SYM_XFORM_AEAD;
7613 	ut_params->aead_xform.next = NULL;
7614 	ut_params->aead_xform.aead.algo = algo;
7615 	ut_params->aead_xform.aead.op = op;
7616 	ut_params->aead_xform.aead.key.data = aead_key;
7617 	ut_params->aead_xform.aead.key.length = key_len;
7618 	ut_params->aead_xform.aead.iv.offset = IV_OFFSET;
7619 	ut_params->aead_xform.aead.iv.length = iv_len;
7620 	ut_params->aead_xform.aead.digest_length = auth_len;
7621 	ut_params->aead_xform.aead.aad_length = aad_len;
7622 
7623 	debug_hexdump(stdout, "key:", key, key_len);
7624 
7625 	/* Create Crypto session*/
7626 	ut_params->sess = rte_cryptodev_sym_session_create(
7627 			ts_params->session_mpool);
7628 
7629 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
7630 			&ut_params->aead_xform,
7631 			ts_params->session_priv_mpool);
7632 
7633 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
7634 
7635 	return 0;
7636 }
7637 
7638 static int
7639 create_aead_xform(struct rte_crypto_op *op,
7640 		enum rte_crypto_aead_algorithm algo,
7641 		enum rte_crypto_aead_operation aead_op,
7642 		uint8_t *key, const uint8_t key_len,
7643 		const uint8_t aad_len, const uint8_t auth_len,
7644 		uint8_t iv_len)
7645 {
7646 	TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 1),
7647 			"failed to allocate space for crypto transform");
7648 
7649 	struct rte_crypto_sym_op *sym_op = op->sym;
7650 
7651 	/* Setup AEAD Parameters */
7652 	sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
7653 	sym_op->xform->next = NULL;
7654 	sym_op->xform->aead.algo = algo;
7655 	sym_op->xform->aead.op = aead_op;
7656 	sym_op->xform->aead.key.data = key;
7657 	sym_op->xform->aead.key.length = key_len;
7658 	sym_op->xform->aead.iv.offset = IV_OFFSET;
7659 	sym_op->xform->aead.iv.length = iv_len;
7660 	sym_op->xform->aead.digest_length = auth_len;
7661 	sym_op->xform->aead.aad_length = aad_len;
7662 
7663 	debug_hexdump(stdout, "key:", key, key_len);
7664 
7665 	return 0;
7666 }
7667 
7668 static int
7669 create_aead_operation(enum rte_crypto_aead_operation op,
7670 		const struct aead_test_data *tdata)
7671 {
7672 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7673 	struct crypto_unittest_params *ut_params = &unittest_params;
7674 
7675 	uint8_t *plaintext, *ciphertext;
7676 	unsigned int aad_pad_len, plaintext_pad_len;
7677 
7678 	/* Generate Crypto op data structure */
7679 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7680 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7681 	TEST_ASSERT_NOT_NULL(ut_params->op,
7682 			"Failed to allocate symmetric crypto operation struct");
7683 
7684 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7685 
7686 	/* Append aad data */
7687 	if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
7688 		aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len + 18, 16);
7689 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7690 				aad_pad_len);
7691 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
7692 				"no room to append aad");
7693 
7694 		sym_op->aead.aad.phys_addr =
7695 				rte_pktmbuf_iova(ut_params->ibuf);
7696 		/* Copy AAD 18 bytes after the AAD pointer, according to the API */
7697 		memcpy(sym_op->aead.aad.data + 18, tdata->aad.data, tdata->aad.len);
7698 		debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
7699 			tdata->aad.len);
7700 
7701 		/* Append IV at the end of the crypto operation*/
7702 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
7703 				uint8_t *, IV_OFFSET);
7704 
7705 		/* Copy IV 1 byte after the IV pointer, according to the API */
7706 		rte_memcpy(iv_ptr + 1, tdata->iv.data, tdata->iv.len);
7707 		debug_hexdump(stdout, "iv:", iv_ptr,
7708 			tdata->iv.len);
7709 	} else {
7710 		aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
7711 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7712 				aad_pad_len);
7713 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
7714 				"no room to append aad");
7715 
7716 		sym_op->aead.aad.phys_addr =
7717 				rte_pktmbuf_iova(ut_params->ibuf);
7718 		memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len);
7719 		debug_hexdump(stdout, "aad:", sym_op->aead.aad.data,
7720 			tdata->aad.len);
7721 
7722 		/* Append IV at the end of the crypto operation*/
7723 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
7724 				uint8_t *, IV_OFFSET);
7725 
7726 		rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
7727 		debug_hexdump(stdout, "iv:", iv_ptr,
7728 			tdata->iv.len);
7729 	}
7730 
7731 	/* Append plaintext/ciphertext */
7732 	if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
7733 		plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7734 		plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7735 				plaintext_pad_len);
7736 		TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
7737 
7738 		memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
7739 		debug_hexdump(stdout, "plaintext:", plaintext,
7740 				tdata->plaintext.len);
7741 
7742 		if (ut_params->obuf) {
7743 			ciphertext = (uint8_t *)rte_pktmbuf_append(
7744 					ut_params->obuf,
7745 					plaintext_pad_len + aad_pad_len);
7746 			TEST_ASSERT_NOT_NULL(ciphertext,
7747 					"no room to append ciphertext");
7748 
7749 			memset(ciphertext + aad_pad_len, 0,
7750 					tdata->ciphertext.len);
7751 		}
7752 	} else {
7753 		plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
7754 		ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7755 				plaintext_pad_len);
7756 		TEST_ASSERT_NOT_NULL(ciphertext,
7757 				"no room to append ciphertext");
7758 
7759 		memcpy(ciphertext, tdata->ciphertext.data,
7760 				tdata->ciphertext.len);
7761 		debug_hexdump(stdout, "ciphertext:", ciphertext,
7762 				tdata->ciphertext.len);
7763 
7764 		if (ut_params->obuf) {
7765 			plaintext = (uint8_t *)rte_pktmbuf_append(
7766 					ut_params->obuf,
7767 					plaintext_pad_len + aad_pad_len);
7768 			TEST_ASSERT_NOT_NULL(plaintext,
7769 					"no room to append plaintext");
7770 
7771 			memset(plaintext + aad_pad_len, 0,
7772 					tdata->plaintext.len);
7773 		}
7774 	}
7775 
7776 	/* Append digest data */
7777 	if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
7778 		sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
7779 				ut_params->obuf ? ut_params->obuf :
7780 						ut_params->ibuf,
7781 						tdata->auth_tag.len);
7782 		TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
7783 				"no room to append digest");
7784 		memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len);
7785 		sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
7786 				ut_params->obuf ? ut_params->obuf :
7787 						ut_params->ibuf,
7788 						plaintext_pad_len +
7789 						aad_pad_len);
7790 	} else {
7791 		sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
7792 				ut_params->ibuf, tdata->auth_tag.len);
7793 		TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
7794 				"no room to append digest");
7795 		sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
7796 				ut_params->ibuf,
7797 				plaintext_pad_len + aad_pad_len);
7798 
7799 		rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
7800 			tdata->auth_tag.len);
7801 		debug_hexdump(stdout, "digest:",
7802 			sym_op->aead.digest.data,
7803 			tdata->auth_tag.len);
7804 	}
7805 
7806 	sym_op->aead.data.length = tdata->plaintext.len;
7807 	sym_op->aead.data.offset = aad_pad_len;
7808 
7809 	return 0;
7810 }
7811 
7812 static int
7813 test_authenticated_encryption(const struct aead_test_data *tdata)
7814 {
7815 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7816 	struct crypto_unittest_params *ut_params = &unittest_params;
7817 
7818 	int retval;
7819 	uint8_t *ciphertext, *auth_tag;
7820 	uint16_t plaintext_pad_len;
7821 	uint32_t i;
7822 
7823 	/* Create AEAD session */
7824 	retval = create_aead_session(ts_params->valid_devs[0],
7825 			tdata->algo,
7826 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
7827 			tdata->key.data, tdata->key.len,
7828 			tdata->aad.len, tdata->auth_tag.len,
7829 			tdata->iv.len);
7830 	if (retval < 0)
7831 		return retval;
7832 
7833 	if (tdata->aad.len > MBUF_SIZE) {
7834 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
7835 		/* Populate full size of add data */
7836 		for (i = 32; i < MAX_AAD_LENGTH; i += 32)
7837 			memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
7838 	} else
7839 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7840 
7841 	/* clear mbuf payload */
7842 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7843 			rte_pktmbuf_tailroom(ut_params->ibuf));
7844 
7845 	/* Create AEAD operation */
7846 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
7847 	if (retval < 0)
7848 		return retval;
7849 
7850 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7851 
7852 	ut_params->op->sym->m_src = ut_params->ibuf;
7853 
7854 	/* Process crypto operation */
7855 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7856 			ut_params->op), "failed to process sym crypto op");
7857 
7858 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7859 			"crypto op processing failed");
7860 
7861 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
7862 
7863 	if (ut_params->op->sym->m_dst) {
7864 		ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
7865 				uint8_t *);
7866 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7867 				uint8_t *, plaintext_pad_len);
7868 	} else {
7869 		ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7870 				uint8_t *,
7871 				ut_params->op->sym->cipher.data.offset);
7872 		auth_tag = ciphertext + plaintext_pad_len;
7873 	}
7874 
7875 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
7876 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
7877 
7878 	/* Validate obuf */
7879 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7880 			ciphertext,
7881 			tdata->ciphertext.data,
7882 			tdata->ciphertext.len,
7883 			"Ciphertext data not as expected");
7884 
7885 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
7886 			auth_tag,
7887 			tdata->auth_tag.data,
7888 			tdata->auth_tag.len,
7889 			"Generated auth tag not as expected");
7890 
7891 	return 0;
7892 
7893 }
7894 
7895 #ifdef RTE_LIBRTE_SECURITY
7896 /* Basic algorithm run function for async inplace mode.
7897  * Creates a session from input parameters and runs one operation
7898  * on input_vec. Checks the output of the crypto operation against
7899  * output_vec.
7900  */
7901 static int
7902 test_pdcp_proto(int i, int oop,
7903 	enum rte_crypto_cipher_operation opc,
7904 	enum rte_crypto_auth_operation opa,
7905 	uint8_t *input_vec,
7906 	unsigned int input_vec_len,
7907 	uint8_t *output_vec,
7908 	unsigned int output_vec_len)
7909 {
7910 	struct crypto_testsuite_params *ts_params = &testsuite_params;
7911 	struct crypto_unittest_params *ut_params = &unittest_params;
7912 	uint8_t *plaintext;
7913 	int ret = TEST_SUCCESS;
7914 
7915 	/* Generate test mbuf data */
7916 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7917 
7918 	/* clear mbuf payload */
7919 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7920 			rte_pktmbuf_tailroom(ut_params->ibuf));
7921 
7922 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7923 						  input_vec_len);
7924 	memcpy(plaintext, input_vec, input_vec_len);
7925 
7926 	/* Out of place support */
7927 	if (oop) {
7928 		/*
7929 		 * For out-op-place we need to alloc another mbuf
7930 		 */
7931 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7932 		rte_pktmbuf_append(ut_params->obuf, output_vec_len);
7933 	}
7934 
7935 	/* Set crypto type as IPSEC */
7936 	ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL;
7937 
7938 	/* Setup Cipher Parameters */
7939 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
7940 	ut_params->cipher_xform.cipher.algo = pdcp_test_params[i].cipher_alg;
7941 	ut_params->cipher_xform.cipher.op = opc;
7942 	ut_params->cipher_xform.cipher.key.data = pdcp_test_crypto_key[i];
7943 	ut_params->cipher_xform.cipher.key.length =
7944 					pdcp_test_params[i].cipher_key_len;
7945 	ut_params->cipher_xform.cipher.iv.length = 0;
7946 
7947 	/* Setup HMAC Parameters if ICV header is required */
7948 	if (pdcp_test_params[i].auth_alg != 0) {
7949 		ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
7950 		ut_params->auth_xform.next = NULL;
7951 		ut_params->auth_xform.auth.algo = pdcp_test_params[i].auth_alg;
7952 		ut_params->auth_xform.auth.op = opa;
7953 		ut_params->auth_xform.auth.key.data = pdcp_test_auth_key[i];
7954 		ut_params->auth_xform.auth.key.length =
7955 					pdcp_test_params[i].auth_key_len;
7956 
7957 		ut_params->cipher_xform.next = &ut_params->auth_xform;
7958 	} else {
7959 		ut_params->cipher_xform.next = NULL;
7960 	}
7961 
7962 	struct rte_security_session_conf sess_conf = {
7963 		.action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
7964 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
7965 		{.pdcp = {
7966 			.bearer = pdcp_test_bearer[i],
7967 			.domain = pdcp_test_params[i].domain,
7968 			.pkt_dir = pdcp_test_packet_direction[i],
7969 			.sn_size = pdcp_test_data_sn_size[i],
7970 			.hfn = pdcp_test_hfn[i],
7971 			.hfn_threshold = pdcp_test_hfn_threshold[i],
7972 		} },
7973 		.crypto_xform = &ut_params->cipher_xform
7974 	};
7975 
7976 	struct rte_security_ctx *ctx = (struct rte_security_ctx *)
7977 				rte_cryptodev_get_sec_ctx(
7978 				ts_params->valid_devs[0]);
7979 
7980 	/* Create security session */
7981 	ut_params->sec_session = rte_security_session_create(ctx,
7982 				&sess_conf, ts_params->session_priv_mpool);
7983 
7984 	if (!ut_params->sec_session) {
7985 		printf("TestCase %s()-%d line %d failed %s: ",
7986 			__func__, i, __LINE__, "Failed to allocate session");
7987 		ret = TEST_FAILED;
7988 		goto on_err;
7989 	}
7990 
7991 	/* Generate crypto op data structure */
7992 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7993 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7994 	if (!ut_params->op) {
7995 		printf("TestCase %s()-%d line %d failed %s: ",
7996 			__func__, i, __LINE__,
7997 			"Failed to allocate symmetric crypto operation struct");
7998 		ret = TEST_FAILED;
7999 		goto on_err;
8000 	}
8001 
8002 	rte_security_attach_session(ut_params->op, ut_params->sec_session);
8003 
8004 	/* set crypto operation source mbuf */
8005 	ut_params->op->sym->m_src = ut_params->ibuf;
8006 	if (oop)
8007 		ut_params->op->sym->m_dst = ut_params->obuf;
8008 
8009 	/* Process crypto operation */
8010 	if (process_crypto_request(ts_params->valid_devs[0], ut_params->op)
8011 		== NULL) {
8012 		printf("TestCase %s()-%d line %d failed %s: ",
8013 			__func__, i, __LINE__,
8014 			"failed to process sym crypto op");
8015 		ret = TEST_FAILED;
8016 		goto on_err;
8017 	}
8018 
8019 	if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
8020 		printf("TestCase %s()-%d line %d failed %s: ",
8021 			__func__, i, __LINE__, "crypto op processing failed");
8022 		ret = TEST_FAILED;
8023 		goto on_err;
8024 	}
8025 
8026 	/* Validate obuf */
8027 	uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
8028 			uint8_t *);
8029 	if (oop) {
8030 		ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
8031 				uint8_t *);
8032 	}
8033 
8034 	if (memcmp(ciphertext, output_vec, output_vec_len)) {
8035 		printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
8036 		rte_hexdump(stdout, "encrypted", ciphertext, output_vec_len);
8037 		rte_hexdump(stdout, "reference", output_vec, output_vec_len);
8038 		ret = TEST_FAILED;
8039 		goto on_err;
8040 	}
8041 
8042 on_err:
8043 	rte_crypto_op_free(ut_params->op);
8044 	ut_params->op = NULL;
8045 
8046 	if (ut_params->sec_session)
8047 		rte_security_session_destroy(ctx, ut_params->sec_session);
8048 	ut_params->sec_session = NULL;
8049 
8050 	rte_pktmbuf_free(ut_params->ibuf);
8051 	ut_params->ibuf = NULL;
8052 	if (oop) {
8053 		rte_pktmbuf_free(ut_params->obuf);
8054 		ut_params->obuf = NULL;
8055 	}
8056 
8057 	return ret;
8058 }
8059 
8060 static int
8061 test_pdcp_proto_SGL(int i, int oop,
8062 	enum rte_crypto_cipher_operation opc,
8063 	enum rte_crypto_auth_operation opa,
8064 	uint8_t *input_vec,
8065 	unsigned int input_vec_len,
8066 	uint8_t *output_vec,
8067 	unsigned int output_vec_len,
8068 	uint32_t fragsz,
8069 	uint32_t fragsz_oop)
8070 {
8071 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8072 	struct crypto_unittest_params *ut_params = &unittest_params;
8073 	uint8_t *plaintext;
8074 	struct rte_mbuf *buf, *buf_oop = NULL;
8075 	int ret = TEST_SUCCESS;
8076 	int to_trn = 0;
8077 	int to_trn_tbl[16];
8078 	int segs = 1;
8079 	unsigned int trn_data = 0;
8080 
8081 	if (fragsz > input_vec_len)
8082 		fragsz = input_vec_len;
8083 
8084 	uint16_t plaintext_len = fragsz;
8085 	uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
8086 
8087 	if (fragsz_oop > output_vec_len)
8088 		frag_size_oop = output_vec_len;
8089 
8090 	int ecx = 0;
8091 	if (input_vec_len % fragsz != 0) {
8092 		if (input_vec_len / fragsz + 1 > 16)
8093 			return 1;
8094 	} else if (input_vec_len / fragsz > 16)
8095 		return 1;
8096 
8097 	/* Out of place support */
8098 	if (oop) {
8099 		/*
8100 		 * For out-op-place we need to alloc another mbuf
8101 		 */
8102 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8103 		rte_pktmbuf_append(ut_params->obuf, frag_size_oop);
8104 		buf_oop = ut_params->obuf;
8105 	}
8106 
8107 	/* Generate test mbuf data */
8108 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8109 
8110 	/* clear mbuf payload */
8111 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8112 			rte_pktmbuf_tailroom(ut_params->ibuf));
8113 
8114 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
8115 						  plaintext_len);
8116 	memcpy(plaintext, input_vec, plaintext_len);
8117 	trn_data += plaintext_len;
8118 
8119 	buf = ut_params->ibuf;
8120 
8121 	/*
8122 	 * Loop until no more fragments
8123 	 */
8124 
8125 	while (trn_data < input_vec_len) {
8126 		++segs;
8127 		to_trn = (input_vec_len - trn_data < fragsz) ?
8128 				(input_vec_len - trn_data) : fragsz;
8129 
8130 		to_trn_tbl[ecx++] = to_trn;
8131 
8132 		buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8133 		buf = buf->next;
8134 
8135 		memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
8136 				rte_pktmbuf_tailroom(buf));
8137 
8138 		/* OOP */
8139 		if (oop && !fragsz_oop) {
8140 			buf_oop->next =
8141 					rte_pktmbuf_alloc(ts_params->mbuf_pool);
8142 			buf_oop = buf_oop->next;
8143 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
8144 					0, rte_pktmbuf_tailroom(buf_oop));
8145 			rte_pktmbuf_append(buf_oop, to_trn);
8146 		}
8147 
8148 		plaintext = (uint8_t *)rte_pktmbuf_append(buf,
8149 				to_trn);
8150 
8151 		memcpy(plaintext, input_vec + trn_data, to_trn);
8152 		trn_data += to_trn;
8153 	}
8154 
8155 	ut_params->ibuf->nb_segs = segs;
8156 
8157 	segs = 1;
8158 	if (fragsz_oop && oop) {
8159 		to_trn = 0;
8160 		ecx = 0;
8161 
8162 		trn_data = frag_size_oop;
8163 		while (trn_data < output_vec_len) {
8164 			++segs;
8165 			to_trn =
8166 				(output_vec_len - trn_data <
8167 						frag_size_oop) ?
8168 				(output_vec_len - trn_data) :
8169 						frag_size_oop;
8170 
8171 			to_trn_tbl[ecx++] = to_trn;
8172 
8173 			buf_oop->next =
8174 				rte_pktmbuf_alloc(ts_params->mbuf_pool);
8175 			buf_oop = buf_oop->next;
8176 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
8177 					0, rte_pktmbuf_tailroom(buf_oop));
8178 			rte_pktmbuf_append(buf_oop, to_trn);
8179 
8180 			trn_data += to_trn;
8181 		}
8182 		ut_params->obuf->nb_segs = segs;
8183 	}
8184 
8185 	ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL;
8186 
8187 	/* Setup Cipher Parameters */
8188 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
8189 	ut_params->cipher_xform.cipher.algo = pdcp_test_params[i].cipher_alg;
8190 	ut_params->cipher_xform.cipher.op = opc;
8191 	ut_params->cipher_xform.cipher.key.data = pdcp_test_crypto_key[i];
8192 	ut_params->cipher_xform.cipher.key.length =
8193 					pdcp_test_params[i].cipher_key_len;
8194 	ut_params->cipher_xform.cipher.iv.length = 0;
8195 
8196 	/* Setup HMAC Parameters if ICV header is required */
8197 	if (pdcp_test_params[i].auth_alg != 0) {
8198 		ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
8199 		ut_params->auth_xform.next = NULL;
8200 		ut_params->auth_xform.auth.algo = pdcp_test_params[i].auth_alg;
8201 		ut_params->auth_xform.auth.op = opa;
8202 		ut_params->auth_xform.auth.key.data = pdcp_test_auth_key[i];
8203 		ut_params->auth_xform.auth.key.length =
8204 					pdcp_test_params[i].auth_key_len;
8205 
8206 		ut_params->cipher_xform.next = &ut_params->auth_xform;
8207 	} else {
8208 		ut_params->cipher_xform.next = NULL;
8209 	}
8210 
8211 	struct rte_security_session_conf sess_conf = {
8212 		.action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
8213 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
8214 		{.pdcp = {
8215 			.bearer = pdcp_test_bearer[i],
8216 			.domain = pdcp_test_params[i].domain,
8217 			.pkt_dir = pdcp_test_packet_direction[i],
8218 			.sn_size = pdcp_test_data_sn_size[i],
8219 			.hfn = pdcp_test_hfn[i],
8220 			.hfn_threshold = pdcp_test_hfn_threshold[i],
8221 		} },
8222 		.crypto_xform = &ut_params->cipher_xform
8223 	};
8224 
8225 	struct rte_security_ctx *ctx = (struct rte_security_ctx *)
8226 				rte_cryptodev_get_sec_ctx(
8227 				ts_params->valid_devs[0]);
8228 
8229 	/* Create security session */
8230 	ut_params->sec_session = rte_security_session_create(ctx,
8231 				&sess_conf, ts_params->session_priv_mpool);
8232 
8233 	if (!ut_params->sec_session) {
8234 		printf("TestCase %s()-%d line %d failed %s: ",
8235 			__func__, i, __LINE__, "Failed to allocate session");
8236 		ret = TEST_FAILED;
8237 		goto on_err;
8238 	}
8239 
8240 	/* Generate crypto op data structure */
8241 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
8242 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
8243 	if (!ut_params->op) {
8244 		printf("TestCase %s()-%d line %d failed %s: ",
8245 			__func__, i, __LINE__,
8246 			"Failed to allocate symmetric crypto operation struct");
8247 		ret = TEST_FAILED;
8248 		goto on_err;
8249 	}
8250 
8251 	rte_security_attach_session(ut_params->op, ut_params->sec_session);
8252 
8253 	/* set crypto operation source mbuf */
8254 	ut_params->op->sym->m_src = ut_params->ibuf;
8255 	if (oop)
8256 		ut_params->op->sym->m_dst = ut_params->obuf;
8257 
8258 	/* Process crypto operation */
8259 	if (process_crypto_request(ts_params->valid_devs[0], ut_params->op)
8260 		== NULL) {
8261 		printf("TestCase %s()-%d line %d failed %s: ",
8262 			__func__, i, __LINE__,
8263 			"failed to process sym crypto op");
8264 		ret = TEST_FAILED;
8265 		goto on_err;
8266 	}
8267 
8268 	if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
8269 		printf("TestCase %s()-%d line %d failed %s: ",
8270 			__func__, i, __LINE__, "crypto op processing failed");
8271 		ret = TEST_FAILED;
8272 		goto on_err;
8273 	}
8274 
8275 	/* Validate obuf */
8276 	uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
8277 			uint8_t *);
8278 	if (oop) {
8279 		ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
8280 				uint8_t *);
8281 	}
8282 	if (fragsz_oop)
8283 		fragsz = frag_size_oop;
8284 	if (memcmp(ciphertext, output_vec, fragsz)) {
8285 		printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
8286 		rte_hexdump(stdout, "encrypted", ciphertext, fragsz);
8287 		rte_hexdump(stdout, "reference", output_vec, fragsz);
8288 		ret = TEST_FAILED;
8289 		goto on_err;
8290 	}
8291 
8292 	buf = ut_params->op->sym->m_src->next;
8293 	if (oop)
8294 		buf = ut_params->op->sym->m_dst->next;
8295 
8296 	unsigned int off = fragsz;
8297 
8298 	ecx = 0;
8299 	while (buf) {
8300 		ciphertext = rte_pktmbuf_mtod(buf,
8301 				uint8_t *);
8302 		if (memcmp(ciphertext, output_vec + off, to_trn_tbl[ecx])) {
8303 			printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i);
8304 			rte_hexdump(stdout, "encrypted", ciphertext, to_trn_tbl[ecx]);
8305 			rte_hexdump(stdout, "reference", output_vec + off,
8306 					to_trn_tbl[ecx]);
8307 			ret = TEST_FAILED;
8308 			goto on_err;
8309 		}
8310 		off += to_trn_tbl[ecx++];
8311 		buf = buf->next;
8312 	}
8313 on_err:
8314 	rte_crypto_op_free(ut_params->op);
8315 	ut_params->op = NULL;
8316 
8317 	if (ut_params->sec_session)
8318 		rte_security_session_destroy(ctx, ut_params->sec_session);
8319 	ut_params->sec_session = NULL;
8320 
8321 	rte_pktmbuf_free(ut_params->ibuf);
8322 	ut_params->ibuf = NULL;
8323 	if (oop) {
8324 		rte_pktmbuf_free(ut_params->obuf);
8325 		ut_params->obuf = NULL;
8326 	}
8327 
8328 	return ret;
8329 }
8330 
8331 int
8332 test_pdcp_proto_cplane_encap(int i)
8333 {
8334 	return test_pdcp_proto(i, 0,
8335 		RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8336 		RTE_CRYPTO_AUTH_OP_GENERATE,
8337 		pdcp_test_data_in[i],
8338 		pdcp_test_data_in_len[i],
8339 		pdcp_test_data_out[i],
8340 		pdcp_test_data_in_len[i]+4);
8341 }
8342 
8343 int
8344 test_pdcp_proto_uplane_encap(int i)
8345 {
8346 	return test_pdcp_proto(i, 0,
8347 		RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8348 		RTE_CRYPTO_AUTH_OP_GENERATE,
8349 		pdcp_test_data_in[i],
8350 		pdcp_test_data_in_len[i],
8351 		pdcp_test_data_out[i],
8352 		pdcp_test_data_in_len[i]);
8353 
8354 }
8355 
8356 int
8357 test_pdcp_proto_uplane_encap_with_int(int i)
8358 {
8359 	return test_pdcp_proto(i, 0,
8360 		RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8361 		RTE_CRYPTO_AUTH_OP_GENERATE,
8362 		pdcp_test_data_in[i],
8363 		pdcp_test_data_in_len[i],
8364 		pdcp_test_data_out[i],
8365 		pdcp_test_data_in_len[i] + 4);
8366 }
8367 
8368 int
8369 test_pdcp_proto_cplane_decap(int i)
8370 {
8371 	return test_pdcp_proto(i, 0,
8372 		RTE_CRYPTO_CIPHER_OP_DECRYPT,
8373 		RTE_CRYPTO_AUTH_OP_VERIFY,
8374 		pdcp_test_data_out[i],
8375 		pdcp_test_data_in_len[i] + 4,
8376 		pdcp_test_data_in[i],
8377 		pdcp_test_data_in_len[i]);
8378 }
8379 
8380 int
8381 test_pdcp_proto_uplane_decap(int i)
8382 {
8383 	return test_pdcp_proto(i, 0,
8384 		RTE_CRYPTO_CIPHER_OP_DECRYPT,
8385 		RTE_CRYPTO_AUTH_OP_VERIFY,
8386 		pdcp_test_data_out[i],
8387 		pdcp_test_data_in_len[i],
8388 		pdcp_test_data_in[i],
8389 		pdcp_test_data_in_len[i]);
8390 }
8391 
8392 int
8393 test_pdcp_proto_uplane_decap_with_int(int i)
8394 {
8395 	return test_pdcp_proto(i, 0,
8396 		RTE_CRYPTO_CIPHER_OP_DECRYPT,
8397 		RTE_CRYPTO_AUTH_OP_VERIFY,
8398 		pdcp_test_data_out[i],
8399 		pdcp_test_data_in_len[i] + 4,
8400 		pdcp_test_data_in[i],
8401 		pdcp_test_data_in_len[i]);
8402 }
8403 
8404 static int
8405 test_PDCP_PROTO_SGL_in_place_32B(void)
8406 {
8407 	/* i can be used for running any PDCP case
8408 	 * In this case it is uplane 12-bit AES-SNOW DL encap
8409 	 */
8410 	int i = PDCP_UPLANE_12BIT_OFFSET + AES_ENC + SNOW_AUTH + DOWNLINK;
8411 	return test_pdcp_proto_SGL(i, IN_PLACE,
8412 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8413 			RTE_CRYPTO_AUTH_OP_GENERATE,
8414 			pdcp_test_data_in[i],
8415 			pdcp_test_data_in_len[i],
8416 			pdcp_test_data_out[i],
8417 			pdcp_test_data_in_len[i]+4,
8418 			32, 0);
8419 }
8420 static int
8421 test_PDCP_PROTO_SGL_oop_32B_128B(void)
8422 {
8423 	/* i can be used for running any PDCP case
8424 	 * In this case it is uplane 18-bit NULL-NULL DL encap
8425 	 */
8426 	int i = PDCP_UPLANE_18BIT_OFFSET + NULL_ENC + NULL_AUTH + DOWNLINK;
8427 	return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8428 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8429 			RTE_CRYPTO_AUTH_OP_GENERATE,
8430 			pdcp_test_data_in[i],
8431 			pdcp_test_data_in_len[i],
8432 			pdcp_test_data_out[i],
8433 			pdcp_test_data_in_len[i]+4,
8434 			32, 128);
8435 }
8436 static int
8437 test_PDCP_PROTO_SGL_oop_32B_40B(void)
8438 {
8439 	/* i can be used for running any PDCP case
8440 	 * In this case it is uplane 18-bit AES DL encap
8441 	 */
8442 	int i = PDCP_UPLANE_OFFSET + AES_ENC + EIGHTEEN_BIT_SEQ_NUM_OFFSET
8443 			+ DOWNLINK;
8444 	return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8445 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8446 			RTE_CRYPTO_AUTH_OP_GENERATE,
8447 			pdcp_test_data_in[i],
8448 			pdcp_test_data_in_len[i],
8449 			pdcp_test_data_out[i],
8450 			pdcp_test_data_in_len[i],
8451 			32, 40);
8452 }
8453 static int
8454 test_PDCP_PROTO_SGL_oop_128B_32B(void)
8455 {
8456 	/* i can be used for running any PDCP case
8457 	 * In this case it is cplane 12-bit AES-ZUC DL encap
8458 	 */
8459 	int i = PDCP_CPLANE_LONG_SN_OFFSET + AES_ENC + ZUC_AUTH + DOWNLINK;
8460 	return test_pdcp_proto_SGL(i, OUT_OF_PLACE,
8461 			RTE_CRYPTO_CIPHER_OP_ENCRYPT,
8462 			RTE_CRYPTO_AUTH_OP_GENERATE,
8463 			pdcp_test_data_in[i],
8464 			pdcp_test_data_in_len[i],
8465 			pdcp_test_data_out[i],
8466 			pdcp_test_data_in_len[i]+4,
8467 			128, 32);
8468 }
8469 #endif
8470 
8471 static int
8472 test_AES_GCM_authenticated_encryption_test_case_1(void)
8473 {
8474 	return test_authenticated_encryption(&gcm_test_case_1);
8475 }
8476 
8477 static int
8478 test_AES_GCM_authenticated_encryption_test_case_2(void)
8479 {
8480 	return test_authenticated_encryption(&gcm_test_case_2);
8481 }
8482 
8483 static int
8484 test_AES_GCM_authenticated_encryption_test_case_3(void)
8485 {
8486 	return test_authenticated_encryption(&gcm_test_case_3);
8487 }
8488 
8489 static int
8490 test_AES_GCM_authenticated_encryption_test_case_4(void)
8491 {
8492 	return test_authenticated_encryption(&gcm_test_case_4);
8493 }
8494 
8495 static int
8496 test_AES_GCM_authenticated_encryption_test_case_5(void)
8497 {
8498 	return test_authenticated_encryption(&gcm_test_case_5);
8499 }
8500 
8501 static int
8502 test_AES_GCM_authenticated_encryption_test_case_6(void)
8503 {
8504 	return test_authenticated_encryption(&gcm_test_case_6);
8505 }
8506 
8507 static int
8508 test_AES_GCM_authenticated_encryption_test_case_7(void)
8509 {
8510 	return test_authenticated_encryption(&gcm_test_case_7);
8511 }
8512 
8513 static int
8514 test_AES_GCM_authenticated_encryption_test_case_8(void)
8515 {
8516 	return test_authenticated_encryption(&gcm_test_case_8);
8517 }
8518 
8519 static int
8520 test_AES_GCM_auth_encryption_test_case_192_1(void)
8521 {
8522 	return test_authenticated_encryption(&gcm_test_case_192_1);
8523 }
8524 
8525 static int
8526 test_AES_GCM_auth_encryption_test_case_192_2(void)
8527 {
8528 	return test_authenticated_encryption(&gcm_test_case_192_2);
8529 }
8530 
8531 static int
8532 test_AES_GCM_auth_encryption_test_case_192_3(void)
8533 {
8534 	return test_authenticated_encryption(&gcm_test_case_192_3);
8535 }
8536 
8537 static int
8538 test_AES_GCM_auth_encryption_test_case_192_4(void)
8539 {
8540 	return test_authenticated_encryption(&gcm_test_case_192_4);
8541 }
8542 
8543 static int
8544 test_AES_GCM_auth_encryption_test_case_192_5(void)
8545 {
8546 	return test_authenticated_encryption(&gcm_test_case_192_5);
8547 }
8548 
8549 static int
8550 test_AES_GCM_auth_encryption_test_case_192_6(void)
8551 {
8552 	return test_authenticated_encryption(&gcm_test_case_192_6);
8553 }
8554 
8555 static int
8556 test_AES_GCM_auth_encryption_test_case_192_7(void)
8557 {
8558 	return test_authenticated_encryption(&gcm_test_case_192_7);
8559 }
8560 
8561 static int
8562 test_AES_GCM_auth_encryption_test_case_256_1(void)
8563 {
8564 	return test_authenticated_encryption(&gcm_test_case_256_1);
8565 }
8566 
8567 static int
8568 test_AES_GCM_auth_encryption_test_case_256_2(void)
8569 {
8570 	return test_authenticated_encryption(&gcm_test_case_256_2);
8571 }
8572 
8573 static int
8574 test_AES_GCM_auth_encryption_test_case_256_3(void)
8575 {
8576 	return test_authenticated_encryption(&gcm_test_case_256_3);
8577 }
8578 
8579 static int
8580 test_AES_GCM_auth_encryption_test_case_256_4(void)
8581 {
8582 	return test_authenticated_encryption(&gcm_test_case_256_4);
8583 }
8584 
8585 static int
8586 test_AES_GCM_auth_encryption_test_case_256_5(void)
8587 {
8588 	return test_authenticated_encryption(&gcm_test_case_256_5);
8589 }
8590 
8591 static int
8592 test_AES_GCM_auth_encryption_test_case_256_6(void)
8593 {
8594 	return test_authenticated_encryption(&gcm_test_case_256_6);
8595 }
8596 
8597 static int
8598 test_AES_GCM_auth_encryption_test_case_256_7(void)
8599 {
8600 	return test_authenticated_encryption(&gcm_test_case_256_7);
8601 }
8602 
8603 static int
8604 test_AES_GCM_auth_encryption_test_case_aad_1(void)
8605 {
8606 	return test_authenticated_encryption(&gcm_test_case_aad_1);
8607 }
8608 
8609 static int
8610 test_AES_GCM_auth_encryption_test_case_aad_2(void)
8611 {
8612 	return test_authenticated_encryption(&gcm_test_case_aad_2);
8613 }
8614 
8615 static int
8616 test_AES_GCM_auth_encryption_fail_iv_corrupt(void)
8617 {
8618 	struct aead_test_data tdata;
8619 	int res;
8620 
8621 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8622 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8623 	tdata.iv.data[0] += 1;
8624 	res = test_authenticated_encryption(&tdata);
8625 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8626 	return TEST_SUCCESS;
8627 }
8628 
8629 static int
8630 test_AES_GCM_auth_encryption_fail_in_data_corrupt(void)
8631 {
8632 	struct aead_test_data tdata;
8633 	int res;
8634 
8635 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8636 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8637 	tdata.plaintext.data[0] += 1;
8638 	res = test_authenticated_encryption(&tdata);
8639 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8640 	return TEST_SUCCESS;
8641 }
8642 
8643 static int
8644 test_AES_GCM_auth_encryption_fail_out_data_corrupt(void)
8645 {
8646 	struct aead_test_data tdata;
8647 	int res;
8648 
8649 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8650 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8651 	tdata.ciphertext.data[0] += 1;
8652 	res = test_authenticated_encryption(&tdata);
8653 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8654 	return TEST_SUCCESS;
8655 }
8656 
8657 static int
8658 test_AES_GCM_auth_encryption_fail_aad_len_corrupt(void)
8659 {
8660 	struct aead_test_data tdata;
8661 	int res;
8662 
8663 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8664 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8665 	tdata.aad.len += 1;
8666 	res = test_authenticated_encryption(&tdata);
8667 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8668 	return TEST_SUCCESS;
8669 }
8670 
8671 static int
8672 test_AES_GCM_auth_encryption_fail_aad_corrupt(void)
8673 {
8674 	struct aead_test_data tdata;
8675 	uint8_t aad[gcm_test_case_7.aad.len];
8676 	int res;
8677 
8678 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8679 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8680 	memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len);
8681 	aad[0] += 1;
8682 	tdata.aad.data = aad;
8683 	res = test_authenticated_encryption(&tdata);
8684 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8685 	return TEST_SUCCESS;
8686 }
8687 
8688 static int
8689 test_AES_GCM_auth_encryption_fail_tag_corrupt(void)
8690 {
8691 	struct aead_test_data tdata;
8692 	int res;
8693 
8694 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8695 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8696 	tdata.auth_tag.data[0] += 1;
8697 	res = test_authenticated_encryption(&tdata);
8698 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed");
8699 	return TEST_SUCCESS;
8700 }
8701 
8702 static int
8703 test_authenticated_decryption(const struct aead_test_data *tdata)
8704 {
8705 	struct crypto_testsuite_params *ts_params = &testsuite_params;
8706 	struct crypto_unittest_params *ut_params = &unittest_params;
8707 
8708 	int retval;
8709 	uint8_t *plaintext;
8710 	uint32_t i;
8711 
8712 	/* Create AEAD session */
8713 	retval = create_aead_session(ts_params->valid_devs[0],
8714 			tdata->algo,
8715 			RTE_CRYPTO_AEAD_OP_DECRYPT,
8716 			tdata->key.data, tdata->key.len,
8717 			tdata->aad.len, tdata->auth_tag.len,
8718 			tdata->iv.len);
8719 	if (retval < 0)
8720 		return retval;
8721 
8722 	/* alloc mbuf and set payload */
8723 	if (tdata->aad.len > MBUF_SIZE) {
8724 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
8725 		/* Populate full size of add data */
8726 		for (i = 32; i < MAX_AAD_LENGTH; i += 32)
8727 			memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
8728 	} else
8729 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
8730 
8731 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
8732 			rte_pktmbuf_tailroom(ut_params->ibuf));
8733 
8734 	/* Create AEAD operation */
8735 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
8736 	if (retval < 0)
8737 		return retval;
8738 
8739 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
8740 
8741 	ut_params->op->sym->m_src = ut_params->ibuf;
8742 
8743 	/* Process crypto operation */
8744 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
8745 			ut_params->op), "failed to process sym crypto op");
8746 
8747 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
8748 			"crypto op processing failed");
8749 
8750 	if (ut_params->op->sym->m_dst)
8751 		plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
8752 				uint8_t *);
8753 	else
8754 		plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
8755 				uint8_t *,
8756 				ut_params->op->sym->cipher.data.offset);
8757 
8758 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
8759 
8760 	/* Validate obuf */
8761 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
8762 			plaintext,
8763 			tdata->plaintext.data,
8764 			tdata->plaintext.len,
8765 			"Plaintext data not as expected");
8766 
8767 	TEST_ASSERT_EQUAL(ut_params->op->status,
8768 			RTE_CRYPTO_OP_STATUS_SUCCESS,
8769 			"Authentication failed");
8770 
8771 	return 0;
8772 }
8773 
8774 static int
8775 test_AES_GCM_authenticated_decryption_test_case_1(void)
8776 {
8777 	return test_authenticated_decryption(&gcm_test_case_1);
8778 }
8779 
8780 static int
8781 test_AES_GCM_authenticated_decryption_test_case_2(void)
8782 {
8783 	return test_authenticated_decryption(&gcm_test_case_2);
8784 }
8785 
8786 static int
8787 test_AES_GCM_authenticated_decryption_test_case_3(void)
8788 {
8789 	return test_authenticated_decryption(&gcm_test_case_3);
8790 }
8791 
8792 static int
8793 test_AES_GCM_authenticated_decryption_test_case_4(void)
8794 {
8795 	return test_authenticated_decryption(&gcm_test_case_4);
8796 }
8797 
8798 static int
8799 test_AES_GCM_authenticated_decryption_test_case_5(void)
8800 {
8801 	return test_authenticated_decryption(&gcm_test_case_5);
8802 }
8803 
8804 static int
8805 test_AES_GCM_authenticated_decryption_test_case_6(void)
8806 {
8807 	return test_authenticated_decryption(&gcm_test_case_6);
8808 }
8809 
8810 static int
8811 test_AES_GCM_authenticated_decryption_test_case_7(void)
8812 {
8813 	return test_authenticated_decryption(&gcm_test_case_7);
8814 }
8815 
8816 static int
8817 test_AES_GCM_authenticated_decryption_test_case_8(void)
8818 {
8819 	return test_authenticated_decryption(&gcm_test_case_8);
8820 }
8821 
8822 static int
8823 test_AES_GCM_auth_decryption_test_case_192_1(void)
8824 {
8825 	return test_authenticated_decryption(&gcm_test_case_192_1);
8826 }
8827 
8828 static int
8829 test_AES_GCM_auth_decryption_test_case_192_2(void)
8830 {
8831 	return test_authenticated_decryption(&gcm_test_case_192_2);
8832 }
8833 
8834 static int
8835 test_AES_GCM_auth_decryption_test_case_192_3(void)
8836 {
8837 	return test_authenticated_decryption(&gcm_test_case_192_3);
8838 }
8839 
8840 static int
8841 test_AES_GCM_auth_decryption_test_case_192_4(void)
8842 {
8843 	return test_authenticated_decryption(&gcm_test_case_192_4);
8844 }
8845 
8846 static int
8847 test_AES_GCM_auth_decryption_test_case_192_5(void)
8848 {
8849 	return test_authenticated_decryption(&gcm_test_case_192_5);
8850 }
8851 
8852 static int
8853 test_AES_GCM_auth_decryption_test_case_192_6(void)
8854 {
8855 	return test_authenticated_decryption(&gcm_test_case_192_6);
8856 }
8857 
8858 static int
8859 test_AES_GCM_auth_decryption_test_case_192_7(void)
8860 {
8861 	return test_authenticated_decryption(&gcm_test_case_192_7);
8862 }
8863 
8864 static int
8865 test_AES_GCM_auth_decryption_test_case_256_1(void)
8866 {
8867 	return test_authenticated_decryption(&gcm_test_case_256_1);
8868 }
8869 
8870 static int
8871 test_AES_GCM_auth_decryption_test_case_256_2(void)
8872 {
8873 	return test_authenticated_decryption(&gcm_test_case_256_2);
8874 }
8875 
8876 static int
8877 test_AES_GCM_auth_decryption_test_case_256_3(void)
8878 {
8879 	return test_authenticated_decryption(&gcm_test_case_256_3);
8880 }
8881 
8882 static int
8883 test_AES_GCM_auth_decryption_test_case_256_4(void)
8884 {
8885 	return test_authenticated_decryption(&gcm_test_case_256_4);
8886 }
8887 
8888 static int
8889 test_AES_GCM_auth_decryption_test_case_256_5(void)
8890 {
8891 	return test_authenticated_decryption(&gcm_test_case_256_5);
8892 }
8893 
8894 static int
8895 test_AES_GCM_auth_decryption_test_case_256_6(void)
8896 {
8897 	return test_authenticated_decryption(&gcm_test_case_256_6);
8898 }
8899 
8900 static int
8901 test_AES_GCM_auth_decryption_test_case_256_7(void)
8902 {
8903 	return test_authenticated_decryption(&gcm_test_case_256_7);
8904 }
8905 
8906 static int
8907 test_AES_GCM_auth_decryption_test_case_aad_1(void)
8908 {
8909 	return test_authenticated_decryption(&gcm_test_case_aad_1);
8910 }
8911 
8912 static int
8913 test_AES_GCM_auth_decryption_test_case_aad_2(void)
8914 {
8915 	return test_authenticated_decryption(&gcm_test_case_aad_2);
8916 }
8917 
8918 static int
8919 test_AES_GCM_auth_decryption_fail_iv_corrupt(void)
8920 {
8921 	struct aead_test_data tdata;
8922 	int res;
8923 
8924 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8925 	tdata.iv.data[0] += 1;
8926 	res = test_authenticated_decryption(&tdata);
8927 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
8928 	return TEST_SUCCESS;
8929 }
8930 
8931 static int
8932 test_AES_GCM_auth_decryption_fail_in_data_corrupt(void)
8933 {
8934 	struct aead_test_data tdata;
8935 	int res;
8936 
8937 	RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n");
8938 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8939 	tdata.plaintext.data[0] += 1;
8940 	res = test_authenticated_decryption(&tdata);
8941 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
8942 	return TEST_SUCCESS;
8943 }
8944 
8945 static int
8946 test_AES_GCM_auth_decryption_fail_out_data_corrupt(void)
8947 {
8948 	struct aead_test_data tdata;
8949 	int res;
8950 
8951 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8952 	tdata.ciphertext.data[0] += 1;
8953 	res = test_authenticated_decryption(&tdata);
8954 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
8955 	return TEST_SUCCESS;
8956 }
8957 
8958 static int
8959 test_AES_GCM_auth_decryption_fail_aad_len_corrupt(void)
8960 {
8961 	struct aead_test_data tdata;
8962 	int res;
8963 
8964 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8965 	tdata.aad.len += 1;
8966 	res = test_authenticated_decryption(&tdata);
8967 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
8968 	return TEST_SUCCESS;
8969 }
8970 
8971 static int
8972 test_AES_GCM_auth_decryption_fail_aad_corrupt(void)
8973 {
8974 	struct aead_test_data tdata;
8975 	uint8_t aad[gcm_test_case_7.aad.len];
8976 	int res;
8977 
8978 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8979 	memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len);
8980 	aad[0] += 1;
8981 	tdata.aad.data = aad;
8982 	res = test_authenticated_decryption(&tdata);
8983 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed");
8984 	return TEST_SUCCESS;
8985 }
8986 
8987 static int
8988 test_AES_GCM_auth_decryption_fail_tag_corrupt(void)
8989 {
8990 	struct aead_test_data tdata;
8991 	int res;
8992 
8993 	memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data));
8994 	tdata.auth_tag.data[0] += 1;
8995 	res = test_authenticated_decryption(&tdata);
8996 	TEST_ASSERT_EQUAL(res, TEST_FAILED, "authentication not failed");
8997 	return TEST_SUCCESS;
8998 }
8999 
9000 static int
9001 test_authenticated_encryption_oop(const struct aead_test_data *tdata)
9002 {
9003 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9004 	struct crypto_unittest_params *ut_params = &unittest_params;
9005 
9006 	int retval;
9007 	uint8_t *ciphertext, *auth_tag;
9008 	uint16_t plaintext_pad_len;
9009 
9010 	/* Create AEAD session */
9011 	retval = create_aead_session(ts_params->valid_devs[0],
9012 			tdata->algo,
9013 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
9014 			tdata->key.data, tdata->key.len,
9015 			tdata->aad.len, tdata->auth_tag.len,
9016 			tdata->iv.len);
9017 	if (retval < 0)
9018 		return retval;
9019 
9020 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9021 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9022 
9023 	/* clear mbuf payload */
9024 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9025 			rte_pktmbuf_tailroom(ut_params->ibuf));
9026 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
9027 			rte_pktmbuf_tailroom(ut_params->obuf));
9028 
9029 	/* Create AEAD operation */
9030 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
9031 	if (retval < 0)
9032 		return retval;
9033 
9034 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9035 
9036 	ut_params->op->sym->m_src = ut_params->ibuf;
9037 	ut_params->op->sym->m_dst = ut_params->obuf;
9038 
9039 	/* Process crypto operation */
9040 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9041 			ut_params->op), "failed to process sym crypto op");
9042 
9043 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9044 			"crypto op processing failed");
9045 
9046 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
9047 
9048 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
9049 			ut_params->op->sym->cipher.data.offset);
9050 	auth_tag = ciphertext + plaintext_pad_len;
9051 
9052 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
9053 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
9054 
9055 	/* Validate obuf */
9056 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9057 			ciphertext,
9058 			tdata->ciphertext.data,
9059 			tdata->ciphertext.len,
9060 			"Ciphertext data not as expected");
9061 
9062 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9063 			auth_tag,
9064 			tdata->auth_tag.data,
9065 			tdata->auth_tag.len,
9066 			"Generated auth tag not as expected");
9067 
9068 	return 0;
9069 
9070 }
9071 
9072 static int
9073 test_AES_GCM_authenticated_encryption_oop_test_case_1(void)
9074 {
9075 	return test_authenticated_encryption_oop(&gcm_test_case_5);
9076 }
9077 
9078 static int
9079 test_authenticated_decryption_oop(const struct aead_test_data *tdata)
9080 {
9081 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9082 	struct crypto_unittest_params *ut_params = &unittest_params;
9083 
9084 	int retval;
9085 	uint8_t *plaintext;
9086 
9087 	/* Create AEAD session */
9088 	retval = create_aead_session(ts_params->valid_devs[0],
9089 			tdata->algo,
9090 			RTE_CRYPTO_AEAD_OP_DECRYPT,
9091 			tdata->key.data, tdata->key.len,
9092 			tdata->aad.len, tdata->auth_tag.len,
9093 			tdata->iv.len);
9094 	if (retval < 0)
9095 		return retval;
9096 
9097 	/* alloc mbuf and set payload */
9098 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9099 	ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9100 
9101 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9102 			rte_pktmbuf_tailroom(ut_params->ibuf));
9103 	memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
9104 			rte_pktmbuf_tailroom(ut_params->obuf));
9105 
9106 	/* Create AEAD operation */
9107 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
9108 	if (retval < 0)
9109 		return retval;
9110 
9111 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9112 
9113 	ut_params->op->sym->m_src = ut_params->ibuf;
9114 	ut_params->op->sym->m_dst = ut_params->obuf;
9115 
9116 	/* Process crypto operation */
9117 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9118 			ut_params->op), "failed to process sym crypto op");
9119 
9120 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9121 			"crypto op processing failed");
9122 
9123 	plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
9124 			ut_params->op->sym->cipher.data.offset);
9125 
9126 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
9127 
9128 	/* Validate obuf */
9129 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9130 			plaintext,
9131 			tdata->plaintext.data,
9132 			tdata->plaintext.len,
9133 			"Plaintext data not as expected");
9134 
9135 	TEST_ASSERT_EQUAL(ut_params->op->status,
9136 			RTE_CRYPTO_OP_STATUS_SUCCESS,
9137 			"Authentication failed");
9138 	return 0;
9139 }
9140 
9141 static int
9142 test_AES_GCM_authenticated_decryption_oop_test_case_1(void)
9143 {
9144 	return test_authenticated_decryption_oop(&gcm_test_case_5);
9145 }
9146 
9147 static int
9148 test_authenticated_encryption_sessionless(
9149 		const struct aead_test_data *tdata)
9150 {
9151 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9152 	struct crypto_unittest_params *ut_params = &unittest_params;
9153 
9154 	int retval;
9155 	uint8_t *ciphertext, *auth_tag;
9156 	uint16_t plaintext_pad_len;
9157 	uint8_t key[tdata->key.len + 1];
9158 
9159 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9160 
9161 	/* clear mbuf payload */
9162 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9163 			rte_pktmbuf_tailroom(ut_params->ibuf));
9164 
9165 	/* Create AEAD operation */
9166 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
9167 	if (retval < 0)
9168 		return retval;
9169 
9170 	/* Create GCM xform */
9171 	memcpy(key, tdata->key.data, tdata->key.len);
9172 	retval = create_aead_xform(ut_params->op,
9173 			tdata->algo,
9174 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
9175 			key, tdata->key.len,
9176 			tdata->aad.len, tdata->auth_tag.len,
9177 			tdata->iv.len);
9178 	if (retval < 0)
9179 		return retval;
9180 
9181 	ut_params->op->sym->m_src = ut_params->ibuf;
9182 
9183 	TEST_ASSERT_EQUAL(ut_params->op->sess_type,
9184 			RTE_CRYPTO_OP_SESSIONLESS,
9185 			"crypto op session type not sessionless");
9186 
9187 	/* Process crypto operation */
9188 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9189 			ut_params->op), "failed to process sym crypto op");
9190 
9191 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9192 
9193 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9194 			"crypto op status not success");
9195 
9196 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
9197 
9198 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9199 			ut_params->op->sym->cipher.data.offset);
9200 	auth_tag = ciphertext + plaintext_pad_len;
9201 
9202 	debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
9203 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
9204 
9205 	/* Validate obuf */
9206 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9207 			ciphertext,
9208 			tdata->ciphertext.data,
9209 			tdata->ciphertext.len,
9210 			"Ciphertext data not as expected");
9211 
9212 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9213 			auth_tag,
9214 			tdata->auth_tag.data,
9215 			tdata->auth_tag.len,
9216 			"Generated auth tag not as expected");
9217 
9218 	return 0;
9219 
9220 }
9221 
9222 static int
9223 test_AES_GCM_authenticated_encryption_sessionless_test_case_1(void)
9224 {
9225 	return test_authenticated_encryption_sessionless(
9226 			&gcm_test_case_5);
9227 }
9228 
9229 static int
9230 test_authenticated_decryption_sessionless(
9231 		const struct aead_test_data *tdata)
9232 {
9233 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9234 	struct crypto_unittest_params *ut_params = &unittest_params;
9235 
9236 	int retval;
9237 	uint8_t *plaintext;
9238 	uint8_t key[tdata->key.len + 1];
9239 
9240 	/* alloc mbuf and set payload */
9241 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9242 
9243 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9244 			rte_pktmbuf_tailroom(ut_params->ibuf));
9245 
9246 	/* Create AEAD operation */
9247 	retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
9248 	if (retval < 0)
9249 		return retval;
9250 
9251 	/* Create AEAD xform */
9252 	memcpy(key, tdata->key.data, tdata->key.len);
9253 	retval = create_aead_xform(ut_params->op,
9254 			tdata->algo,
9255 			RTE_CRYPTO_AEAD_OP_DECRYPT,
9256 			key, tdata->key.len,
9257 			tdata->aad.len, tdata->auth_tag.len,
9258 			tdata->iv.len);
9259 	if (retval < 0)
9260 		return retval;
9261 
9262 	ut_params->op->sym->m_src = ut_params->ibuf;
9263 
9264 	TEST_ASSERT_EQUAL(ut_params->op->sess_type,
9265 			RTE_CRYPTO_OP_SESSIONLESS,
9266 			"crypto op session type not sessionless");
9267 
9268 	/* Process crypto operation */
9269 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9270 			ut_params->op), "failed to process sym crypto op");
9271 
9272 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
9273 
9274 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9275 			"crypto op status not success");
9276 
9277 	plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9278 			ut_params->op->sym->cipher.data.offset);
9279 
9280 	debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
9281 
9282 	/* Validate obuf */
9283 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9284 			plaintext,
9285 			tdata->plaintext.data,
9286 			tdata->plaintext.len,
9287 			"Plaintext data not as expected");
9288 
9289 	TEST_ASSERT_EQUAL(ut_params->op->status,
9290 			RTE_CRYPTO_OP_STATUS_SUCCESS,
9291 			"Authentication failed");
9292 	return 0;
9293 }
9294 
9295 static int
9296 test_AES_GCM_authenticated_decryption_sessionless_test_case_1(void)
9297 {
9298 	return test_authenticated_decryption_sessionless(
9299 			&gcm_test_case_5);
9300 }
9301 
9302 static int
9303 test_AES_CCM_authenticated_encryption_test_case_128_1(void)
9304 {
9305 	return test_authenticated_encryption(&ccm_test_case_128_1);
9306 }
9307 
9308 static int
9309 test_AES_CCM_authenticated_encryption_test_case_128_2(void)
9310 {
9311 	return test_authenticated_encryption(&ccm_test_case_128_2);
9312 }
9313 
9314 static int
9315 test_AES_CCM_authenticated_encryption_test_case_128_3(void)
9316 {
9317 	return test_authenticated_encryption(&ccm_test_case_128_3);
9318 }
9319 
9320 static int
9321 test_AES_CCM_authenticated_decryption_test_case_128_1(void)
9322 {
9323 	return test_authenticated_decryption(&ccm_test_case_128_1);
9324 }
9325 
9326 static int
9327 test_AES_CCM_authenticated_decryption_test_case_128_2(void)
9328 {
9329 	return test_authenticated_decryption(&ccm_test_case_128_2);
9330 }
9331 
9332 static int
9333 test_AES_CCM_authenticated_decryption_test_case_128_3(void)
9334 {
9335 	return test_authenticated_decryption(&ccm_test_case_128_3);
9336 }
9337 
9338 static int
9339 test_AES_CCM_authenticated_encryption_test_case_192_1(void)
9340 {
9341 	return test_authenticated_encryption(&ccm_test_case_192_1);
9342 }
9343 
9344 static int
9345 test_AES_CCM_authenticated_encryption_test_case_192_2(void)
9346 {
9347 	return test_authenticated_encryption(&ccm_test_case_192_2);
9348 }
9349 
9350 static int
9351 test_AES_CCM_authenticated_encryption_test_case_192_3(void)
9352 {
9353 	return test_authenticated_encryption(&ccm_test_case_192_3);
9354 }
9355 
9356 static int
9357 test_AES_CCM_authenticated_decryption_test_case_192_1(void)
9358 {
9359 	return test_authenticated_decryption(&ccm_test_case_192_1);
9360 }
9361 
9362 static int
9363 test_AES_CCM_authenticated_decryption_test_case_192_2(void)
9364 {
9365 	return test_authenticated_decryption(&ccm_test_case_192_2);
9366 }
9367 
9368 static int
9369 test_AES_CCM_authenticated_decryption_test_case_192_3(void)
9370 {
9371 	return test_authenticated_decryption(&ccm_test_case_192_3);
9372 }
9373 
9374 static int
9375 test_AES_CCM_authenticated_encryption_test_case_256_1(void)
9376 {
9377 	return test_authenticated_encryption(&ccm_test_case_256_1);
9378 }
9379 
9380 static int
9381 test_AES_CCM_authenticated_encryption_test_case_256_2(void)
9382 {
9383 	return test_authenticated_encryption(&ccm_test_case_256_2);
9384 }
9385 
9386 static int
9387 test_AES_CCM_authenticated_encryption_test_case_256_3(void)
9388 {
9389 	return test_authenticated_encryption(&ccm_test_case_256_3);
9390 }
9391 
9392 static int
9393 test_AES_CCM_authenticated_decryption_test_case_256_1(void)
9394 {
9395 	return test_authenticated_decryption(&ccm_test_case_256_1);
9396 }
9397 
9398 static int
9399 test_AES_CCM_authenticated_decryption_test_case_256_2(void)
9400 {
9401 	return test_authenticated_decryption(&ccm_test_case_256_2);
9402 }
9403 
9404 static int
9405 test_AES_CCM_authenticated_decryption_test_case_256_3(void)
9406 {
9407 	return test_authenticated_decryption(&ccm_test_case_256_3);
9408 }
9409 
9410 static int
9411 test_stats(void)
9412 {
9413 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9414 	struct rte_cryptodev_stats stats;
9415 	struct rte_cryptodev *dev;
9416 	cryptodev_stats_get_t temp_pfn;
9417 
9418 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
9419 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
9420 			&stats) == -ENODEV),
9421 		"rte_cryptodev_stats_get invalid dev failed");
9422 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
9423 		"rte_cryptodev_stats_get invalid Param failed");
9424 	dev = &rte_cryptodevs[ts_params->valid_devs[0]];
9425 	temp_pfn = dev->dev_ops->stats_get;
9426 	dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
9427 	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
9428 			== -ENOTSUP),
9429 		"rte_cryptodev_stats_get invalid Param failed");
9430 	dev->dev_ops->stats_get = temp_pfn;
9431 
9432 	/* Test expected values */
9433 	ut_setup();
9434 	test_AES_CBC_HMAC_SHA1_encrypt_digest();
9435 	ut_teardown();
9436 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
9437 			&stats),
9438 		"rte_cryptodev_stats_get failed");
9439 	TEST_ASSERT((stats.enqueued_count == 1),
9440 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9441 	TEST_ASSERT((stats.dequeued_count == 1),
9442 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9443 	TEST_ASSERT((stats.enqueue_err_count == 0),
9444 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9445 	TEST_ASSERT((stats.dequeue_err_count == 0),
9446 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9447 
9448 	/* invalid device but should ignore and not reset device stats*/
9449 	rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
9450 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
9451 			&stats),
9452 		"rte_cryptodev_stats_get failed");
9453 	TEST_ASSERT((stats.enqueued_count == 1),
9454 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9455 
9456 	/* check that a valid reset clears stats */
9457 	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
9458 	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
9459 			&stats),
9460 					  "rte_cryptodev_stats_get failed");
9461 	TEST_ASSERT((stats.enqueued_count == 0),
9462 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9463 	TEST_ASSERT((stats.dequeued_count == 0),
9464 		"rte_cryptodev_stats_get returned unexpected enqueued stat");
9465 
9466 	return TEST_SUCCESS;
9467 }
9468 
9469 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
9470 				   struct crypto_unittest_params *ut_params,
9471 				   enum rte_crypto_auth_operation op,
9472 				   const struct HMAC_MD5_vector *test_case)
9473 {
9474 	uint8_t key[64];
9475 
9476 	memcpy(key, test_case->key.data, test_case->key.len);
9477 
9478 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
9479 	ut_params->auth_xform.next = NULL;
9480 	ut_params->auth_xform.auth.op = op;
9481 
9482 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
9483 
9484 	ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
9485 	ut_params->auth_xform.auth.key.length = test_case->key.len;
9486 	ut_params->auth_xform.auth.key.data = key;
9487 
9488 	ut_params->sess = rte_cryptodev_sym_session_create(
9489 			ts_params->session_mpool);
9490 
9491 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
9492 			ut_params->sess, &ut_params->auth_xform,
9493 			ts_params->session_priv_mpool);
9494 
9495 	if (ut_params->sess == NULL)
9496 		return TEST_FAILED;
9497 
9498 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
9499 
9500 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
9501 			rte_pktmbuf_tailroom(ut_params->ibuf));
9502 
9503 	return 0;
9504 }
9505 
9506 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
9507 			      const struct HMAC_MD5_vector *test_case,
9508 			      uint8_t **plaintext)
9509 {
9510 	uint16_t plaintext_pad_len;
9511 
9512 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9513 
9514 	plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
9515 				16);
9516 
9517 	*plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
9518 			plaintext_pad_len);
9519 	memcpy(*plaintext, test_case->plaintext.data,
9520 			test_case->plaintext.len);
9521 
9522 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
9523 			ut_params->ibuf, MD5_DIGEST_LEN);
9524 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
9525 			"no room to append digest");
9526 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
9527 			ut_params->ibuf, plaintext_pad_len);
9528 
9529 	if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
9530 		rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
9531 			   test_case->auth_tag.len);
9532 	}
9533 
9534 	sym_op->auth.data.offset = 0;
9535 	sym_op->auth.data.length = test_case->plaintext.len;
9536 
9537 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9538 	ut_params->op->sym->m_src = ut_params->ibuf;
9539 
9540 	return 0;
9541 }
9542 
9543 static int
9544 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
9545 {
9546 	uint16_t plaintext_pad_len;
9547 	uint8_t *plaintext, *auth_tag;
9548 
9549 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9550 	struct crypto_unittest_params *ut_params = &unittest_params;
9551 
9552 	if (MD5_HMAC_create_session(ts_params, ut_params,
9553 			RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
9554 		return TEST_FAILED;
9555 
9556 	/* Generate Crypto op data structure */
9557 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9558 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9559 	TEST_ASSERT_NOT_NULL(ut_params->op,
9560 			"Failed to allocate symmetric crypto operation struct");
9561 
9562 	plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
9563 				16);
9564 
9565 	if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
9566 		return TEST_FAILED;
9567 
9568 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9569 			ut_params->op), "failed to process sym crypto op");
9570 
9571 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9572 			"crypto op processing failed");
9573 
9574 	if (ut_params->op->sym->m_dst) {
9575 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
9576 				uint8_t *, plaintext_pad_len);
9577 	} else {
9578 		auth_tag = plaintext + plaintext_pad_len;
9579 	}
9580 
9581 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9582 			auth_tag,
9583 			test_case->auth_tag.data,
9584 			test_case->auth_tag.len,
9585 			"HMAC_MD5 generated tag not as expected");
9586 
9587 	return TEST_SUCCESS;
9588 }
9589 
9590 static int
9591 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
9592 {
9593 	uint8_t *plaintext;
9594 
9595 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9596 	struct crypto_unittest_params *ut_params = &unittest_params;
9597 
9598 	if (MD5_HMAC_create_session(ts_params, ut_params,
9599 			RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
9600 		return TEST_FAILED;
9601 	}
9602 
9603 	/* Generate Crypto op data structure */
9604 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9605 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9606 	TEST_ASSERT_NOT_NULL(ut_params->op,
9607 			"Failed to allocate symmetric crypto operation struct");
9608 
9609 	if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
9610 		return TEST_FAILED;
9611 
9612 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
9613 			ut_params->op), "failed to process sym crypto op");
9614 
9615 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9616 			"HMAC_MD5 crypto op processing failed");
9617 
9618 	return TEST_SUCCESS;
9619 }
9620 
9621 static int
9622 test_MD5_HMAC_generate_case_1(void)
9623 {
9624 	return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
9625 }
9626 
9627 static int
9628 test_MD5_HMAC_verify_case_1(void)
9629 {
9630 	return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
9631 }
9632 
9633 static int
9634 test_MD5_HMAC_generate_case_2(void)
9635 {
9636 	return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
9637 }
9638 
9639 static int
9640 test_MD5_HMAC_verify_case_2(void)
9641 {
9642 	return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
9643 }
9644 
9645 static int
9646 test_multi_session(void)
9647 {
9648 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9649 	struct crypto_unittest_params *ut_params = &unittest_params;
9650 
9651 	struct rte_cryptodev_info dev_info;
9652 	struct rte_cryptodev_sym_session **sessions;
9653 
9654 	uint16_t i;
9655 
9656 	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
9657 			aes_cbc_key, hmac_sha512_key);
9658 
9659 
9660 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
9661 
9662 	sessions = rte_malloc(NULL,
9663 			(sizeof(struct rte_cryptodev_sym_session *) *
9664 			MAX_NB_SESSIONS) + 1, 0);
9665 
9666 	/* Create multiple crypto sessions*/
9667 	for (i = 0; i < MAX_NB_SESSIONS; i++) {
9668 
9669 		sessions[i] = rte_cryptodev_sym_session_create(
9670 				ts_params->session_mpool);
9671 
9672 		rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
9673 				sessions[i], &ut_params->auth_xform,
9674 				ts_params->session_priv_mpool);
9675 		TEST_ASSERT_NOT_NULL(sessions[i],
9676 				"Session creation failed at session number %u",
9677 				i);
9678 
9679 		/* Attempt to send a request on each session */
9680 		TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
9681 			sessions[i],
9682 			ut_params,
9683 			ts_params,
9684 			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
9685 			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
9686 			aes_cbc_iv),
9687 			"Failed to perform decrypt on request number %u.", i);
9688 		/* free crypto operation structure */
9689 		if (ut_params->op)
9690 			rte_crypto_op_free(ut_params->op);
9691 
9692 		/*
9693 		 * free mbuf - both obuf and ibuf are usually the same,
9694 		 * so check if they point at the same address is necessary,
9695 		 * to avoid freeing the mbuf twice.
9696 		 */
9697 		if (ut_params->obuf) {
9698 			rte_pktmbuf_free(ut_params->obuf);
9699 			if (ut_params->ibuf == ut_params->obuf)
9700 				ut_params->ibuf = 0;
9701 			ut_params->obuf = 0;
9702 		}
9703 		if (ut_params->ibuf) {
9704 			rte_pktmbuf_free(ut_params->ibuf);
9705 			ut_params->ibuf = 0;
9706 		}
9707 	}
9708 
9709 	/* Next session create should fail */
9710 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
9711 			sessions[i], &ut_params->auth_xform,
9712 			ts_params->session_priv_mpool);
9713 	TEST_ASSERT_NULL(sessions[i],
9714 			"Session creation succeeded unexpectedly!");
9715 
9716 	for (i = 0; i < MAX_NB_SESSIONS; i++) {
9717 		rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
9718 				sessions[i]);
9719 		rte_cryptodev_sym_session_free(sessions[i]);
9720 	}
9721 
9722 	rte_free(sessions);
9723 
9724 	return TEST_SUCCESS;
9725 }
9726 
9727 struct multi_session_params {
9728 	struct crypto_unittest_params ut_params;
9729 	uint8_t *cipher_key;
9730 	uint8_t *hmac_key;
9731 	const uint8_t *cipher;
9732 	const uint8_t *digest;
9733 	uint8_t *iv;
9734 };
9735 
9736 #define MB_SESSION_NUMBER 3
9737 
9738 static int
9739 test_multi_session_random_usage(void)
9740 {
9741 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9742 	struct rte_cryptodev_info dev_info;
9743 	struct rte_cryptodev_sym_session **sessions;
9744 	uint32_t i, j;
9745 	struct multi_session_params ut_paramz[] = {
9746 
9747 		{
9748 			.cipher_key = ms_aes_cbc_key0,
9749 			.hmac_key = ms_hmac_key0,
9750 			.cipher = ms_aes_cbc_cipher0,
9751 			.digest = ms_hmac_digest0,
9752 			.iv = ms_aes_cbc_iv0
9753 		},
9754 		{
9755 			.cipher_key = ms_aes_cbc_key1,
9756 			.hmac_key = ms_hmac_key1,
9757 			.cipher = ms_aes_cbc_cipher1,
9758 			.digest = ms_hmac_digest1,
9759 			.iv = ms_aes_cbc_iv1
9760 		},
9761 		{
9762 			.cipher_key = ms_aes_cbc_key2,
9763 			.hmac_key = ms_hmac_key2,
9764 			.cipher = ms_aes_cbc_cipher2,
9765 			.digest = ms_hmac_digest2,
9766 			.iv = ms_aes_cbc_iv2
9767 		},
9768 
9769 	};
9770 
9771 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
9772 
9773 	sessions = rte_malloc(NULL,
9774 			(sizeof(struct rte_cryptodev_sym_session *)
9775 					* MAX_NB_SESSIONS) + 1, 0);
9776 
9777 	for (i = 0; i < MB_SESSION_NUMBER; i++) {
9778 		sessions[i] = rte_cryptodev_sym_session_create(
9779 				ts_params->session_mpool);
9780 
9781 		rte_memcpy(&ut_paramz[i].ut_params, &unittest_params,
9782 				sizeof(struct crypto_unittest_params));
9783 
9784 		test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
9785 				&ut_paramz[i].ut_params,
9786 				ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
9787 
9788 		/* Create multiple crypto sessions*/
9789 		rte_cryptodev_sym_session_init(
9790 				ts_params->valid_devs[0],
9791 				sessions[i],
9792 				&ut_paramz[i].ut_params.auth_xform,
9793 				ts_params->session_priv_mpool);
9794 
9795 		TEST_ASSERT_NOT_NULL(sessions[i],
9796 				"Session creation failed at session number %u",
9797 				i);
9798 
9799 	}
9800 
9801 	srand(time(NULL));
9802 	for (i = 0; i < 40000; i++) {
9803 
9804 		j = rand() % MB_SESSION_NUMBER;
9805 
9806 		TEST_ASSERT_SUCCESS(
9807 			test_AES_CBC_HMAC_SHA512_decrypt_perform(
9808 					sessions[j],
9809 					&ut_paramz[j].ut_params,
9810 					ts_params, ut_paramz[j].cipher,
9811 					ut_paramz[j].digest,
9812 					ut_paramz[j].iv),
9813 			"Failed to perform decrypt on request number %u.", i);
9814 
9815 		if (ut_paramz[j].ut_params.op)
9816 			rte_crypto_op_free(ut_paramz[j].ut_params.op);
9817 
9818 		/*
9819 		 * free mbuf - both obuf and ibuf are usually the same,
9820 		 * so check if they point at the same address is necessary,
9821 		 * to avoid freeing the mbuf twice.
9822 		 */
9823 		if (ut_paramz[j].ut_params.obuf) {
9824 			rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
9825 			if (ut_paramz[j].ut_params.ibuf
9826 					== ut_paramz[j].ut_params.obuf)
9827 				ut_paramz[j].ut_params.ibuf = 0;
9828 			ut_paramz[j].ut_params.obuf = 0;
9829 		}
9830 		if (ut_paramz[j].ut_params.ibuf) {
9831 			rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
9832 			ut_paramz[j].ut_params.ibuf = 0;
9833 		}
9834 	}
9835 
9836 	for (i = 0; i < MB_SESSION_NUMBER; i++) {
9837 		rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
9838 				sessions[i]);
9839 		rte_cryptodev_sym_session_free(sessions[i]);
9840 	}
9841 
9842 	rte_free(sessions);
9843 
9844 	return TEST_SUCCESS;
9845 }
9846 
9847 static int
9848 test_null_cipher_only_operation(void)
9849 {
9850 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9851 	struct crypto_unittest_params *ut_params = &unittest_params;
9852 
9853 	/* Generate test mbuf data and space for digest */
9854 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
9855 			catch_22_quote, QUOTE_512_BYTES, 0);
9856 
9857 	/* Setup Cipher Parameters */
9858 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
9859 	ut_params->cipher_xform.next = NULL;
9860 
9861 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
9862 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
9863 
9864 	ut_params->sess = rte_cryptodev_sym_session_create(
9865 			ts_params->session_mpool);
9866 
9867 	/* Create Crypto session*/
9868 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
9869 				ut_params->sess,
9870 				&ut_params->cipher_xform,
9871 				ts_params->session_priv_mpool);
9872 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
9873 
9874 	/* Generate Crypto op data structure */
9875 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9876 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9877 	TEST_ASSERT_NOT_NULL(ut_params->op,
9878 			"Failed to allocate symmetric crypto operation struct");
9879 
9880 	/* Set crypto operation data parameters */
9881 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9882 
9883 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9884 
9885 	/* set crypto operation source mbuf */
9886 	sym_op->m_src = ut_params->ibuf;
9887 
9888 	sym_op->cipher.data.offset = 0;
9889 	sym_op->cipher.data.length = QUOTE_512_BYTES;
9890 
9891 	/* Process crypto operation */
9892 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
9893 			ut_params->op);
9894 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
9895 
9896 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9897 			"crypto operation processing failed");
9898 
9899 	/* Validate obuf */
9900 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9901 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
9902 			catch_22_quote,
9903 			QUOTE_512_BYTES,
9904 			"Ciphertext data not as expected");
9905 
9906 	return TEST_SUCCESS;
9907 }
9908 uint8_t orig_data[] = {0xab, 0xab, 0xab, 0xab,
9909 			0xab, 0xab, 0xab, 0xab,
9910 			0xab, 0xab, 0xab, 0xab,
9911 			0xab, 0xab, 0xab, 0xab};
9912 static int
9913 test_null_auth_only_operation(void)
9914 {
9915 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9916 	struct crypto_unittest_params *ut_params = &unittest_params;
9917 	uint8_t *digest;
9918 
9919 	/* Generate test mbuf data and space for digest */
9920 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
9921 			catch_22_quote, QUOTE_512_BYTES, 0);
9922 
9923 	/* create a pointer for digest, but don't expect anything to be written
9924 	 * here in a NULL auth algo so no mbuf append done.
9925 	 */
9926 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9927 			QUOTE_512_BYTES);
9928 	/* prefill the memory pointed to by digest */
9929 	memcpy(digest, orig_data, sizeof(orig_data));
9930 
9931 	/* Setup HMAC Parameters */
9932 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
9933 	ut_params->auth_xform.next = NULL;
9934 
9935 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
9936 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
9937 
9938 	ut_params->sess = rte_cryptodev_sym_session_create(
9939 			ts_params->session_mpool);
9940 
9941 	/* Create Crypto session*/
9942 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
9943 			ut_params->sess, &ut_params->auth_xform,
9944 			ts_params->session_priv_mpool);
9945 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
9946 
9947 	/* Generate Crypto op data structure */
9948 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
9949 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
9950 	TEST_ASSERT_NOT_NULL(ut_params->op,
9951 			"Failed to allocate symmetric crypto operation struct");
9952 
9953 	/* Set crypto operation data parameters */
9954 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
9955 
9956 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
9957 
9958 	sym_op->m_src = ut_params->ibuf;
9959 
9960 	sym_op->auth.data.offset = 0;
9961 	sym_op->auth.data.length = QUOTE_512_BYTES;
9962 	sym_op->auth.digest.data = digest;
9963 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
9964 			QUOTE_512_BYTES);
9965 
9966 	/* Process crypto operation */
9967 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
9968 			ut_params->op);
9969 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
9970 
9971 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
9972 			"crypto operation processing failed");
9973 	/* Make sure memory pointed to by digest hasn't been overwritten */
9974 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
9975 			orig_data,
9976 			digest,
9977 			sizeof(orig_data),
9978 			"Memory at digest ptr overwritten unexpectedly");
9979 
9980 	return TEST_SUCCESS;
9981 }
9982 
9983 
9984 static int
9985 test_null_cipher_auth_operation(void)
9986 {
9987 	struct crypto_testsuite_params *ts_params = &testsuite_params;
9988 	struct crypto_unittest_params *ut_params = &unittest_params;
9989 	uint8_t *digest;
9990 
9991 	/* Generate test mbuf data and space for digest */
9992 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
9993 			catch_22_quote, QUOTE_512_BYTES, 0);
9994 
9995 	/* create a pointer for digest, but don't expect anything to be written
9996 	 * here in a NULL auth algo so no mbuf append done.
9997 	 */
9998 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
9999 			QUOTE_512_BYTES);
10000 	/* prefill the memory pointed to by digest */
10001 	memcpy(digest, orig_data, sizeof(orig_data));
10002 
10003 	/* Setup Cipher Parameters */
10004 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10005 	ut_params->cipher_xform.next = &ut_params->auth_xform;
10006 
10007 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
10008 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10009 
10010 	/* Setup HMAC Parameters */
10011 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10012 	ut_params->auth_xform.next = NULL;
10013 
10014 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
10015 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10016 
10017 	ut_params->sess = rte_cryptodev_sym_session_create(
10018 			ts_params->session_mpool);
10019 
10020 	/* Create Crypto session*/
10021 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10022 			ut_params->sess, &ut_params->cipher_xform,
10023 			ts_params->session_priv_mpool);
10024 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10025 
10026 	/* Generate Crypto op data structure */
10027 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10028 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10029 	TEST_ASSERT_NOT_NULL(ut_params->op,
10030 			"Failed to allocate symmetric crypto operation struct");
10031 
10032 	/* Set crypto operation data parameters */
10033 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10034 
10035 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10036 
10037 	sym_op->m_src = ut_params->ibuf;
10038 
10039 	sym_op->cipher.data.offset = 0;
10040 	sym_op->cipher.data.length = QUOTE_512_BYTES;
10041 
10042 	sym_op->auth.data.offset = 0;
10043 	sym_op->auth.data.length = QUOTE_512_BYTES;
10044 	sym_op->auth.digest.data = digest;
10045 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
10046 			QUOTE_512_BYTES);
10047 
10048 	/* Process crypto operation */
10049 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
10050 			ut_params->op);
10051 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
10052 
10053 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10054 			"crypto operation processing failed");
10055 
10056 	/* Validate obuf */
10057 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
10058 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
10059 			catch_22_quote,
10060 			QUOTE_512_BYTES,
10061 			"Ciphertext data not as expected");
10062 	/* Make sure memory pointed to by digest hasn't been overwritten */
10063 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
10064 			orig_data,
10065 			digest,
10066 			sizeof(orig_data),
10067 			"Memory at digest ptr overwritten unexpectedly");
10068 
10069 	return TEST_SUCCESS;
10070 }
10071 
10072 static int
10073 test_null_auth_cipher_operation(void)
10074 {
10075 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10076 	struct crypto_unittest_params *ut_params = &unittest_params;
10077 	uint8_t *digest;
10078 
10079 	/* Generate test mbuf data */
10080 	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
10081 			catch_22_quote, QUOTE_512_BYTES, 0);
10082 
10083 	/* create a pointer for digest, but don't expect anything to be written
10084 	 * here in a NULL auth algo so no mbuf append done.
10085 	 */
10086 	digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
10087 				QUOTE_512_BYTES);
10088 	/* prefill the memory pointed to by digest */
10089 	memcpy(digest, orig_data, sizeof(orig_data));
10090 
10091 	/* Setup Cipher Parameters */
10092 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10093 	ut_params->cipher_xform.next = NULL;
10094 
10095 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
10096 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10097 
10098 	/* Setup HMAC Parameters */
10099 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10100 	ut_params->auth_xform.next = &ut_params->cipher_xform;
10101 
10102 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
10103 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10104 
10105 	ut_params->sess = rte_cryptodev_sym_session_create(
10106 			ts_params->session_mpool);
10107 
10108 	/* Create Crypto session*/
10109 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10110 			ut_params->sess, &ut_params->cipher_xform,
10111 			ts_params->session_priv_mpool);
10112 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10113 
10114 	/* Generate Crypto op data structure */
10115 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10116 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10117 	TEST_ASSERT_NOT_NULL(ut_params->op,
10118 			"Failed to allocate symmetric crypto operation struct");
10119 
10120 	/* Set crypto operation data parameters */
10121 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10122 
10123 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10124 
10125 	sym_op->m_src = ut_params->ibuf;
10126 
10127 	sym_op->cipher.data.offset = 0;
10128 	sym_op->cipher.data.length = QUOTE_512_BYTES;
10129 
10130 	sym_op->auth.data.offset = 0;
10131 	sym_op->auth.data.length = QUOTE_512_BYTES;
10132 	sym_op->auth.digest.data = digest;
10133 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf,
10134 					QUOTE_512_BYTES);
10135 
10136 	/* Process crypto operation */
10137 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
10138 			ut_params->op);
10139 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
10140 
10141 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10142 			"crypto operation processing failed");
10143 
10144 	/* Validate obuf */
10145 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
10146 			rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
10147 			catch_22_quote,
10148 			QUOTE_512_BYTES,
10149 			"Ciphertext data not as expected");
10150 	/* Make sure memory pointed to by digest hasn't been overwritten */
10151 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
10152 			orig_data,
10153 			digest,
10154 			sizeof(orig_data),
10155 			"Memory at digest ptr overwritten unexpectedly");
10156 
10157 	return TEST_SUCCESS;
10158 }
10159 
10160 
10161 static int
10162 test_null_invalid_operation(void)
10163 {
10164 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10165 	struct crypto_unittest_params *ut_params = &unittest_params;
10166 	int ret;
10167 
10168 	/* Setup Cipher Parameters */
10169 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10170 	ut_params->cipher_xform.next = NULL;
10171 
10172 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
10173 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10174 
10175 	ut_params->sess = rte_cryptodev_sym_session_create(
10176 			ts_params->session_mpool);
10177 
10178 	/* Create Crypto session*/
10179 	ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10180 			ut_params->sess, &ut_params->cipher_xform,
10181 			ts_params->session_priv_mpool);
10182 	TEST_ASSERT(ret < 0,
10183 			"Session creation succeeded unexpectedly");
10184 
10185 
10186 	/* Setup HMAC Parameters */
10187 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10188 	ut_params->auth_xform.next = NULL;
10189 
10190 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
10191 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10192 
10193 	ut_params->sess = rte_cryptodev_sym_session_create(
10194 			ts_params->session_mpool);
10195 
10196 	/* Create Crypto session*/
10197 	ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10198 			ut_params->sess, &ut_params->auth_xform,
10199 			ts_params->session_priv_mpool);
10200 	TEST_ASSERT(ret < 0,
10201 			"Session creation succeeded unexpectedly");
10202 
10203 	return TEST_SUCCESS;
10204 }
10205 
10206 
10207 #define NULL_BURST_LENGTH (32)
10208 
10209 static int
10210 test_null_burst_operation(void)
10211 {
10212 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10213 	struct crypto_unittest_params *ut_params = &unittest_params;
10214 
10215 	unsigned i, burst_len = NULL_BURST_LENGTH;
10216 
10217 	struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
10218 	struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
10219 
10220 	/* Setup Cipher Parameters */
10221 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10222 	ut_params->cipher_xform.next = &ut_params->auth_xform;
10223 
10224 	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
10225 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
10226 
10227 	/* Setup HMAC Parameters */
10228 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10229 	ut_params->auth_xform.next = NULL;
10230 
10231 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
10232 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
10233 
10234 	ut_params->sess = rte_cryptodev_sym_session_create(
10235 			ts_params->session_mpool);
10236 
10237 	/* Create Crypto session*/
10238 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
10239 			ut_params->sess, &ut_params->cipher_xform,
10240 			ts_params->session_priv_mpool);
10241 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10242 
10243 	TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
10244 			RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
10245 			burst_len, "failed to generate burst of crypto ops");
10246 
10247 	/* Generate an operation for each mbuf in burst */
10248 	for (i = 0; i < burst_len; i++) {
10249 		struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10250 
10251 		TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
10252 
10253 		unsigned *data = (unsigned *)rte_pktmbuf_append(m,
10254 				sizeof(unsigned));
10255 		*data = i;
10256 
10257 		rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
10258 
10259 		burst[i]->sym->m_src = m;
10260 	}
10261 
10262 	/* Process crypto operation */
10263 	TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
10264 			0, burst, burst_len),
10265 			burst_len,
10266 			"Error enqueuing burst");
10267 
10268 	TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
10269 			0, burst_dequeued, burst_len),
10270 			burst_len,
10271 			"Error dequeuing burst");
10272 
10273 
10274 	for (i = 0; i < burst_len; i++) {
10275 		TEST_ASSERT_EQUAL(
10276 			*rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
10277 			*rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
10278 					uint32_t *),
10279 			"data not as expected");
10280 
10281 		rte_pktmbuf_free(burst[i]->sym->m_src);
10282 		rte_crypto_op_free(burst[i]);
10283 	}
10284 
10285 	return TEST_SUCCESS;
10286 }
10287 
10288 static void
10289 generate_gmac_large_plaintext(uint8_t *data)
10290 {
10291 	uint16_t i;
10292 
10293 	for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
10294 		memcpy(&data[i], &data[0], 32);
10295 }
10296 
10297 static int
10298 create_gmac_operation(enum rte_crypto_auth_operation op,
10299 		const struct gmac_test_data *tdata)
10300 {
10301 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10302 	struct crypto_unittest_params *ut_params = &unittest_params;
10303 	struct rte_crypto_sym_op *sym_op;
10304 
10305 	uint32_t plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
10306 
10307 	/* Generate Crypto op data structure */
10308 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10309 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10310 	TEST_ASSERT_NOT_NULL(ut_params->op,
10311 			"Failed to allocate symmetric crypto operation struct");
10312 
10313 	sym_op = ut_params->op->sym;
10314 
10315 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10316 			ut_params->ibuf, tdata->gmac_tag.len);
10317 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10318 			"no room to append digest");
10319 
10320 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10321 			ut_params->ibuf, plaintext_pad_len);
10322 
10323 	if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
10324 		rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
10325 				tdata->gmac_tag.len);
10326 		debug_hexdump(stdout, "digest:",
10327 				sym_op->auth.digest.data,
10328 				tdata->gmac_tag.len);
10329 	}
10330 
10331 	uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
10332 			uint8_t *, IV_OFFSET);
10333 
10334 	rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
10335 
10336 	debug_hexdump(stdout, "iv:", iv_ptr, tdata->iv.len);
10337 
10338 	sym_op->cipher.data.length = 0;
10339 	sym_op->cipher.data.offset = 0;
10340 
10341 	sym_op->auth.data.offset = 0;
10342 	sym_op->auth.data.length = tdata->plaintext.len;
10343 
10344 	return 0;
10345 }
10346 
10347 static int create_gmac_session(uint8_t dev_id,
10348 		const struct gmac_test_data *tdata,
10349 		enum rte_crypto_auth_operation auth_op)
10350 {
10351 	uint8_t auth_key[tdata->key.len];
10352 
10353 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10354 	struct crypto_unittest_params *ut_params = &unittest_params;
10355 
10356 	memcpy(auth_key, tdata->key.data, tdata->key.len);
10357 
10358 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10359 	ut_params->auth_xform.next = NULL;
10360 
10361 	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
10362 	ut_params->auth_xform.auth.op = auth_op;
10363 	ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
10364 	ut_params->auth_xform.auth.key.length = tdata->key.len;
10365 	ut_params->auth_xform.auth.key.data = auth_key;
10366 	ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
10367 	ut_params->auth_xform.auth.iv.length = tdata->iv.len;
10368 
10369 
10370 	ut_params->sess = rte_cryptodev_sym_session_create(
10371 			ts_params->session_mpool);
10372 
10373 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
10374 			&ut_params->auth_xform,
10375 			ts_params->session_priv_mpool);
10376 
10377 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10378 
10379 	return 0;
10380 }
10381 
10382 static int
10383 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
10384 {
10385 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10386 	struct crypto_unittest_params *ut_params = &unittest_params;
10387 
10388 	int retval;
10389 
10390 	uint8_t *auth_tag, *plaintext;
10391 	uint16_t plaintext_pad_len;
10392 
10393 	TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
10394 			      "No GMAC length in the source data");
10395 
10396 	retval = create_gmac_session(ts_params->valid_devs[0],
10397 			tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
10398 
10399 	if (retval < 0)
10400 		return retval;
10401 
10402 	if (tdata->plaintext.len > MBUF_SIZE)
10403 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
10404 	else
10405 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10406 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
10407 			"Failed to allocate input buffer in mempool");
10408 
10409 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
10410 			rte_pktmbuf_tailroom(ut_params->ibuf));
10411 
10412 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
10413 	/*
10414 	 * Runtime generate the large plain text instead of use hard code
10415 	 * plain text vector. It is done to avoid create huge source file
10416 	 * with the test vector.
10417 	 */
10418 	if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
10419 		generate_gmac_large_plaintext(tdata->plaintext.data);
10420 
10421 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
10422 				plaintext_pad_len);
10423 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
10424 
10425 	memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
10426 	debug_hexdump(stdout, "plaintext:", plaintext,
10427 			tdata->plaintext.len);
10428 
10429 	retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
10430 			tdata);
10431 
10432 	if (retval < 0)
10433 		return retval;
10434 
10435 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10436 
10437 	ut_params->op->sym->m_src = ut_params->ibuf;
10438 
10439 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
10440 			ut_params->op), "failed to process sym crypto op");
10441 
10442 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10443 			"crypto op processing failed");
10444 
10445 	if (ut_params->op->sym->m_dst) {
10446 		auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
10447 				uint8_t *, plaintext_pad_len);
10448 	} else {
10449 		auth_tag = plaintext + plaintext_pad_len;
10450 	}
10451 
10452 	debug_hexdump(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
10453 
10454 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
10455 			auth_tag,
10456 			tdata->gmac_tag.data,
10457 			tdata->gmac_tag.len,
10458 			"GMAC Generated auth tag not as expected");
10459 
10460 	return 0;
10461 }
10462 
10463 static int
10464 test_AES_GMAC_authentication_test_case_1(void)
10465 {
10466 	return test_AES_GMAC_authentication(&gmac_test_case_1);
10467 }
10468 
10469 static int
10470 test_AES_GMAC_authentication_test_case_2(void)
10471 {
10472 	return test_AES_GMAC_authentication(&gmac_test_case_2);
10473 }
10474 
10475 static int
10476 test_AES_GMAC_authentication_test_case_3(void)
10477 {
10478 	return test_AES_GMAC_authentication(&gmac_test_case_3);
10479 }
10480 
10481 static int
10482 test_AES_GMAC_authentication_test_case_4(void)
10483 {
10484 	return test_AES_GMAC_authentication(&gmac_test_case_4);
10485 }
10486 
10487 static int
10488 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
10489 {
10490 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10491 	struct crypto_unittest_params *ut_params = &unittest_params;
10492 	int retval;
10493 	uint32_t plaintext_pad_len;
10494 	uint8_t *plaintext;
10495 
10496 	TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
10497 			      "No GMAC length in the source data");
10498 
10499 	retval = create_gmac_session(ts_params->valid_devs[0],
10500 			tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
10501 
10502 	if (retval < 0)
10503 		return retval;
10504 
10505 	if (tdata->plaintext.len > MBUF_SIZE)
10506 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
10507 	else
10508 		ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
10509 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
10510 			"Failed to allocate input buffer in mempool");
10511 
10512 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
10513 			rte_pktmbuf_tailroom(ut_params->ibuf));
10514 
10515 	plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
10516 
10517 	/*
10518 	 * Runtime generate the large plain text instead of use hard code
10519 	 * plain text vector. It is done to avoid create huge source file
10520 	 * with the test vector.
10521 	 */
10522 	if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
10523 		generate_gmac_large_plaintext(tdata->plaintext.data);
10524 
10525 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
10526 				plaintext_pad_len);
10527 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
10528 
10529 	memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
10530 	debug_hexdump(stdout, "plaintext:", plaintext,
10531 			tdata->plaintext.len);
10532 
10533 	retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
10534 			tdata);
10535 
10536 	if (retval < 0)
10537 		return retval;
10538 
10539 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10540 
10541 	ut_params->op->sym->m_src = ut_params->ibuf;
10542 
10543 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
10544 			ut_params->op), "failed to process sym crypto op");
10545 
10546 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
10547 			"crypto op processing failed");
10548 
10549 	return 0;
10550 
10551 }
10552 
10553 static int
10554 test_AES_GMAC_authentication_verify_test_case_1(void)
10555 {
10556 	return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
10557 }
10558 
10559 static int
10560 test_AES_GMAC_authentication_verify_test_case_2(void)
10561 {
10562 	return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
10563 }
10564 
10565 static int
10566 test_AES_GMAC_authentication_verify_test_case_3(void)
10567 {
10568 	return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
10569 }
10570 
10571 static int
10572 test_AES_GMAC_authentication_verify_test_case_4(void)
10573 {
10574 	return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
10575 }
10576 
10577 struct test_crypto_vector {
10578 	enum rte_crypto_cipher_algorithm crypto_algo;
10579 	unsigned int cipher_offset;
10580 	unsigned int cipher_len;
10581 
10582 	struct {
10583 		uint8_t data[64];
10584 		unsigned int len;
10585 	} cipher_key;
10586 
10587 	struct {
10588 		uint8_t data[64];
10589 		unsigned int len;
10590 	} iv;
10591 
10592 	struct {
10593 		const uint8_t *data;
10594 		unsigned int len;
10595 	} plaintext;
10596 
10597 	struct {
10598 		const uint8_t *data;
10599 		unsigned int len;
10600 	} ciphertext;
10601 
10602 	enum rte_crypto_auth_algorithm auth_algo;
10603 	unsigned int auth_offset;
10604 
10605 	struct {
10606 		uint8_t data[128];
10607 		unsigned int len;
10608 	} auth_key;
10609 
10610 	struct {
10611 		const uint8_t *data;
10612 		unsigned int len;
10613 	} aad;
10614 
10615 	struct {
10616 		uint8_t data[128];
10617 		unsigned int len;
10618 	} digest;
10619 };
10620 
10621 static const struct test_crypto_vector
10622 hmac_sha1_test_crypto_vector = {
10623 	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
10624 	.plaintext = {
10625 		.data = plaintext_hash,
10626 		.len = 512
10627 	},
10628 	.auth_key = {
10629 		.data = {
10630 			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
10631 			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
10632 			0xDE, 0xF4, 0xDE, 0xAD
10633 		},
10634 		.len = 20
10635 	},
10636 	.digest = {
10637 		.data = {
10638 			0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
10639 			0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
10640 			0x3F, 0x91, 0x64, 0x59
10641 		},
10642 		.len = 20
10643 	}
10644 };
10645 
10646 static const struct test_crypto_vector
10647 aes128_gmac_test_vector = {
10648 	.auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
10649 	.plaintext = {
10650 		.data = plaintext_hash,
10651 		.len = 512
10652 	},
10653 	.iv = {
10654 		.data = {
10655 			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
10656 			0x08, 0x09, 0x0A, 0x0B
10657 		},
10658 		.len = 12
10659 	},
10660 	.auth_key = {
10661 		.data = {
10662 			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
10663 			0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
10664 		},
10665 		.len = 16
10666 	},
10667 	.digest = {
10668 		.data = {
10669 			0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
10670 			0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
10671 		},
10672 		.len = 16
10673 	}
10674 };
10675 
10676 static const struct test_crypto_vector
10677 aes128cbc_hmac_sha1_test_vector = {
10678 	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
10679 	.cipher_offset = 0,
10680 	.cipher_len = 512,
10681 	.cipher_key = {
10682 		.data = {
10683 			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
10684 			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
10685 		},
10686 		.len = 16
10687 	},
10688 	.iv = {
10689 		.data = {
10690 			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
10691 			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
10692 		},
10693 		.len = 16
10694 	},
10695 	.plaintext = {
10696 		.data = plaintext_hash,
10697 		.len = 512
10698 	},
10699 	.ciphertext = {
10700 		.data = ciphertext512_aes128cbc,
10701 		.len = 512
10702 	},
10703 	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
10704 	.auth_offset = 0,
10705 	.auth_key = {
10706 		.data = {
10707 			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
10708 			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
10709 			0xDE, 0xF4, 0xDE, 0xAD
10710 		},
10711 		.len = 20
10712 	},
10713 	.digest = {
10714 		.data = {
10715 			0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
10716 			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
10717 			0x18, 0x8C, 0x1D, 0x32
10718 		},
10719 		.len = 20
10720 	}
10721 };
10722 
10723 static const struct test_crypto_vector
10724 aes128cbc_hmac_sha1_aad_test_vector = {
10725 	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
10726 	.cipher_offset = 12,
10727 	.cipher_len = 496,
10728 	.cipher_key = {
10729 		.data = {
10730 			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
10731 			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
10732 		},
10733 		.len = 16
10734 	},
10735 	.iv = {
10736 		.data = {
10737 			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
10738 			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
10739 		},
10740 		.len = 16
10741 	},
10742 	.plaintext = {
10743 		.data = plaintext_hash,
10744 		.len = 512
10745 	},
10746 	.ciphertext = {
10747 		.data = ciphertext512_aes128cbc_aad,
10748 		.len = 512
10749 	},
10750 	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
10751 	.auth_offset = 0,
10752 	.auth_key = {
10753 		.data = {
10754 			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
10755 			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
10756 			0xDE, 0xF4, 0xDE, 0xAD
10757 		},
10758 		.len = 20
10759 	},
10760 	.digest = {
10761 		.data = {
10762 			0x1F, 0x6A, 0xD2, 0x8B, 0x4B, 0xB3, 0xC0, 0x9E,
10763 			0x86, 0x9B, 0x3A, 0xF2, 0x00, 0x5B, 0x4F, 0x08,
10764 			0x62, 0x8D, 0x62, 0x65
10765 		},
10766 		.len = 20
10767 	}
10768 };
10769 
10770 static void
10771 data_corruption(uint8_t *data)
10772 {
10773 	data[0] += 1;
10774 }
10775 
10776 static void
10777 tag_corruption(uint8_t *data, unsigned int tag_offset)
10778 {
10779 	data[tag_offset] += 1;
10780 }
10781 
10782 static int
10783 create_auth_session(struct crypto_unittest_params *ut_params,
10784 		uint8_t dev_id,
10785 		const struct test_crypto_vector *reference,
10786 		enum rte_crypto_auth_operation auth_op)
10787 {
10788 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10789 	uint8_t auth_key[reference->auth_key.len + 1];
10790 
10791 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
10792 
10793 	/* Setup Authentication Parameters */
10794 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10795 	ut_params->auth_xform.auth.op = auth_op;
10796 	ut_params->auth_xform.next = NULL;
10797 	ut_params->auth_xform.auth.algo = reference->auth_algo;
10798 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
10799 	ut_params->auth_xform.auth.key.data = auth_key;
10800 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
10801 
10802 	/* Create Crypto session*/
10803 	ut_params->sess = rte_cryptodev_sym_session_create(
10804 			ts_params->session_mpool);
10805 
10806 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
10807 				&ut_params->auth_xform,
10808 				ts_params->session_priv_mpool);
10809 
10810 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10811 
10812 	return 0;
10813 }
10814 
10815 static int
10816 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
10817 		uint8_t dev_id,
10818 		const struct test_crypto_vector *reference,
10819 		enum rte_crypto_auth_operation auth_op,
10820 		enum rte_crypto_cipher_operation cipher_op)
10821 {
10822 	struct crypto_testsuite_params *ts_params = &testsuite_params;
10823 	uint8_t cipher_key[reference->cipher_key.len + 1];
10824 	uint8_t auth_key[reference->auth_key.len + 1];
10825 
10826 	memcpy(cipher_key, reference->cipher_key.data,
10827 			reference->cipher_key.len);
10828 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
10829 
10830 	/* Setup Authentication Parameters */
10831 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
10832 	ut_params->auth_xform.auth.op = auth_op;
10833 	ut_params->auth_xform.auth.algo = reference->auth_algo;
10834 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
10835 	ut_params->auth_xform.auth.key.data = auth_key;
10836 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
10837 
10838 	if (reference->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) {
10839 		ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
10840 		ut_params->auth_xform.auth.iv.length = reference->iv.len;
10841 	} else {
10842 		ut_params->auth_xform.next = &ut_params->cipher_xform;
10843 
10844 		/* Setup Cipher Parameters */
10845 		ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
10846 		ut_params->cipher_xform.next = NULL;
10847 		ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
10848 		ut_params->cipher_xform.cipher.op = cipher_op;
10849 		ut_params->cipher_xform.cipher.key.data = cipher_key;
10850 		ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
10851 		ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
10852 		ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
10853 	}
10854 
10855 	/* Create Crypto session*/
10856 	ut_params->sess = rte_cryptodev_sym_session_create(
10857 			ts_params->session_mpool);
10858 
10859 	rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
10860 				&ut_params->auth_xform,
10861 				ts_params->session_priv_mpool);
10862 
10863 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
10864 
10865 	return 0;
10866 }
10867 
10868 static int
10869 create_auth_operation(struct crypto_testsuite_params *ts_params,
10870 		struct crypto_unittest_params *ut_params,
10871 		const struct test_crypto_vector *reference,
10872 		unsigned int auth_generate)
10873 {
10874 	/* Generate Crypto op data structure */
10875 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10876 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10877 	TEST_ASSERT_NOT_NULL(ut_params->op,
10878 			"Failed to allocate pktmbuf offload");
10879 
10880 	/* Set crypto operation data parameters */
10881 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10882 
10883 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10884 
10885 	/* set crypto operation source mbuf */
10886 	sym_op->m_src = ut_params->ibuf;
10887 
10888 	/* digest */
10889 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10890 			ut_params->ibuf, reference->digest.len);
10891 
10892 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10893 			"no room to append auth tag");
10894 
10895 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10896 			ut_params->ibuf, reference->plaintext.len);
10897 
10898 	if (auth_generate)
10899 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
10900 	else
10901 		memcpy(sym_op->auth.digest.data,
10902 				reference->digest.data,
10903 				reference->digest.len);
10904 
10905 	debug_hexdump(stdout, "digest:",
10906 			sym_op->auth.digest.data,
10907 			reference->digest.len);
10908 
10909 	sym_op->auth.data.length = reference->plaintext.len;
10910 	sym_op->auth.data.offset = 0;
10911 
10912 	return 0;
10913 }
10914 
10915 static int
10916 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
10917 		struct crypto_unittest_params *ut_params,
10918 		const struct test_crypto_vector *reference,
10919 		unsigned int auth_generate)
10920 {
10921 	/* Generate Crypto op data structure */
10922 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10923 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10924 	TEST_ASSERT_NOT_NULL(ut_params->op,
10925 			"Failed to allocate pktmbuf offload");
10926 
10927 	/* Set crypto operation data parameters */
10928 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10929 
10930 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10931 
10932 	/* set crypto operation source mbuf */
10933 	sym_op->m_src = ut_params->ibuf;
10934 
10935 	/* digest */
10936 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10937 			ut_params->ibuf, reference->digest.len);
10938 
10939 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10940 			"no room to append auth tag");
10941 
10942 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10943 			ut_params->ibuf, reference->ciphertext.len);
10944 
10945 	if (auth_generate)
10946 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
10947 	else
10948 		memcpy(sym_op->auth.digest.data,
10949 				reference->digest.data,
10950 				reference->digest.len);
10951 
10952 	debug_hexdump(stdout, "digest:",
10953 			sym_op->auth.digest.data,
10954 			reference->digest.len);
10955 
10956 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
10957 			reference->iv.data, reference->iv.len);
10958 
10959 	sym_op->cipher.data.length = 0;
10960 	sym_op->cipher.data.offset = 0;
10961 
10962 	sym_op->auth.data.length = reference->plaintext.len;
10963 	sym_op->auth.data.offset = 0;
10964 
10965 	return 0;
10966 }
10967 
10968 static int
10969 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
10970 		struct crypto_unittest_params *ut_params,
10971 		const struct test_crypto_vector *reference,
10972 		unsigned int auth_generate)
10973 {
10974 	/* Generate Crypto op data structure */
10975 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
10976 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
10977 	TEST_ASSERT_NOT_NULL(ut_params->op,
10978 			"Failed to allocate pktmbuf offload");
10979 
10980 	/* Set crypto operation data parameters */
10981 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
10982 
10983 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
10984 
10985 	/* set crypto operation source mbuf */
10986 	sym_op->m_src = ut_params->ibuf;
10987 
10988 	/* digest */
10989 	sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
10990 			ut_params->ibuf, reference->digest.len);
10991 
10992 	TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
10993 			"no room to append auth tag");
10994 
10995 	sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
10996 			ut_params->ibuf, reference->ciphertext.len);
10997 
10998 	if (auth_generate)
10999 		memset(sym_op->auth.digest.data, 0, reference->digest.len);
11000 	else
11001 		memcpy(sym_op->auth.digest.data,
11002 				reference->digest.data,
11003 				reference->digest.len);
11004 
11005 	debug_hexdump(stdout, "digest:",
11006 			sym_op->auth.digest.data,
11007 			reference->digest.len);
11008 
11009 	rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
11010 			reference->iv.data, reference->iv.len);
11011 
11012 	sym_op->cipher.data.length = reference->cipher_len;
11013 	sym_op->cipher.data.offset = reference->cipher_offset;
11014 
11015 	sym_op->auth.data.length = reference->plaintext.len;
11016 	sym_op->auth.data.offset = reference->auth_offset;
11017 
11018 	return 0;
11019 }
11020 
11021 static int
11022 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
11023 		struct crypto_unittest_params *ut_params,
11024 		const struct test_crypto_vector *reference)
11025 {
11026 	return create_auth_operation(ts_params, ut_params, reference, 0);
11027 }
11028 
11029 static int
11030 create_auth_verify_GMAC_operation(
11031 		struct crypto_testsuite_params *ts_params,
11032 		struct crypto_unittest_params *ut_params,
11033 		const struct test_crypto_vector *reference)
11034 {
11035 	return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
11036 }
11037 
11038 static int
11039 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
11040 		struct crypto_unittest_params *ut_params,
11041 		const struct test_crypto_vector *reference)
11042 {
11043 	return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
11044 }
11045 
11046 static int
11047 test_authentication_verify_fail_when_data_corruption(
11048 		struct crypto_testsuite_params *ts_params,
11049 		struct crypto_unittest_params *ut_params,
11050 		const struct test_crypto_vector *reference,
11051 		unsigned int data_corrupted)
11052 {
11053 	int retval;
11054 
11055 	uint8_t *plaintext;
11056 
11057 	/* Create session */
11058 	retval = create_auth_session(ut_params,
11059 			ts_params->valid_devs[0],
11060 			reference,
11061 			RTE_CRYPTO_AUTH_OP_VERIFY);
11062 	if (retval < 0)
11063 		return retval;
11064 
11065 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11066 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11067 			"Failed to allocate input buffer in mempool");
11068 
11069 	/* clear mbuf payload */
11070 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11071 			rte_pktmbuf_tailroom(ut_params->ibuf));
11072 
11073 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11074 			reference->plaintext.len);
11075 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11076 	memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
11077 
11078 	debug_hexdump(stdout, "plaintext:", plaintext,
11079 		reference->plaintext.len);
11080 
11081 	/* Create operation */
11082 	retval = create_auth_verify_operation(ts_params, ut_params, reference);
11083 
11084 	if (retval < 0)
11085 		return retval;
11086 
11087 	if (data_corrupted)
11088 		data_corruption(plaintext);
11089 	else
11090 		tag_corruption(plaintext, reference->plaintext.len);
11091 
11092 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11093 			ut_params->op);
11094 
11095 	TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
11096 
11097 	return 0;
11098 }
11099 
11100 static int
11101 test_authentication_verify_GMAC_fail_when_corruption(
11102 		struct crypto_testsuite_params *ts_params,
11103 		struct crypto_unittest_params *ut_params,
11104 		const struct test_crypto_vector *reference,
11105 		unsigned int data_corrupted)
11106 {
11107 	int retval;
11108 	uint8_t *plaintext;
11109 
11110 	/* Create session */
11111 	retval = create_auth_cipher_session(ut_params,
11112 			ts_params->valid_devs[0],
11113 			reference,
11114 			RTE_CRYPTO_AUTH_OP_VERIFY,
11115 			RTE_CRYPTO_CIPHER_OP_DECRYPT);
11116 	if (retval < 0)
11117 		return retval;
11118 
11119 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11120 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11121 			"Failed to allocate input buffer in mempool");
11122 
11123 	/* clear mbuf payload */
11124 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11125 			rte_pktmbuf_tailroom(ut_params->ibuf));
11126 
11127 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11128 			reference->plaintext.len);
11129 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11130 	memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
11131 
11132 	debug_hexdump(stdout, "plaintext:", plaintext,
11133 		reference->plaintext.len);
11134 
11135 	/* Create operation */
11136 	retval = create_auth_verify_GMAC_operation(ts_params,
11137 			ut_params,
11138 			reference);
11139 
11140 	if (retval < 0)
11141 		return retval;
11142 
11143 	if (data_corrupted)
11144 		data_corruption(plaintext);
11145 	else
11146 		tag_corruption(plaintext, reference->aad.len);
11147 
11148 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11149 			ut_params->op);
11150 
11151 	TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
11152 
11153 	return 0;
11154 }
11155 
11156 static int
11157 test_authenticated_decryption_fail_when_corruption(
11158 		struct crypto_testsuite_params *ts_params,
11159 		struct crypto_unittest_params *ut_params,
11160 		const struct test_crypto_vector *reference,
11161 		unsigned int data_corrupted)
11162 {
11163 	int retval;
11164 
11165 	uint8_t *ciphertext;
11166 
11167 	/* Create session */
11168 	retval = create_auth_cipher_session(ut_params,
11169 			ts_params->valid_devs[0],
11170 			reference,
11171 			RTE_CRYPTO_AUTH_OP_VERIFY,
11172 			RTE_CRYPTO_CIPHER_OP_DECRYPT);
11173 	if (retval < 0)
11174 		return retval;
11175 
11176 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11177 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11178 			"Failed to allocate input buffer in mempool");
11179 
11180 	/* clear mbuf payload */
11181 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11182 			rte_pktmbuf_tailroom(ut_params->ibuf));
11183 
11184 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11185 			reference->ciphertext.len);
11186 	TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
11187 	memcpy(ciphertext, reference->ciphertext.data,
11188 			reference->ciphertext.len);
11189 
11190 	/* Create operation */
11191 	retval = create_cipher_auth_verify_operation(ts_params,
11192 			ut_params,
11193 			reference);
11194 
11195 	if (retval < 0)
11196 		return retval;
11197 
11198 	if (data_corrupted)
11199 		data_corruption(ciphertext);
11200 	else
11201 		tag_corruption(ciphertext, reference->ciphertext.len);
11202 
11203 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11204 			ut_params->op);
11205 
11206 	TEST_ASSERT_NULL(ut_params->op, "authentication not failed");
11207 
11208 	return 0;
11209 }
11210 
11211 static int
11212 test_authenticated_encryt_with_esn(
11213 		struct crypto_testsuite_params *ts_params,
11214 		struct crypto_unittest_params *ut_params,
11215 		const struct test_crypto_vector *reference)
11216 {
11217 	int retval;
11218 
11219 	uint8_t *authciphertext, *plaintext, *auth_tag;
11220 	uint16_t plaintext_pad_len;
11221 	uint8_t cipher_key[reference->cipher_key.len + 1];
11222 	uint8_t auth_key[reference->auth_key.len + 1];
11223 
11224 	/* Create session */
11225 	memcpy(cipher_key, reference->cipher_key.data,
11226 			reference->cipher_key.len);
11227 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
11228 
11229 	/* Setup Cipher Parameters */
11230 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
11231 	ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
11232 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
11233 	ut_params->cipher_xform.cipher.key.data = cipher_key;
11234 	ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
11235 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
11236 	ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
11237 
11238 	ut_params->cipher_xform.next = &ut_params->auth_xform;
11239 
11240 	/* Setup Authentication Parameters */
11241 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11242 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
11243 	ut_params->auth_xform.auth.algo = reference->auth_algo;
11244 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
11245 	ut_params->auth_xform.auth.key.data = auth_key;
11246 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
11247 	ut_params->auth_xform.next = NULL;
11248 
11249 	/* Create Crypto session*/
11250 	ut_params->sess = rte_cryptodev_sym_session_create(
11251 			ts_params->session_mpool);
11252 
11253 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
11254 				ut_params->sess,
11255 				&ut_params->cipher_xform,
11256 				ts_params->session_priv_mpool);
11257 
11258 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
11259 
11260 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11261 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11262 			"Failed to allocate input buffer in mempool");
11263 
11264 	/* clear mbuf payload */
11265 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11266 			rte_pktmbuf_tailroom(ut_params->ibuf));
11267 
11268 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11269 			reference->plaintext.len);
11270 	TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
11271 	memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
11272 
11273 	/* Create operation */
11274 	retval = create_cipher_auth_operation(ts_params,
11275 			ut_params,
11276 			reference, 0);
11277 
11278 	if (retval < 0)
11279 		return retval;
11280 
11281 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11282 			ut_params->op);
11283 
11284 	TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
11285 
11286 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
11287 			"crypto op processing failed");
11288 
11289 	plaintext_pad_len = RTE_ALIGN_CEIL(reference->plaintext.len, 16);
11290 
11291 	authciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
11292 			ut_params->op->sym->auth.data.offset);
11293 	auth_tag = authciphertext + plaintext_pad_len;
11294 	debug_hexdump(stdout, "ciphertext:", authciphertext,
11295 			reference->ciphertext.len);
11296 	debug_hexdump(stdout, "auth tag:", auth_tag, reference->digest.len);
11297 
11298 	/* Validate obuf */
11299 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
11300 			authciphertext,
11301 			reference->ciphertext.data,
11302 			reference->ciphertext.len,
11303 			"Ciphertext data not as expected");
11304 
11305 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
11306 			auth_tag,
11307 			reference->digest.data,
11308 			reference->digest.len,
11309 			"Generated digest not as expected");
11310 
11311 	return TEST_SUCCESS;
11312 
11313 }
11314 
11315 static int
11316 test_authenticated_decrypt_with_esn(
11317 		struct crypto_testsuite_params *ts_params,
11318 		struct crypto_unittest_params *ut_params,
11319 		const struct test_crypto_vector *reference)
11320 {
11321 	int retval;
11322 
11323 	uint8_t *ciphertext;
11324 	uint8_t cipher_key[reference->cipher_key.len + 1];
11325 	uint8_t auth_key[reference->auth_key.len + 1];
11326 
11327 	/* Create session */
11328 	memcpy(cipher_key, reference->cipher_key.data,
11329 			reference->cipher_key.len);
11330 	memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
11331 
11332 	/* Setup Authentication Parameters */
11333 	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
11334 	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
11335 	ut_params->auth_xform.auth.algo = reference->auth_algo;
11336 	ut_params->auth_xform.auth.key.length = reference->auth_key.len;
11337 	ut_params->auth_xform.auth.key.data = auth_key;
11338 	ut_params->auth_xform.auth.digest_length = reference->digest.len;
11339 	ut_params->auth_xform.next = &ut_params->cipher_xform;
11340 
11341 	/* Setup Cipher Parameters */
11342 	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
11343 	ut_params->cipher_xform.next = NULL;
11344 	ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
11345 	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
11346 	ut_params->cipher_xform.cipher.key.data = cipher_key;
11347 	ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
11348 	ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
11349 	ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
11350 
11351 	/* Create Crypto session*/
11352 	ut_params->sess = rte_cryptodev_sym_session_create(
11353 			ts_params->session_mpool);
11354 
11355 	rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
11356 				ut_params->sess,
11357 				&ut_params->auth_xform,
11358 				ts_params->session_priv_mpool);
11359 
11360 	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
11361 
11362 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11363 	TEST_ASSERT_NOT_NULL(ut_params->ibuf,
11364 			"Failed to allocate input buffer in mempool");
11365 
11366 	/* clear mbuf payload */
11367 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11368 			rte_pktmbuf_tailroom(ut_params->ibuf));
11369 
11370 	ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11371 			reference->ciphertext.len);
11372 	TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
11373 	memcpy(ciphertext, reference->ciphertext.data,
11374 			reference->ciphertext.len);
11375 
11376 	/* Create operation */
11377 	retval = create_cipher_auth_verify_operation(ts_params,
11378 			ut_params,
11379 			reference);
11380 
11381 	if (retval < 0)
11382 		return retval;
11383 
11384 	ut_params->op = process_crypto_request(ts_params->valid_devs[0],
11385 			ut_params->op);
11386 
11387 	TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
11388 	TEST_ASSERT_EQUAL(ut_params->op->status,
11389 			RTE_CRYPTO_OP_STATUS_SUCCESS,
11390 			"crypto op processing passed");
11391 
11392 	ut_params->obuf = ut_params->op->sym->m_src;
11393 	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
11394 
11395 	return 0;
11396 }
11397 
11398 static int
11399 create_aead_operation_SGL(enum rte_crypto_aead_operation op,
11400 		const struct aead_test_data *tdata,
11401 		void *digest_mem, uint64_t digest_phys)
11402 {
11403 	struct crypto_testsuite_params *ts_params = &testsuite_params;
11404 	struct crypto_unittest_params *ut_params = &unittest_params;
11405 
11406 	const unsigned int auth_tag_len = tdata->auth_tag.len;
11407 	const unsigned int iv_len = tdata->iv.len;
11408 	unsigned int aad_len = tdata->aad.len;
11409 	unsigned int aad_len_pad = 0;
11410 
11411 	/* Generate Crypto op data structure */
11412 	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
11413 			RTE_CRYPTO_OP_TYPE_SYMMETRIC);
11414 	TEST_ASSERT_NOT_NULL(ut_params->op,
11415 		"Failed to allocate symmetric crypto operation struct");
11416 
11417 	struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
11418 
11419 	sym_op->aead.digest.data = digest_mem;
11420 
11421 	TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
11422 			"no room to append digest");
11423 
11424 	sym_op->aead.digest.phys_addr = digest_phys;
11425 
11426 	if (op == RTE_CRYPTO_AEAD_OP_DECRYPT) {
11427 		rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
11428 				auth_tag_len);
11429 		debug_hexdump(stdout, "digest:",
11430 				sym_op->aead.digest.data,
11431 				auth_tag_len);
11432 	}
11433 
11434 	/* Append aad data */
11435 	if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) {
11436 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
11437 				uint8_t *, IV_OFFSET);
11438 
11439 		/* Copy IV 1 byte after the IV pointer, according to the API */
11440 		rte_memcpy(iv_ptr + 1, tdata->iv.data, iv_len);
11441 
11442 		aad_len = RTE_ALIGN_CEIL(aad_len + 18, 16);
11443 
11444 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
11445 				ut_params->ibuf, aad_len);
11446 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
11447 				"no room to prepend aad");
11448 		sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
11449 				ut_params->ibuf);
11450 
11451 		memset(sym_op->aead.aad.data, 0, aad_len);
11452 		/* Copy AAD 18 bytes after the AAD pointer, according to the API */
11453 		rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
11454 
11455 		debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
11456 		debug_hexdump(stdout, "aad:",
11457 				sym_op->aead.aad.data, aad_len);
11458 	} else {
11459 		uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
11460 				uint8_t *, IV_OFFSET);
11461 
11462 		rte_memcpy(iv_ptr, tdata->iv.data, iv_len);
11463 
11464 		aad_len_pad = RTE_ALIGN_CEIL(aad_len, 16);
11465 
11466 		sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
11467 				ut_params->ibuf, aad_len_pad);
11468 		TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
11469 				"no room to prepend aad");
11470 		sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
11471 				ut_params->ibuf);
11472 
11473 		memset(sym_op->aead.aad.data, 0, aad_len);
11474 		rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
11475 
11476 		debug_hexdump(stdout, "iv:", iv_ptr, iv_len);
11477 		debug_hexdump(stdout, "aad:",
11478 				sym_op->aead.aad.data, aad_len);
11479 	}
11480 
11481 	sym_op->aead.data.length = tdata->plaintext.len;
11482 	sym_op->aead.data.offset = aad_len_pad;
11483 
11484 	return 0;
11485 }
11486 
11487 #define SGL_MAX_NO	16
11488 
11489 static int
11490 test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
11491 		const int oop, uint32_t fragsz, uint32_t fragsz_oop)
11492 {
11493 	struct crypto_testsuite_params *ts_params = &testsuite_params;
11494 	struct crypto_unittest_params *ut_params = &unittest_params;
11495 	struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
11496 	int retval;
11497 	int to_trn = 0;
11498 	int to_trn_tbl[SGL_MAX_NO];
11499 	int segs = 1;
11500 	unsigned int trn_data = 0;
11501 	uint8_t *plaintext, *ciphertext, *auth_tag;
11502 
11503 	if (fragsz > tdata->plaintext.len)
11504 		fragsz = tdata->plaintext.len;
11505 
11506 	uint16_t plaintext_len = fragsz;
11507 	uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
11508 
11509 	if (fragsz_oop > tdata->plaintext.len)
11510 		frag_size_oop = tdata->plaintext.len;
11511 
11512 	int ecx = 0;
11513 	void *digest_mem = NULL;
11514 
11515 	uint32_t prepend_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
11516 
11517 	if (tdata->plaintext.len % fragsz != 0) {
11518 		if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
11519 			return 1;
11520 	}	else {
11521 		if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
11522 			return 1;
11523 	}
11524 
11525 	/*
11526 	 * For out-op-place we need to alloc another mbuf
11527 	 */
11528 	if (oop) {
11529 		ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11530 		rte_pktmbuf_append(ut_params->obuf,
11531 				frag_size_oop + prepend_len);
11532 		buf_oop = ut_params->obuf;
11533 	}
11534 
11535 	/* Create AEAD session */
11536 	retval = create_aead_session(ts_params->valid_devs[0],
11537 			tdata->algo,
11538 			RTE_CRYPTO_AEAD_OP_ENCRYPT,
11539 			tdata->key.data, tdata->key.len,
11540 			tdata->aad.len, tdata->auth_tag.len,
11541 			tdata->iv.len);
11542 	if (retval < 0)
11543 		return retval;
11544 
11545 	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11546 
11547 	/* clear mbuf payload */
11548 	memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
11549 			rte_pktmbuf_tailroom(ut_params->ibuf));
11550 
11551 	plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11552 			plaintext_len);
11553 
11554 	memcpy(plaintext, tdata->plaintext.data, plaintext_len);
11555 
11556 	trn_data += plaintext_len;
11557 
11558 	buf = ut_params->ibuf;
11559 
11560 	/*
11561 	 * Loop until no more fragments
11562 	 */
11563 
11564 	while (trn_data < tdata->plaintext.len) {
11565 		++segs;
11566 		to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
11567 				(tdata->plaintext.len - trn_data) : fragsz;
11568 
11569 		to_trn_tbl[ecx++] = to_trn;
11570 
11571 		buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
11572 		buf = buf->next;
11573 
11574 		memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
11575 				rte_pktmbuf_tailroom(buf));
11576 
11577 		/* OOP */
11578 		if (oop && !fragsz_oop) {
11579 			buf_last_oop = buf_oop->next =
11580 					rte_pktmbuf_alloc(ts_params->mbuf_pool);
11581 			buf_oop = buf_oop->next;
11582 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
11583 					0, rte_pktmbuf_tailroom(buf_oop));
11584 			rte_pktmbuf_append(buf_oop, to_trn);
11585 		}
11586 
11587 		plaintext = (uint8_t *)rte_pktmbuf_append(buf,
11588 				to_trn);
11589 
11590 		memcpy(plaintext, tdata->plaintext.data + trn_data,
11591 				to_trn);
11592 		trn_data += to_trn;
11593 		if (trn_data  == tdata->plaintext.len) {
11594 			if (oop) {
11595 				if (!fragsz_oop)
11596 					digest_mem = rte_pktmbuf_append(buf_oop,
11597 						tdata->auth_tag.len);
11598 			} else
11599 				digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
11600 					tdata->auth_tag.len);
11601 		}
11602 	}
11603 
11604 	uint64_t digest_phys = 0;
11605 
11606 	ut_params->ibuf->nb_segs = segs;
11607 
11608 	segs = 1;
11609 	if (fragsz_oop && oop) {
11610 		to_trn = 0;
11611 		ecx = 0;
11612 
11613 		if (frag_size_oop == tdata->plaintext.len) {
11614 			digest_mem = rte_pktmbuf_append(ut_params->obuf,
11615 				tdata->auth_tag.len);
11616 
11617 			digest_phys = rte_pktmbuf_iova_offset(
11618 					ut_params->obuf,
11619 					tdata->plaintext.len + prepend_len);
11620 		}
11621 
11622 		trn_data = frag_size_oop;
11623 		while (trn_data < tdata->plaintext.len) {
11624 			++segs;
11625 			to_trn =
11626 				(tdata->plaintext.len - trn_data <
11627 						frag_size_oop) ?
11628 				(tdata->plaintext.len - trn_data) :
11629 						frag_size_oop;
11630 
11631 			to_trn_tbl[ecx++] = to_trn;
11632 
11633 			buf_last_oop = buf_oop->next =
11634 					rte_pktmbuf_alloc(ts_params->mbuf_pool);
11635 			buf_oop = buf_oop->next;
11636 			memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
11637 					0, rte_pktmbuf_tailroom(buf_oop));
11638 			rte_pktmbuf_append(buf_oop, to_trn);
11639 
11640 			trn_data += to_trn;
11641 
11642 			if (trn_data  == tdata->plaintext.len) {
11643 				digest_mem = rte_pktmbuf_append(buf_oop,
11644 					tdata->auth_tag.len);
11645 			}
11646 		}
11647 
11648 		ut_params->obuf->nb_segs = segs;
11649 	}
11650 
11651 	/*
11652 	 * Place digest at the end of the last buffer
11653 	 */
11654 	if (!digest_phys)
11655 		digest_phys = rte_pktmbuf_iova(buf) + to_trn;
11656 	if (oop && buf_last_oop)
11657 		digest_phys = rte_pktmbuf_iova(buf_last_oop) + to_trn;
11658 
11659 	if (!digest_mem && !oop) {
11660 		digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
11661 				+ tdata->auth_tag.len);
11662 		digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf,
11663 				tdata->plaintext.len);
11664 	}
11665 
11666 	/* Create AEAD operation */
11667 	retval = create_aead_operation_SGL(RTE_CRYPTO_AEAD_OP_ENCRYPT,
11668 			tdata, digest_mem, digest_phys);
11669 
11670 	if (retval < 0)
11671 		return retval;
11672 
11673 	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
11674 
11675 	ut_params->op->sym->m_src = ut_params->ibuf;
11676 	if (oop)
11677 		ut_params->op->sym->m_dst = ut_params->obuf;
11678 
11679 	/* Process crypto operation */
11680 	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
11681 			ut_params->op), "failed to process sym crypto op");
11682 
11683 	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
11684 			"crypto op processing failed");
11685 
11686 
11687 	ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
11688 			uint8_t *, prepend_len);
11689 	if (oop) {
11690 		ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
11691 				uint8_t *, prepend_len);
11692 	}
11693 
11694 	if (fragsz_oop)
11695 		fragsz = fragsz_oop;
11696 
11697 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
11698 			ciphertext,
11699 			tdata->ciphertext.data,
11700 			fragsz,
11701 			"Ciphertext data not as expected");
11702 
11703 	buf = ut_params->op->sym->m_src->next;
11704 	if (oop)
11705 		buf = ut_params->op->sym->m_dst->next;
11706 
11707 	unsigned int off = fragsz;
11708 
11709 	ecx = 0;
11710 	while (buf) {
11711 		ciphertext = rte_pktmbuf_mtod(buf,
11712 				uint8_t *);
11713 
11714 		TEST_ASSERT_BUFFERS_ARE_EQUAL(
11715 				ciphertext,
11716 				tdata->ciphertext.data + off,
11717 				to_trn_tbl[ecx],
11718 				"Ciphertext data not as expected");
11719 
11720 		off += to_trn_tbl[ecx++];
11721 		buf = buf->next;
11722 	}
11723 
11724 	auth_tag = digest_mem;
11725 	TEST_ASSERT_BUFFERS_ARE_EQUAL(
11726 			auth_tag,
11727 			tdata->auth_tag.data,
11728 			tdata->auth_tag.len,
11729 			"Generated auth tag not as expected");
11730 
11731 	return 0;
11732 }
11733 
11734 static int
11735 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
11736 {
11737 	return test_authenticated_encryption_SGL(
11738 			&gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
11739 }
11740 
11741 static int
11742 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
11743 {
11744 	return test_authenticated_encryption_SGL(
11745 			&gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
11746 }
11747 
11748 static int
11749 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
11750 {
11751 	return test_authenticated_encryption_SGL(
11752 			&gcm_test_case_8, OUT_OF_PLACE, 400,
11753 			gcm_test_case_8.plaintext.len);
11754 }
11755 
11756 static int
11757 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
11758 {
11759 
11760 	return test_authenticated_encryption_SGL(
11761 			&gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
11762 }
11763 
11764 static int
11765 test_authentication_verify_fail_when_data_corrupted(
11766 		struct crypto_testsuite_params *ts_params,
11767 		struct crypto_unittest_params *ut_params,
11768 		const struct test_crypto_vector *reference)
11769 {
11770 	return test_authentication_verify_fail_when_data_corruption(
11771 			ts_params, ut_params, reference, 1);
11772 }
11773 
11774 static int
11775 test_authentication_verify_fail_when_tag_corrupted(
11776 		struct crypto_testsuite_params *ts_params,
11777 		struct crypto_unittest_params *ut_params,
11778 		const struct test_crypto_vector *reference)
11779 {
11780 	return test_authentication_verify_fail_when_data_corruption(
11781 			ts_params, ut_params, reference, 0);
11782 }
11783 
11784 static int
11785 test_authentication_verify_GMAC_fail_when_data_corrupted(
11786 		struct crypto_testsuite_params *ts_params,
11787 		struct crypto_unittest_params *ut_params,
11788 		const struct test_crypto_vector *reference)
11789 {
11790 	return test_authentication_verify_GMAC_fail_when_corruption(
11791 			ts_params, ut_params, reference, 1);
11792 }
11793 
11794 static int
11795 test_authentication_verify_GMAC_fail_when_tag_corrupted(
11796 		struct crypto_testsuite_params *ts_params,
11797 		struct crypto_unittest_params *ut_params,
11798 		const struct test_crypto_vector *reference)
11799 {
11800 	return test_authentication_verify_GMAC_fail_when_corruption(
11801 			ts_params, ut_params, reference, 0);
11802 }
11803 
11804 static int
11805 test_authenticated_decryption_fail_when_data_corrupted(
11806 		struct crypto_testsuite_params *ts_params,
11807 		struct crypto_unittest_params *ut_params,
11808 		const struct test_crypto_vector *reference)
11809 {
11810 	return test_authenticated_decryption_fail_when_corruption(
11811 			ts_params, ut_params, reference, 1);
11812 }
11813 
11814 static int
11815 test_authenticated_decryption_fail_when_tag_corrupted(
11816 		struct crypto_testsuite_params *ts_params,
11817 		struct crypto_unittest_params *ut_params,
11818 		const struct test_crypto_vector *reference)
11819 {
11820 	return test_authenticated_decryption_fail_when_corruption(
11821 			ts_params, ut_params, reference, 0);
11822 }
11823 
11824 static int
11825 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
11826 {
11827 	return test_authentication_verify_fail_when_data_corrupted(
11828 			&testsuite_params, &unittest_params,
11829 			&hmac_sha1_test_crypto_vector);
11830 }
11831 
11832 static int
11833 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
11834 {
11835 	return test_authentication_verify_fail_when_tag_corrupted(
11836 			&testsuite_params, &unittest_params,
11837 			&hmac_sha1_test_crypto_vector);
11838 }
11839 
11840 static int
11841 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
11842 {
11843 	return test_authentication_verify_GMAC_fail_when_data_corrupted(
11844 			&testsuite_params, &unittest_params,
11845 			&aes128_gmac_test_vector);
11846 }
11847 
11848 static int
11849 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
11850 {
11851 	return test_authentication_verify_GMAC_fail_when_tag_corrupted(
11852 			&testsuite_params, &unittest_params,
11853 			&aes128_gmac_test_vector);
11854 }
11855 
11856 static int
11857 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
11858 {
11859 	return test_authenticated_decryption_fail_when_data_corrupted(
11860 			&testsuite_params,
11861 			&unittest_params,
11862 			&aes128cbc_hmac_sha1_test_vector);
11863 }
11864 
11865 static int
11866 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
11867 {
11868 	return test_authenticated_decryption_fail_when_tag_corrupted(
11869 			&testsuite_params,
11870 			&unittest_params,
11871 			&aes128cbc_hmac_sha1_test_vector);
11872 }
11873 
11874 static int
11875 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check(void)
11876 {
11877 	return test_authenticated_encryt_with_esn(
11878 			&testsuite_params,
11879 			&unittest_params,
11880 			&aes128cbc_hmac_sha1_aad_test_vector);
11881 }
11882 
11883 static int
11884 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check(void)
11885 {
11886 	return test_authenticated_decrypt_with_esn(
11887 			&testsuite_params,
11888 			&unittest_params,
11889 			&aes128cbc_hmac_sha1_aad_test_vector);
11890 }
11891 
11892 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
11893 
11894 /* global AESNI slave IDs for the scheduler test */
11895 uint8_t aesni_ids[2];
11896 
11897 static int
11898 test_scheduler_attach_slave_op(void)
11899 {
11900 	struct crypto_testsuite_params *ts_params = &testsuite_params;
11901 	uint8_t sched_id = ts_params->valid_devs[0];
11902 	uint32_t nb_devs, i, nb_devs_attached = 0;
11903 	int ret;
11904 	char vdev_name[32];
11905 
11906 	/* create 2 AESNI_MB if necessary */
11907 	nb_devs = rte_cryptodev_device_count_by_driver(
11908 			rte_cryptodev_driver_id_get(
11909 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
11910 	if (nb_devs < 2) {
11911 		for (i = nb_devs; i < 2; i++) {
11912 			snprintf(vdev_name, sizeof(vdev_name), "%s_%u",
11913 					RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
11914 					i);
11915 			ret = rte_vdev_init(vdev_name, NULL);
11916 
11917 			TEST_ASSERT(ret == 0,
11918 				"Failed to create instance %u of"
11919 				" pmd : %s",
11920 				i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
11921 		}
11922 	}
11923 
11924 	/* attach 2 AESNI_MB cdevs */
11925 	for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
11926 			i++) {
11927 		struct rte_cryptodev_info info;
11928 		unsigned int session_size;
11929 
11930 		rte_cryptodev_info_get(i, &info);
11931 		if (info.driver_id != rte_cryptodev_driver_id_get(
11932 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)))
11933 			continue;
11934 
11935 		session_size = rte_cryptodev_sym_get_private_session_size(i);
11936 		/*
11937 		 * Create the session mempool again, since now there are new devices
11938 		 * to use the mempool.
11939 		 */
11940 		if (ts_params->session_mpool) {
11941 			rte_mempool_free(ts_params->session_mpool);
11942 			ts_params->session_mpool = NULL;
11943 		}
11944 		if (ts_params->session_priv_mpool) {
11945 			rte_mempool_free(ts_params->session_priv_mpool);
11946 			ts_params->session_priv_mpool = NULL;
11947 		}
11948 
11949 		if (info.sym.max_nb_sessions != 0 &&
11950 				info.sym.max_nb_sessions < MAX_NB_SESSIONS) {
11951 			RTE_LOG(ERR, USER1,
11952 					"Device does not support "
11953 					"at least %u sessions\n",
11954 					MAX_NB_SESSIONS);
11955 			return TEST_FAILED;
11956 		}
11957 		/*
11958 		 * Create mempool with maximum number of sessions,
11959 		 * to include the session headers
11960 		 */
11961 		if (ts_params->session_mpool == NULL) {
11962 			ts_params->session_mpool =
11963 				rte_cryptodev_sym_session_pool_create(
11964 						"test_sess_mp",
11965 						MAX_NB_SESSIONS, 0, 0, 0,
11966 						SOCKET_ID_ANY);
11967 			TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
11968 					"session mempool allocation failed");
11969 		}
11970 
11971 		/*
11972 		 * Create mempool with maximum number of sessions,
11973 		 * to include device specific session private data
11974 		 */
11975 		if (ts_params->session_priv_mpool == NULL) {
11976 			ts_params->session_priv_mpool = rte_mempool_create(
11977 					"test_sess_mp_priv",
11978 					MAX_NB_SESSIONS,
11979 					session_size,
11980 					0, 0, NULL, NULL, NULL,
11981 					NULL, SOCKET_ID_ANY,
11982 					0);
11983 
11984 			TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool,
11985 					"session mempool allocation failed");
11986 		}
11987 
11988 		ts_params->qp_conf.mp_session = ts_params->session_mpool;
11989 		ts_params->qp_conf.mp_session_private =
11990 				ts_params->session_priv_mpool;
11991 
11992 		ret = rte_cryptodev_scheduler_slave_attach(sched_id,
11993 				(uint8_t)i);
11994 
11995 		TEST_ASSERT(ret == 0,
11996 			"Failed to attach device %u of pmd : %s", i,
11997 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
11998 
11999 		aesni_ids[nb_devs_attached] = (uint8_t)i;
12000 
12001 		nb_devs_attached++;
12002 	}
12003 
12004 	return 0;
12005 }
12006 
12007 static int
12008 test_scheduler_detach_slave_op(void)
12009 {
12010 	struct crypto_testsuite_params *ts_params = &testsuite_params;
12011 	uint8_t sched_id = ts_params->valid_devs[0];
12012 	uint32_t i;
12013 	int ret;
12014 
12015 	for (i = 0; i < 2; i++) {
12016 		ret = rte_cryptodev_scheduler_slave_detach(sched_id,
12017 				aesni_ids[i]);
12018 		TEST_ASSERT(ret == 0,
12019 			"Failed to detach device %u", aesni_ids[i]);
12020 	}
12021 
12022 	return 0;
12023 }
12024 
12025 static int
12026 test_scheduler_mode_op(enum rte_cryptodev_scheduler_mode scheduler_mode)
12027 {
12028 	struct crypto_testsuite_params *ts_params = &testsuite_params;
12029 	uint8_t sched_id = ts_params->valid_devs[0];
12030 	/* set mode */
12031 	return rte_cryptodev_scheduler_mode_set(sched_id,
12032 		scheduler_mode);
12033 }
12034 
12035 static int
12036 test_scheduler_mode_roundrobin_op(void)
12037 {
12038 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_ROUNDROBIN) ==
12039 			0, "Failed to set roundrobin mode");
12040 	return 0;
12041 
12042 }
12043 
12044 static int
12045 test_scheduler_mode_multicore_op(void)
12046 {
12047 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_MULTICORE) ==
12048 			0, "Failed to set multicore mode");
12049 
12050 	return 0;
12051 }
12052 
12053 static int
12054 test_scheduler_mode_failover_op(void)
12055 {
12056 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_FAILOVER) ==
12057 			0, "Failed to set failover mode");
12058 
12059 	return 0;
12060 }
12061 
12062 static int
12063 test_scheduler_mode_pkt_size_distr_op(void)
12064 {
12065 	TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_PKT_SIZE_DISTR) ==
12066 			0, "Failed to set pktsize mode");
12067 
12068 	return 0;
12069 }
12070 
12071 static struct unit_test_suite cryptodev_scheduler_testsuite  = {
12072 	.suite_name = "Crypto Device Scheduler Unit Test Suite",
12073 	.setup = testsuite_setup,
12074 	.teardown = testsuite_teardown,
12075 	.unit_test_cases = {
12076 		/* Multi Core */
12077 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
12078 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_multicore_op),
12079 		TEST_CASE_ST(ut_setup, ut_teardown,
12080 					test_AES_chain_scheduler_all),
12081 		TEST_CASE_ST(ut_setup, ut_teardown,
12082 					test_AES_cipheronly_scheduler_all),
12083 		TEST_CASE_ST(ut_setup, ut_teardown,
12084 					test_authonly_scheduler_all),
12085 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
12086 
12087 		/* Round Robin */
12088 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
12089 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_roundrobin_op),
12090 		TEST_CASE_ST(ut_setup, ut_teardown,
12091 				test_AES_chain_scheduler_all),
12092 		TEST_CASE_ST(ut_setup, ut_teardown,
12093 				test_AES_cipheronly_scheduler_all),
12094 		TEST_CASE_ST(ut_setup, ut_teardown,
12095 				test_authonly_scheduler_all),
12096 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
12097 
12098 		/* Fail over */
12099 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
12100 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_failover_op),
12101 		TEST_CASE_ST(ut_setup, ut_teardown,
12102 					test_AES_chain_scheduler_all),
12103 		TEST_CASE_ST(ut_setup, ut_teardown,
12104 					test_AES_cipheronly_scheduler_all),
12105 		TEST_CASE_ST(ut_setup, ut_teardown,
12106 					test_authonly_scheduler_all),
12107 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
12108 
12109 		/* PKT SIZE */
12110 		TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
12111 		TEST_CASE_ST(NULL, NULL, test_scheduler_mode_pkt_size_distr_op),
12112 		TEST_CASE_ST(ut_setup, ut_teardown,
12113 					test_AES_chain_scheduler_all),
12114 		TEST_CASE_ST(ut_setup, ut_teardown,
12115 					test_AES_cipheronly_scheduler_all),
12116 		TEST_CASE_ST(ut_setup, ut_teardown,
12117 					test_authonly_scheduler_all),
12118 		TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
12119 
12120 		TEST_CASES_END() /**< NULL terminate unit test array */
12121 	}
12122 };
12123 
12124 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
12125 
12126 static struct unit_test_suite cryptodev_qat_testsuite  = {
12127 	.suite_name = "Crypto QAT Unit Test Suite",
12128 	.setup = testsuite_setup,
12129 	.teardown = testsuite_teardown,
12130 	.unit_test_cases = {
12131 		TEST_CASE_ST(ut_setup, ut_teardown,
12132 				test_device_configure_invalid_dev_id),
12133 		TEST_CASE_ST(ut_setup, ut_teardown,
12134 				test_device_configure_invalid_queue_pair_ids),
12135 		TEST_CASE_ST(ut_setup, ut_teardown,
12136 				test_queue_pair_descriptor_setup),
12137 		TEST_CASE_ST(ut_setup, ut_teardown,
12138 				test_multi_session),
12139 
12140 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
12141 		TEST_CASE_ST(ut_setup, ut_teardown,
12142 						test_AES_cipheronly_qat_all),
12143 		TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
12144 		TEST_CASE_ST(ut_setup, ut_teardown,
12145 						test_3DES_cipheronly_qat_all),
12146 		TEST_CASE_ST(ut_setup, ut_teardown,
12147 						test_DES_cipheronly_qat_all),
12148 		TEST_CASE_ST(ut_setup, ut_teardown,
12149 						test_AES_docsis_qat_all),
12150 		TEST_CASE_ST(ut_setup, ut_teardown,
12151 						test_DES_docsis_qat_all),
12152 		TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_qat_all),
12153 		TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
12154 
12155 		/** AES CCM Authenticated Encryption 128 bits key */
12156 		TEST_CASE_ST(ut_setup, ut_teardown,
12157 			test_AES_CCM_authenticated_encryption_test_case_128_1),
12158 		TEST_CASE_ST(ut_setup, ut_teardown,
12159 			test_AES_CCM_authenticated_encryption_test_case_128_2),
12160 		TEST_CASE_ST(ut_setup, ut_teardown,
12161 			test_AES_CCM_authenticated_encryption_test_case_128_3),
12162 
12163 		/** AES CCM Authenticated Decryption 128 bits key*/
12164 		TEST_CASE_ST(ut_setup, ut_teardown,
12165 			test_AES_CCM_authenticated_decryption_test_case_128_1),
12166 		TEST_CASE_ST(ut_setup, ut_teardown,
12167 			test_AES_CCM_authenticated_decryption_test_case_128_2),
12168 		TEST_CASE_ST(ut_setup, ut_teardown,
12169 			test_AES_CCM_authenticated_decryption_test_case_128_3),
12170 
12171 		/** AES GCM Authenticated Encryption */
12172 		TEST_CASE_ST(ut_setup, ut_teardown,
12173 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
12174 		TEST_CASE_ST(ut_setup, ut_teardown,
12175 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
12176 		TEST_CASE_ST(ut_setup, ut_teardown,
12177 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
12178 		TEST_CASE_ST(ut_setup, ut_teardown,
12179 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
12180 		TEST_CASE_ST(ut_setup, ut_teardown,
12181 			test_AES_GCM_authenticated_encryption_test_case_1),
12182 		TEST_CASE_ST(ut_setup, ut_teardown,
12183 			test_AES_GCM_authenticated_encryption_test_case_2),
12184 		TEST_CASE_ST(ut_setup, ut_teardown,
12185 			test_AES_GCM_authenticated_encryption_test_case_3),
12186 		TEST_CASE_ST(ut_setup, ut_teardown,
12187 			test_AES_GCM_authenticated_encryption_test_case_4),
12188 		TEST_CASE_ST(ut_setup, ut_teardown,
12189 			test_AES_GCM_authenticated_encryption_test_case_5),
12190 		TEST_CASE_ST(ut_setup, ut_teardown,
12191 			test_AES_GCM_authenticated_encryption_test_case_6),
12192 		TEST_CASE_ST(ut_setup, ut_teardown,
12193 			test_AES_GCM_authenticated_encryption_test_case_7),
12194 		TEST_CASE_ST(ut_setup, ut_teardown,
12195 			test_AES_GCM_authenticated_encryption_test_case_8),
12196 
12197 		/** AES GCM Authenticated Decryption */
12198 		TEST_CASE_ST(ut_setup, ut_teardown,
12199 			test_AES_GCM_authenticated_decryption_test_case_1),
12200 		TEST_CASE_ST(ut_setup, ut_teardown,
12201 			test_AES_GCM_authenticated_decryption_test_case_2),
12202 		TEST_CASE_ST(ut_setup, ut_teardown,
12203 			test_AES_GCM_authenticated_decryption_test_case_3),
12204 		TEST_CASE_ST(ut_setup, ut_teardown,
12205 			test_AES_GCM_authenticated_decryption_test_case_4),
12206 		TEST_CASE_ST(ut_setup, ut_teardown,
12207 			test_AES_GCM_authenticated_decryption_test_case_5),
12208 		TEST_CASE_ST(ut_setup, ut_teardown,
12209 			test_AES_GCM_authenticated_decryption_test_case_6),
12210 		TEST_CASE_ST(ut_setup, ut_teardown,
12211 			test_AES_GCM_authenticated_decryption_test_case_7),
12212 		TEST_CASE_ST(ut_setup, ut_teardown,
12213 			test_AES_GCM_authenticated_decryption_test_case_8),
12214 
12215 		/** AES GCM Authenticated Encryption 192 bits key */
12216 		TEST_CASE_ST(ut_setup, ut_teardown,
12217 			test_AES_GCM_auth_encryption_test_case_192_1),
12218 		TEST_CASE_ST(ut_setup, ut_teardown,
12219 			test_AES_GCM_auth_encryption_test_case_192_2),
12220 		TEST_CASE_ST(ut_setup, ut_teardown,
12221 			test_AES_GCM_auth_encryption_test_case_192_3),
12222 		TEST_CASE_ST(ut_setup, ut_teardown,
12223 			test_AES_GCM_auth_encryption_test_case_192_4),
12224 		TEST_CASE_ST(ut_setup, ut_teardown,
12225 			test_AES_GCM_auth_encryption_test_case_192_5),
12226 		TEST_CASE_ST(ut_setup, ut_teardown,
12227 			test_AES_GCM_auth_encryption_test_case_192_6),
12228 		TEST_CASE_ST(ut_setup, ut_teardown,
12229 			test_AES_GCM_auth_encryption_test_case_192_7),
12230 
12231 		/** AES GCM Authenticated Decryption 192 bits key */
12232 		TEST_CASE_ST(ut_setup, ut_teardown,
12233 			test_AES_GCM_auth_decryption_test_case_192_1),
12234 		TEST_CASE_ST(ut_setup, ut_teardown,
12235 			test_AES_GCM_auth_decryption_test_case_192_2),
12236 		TEST_CASE_ST(ut_setup, ut_teardown,
12237 			test_AES_GCM_auth_decryption_test_case_192_3),
12238 		TEST_CASE_ST(ut_setup, ut_teardown,
12239 			test_AES_GCM_auth_decryption_test_case_192_4),
12240 		TEST_CASE_ST(ut_setup, ut_teardown,
12241 			test_AES_GCM_auth_decryption_test_case_192_5),
12242 		TEST_CASE_ST(ut_setup, ut_teardown,
12243 			test_AES_GCM_auth_decryption_test_case_192_6),
12244 		TEST_CASE_ST(ut_setup, ut_teardown,
12245 			test_AES_GCM_auth_decryption_test_case_192_7),
12246 
12247 		/** AES GCM Authenticated Encryption 256 bits key */
12248 		TEST_CASE_ST(ut_setup, ut_teardown,
12249 			test_AES_GCM_auth_encryption_test_case_256_1),
12250 		TEST_CASE_ST(ut_setup, ut_teardown,
12251 			test_AES_GCM_auth_encryption_test_case_256_2),
12252 		TEST_CASE_ST(ut_setup, ut_teardown,
12253 			test_AES_GCM_auth_encryption_test_case_256_3),
12254 		TEST_CASE_ST(ut_setup, ut_teardown,
12255 			test_AES_GCM_auth_encryption_test_case_256_4),
12256 		TEST_CASE_ST(ut_setup, ut_teardown,
12257 			test_AES_GCM_auth_encryption_test_case_256_5),
12258 		TEST_CASE_ST(ut_setup, ut_teardown,
12259 			test_AES_GCM_auth_encryption_test_case_256_6),
12260 		TEST_CASE_ST(ut_setup, ut_teardown,
12261 			test_AES_GCM_auth_encryption_test_case_256_7),
12262 
12263 		/** AES GCM Authenticated Decryption 256 bits key */
12264 		TEST_CASE_ST(ut_setup, ut_teardown,
12265 			test_AES_GCM_auth_decryption_test_case_256_1),
12266 		TEST_CASE_ST(ut_setup, ut_teardown,
12267 			test_AES_GCM_auth_decryption_test_case_256_2),
12268 		TEST_CASE_ST(ut_setup, ut_teardown,
12269 			test_AES_GCM_auth_decryption_test_case_256_3),
12270 		TEST_CASE_ST(ut_setup, ut_teardown,
12271 			test_AES_GCM_auth_decryption_test_case_256_4),
12272 		TEST_CASE_ST(ut_setup, ut_teardown,
12273 			test_AES_GCM_auth_decryption_test_case_256_5),
12274 		TEST_CASE_ST(ut_setup, ut_teardown,
12275 			test_AES_GCM_auth_decryption_test_case_256_6),
12276 		TEST_CASE_ST(ut_setup, ut_teardown,
12277 			test_AES_GCM_auth_decryption_test_case_256_7),
12278 
12279 		/** AES GMAC Authentication */
12280 		TEST_CASE_ST(ut_setup, ut_teardown,
12281 			test_AES_GMAC_authentication_test_case_1),
12282 		TEST_CASE_ST(ut_setup, ut_teardown,
12283 			test_AES_GMAC_authentication_verify_test_case_1),
12284 		TEST_CASE_ST(ut_setup, ut_teardown,
12285 			test_AES_GMAC_authentication_test_case_2),
12286 		TEST_CASE_ST(ut_setup, ut_teardown,
12287 			test_AES_GMAC_authentication_verify_test_case_2),
12288 		TEST_CASE_ST(ut_setup, ut_teardown,
12289 			test_AES_GMAC_authentication_test_case_3),
12290 		TEST_CASE_ST(ut_setup, ut_teardown,
12291 			test_AES_GMAC_authentication_verify_test_case_3),
12292 
12293 		/** SNOW 3G encrypt only (UEA2) */
12294 		TEST_CASE_ST(ut_setup, ut_teardown,
12295 			test_snow3g_encryption_test_case_1),
12296 		TEST_CASE_ST(ut_setup, ut_teardown,
12297 			test_snow3g_encryption_test_case_2),
12298 		TEST_CASE_ST(ut_setup, ut_teardown,
12299 			test_snow3g_encryption_test_case_3),
12300 		TEST_CASE_ST(ut_setup, ut_teardown,
12301 			test_snow3g_encryption_test_case_4),
12302 		TEST_CASE_ST(ut_setup, ut_teardown,
12303 			test_snow3g_encryption_test_case_5),
12304 
12305 		TEST_CASE_ST(ut_setup, ut_teardown,
12306 			test_snow3g_encryption_test_case_1_oop),
12307 		TEST_CASE_ST(ut_setup, ut_teardown,
12308 			test_snow3g_decryption_test_case_1_oop),
12309 
12310 		/** SNOW 3G generate auth, then encrypt (UEA2) */
12311 		TEST_CASE_ST(ut_setup, ut_teardown,
12312 			test_snow3g_auth_cipher_test_case_1),
12313 		TEST_CASE_ST(ut_setup, ut_teardown,
12314 			test_snow3g_auth_cipher_test_case_2),
12315 		TEST_CASE_ST(ut_setup, ut_teardown,
12316 			test_snow3g_auth_cipher_test_case_2_oop),
12317 		TEST_CASE_ST(ut_setup, ut_teardown,
12318 			test_snow3g_auth_cipher_part_digest_enc),
12319 		TEST_CASE_ST(ut_setup, ut_teardown,
12320 			test_snow3g_auth_cipher_part_digest_enc_oop),
12321 		TEST_CASE_ST(ut_setup, ut_teardown,
12322 			test_snow3g_auth_cipher_test_case_3_sgl),
12323 		TEST_CASE_ST(ut_setup, ut_teardown,
12324 			test_snow3g_auth_cipher_test_case_3_oop_sgl),
12325 		TEST_CASE_ST(ut_setup, ut_teardown,
12326 			test_snow3g_auth_cipher_part_digest_enc_sgl),
12327 		TEST_CASE_ST(ut_setup, ut_teardown,
12328 			test_snow3g_auth_cipher_part_digest_enc_oop_sgl),
12329 
12330 		/** SNOW 3G decrypt (UEA2), then verify auth */
12331 		TEST_CASE_ST(ut_setup, ut_teardown,
12332 			test_snow3g_auth_cipher_verify_test_case_1),
12333 		TEST_CASE_ST(ut_setup, ut_teardown,
12334 			test_snow3g_auth_cipher_verify_test_case_2),
12335 		TEST_CASE_ST(ut_setup, ut_teardown,
12336 			test_snow3g_auth_cipher_verify_test_case_2_oop),
12337 		TEST_CASE_ST(ut_setup, ut_teardown,
12338 			test_snow3g_auth_cipher_verify_part_digest_enc),
12339 		TEST_CASE_ST(ut_setup, ut_teardown,
12340 			test_snow3g_auth_cipher_verify_part_digest_enc_oop),
12341 		TEST_CASE_ST(ut_setup, ut_teardown,
12342 			test_snow3g_auth_cipher_verify_test_case_3_sgl),
12343 		TEST_CASE_ST(ut_setup, ut_teardown,
12344 			test_snow3g_auth_cipher_verify_test_case_3_oop_sgl),
12345 		TEST_CASE_ST(ut_setup, ut_teardown,
12346 			test_snow3g_auth_cipher_verify_part_digest_enc_sgl),
12347 		TEST_CASE_ST(ut_setup, ut_teardown,
12348 			test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl),
12349 
12350 		/** SNOW 3G decrypt only (UEA2) */
12351 		TEST_CASE_ST(ut_setup, ut_teardown,
12352 			test_snow3g_decryption_test_case_1),
12353 		TEST_CASE_ST(ut_setup, ut_teardown,
12354 			test_snow3g_decryption_test_case_2),
12355 		TEST_CASE_ST(ut_setup, ut_teardown,
12356 			test_snow3g_decryption_test_case_3),
12357 		TEST_CASE_ST(ut_setup, ut_teardown,
12358 			test_snow3g_decryption_test_case_4),
12359 		TEST_CASE_ST(ut_setup, ut_teardown,
12360 			test_snow3g_decryption_test_case_5),
12361 		TEST_CASE_ST(ut_setup, ut_teardown,
12362 			test_snow3g_decryption_with_digest_test_case_1),
12363 		TEST_CASE_ST(ut_setup, ut_teardown,
12364 			test_snow3g_hash_generate_test_case_1),
12365 		TEST_CASE_ST(ut_setup, ut_teardown,
12366 			test_snow3g_hash_generate_test_case_2),
12367 		TEST_CASE_ST(ut_setup, ut_teardown,
12368 			test_snow3g_hash_generate_test_case_3),
12369 		TEST_CASE_ST(ut_setup, ut_teardown,
12370 			test_snow3g_hash_verify_test_case_1),
12371 		TEST_CASE_ST(ut_setup, ut_teardown,
12372 			test_snow3g_hash_verify_test_case_2),
12373 		TEST_CASE_ST(ut_setup, ut_teardown,
12374 			test_snow3g_hash_verify_test_case_3),
12375 		TEST_CASE_ST(ut_setup, ut_teardown,
12376 			test_snow3g_cipher_auth_test_case_1),
12377 		TEST_CASE_ST(ut_setup, ut_teardown,
12378 			test_snow3g_auth_cipher_with_digest_test_case_1),
12379 
12380 		/** ZUC encrypt only (EEA3) */
12381 		TEST_CASE_ST(ut_setup, ut_teardown,
12382 			test_zuc_encryption_test_case_1),
12383 		TEST_CASE_ST(ut_setup, ut_teardown,
12384 			test_zuc_encryption_test_case_2),
12385 		TEST_CASE_ST(ut_setup, ut_teardown,
12386 			test_zuc_encryption_test_case_3),
12387 		TEST_CASE_ST(ut_setup, ut_teardown,
12388 			test_zuc_encryption_test_case_4),
12389 		TEST_CASE_ST(ut_setup, ut_teardown,
12390 			test_zuc_encryption_test_case_5),
12391 
12392 		/** ZUC authenticate (EIA3) */
12393 		TEST_CASE_ST(ut_setup, ut_teardown,
12394 			test_zuc_hash_generate_test_case_6),
12395 		TEST_CASE_ST(ut_setup, ut_teardown,
12396 			test_zuc_hash_generate_test_case_7),
12397 		TEST_CASE_ST(ut_setup, ut_teardown,
12398 			test_zuc_hash_generate_test_case_8),
12399 
12400 		/** ZUC alg-chain (EEA3/EIA3) */
12401 		TEST_CASE_ST(ut_setup, ut_teardown,
12402 			test_zuc_cipher_auth_test_case_1),
12403 		TEST_CASE_ST(ut_setup, ut_teardown,
12404 			test_zuc_cipher_auth_test_case_2),
12405 
12406 		/** ZUC generate auth, then encrypt (EEA3) */
12407 		TEST_CASE_ST(ut_setup, ut_teardown,
12408 			test_zuc_auth_cipher_test_case_1),
12409 		TEST_CASE_ST(ut_setup, ut_teardown,
12410 			test_zuc_auth_cipher_test_case_1_oop),
12411 		TEST_CASE_ST(ut_setup, ut_teardown,
12412 			test_zuc_auth_cipher_test_case_1_sgl),
12413 		TEST_CASE_ST(ut_setup, ut_teardown,
12414 			test_zuc_auth_cipher_test_case_1_oop_sgl),
12415 
12416 		/** ZUC decrypt (EEA3), then verify auth */
12417 		TEST_CASE_ST(ut_setup, ut_teardown,
12418 			test_zuc_auth_cipher_verify_test_case_1),
12419 		TEST_CASE_ST(ut_setup, ut_teardown,
12420 			test_zuc_auth_cipher_verify_test_case_1_oop),
12421 		TEST_CASE_ST(ut_setup, ut_teardown,
12422 			test_zuc_auth_cipher_verify_test_case_1_sgl),
12423 		TEST_CASE_ST(ut_setup, ut_teardown,
12424 			test_zuc_auth_cipher_verify_test_case_1_oop_sgl),
12425 
12426 		/** HMAC_MD5 Authentication */
12427 		TEST_CASE_ST(ut_setup, ut_teardown,
12428 			test_MD5_HMAC_generate_case_1),
12429 		TEST_CASE_ST(ut_setup, ut_teardown,
12430 			test_MD5_HMAC_verify_case_1),
12431 		TEST_CASE_ST(ut_setup, ut_teardown,
12432 			test_MD5_HMAC_generate_case_2),
12433 		TEST_CASE_ST(ut_setup, ut_teardown,
12434 			test_MD5_HMAC_verify_case_2),
12435 
12436 		/** NULL algo tests done in chain_all,
12437 		 * cipheronly and authonly suites
12438 		 */
12439 
12440 		/** KASUMI tests */
12441 		TEST_CASE_ST(ut_setup, ut_teardown,
12442 			test_kasumi_hash_generate_test_case_1),
12443 		TEST_CASE_ST(ut_setup, ut_teardown,
12444 			test_kasumi_hash_generate_test_case_2),
12445 		TEST_CASE_ST(ut_setup, ut_teardown,
12446 			test_kasumi_hash_generate_test_case_3),
12447 		TEST_CASE_ST(ut_setup, ut_teardown,
12448 			test_kasumi_hash_generate_test_case_4),
12449 		TEST_CASE_ST(ut_setup, ut_teardown,
12450 			test_kasumi_hash_generate_test_case_5),
12451 		TEST_CASE_ST(ut_setup, ut_teardown,
12452 			test_kasumi_hash_generate_test_case_6),
12453 
12454 		TEST_CASE_ST(ut_setup, ut_teardown,
12455 			test_kasumi_hash_verify_test_case_1),
12456 		TEST_CASE_ST(ut_setup, ut_teardown,
12457 			test_kasumi_hash_verify_test_case_2),
12458 		TEST_CASE_ST(ut_setup, ut_teardown,
12459 			test_kasumi_hash_verify_test_case_3),
12460 		TEST_CASE_ST(ut_setup, ut_teardown,
12461 			test_kasumi_hash_verify_test_case_4),
12462 		TEST_CASE_ST(ut_setup, ut_teardown,
12463 			test_kasumi_hash_verify_test_case_5),
12464 
12465 		TEST_CASE_ST(ut_setup, ut_teardown,
12466 			test_kasumi_encryption_test_case_1),
12467 		TEST_CASE_ST(ut_setup, ut_teardown,
12468 			test_kasumi_encryption_test_case_3),
12469 		TEST_CASE_ST(ut_setup, ut_teardown,
12470 			test_kasumi_cipher_auth_test_case_1),
12471 
12472 		/** KASUMI generate auth, then encrypt (F8) */
12473 		TEST_CASE_ST(ut_setup, ut_teardown,
12474 			test_kasumi_auth_cipher_test_case_1),
12475 		TEST_CASE_ST(ut_setup, ut_teardown,
12476 			test_kasumi_auth_cipher_test_case_2),
12477 		TEST_CASE_ST(ut_setup, ut_teardown,
12478 			test_kasumi_auth_cipher_test_case_2_oop),
12479 		TEST_CASE_ST(ut_setup, ut_teardown,
12480 			test_kasumi_auth_cipher_test_case_2_sgl),
12481 		TEST_CASE_ST(ut_setup, ut_teardown,
12482 			test_kasumi_auth_cipher_test_case_2_oop_sgl),
12483 
12484 		/** KASUMI decrypt (F8), then verify auth */
12485 		TEST_CASE_ST(ut_setup, ut_teardown,
12486 			test_kasumi_auth_cipher_verify_test_case_1),
12487 		TEST_CASE_ST(ut_setup, ut_teardown,
12488 			test_kasumi_auth_cipher_verify_test_case_2),
12489 		TEST_CASE_ST(ut_setup, ut_teardown,
12490 			test_kasumi_auth_cipher_verify_test_case_2_oop),
12491 		TEST_CASE_ST(ut_setup, ut_teardown,
12492 			test_kasumi_auth_cipher_verify_test_case_2_sgl),
12493 		TEST_CASE_ST(ut_setup, ut_teardown,
12494 			test_kasumi_auth_cipher_verify_test_case_2_oop_sgl),
12495 
12496 		/** Negative tests */
12497 		TEST_CASE_ST(ut_setup, ut_teardown,
12498 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
12499 		TEST_CASE_ST(ut_setup, ut_teardown,
12500 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
12501 		TEST_CASE_ST(ut_setup, ut_teardown,
12502 			test_AES_GCM_auth_encryption_fail_iv_corrupt),
12503 		TEST_CASE_ST(ut_setup, ut_teardown,
12504 			test_AES_GCM_auth_encryption_fail_in_data_corrupt),
12505 		TEST_CASE_ST(ut_setup, ut_teardown,
12506 			test_AES_GCM_auth_encryption_fail_out_data_corrupt),
12507 		TEST_CASE_ST(ut_setup, ut_teardown,
12508 			test_AES_GCM_auth_encryption_fail_aad_len_corrupt),
12509 		TEST_CASE_ST(ut_setup, ut_teardown,
12510 			test_AES_GCM_auth_encryption_fail_aad_corrupt),
12511 		TEST_CASE_ST(ut_setup, ut_teardown,
12512 			test_AES_GCM_auth_encryption_fail_tag_corrupt),
12513 		TEST_CASE_ST(ut_setup, ut_teardown,
12514 			test_AES_GCM_auth_decryption_fail_iv_corrupt),
12515 		TEST_CASE_ST(ut_setup, ut_teardown,
12516 			test_AES_GCM_auth_decryption_fail_in_data_corrupt),
12517 		TEST_CASE_ST(ut_setup, ut_teardown,
12518 			test_AES_GCM_auth_decryption_fail_out_data_corrupt),
12519 		TEST_CASE_ST(ut_setup, ut_teardown,
12520 			test_AES_GCM_auth_decryption_fail_aad_len_corrupt),
12521 		TEST_CASE_ST(ut_setup, ut_teardown,
12522 			test_AES_GCM_auth_decryption_fail_aad_corrupt),
12523 		TEST_CASE_ST(ut_setup, ut_teardown,
12524 			test_AES_GCM_auth_decryption_fail_tag_corrupt),
12525 		TEST_CASE_ST(ut_setup, ut_teardown,
12526 			authentication_verify_AES128_GMAC_fail_data_corrupt),
12527 		TEST_CASE_ST(ut_setup, ut_teardown,
12528 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
12529 		TEST_CASE_ST(ut_setup, ut_teardown,
12530 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
12531 		TEST_CASE_ST(ut_setup, ut_teardown,
12532 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
12533 
12534 		/** Mixed CIPHER + HASH algorithms */
12535 		/** AUTH AES CMAC + CIPHER AES CTR */
12536 		TEST_CASE_ST(ut_setup, ut_teardown,
12537 			test_aes_cmac_aes_ctr_digest_enc_test_case_1),
12538 		TEST_CASE_ST(ut_setup, ut_teardown,
12539 			test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop),
12540 		TEST_CASE_ST(ut_setup, ut_teardown,
12541 			test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl),
12542 		TEST_CASE_ST(ut_setup, ut_teardown,
12543 			test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl),
12544 		TEST_CASE_ST(ut_setup, ut_teardown,
12545 			test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1),
12546 		TEST_CASE_ST(ut_setup, ut_teardown,
12547 		       test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop),
12548 		TEST_CASE_ST(ut_setup, ut_teardown,
12549 		       test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl),
12550 		TEST_CASE_ST(ut_setup, ut_teardown,
12551 		   test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl),
12552 
12553 		/** AUTH ZUC + CIPHER SNOW3G */
12554 		TEST_CASE_ST(ut_setup, ut_teardown,
12555 			test_auth_zuc_cipher_snow_test_case_1),
12556 		TEST_CASE_ST(ut_setup, ut_teardown,
12557 			test_verify_auth_zuc_cipher_snow_test_case_1),
12558 		/** AUTH AES CMAC + CIPHER SNOW3G */
12559 		TEST_CASE_ST(ut_setup, ut_teardown,
12560 			test_auth_aes_cmac_cipher_snow_test_case_1),
12561 		TEST_CASE_ST(ut_setup, ut_teardown,
12562 			test_verify_auth_aes_cmac_cipher_snow_test_case_1),
12563 		/** AUTH ZUC + CIPHER AES CTR */
12564 		TEST_CASE_ST(ut_setup, ut_teardown,
12565 			test_auth_zuc_cipher_aes_ctr_test_case_1),
12566 		TEST_CASE_ST(ut_setup, ut_teardown,
12567 			test_verify_auth_zuc_cipher_aes_ctr_test_case_1),
12568 		/** AUTH SNOW3G + CIPHER AES CTR */
12569 		TEST_CASE_ST(ut_setup, ut_teardown,
12570 			test_auth_snow_cipher_aes_ctr_test_case_1),
12571 		TEST_CASE_ST(ut_setup, ut_teardown,
12572 			test_verify_auth_snow_cipher_aes_ctr_test_case_1),
12573 		/** AUTH SNOW3G + CIPHER ZUC */
12574 		TEST_CASE_ST(ut_setup, ut_teardown,
12575 			test_auth_snow_cipher_zuc_test_case_1),
12576 		TEST_CASE_ST(ut_setup, ut_teardown,
12577 			test_verify_auth_snow_cipher_zuc_test_case_1),
12578 		/** AUTH AES CMAC + CIPHER ZUC */
12579 		TEST_CASE_ST(ut_setup, ut_teardown,
12580 			test_auth_aes_cmac_cipher_zuc_test_case_1),
12581 		TEST_CASE_ST(ut_setup, ut_teardown,
12582 			test_verify_auth_aes_cmac_cipher_zuc_test_case_1),
12583 
12584 		/** AUTH NULL + CIPHER SNOW3G */
12585 		TEST_CASE_ST(ut_setup, ut_teardown,
12586 			test_auth_null_cipher_snow_test_case_1),
12587 		TEST_CASE_ST(ut_setup, ut_teardown,
12588 			test_verify_auth_null_cipher_snow_test_case_1),
12589 		/** AUTH NULL + CIPHER ZUC */
12590 		TEST_CASE_ST(ut_setup, ut_teardown,
12591 			test_auth_null_cipher_zuc_test_case_1),
12592 		TEST_CASE_ST(ut_setup, ut_teardown,
12593 			test_verify_auth_null_cipher_zuc_test_case_1),
12594 		/** AUTH SNOW3G + CIPHER NULL */
12595 		TEST_CASE_ST(ut_setup, ut_teardown,
12596 			test_auth_snow_cipher_null_test_case_1),
12597 		TEST_CASE_ST(ut_setup, ut_teardown,
12598 			test_verify_auth_snow_cipher_null_test_case_1),
12599 		/** AUTH ZUC + CIPHER NULL */
12600 		TEST_CASE_ST(ut_setup, ut_teardown,
12601 			test_auth_zuc_cipher_null_test_case_1),
12602 		TEST_CASE_ST(ut_setup, ut_teardown,
12603 			test_verify_auth_zuc_cipher_null_test_case_1),
12604 		/** AUTH NULL + CIPHER AES CTR */
12605 		TEST_CASE_ST(ut_setup, ut_teardown,
12606 			test_auth_null_cipher_aes_ctr_test_case_1),
12607 		TEST_CASE_ST(ut_setup, ut_teardown,
12608 			test_verify_auth_null_cipher_aes_ctr_test_case_1),
12609 		/** AUTH AES CMAC + CIPHER NULL */
12610 		TEST_CASE_ST(ut_setup, ut_teardown,
12611 			test_auth_aes_cmac_cipher_null_test_case_1),
12612 		TEST_CASE_ST(ut_setup, ut_teardown,
12613 			test_verify_auth_aes_cmac_cipher_null_test_case_1),
12614 
12615 		TEST_CASES_END() /**< NULL terminate unit test array */
12616 	}
12617 };
12618 
12619 static struct unit_test_suite cryptodev_virtio_testsuite = {
12620 	.suite_name = "Crypto VIRTIO Unit Test Suite",
12621 	.setup = testsuite_setup,
12622 	.teardown = testsuite_teardown,
12623 	.unit_test_cases = {
12624 		TEST_CASE_ST(ut_setup, ut_teardown,
12625 				test_AES_cipheronly_virtio_all),
12626 
12627 		TEST_CASES_END() /**< NULL terminate unit test array */
12628 	}
12629 };
12630 
12631 static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {
12632 	.suite_name = "Crypto Device AESNI MB Unit Test Suite",
12633 	.setup = testsuite_setup,
12634 	.teardown = testsuite_teardown,
12635 	.unit_test_cases = {
12636 #if IMB_VERSION_NUM >= IMB_VERSION(0, 51, 0)
12637 		TEST_CASE_ST(ut_setup, ut_teardown,
12638 			test_AES_GCM_authenticated_encryption_test_case_1),
12639 		TEST_CASE_ST(ut_setup, ut_teardown,
12640 			test_AES_GCM_authenticated_encryption_test_case_2),
12641 		TEST_CASE_ST(ut_setup, ut_teardown,
12642 			test_AES_GCM_authenticated_encryption_test_case_3),
12643 		TEST_CASE_ST(ut_setup, ut_teardown,
12644 			test_AES_GCM_authenticated_encryption_test_case_4),
12645 		TEST_CASE_ST(ut_setup, ut_teardown,
12646 			test_AES_GCM_authenticated_encryption_test_case_5),
12647 		TEST_CASE_ST(ut_setup, ut_teardown,
12648 			test_AES_GCM_authenticated_encryption_test_case_6),
12649 		TEST_CASE_ST(ut_setup, ut_teardown,
12650 			test_AES_GCM_authenticated_encryption_test_case_7),
12651 
12652 		/** AES GCM Authenticated Decryption */
12653 		TEST_CASE_ST(ut_setup, ut_teardown,
12654 			test_AES_GCM_authenticated_decryption_test_case_1),
12655 		TEST_CASE_ST(ut_setup, ut_teardown,
12656 			test_AES_GCM_authenticated_decryption_test_case_2),
12657 		TEST_CASE_ST(ut_setup, ut_teardown,
12658 			test_AES_GCM_authenticated_decryption_test_case_3),
12659 		TEST_CASE_ST(ut_setup, ut_teardown,
12660 			test_AES_GCM_authenticated_decryption_test_case_4),
12661 		TEST_CASE_ST(ut_setup, ut_teardown,
12662 			test_AES_GCM_authenticated_decryption_test_case_5),
12663 		TEST_CASE_ST(ut_setup, ut_teardown,
12664 			test_AES_GCM_authenticated_decryption_test_case_6),
12665 		TEST_CASE_ST(ut_setup, ut_teardown,
12666 			test_AES_GCM_authenticated_decryption_test_case_7),
12667 
12668 		/** AES GCM Authenticated Encryption 192 bits key */
12669 		TEST_CASE_ST(ut_setup, ut_teardown,
12670 			test_AES_GCM_auth_encryption_test_case_192_1),
12671 		TEST_CASE_ST(ut_setup, ut_teardown,
12672 			test_AES_GCM_auth_encryption_test_case_192_2),
12673 		TEST_CASE_ST(ut_setup, ut_teardown,
12674 			test_AES_GCM_auth_encryption_test_case_192_3),
12675 		TEST_CASE_ST(ut_setup, ut_teardown,
12676 			test_AES_GCM_auth_encryption_test_case_192_4),
12677 		TEST_CASE_ST(ut_setup, ut_teardown,
12678 			test_AES_GCM_auth_encryption_test_case_192_5),
12679 		TEST_CASE_ST(ut_setup, ut_teardown,
12680 			test_AES_GCM_auth_encryption_test_case_192_6),
12681 		TEST_CASE_ST(ut_setup, ut_teardown,
12682 			test_AES_GCM_auth_encryption_test_case_192_7),
12683 
12684 		/** AES GCM Authenticated Decryption 192 bits key */
12685 		TEST_CASE_ST(ut_setup, ut_teardown,
12686 			test_AES_GCM_auth_decryption_test_case_192_1),
12687 		TEST_CASE_ST(ut_setup, ut_teardown,
12688 			test_AES_GCM_auth_decryption_test_case_192_2),
12689 		TEST_CASE_ST(ut_setup, ut_teardown,
12690 			test_AES_GCM_auth_decryption_test_case_192_3),
12691 		TEST_CASE_ST(ut_setup, ut_teardown,
12692 			test_AES_GCM_auth_decryption_test_case_192_4),
12693 		TEST_CASE_ST(ut_setup, ut_teardown,
12694 			test_AES_GCM_auth_decryption_test_case_192_5),
12695 		TEST_CASE_ST(ut_setup, ut_teardown,
12696 			test_AES_GCM_auth_decryption_test_case_192_6),
12697 		TEST_CASE_ST(ut_setup, ut_teardown,
12698 			test_AES_GCM_auth_decryption_test_case_192_7),
12699 
12700 		/** AES GCM Authenticated Encryption 256 bits key */
12701 		TEST_CASE_ST(ut_setup, ut_teardown,
12702 			test_AES_GCM_auth_encryption_test_case_256_1),
12703 		TEST_CASE_ST(ut_setup, ut_teardown,
12704 			test_AES_GCM_auth_encryption_test_case_256_2),
12705 		TEST_CASE_ST(ut_setup, ut_teardown,
12706 			test_AES_GCM_auth_encryption_test_case_256_3),
12707 		TEST_CASE_ST(ut_setup, ut_teardown,
12708 			test_AES_GCM_auth_encryption_test_case_256_4),
12709 		TEST_CASE_ST(ut_setup, ut_teardown,
12710 			test_AES_GCM_auth_encryption_test_case_256_5),
12711 		TEST_CASE_ST(ut_setup, ut_teardown,
12712 			test_AES_GCM_auth_encryption_test_case_256_6),
12713 		TEST_CASE_ST(ut_setup, ut_teardown,
12714 			test_AES_GCM_auth_encryption_test_case_256_7),
12715 
12716 		/** AES GCM Authenticated Decryption 256 bits key */
12717 		TEST_CASE_ST(ut_setup, ut_teardown,
12718 			test_AES_GCM_auth_decryption_test_case_256_1),
12719 		TEST_CASE_ST(ut_setup, ut_teardown,
12720 			test_AES_GCM_auth_decryption_test_case_256_2),
12721 		TEST_CASE_ST(ut_setup, ut_teardown,
12722 			test_AES_GCM_auth_decryption_test_case_256_3),
12723 		TEST_CASE_ST(ut_setup, ut_teardown,
12724 			test_AES_GCM_auth_decryption_test_case_256_4),
12725 		TEST_CASE_ST(ut_setup, ut_teardown,
12726 			test_AES_GCM_auth_decryption_test_case_256_5),
12727 		TEST_CASE_ST(ut_setup, ut_teardown,
12728 			test_AES_GCM_auth_decryption_test_case_256_6),
12729 		TEST_CASE_ST(ut_setup, ut_teardown,
12730 			test_AES_GCM_auth_decryption_test_case_256_7),
12731 
12732 		/** AES GCM Authenticated Encryption big aad size */
12733 		TEST_CASE_ST(ut_setup, ut_teardown,
12734 			test_AES_GCM_auth_encryption_test_case_aad_1),
12735 		TEST_CASE_ST(ut_setup, ut_teardown,
12736 			test_AES_GCM_auth_encryption_test_case_aad_2),
12737 
12738 		/** AES GCM Authenticated Decryption big aad size */
12739 		TEST_CASE_ST(ut_setup, ut_teardown,
12740 			test_AES_GCM_auth_decryption_test_case_aad_1),
12741 		TEST_CASE_ST(ut_setup, ut_teardown,
12742 			test_AES_GCM_auth_decryption_test_case_aad_2),
12743 
12744 		/** Session-less tests */
12745 		TEST_CASE_ST(ut_setup, ut_teardown,
12746 			test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
12747 		TEST_CASE_ST(ut_setup, ut_teardown,
12748 			test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
12749 
12750 		/** AES GMAC Authentication */
12751 		TEST_CASE_ST(ut_setup, ut_teardown,
12752 			test_AES_GMAC_authentication_test_case_1),
12753 		TEST_CASE_ST(ut_setup, ut_teardown,
12754 			test_AES_GMAC_authentication_verify_test_case_1),
12755 		TEST_CASE_ST(ut_setup, ut_teardown,
12756 			test_AES_GMAC_authentication_test_case_2),
12757 		TEST_CASE_ST(ut_setup, ut_teardown,
12758 			test_AES_GMAC_authentication_verify_test_case_2),
12759 		TEST_CASE_ST(ut_setup, ut_teardown,
12760 			test_AES_GMAC_authentication_test_case_3),
12761 		TEST_CASE_ST(ut_setup, ut_teardown,
12762 			test_AES_GMAC_authentication_verify_test_case_3),
12763 #endif /* IMB_VERSION_NUM >= IMB_VERSION(0, 51, 0) */
12764 
12765 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
12766 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_mb_all),
12767 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_mb_all),
12768 		TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_mb_all),
12769 		TEST_CASE_ST(ut_setup, ut_teardown,
12770 						test_DES_cipheronly_mb_all),
12771 		TEST_CASE_ST(ut_setup, ut_teardown,
12772 						test_DES_docsis_mb_all),
12773 		TEST_CASE_ST(ut_setup, ut_teardown,
12774 						test_3DES_cipheronly_mb_all),
12775 		TEST_CASE_ST(ut_setup, ut_teardown,
12776 			test_AES_CCM_authenticated_encryption_test_case_128_1),
12777 		TEST_CASE_ST(ut_setup, ut_teardown,
12778 			test_AES_CCM_authenticated_decryption_test_case_128_1),
12779 		TEST_CASE_ST(ut_setup, ut_teardown,
12780 			test_AES_CCM_authenticated_encryption_test_case_128_2),
12781 		TEST_CASE_ST(ut_setup, ut_teardown,
12782 			test_AES_CCM_authenticated_decryption_test_case_128_2),
12783 		TEST_CASE_ST(ut_setup, ut_teardown,
12784 			test_AES_CCM_authenticated_encryption_test_case_128_3),
12785 		TEST_CASE_ST(ut_setup, ut_teardown,
12786 			test_AES_CCM_authenticated_decryption_test_case_128_3),
12787 
12788 		TEST_CASES_END() /**< NULL terminate unit test array */
12789 	}
12790 };
12791 
12792 static struct unit_test_suite cryptodev_openssl_testsuite  = {
12793 	.suite_name = "Crypto Device OPENSSL Unit Test Suite",
12794 	.setup = testsuite_setup,
12795 	.teardown = testsuite_teardown,
12796 	.unit_test_cases = {
12797 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
12798 		TEST_CASE_ST(ut_setup, ut_teardown,
12799 				test_multi_session_random_usage),
12800 		TEST_CASE_ST(ut_setup, ut_teardown,
12801 				test_AES_chain_openssl_all),
12802 		TEST_CASE_ST(ut_setup, ut_teardown,
12803 				test_AES_cipheronly_openssl_all),
12804 		TEST_CASE_ST(ut_setup, ut_teardown,
12805 				test_3DES_chain_openssl_all),
12806 		TEST_CASE_ST(ut_setup, ut_teardown,
12807 				test_3DES_cipheronly_openssl_all),
12808 		TEST_CASE_ST(ut_setup, ut_teardown,
12809 				test_DES_cipheronly_openssl_all),
12810 		TEST_CASE_ST(ut_setup, ut_teardown,
12811 				test_DES_docsis_openssl_all),
12812 		TEST_CASE_ST(ut_setup, ut_teardown,
12813 				test_authonly_openssl_all),
12814 
12815 		/** AES GCM Authenticated Encryption */
12816 		TEST_CASE_ST(ut_setup, ut_teardown,
12817 			test_AES_GCM_authenticated_encryption_test_case_1),
12818 		TEST_CASE_ST(ut_setup, ut_teardown,
12819 			test_AES_GCM_authenticated_encryption_test_case_2),
12820 		TEST_CASE_ST(ut_setup, ut_teardown,
12821 			test_AES_GCM_authenticated_encryption_test_case_3),
12822 		TEST_CASE_ST(ut_setup, ut_teardown,
12823 			test_AES_GCM_authenticated_encryption_test_case_4),
12824 		TEST_CASE_ST(ut_setup, ut_teardown,
12825 			test_AES_GCM_authenticated_encryption_test_case_5),
12826 		TEST_CASE_ST(ut_setup, ut_teardown,
12827 			test_AES_GCM_authenticated_encryption_test_case_6),
12828 		TEST_CASE_ST(ut_setup, ut_teardown,
12829 			test_AES_GCM_authenticated_encryption_test_case_7),
12830 
12831 		/** AES GCM Authenticated Decryption */
12832 		TEST_CASE_ST(ut_setup, ut_teardown,
12833 			test_AES_GCM_authenticated_decryption_test_case_1),
12834 		TEST_CASE_ST(ut_setup, ut_teardown,
12835 			test_AES_GCM_authenticated_decryption_test_case_2),
12836 		TEST_CASE_ST(ut_setup, ut_teardown,
12837 			test_AES_GCM_authenticated_decryption_test_case_3),
12838 		TEST_CASE_ST(ut_setup, ut_teardown,
12839 			test_AES_GCM_authenticated_decryption_test_case_4),
12840 		TEST_CASE_ST(ut_setup, ut_teardown,
12841 			test_AES_GCM_authenticated_decryption_test_case_5),
12842 		TEST_CASE_ST(ut_setup, ut_teardown,
12843 			test_AES_GCM_authenticated_decryption_test_case_6),
12844 		TEST_CASE_ST(ut_setup, ut_teardown,
12845 			test_AES_GCM_authenticated_decryption_test_case_7),
12846 
12847 
12848 		/** AES GCM Authenticated Encryption 192 bits key */
12849 		TEST_CASE_ST(ut_setup, ut_teardown,
12850 			test_AES_GCM_auth_encryption_test_case_192_1),
12851 		TEST_CASE_ST(ut_setup, ut_teardown,
12852 			test_AES_GCM_auth_encryption_test_case_192_2),
12853 		TEST_CASE_ST(ut_setup, ut_teardown,
12854 			test_AES_GCM_auth_encryption_test_case_192_3),
12855 		TEST_CASE_ST(ut_setup, ut_teardown,
12856 			test_AES_GCM_auth_encryption_test_case_192_4),
12857 		TEST_CASE_ST(ut_setup, ut_teardown,
12858 			test_AES_GCM_auth_encryption_test_case_192_5),
12859 		TEST_CASE_ST(ut_setup, ut_teardown,
12860 			test_AES_GCM_auth_encryption_test_case_192_6),
12861 		TEST_CASE_ST(ut_setup, ut_teardown,
12862 			test_AES_GCM_auth_encryption_test_case_192_7),
12863 
12864 		/** AES GCM Authenticated Decryption 192 bits key */
12865 		TEST_CASE_ST(ut_setup, ut_teardown,
12866 			test_AES_GCM_auth_decryption_test_case_192_1),
12867 		TEST_CASE_ST(ut_setup, ut_teardown,
12868 			test_AES_GCM_auth_decryption_test_case_192_2),
12869 		TEST_CASE_ST(ut_setup, ut_teardown,
12870 			test_AES_GCM_auth_decryption_test_case_192_3),
12871 		TEST_CASE_ST(ut_setup, ut_teardown,
12872 			test_AES_GCM_auth_decryption_test_case_192_4),
12873 		TEST_CASE_ST(ut_setup, ut_teardown,
12874 			test_AES_GCM_auth_decryption_test_case_192_5),
12875 		TEST_CASE_ST(ut_setup, ut_teardown,
12876 			test_AES_GCM_auth_decryption_test_case_192_6),
12877 		TEST_CASE_ST(ut_setup, ut_teardown,
12878 			test_AES_GCM_auth_decryption_test_case_192_7),
12879 
12880 		/** AES GCM Authenticated Encryption 256 bits key */
12881 		TEST_CASE_ST(ut_setup, ut_teardown,
12882 			test_AES_GCM_auth_encryption_test_case_256_1),
12883 		TEST_CASE_ST(ut_setup, ut_teardown,
12884 			test_AES_GCM_auth_encryption_test_case_256_2),
12885 		TEST_CASE_ST(ut_setup, ut_teardown,
12886 			test_AES_GCM_auth_encryption_test_case_256_3),
12887 		TEST_CASE_ST(ut_setup, ut_teardown,
12888 			test_AES_GCM_auth_encryption_test_case_256_4),
12889 		TEST_CASE_ST(ut_setup, ut_teardown,
12890 			test_AES_GCM_auth_encryption_test_case_256_5),
12891 		TEST_CASE_ST(ut_setup, ut_teardown,
12892 			test_AES_GCM_auth_encryption_test_case_256_6),
12893 		TEST_CASE_ST(ut_setup, ut_teardown,
12894 			test_AES_GCM_auth_encryption_test_case_256_7),
12895 
12896 		/** AES GCM Authenticated Decryption 256 bits key */
12897 		TEST_CASE_ST(ut_setup, ut_teardown,
12898 			test_AES_GCM_auth_decryption_test_case_256_1),
12899 		TEST_CASE_ST(ut_setup, ut_teardown,
12900 			test_AES_GCM_auth_decryption_test_case_256_2),
12901 		TEST_CASE_ST(ut_setup, ut_teardown,
12902 			test_AES_GCM_auth_decryption_test_case_256_3),
12903 		TEST_CASE_ST(ut_setup, ut_teardown,
12904 			test_AES_GCM_auth_decryption_test_case_256_4),
12905 		TEST_CASE_ST(ut_setup, ut_teardown,
12906 			test_AES_GCM_auth_decryption_test_case_256_5),
12907 		TEST_CASE_ST(ut_setup, ut_teardown,
12908 			test_AES_GCM_auth_decryption_test_case_256_6),
12909 		TEST_CASE_ST(ut_setup, ut_teardown,
12910 			test_AES_GCM_auth_decryption_test_case_256_7),
12911 
12912 		/** AES GMAC Authentication */
12913 		TEST_CASE_ST(ut_setup, ut_teardown,
12914 			test_AES_GMAC_authentication_test_case_1),
12915 		TEST_CASE_ST(ut_setup, ut_teardown,
12916 			test_AES_GMAC_authentication_verify_test_case_1),
12917 		TEST_CASE_ST(ut_setup, ut_teardown,
12918 			test_AES_GMAC_authentication_test_case_2),
12919 		TEST_CASE_ST(ut_setup, ut_teardown,
12920 			test_AES_GMAC_authentication_verify_test_case_2),
12921 		TEST_CASE_ST(ut_setup, ut_teardown,
12922 			test_AES_GMAC_authentication_test_case_3),
12923 		TEST_CASE_ST(ut_setup, ut_teardown,
12924 			test_AES_GMAC_authentication_verify_test_case_3),
12925 		TEST_CASE_ST(ut_setup, ut_teardown,
12926 			test_AES_GMAC_authentication_test_case_4),
12927 		TEST_CASE_ST(ut_setup, ut_teardown,
12928 			test_AES_GMAC_authentication_verify_test_case_4),
12929 
12930 		/** AES CCM Authenticated Encryption 128 bits key */
12931 		TEST_CASE_ST(ut_setup, ut_teardown,
12932 			test_AES_CCM_authenticated_encryption_test_case_128_1),
12933 		TEST_CASE_ST(ut_setup, ut_teardown,
12934 			test_AES_CCM_authenticated_encryption_test_case_128_2),
12935 		TEST_CASE_ST(ut_setup, ut_teardown,
12936 			test_AES_CCM_authenticated_encryption_test_case_128_3),
12937 
12938 		/** AES CCM Authenticated Decryption 128 bits key*/
12939 		TEST_CASE_ST(ut_setup, ut_teardown,
12940 			test_AES_CCM_authenticated_decryption_test_case_128_1),
12941 		TEST_CASE_ST(ut_setup, ut_teardown,
12942 			test_AES_CCM_authenticated_decryption_test_case_128_2),
12943 		TEST_CASE_ST(ut_setup, ut_teardown,
12944 			test_AES_CCM_authenticated_decryption_test_case_128_3),
12945 
12946 		/** AES CCM Authenticated Encryption 192 bits key */
12947 		TEST_CASE_ST(ut_setup, ut_teardown,
12948 			test_AES_CCM_authenticated_encryption_test_case_192_1),
12949 		TEST_CASE_ST(ut_setup, ut_teardown,
12950 			test_AES_CCM_authenticated_encryption_test_case_192_2),
12951 		TEST_CASE_ST(ut_setup, ut_teardown,
12952 			test_AES_CCM_authenticated_encryption_test_case_192_3),
12953 
12954 		/** AES CCM Authenticated Decryption 192 bits key*/
12955 		TEST_CASE_ST(ut_setup, ut_teardown,
12956 			test_AES_CCM_authenticated_decryption_test_case_192_1),
12957 		TEST_CASE_ST(ut_setup, ut_teardown,
12958 			test_AES_CCM_authenticated_decryption_test_case_192_2),
12959 		TEST_CASE_ST(ut_setup, ut_teardown,
12960 			test_AES_CCM_authenticated_decryption_test_case_192_3),
12961 
12962 		/** AES CCM Authenticated Encryption 256 bits key */
12963 		TEST_CASE_ST(ut_setup, ut_teardown,
12964 			test_AES_CCM_authenticated_encryption_test_case_256_1),
12965 		TEST_CASE_ST(ut_setup, ut_teardown,
12966 			test_AES_CCM_authenticated_encryption_test_case_256_2),
12967 		TEST_CASE_ST(ut_setup, ut_teardown,
12968 			test_AES_CCM_authenticated_encryption_test_case_256_3),
12969 
12970 		/** AES CCM Authenticated Decryption 256 bits key*/
12971 		TEST_CASE_ST(ut_setup, ut_teardown,
12972 			test_AES_CCM_authenticated_decryption_test_case_256_1),
12973 		TEST_CASE_ST(ut_setup, ut_teardown,
12974 			test_AES_CCM_authenticated_decryption_test_case_256_2),
12975 		TEST_CASE_ST(ut_setup, ut_teardown,
12976 			test_AES_CCM_authenticated_decryption_test_case_256_3),
12977 
12978 		/** Scatter-Gather */
12979 		TEST_CASE_ST(ut_setup, ut_teardown,
12980 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
12981 
12982 		/** Negative tests */
12983 		TEST_CASE_ST(ut_setup, ut_teardown,
12984 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
12985 		TEST_CASE_ST(ut_setup, ut_teardown,
12986 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
12987 		TEST_CASE_ST(ut_setup, ut_teardown,
12988 			authentication_verify_AES128_GMAC_fail_data_corrupt),
12989 		TEST_CASE_ST(ut_setup, ut_teardown,
12990 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
12991 		TEST_CASE_ST(ut_setup, ut_teardown,
12992 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
12993 		TEST_CASE_ST(ut_setup, ut_teardown,
12994 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
12995 
12996 		/* ESN Testcase */
12997 		TEST_CASE_ST(ut_setup, ut_teardown,
12998 			auth_encrypt_AES128CBC_HMAC_SHA1_esn_check),
12999 
13000 		TEST_CASE_ST(ut_setup, ut_teardown,
13001 			auth_decrypt_AES128CBC_HMAC_SHA1_esn_check),
13002 
13003 		TEST_CASES_END() /**< NULL terminate unit test array */
13004 	}
13005 };
13006 
13007 static struct unit_test_suite cryptodev_aesni_gcm_testsuite  = {
13008 	.suite_name = "Crypto Device AESNI GCM Unit Test Suite",
13009 	.setup = testsuite_setup,
13010 	.teardown = testsuite_teardown,
13011 	.unit_test_cases = {
13012 		/** AES GCM Authenticated Encryption */
13013 		TEST_CASE_ST(ut_setup, ut_teardown,
13014 			test_AES_GCM_authenticated_encryption_test_case_1),
13015 		TEST_CASE_ST(ut_setup, ut_teardown,
13016 			test_AES_GCM_authenticated_encryption_test_case_2),
13017 		TEST_CASE_ST(ut_setup, ut_teardown,
13018 			test_AES_GCM_authenticated_encryption_test_case_3),
13019 		TEST_CASE_ST(ut_setup, ut_teardown,
13020 			test_AES_GCM_authenticated_encryption_test_case_4),
13021 		TEST_CASE_ST(ut_setup, ut_teardown,
13022 			test_AES_GCM_authenticated_encryption_test_case_5),
13023 		TEST_CASE_ST(ut_setup, ut_teardown,
13024 			test_AES_GCM_authenticated_encryption_test_case_6),
13025 		TEST_CASE_ST(ut_setup, ut_teardown,
13026 			test_AES_GCM_authenticated_encryption_test_case_7),
13027 
13028 		/** AES GCM Authenticated Decryption */
13029 		TEST_CASE_ST(ut_setup, ut_teardown,
13030 			test_AES_GCM_authenticated_decryption_test_case_1),
13031 		TEST_CASE_ST(ut_setup, ut_teardown,
13032 			test_AES_GCM_authenticated_decryption_test_case_2),
13033 		TEST_CASE_ST(ut_setup, ut_teardown,
13034 			test_AES_GCM_authenticated_decryption_test_case_3),
13035 		TEST_CASE_ST(ut_setup, ut_teardown,
13036 			test_AES_GCM_authenticated_decryption_test_case_4),
13037 		TEST_CASE_ST(ut_setup, ut_teardown,
13038 			test_AES_GCM_authenticated_decryption_test_case_5),
13039 		TEST_CASE_ST(ut_setup, ut_teardown,
13040 			test_AES_GCM_authenticated_decryption_test_case_6),
13041 		TEST_CASE_ST(ut_setup, ut_teardown,
13042 			test_AES_GCM_authenticated_decryption_test_case_7),
13043 
13044 		/** AES GCM Authenticated Encryption 192 bits key */
13045 		TEST_CASE_ST(ut_setup, ut_teardown,
13046 			test_AES_GCM_auth_encryption_test_case_192_1),
13047 		TEST_CASE_ST(ut_setup, ut_teardown,
13048 			test_AES_GCM_auth_encryption_test_case_192_2),
13049 		TEST_CASE_ST(ut_setup, ut_teardown,
13050 			test_AES_GCM_auth_encryption_test_case_192_3),
13051 		TEST_CASE_ST(ut_setup, ut_teardown,
13052 			test_AES_GCM_auth_encryption_test_case_192_4),
13053 		TEST_CASE_ST(ut_setup, ut_teardown,
13054 			test_AES_GCM_auth_encryption_test_case_192_5),
13055 		TEST_CASE_ST(ut_setup, ut_teardown,
13056 			test_AES_GCM_auth_encryption_test_case_192_6),
13057 		TEST_CASE_ST(ut_setup, ut_teardown,
13058 			test_AES_GCM_auth_encryption_test_case_192_7),
13059 
13060 		/** AES GCM Authenticated Decryption 192 bits key */
13061 		TEST_CASE_ST(ut_setup, ut_teardown,
13062 			test_AES_GCM_auth_decryption_test_case_192_1),
13063 		TEST_CASE_ST(ut_setup, ut_teardown,
13064 			test_AES_GCM_auth_decryption_test_case_192_2),
13065 		TEST_CASE_ST(ut_setup, ut_teardown,
13066 			test_AES_GCM_auth_decryption_test_case_192_3),
13067 		TEST_CASE_ST(ut_setup, ut_teardown,
13068 			test_AES_GCM_auth_decryption_test_case_192_4),
13069 		TEST_CASE_ST(ut_setup, ut_teardown,
13070 			test_AES_GCM_auth_decryption_test_case_192_5),
13071 		TEST_CASE_ST(ut_setup, ut_teardown,
13072 			test_AES_GCM_auth_decryption_test_case_192_6),
13073 		TEST_CASE_ST(ut_setup, ut_teardown,
13074 			test_AES_GCM_auth_decryption_test_case_192_7),
13075 
13076 		/** AES GCM Authenticated Encryption 256 bits key */
13077 		TEST_CASE_ST(ut_setup, ut_teardown,
13078 			test_AES_GCM_auth_encryption_test_case_256_1),
13079 		TEST_CASE_ST(ut_setup, ut_teardown,
13080 			test_AES_GCM_auth_encryption_test_case_256_2),
13081 		TEST_CASE_ST(ut_setup, ut_teardown,
13082 			test_AES_GCM_auth_encryption_test_case_256_3),
13083 		TEST_CASE_ST(ut_setup, ut_teardown,
13084 			test_AES_GCM_auth_encryption_test_case_256_4),
13085 		TEST_CASE_ST(ut_setup, ut_teardown,
13086 			test_AES_GCM_auth_encryption_test_case_256_5),
13087 		TEST_CASE_ST(ut_setup, ut_teardown,
13088 			test_AES_GCM_auth_encryption_test_case_256_6),
13089 		TEST_CASE_ST(ut_setup, ut_teardown,
13090 			test_AES_GCM_auth_encryption_test_case_256_7),
13091 
13092 		/** AES GCM Authenticated Decryption 256 bits key */
13093 		TEST_CASE_ST(ut_setup, ut_teardown,
13094 			test_AES_GCM_auth_decryption_test_case_256_1),
13095 		TEST_CASE_ST(ut_setup, ut_teardown,
13096 			test_AES_GCM_auth_decryption_test_case_256_2),
13097 		TEST_CASE_ST(ut_setup, ut_teardown,
13098 			test_AES_GCM_auth_decryption_test_case_256_3),
13099 		TEST_CASE_ST(ut_setup, ut_teardown,
13100 			test_AES_GCM_auth_decryption_test_case_256_4),
13101 		TEST_CASE_ST(ut_setup, ut_teardown,
13102 			test_AES_GCM_auth_decryption_test_case_256_5),
13103 		TEST_CASE_ST(ut_setup, ut_teardown,
13104 			test_AES_GCM_auth_decryption_test_case_256_6),
13105 		TEST_CASE_ST(ut_setup, ut_teardown,
13106 			test_AES_GCM_auth_decryption_test_case_256_7),
13107 
13108 		/** AES GCM Authenticated Encryption big aad size */
13109 		TEST_CASE_ST(ut_setup, ut_teardown,
13110 			test_AES_GCM_auth_encryption_test_case_aad_1),
13111 		TEST_CASE_ST(ut_setup, ut_teardown,
13112 			test_AES_GCM_auth_encryption_test_case_aad_2),
13113 
13114 		/** AES GCM Authenticated Decryption big aad size */
13115 		TEST_CASE_ST(ut_setup, ut_teardown,
13116 			test_AES_GCM_auth_decryption_test_case_aad_1),
13117 		TEST_CASE_ST(ut_setup, ut_teardown,
13118 			test_AES_GCM_auth_decryption_test_case_aad_2),
13119 
13120 		/** AES GMAC Authentication */
13121 		TEST_CASE_ST(ut_setup, ut_teardown,
13122 			test_AES_GMAC_authentication_test_case_1),
13123 		TEST_CASE_ST(ut_setup, ut_teardown,
13124 			test_AES_GMAC_authentication_verify_test_case_1),
13125 		TEST_CASE_ST(ut_setup, ut_teardown,
13126 			test_AES_GMAC_authentication_test_case_3),
13127 		TEST_CASE_ST(ut_setup, ut_teardown,
13128 			test_AES_GMAC_authentication_verify_test_case_3),
13129 		TEST_CASE_ST(ut_setup, ut_teardown,
13130 			test_AES_GMAC_authentication_test_case_4),
13131 		TEST_CASE_ST(ut_setup, ut_teardown,
13132 			test_AES_GMAC_authentication_verify_test_case_4),
13133 
13134 		/** Negative tests */
13135 		TEST_CASE_ST(ut_setup, ut_teardown,
13136 			authentication_verify_AES128_GMAC_fail_data_corrupt),
13137 		TEST_CASE_ST(ut_setup, ut_teardown,
13138 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
13139 
13140 		/** Out of place tests */
13141 		TEST_CASE_ST(ut_setup, ut_teardown,
13142 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
13143 		TEST_CASE_ST(ut_setup, ut_teardown,
13144 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
13145 
13146 		/** Session-less tests */
13147 		TEST_CASE_ST(ut_setup, ut_teardown,
13148 			test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
13149 		TEST_CASE_ST(ut_setup, ut_teardown,
13150 			test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
13151 
13152 		/** Scatter-Gather */
13153 		TEST_CASE_ST(ut_setup, ut_teardown,
13154 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
13155 		TEST_CASE_ST(ut_setup, ut_teardown,
13156 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
13157 
13158 		TEST_CASES_END() /**< NULL terminate unit test array */
13159 	}
13160 };
13161 
13162 static struct unit_test_suite cryptodev_sw_kasumi_testsuite  = {
13163 	.suite_name = "Crypto Device SW KASUMI Unit Test Suite",
13164 	.setup = testsuite_setup,
13165 	.teardown = testsuite_teardown,
13166 	.unit_test_cases = {
13167 		/** KASUMI encrypt only (UEA1) */
13168 		TEST_CASE_ST(ut_setup, ut_teardown,
13169 			test_kasumi_encryption_test_case_1),
13170 		TEST_CASE_ST(ut_setup, ut_teardown,
13171 			test_kasumi_encryption_test_case_1_sgl),
13172 		TEST_CASE_ST(ut_setup, ut_teardown,
13173 			test_kasumi_encryption_test_case_2),
13174 		TEST_CASE_ST(ut_setup, ut_teardown,
13175 			test_kasumi_encryption_test_case_3),
13176 		TEST_CASE_ST(ut_setup, ut_teardown,
13177 			test_kasumi_encryption_test_case_4),
13178 		TEST_CASE_ST(ut_setup, ut_teardown,
13179 			test_kasumi_encryption_test_case_5),
13180 		/** KASUMI decrypt only (UEA1) */
13181 		TEST_CASE_ST(ut_setup, ut_teardown,
13182 			test_kasumi_decryption_test_case_1),
13183 		TEST_CASE_ST(ut_setup, ut_teardown,
13184 			test_kasumi_decryption_test_case_2),
13185 		TEST_CASE_ST(ut_setup, ut_teardown,
13186 			test_kasumi_decryption_test_case_3),
13187 		TEST_CASE_ST(ut_setup, ut_teardown,
13188 			test_kasumi_decryption_test_case_4),
13189 		TEST_CASE_ST(ut_setup, ut_teardown,
13190 			test_kasumi_decryption_test_case_5),
13191 
13192 		TEST_CASE_ST(ut_setup, ut_teardown,
13193 			test_kasumi_encryption_test_case_1_oop),
13194 		TEST_CASE_ST(ut_setup, ut_teardown,
13195 			test_kasumi_encryption_test_case_1_oop_sgl),
13196 
13197 
13198 		TEST_CASE_ST(ut_setup, ut_teardown,
13199 			test_kasumi_decryption_test_case_1_oop),
13200 
13201 		/** KASUMI hash only (UIA1) */
13202 		TEST_CASE_ST(ut_setup, ut_teardown,
13203 			test_kasumi_hash_generate_test_case_1),
13204 		TEST_CASE_ST(ut_setup, ut_teardown,
13205 			test_kasumi_hash_generate_test_case_2),
13206 		TEST_CASE_ST(ut_setup, ut_teardown,
13207 			test_kasumi_hash_generate_test_case_3),
13208 		TEST_CASE_ST(ut_setup, ut_teardown,
13209 			test_kasumi_hash_generate_test_case_4),
13210 		TEST_CASE_ST(ut_setup, ut_teardown,
13211 			test_kasumi_hash_generate_test_case_5),
13212 		TEST_CASE_ST(ut_setup, ut_teardown,
13213 			test_kasumi_hash_generate_test_case_6),
13214 		TEST_CASE_ST(ut_setup, ut_teardown,
13215 			test_kasumi_hash_verify_test_case_1),
13216 		TEST_CASE_ST(ut_setup, ut_teardown,
13217 			test_kasumi_hash_verify_test_case_2),
13218 		TEST_CASE_ST(ut_setup, ut_teardown,
13219 			test_kasumi_hash_verify_test_case_3),
13220 		TEST_CASE_ST(ut_setup, ut_teardown,
13221 			test_kasumi_hash_verify_test_case_4),
13222 		TEST_CASE_ST(ut_setup, ut_teardown,
13223 			test_kasumi_hash_verify_test_case_5),
13224 		TEST_CASE_ST(ut_setup, ut_teardown,
13225 			test_kasumi_cipher_auth_test_case_1),
13226 
13227 		/** KASUMI generate auth, then encrypt (F8) */
13228 		TEST_CASE_ST(ut_setup, ut_teardown,
13229 			test_kasumi_auth_cipher_test_case_1),
13230 		TEST_CASE_ST(ut_setup, ut_teardown,
13231 			test_kasumi_auth_cipher_test_case_2),
13232 		TEST_CASE_ST(ut_setup, ut_teardown,
13233 			test_kasumi_auth_cipher_test_case_2_oop),
13234 		TEST_CASE_ST(ut_setup, ut_teardown,
13235 			test_kasumi_auth_cipher_test_case_2_sgl),
13236 		TEST_CASE_ST(ut_setup, ut_teardown,
13237 			test_kasumi_auth_cipher_test_case_2_oop_sgl),
13238 
13239 		/** KASUMI decrypt (F8), then verify auth */
13240 		TEST_CASE_ST(ut_setup, ut_teardown,
13241 			test_kasumi_auth_cipher_verify_test_case_1),
13242 		TEST_CASE_ST(ut_setup, ut_teardown,
13243 			test_kasumi_auth_cipher_verify_test_case_2),
13244 		TEST_CASE_ST(ut_setup, ut_teardown,
13245 			test_kasumi_auth_cipher_verify_test_case_2_oop),
13246 		TEST_CASE_ST(ut_setup, ut_teardown,
13247 			test_kasumi_auth_cipher_verify_test_case_2_sgl),
13248 		TEST_CASE_ST(ut_setup, ut_teardown,
13249 			test_kasumi_auth_cipher_verify_test_case_2_oop_sgl),
13250 		TEST_CASES_END() /**< NULL terminate unit test array */
13251 	}
13252 };
13253 static struct unit_test_suite cryptodev_sw_snow3g_testsuite  = {
13254 	.suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
13255 	.setup = testsuite_setup,
13256 	.teardown = testsuite_teardown,
13257 	.unit_test_cases = {
13258 		/** SNOW 3G encrypt only (UEA2) */
13259 		TEST_CASE_ST(ut_setup, ut_teardown,
13260 			test_snow3g_encryption_test_case_1),
13261 		TEST_CASE_ST(ut_setup, ut_teardown,
13262 			test_snow3g_encryption_test_case_2),
13263 		TEST_CASE_ST(ut_setup, ut_teardown,
13264 			test_snow3g_encryption_test_case_3),
13265 		TEST_CASE_ST(ut_setup, ut_teardown,
13266 			test_snow3g_encryption_test_case_4),
13267 		TEST_CASE_ST(ut_setup, ut_teardown,
13268 			test_snow3g_encryption_test_case_5),
13269 		TEST_CASE_ST(ut_setup, ut_teardown,
13270 			test_snow3g_auth_cipher_with_digest_test_case_1),
13271 
13272 		TEST_CASE_ST(ut_setup, ut_teardown,
13273 			test_snow3g_encryption_test_case_1_oop),
13274 		TEST_CASE_ST(ut_setup, ut_teardown,
13275 				test_snow3g_encryption_test_case_1_oop_sgl),
13276 		TEST_CASE_ST(ut_setup, ut_teardown,
13277 			test_snow3g_decryption_test_case_1_oop),
13278 
13279 		TEST_CASE_ST(ut_setup, ut_teardown,
13280 			test_snow3g_encryption_test_case_1_offset_oop),
13281 
13282 		/** SNOW 3G decrypt only (UEA2) */
13283 		TEST_CASE_ST(ut_setup, ut_teardown,
13284 			test_snow3g_decryption_test_case_1),
13285 		TEST_CASE_ST(ut_setup, ut_teardown,
13286 			test_snow3g_decryption_test_case_2),
13287 		TEST_CASE_ST(ut_setup, ut_teardown,
13288 			test_snow3g_decryption_test_case_3),
13289 		TEST_CASE_ST(ut_setup, ut_teardown,
13290 			test_snow3g_decryption_test_case_4),
13291 		TEST_CASE_ST(ut_setup, ut_teardown,
13292 			test_snow3g_decryption_test_case_5),
13293 		TEST_CASE_ST(ut_setup, ut_teardown,
13294 			test_snow3g_decryption_with_digest_test_case_1),
13295 		TEST_CASE_ST(ut_setup, ut_teardown,
13296 			test_snow3g_hash_generate_test_case_1),
13297 		TEST_CASE_ST(ut_setup, ut_teardown,
13298 			test_snow3g_hash_generate_test_case_2),
13299 		TEST_CASE_ST(ut_setup, ut_teardown,
13300 			test_snow3g_hash_generate_test_case_3),
13301 		/* Tests with buffers which length is not byte-aligned */
13302 		TEST_CASE_ST(ut_setup, ut_teardown,
13303 			test_snow3g_hash_generate_test_case_4),
13304 		TEST_CASE_ST(ut_setup, ut_teardown,
13305 			test_snow3g_hash_generate_test_case_5),
13306 		TEST_CASE_ST(ut_setup, ut_teardown,
13307 			test_snow3g_hash_generate_test_case_6),
13308 		TEST_CASE_ST(ut_setup, ut_teardown,
13309 			test_snow3g_hash_verify_test_case_1),
13310 		TEST_CASE_ST(ut_setup, ut_teardown,
13311 			test_snow3g_hash_verify_test_case_2),
13312 		TEST_CASE_ST(ut_setup, ut_teardown,
13313 			test_snow3g_hash_verify_test_case_3),
13314 		/* Tests with buffers which length is not byte-aligned */
13315 		TEST_CASE_ST(ut_setup, ut_teardown,
13316 			test_snow3g_hash_verify_test_case_4),
13317 		TEST_CASE_ST(ut_setup, ut_teardown,
13318 			test_snow3g_hash_verify_test_case_5),
13319 		TEST_CASE_ST(ut_setup, ut_teardown,
13320 			test_snow3g_hash_verify_test_case_6),
13321 		TEST_CASE_ST(ut_setup, ut_teardown,
13322 			test_snow3g_cipher_auth_test_case_1),
13323 
13324 		/** SNOW 3G generate auth, then encrypt (UEA2) */
13325 		TEST_CASE_ST(ut_setup, ut_teardown,
13326 			test_snow3g_auth_cipher_test_case_1),
13327 		TEST_CASE_ST(ut_setup, ut_teardown,
13328 			test_snow3g_auth_cipher_test_case_2),
13329 		TEST_CASE_ST(ut_setup, ut_teardown,
13330 			test_snow3g_auth_cipher_test_case_2_oop),
13331 		TEST_CASE_ST(ut_setup, ut_teardown,
13332 			test_snow3g_auth_cipher_part_digest_enc),
13333 		TEST_CASE_ST(ut_setup, ut_teardown,
13334 			test_snow3g_auth_cipher_part_digest_enc_oop),
13335 		TEST_CASE_ST(ut_setup, ut_teardown,
13336 			test_snow3g_auth_cipher_test_case_3_sgl),
13337 		TEST_CASE_ST(ut_setup, ut_teardown,
13338 			test_snow3g_auth_cipher_test_case_3_oop_sgl),
13339 		TEST_CASE_ST(ut_setup, ut_teardown,
13340 			test_snow3g_auth_cipher_part_digest_enc_sgl),
13341 		TEST_CASE_ST(ut_setup, ut_teardown,
13342 			test_snow3g_auth_cipher_part_digest_enc_oop_sgl),
13343 
13344 		/** SNOW 3G decrypt (UEA2), then verify auth */
13345 		TEST_CASE_ST(ut_setup, ut_teardown,
13346 			test_snow3g_auth_cipher_verify_test_case_1),
13347 		TEST_CASE_ST(ut_setup, ut_teardown,
13348 			test_snow3g_auth_cipher_verify_test_case_2),
13349 		TEST_CASE_ST(ut_setup, ut_teardown,
13350 			test_snow3g_auth_cipher_verify_test_case_2_oop),
13351 		TEST_CASE_ST(ut_setup, ut_teardown,
13352 			test_snow3g_auth_cipher_verify_part_digest_enc),
13353 		TEST_CASE_ST(ut_setup, ut_teardown,
13354 			test_snow3g_auth_cipher_verify_part_digest_enc_oop),
13355 		TEST_CASE_ST(ut_setup, ut_teardown,
13356 			test_snow3g_auth_cipher_verify_test_case_3_sgl),
13357 		TEST_CASE_ST(ut_setup, ut_teardown,
13358 			test_snow3g_auth_cipher_verify_test_case_3_oop_sgl),
13359 		TEST_CASE_ST(ut_setup, ut_teardown,
13360 			test_snow3g_auth_cipher_verify_part_digest_enc_sgl),
13361 		TEST_CASE_ST(ut_setup, ut_teardown,
13362 			test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl),
13363 
13364 		TEST_CASES_END() /**< NULL terminate unit test array */
13365 	}
13366 };
13367 
13368 static struct unit_test_suite cryptodev_sw_zuc_testsuite  = {
13369 	.suite_name = "Crypto Device SW ZUC Unit Test Suite",
13370 	.setup = testsuite_setup,
13371 	.teardown = testsuite_teardown,
13372 	.unit_test_cases = {
13373 		/** ZUC encrypt only (EEA3) */
13374 		TEST_CASE_ST(ut_setup, ut_teardown,
13375 			test_zuc_encryption_test_case_1),
13376 		TEST_CASE_ST(ut_setup, ut_teardown,
13377 			test_zuc_encryption_test_case_2),
13378 		TEST_CASE_ST(ut_setup, ut_teardown,
13379 			test_zuc_encryption_test_case_3),
13380 		TEST_CASE_ST(ut_setup, ut_teardown,
13381 			test_zuc_encryption_test_case_4),
13382 		TEST_CASE_ST(ut_setup, ut_teardown,
13383 			test_zuc_encryption_test_case_5),
13384 		TEST_CASE_ST(ut_setup, ut_teardown,
13385 			test_zuc_hash_generate_test_case_1),
13386 		TEST_CASE_ST(ut_setup, ut_teardown,
13387 			test_zuc_hash_generate_test_case_2),
13388 		TEST_CASE_ST(ut_setup, ut_teardown,
13389 			test_zuc_hash_generate_test_case_3),
13390 		TEST_CASE_ST(ut_setup, ut_teardown,
13391 			test_zuc_hash_generate_test_case_4),
13392 		TEST_CASE_ST(ut_setup, ut_teardown,
13393 			test_zuc_hash_generate_test_case_5),
13394 		TEST_CASE_ST(ut_setup, ut_teardown,
13395 			test_zuc_encryption_test_case_6_sgl),
13396 		TEST_CASES_END() /**< NULL terminate unit test array */
13397 	}
13398 };
13399 
13400 static struct unit_test_suite cryptodev_caam_jr_testsuite  = {
13401 	.suite_name = "Crypto CAAM JR Unit Test Suite",
13402 	.setup = testsuite_setup,
13403 	.teardown = testsuite_teardown,
13404 	.unit_test_cases = {
13405 		TEST_CASE_ST(ut_setup, ut_teardown,
13406 			     test_device_configure_invalid_dev_id),
13407 		TEST_CASE_ST(ut_setup, ut_teardown,
13408 			     test_multi_session),
13409 
13410 		TEST_CASE_ST(ut_setup, ut_teardown,
13411 			     test_AES_chain_caam_jr_all),
13412 		TEST_CASE_ST(ut_setup, ut_teardown,
13413 			     test_3DES_chain_caam_jr_all),
13414 		TEST_CASE_ST(ut_setup, ut_teardown,
13415 			     test_AES_cipheronly_caam_jr_all),
13416 		TEST_CASE_ST(ut_setup, ut_teardown,
13417 			     test_3DES_cipheronly_caam_jr_all),
13418 		TEST_CASE_ST(ut_setup, ut_teardown,
13419 			     test_authonly_caam_jr_all),
13420 
13421 		TEST_CASES_END() /**< NULL terminate unit test array */
13422 	}
13423 };
13424 
13425 static struct unit_test_suite cryptodev_dpaa_sec_testsuite  = {
13426 	.suite_name = "Crypto DPAA_SEC Unit Test Suite",
13427 	.setup = testsuite_setup,
13428 	.teardown = testsuite_teardown,
13429 	.unit_test_cases = {
13430 		TEST_CASE_ST(ut_setup, ut_teardown,
13431 			     test_device_configure_invalid_dev_id),
13432 		TEST_CASE_ST(ut_setup, ut_teardown,
13433 			     test_multi_session),
13434 
13435 		TEST_CASE_ST(ut_setup, ut_teardown,
13436 			     test_AES_chain_dpaa_sec_all),
13437 		TEST_CASE_ST(ut_setup, ut_teardown,
13438 			     test_3DES_chain_dpaa_sec_all),
13439 		TEST_CASE_ST(ut_setup, ut_teardown,
13440 			     test_AES_cipheronly_dpaa_sec_all),
13441 		TEST_CASE_ST(ut_setup, ut_teardown,
13442 			     test_3DES_cipheronly_dpaa_sec_all),
13443 		TEST_CASE_ST(ut_setup, ut_teardown,
13444 			     test_authonly_dpaa_sec_all),
13445 
13446 #ifdef RTE_LIBRTE_SECURITY
13447 		TEST_CASE_ST(ut_setup, ut_teardown,
13448 			test_PDCP_PROTO_cplane_encap_all),
13449 
13450 		TEST_CASE_ST(ut_setup, ut_teardown,
13451 			test_PDCP_PROTO_cplane_decap_all),
13452 
13453 		TEST_CASE_ST(ut_setup, ut_teardown,
13454 			test_PDCP_PROTO_uplane_encap_all),
13455 
13456 		TEST_CASE_ST(ut_setup, ut_teardown,
13457 			test_PDCP_PROTO_uplane_decap_all),
13458 
13459 		TEST_CASE_ST(ut_setup, ut_teardown,
13460 			test_PDCP_PROTO_SGL_in_place_32B),
13461 		TEST_CASE_ST(ut_setup, ut_teardown,
13462 			test_PDCP_PROTO_SGL_oop_32B_128B),
13463 		TEST_CASE_ST(ut_setup, ut_teardown,
13464 			test_PDCP_PROTO_SGL_oop_32B_40B),
13465 		TEST_CASE_ST(ut_setup, ut_teardown,
13466 			test_PDCP_PROTO_SGL_oop_128B_32B),
13467 #endif
13468 		/** AES GCM Authenticated Encryption */
13469 		TEST_CASE_ST(ut_setup, ut_teardown,
13470 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
13471 		TEST_CASE_ST(ut_setup, ut_teardown,
13472 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
13473 		TEST_CASE_ST(ut_setup, ut_teardown,
13474 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
13475 		TEST_CASE_ST(ut_setup, ut_teardown,
13476 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
13477 		TEST_CASE_ST(ut_setup, ut_teardown,
13478 			test_AES_GCM_authenticated_encryption_test_case_1),
13479 		TEST_CASE_ST(ut_setup, ut_teardown,
13480 			test_AES_GCM_authenticated_encryption_test_case_2),
13481 		TEST_CASE_ST(ut_setup, ut_teardown,
13482 			test_AES_GCM_authenticated_encryption_test_case_3),
13483 		TEST_CASE_ST(ut_setup, ut_teardown,
13484 			test_AES_GCM_authenticated_encryption_test_case_4),
13485 		TEST_CASE_ST(ut_setup, ut_teardown,
13486 			test_AES_GCM_authenticated_encryption_test_case_5),
13487 		TEST_CASE_ST(ut_setup, ut_teardown,
13488 			test_AES_GCM_authenticated_encryption_test_case_6),
13489 		TEST_CASE_ST(ut_setup, ut_teardown,
13490 			test_AES_GCM_authenticated_encryption_test_case_7),
13491 		TEST_CASE_ST(ut_setup, ut_teardown,
13492 			test_AES_GCM_authenticated_encryption_test_case_8),
13493 
13494 		/** AES GCM Authenticated Decryption */
13495 		TEST_CASE_ST(ut_setup, ut_teardown,
13496 			test_AES_GCM_authenticated_decryption_test_case_1),
13497 		TEST_CASE_ST(ut_setup, ut_teardown,
13498 			test_AES_GCM_authenticated_decryption_test_case_2),
13499 		TEST_CASE_ST(ut_setup, ut_teardown,
13500 			test_AES_GCM_authenticated_decryption_test_case_3),
13501 		TEST_CASE_ST(ut_setup, ut_teardown,
13502 			test_AES_GCM_authenticated_decryption_test_case_4),
13503 		TEST_CASE_ST(ut_setup, ut_teardown,
13504 			test_AES_GCM_authenticated_decryption_test_case_5),
13505 		TEST_CASE_ST(ut_setup, ut_teardown,
13506 			test_AES_GCM_authenticated_decryption_test_case_6),
13507 		TEST_CASE_ST(ut_setup, ut_teardown,
13508 			test_AES_GCM_authenticated_decryption_test_case_7),
13509 		TEST_CASE_ST(ut_setup, ut_teardown,
13510 			test_AES_GCM_authenticated_decryption_test_case_8),
13511 
13512 		/** AES GCM Authenticated Encryption 192 bits key */
13513 		TEST_CASE_ST(ut_setup, ut_teardown,
13514 			test_AES_GCM_auth_encryption_test_case_192_1),
13515 		TEST_CASE_ST(ut_setup, ut_teardown,
13516 			test_AES_GCM_auth_encryption_test_case_192_2),
13517 		TEST_CASE_ST(ut_setup, ut_teardown,
13518 			test_AES_GCM_auth_encryption_test_case_192_3),
13519 		TEST_CASE_ST(ut_setup, ut_teardown,
13520 			test_AES_GCM_auth_encryption_test_case_192_4),
13521 		TEST_CASE_ST(ut_setup, ut_teardown,
13522 			test_AES_GCM_auth_encryption_test_case_192_5),
13523 		TEST_CASE_ST(ut_setup, ut_teardown,
13524 			test_AES_GCM_auth_encryption_test_case_192_6),
13525 		TEST_CASE_ST(ut_setup, ut_teardown,
13526 			test_AES_GCM_auth_encryption_test_case_192_7),
13527 
13528 		/** AES GCM Authenticated Decryption 192 bits key */
13529 		TEST_CASE_ST(ut_setup, ut_teardown,
13530 			test_AES_GCM_auth_decryption_test_case_192_1),
13531 		TEST_CASE_ST(ut_setup, ut_teardown,
13532 			test_AES_GCM_auth_decryption_test_case_192_2),
13533 		TEST_CASE_ST(ut_setup, ut_teardown,
13534 			test_AES_GCM_auth_decryption_test_case_192_3),
13535 		TEST_CASE_ST(ut_setup, ut_teardown,
13536 			test_AES_GCM_auth_decryption_test_case_192_4),
13537 		TEST_CASE_ST(ut_setup, ut_teardown,
13538 			test_AES_GCM_auth_decryption_test_case_192_5),
13539 		TEST_CASE_ST(ut_setup, ut_teardown,
13540 			test_AES_GCM_auth_decryption_test_case_192_6),
13541 		TEST_CASE_ST(ut_setup, ut_teardown,
13542 			test_AES_GCM_auth_decryption_test_case_192_7),
13543 
13544 		/** AES GCM Authenticated Encryption 256 bits key */
13545 		TEST_CASE_ST(ut_setup, ut_teardown,
13546 			test_AES_GCM_auth_encryption_test_case_256_1),
13547 		TEST_CASE_ST(ut_setup, ut_teardown,
13548 			test_AES_GCM_auth_encryption_test_case_256_2),
13549 		TEST_CASE_ST(ut_setup, ut_teardown,
13550 			test_AES_GCM_auth_encryption_test_case_256_3),
13551 		TEST_CASE_ST(ut_setup, ut_teardown,
13552 			test_AES_GCM_auth_encryption_test_case_256_4),
13553 		TEST_CASE_ST(ut_setup, ut_teardown,
13554 			test_AES_GCM_auth_encryption_test_case_256_5),
13555 		TEST_CASE_ST(ut_setup, ut_teardown,
13556 			test_AES_GCM_auth_encryption_test_case_256_6),
13557 		TEST_CASE_ST(ut_setup, ut_teardown,
13558 			test_AES_GCM_auth_encryption_test_case_256_7),
13559 
13560 		/** AES GCM Authenticated Decryption 256 bits key */
13561 		TEST_CASE_ST(ut_setup, ut_teardown,
13562 			test_AES_GCM_auth_decryption_test_case_256_1),
13563 		TEST_CASE_ST(ut_setup, ut_teardown,
13564 			test_AES_GCM_auth_decryption_test_case_256_2),
13565 		TEST_CASE_ST(ut_setup, ut_teardown,
13566 			test_AES_GCM_auth_decryption_test_case_256_3),
13567 		TEST_CASE_ST(ut_setup, ut_teardown,
13568 			test_AES_GCM_auth_decryption_test_case_256_4),
13569 		TEST_CASE_ST(ut_setup, ut_teardown,
13570 			test_AES_GCM_auth_decryption_test_case_256_5),
13571 		TEST_CASE_ST(ut_setup, ut_teardown,
13572 			test_AES_GCM_auth_decryption_test_case_256_6),
13573 		TEST_CASE_ST(ut_setup, ut_teardown,
13574 			test_AES_GCM_auth_decryption_test_case_256_7),
13575 
13576 		/** Out of place tests */
13577 		TEST_CASE_ST(ut_setup, ut_teardown,
13578 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
13579 		TEST_CASE_ST(ut_setup, ut_teardown,
13580 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
13581 
13582 		/** SNOW 3G encrypt only (UEA2) */
13583 		TEST_CASE_ST(ut_setup, ut_teardown,
13584 			test_snow3g_encryption_test_case_1),
13585 		TEST_CASE_ST(ut_setup, ut_teardown,
13586 			test_snow3g_encryption_test_case_2),
13587 		TEST_CASE_ST(ut_setup, ut_teardown,
13588 			test_snow3g_encryption_test_case_3),
13589 		TEST_CASE_ST(ut_setup, ut_teardown,
13590 			test_snow3g_encryption_test_case_4),
13591 		TEST_CASE_ST(ut_setup, ut_teardown,
13592 			test_snow3g_encryption_test_case_5),
13593 
13594 		TEST_CASE_ST(ut_setup, ut_teardown,
13595 			test_snow3g_encryption_test_case_1_oop),
13596 		TEST_CASE_ST(ut_setup, ut_teardown,
13597 				test_snow3g_encryption_test_case_1_oop_sgl),
13598 		TEST_CASE_ST(ut_setup, ut_teardown,
13599 			test_snow3g_decryption_test_case_1_oop),
13600 
13601 		/** SNOW 3G decrypt only (UEA2) */
13602 		TEST_CASE_ST(ut_setup, ut_teardown,
13603 			test_snow3g_decryption_test_case_1),
13604 		TEST_CASE_ST(ut_setup, ut_teardown,
13605 			test_snow3g_decryption_test_case_2),
13606 		TEST_CASE_ST(ut_setup, ut_teardown,
13607 			test_snow3g_decryption_test_case_3),
13608 		TEST_CASE_ST(ut_setup, ut_teardown,
13609 			test_snow3g_decryption_test_case_4),
13610 		TEST_CASE_ST(ut_setup, ut_teardown,
13611 			test_snow3g_decryption_test_case_5),
13612 
13613 		TEST_CASE_ST(ut_setup, ut_teardown,
13614 			test_snow3g_hash_generate_test_case_1),
13615 		TEST_CASE_ST(ut_setup, ut_teardown,
13616 			test_snow3g_hash_generate_test_case_2),
13617 		TEST_CASE_ST(ut_setup, ut_teardown,
13618 			test_snow3g_hash_generate_test_case_3),
13619 		TEST_CASE_ST(ut_setup, ut_teardown,
13620 			test_snow3g_hash_verify_test_case_1),
13621 		TEST_CASE_ST(ut_setup, ut_teardown,
13622 			test_snow3g_hash_verify_test_case_2),
13623 		TEST_CASE_ST(ut_setup, ut_teardown,
13624 			test_snow3g_hash_verify_test_case_3),
13625 
13626 		/** ZUC encrypt only (EEA3) */
13627 		TEST_CASE_ST(ut_setup, ut_teardown,
13628 			test_zuc_encryption_test_case_1),
13629 		TEST_CASE_ST(ut_setup, ut_teardown,
13630 			test_zuc_encryption_test_case_2),
13631 		TEST_CASE_ST(ut_setup, ut_teardown,
13632 			test_zuc_encryption_test_case_3),
13633 		TEST_CASE_ST(ut_setup, ut_teardown,
13634 			test_zuc_encryption_test_case_4),
13635 		TEST_CASE_ST(ut_setup, ut_teardown,
13636 			test_zuc_encryption_test_case_5),
13637 
13638 		/** ZUC authenticate (EIA3) */
13639 		TEST_CASE_ST(ut_setup, ut_teardown,
13640 			test_zuc_hash_generate_test_case_6),
13641 		TEST_CASE_ST(ut_setup, ut_teardown,
13642 			test_zuc_hash_generate_test_case_7),
13643 		TEST_CASE_ST(ut_setup, ut_teardown,
13644 			test_zuc_hash_generate_test_case_8),
13645 
13646 		/** Negative tests */
13647 		TEST_CASE_ST(ut_setup, ut_teardown,
13648 			test_AES_GCM_auth_encryption_fail_iv_corrupt),
13649 		TEST_CASE_ST(ut_setup, ut_teardown,
13650 			test_AES_GCM_auth_encryption_fail_in_data_corrupt),
13651 		TEST_CASE_ST(ut_setup, ut_teardown,
13652 			test_AES_GCM_auth_encryption_fail_out_data_corrupt),
13653 		TEST_CASE_ST(ut_setup, ut_teardown,
13654 			test_AES_GCM_auth_encryption_fail_aad_len_corrupt),
13655 		TEST_CASE_ST(ut_setup, ut_teardown,
13656 			test_AES_GCM_auth_encryption_fail_aad_corrupt),
13657 		TEST_CASE_ST(ut_setup, ut_teardown,
13658 			test_AES_GCM_auth_encryption_fail_tag_corrupt),
13659 		TEST_CASE_ST(ut_setup, ut_teardown,
13660 			test_AES_GCM_auth_decryption_fail_iv_corrupt),
13661 		TEST_CASE_ST(ut_setup, ut_teardown,
13662 			test_AES_GCM_auth_decryption_fail_in_data_corrupt),
13663 		TEST_CASE_ST(ut_setup, ut_teardown,
13664 			test_AES_GCM_auth_decryption_fail_out_data_corrupt),
13665 		TEST_CASE_ST(ut_setup, ut_teardown,
13666 			test_AES_GCM_auth_decryption_fail_aad_len_corrupt),
13667 		TEST_CASE_ST(ut_setup, ut_teardown,
13668 			test_AES_GCM_auth_decryption_fail_aad_corrupt),
13669 		TEST_CASE_ST(ut_setup, ut_teardown,
13670 			test_AES_GCM_auth_decryption_fail_tag_corrupt),
13671 		TEST_CASE_ST(ut_setup, ut_teardown,
13672 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
13673 		TEST_CASE_ST(ut_setup, ut_teardown,
13674 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
13675 		TEST_CASE_ST(ut_setup, ut_teardown,
13676 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13677 		TEST_CASE_ST(ut_setup, ut_teardown,
13678 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13679 
13680 		/* ESN Testcase */
13681 		TEST_CASE_ST(ut_setup, ut_teardown,
13682 			auth_encrypt_AES128CBC_HMAC_SHA1_esn_check),
13683 		TEST_CASE_ST(ut_setup, ut_teardown,
13684 			auth_decrypt_AES128CBC_HMAC_SHA1_esn_check),
13685 
13686 		TEST_CASES_END() /**< NULL terminate unit test array */
13687 	}
13688 };
13689 
13690 static struct unit_test_suite cryptodev_dpaa2_sec_testsuite  = {
13691 	.suite_name = "Crypto DPAA2_SEC Unit Test Suite",
13692 	.setup = testsuite_setup,
13693 	.teardown = testsuite_teardown,
13694 	.unit_test_cases = {
13695 		TEST_CASE_ST(ut_setup, ut_teardown,
13696 			test_device_configure_invalid_dev_id),
13697 		TEST_CASE_ST(ut_setup, ut_teardown,
13698 			test_multi_session),
13699 		TEST_CASE_ST(ut_setup, ut_teardown,
13700 			test_AES_chain_dpaa2_sec_all),
13701 		TEST_CASE_ST(ut_setup, ut_teardown,
13702 			test_3DES_chain_dpaa2_sec_all),
13703 		TEST_CASE_ST(ut_setup, ut_teardown,
13704 			test_AES_cipheronly_dpaa2_sec_all),
13705 		TEST_CASE_ST(ut_setup, ut_teardown,
13706 			test_3DES_cipheronly_dpaa2_sec_all),
13707 		TEST_CASE_ST(ut_setup, ut_teardown,
13708 			test_authonly_dpaa2_sec_all),
13709 
13710 #ifdef RTE_LIBRTE_SECURITY
13711 		TEST_CASE_ST(ut_setup, ut_teardown,
13712 			test_PDCP_PROTO_cplane_encap_all),
13713 
13714 		TEST_CASE_ST(ut_setup, ut_teardown,
13715 			test_PDCP_PROTO_cplane_decap_all),
13716 
13717 		TEST_CASE_ST(ut_setup, ut_teardown,
13718 			test_PDCP_PROTO_uplane_encap_all),
13719 
13720 		TEST_CASE_ST(ut_setup, ut_teardown,
13721 			test_PDCP_PROTO_uplane_decap_all),
13722 
13723 		TEST_CASE_ST(ut_setup, ut_teardown,
13724 			test_PDCP_PROTO_SGL_in_place_32B),
13725 		TEST_CASE_ST(ut_setup, ut_teardown,
13726 			test_PDCP_PROTO_SGL_oop_32B_128B),
13727 		TEST_CASE_ST(ut_setup, ut_teardown,
13728 			test_PDCP_PROTO_SGL_oop_32B_40B),
13729 		TEST_CASE_ST(ut_setup, ut_teardown,
13730 			test_PDCP_PROTO_SGL_oop_128B_32B),
13731 #endif
13732 		/** AES GCM Authenticated Encryption */
13733 		TEST_CASE_ST(ut_setup, ut_teardown,
13734 			test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
13735 		TEST_CASE_ST(ut_setup, ut_teardown,
13736 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
13737 		TEST_CASE_ST(ut_setup, ut_teardown,
13738 			test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
13739 		TEST_CASE_ST(ut_setup, ut_teardown,
13740 			test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
13741 		TEST_CASE_ST(ut_setup, ut_teardown,
13742 			test_AES_GCM_authenticated_encryption_test_case_1),
13743 		TEST_CASE_ST(ut_setup, ut_teardown,
13744 			test_AES_GCM_authenticated_encryption_test_case_2),
13745 		TEST_CASE_ST(ut_setup, ut_teardown,
13746 			test_AES_GCM_authenticated_encryption_test_case_3),
13747 		TEST_CASE_ST(ut_setup, ut_teardown,
13748 			test_AES_GCM_authenticated_encryption_test_case_4),
13749 		TEST_CASE_ST(ut_setup, ut_teardown,
13750 			test_AES_GCM_authenticated_encryption_test_case_5),
13751 		TEST_CASE_ST(ut_setup, ut_teardown,
13752 			test_AES_GCM_authenticated_encryption_test_case_6),
13753 		TEST_CASE_ST(ut_setup, ut_teardown,
13754 			test_AES_GCM_authenticated_encryption_test_case_7),
13755 		TEST_CASE_ST(ut_setup, ut_teardown,
13756 			test_AES_GCM_authenticated_encryption_test_case_8),
13757 
13758 		/** AES GCM Authenticated Decryption */
13759 		TEST_CASE_ST(ut_setup, ut_teardown,
13760 			test_AES_GCM_authenticated_decryption_test_case_1),
13761 		TEST_CASE_ST(ut_setup, ut_teardown,
13762 			test_AES_GCM_authenticated_decryption_test_case_2),
13763 		TEST_CASE_ST(ut_setup, ut_teardown,
13764 			test_AES_GCM_authenticated_decryption_test_case_3),
13765 		TEST_CASE_ST(ut_setup, ut_teardown,
13766 			test_AES_GCM_authenticated_decryption_test_case_4),
13767 		TEST_CASE_ST(ut_setup, ut_teardown,
13768 			test_AES_GCM_authenticated_decryption_test_case_5),
13769 		TEST_CASE_ST(ut_setup, ut_teardown,
13770 			test_AES_GCM_authenticated_decryption_test_case_6),
13771 		TEST_CASE_ST(ut_setup, ut_teardown,
13772 			test_AES_GCM_authenticated_decryption_test_case_7),
13773 		TEST_CASE_ST(ut_setup, ut_teardown,
13774 			test_AES_GCM_authenticated_decryption_test_case_8),
13775 
13776 		/** AES GCM Authenticated Encryption 192 bits key */
13777 		TEST_CASE_ST(ut_setup, ut_teardown,
13778 			test_AES_GCM_auth_encryption_test_case_192_1),
13779 		TEST_CASE_ST(ut_setup, ut_teardown,
13780 			test_AES_GCM_auth_encryption_test_case_192_2),
13781 		TEST_CASE_ST(ut_setup, ut_teardown,
13782 			test_AES_GCM_auth_encryption_test_case_192_3),
13783 		TEST_CASE_ST(ut_setup, ut_teardown,
13784 			test_AES_GCM_auth_encryption_test_case_192_4),
13785 		TEST_CASE_ST(ut_setup, ut_teardown,
13786 			test_AES_GCM_auth_encryption_test_case_192_5),
13787 		TEST_CASE_ST(ut_setup, ut_teardown,
13788 			test_AES_GCM_auth_encryption_test_case_192_6),
13789 		TEST_CASE_ST(ut_setup, ut_teardown,
13790 			test_AES_GCM_auth_encryption_test_case_192_7),
13791 
13792 		/** AES GCM Authenticated Decryption 192 bits key */
13793 		TEST_CASE_ST(ut_setup, ut_teardown,
13794 			test_AES_GCM_auth_decryption_test_case_192_1),
13795 		TEST_CASE_ST(ut_setup, ut_teardown,
13796 			test_AES_GCM_auth_decryption_test_case_192_2),
13797 		TEST_CASE_ST(ut_setup, ut_teardown,
13798 			test_AES_GCM_auth_decryption_test_case_192_3),
13799 		TEST_CASE_ST(ut_setup, ut_teardown,
13800 			test_AES_GCM_auth_decryption_test_case_192_4),
13801 		TEST_CASE_ST(ut_setup, ut_teardown,
13802 			test_AES_GCM_auth_decryption_test_case_192_5),
13803 		TEST_CASE_ST(ut_setup, ut_teardown,
13804 			test_AES_GCM_auth_decryption_test_case_192_6),
13805 		TEST_CASE_ST(ut_setup, ut_teardown,
13806 			test_AES_GCM_auth_decryption_test_case_192_7),
13807 
13808 		/** AES GCM Authenticated Encryption 256 bits key */
13809 		TEST_CASE_ST(ut_setup, ut_teardown,
13810 			test_AES_GCM_auth_encryption_test_case_256_1),
13811 		TEST_CASE_ST(ut_setup, ut_teardown,
13812 			test_AES_GCM_auth_encryption_test_case_256_2),
13813 		TEST_CASE_ST(ut_setup, ut_teardown,
13814 			test_AES_GCM_auth_encryption_test_case_256_3),
13815 		TEST_CASE_ST(ut_setup, ut_teardown,
13816 			test_AES_GCM_auth_encryption_test_case_256_4),
13817 		TEST_CASE_ST(ut_setup, ut_teardown,
13818 			test_AES_GCM_auth_encryption_test_case_256_5),
13819 		TEST_CASE_ST(ut_setup, ut_teardown,
13820 			test_AES_GCM_auth_encryption_test_case_256_6),
13821 		TEST_CASE_ST(ut_setup, ut_teardown,
13822 			test_AES_GCM_auth_encryption_test_case_256_7),
13823 
13824 		/** AES GCM Authenticated Decryption 256 bits key */
13825 		TEST_CASE_ST(ut_setup, ut_teardown,
13826 			test_AES_GCM_auth_decryption_test_case_256_1),
13827 		TEST_CASE_ST(ut_setup, ut_teardown,
13828 			test_AES_GCM_auth_decryption_test_case_256_2),
13829 		TEST_CASE_ST(ut_setup, ut_teardown,
13830 			test_AES_GCM_auth_decryption_test_case_256_3),
13831 		TEST_CASE_ST(ut_setup, ut_teardown,
13832 			test_AES_GCM_auth_decryption_test_case_256_4),
13833 		TEST_CASE_ST(ut_setup, ut_teardown,
13834 			test_AES_GCM_auth_decryption_test_case_256_5),
13835 		TEST_CASE_ST(ut_setup, ut_teardown,
13836 			test_AES_GCM_auth_decryption_test_case_256_6),
13837 		TEST_CASE_ST(ut_setup, ut_teardown,
13838 			test_AES_GCM_auth_decryption_test_case_256_7),
13839 
13840 		/** Out of place tests */
13841 		TEST_CASE_ST(ut_setup, ut_teardown,
13842 			test_AES_GCM_authenticated_encryption_oop_test_case_1),
13843 		TEST_CASE_ST(ut_setup, ut_teardown,
13844 			test_AES_GCM_authenticated_decryption_oop_test_case_1),
13845 
13846 		/** SNOW 3G encrypt only (UEA2) */
13847 		TEST_CASE_ST(ut_setup, ut_teardown,
13848 			test_snow3g_encryption_test_case_1),
13849 		TEST_CASE_ST(ut_setup, ut_teardown,
13850 			test_snow3g_encryption_test_case_2),
13851 		TEST_CASE_ST(ut_setup, ut_teardown,
13852 			test_snow3g_encryption_test_case_3),
13853 		TEST_CASE_ST(ut_setup, ut_teardown,
13854 			test_snow3g_encryption_test_case_4),
13855 		TEST_CASE_ST(ut_setup, ut_teardown,
13856 			test_snow3g_encryption_test_case_5),
13857 
13858 		TEST_CASE_ST(ut_setup, ut_teardown,
13859 			test_snow3g_encryption_test_case_1_oop),
13860 		TEST_CASE_ST(ut_setup, ut_teardown,
13861 				test_snow3g_encryption_test_case_1_oop_sgl),
13862 		TEST_CASE_ST(ut_setup, ut_teardown,
13863 			test_snow3g_decryption_test_case_1_oop),
13864 
13865 		/** SNOW 3G decrypt only (UEA2) */
13866 		TEST_CASE_ST(ut_setup, ut_teardown,
13867 			test_snow3g_decryption_test_case_1),
13868 		TEST_CASE_ST(ut_setup, ut_teardown,
13869 			test_snow3g_decryption_test_case_2),
13870 		TEST_CASE_ST(ut_setup, ut_teardown,
13871 			test_snow3g_decryption_test_case_3),
13872 		TEST_CASE_ST(ut_setup, ut_teardown,
13873 			test_snow3g_decryption_test_case_4),
13874 		TEST_CASE_ST(ut_setup, ut_teardown,
13875 			test_snow3g_decryption_test_case_5),
13876 
13877 		TEST_CASE_ST(ut_setup, ut_teardown,
13878 			test_snow3g_hash_generate_test_case_1),
13879 		TEST_CASE_ST(ut_setup, ut_teardown,
13880 			test_snow3g_hash_generate_test_case_2),
13881 		TEST_CASE_ST(ut_setup, ut_teardown,
13882 			test_snow3g_hash_generate_test_case_3),
13883 		TEST_CASE_ST(ut_setup, ut_teardown,
13884 			test_snow3g_hash_verify_test_case_1),
13885 		TEST_CASE_ST(ut_setup, ut_teardown,
13886 			test_snow3g_hash_verify_test_case_2),
13887 		TEST_CASE_ST(ut_setup, ut_teardown,
13888 			test_snow3g_hash_verify_test_case_3),
13889 
13890 		/** ZUC encrypt only (EEA3) */
13891 		TEST_CASE_ST(ut_setup, ut_teardown,
13892 			test_zuc_encryption_test_case_1),
13893 		TEST_CASE_ST(ut_setup, ut_teardown,
13894 			test_zuc_encryption_test_case_2),
13895 		TEST_CASE_ST(ut_setup, ut_teardown,
13896 			test_zuc_encryption_test_case_3),
13897 		TEST_CASE_ST(ut_setup, ut_teardown,
13898 			test_zuc_encryption_test_case_4),
13899 		TEST_CASE_ST(ut_setup, ut_teardown,
13900 			test_zuc_encryption_test_case_5),
13901 
13902 		/** ZUC authenticate (EIA3) */
13903 		TEST_CASE_ST(ut_setup, ut_teardown,
13904 			test_zuc_hash_generate_test_case_6),
13905 		TEST_CASE_ST(ut_setup, ut_teardown,
13906 			test_zuc_hash_generate_test_case_7),
13907 		TEST_CASE_ST(ut_setup, ut_teardown,
13908 			test_zuc_hash_generate_test_case_8),
13909 
13910 		/** HMAC_MD5 Authentication */
13911 		TEST_CASE_ST(ut_setup, ut_teardown,
13912 			test_MD5_HMAC_generate_case_1),
13913 		TEST_CASE_ST(ut_setup, ut_teardown,
13914 			test_MD5_HMAC_verify_case_1),
13915 		TEST_CASE_ST(ut_setup, ut_teardown,
13916 			test_MD5_HMAC_generate_case_2),
13917 		TEST_CASE_ST(ut_setup, ut_teardown,
13918 			test_MD5_HMAC_verify_case_2),
13919 
13920 		/** Negative tests */
13921 		TEST_CASE_ST(ut_setup, ut_teardown,
13922 			test_AES_GCM_auth_encryption_fail_iv_corrupt),
13923 		TEST_CASE_ST(ut_setup, ut_teardown,
13924 			test_AES_GCM_auth_encryption_fail_in_data_corrupt),
13925 		TEST_CASE_ST(ut_setup, ut_teardown,
13926 			test_AES_GCM_auth_encryption_fail_out_data_corrupt),
13927 		TEST_CASE_ST(ut_setup, ut_teardown,
13928 			test_AES_GCM_auth_encryption_fail_aad_len_corrupt),
13929 		TEST_CASE_ST(ut_setup, ut_teardown,
13930 			test_AES_GCM_auth_encryption_fail_aad_corrupt),
13931 		TEST_CASE_ST(ut_setup, ut_teardown,
13932 			test_AES_GCM_auth_encryption_fail_tag_corrupt),
13933 		TEST_CASE_ST(ut_setup, ut_teardown,
13934 			test_AES_GCM_auth_decryption_fail_iv_corrupt),
13935 		TEST_CASE_ST(ut_setup, ut_teardown,
13936 			test_AES_GCM_auth_decryption_fail_in_data_corrupt),
13937 		TEST_CASE_ST(ut_setup, ut_teardown,
13938 			test_AES_GCM_auth_decryption_fail_out_data_corrupt),
13939 		TEST_CASE_ST(ut_setup, ut_teardown,
13940 			test_AES_GCM_auth_decryption_fail_aad_len_corrupt),
13941 		TEST_CASE_ST(ut_setup, ut_teardown,
13942 			test_AES_GCM_auth_decryption_fail_aad_corrupt),
13943 		TEST_CASE_ST(ut_setup, ut_teardown,
13944 			test_AES_GCM_auth_decryption_fail_tag_corrupt),
13945 		TEST_CASE_ST(ut_setup, ut_teardown,
13946 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
13947 		TEST_CASE_ST(ut_setup, ut_teardown,
13948 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
13949 		TEST_CASE_ST(ut_setup, ut_teardown,
13950 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13951 		TEST_CASE_ST(ut_setup, ut_teardown,
13952 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13953 
13954 		/* ESN Testcase */
13955 		TEST_CASE_ST(ut_setup, ut_teardown,
13956 			auth_encrypt_AES128CBC_HMAC_SHA1_esn_check),
13957 
13958 		TEST_CASE_ST(ut_setup, ut_teardown,
13959 			auth_decrypt_AES128CBC_HMAC_SHA1_esn_check),
13960 
13961 		TEST_CASES_END() /**< NULL terminate unit test array */
13962 	}
13963 };
13964 
13965 static struct unit_test_suite cryptodev_null_testsuite  = {
13966 	.suite_name = "Crypto Device NULL Unit Test Suite",
13967 	.setup = testsuite_setup,
13968 	.teardown = testsuite_teardown,
13969 	.unit_test_cases = {
13970 		TEST_CASE_ST(ut_setup, ut_teardown,
13971 			test_null_invalid_operation),
13972 		TEST_CASE_ST(ut_setup, ut_teardown,
13973 			test_null_burst_operation),
13974 		TEST_CASE_ST(ut_setup, ut_teardown,
13975 			test_AES_chain_null_all),
13976 		TEST_CASE_ST(ut_setup, ut_teardown,
13977 			test_AES_cipheronly_null_all),
13978 		TEST_CASE_ST(ut_setup, ut_teardown,
13979 				test_authonly_null_all),
13980 
13981 		TEST_CASES_END() /**< NULL terminate unit test array */
13982 	}
13983 };
13984 
13985 static struct unit_test_suite cryptodev_armv8_testsuite  = {
13986 	.suite_name = "Crypto Device ARMv8 Unit Test Suite",
13987 	.setup = testsuite_setup,
13988 	.teardown = testsuite_teardown,
13989 	.unit_test_cases = {
13990 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
13991 
13992 		/** Negative tests */
13993 		TEST_CASE_ST(ut_setup, ut_teardown,
13994 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
13995 		TEST_CASE_ST(ut_setup, ut_teardown,
13996 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
13997 
13998 		TEST_CASES_END() /**< NULL terminate unit test array */
13999 	}
14000 };
14001 
14002 static struct unit_test_suite cryptodev_mrvl_testsuite  = {
14003 	.suite_name = "Crypto Device Marvell Component Test Suite",
14004 	.setup = testsuite_setup,
14005 	.teardown = testsuite_teardown,
14006 	.unit_test_cases = {
14007 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
14008 		TEST_CASE_ST(ut_setup, ut_teardown,
14009 				test_multi_session_random_usage),
14010 		TEST_CASE_ST(ut_setup, ut_teardown,
14011 				test_AES_chain_mrvl_all),
14012 		TEST_CASE_ST(ut_setup, ut_teardown,
14013 				test_AES_cipheronly_mrvl_all),
14014 		TEST_CASE_ST(ut_setup, ut_teardown,
14015 				test_authonly_mrvl_all),
14016 		TEST_CASE_ST(ut_setup, ut_teardown,
14017 				test_3DES_chain_mrvl_all),
14018 		TEST_CASE_ST(ut_setup, ut_teardown,
14019 				test_3DES_cipheronly_mrvl_all),
14020 
14021 		/** Negative tests */
14022 		TEST_CASE_ST(ut_setup, ut_teardown,
14023 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
14024 		TEST_CASE_ST(ut_setup, ut_teardown,
14025 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
14026 		TEST_CASE_ST(ut_setup, ut_teardown,
14027 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
14028 		TEST_CASE_ST(ut_setup, ut_teardown,
14029 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
14030 
14031 		TEST_CASES_END() /**< NULL terminate unit test array */
14032 	}
14033 };
14034 
14035 static struct unit_test_suite cryptodev_ccp_testsuite  = {
14036 	.suite_name = "Crypto Device CCP Unit Test Suite",
14037 	.setup = testsuite_setup,
14038 	.teardown = testsuite_teardown,
14039 	.unit_test_cases = {
14040 		TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
14041 		TEST_CASE_ST(ut_setup, ut_teardown,
14042 				test_multi_session_random_usage),
14043 		TEST_CASE_ST(ut_setup, ut_teardown,
14044 				test_AES_chain_ccp_all),
14045 		TEST_CASE_ST(ut_setup, ut_teardown,
14046 				test_AES_cipheronly_ccp_all),
14047 		TEST_CASE_ST(ut_setup, ut_teardown,
14048 				test_3DES_chain_ccp_all),
14049 		TEST_CASE_ST(ut_setup, ut_teardown,
14050 				test_3DES_cipheronly_ccp_all),
14051 		TEST_CASE_ST(ut_setup, ut_teardown,
14052 				test_authonly_ccp_all),
14053 
14054 		/** Negative tests */
14055 		TEST_CASE_ST(ut_setup, ut_teardown,
14056 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
14057 		TEST_CASE_ST(ut_setup, ut_teardown,
14058 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
14059 		TEST_CASE_ST(ut_setup, ut_teardown,
14060 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
14061 		TEST_CASE_ST(ut_setup, ut_teardown,
14062 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
14063 
14064 		TEST_CASES_END() /**< NULL terminate unit test array */
14065 	}
14066 };
14067 
14068 static struct unit_test_suite cryptodev_octeontx_testsuite  = {
14069 	.suite_name = "Crypto Device OCTEONTX Unit Test Suite",
14070 	.setup = testsuite_setup,
14071 	.teardown = testsuite_teardown,
14072 	.unit_test_cases = {
14073 		TEST_CASE_ST(ut_setup, ut_teardown,
14074 			test_AES_chain_octeontx_all),
14075 		TEST_CASE_ST(ut_setup, ut_teardown,
14076 			test_AES_cipheronly_octeontx_all),
14077 		TEST_CASE_ST(ut_setup, ut_teardown,
14078 			test_3DES_chain_octeontx_all),
14079 		TEST_CASE_ST(ut_setup, ut_teardown,
14080 			test_3DES_cipheronly_octeontx_all),
14081 		TEST_CASE_ST(ut_setup, ut_teardown,
14082 			test_authonly_octeontx_all),
14083 
14084 		/** AES GCM Authenticated Encryption */
14085 		TEST_CASE_ST(ut_setup, ut_teardown,
14086 			test_AES_GCM_authenticated_encryption_test_case_1),
14087 		TEST_CASE_ST(ut_setup, ut_teardown,
14088 			test_AES_GCM_authenticated_encryption_test_case_2),
14089 		TEST_CASE_ST(ut_setup, ut_teardown,
14090 			test_AES_GCM_authenticated_encryption_test_case_3),
14091 		TEST_CASE_ST(ut_setup, ut_teardown,
14092 			test_AES_GCM_authenticated_encryption_test_case_4),
14093 		TEST_CASE_ST(ut_setup, ut_teardown,
14094 			test_AES_GCM_authenticated_encryption_test_case_5),
14095 		TEST_CASE_ST(ut_setup, ut_teardown,
14096 			test_AES_GCM_authenticated_encryption_test_case_6),
14097 		TEST_CASE_ST(ut_setup, ut_teardown,
14098 			test_AES_GCM_authenticated_encryption_test_case_7),
14099 
14100 		/** AES GCM Authenticated Decryption */
14101 		TEST_CASE_ST(ut_setup, ut_teardown,
14102 			test_AES_GCM_authenticated_decryption_test_case_1),
14103 		TEST_CASE_ST(ut_setup, ut_teardown,
14104 			test_AES_GCM_authenticated_decryption_test_case_2),
14105 		TEST_CASE_ST(ut_setup, ut_teardown,
14106 			test_AES_GCM_authenticated_decryption_test_case_3),
14107 		TEST_CASE_ST(ut_setup, ut_teardown,
14108 			test_AES_GCM_authenticated_decryption_test_case_4),
14109 		TEST_CASE_ST(ut_setup, ut_teardown,
14110 			test_AES_GCM_authenticated_decryption_test_case_5),
14111 		TEST_CASE_ST(ut_setup, ut_teardown,
14112 			test_AES_GCM_authenticated_decryption_test_case_6),
14113 		TEST_CASE_ST(ut_setup, ut_teardown,
14114 			test_AES_GCM_authenticated_decryption_test_case_7),
14115 		/** AES GMAC Authentication */
14116 		TEST_CASE_ST(ut_setup, ut_teardown,
14117 			test_AES_GMAC_authentication_test_case_1),
14118 		TEST_CASE_ST(ut_setup, ut_teardown,
14119 			test_AES_GMAC_authentication_verify_test_case_1),
14120 		TEST_CASE_ST(ut_setup, ut_teardown,
14121 			test_AES_GMAC_authentication_test_case_2),
14122 		TEST_CASE_ST(ut_setup, ut_teardown,
14123 			test_AES_GMAC_authentication_verify_test_case_2),
14124 		TEST_CASE_ST(ut_setup, ut_teardown,
14125 			test_AES_GMAC_authentication_test_case_3),
14126 		TEST_CASE_ST(ut_setup, ut_teardown,
14127 			test_AES_GMAC_authentication_verify_test_case_3),
14128 
14129 		/** SNOW 3G encrypt only (UEA2) */
14130 		TEST_CASE_ST(ut_setup, ut_teardown,
14131 			test_snow3g_encryption_test_case_1),
14132 		TEST_CASE_ST(ut_setup, ut_teardown,
14133 			test_snow3g_encryption_test_case_2),
14134 		TEST_CASE_ST(ut_setup, ut_teardown,
14135 			test_snow3g_encryption_test_case_3),
14136 		TEST_CASE_ST(ut_setup, ut_teardown,
14137 			test_snow3g_encryption_test_case_4),
14138 		TEST_CASE_ST(ut_setup, ut_teardown,
14139 			test_snow3g_encryption_test_case_5),
14140 
14141 		TEST_CASE_ST(ut_setup, ut_teardown,
14142 			test_snow3g_encryption_test_case_1_oop),
14143 		TEST_CASE_ST(ut_setup, ut_teardown,
14144 			test_snow3g_decryption_test_case_1_oop),
14145 		TEST_CASE_ST(ut_setup, ut_teardown,
14146 			test_snow3g_encryption_test_case_1_oop_sgl),
14147 
14148 		/** SNOW 3G decrypt only (UEA2) */
14149 		TEST_CASE_ST(ut_setup, ut_teardown,
14150 			test_snow3g_decryption_test_case_1),
14151 		TEST_CASE_ST(ut_setup, ut_teardown,
14152 			test_snow3g_decryption_test_case_2),
14153 		TEST_CASE_ST(ut_setup, ut_teardown,
14154 			test_snow3g_decryption_test_case_3),
14155 		TEST_CASE_ST(ut_setup, ut_teardown,
14156 			test_snow3g_decryption_test_case_4),
14157 		TEST_CASE_ST(ut_setup, ut_teardown,
14158 			test_snow3g_decryption_test_case_5),
14159 
14160 		TEST_CASE_ST(ut_setup, ut_teardown,
14161 			test_snow3g_hash_generate_test_case_1),
14162 		TEST_CASE_ST(ut_setup, ut_teardown,
14163 			test_snow3g_hash_generate_test_case_2),
14164 		TEST_CASE_ST(ut_setup, ut_teardown,
14165 			test_snow3g_hash_generate_test_case_3),
14166 		TEST_CASE_ST(ut_setup, ut_teardown,
14167 			test_snow3g_hash_verify_test_case_1),
14168 		TEST_CASE_ST(ut_setup, ut_teardown,
14169 			test_snow3g_hash_verify_test_case_2),
14170 		TEST_CASE_ST(ut_setup, ut_teardown,
14171 			test_snow3g_hash_verify_test_case_3),
14172 
14173 		/** ZUC encrypt only (EEA3) */
14174 		TEST_CASE_ST(ut_setup, ut_teardown,
14175 			test_zuc_encryption_test_case_1),
14176 		TEST_CASE_ST(ut_setup, ut_teardown,
14177 			test_zuc_encryption_test_case_2),
14178 		TEST_CASE_ST(ut_setup, ut_teardown,
14179 			test_zuc_encryption_test_case_3),
14180 		TEST_CASE_ST(ut_setup, ut_teardown,
14181 			test_zuc_encryption_test_case_4),
14182 		TEST_CASE_ST(ut_setup, ut_teardown,
14183 			test_zuc_encryption_test_case_5),
14184 		TEST_CASE_ST(ut_setup, ut_teardown,
14185 			test_zuc_hash_generate_test_case_1),
14186 		TEST_CASE_ST(ut_setup, ut_teardown,
14187 			test_zuc_hash_generate_test_case_2),
14188 		TEST_CASE_ST(ut_setup, ut_teardown,
14189 			test_zuc_hash_generate_test_case_3),
14190 		TEST_CASE_ST(ut_setup, ut_teardown,
14191 			test_zuc_hash_generate_test_case_4),
14192 		TEST_CASE_ST(ut_setup, ut_teardown,
14193 			test_zuc_hash_generate_test_case_5),
14194 		TEST_CASE_ST(ut_setup, ut_teardown,
14195 			test_zuc_encryption_test_case_6_sgl),
14196 
14197 		/** KASUMI encrypt only (UEA1) */
14198 		TEST_CASE_ST(ut_setup, ut_teardown,
14199 			test_kasumi_encryption_test_case_1),
14200 		TEST_CASE_ST(ut_setup, ut_teardown,
14201 			test_kasumi_encryption_test_case_2),
14202 		TEST_CASE_ST(ut_setup, ut_teardown,
14203 			test_kasumi_encryption_test_case_3),
14204 		TEST_CASE_ST(ut_setup, ut_teardown,
14205 			test_kasumi_encryption_test_case_4),
14206 		TEST_CASE_ST(ut_setup, ut_teardown,
14207 			test_kasumi_encryption_test_case_5),
14208 		TEST_CASE_ST(ut_setup, ut_teardown,
14209 			test_kasumi_encryption_test_case_1_sgl),
14210 		TEST_CASE_ST(ut_setup, ut_teardown,
14211 			test_kasumi_encryption_test_case_1_oop_sgl),
14212 		/** KASUMI decrypt only (UEA1) */
14213 		TEST_CASE_ST(ut_setup, ut_teardown,
14214 			test_kasumi_decryption_test_case_1),
14215 		TEST_CASE_ST(ut_setup, ut_teardown,
14216 			test_kasumi_decryption_test_case_2),
14217 		TEST_CASE_ST(ut_setup, ut_teardown,
14218 			test_kasumi_decryption_test_case_3),
14219 		TEST_CASE_ST(ut_setup, ut_teardown,
14220 			test_kasumi_decryption_test_case_4),
14221 		TEST_CASE_ST(ut_setup, ut_teardown,
14222 			test_kasumi_decryption_test_case_5),
14223 
14224 		TEST_CASE_ST(ut_setup, ut_teardown,
14225 			test_kasumi_encryption_test_case_1_oop),
14226 		TEST_CASE_ST(ut_setup, ut_teardown,
14227 			test_kasumi_decryption_test_case_1_oop),
14228 
14229 		/** KASUMI hash only (UIA1) */
14230 		TEST_CASE_ST(ut_setup, ut_teardown,
14231 			test_kasumi_hash_generate_test_case_1),
14232 		TEST_CASE_ST(ut_setup, ut_teardown,
14233 			test_kasumi_hash_generate_test_case_2),
14234 		TEST_CASE_ST(ut_setup, ut_teardown,
14235 			test_kasumi_hash_generate_test_case_3),
14236 		TEST_CASE_ST(ut_setup, ut_teardown,
14237 			test_kasumi_hash_generate_test_case_4),
14238 		TEST_CASE_ST(ut_setup, ut_teardown,
14239 			test_kasumi_hash_generate_test_case_5),
14240 		TEST_CASE_ST(ut_setup, ut_teardown,
14241 			test_kasumi_hash_generate_test_case_6),
14242 		TEST_CASE_ST(ut_setup, ut_teardown,
14243 			test_kasumi_hash_verify_test_case_1),
14244 		TEST_CASE_ST(ut_setup, ut_teardown,
14245 			test_kasumi_hash_verify_test_case_2),
14246 		TEST_CASE_ST(ut_setup, ut_teardown,
14247 			test_kasumi_hash_verify_test_case_3),
14248 		TEST_CASE_ST(ut_setup, ut_teardown,
14249 			test_kasumi_hash_verify_test_case_4),
14250 		TEST_CASE_ST(ut_setup, ut_teardown,
14251 			test_kasumi_hash_verify_test_case_5),
14252 
14253 		/** NULL tests */
14254 		TEST_CASE_ST(ut_setup, ut_teardown,
14255 			test_null_cipher_only_operation),
14256 		TEST_CASE_ST(ut_setup, ut_teardown,
14257 			test_null_auth_only_operation),
14258 		TEST_CASE_ST(ut_setup, ut_teardown,
14259 			test_null_cipher_auth_operation),
14260 		TEST_CASE_ST(ut_setup, ut_teardown,
14261 			test_null_auth_cipher_operation),
14262 
14263 		/** Negative tests */
14264 		TEST_CASE_ST(ut_setup, ut_teardown,
14265 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
14266 		TEST_CASE_ST(ut_setup, ut_teardown,
14267 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
14268 		TEST_CASE_ST(ut_setup, ut_teardown,
14269 			authentication_verify_AES128_GMAC_fail_data_corrupt),
14270 		TEST_CASE_ST(ut_setup, ut_teardown,
14271 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
14272 		TEST_CASE_ST(ut_setup, ut_teardown,
14273 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
14274 		TEST_CASE_ST(ut_setup, ut_teardown,
14275 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
14276 		TEST_CASES_END() /**< NULL terminate unit test array */
14277 	}
14278 };
14279 
14280 static struct unit_test_suite cryptodev_nitrox_testsuite  = {
14281 	.suite_name = "Crypto NITROX Unit Test Suite",
14282 	.setup = testsuite_setup,
14283 	.teardown = testsuite_teardown,
14284 	.unit_test_cases = {
14285 		TEST_CASE_ST(ut_setup, ut_teardown,
14286 			     test_device_configure_invalid_dev_id),
14287 		TEST_CASE_ST(ut_setup, ut_teardown,
14288 				test_device_configure_invalid_queue_pair_ids),
14289 		TEST_CASE_ST(ut_setup, ut_teardown,
14290 			     test_AES_chain_nitrox_all),
14291 
14292 		TEST_CASES_END() /**< NULL terminate unit test array */
14293 	}
14294 };
14295 
14296 static struct unit_test_suite cryptodev_octeontx2_testsuite  = {
14297 	.suite_name = "Crypto Device OCTEON TX2 Unit Test Suite",
14298 	.setup = testsuite_setup,
14299 	.teardown = testsuite_teardown,
14300 	.unit_test_cases = {
14301 		TEST_CASE_ST(ut_setup, ut_teardown,
14302 			test_AES_chain_octeontx2_all),
14303 		TEST_CASE_ST(ut_setup, ut_teardown,
14304 			test_AES_cipheronly_octeontx2_all),
14305 		TEST_CASE_ST(ut_setup, ut_teardown,
14306 			test_3DES_chain_octeontx2_all),
14307 		TEST_CASE_ST(ut_setup, ut_teardown,
14308 			test_3DES_cipheronly_octeontx2_all),
14309 		TEST_CASE_ST(ut_setup, ut_teardown,
14310 			test_authonly_octeontx2_all),
14311 
14312 		/** AES GCM Authenticated Encryption */
14313 		TEST_CASE_ST(ut_setup, ut_teardown,
14314 			test_AES_GCM_authenticated_encryption_test_case_1),
14315 		TEST_CASE_ST(ut_setup, ut_teardown,
14316 			test_AES_GCM_authenticated_encryption_test_case_2),
14317 		TEST_CASE_ST(ut_setup, ut_teardown,
14318 			test_AES_GCM_authenticated_encryption_test_case_3),
14319 		TEST_CASE_ST(ut_setup, ut_teardown,
14320 			test_AES_GCM_authenticated_encryption_test_case_4),
14321 		TEST_CASE_ST(ut_setup, ut_teardown,
14322 			test_AES_GCM_authenticated_encryption_test_case_5),
14323 		TEST_CASE_ST(ut_setup, ut_teardown,
14324 			test_AES_GCM_authenticated_encryption_test_case_6),
14325 		TEST_CASE_ST(ut_setup, ut_teardown,
14326 			test_AES_GCM_authenticated_encryption_test_case_7),
14327 
14328 		/** AES GCM Authenticated Decryption */
14329 		TEST_CASE_ST(ut_setup, ut_teardown,
14330 			test_AES_GCM_authenticated_decryption_test_case_1),
14331 		TEST_CASE_ST(ut_setup, ut_teardown,
14332 			test_AES_GCM_authenticated_decryption_test_case_2),
14333 		TEST_CASE_ST(ut_setup, ut_teardown,
14334 			test_AES_GCM_authenticated_decryption_test_case_3),
14335 		TEST_CASE_ST(ut_setup, ut_teardown,
14336 			test_AES_GCM_authenticated_decryption_test_case_4),
14337 		TEST_CASE_ST(ut_setup, ut_teardown,
14338 			test_AES_GCM_authenticated_decryption_test_case_5),
14339 		TEST_CASE_ST(ut_setup, ut_teardown,
14340 			test_AES_GCM_authenticated_decryption_test_case_6),
14341 		TEST_CASE_ST(ut_setup, ut_teardown,
14342 			test_AES_GCM_authenticated_decryption_test_case_7),
14343 		/** AES GMAC Authentication */
14344 		TEST_CASE_ST(ut_setup, ut_teardown,
14345 			test_AES_GMAC_authentication_test_case_1),
14346 		TEST_CASE_ST(ut_setup, ut_teardown,
14347 			test_AES_GMAC_authentication_verify_test_case_1),
14348 		TEST_CASE_ST(ut_setup, ut_teardown,
14349 			test_AES_GMAC_authentication_test_case_2),
14350 		TEST_CASE_ST(ut_setup, ut_teardown,
14351 			test_AES_GMAC_authentication_verify_test_case_2),
14352 		TEST_CASE_ST(ut_setup, ut_teardown,
14353 			test_AES_GMAC_authentication_test_case_3),
14354 		TEST_CASE_ST(ut_setup, ut_teardown,
14355 			test_AES_GMAC_authentication_verify_test_case_3),
14356 
14357 		/** SNOW 3G encrypt only (UEA2) */
14358 		TEST_CASE_ST(ut_setup, ut_teardown,
14359 			test_snow3g_encryption_test_case_1),
14360 		TEST_CASE_ST(ut_setup, ut_teardown,
14361 			test_snow3g_encryption_test_case_2),
14362 		TEST_CASE_ST(ut_setup, ut_teardown,
14363 			test_snow3g_encryption_test_case_3),
14364 		TEST_CASE_ST(ut_setup, ut_teardown,
14365 			test_snow3g_encryption_test_case_4),
14366 		TEST_CASE_ST(ut_setup, ut_teardown,
14367 			test_snow3g_encryption_test_case_5),
14368 
14369 		TEST_CASE_ST(ut_setup, ut_teardown,
14370 			test_snow3g_encryption_test_case_1_oop),
14371 		TEST_CASE_ST(ut_setup, ut_teardown,
14372 			test_snow3g_decryption_test_case_1_oop),
14373 		TEST_CASE_ST(ut_setup, ut_teardown,
14374 			test_snow3g_encryption_test_case_1_oop_sgl),
14375 
14376 		/** SNOW 3G decrypt only (UEA2) */
14377 		TEST_CASE_ST(ut_setup, ut_teardown,
14378 			test_snow3g_decryption_test_case_1),
14379 		TEST_CASE_ST(ut_setup, ut_teardown,
14380 			test_snow3g_decryption_test_case_2),
14381 		TEST_CASE_ST(ut_setup, ut_teardown,
14382 			test_snow3g_decryption_test_case_3),
14383 		TEST_CASE_ST(ut_setup, ut_teardown,
14384 			test_snow3g_decryption_test_case_4),
14385 		TEST_CASE_ST(ut_setup, ut_teardown,
14386 			test_snow3g_decryption_test_case_5),
14387 
14388 		TEST_CASE_ST(ut_setup, ut_teardown,
14389 			test_snow3g_hash_generate_test_case_1),
14390 		TEST_CASE_ST(ut_setup, ut_teardown,
14391 			test_snow3g_hash_generate_test_case_2),
14392 		TEST_CASE_ST(ut_setup, ut_teardown,
14393 			test_snow3g_hash_generate_test_case_3),
14394 		TEST_CASE_ST(ut_setup, ut_teardown,
14395 			test_snow3g_hash_verify_test_case_1),
14396 		TEST_CASE_ST(ut_setup, ut_teardown,
14397 			test_snow3g_hash_verify_test_case_2),
14398 		TEST_CASE_ST(ut_setup, ut_teardown,
14399 			test_snow3g_hash_verify_test_case_3),
14400 
14401 		/** ZUC encrypt only (EEA3) */
14402 		TEST_CASE_ST(ut_setup, ut_teardown,
14403 			test_zuc_encryption_test_case_1),
14404 		TEST_CASE_ST(ut_setup, ut_teardown,
14405 			test_zuc_encryption_test_case_2),
14406 		TEST_CASE_ST(ut_setup, ut_teardown,
14407 			test_zuc_encryption_test_case_3),
14408 		TEST_CASE_ST(ut_setup, ut_teardown,
14409 			test_zuc_encryption_test_case_4),
14410 		TEST_CASE_ST(ut_setup, ut_teardown,
14411 			test_zuc_encryption_test_case_5),
14412 		TEST_CASE_ST(ut_setup, ut_teardown,
14413 			test_zuc_hash_generate_test_case_1),
14414 		TEST_CASE_ST(ut_setup, ut_teardown,
14415 			test_zuc_hash_generate_test_case_2),
14416 		TEST_CASE_ST(ut_setup, ut_teardown,
14417 			test_zuc_hash_generate_test_case_3),
14418 		TEST_CASE_ST(ut_setup, ut_teardown,
14419 			test_zuc_hash_generate_test_case_4),
14420 		TEST_CASE_ST(ut_setup, ut_teardown,
14421 			test_zuc_hash_generate_test_case_5),
14422 		TEST_CASE_ST(ut_setup, ut_teardown,
14423 			test_zuc_encryption_test_case_6_sgl),
14424 
14425 		/** KASUMI encrypt only (UEA1) */
14426 		TEST_CASE_ST(ut_setup, ut_teardown,
14427 			test_kasumi_encryption_test_case_1),
14428 		TEST_CASE_ST(ut_setup, ut_teardown,
14429 			test_kasumi_encryption_test_case_2),
14430 		TEST_CASE_ST(ut_setup, ut_teardown,
14431 			test_kasumi_encryption_test_case_3),
14432 		TEST_CASE_ST(ut_setup, ut_teardown,
14433 			test_kasumi_encryption_test_case_4),
14434 		TEST_CASE_ST(ut_setup, ut_teardown,
14435 			test_kasumi_encryption_test_case_5),
14436 		TEST_CASE_ST(ut_setup, ut_teardown,
14437 			test_kasumi_encryption_test_case_1_sgl),
14438 		TEST_CASE_ST(ut_setup, ut_teardown,
14439 			test_kasumi_encryption_test_case_1_oop_sgl),
14440 		/** KASUMI decrypt only (UEA1) */
14441 		TEST_CASE_ST(ut_setup, ut_teardown,
14442 			test_kasumi_decryption_test_case_1),
14443 		TEST_CASE_ST(ut_setup, ut_teardown,
14444 			test_kasumi_decryption_test_case_2),
14445 		TEST_CASE_ST(ut_setup, ut_teardown,
14446 			test_kasumi_decryption_test_case_3),
14447 		TEST_CASE_ST(ut_setup, ut_teardown,
14448 			test_kasumi_decryption_test_case_4),
14449 		TEST_CASE_ST(ut_setup, ut_teardown,
14450 			test_kasumi_decryption_test_case_5),
14451 
14452 		TEST_CASE_ST(ut_setup, ut_teardown,
14453 			test_kasumi_encryption_test_case_1_oop),
14454 		TEST_CASE_ST(ut_setup, ut_teardown,
14455 			test_kasumi_decryption_test_case_1_oop),
14456 
14457 		/** KASUMI hash only (UIA1) */
14458 		TEST_CASE_ST(ut_setup, ut_teardown,
14459 			test_kasumi_hash_generate_test_case_1),
14460 		TEST_CASE_ST(ut_setup, ut_teardown,
14461 			test_kasumi_hash_generate_test_case_2),
14462 		TEST_CASE_ST(ut_setup, ut_teardown,
14463 			test_kasumi_hash_generate_test_case_3),
14464 		TEST_CASE_ST(ut_setup, ut_teardown,
14465 			test_kasumi_hash_generate_test_case_4),
14466 		TEST_CASE_ST(ut_setup, ut_teardown,
14467 			test_kasumi_hash_generate_test_case_5),
14468 		TEST_CASE_ST(ut_setup, ut_teardown,
14469 			test_kasumi_hash_generate_test_case_6),
14470 		TEST_CASE_ST(ut_setup, ut_teardown,
14471 			test_kasumi_hash_verify_test_case_1),
14472 		TEST_CASE_ST(ut_setup, ut_teardown,
14473 			test_kasumi_hash_verify_test_case_2),
14474 		TEST_CASE_ST(ut_setup, ut_teardown,
14475 			test_kasumi_hash_verify_test_case_3),
14476 		TEST_CASE_ST(ut_setup, ut_teardown,
14477 			test_kasumi_hash_verify_test_case_4),
14478 		TEST_CASE_ST(ut_setup, ut_teardown,
14479 			test_kasumi_hash_verify_test_case_5),
14480 
14481 		/** NULL tests */
14482 		TEST_CASE_ST(ut_setup, ut_teardown,
14483 			test_null_cipher_only_operation),
14484 		TEST_CASE_ST(ut_setup, ut_teardown,
14485 			test_null_auth_only_operation),
14486 		TEST_CASE_ST(ut_setup, ut_teardown,
14487 			test_null_cipher_auth_operation),
14488 		TEST_CASE_ST(ut_setup, ut_teardown,
14489 			test_null_auth_cipher_operation),
14490 
14491 		/** Negative tests */
14492 		TEST_CASE_ST(ut_setup, ut_teardown,
14493 			authentication_verify_HMAC_SHA1_fail_data_corrupt),
14494 		TEST_CASE_ST(ut_setup, ut_teardown,
14495 			authentication_verify_HMAC_SHA1_fail_tag_corrupt),
14496 		TEST_CASE_ST(ut_setup, ut_teardown,
14497 			authentication_verify_AES128_GMAC_fail_data_corrupt),
14498 		TEST_CASE_ST(ut_setup, ut_teardown,
14499 			authentication_verify_AES128_GMAC_fail_tag_corrupt),
14500 		TEST_CASE_ST(ut_setup, ut_teardown,
14501 			auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
14502 		TEST_CASE_ST(ut_setup, ut_teardown,
14503 			auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
14504 		TEST_CASES_END() /**< NULL terminate unit test array */
14505 	}
14506 };
14507 
14508 static int
14509 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
14510 {
14511 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14512 			RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
14513 
14514 	if (gbl_driver_id == -1) {
14515 		RTE_LOG(ERR, USER1, "QAT PMD must be loaded. Check that both "
14516 		"CONFIG_RTE_LIBRTE_PMD_QAT and CONFIG_RTE_LIBRTE_PMD_QAT_SYM "
14517 		"are enabled in config file to run this testsuite.\n");
14518 		return TEST_SKIPPED;
14519 	}
14520 
14521 	return unit_test_suite_runner(&cryptodev_qat_testsuite);
14522 }
14523 
14524 static int
14525 test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/)
14526 {
14527 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14528 			RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD));
14529 
14530 	if (gbl_driver_id == -1) {
14531 		RTE_LOG(ERR, USER1, "VIRTIO PMD must be loaded. Check if "
14532 				"CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO is enabled "
14533 				"in config file to run this testsuite.\n");
14534 		return TEST_FAILED;
14535 	}
14536 
14537 	return unit_test_suite_runner(&cryptodev_virtio_testsuite);
14538 }
14539 
14540 static int
14541 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
14542 {
14543 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14544 			RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
14545 
14546 	if (gbl_driver_id == -1) {
14547 		RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded. Check if "
14548 				"CONFIG_RTE_LIBRTE_PMD_AESNI_MB is enabled "
14549 				"in config file to run this testsuite.\n");
14550 		return TEST_SKIPPED;
14551 	}
14552 
14553 	return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
14554 }
14555 
14556 static int
14557 test_cryptodev_openssl(void)
14558 {
14559 	gbl_driver_id = rte_cryptodev_driver_id_get(
14560 			RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
14561 
14562 	if (gbl_driver_id == -1) {
14563 		RTE_LOG(ERR, USER1, "OPENSSL PMD must be loaded. Check if "
14564 				"CONFIG_RTE_LIBRTE_PMD_OPENSSL is enabled "
14565 				"in config file to run this testsuite.\n");
14566 		return TEST_SKIPPED;
14567 	}
14568 
14569 	return unit_test_suite_runner(&cryptodev_openssl_testsuite);
14570 }
14571 
14572 static int
14573 test_cryptodev_aesni_gcm(void)
14574 {
14575 	gbl_driver_id = rte_cryptodev_driver_id_get(
14576 			RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
14577 
14578 	if (gbl_driver_id == -1) {
14579 		RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded. Check if "
14580 				"CONFIG_RTE_LIBRTE_PMD_AESNI_GCM is enabled "
14581 				"in config file to run this testsuite.\n");
14582 		return TEST_SKIPPED;
14583 	}
14584 
14585 	return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
14586 }
14587 
14588 static int
14589 test_cryptodev_null(void)
14590 {
14591 	gbl_driver_id = rte_cryptodev_driver_id_get(
14592 			RTE_STR(CRYPTODEV_NAME_NULL_PMD));
14593 
14594 	if (gbl_driver_id == -1) {
14595 		RTE_LOG(ERR, USER1, "NULL PMD must be loaded. Check if "
14596 				"CONFIG_RTE_LIBRTE_PMD_NULL is enabled "
14597 				"in config file to run this testsuite.\n");
14598 		return TEST_SKIPPED;
14599 	}
14600 
14601 	return unit_test_suite_runner(&cryptodev_null_testsuite);
14602 }
14603 
14604 static int
14605 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
14606 {
14607 	gbl_driver_id = rte_cryptodev_driver_id_get(
14608 			RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
14609 
14610 	if (gbl_driver_id == -1) {
14611 		RTE_LOG(ERR, USER1, "SNOW3G PMD must be loaded. Check if "
14612 				"CONFIG_RTE_LIBRTE_PMD_SNOW3G is enabled "
14613 				"in config file to run this testsuite.\n");
14614 		return TEST_SKIPPED;
14615 	}
14616 
14617 	return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
14618 }
14619 
14620 static int
14621 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
14622 {
14623 	gbl_driver_id = rte_cryptodev_driver_id_get(
14624 			RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
14625 
14626 	if (gbl_driver_id == -1) {
14627 		RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
14628 				"CONFIG_RTE_LIBRTE_PMD_KASUMI is enabled "
14629 				"in config file to run this testsuite.\n");
14630 		return TEST_SKIPPED;
14631 	}
14632 
14633 	return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
14634 }
14635 
14636 static int
14637 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
14638 {
14639 	gbl_driver_id = rte_cryptodev_driver_id_get(
14640 			RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
14641 
14642 	if (gbl_driver_id == -1) {
14643 		RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
14644 				"CONFIG_RTE_LIBRTE_PMD_ZUC is enabled "
14645 				"in config file to run this testsuite.\n");
14646 		return TEST_SKIPPED;
14647 	}
14648 
14649 	return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
14650 }
14651 
14652 static int
14653 test_cryptodev_armv8(void)
14654 {
14655 	gbl_driver_id = rte_cryptodev_driver_id_get(
14656 			RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
14657 
14658 	if (gbl_driver_id == -1) {
14659 		RTE_LOG(ERR, USER1, "ARMV8 PMD must be loaded. Check if "
14660 				"CONFIG_RTE_LIBRTE_PMD_ARMV8 is enabled "
14661 				"in config file to run this testsuite.\n");
14662 		return TEST_SKIPPED;
14663 	}
14664 
14665 	return unit_test_suite_runner(&cryptodev_armv8_testsuite);
14666 }
14667 
14668 static int
14669 test_cryptodev_mrvl(void)
14670 {
14671 	gbl_driver_id = rte_cryptodev_driver_id_get(
14672 			RTE_STR(CRYPTODEV_NAME_MVSAM_PMD));
14673 
14674 	if (gbl_driver_id == -1) {
14675 		RTE_LOG(ERR, USER1, "MVSAM PMD must be loaded. Check if "
14676 				"CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO is enabled "
14677 				"in config file to run this testsuite.\n");
14678 		return TEST_SKIPPED;
14679 	}
14680 
14681 	return unit_test_suite_runner(&cryptodev_mrvl_testsuite);
14682 }
14683 
14684 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
14685 
14686 static int
14687 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
14688 {
14689 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14690 			RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
14691 
14692 	if (gbl_driver_id == -1) {
14693 		RTE_LOG(ERR, USER1, "SCHEDULER PMD must be loaded. Check if "
14694 				"CONFIG_RTE_LIBRTE_PMD_SCHEDULER is enabled "
14695 				"in config file to run this testsuite.\n");
14696 		return TEST_SKIPPED;
14697 	}
14698 
14699 	if (rte_cryptodev_driver_id_get(
14700 				RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) == -1) {
14701 		RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
14702 			" enabled in config file to run this testsuite.\n");
14703 		return TEST_SKIPPED;
14704 }
14705 	return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
14706 }
14707 
14708 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
14709 
14710 #endif
14711 
14712 static int
14713 test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
14714 {
14715 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14716 			RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD));
14717 
14718 	if (gbl_driver_id == -1) {
14719 		RTE_LOG(ERR, USER1, "DPAA2 SEC PMD must be loaded. Check if "
14720 				"CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC is enabled "
14721 				"in config file to run this testsuite.\n");
14722 		return TEST_SKIPPED;
14723 	}
14724 
14725 	return unit_test_suite_runner(&cryptodev_dpaa2_sec_testsuite);
14726 }
14727 
14728 static int
14729 test_cryptodev_dpaa_sec(void /*argv __rte_unused, int argc __rte_unused*/)
14730 {
14731 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14732 			RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD));
14733 
14734 	if (gbl_driver_id == -1) {
14735 		RTE_LOG(ERR, USER1, "DPAA SEC PMD must be loaded. Check if "
14736 				"CONFIG_RTE_LIBRTE_PMD_DPAA_SEC is enabled "
14737 				"in config file to run this testsuite.\n");
14738 		return TEST_SKIPPED;
14739 	}
14740 
14741 	return unit_test_suite_runner(&cryptodev_dpaa_sec_testsuite);
14742 }
14743 
14744 static int
14745 test_cryptodev_ccp(void)
14746 {
14747 	gbl_driver_id = rte_cryptodev_driver_id_get(
14748 			RTE_STR(CRYPTODEV_NAME_CCP_PMD));
14749 
14750 	if (gbl_driver_id == -1) {
14751 		RTE_LOG(ERR, USER1, "CCP PMD must be loaded. Check if "
14752 				"CONFIG_RTE_LIBRTE_PMD_CCP is enabled "
14753 				"in config file to run this testsuite.\n");
14754 		return TEST_FAILED;
14755 	}
14756 
14757 	return unit_test_suite_runner(&cryptodev_ccp_testsuite);
14758 }
14759 
14760 static int
14761 test_cryptodev_octeontx(void)
14762 {
14763 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14764 			RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD));
14765 	if (gbl_driver_id == -1) {
14766 		RTE_LOG(ERR, USER1, "OCTEONTX PMD must be loaded. Check if "
14767 				"CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO is "
14768 				"enabled in config file to run this "
14769 				"testsuite.\n");
14770 		return TEST_FAILED;
14771 	}
14772 	return unit_test_suite_runner(&cryptodev_octeontx_testsuite);
14773 }
14774 
14775 static int
14776 test_cryptodev_octeontx2(void)
14777 {
14778 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14779 			RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD));
14780 	if (gbl_driver_id == -1) {
14781 		RTE_LOG(ERR, USER1, "OCTEON TX2 PMD must be loaded. Check if "
14782 				"CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO is "
14783 				"enabled in config file to run this "
14784 				"testsuite.\n");
14785 		return TEST_FAILED;
14786 	}
14787 	return unit_test_suite_runner(&cryptodev_octeontx2_testsuite);
14788 }
14789 
14790 static int
14791 test_cryptodev_caam_jr(void /*argv __rte_unused, int argc __rte_unused*/)
14792 {
14793 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14794 			RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD));
14795 
14796 	if (gbl_driver_id == -1) {
14797 		RTE_LOG(ERR, USER1, "CAAM_JR PMD must be loaded. Check if "
14798 				"CONFIG_RTE_LIBRTE_PMD_CAAM_JR is enabled "
14799 				"in config file to run this testsuite.\n");
14800 		return TEST_FAILED;
14801 	}
14802 
14803 	return unit_test_suite_runner(&cryptodev_caam_jr_testsuite);
14804 }
14805 
14806 static int
14807 test_cryptodev_nitrox(void)
14808 {
14809 	gbl_driver_id =	rte_cryptodev_driver_id_get(
14810 			RTE_STR(CRYPTODEV_NAME_NITROX_PMD));
14811 
14812 	if (gbl_driver_id == -1) {
14813 		RTE_LOG(ERR, USER1, "NITROX PMD must be loaded. Check if "
14814 				"CONFIG_RTE_LIBRTE_PMD_NITROX is enabled "
14815 				"in config file to run this testsuite.\n");
14816 		return TEST_FAILED;
14817 	}
14818 
14819 	return unit_test_suite_runner(&cryptodev_nitrox_testsuite);
14820 }
14821 
14822 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
14823 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
14824 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
14825 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
14826 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
14827 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
14828 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
14829 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
14830 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);
14831 REGISTER_TEST_COMMAND(cryptodev_sw_mvsam_autotest, test_cryptodev_mrvl);
14832 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec);
14833 REGISTER_TEST_COMMAND(cryptodev_dpaa_sec_autotest, test_cryptodev_dpaa_sec);
14834 REGISTER_TEST_COMMAND(cryptodev_ccp_autotest, test_cryptodev_ccp);
14835 REGISTER_TEST_COMMAND(cryptodev_virtio_autotest, test_cryptodev_virtio);
14836 REGISTER_TEST_COMMAND(cryptodev_octeontx_autotest, test_cryptodev_octeontx);
14837 REGISTER_TEST_COMMAND(cryptodev_octeontx2_autotest, test_cryptodev_octeontx2);
14838 REGISTER_TEST_COMMAND(cryptodev_caam_jr_autotest, test_cryptodev_caam_jr);
14839 REGISTER_TEST_COMMAND(cryptodev_nitrox_autotest, test_cryptodev_nitrox);
14840