4 * Copyright(c) 2015-2017 Intel Corporation. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
16 * * Neither the name of Intel Corporation nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #include <rte_common.h>
34 #include <rte_hexdump.h>
36 #include <rte_malloc.h>
37 #include <rte_memcpy.h>
38 #include <rte_pause.h>
40 #include <rte_crypto.h>
41 #include <rte_cryptodev.h>
42 #include <rte_cryptodev_pmd.h>
44 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
45 #include <rte_cryptodev_scheduler.h>
46 #include <rte_cryptodev_scheduler_operations.h>
50 #include "test_cryptodev.h"
52 #include "test_cryptodev_blockcipher.h"
53 #include "test_cryptodev_aes_test_vectors.h"
54 #include "test_cryptodev_des_test_vectors.h"
55 #include "test_cryptodev_hash_test_vectors.h"
56 #include "test_cryptodev_kasumi_test_vectors.h"
57 #include "test_cryptodev_kasumi_hash_test_vectors.h"
58 #include "test_cryptodev_snow3g_test_vectors.h"
59 #include "test_cryptodev_snow3g_hash_test_vectors.h"
60 #include "test_cryptodev_zuc_test_vectors.h"
61 #include "test_cryptodev_gcm_test_vectors.h"
62 #include "test_cryptodev_hmac_test_vectors.h"
64 static int gbl_driver_id;
66 struct crypto_testsuite_params {
67 struct rte_mempool *mbuf_pool;
68 struct rte_mempool *large_mbuf_pool;
69 struct rte_mempool *op_mpool;
70 struct rte_mempool *session_mpool;
71 struct rte_cryptodev_config conf;
72 struct rte_cryptodev_qp_conf qp_conf;
74 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
75 uint8_t valid_dev_count;
78 struct crypto_unittest_params {
79 struct rte_crypto_sym_xform cipher_xform;
80 struct rte_crypto_sym_xform auth_xform;
81 struct rte_crypto_sym_xform aead_xform;
83 struct rte_cryptodev_sym_session *sess;
85 struct rte_crypto_op *op;
87 struct rte_mbuf *obuf, *ibuf;
92 #define ALIGN_POW2_ROUNDUP(num, align) \
93 (((num) + (align) - 1) & ~((align) - 1))
96 * Forward declarations.
99 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
100 struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
104 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
105 struct crypto_unittest_params *ut_params,
106 struct crypto_testsuite_params *ts_param,
107 const uint8_t *cipher,
108 const uint8_t *digest,
111 static struct rte_mbuf *
112 setup_test_string(struct rte_mempool *mpool,
113 const char *string, size_t len, uint8_t blocksize)
115 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
116 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
118 memset(m->buf_addr, 0, m->buf_len);
120 char *dst = rte_pktmbuf_append(m, t_len);
127 rte_memcpy(dst, string, t_len);
129 memset(dst, 0, t_len);
135 /* Get number of bytes in X bits (rounding up) */
137 ceil_byte_length(uint32_t num_bits)
140 return ((num_bits >> 3) + 1);
142 return (num_bits >> 3);
145 static struct rte_crypto_op *
146 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
148 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
149 printf("Error sending packet for encryption");
155 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
161 static struct crypto_testsuite_params testsuite_params = { NULL };
162 static struct crypto_unittest_params unittest_params;
165 testsuite_setup(void)
167 struct crypto_testsuite_params *ts_params = &testsuite_params;
168 struct rte_cryptodev_info info;
169 uint32_t i = 0, nb_devs, dev_id;
173 memset(ts_params, 0, sizeof(*ts_params));
175 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
176 if (ts_params->mbuf_pool == NULL) {
177 /* Not already created so create */
178 ts_params->mbuf_pool = rte_pktmbuf_pool_create(
180 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
182 if (ts_params->mbuf_pool == NULL) {
183 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
188 ts_params->large_mbuf_pool = rte_mempool_lookup(
189 "CRYPTO_LARGE_MBUFPOOL");
190 if (ts_params->large_mbuf_pool == NULL) {
191 /* Not already created so create */
192 ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
193 "CRYPTO_LARGE_MBUFPOOL",
196 if (ts_params->large_mbuf_pool == NULL) {
198 "Can't create CRYPTO_LARGE_MBUFPOOL\n");
203 ts_params->op_mpool = rte_crypto_op_pool_create(
204 "MBUF_CRYPTO_SYM_OP_POOL",
205 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
206 NUM_MBUFS, MBUF_CACHE_SIZE,
208 sizeof(struct rte_crypto_sym_xform) +
211 if (ts_params->op_mpool == NULL) {
212 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
216 /* Create an AESNI MB device if required */
217 if (gbl_driver_id == rte_cryptodev_driver_id_get(
218 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) {
219 nb_devs = rte_cryptodev_device_count_by_driver(
220 rte_cryptodev_driver_id_get(
221 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
224 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
226 TEST_ASSERT(ret == 0,
227 "Failed to create instance of"
229 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
233 /* Create an AESNI GCM device if required */
234 if (gbl_driver_id == rte_cryptodev_driver_id_get(
235 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))) {
236 nb_devs = rte_cryptodev_device_count_by_driver(
237 rte_cryptodev_driver_id_get(
238 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)));
240 TEST_ASSERT_SUCCESS(rte_vdev_init(
241 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
242 "Failed to create instance of"
244 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
248 /* Create a SNOW 3G device if required */
249 if (gbl_driver_id == rte_cryptodev_driver_id_get(
250 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))) {
251 nb_devs = rte_cryptodev_device_count_by_driver(
252 rte_cryptodev_driver_id_get(
253 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)));
255 TEST_ASSERT_SUCCESS(rte_vdev_init(
256 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
257 "Failed to create instance of"
259 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
263 /* Create a KASUMI device if required */
264 if (gbl_driver_id == rte_cryptodev_driver_id_get(
265 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))) {
266 nb_devs = rte_cryptodev_device_count_by_driver(
267 rte_cryptodev_driver_id_get(
268 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)));
270 TEST_ASSERT_SUCCESS(rte_vdev_init(
271 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
272 "Failed to create instance of"
274 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
278 /* Create a ZUC device if required */
279 if (gbl_driver_id == rte_cryptodev_driver_id_get(
280 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) {
281 nb_devs = rte_cryptodev_device_count_by_driver(
282 rte_cryptodev_driver_id_get(
283 RTE_STR(CRYPTODEV_NAME_ZUC_PMD)));
285 TEST_ASSERT_SUCCESS(rte_vdev_init(
286 RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
287 "Failed to create instance of"
289 RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
293 /* Create a NULL device if required */
294 if (gbl_driver_id == rte_cryptodev_driver_id_get(
295 RTE_STR(CRYPTODEV_NAME_NULL_PMD))) {
296 nb_devs = rte_cryptodev_device_count_by_driver(
297 rte_cryptodev_driver_id_get(
298 RTE_STR(CRYPTODEV_NAME_NULL_PMD)));
301 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
303 TEST_ASSERT(ret == 0,
304 "Failed to create instance of"
306 RTE_STR(CRYPTODEV_NAME_NULL_PMD));
310 /* Create an OPENSSL device if required */
311 if (gbl_driver_id == rte_cryptodev_driver_id_get(
312 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) {
313 nb_devs = rte_cryptodev_device_count_by_driver(
314 rte_cryptodev_driver_id_get(
315 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)));
318 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
321 TEST_ASSERT(ret == 0, "Failed to create "
322 "instance of pmd : %s",
323 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
327 /* Create a ARMv8 device if required */
328 if (gbl_driver_id == rte_cryptodev_driver_id_get(
329 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))) {
330 nb_devs = rte_cryptodev_device_count_by_driver(
331 rte_cryptodev_driver_id_get(
332 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)));
335 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
338 TEST_ASSERT(ret == 0, "Failed to create "
339 "instance of pmd : %s",
340 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
344 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
345 if (gbl_driver_id == rte_cryptodev_driver_id_get(
346 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) {
348 nb_devs = rte_cryptodev_device_count_by_driver(
349 rte_cryptodev_driver_id_get(
350 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)));
353 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD),
356 TEST_ASSERT(ret == 0,
357 "Failed to create instance %u of"
359 i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
362 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
364 nb_devs = rte_cryptodev_count();
366 RTE_LOG(ERR, USER1, "No crypto devices found?\n");
370 /* Create list of valid crypto devs */
371 for (i = 0; i < nb_devs; i++) {
372 rte_cryptodev_info_get(i, &info);
373 if (info.driver_id == gbl_driver_id)
374 ts_params->valid_devs[ts_params->valid_dev_count++] = i;
377 if (ts_params->valid_dev_count < 1)
380 /* Set up all the qps on the first of the valid devices found */
382 dev_id = ts_params->valid_devs[0];
384 rte_cryptodev_info_get(dev_id, &info);
386 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
387 ts_params->conf.socket_id = SOCKET_ID_ANY;
389 unsigned int session_size = rte_cryptodev_get_private_session_size(dev_id);
392 * Create mempool with maximum number of sessions * 2,
393 * to include the session headers
395 ts_params->session_mpool = rte_mempool_create(
397 info.sym.max_nb_sessions * 2,
399 0, 0, NULL, NULL, NULL,
403 TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
404 "session mempool allocation failed");
406 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
408 "Failed to configure cryptodev %u with %u qps",
409 dev_id, ts_params->conf.nb_queue_pairs);
411 ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
413 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
414 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
415 dev_id, qp_id, &ts_params->qp_conf,
416 rte_cryptodev_socket_id(dev_id),
417 ts_params->session_mpool),
418 "Failed to setup queue pair %u on cryptodev %u",
426 testsuite_teardown(void)
428 struct crypto_testsuite_params *ts_params = &testsuite_params;
430 if (ts_params->mbuf_pool != NULL) {
431 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
432 rte_mempool_avail_count(ts_params->mbuf_pool));
435 if (ts_params->op_mpool != NULL) {
436 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
437 rte_mempool_avail_count(ts_params->op_mpool));
440 /* Free session mempools */
441 if (ts_params->session_mpool != NULL) {
442 rte_mempool_free(ts_params->session_mpool);
443 ts_params->session_mpool = NULL;
450 struct crypto_testsuite_params *ts_params = &testsuite_params;
451 struct crypto_unittest_params *ut_params = &unittest_params;
455 /* Clear unit test parameters before running test */
456 memset(ut_params, 0, sizeof(*ut_params));
458 /* Reconfigure device to default parameters */
459 ts_params->conf.socket_id = SOCKET_ID_ANY;
461 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
463 "Failed to configure cryptodev %u",
464 ts_params->valid_devs[0]);
466 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
467 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
468 ts_params->valid_devs[0], qp_id,
470 rte_cryptodev_socket_id(ts_params->valid_devs[0]),
471 ts_params->session_mpool),
472 "Failed to setup queue pair %u on cryptodev %u",
473 qp_id, ts_params->valid_devs[0]);
477 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
479 /* Start the device */
480 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
481 "Failed to start cryptodev %u",
482 ts_params->valid_devs[0]);
490 struct crypto_testsuite_params *ts_params = &testsuite_params;
491 struct crypto_unittest_params *ut_params = &unittest_params;
492 struct rte_cryptodev_stats stats;
494 /* free crypto session structure */
495 if (ut_params->sess) {
496 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
498 rte_cryptodev_sym_session_free(ut_params->sess);
499 ut_params->sess = NULL;
502 /* free crypto operation structure */
504 rte_crypto_op_free(ut_params->op);
507 * free mbuf - both obuf and ibuf are usually the same,
508 * so check if they point at the same address is necessary,
509 * to avoid freeing the mbuf twice.
511 if (ut_params->obuf) {
512 rte_pktmbuf_free(ut_params->obuf);
513 if (ut_params->ibuf == ut_params->obuf)
517 if (ut_params->ibuf) {
518 rte_pktmbuf_free(ut_params->ibuf);
522 if (ts_params->mbuf_pool != NULL)
523 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
524 rte_mempool_avail_count(ts_params->mbuf_pool));
526 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
528 /* Stop the device */
529 rte_cryptodev_stop(ts_params->valid_devs[0]);
533 test_device_configure_invalid_dev_id(void)
535 struct crypto_testsuite_params *ts_params = &testsuite_params;
536 uint16_t dev_id, num_devs = 0;
538 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
539 "Need at least %d devices for test", 1);
541 /* valid dev_id values */
542 dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
544 /* Stop the device in case it's started so it can be configured */
545 rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
547 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
548 "Failed test for rte_cryptodev_configure: "
549 "invalid dev_num %u", dev_id);
551 /* invalid dev_id values */
554 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
555 "Failed test for rte_cryptodev_configure: "
556 "invalid dev_num %u", dev_id);
560 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
561 "Failed test for rte_cryptodev_configure:"
562 "invalid dev_num %u", dev_id);
568 test_device_configure_invalid_queue_pair_ids(void)
570 struct crypto_testsuite_params *ts_params = &testsuite_params;
571 uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
573 /* Stop the device in case it's started so it can be configured */
574 rte_cryptodev_stop(ts_params->valid_devs[0]);
576 /* valid - one queue pairs */
577 ts_params->conf.nb_queue_pairs = 1;
579 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
581 "Failed to configure cryptodev: dev_id %u, qp_id %u",
582 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
585 /* valid - max value queue pairs */
586 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
588 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
590 "Failed to configure cryptodev: dev_id %u, qp_id %u",
591 ts_params->valid_devs[0],
592 ts_params->conf.nb_queue_pairs);
595 /* invalid - zero queue pairs */
596 ts_params->conf.nb_queue_pairs = 0;
598 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
600 "Failed test for rte_cryptodev_configure, dev_id %u,"
602 ts_params->valid_devs[0],
603 ts_params->conf.nb_queue_pairs);
606 /* invalid - max value supported by field queue pairs */
607 ts_params->conf.nb_queue_pairs = UINT16_MAX;
609 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
611 "Failed test for rte_cryptodev_configure, dev_id %u,"
613 ts_params->valid_devs[0],
614 ts_params->conf.nb_queue_pairs);
617 /* invalid - max value + 1 queue pairs */
618 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
620 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
622 "Failed test for rte_cryptodev_configure, dev_id %u,"
624 ts_params->valid_devs[0],
625 ts_params->conf.nb_queue_pairs);
627 /* revert to original testsuite value */
628 ts_params->conf.nb_queue_pairs = orig_nb_qps;
634 test_queue_pair_descriptor_setup(void)
636 struct crypto_testsuite_params *ts_params = &testsuite_params;
637 struct rte_cryptodev_info dev_info;
638 struct rte_cryptodev_qp_conf qp_conf = {
639 .nb_descriptors = MAX_NUM_OPS_INFLIGHT
644 /* Stop the device in case it's started so it can be configured */
645 rte_cryptodev_stop(ts_params->valid_devs[0]);
648 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
650 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
652 "Failed to configure cryptodev %u",
653 ts_params->valid_devs[0]);
656 * Test various ring sizes on this device. memzones can't be
657 * freed so are re-used if ring is released and re-created.
659 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
661 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
662 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
663 ts_params->valid_devs[0], qp_id, &qp_conf,
664 rte_cryptodev_socket_id(
665 ts_params->valid_devs[0]),
666 ts_params->session_mpool),
668 "rte_cryptodev_queue_pair_setup: num_inflights "
669 "%u on qp %u on cryptodev %u",
670 qp_conf.nb_descriptors, qp_id,
671 ts_params->valid_devs[0]);
674 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
676 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
677 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
678 ts_params->valid_devs[0], qp_id, &qp_conf,
679 rte_cryptodev_socket_id(
680 ts_params->valid_devs[0]),
681 ts_params->session_mpool),
683 " rte_cryptodev_queue_pair_setup: num_inflights"
684 " %u on qp %u on cryptodev %u",
685 qp_conf.nb_descriptors, qp_id,
686 ts_params->valid_devs[0]);
689 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
691 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
692 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
693 ts_params->valid_devs[0], qp_id, &qp_conf,
694 rte_cryptodev_socket_id(
695 ts_params->valid_devs[0]),
696 ts_params->session_mpool),
698 "rte_cryptodev_queue_pair_setup: num_inflights"
699 " %u on qp %u on cryptodev %u",
700 qp_conf.nb_descriptors, qp_id,
701 ts_params->valid_devs[0]);
704 /* invalid number of descriptors - max supported + 2 */
705 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
707 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
708 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
709 ts_params->valid_devs[0], qp_id, &qp_conf,
710 rte_cryptodev_socket_id(
711 ts_params->valid_devs[0]),
712 ts_params->session_mpool),
713 "Unexpectedly passed test for "
714 "rte_cryptodev_queue_pair_setup:"
715 "num_inflights %u on qp %u on cryptodev %u",
716 qp_conf.nb_descriptors, qp_id,
717 ts_params->valid_devs[0]);
720 /* invalid number of descriptors - max value of parameter */
721 qp_conf.nb_descriptors = UINT32_MAX-1;
723 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
724 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
725 ts_params->valid_devs[0], qp_id, &qp_conf,
726 rte_cryptodev_socket_id(
727 ts_params->valid_devs[0]),
728 ts_params->session_mpool),
729 "Unexpectedly passed test for "
730 "rte_cryptodev_queue_pair_setup:"
731 "num_inflights %u on qp %u on cryptodev %u",
732 qp_conf.nb_descriptors, qp_id,
733 ts_params->valid_devs[0]);
736 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
738 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
739 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
740 ts_params->valid_devs[0], qp_id, &qp_conf,
741 rte_cryptodev_socket_id(
742 ts_params->valid_devs[0]),
743 ts_params->session_mpool),
745 " rte_cryptodev_queue_pair_setup:"
746 "num_inflights %u on qp %u on cryptodev %u",
747 qp_conf.nb_descriptors, qp_id,
748 ts_params->valid_devs[0]);
751 /* invalid number of descriptors - max supported + 1 */
752 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
754 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
755 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
756 ts_params->valid_devs[0], qp_id, &qp_conf,
757 rte_cryptodev_socket_id(
758 ts_params->valid_devs[0]),
759 ts_params->session_mpool),
760 "Unexpectedly passed test for "
761 "rte_cryptodev_queue_pair_setup:"
762 "num_inflights %u on qp %u on cryptodev %u",
763 qp_conf.nb_descriptors, qp_id,
764 ts_params->valid_devs[0]);
767 /* test invalid queue pair id */
768 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
770 qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; /*invalid */
772 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
773 ts_params->valid_devs[0],
775 rte_cryptodev_socket_id(ts_params->valid_devs[0]),
776 ts_params->session_mpool),
777 "Failed test for rte_cryptodev_queue_pair_setup:"
778 "invalid qp %u on cryptodev %u",
779 qp_id, ts_params->valid_devs[0]);
781 qp_id = 0xffff; /*invalid*/
783 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
784 ts_params->valid_devs[0],
786 rte_cryptodev_socket_id(ts_params->valid_devs[0]),
787 ts_params->session_mpool),
788 "Failed test for rte_cryptodev_queue_pair_setup:"
789 "invalid qp %u on cryptodev %u",
790 qp_id, ts_params->valid_devs[0]);
795 /* ***** Plaintext data for tests ***** */
797 const char catch_22_quote_1[] =
798 "There was only one catch and that was Catch-22, which "
799 "specified that a concern for one's safety in the face of "
800 "dangers that were real and immediate was the process of a "
801 "rational mind. Orr was crazy and could be grounded. All he "
802 "had to do was ask; and as soon as he did, he would no longer "
803 "be crazy and would have to fly more missions. Orr would be "
804 "crazy to fly more missions and sane if he didn't, but if he "
805 "was sane he had to fly them. If he flew them he was crazy "
806 "and didn't have to; but if he didn't want to he was sane and "
807 "had to. Yossarian was moved very deeply by the absolute "
808 "simplicity of this clause of Catch-22 and let out a "
809 "respectful whistle. \"That's some catch, that Catch-22\", he "
810 "observed. \"It's the best there is,\" Doc Daneeka agreed.";
812 const char catch_22_quote[] =
813 "What a lousy earth! He wondered how many people were "
814 "destitute that same night even in his own prosperous country, "
815 "how many homes were shanties, how many husbands were drunk "
816 "and wives socked, and how many children were bullied, abused, "
817 "or abandoned. How many families hungered for food they could "
818 "not afford to buy? How many hearts were broken? How many "
819 "suicides would take place that same night, how many people "
820 "would go insane? How many cockroaches and landlords would "
821 "triumph? How many winners were losers, successes failures, "
822 "and rich men poor men? How many wise guys were stupid? How "
823 "many happy endings were unhappy endings? How many honest men "
824 "were liars, brave men cowards, loyal men traitors, how many "
825 "sainted men were corrupt, how many people in positions of "
826 "trust had sold their souls to bodyguards, how many had never "
827 "had souls? How many straight-and-narrow paths were crooked "
828 "paths? How many best families were worst families and how "
829 "many good people were bad people? When you added them all up "
830 "and then subtracted, you might be left with only the children, "
831 "and perhaps with Albert Einstein and an old violinist or "
832 "sculptor somewhere.";
834 #define QUOTE_480_BYTES (480)
835 #define QUOTE_512_BYTES (512)
836 #define QUOTE_768_BYTES (768)
837 #define QUOTE_1024_BYTES (1024)
841 /* ***** SHA1 Hash Tests ***** */
843 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
845 static uint8_t hmac_sha1_key[] = {
846 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
847 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
848 0xDE, 0xF4, 0xDE, 0xAD };
850 /* ***** SHA224 Hash Tests ***** */
852 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
855 /* ***** AES-CBC Cipher Tests ***** */
857 #define CIPHER_KEY_LENGTH_AES_CBC (16)
858 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
860 static uint8_t aes_cbc_key[] = {
861 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
862 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
864 static uint8_t aes_cbc_iv[] = {
865 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
866 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
869 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
871 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
872 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
873 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
874 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
875 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
876 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
877 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
878 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
879 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
880 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
881 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
882 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
883 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
884 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
885 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
886 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
887 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
888 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
889 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
890 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
891 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
892 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
893 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
894 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
895 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
896 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
897 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
898 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
899 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
900 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
901 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
902 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
903 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
904 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
905 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
906 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
907 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
908 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
909 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
910 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
911 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
912 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
913 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
914 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
915 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
916 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
917 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
918 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
919 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
920 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
921 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
922 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
923 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
924 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
925 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
926 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
927 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
928 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
929 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
930 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
931 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
932 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
933 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
934 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
935 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
938 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
939 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
940 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
941 0x18, 0x8c, 0x1d, 0x32
945 /* Multisession Vector context Test */
947 static uint8_t ms_aes_cbc_key0[] = {
948 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
949 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
952 static uint8_t ms_aes_cbc_iv0[] = {
953 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
954 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
957 static const uint8_t ms_aes_cbc_cipher0[] = {
958 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
959 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
960 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
961 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
962 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
963 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
964 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
965 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
966 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
967 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
968 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
969 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
970 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
971 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
972 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
973 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
974 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
975 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
976 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
977 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
978 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
979 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
980 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
981 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
982 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
983 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
984 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
985 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
986 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
987 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
988 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
989 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
990 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
991 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
992 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
993 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
994 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
995 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
996 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
997 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
998 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
999 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
1000 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
1001 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
1002 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
1003 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
1004 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
1005 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
1006 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
1007 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
1008 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
1009 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
1010 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
1011 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
1012 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
1013 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
1014 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
1015 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
1016 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
1017 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
1018 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
1019 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
1020 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
1021 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
1025 static uint8_t ms_hmac_key0[] = {
1026 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1027 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1028 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1029 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1030 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1031 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1032 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1033 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1036 static const uint8_t ms_hmac_digest0[] = {
1037 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1038 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1039 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1040 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1041 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1042 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1043 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1044 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1048 /* Begin session 1 */
1050 static uint8_t ms_aes_cbc_key1[] = {
1051 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1052 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1055 static uint8_t ms_aes_cbc_iv1[] = {
1056 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1057 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1060 static const uint8_t ms_aes_cbc_cipher1[] = {
1061 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1062 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1063 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1064 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1065 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1066 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1067 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1068 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1069 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1070 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1071 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1072 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1073 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1074 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1075 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1076 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1077 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1078 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1079 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1080 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1081 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1082 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1083 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1084 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1085 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1086 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1087 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1088 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1089 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1090 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1091 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1092 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1093 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1094 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1095 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1096 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1097 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1098 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1099 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1100 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1101 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1102 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1103 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1104 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1105 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1106 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1107 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1108 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1109 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1110 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1111 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1112 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1113 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1114 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1115 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1116 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1117 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1118 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1119 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1120 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1121 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1122 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1123 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1124 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1128 static uint8_t ms_hmac_key1[] = {
1129 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1130 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1131 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1132 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1133 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1134 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1135 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1136 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1139 static const uint8_t ms_hmac_digest1[] = {
1140 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1141 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1142 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1143 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1144 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1145 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1146 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1147 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1150 /* Begin Session 2 */
1151 static uint8_t ms_aes_cbc_key2[] = {
1152 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1153 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1156 static uint8_t ms_aes_cbc_iv2[] = {
1157 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1158 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1161 static const uint8_t ms_aes_cbc_cipher2[] = {
1162 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1163 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1164 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1165 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1166 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1167 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1168 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1169 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1170 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1171 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1172 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1173 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1174 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1175 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1176 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1177 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1178 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1179 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1180 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1181 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1182 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1183 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1184 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1185 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1186 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1187 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1188 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1189 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1190 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1191 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1192 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1193 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1194 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1195 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1196 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1197 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1198 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1199 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1200 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1201 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1202 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1203 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1204 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1205 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1206 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1207 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1208 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1209 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1210 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1211 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1212 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1213 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1214 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1215 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1216 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1217 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1218 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1219 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1220 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1221 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1222 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1223 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1224 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1225 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1228 static uint8_t ms_hmac_key2[] = {
1229 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1230 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1231 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1232 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1233 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1234 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1235 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1236 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1239 static const uint8_t ms_hmac_digest2[] = {
1240 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1241 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1242 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1243 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1244 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1245 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1246 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1247 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1254 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1256 struct crypto_testsuite_params *ts_params = &testsuite_params;
1257 struct crypto_unittest_params *ut_params = &unittest_params;
1259 /* Generate test mbuf data and space for digest */
1260 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1261 catch_22_quote, QUOTE_512_BYTES, 0);
1263 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1264 DIGEST_BYTE_LENGTH_SHA1);
1265 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1267 /* Setup Cipher Parameters */
1268 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1269 ut_params->cipher_xform.next = &ut_params->auth_xform;
1271 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1272 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1273 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1274 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1275 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1276 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1278 /* Setup HMAC Parameters */
1279 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1281 ut_params->auth_xform.next = NULL;
1283 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1284 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1285 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1286 ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1287 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1289 ut_params->sess = rte_cryptodev_sym_session_create(
1290 ts_params->session_mpool);
1292 /* Create crypto session*/
1293 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
1294 ut_params->sess, &ut_params->cipher_xform,
1295 ts_params->session_mpool);
1296 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1298 /* Generate crypto op data structure */
1299 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1300 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1301 TEST_ASSERT_NOT_NULL(ut_params->op,
1302 "Failed to allocate symmetric crypto operation struct");
1304 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1306 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1308 /* set crypto operation source mbuf */
1309 sym_op->m_src = ut_params->ibuf;
1311 /* Set crypto operation authentication parameters */
1312 sym_op->auth.digest.data = ut_params->digest;
1313 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1314 ut_params->ibuf, QUOTE_512_BYTES);
1316 sym_op->auth.data.offset = 0;
1317 sym_op->auth.data.length = QUOTE_512_BYTES;
1319 /* Copy IV at the end of the crypto operation */
1320 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1321 aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
1323 /* Set crypto operation cipher parameters */
1324 sym_op->cipher.data.offset = 0;
1325 sym_op->cipher.data.length = QUOTE_512_BYTES;
1327 /* Process crypto operation */
1328 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1329 ut_params->op), "failed to process sym crypto op");
1331 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1332 "crypto op processing failed");
1335 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src,
1338 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1339 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1341 "ciphertext data not as expected");
1343 uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1345 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1346 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1347 gbl_driver_id == rte_cryptodev_driver_id_get(
1348 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) ?
1349 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1350 DIGEST_BYTE_LENGTH_SHA1,
1351 "Generated digest data not as expected");
1353 return TEST_SUCCESS;
1356 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1358 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
1360 static uint8_t hmac_sha512_key[] = {
1361 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1362 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1363 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1364 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1365 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1366 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1367 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1368 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1370 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1371 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1372 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1373 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1374 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1375 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1376 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1377 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1378 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1383 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1384 struct crypto_unittest_params *ut_params,
1385 uint8_t *cipher_key,
1389 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1390 struct crypto_unittest_params *ut_params,
1391 struct crypto_testsuite_params *ts_params,
1392 const uint8_t *cipher,
1393 const uint8_t *digest,
1398 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1399 struct crypto_unittest_params *ut_params,
1400 uint8_t *cipher_key,
1404 /* Setup Cipher Parameters */
1405 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1406 ut_params->cipher_xform.next = NULL;
1408 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1409 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1410 ut_params->cipher_xform.cipher.key.data = cipher_key;
1411 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1412 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1413 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1415 /* Setup HMAC Parameters */
1416 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1417 ut_params->auth_xform.next = &ut_params->cipher_xform;
1419 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1420 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1421 ut_params->auth_xform.auth.key.data = hmac_key;
1422 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1423 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1425 return TEST_SUCCESS;
1430 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1431 struct crypto_unittest_params *ut_params,
1432 struct crypto_testsuite_params *ts_params,
1433 const uint8_t *cipher,
1434 const uint8_t *digest,
1437 /* Generate test mbuf data and digest */
1438 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1441 QUOTE_512_BYTES, 0);
1443 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1444 DIGEST_BYTE_LENGTH_SHA512);
1445 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1447 rte_memcpy(ut_params->digest,
1449 DIGEST_BYTE_LENGTH_SHA512);
1451 /* Generate Crypto op data structure */
1452 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1453 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1454 TEST_ASSERT_NOT_NULL(ut_params->op,
1455 "Failed to allocate symmetric crypto operation struct");
1457 rte_crypto_op_attach_sym_session(ut_params->op, sess);
1459 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1461 /* set crypto operation source mbuf */
1462 sym_op->m_src = ut_params->ibuf;
1464 sym_op->auth.digest.data = ut_params->digest;
1465 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1466 ut_params->ibuf, QUOTE_512_BYTES);
1468 sym_op->auth.data.offset = 0;
1469 sym_op->auth.data.length = QUOTE_512_BYTES;
1471 /* Copy IV at the end of the crypto operation */
1472 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1473 iv, CIPHER_IV_LENGTH_AES_CBC);
1475 sym_op->cipher.data.offset = 0;
1476 sym_op->cipher.data.length = QUOTE_512_BYTES;
1478 /* Process crypto operation */
1479 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1480 ut_params->op), "failed to process sym crypto op");
1482 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1483 "crypto op processing failed");
1485 ut_params->obuf = ut_params->op->sym->m_src;
1488 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1489 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *),
1492 "Plaintext data not as expected");
1495 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1496 "Digest verification failed");
1498 return TEST_SUCCESS;
1502 test_AES_cipheronly_mb_all(void)
1504 struct crypto_testsuite_params *ts_params = &testsuite_params;
1507 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1508 ts_params->op_mpool,
1509 ts_params->session_mpool,
1510 ts_params->valid_devs[0],
1511 rte_cryptodev_driver_id_get(
1512 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1513 BLKCIPHER_AES_CIPHERONLY_TYPE);
1515 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1517 return TEST_SUCCESS;
1521 test_AES_docsis_mb_all(void)
1523 struct crypto_testsuite_params *ts_params = &testsuite_params;
1526 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1527 ts_params->op_mpool,
1528 ts_params->session_mpool,
1529 ts_params->valid_devs[0],
1530 rte_cryptodev_driver_id_get(
1531 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1532 BLKCIPHER_AES_DOCSIS_TYPE);
1534 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1536 return TEST_SUCCESS;
1540 test_AES_docsis_qat_all(void)
1542 struct crypto_testsuite_params *ts_params = &testsuite_params;
1545 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1546 ts_params->op_mpool,
1547 ts_params->session_mpool,
1548 ts_params->valid_devs[0],
1549 rte_cryptodev_driver_id_get(
1550 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1551 BLKCIPHER_AES_DOCSIS_TYPE);
1553 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1555 return TEST_SUCCESS;
1559 test_DES_docsis_qat_all(void)
1561 struct crypto_testsuite_params *ts_params = &testsuite_params;
1564 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1565 ts_params->op_mpool,
1566 ts_params->session_mpool,
1567 ts_params->valid_devs[0],
1568 rte_cryptodev_driver_id_get(
1569 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1570 BLKCIPHER_DES_DOCSIS_TYPE);
1572 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1574 return TEST_SUCCESS;
1578 test_authonly_mb_all(void)
1580 struct crypto_testsuite_params *ts_params = &testsuite_params;
1583 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1584 ts_params->op_mpool,
1585 ts_params->session_mpool,
1586 ts_params->valid_devs[0],
1587 rte_cryptodev_driver_id_get(
1588 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1589 BLKCIPHER_AUTHONLY_TYPE);
1591 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1593 return TEST_SUCCESS;
1597 test_authonly_qat_all(void)
1599 struct crypto_testsuite_params *ts_params = &testsuite_params;
1602 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1603 ts_params->op_mpool,
1604 ts_params->session_mpool,
1605 ts_params->valid_devs[0],
1606 rte_cryptodev_driver_id_get(
1607 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1608 BLKCIPHER_AUTHONLY_TYPE);
1610 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1612 return TEST_SUCCESS;
1615 test_AES_chain_mb_all(void)
1617 struct crypto_testsuite_params *ts_params = &testsuite_params;
1620 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1621 ts_params->op_mpool,
1622 ts_params->session_mpool,
1623 ts_params->valid_devs[0],
1624 rte_cryptodev_driver_id_get(
1625 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)),
1626 BLKCIPHER_AES_CHAIN_TYPE);
1628 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1630 return TEST_SUCCESS;
1633 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
1636 test_AES_cipheronly_scheduler_all(void)
1638 struct crypto_testsuite_params *ts_params = &testsuite_params;
1641 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1642 ts_params->op_mpool,
1643 ts_params->session_mpool,
1644 ts_params->valid_devs[0],
1645 rte_cryptodev_driver_id_get(
1646 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1647 BLKCIPHER_AES_CIPHERONLY_TYPE);
1649 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1651 return TEST_SUCCESS;
1655 test_AES_chain_scheduler_all(void)
1657 struct crypto_testsuite_params *ts_params = &testsuite_params;
1660 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1661 ts_params->op_mpool,
1662 ts_params->session_mpool,
1663 ts_params->valid_devs[0],
1664 rte_cryptodev_driver_id_get(
1665 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1666 BLKCIPHER_AES_CHAIN_TYPE);
1668 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1670 return TEST_SUCCESS;
1674 test_authonly_scheduler_all(void)
1676 struct crypto_testsuite_params *ts_params = &testsuite_params;
1679 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1680 ts_params->op_mpool,
1681 ts_params->session_mpool,
1682 ts_params->valid_devs[0],
1683 rte_cryptodev_driver_id_get(
1684 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)),
1685 BLKCIPHER_AUTHONLY_TYPE);
1687 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1689 return TEST_SUCCESS;
1692 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
1695 test_AES_chain_openssl_all(void)
1697 struct crypto_testsuite_params *ts_params = &testsuite_params;
1700 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1701 ts_params->op_mpool,
1702 ts_params->session_mpool,
1703 ts_params->valid_devs[0],
1704 rte_cryptodev_driver_id_get(
1705 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1706 BLKCIPHER_AES_CHAIN_TYPE);
1708 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1710 return TEST_SUCCESS;
1714 test_AES_cipheronly_openssl_all(void)
1716 struct crypto_testsuite_params *ts_params = &testsuite_params;
1719 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1720 ts_params->op_mpool,
1721 ts_params->session_mpool,
1722 ts_params->valid_devs[0],
1723 rte_cryptodev_driver_id_get(
1724 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1725 BLKCIPHER_AES_CIPHERONLY_TYPE);
1727 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1729 return TEST_SUCCESS;
1733 test_AES_chain_qat_all(void)
1735 struct crypto_testsuite_params *ts_params = &testsuite_params;
1738 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1739 ts_params->op_mpool,
1740 ts_params->session_mpool,
1741 ts_params->valid_devs[0],
1742 rte_cryptodev_driver_id_get(
1743 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1744 BLKCIPHER_AES_CHAIN_TYPE);
1746 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1748 return TEST_SUCCESS;
1752 test_AES_cipheronly_qat_all(void)
1754 struct crypto_testsuite_params *ts_params = &testsuite_params;
1757 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1758 ts_params->op_mpool,
1759 ts_params->session_mpool,
1760 ts_params->valid_devs[0],
1761 rte_cryptodev_driver_id_get(
1762 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
1763 BLKCIPHER_AES_CIPHERONLY_TYPE);
1765 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1767 return TEST_SUCCESS;
1771 test_AES_chain_dpaa2_sec_all(void)
1773 struct crypto_testsuite_params *ts_params = &testsuite_params;
1776 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1777 ts_params->op_mpool,
1778 ts_params->session_mpool,
1779 ts_params->valid_devs[0],
1780 rte_cryptodev_driver_id_get(
1781 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
1782 BLKCIPHER_AES_CHAIN_TYPE);
1784 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1786 return TEST_SUCCESS;
1790 test_AES_cipheronly_dpaa2_sec_all(void)
1792 struct crypto_testsuite_params *ts_params = &testsuite_params;
1795 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1796 ts_params->op_mpool,
1797 ts_params->session_mpool,
1798 ts_params->valid_devs[0],
1799 rte_cryptodev_driver_id_get(
1800 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
1801 BLKCIPHER_AES_CIPHERONLY_TYPE);
1803 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1805 return TEST_SUCCESS;
1809 test_authonly_dpaa2_sec_all(void)
1811 struct crypto_testsuite_params *ts_params = &testsuite_params;
1814 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1815 ts_params->op_mpool,
1816 ts_params->session_mpool,
1817 ts_params->valid_devs[0],
1818 rte_cryptodev_driver_id_get(
1819 RTE_STR(RTE_CRYPTODEV_DPAA2_SEC_PMD)),
1820 BLKCIPHER_AUTHONLY_TYPE);
1822 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1824 return TEST_SUCCESS;
1828 test_authonly_openssl_all(void)
1830 struct crypto_testsuite_params *ts_params = &testsuite_params;
1833 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1834 ts_params->op_mpool,
1835 ts_params->session_mpool,
1836 ts_params->valid_devs[0],
1837 rte_cryptodev_driver_id_get(
1838 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
1839 BLKCIPHER_AUTHONLY_TYPE);
1841 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1843 return TEST_SUCCESS;
1847 test_AES_chain_armv8_all(void)
1849 struct crypto_testsuite_params *ts_params = &testsuite_params;
1852 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1853 ts_params->op_mpool,
1854 ts_params->session_mpool,
1855 ts_params->valid_devs[0],
1856 rte_cryptodev_driver_id_get(
1857 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)),
1858 BLKCIPHER_AES_CHAIN_TYPE);
1860 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1862 return TEST_SUCCESS;
1865 /* ***** SNOW 3G Tests ***** */
1867 create_wireless_algo_hash_session(uint8_t dev_id,
1868 const uint8_t *key, const uint8_t key_len,
1869 const uint8_t iv_len, const uint8_t auth_len,
1870 enum rte_crypto_auth_operation op,
1871 enum rte_crypto_auth_algorithm algo)
1873 uint8_t hash_key[key_len];
1875 struct crypto_testsuite_params *ts_params = &testsuite_params;
1876 struct crypto_unittest_params *ut_params = &unittest_params;
1878 memcpy(hash_key, key, key_len);
1880 TEST_HEXDUMP(stdout, "key:", key, key_len);
1882 /* Setup Authentication Parameters */
1883 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1884 ut_params->auth_xform.next = NULL;
1886 ut_params->auth_xform.auth.op = op;
1887 ut_params->auth_xform.auth.algo = algo;
1888 ut_params->auth_xform.auth.key.length = key_len;
1889 ut_params->auth_xform.auth.key.data = hash_key;
1890 ut_params->auth_xform.auth.digest_length = auth_len;
1891 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
1892 ut_params->auth_xform.auth.iv.length = iv_len;
1893 ut_params->sess = rte_cryptodev_sym_session_create(
1894 ts_params->session_mpool);
1896 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
1897 &ut_params->auth_xform, ts_params->session_mpool);
1898 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1903 create_wireless_algo_cipher_session(uint8_t dev_id,
1904 enum rte_crypto_cipher_operation op,
1905 enum rte_crypto_cipher_algorithm algo,
1906 const uint8_t *key, const uint8_t key_len,
1909 uint8_t cipher_key[key_len];
1911 struct crypto_testsuite_params *ts_params = &testsuite_params;
1912 struct crypto_unittest_params *ut_params = &unittest_params;
1914 memcpy(cipher_key, key, key_len);
1916 /* Setup Cipher Parameters */
1917 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1918 ut_params->cipher_xform.next = NULL;
1920 ut_params->cipher_xform.cipher.algo = algo;
1921 ut_params->cipher_xform.cipher.op = op;
1922 ut_params->cipher_xform.cipher.key.data = cipher_key;
1923 ut_params->cipher_xform.cipher.key.length = key_len;
1924 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
1925 ut_params->cipher_xform.cipher.iv.length = iv_len;
1927 TEST_HEXDUMP(stdout, "key:", key, key_len);
1929 /* Create Crypto session */
1930 ut_params->sess = rte_cryptodev_sym_session_create(
1931 ts_params->session_mpool);
1933 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
1934 &ut_params->cipher_xform, ts_params->session_mpool);
1935 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1940 create_wireless_algo_cipher_operation(const uint8_t *iv, uint8_t iv_len,
1941 unsigned int cipher_len,
1942 unsigned int cipher_offset)
1944 struct crypto_testsuite_params *ts_params = &testsuite_params;
1945 struct crypto_unittest_params *ut_params = &unittest_params;
1947 /* Generate Crypto op data structure */
1948 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1949 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1950 TEST_ASSERT_NOT_NULL(ut_params->op,
1951 "Failed to allocate pktmbuf offload");
1953 /* Set crypto operation data parameters */
1954 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1956 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1958 /* set crypto operation source mbuf */
1959 sym_op->m_src = ut_params->ibuf;
1962 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1964 sym_op->cipher.data.length = cipher_len;
1965 sym_op->cipher.data.offset = cipher_offset;
1970 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, uint8_t iv_len,
1971 unsigned int cipher_len,
1972 unsigned int cipher_offset)
1974 struct crypto_testsuite_params *ts_params = &testsuite_params;
1975 struct crypto_unittest_params *ut_params = &unittest_params;
1977 /* Generate Crypto op data structure */
1978 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1979 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1980 TEST_ASSERT_NOT_NULL(ut_params->op,
1981 "Failed to allocate pktmbuf offload");
1983 /* Set crypto operation data parameters */
1984 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1986 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1988 /* set crypto operation source mbuf */
1989 sym_op->m_src = ut_params->ibuf;
1990 sym_op->m_dst = ut_params->obuf;
1993 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
1995 sym_op->cipher.data.length = cipher_len;
1996 sym_op->cipher.data.offset = cipher_offset;
2001 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
2002 enum rte_crypto_cipher_operation cipher_op,
2003 enum rte_crypto_auth_operation auth_op,
2004 enum rte_crypto_auth_algorithm auth_algo,
2005 enum rte_crypto_cipher_algorithm cipher_algo,
2006 const uint8_t *key, uint8_t key_len,
2007 uint8_t auth_iv_len, uint8_t auth_len,
2008 uint8_t cipher_iv_len)
2011 uint8_t cipher_auth_key[key_len];
2013 struct crypto_testsuite_params *ts_params = &testsuite_params;
2014 struct crypto_unittest_params *ut_params = &unittest_params;
2016 memcpy(cipher_auth_key, key, key_len);
2018 /* Setup Authentication Parameters */
2019 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2020 ut_params->auth_xform.next = NULL;
2022 ut_params->auth_xform.auth.op = auth_op;
2023 ut_params->auth_xform.auth.algo = auth_algo;
2024 ut_params->auth_xform.auth.key.length = key_len;
2025 /* Hash key = cipher key */
2026 ut_params->auth_xform.auth.key.data = cipher_auth_key;
2027 ut_params->auth_xform.auth.digest_length = auth_len;
2028 /* Auth IV will be after cipher IV */
2029 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2030 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2032 /* Setup Cipher Parameters */
2033 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2034 ut_params->cipher_xform.next = &ut_params->auth_xform;
2036 ut_params->cipher_xform.cipher.algo = cipher_algo;
2037 ut_params->cipher_xform.cipher.op = cipher_op;
2038 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2039 ut_params->cipher_xform.cipher.key.length = key_len;
2040 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2041 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2043 TEST_HEXDUMP(stdout, "key:", key, key_len);
2045 /* Create Crypto session*/
2046 ut_params->sess = rte_cryptodev_sym_session_create(
2047 ts_params->session_mpool);
2049 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2050 &ut_params->cipher_xform, ts_params->session_mpool);
2052 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2057 create_wireless_cipher_auth_session(uint8_t dev_id,
2058 enum rte_crypto_cipher_operation cipher_op,
2059 enum rte_crypto_auth_operation auth_op,
2060 enum rte_crypto_auth_algorithm auth_algo,
2061 enum rte_crypto_cipher_algorithm cipher_algo,
2062 const struct wireless_test_data *tdata)
2064 const uint8_t key_len = tdata->key.len;
2065 uint8_t cipher_auth_key[key_len];
2067 struct crypto_testsuite_params *ts_params = &testsuite_params;
2068 struct crypto_unittest_params *ut_params = &unittest_params;
2069 const uint8_t *key = tdata->key.data;
2070 const uint8_t auth_len = tdata->digest.len;
2071 uint8_t cipher_iv_len = tdata->cipher_iv.len;
2072 uint8_t auth_iv_len = tdata->auth_iv.len;
2074 memcpy(cipher_auth_key, key, key_len);
2076 /* Setup Authentication Parameters */
2077 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2078 ut_params->auth_xform.next = NULL;
2080 ut_params->auth_xform.auth.op = auth_op;
2081 ut_params->auth_xform.auth.algo = auth_algo;
2082 ut_params->auth_xform.auth.key.length = key_len;
2083 /* Hash key = cipher key */
2084 ut_params->auth_xform.auth.key.data = cipher_auth_key;
2085 ut_params->auth_xform.auth.digest_length = auth_len;
2086 /* Auth IV will be after cipher IV */
2087 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2088 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2090 /* Setup Cipher Parameters */
2091 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2092 ut_params->cipher_xform.next = &ut_params->auth_xform;
2094 ut_params->cipher_xform.cipher.algo = cipher_algo;
2095 ut_params->cipher_xform.cipher.op = cipher_op;
2096 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
2097 ut_params->cipher_xform.cipher.key.length = key_len;
2098 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2099 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2102 TEST_HEXDUMP(stdout, "key:", key, key_len);
2104 /* Create Crypto session*/
2105 ut_params->sess = rte_cryptodev_sym_session_create(
2106 ts_params->session_mpool);
2108 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2109 &ut_params->cipher_xform, ts_params->session_mpool);
2111 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2116 create_zuc_cipher_auth_encrypt_generate_session(uint8_t dev_id,
2117 const struct wireless_test_data *tdata)
2119 return create_wireless_cipher_auth_session(dev_id,
2120 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2121 RTE_CRYPTO_AUTH_OP_GENERATE, RTE_CRYPTO_AUTH_ZUC_EIA3,
2122 RTE_CRYPTO_CIPHER_ZUC_EEA3, tdata);
2126 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
2127 enum rte_crypto_cipher_operation cipher_op,
2128 enum rte_crypto_auth_operation auth_op,
2129 enum rte_crypto_auth_algorithm auth_algo,
2130 enum rte_crypto_cipher_algorithm cipher_algo,
2131 const uint8_t *key, const uint8_t key_len,
2132 uint8_t auth_iv_len, uint8_t auth_len,
2133 uint8_t cipher_iv_len)
2135 uint8_t auth_cipher_key[key_len];
2137 struct crypto_testsuite_params *ts_params = &testsuite_params;
2138 struct crypto_unittest_params *ut_params = &unittest_params;
2140 memcpy(auth_cipher_key, key, key_len);
2142 /* Setup Authentication Parameters */
2143 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2144 ut_params->auth_xform.auth.op = auth_op;
2145 ut_params->auth_xform.next = &ut_params->cipher_xform;
2146 ut_params->auth_xform.auth.algo = auth_algo;
2147 ut_params->auth_xform.auth.key.length = key_len;
2148 ut_params->auth_xform.auth.key.data = auth_cipher_key;
2149 ut_params->auth_xform.auth.digest_length = auth_len;
2150 /* Auth IV will be after cipher IV */
2151 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len;
2152 ut_params->auth_xform.auth.iv.length = auth_iv_len;
2154 /* Setup Cipher Parameters */
2155 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2156 ut_params->cipher_xform.next = NULL;
2157 ut_params->cipher_xform.cipher.algo = cipher_algo;
2158 ut_params->cipher_xform.cipher.op = cipher_op;
2159 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
2160 ut_params->cipher_xform.cipher.key.length = key_len;
2161 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
2162 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len;
2164 TEST_HEXDUMP(stdout, "key:", key, key_len);
2166 /* Create Crypto session*/
2167 ut_params->sess = rte_cryptodev_sym_session_create(
2168 ts_params->session_mpool);
2170 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
2171 &ut_params->auth_xform, ts_params->session_mpool);
2173 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2179 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
2180 unsigned int auth_tag_len,
2181 const uint8_t *iv, unsigned int iv_len,
2182 unsigned int data_pad_len,
2183 enum rte_crypto_auth_operation op,
2184 unsigned int auth_len, unsigned int auth_offset)
2186 struct crypto_testsuite_params *ts_params = &testsuite_params;
2188 struct crypto_unittest_params *ut_params = &unittest_params;
2190 /* Generate Crypto op data structure */
2191 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2192 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2193 TEST_ASSERT_NOT_NULL(ut_params->op,
2194 "Failed to allocate pktmbuf offload");
2196 /* Set crypto operation data parameters */
2197 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2199 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2201 /* set crypto operation source mbuf */
2202 sym_op->m_src = ut_params->ibuf;
2205 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
2208 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2209 ut_params->ibuf, auth_tag_len);
2211 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2212 "no room to append auth tag");
2213 ut_params->digest = sym_op->auth.digest.data;
2214 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2215 ut_params->ibuf, data_pad_len);
2216 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2217 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2219 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2221 TEST_HEXDUMP(stdout, "digest:",
2222 sym_op->auth.digest.data,
2225 sym_op->auth.data.length = auth_len;
2226 sym_op->auth.data.offset = auth_offset;
2232 create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata,
2233 enum rte_crypto_auth_operation op)
2235 struct crypto_testsuite_params *ts_params = &testsuite_params;
2236 struct crypto_unittest_params *ut_params = &unittest_params;
2238 const uint8_t *auth_tag = tdata->digest.data;
2239 const unsigned int auth_tag_len = tdata->digest.len;
2240 unsigned int plaintext_len = ceil_byte_length(tdata->plaintext.len);
2241 unsigned int data_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2243 const uint8_t *cipher_iv = tdata->cipher_iv.data;
2244 const uint8_t cipher_iv_len = tdata->cipher_iv.len;
2245 const uint8_t *auth_iv = tdata->auth_iv.data;
2246 const uint8_t auth_iv_len = tdata->auth_iv.len;
2247 const unsigned int cipher_len = tdata->validCipherLenInBits.len;
2248 const unsigned int auth_len = tdata->validAuthLenInBits.len;
2250 /* Generate Crypto op data structure */
2251 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2252 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2253 TEST_ASSERT_NOT_NULL(ut_params->op,
2254 "Failed to allocate pktmbuf offload");
2255 /* Set crypto operation data parameters */
2256 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2258 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2260 /* set crypto operation source mbuf */
2261 sym_op->m_src = ut_params->ibuf;
2264 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2265 ut_params->ibuf, auth_tag_len);
2267 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2268 "no room to append auth tag");
2269 ut_params->digest = sym_op->auth.digest.data;
2270 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2271 ut_params->ibuf, data_pad_len);
2272 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2273 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2275 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2277 TEST_HEXDUMP(stdout, "digest:",
2278 sym_op->auth.digest.data,
2281 /* Copy cipher and auth IVs at the end of the crypto operation */
2282 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2284 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2285 iv_ptr += cipher_iv_len;
2286 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2288 sym_op->cipher.data.length = cipher_len;
2289 sym_op->cipher.data.offset = 0;
2290 sym_op->auth.data.length = auth_len;
2291 sym_op->auth.data.offset = 0;
2297 create_zuc_cipher_hash_generate_operation(
2298 const struct wireless_test_data *tdata)
2300 return create_wireless_cipher_hash_operation(tdata,
2301 RTE_CRYPTO_AUTH_OP_GENERATE);
2305 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2306 const unsigned auth_tag_len,
2307 const uint8_t *auth_iv, uint8_t auth_iv_len,
2308 unsigned data_pad_len,
2309 enum rte_crypto_auth_operation op,
2310 const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2311 const unsigned cipher_len, const unsigned cipher_offset,
2312 const unsigned auth_len, const unsigned auth_offset)
2314 struct crypto_testsuite_params *ts_params = &testsuite_params;
2315 struct crypto_unittest_params *ut_params = &unittest_params;
2317 /* Generate Crypto op data structure */
2318 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2319 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2320 TEST_ASSERT_NOT_NULL(ut_params->op,
2321 "Failed to allocate pktmbuf offload");
2322 /* Set crypto operation data parameters */
2323 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2325 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2327 /* set crypto operation source mbuf */
2328 sym_op->m_src = ut_params->ibuf;
2331 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2332 ut_params->ibuf, auth_tag_len);
2334 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2335 "no room to append auth tag");
2336 ut_params->digest = sym_op->auth.digest.data;
2337 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2338 ut_params->ibuf, data_pad_len);
2339 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2340 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2342 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2344 TEST_HEXDUMP(stdout, "digest:",
2345 sym_op->auth.digest.data,
2348 /* Copy cipher and auth IVs at the end of the crypto operation */
2349 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2351 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2352 iv_ptr += cipher_iv_len;
2353 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2355 sym_op->cipher.data.length = cipher_len;
2356 sym_op->cipher.data.offset = cipher_offset + auth_offset;
2357 sym_op->auth.data.length = auth_len;
2358 sym_op->auth.data.offset = auth_offset + cipher_offset;
2364 create_wireless_algo_auth_cipher_operation(unsigned int auth_tag_len,
2365 const uint8_t *cipher_iv, uint8_t cipher_iv_len,
2366 const uint8_t *auth_iv, uint8_t auth_iv_len,
2367 unsigned int data_pad_len,
2368 unsigned int cipher_len, unsigned int cipher_offset,
2369 unsigned int auth_len, unsigned int auth_offset)
2371 struct crypto_testsuite_params *ts_params = &testsuite_params;
2372 struct crypto_unittest_params *ut_params = &unittest_params;
2374 /* Generate Crypto op data structure */
2375 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2376 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2377 TEST_ASSERT_NOT_NULL(ut_params->op,
2378 "Failed to allocate pktmbuf offload");
2380 /* Set crypto operation data parameters */
2381 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2383 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2385 /* set crypto operation source mbuf */
2386 sym_op->m_src = ut_params->ibuf;
2389 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2390 ut_params->ibuf, auth_tag_len);
2392 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2393 "no room to append auth tag");
2395 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2396 ut_params->ibuf, data_pad_len);
2398 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2400 TEST_HEXDUMP(stdout, "digest:",
2401 sym_op->auth.digest.data,
2404 /* Copy cipher and auth IVs at the end of the crypto operation */
2405 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *,
2407 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len);
2408 iv_ptr += cipher_iv_len;
2409 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
2411 sym_op->cipher.data.length = cipher_len;
2412 sym_op->cipher.data.offset = auth_offset + cipher_offset;
2414 sym_op->auth.data.length = auth_len;
2415 sym_op->auth.data.offset = auth_offset + cipher_offset;
2421 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2423 struct crypto_testsuite_params *ts_params = &testsuite_params;
2424 struct crypto_unittest_params *ut_params = &unittest_params;
2427 unsigned plaintext_pad_len;
2428 unsigned plaintext_len;
2431 /* Create SNOW 3G session */
2432 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2433 tdata->key.data, tdata->key.len,
2434 tdata->auth_iv.len, tdata->digest.len,
2435 RTE_CRYPTO_AUTH_OP_GENERATE,
2436 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2440 /* alloc mbuf and set payload */
2441 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2443 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2444 rte_pktmbuf_tailroom(ut_params->ibuf));
2446 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2447 /* Append data which is padded to a multiple of */
2448 /* the algorithms block size */
2449 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2450 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2452 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2454 /* Create SNOW 3G operation */
2455 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2456 tdata->auth_iv.data, tdata->auth_iv.len,
2457 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2458 tdata->validAuthLenInBits.len,
2463 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2465 ut_params->obuf = ut_params->op->sym->m_src;
2466 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2467 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2468 + plaintext_pad_len;
2471 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2474 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2475 "SNOW 3G Generated auth tag not as expected");
2481 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
2483 struct crypto_testsuite_params *ts_params = &testsuite_params;
2484 struct crypto_unittest_params *ut_params = &unittest_params;
2487 unsigned plaintext_pad_len;
2488 unsigned plaintext_len;
2491 /* Create SNOW 3G session */
2492 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2493 tdata->key.data, tdata->key.len,
2494 tdata->auth_iv.len, tdata->digest.len,
2495 RTE_CRYPTO_AUTH_OP_VERIFY,
2496 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2499 /* alloc mbuf and set payload */
2500 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2502 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2503 rte_pktmbuf_tailroom(ut_params->ibuf));
2505 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2506 /* Append data which is padded to a multiple of */
2507 /* the algorithms block size */
2508 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2509 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2511 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2513 /* Create SNOW 3G operation */
2514 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2516 tdata->auth_iv.data, tdata->auth_iv.len,
2518 RTE_CRYPTO_AUTH_OP_VERIFY,
2519 tdata->validAuthLenInBits.len,
2524 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2526 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2527 ut_params->obuf = ut_params->op->sym->m_src;
2528 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2529 + plaintext_pad_len;
2532 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2541 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
2543 struct crypto_testsuite_params *ts_params = &testsuite_params;
2544 struct crypto_unittest_params *ut_params = &unittest_params;
2547 unsigned plaintext_pad_len;
2548 unsigned plaintext_len;
2551 /* Create KASUMI session */
2552 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2553 tdata->key.data, tdata->key.len,
2554 tdata->auth_iv.len, tdata->digest.len,
2555 RTE_CRYPTO_AUTH_OP_GENERATE,
2556 RTE_CRYPTO_AUTH_KASUMI_F9);
2560 /* alloc mbuf and set payload */
2561 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2563 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2564 rte_pktmbuf_tailroom(ut_params->ibuf));
2566 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2567 /* Append data which is padded to a multiple of */
2568 /* the algorithms block size */
2569 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2570 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2572 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2574 /* Create KASUMI operation */
2575 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2576 tdata->auth_iv.data, tdata->auth_iv.len,
2577 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2578 tdata->validAuthLenInBits.len,
2583 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2585 ut_params->obuf = ut_params->op->sym->m_src;
2586 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2587 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2588 + plaintext_pad_len;
2591 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2594 DIGEST_BYTE_LENGTH_KASUMI_F9,
2595 "KASUMI Generated auth tag not as expected");
2601 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
2603 struct crypto_testsuite_params *ts_params = &testsuite_params;
2604 struct crypto_unittest_params *ut_params = &unittest_params;
2607 unsigned plaintext_pad_len;
2608 unsigned plaintext_len;
2611 /* Create KASUMI session */
2612 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2613 tdata->key.data, tdata->key.len,
2614 tdata->auth_iv.len, tdata->digest.len,
2615 RTE_CRYPTO_AUTH_OP_VERIFY,
2616 RTE_CRYPTO_AUTH_KASUMI_F9);
2619 /* alloc mbuf and set payload */
2620 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2622 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2623 rte_pktmbuf_tailroom(ut_params->ibuf));
2625 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2626 /* Append data which is padded to a multiple */
2627 /* of the algorithms block size */
2628 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2629 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2631 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2633 /* Create KASUMI operation */
2634 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2636 tdata->auth_iv.data, tdata->auth_iv.len,
2638 RTE_CRYPTO_AUTH_OP_VERIFY,
2639 tdata->validAuthLenInBits.len,
2644 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2646 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2647 ut_params->obuf = ut_params->op->sym->m_src;
2648 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2649 + plaintext_pad_len;
2652 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2661 test_snow3g_hash_generate_test_case_1(void)
2663 return test_snow3g_authentication(&snow3g_hash_test_case_1);
2667 test_snow3g_hash_generate_test_case_2(void)
2669 return test_snow3g_authentication(&snow3g_hash_test_case_2);
2673 test_snow3g_hash_generate_test_case_3(void)
2675 return test_snow3g_authentication(&snow3g_hash_test_case_3);
2679 test_snow3g_hash_generate_test_case_4(void)
2681 return test_snow3g_authentication(&snow3g_hash_test_case_4);
2685 test_snow3g_hash_generate_test_case_5(void)
2687 return test_snow3g_authentication(&snow3g_hash_test_case_5);
2691 test_snow3g_hash_generate_test_case_6(void)
2693 return test_snow3g_authentication(&snow3g_hash_test_case_6);
2697 test_snow3g_hash_verify_test_case_1(void)
2699 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
2704 test_snow3g_hash_verify_test_case_2(void)
2706 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
2710 test_snow3g_hash_verify_test_case_3(void)
2712 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
2716 test_snow3g_hash_verify_test_case_4(void)
2718 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
2722 test_snow3g_hash_verify_test_case_5(void)
2724 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
2728 test_snow3g_hash_verify_test_case_6(void)
2730 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
2734 test_kasumi_hash_generate_test_case_1(void)
2736 return test_kasumi_authentication(&kasumi_hash_test_case_1);
2740 test_kasumi_hash_generate_test_case_2(void)
2742 return test_kasumi_authentication(&kasumi_hash_test_case_2);
2746 test_kasumi_hash_generate_test_case_3(void)
2748 return test_kasumi_authentication(&kasumi_hash_test_case_3);
2752 test_kasumi_hash_generate_test_case_4(void)
2754 return test_kasumi_authentication(&kasumi_hash_test_case_4);
2758 test_kasumi_hash_generate_test_case_5(void)
2760 return test_kasumi_authentication(&kasumi_hash_test_case_5);
2764 test_kasumi_hash_generate_test_case_6(void)
2766 return test_kasumi_authentication(&kasumi_hash_test_case_6);
2770 test_kasumi_hash_verify_test_case_1(void)
2772 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
2776 test_kasumi_hash_verify_test_case_2(void)
2778 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
2782 test_kasumi_hash_verify_test_case_3(void)
2784 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
2788 test_kasumi_hash_verify_test_case_4(void)
2790 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
2794 test_kasumi_hash_verify_test_case_5(void)
2796 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
2800 test_kasumi_encryption(const struct kasumi_test_data *tdata)
2802 struct crypto_testsuite_params *ts_params = &testsuite_params;
2803 struct crypto_unittest_params *ut_params = &unittest_params;
2806 uint8_t *plaintext, *ciphertext;
2807 unsigned plaintext_pad_len;
2808 unsigned plaintext_len;
2810 /* Create KASUMI session */
2811 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2812 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2813 RTE_CRYPTO_CIPHER_KASUMI_F8,
2814 tdata->key.data, tdata->key.len,
2815 tdata->cipher_iv.len);
2819 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2821 /* Clear mbuf payload */
2822 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2823 rte_pktmbuf_tailroom(ut_params->ibuf));
2825 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2826 /* Append data which is padded to a multiple */
2827 /* of the algorithms block size */
2828 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2829 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2831 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2833 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2835 /* Create KASUMI operation */
2836 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
2837 tdata->cipher_iv.len,
2838 tdata->plaintext.len,
2843 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2845 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2847 ut_params->obuf = ut_params->op->sym->m_dst;
2848 if (ut_params->obuf)
2849 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
2851 ciphertext = plaintext;
2853 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2856 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2858 tdata->ciphertext.data,
2859 tdata->validCipherLenInBits.len,
2860 "KASUMI Ciphertext data not as expected");
2865 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
2867 struct crypto_testsuite_params *ts_params = &testsuite_params;
2868 struct crypto_unittest_params *ut_params = &unittest_params;
2872 unsigned int plaintext_pad_len;
2873 unsigned int plaintext_len;
2875 uint8_t buffer[10000];
2876 const uint8_t *ciphertext;
2878 struct rte_cryptodev_info dev_info;
2880 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2881 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
2882 printf("Device doesn't support scatter-gather. "
2887 /* Create KASUMI session */
2888 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2889 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2890 RTE_CRYPTO_CIPHER_KASUMI_F8,
2891 tdata->key.data, tdata->key.len,
2892 tdata->cipher_iv.len);
2896 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2899 /* Append data which is padded to a multiple */
2900 /* of the algorithms block size */
2901 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2903 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
2904 plaintext_pad_len, 10, 0);
2906 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
2908 /* Create KASUMI operation */
2909 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
2910 tdata->cipher_iv.len,
2911 tdata->plaintext.len,
2916 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2918 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2920 ut_params->obuf = ut_params->op->sym->m_dst;
2922 if (ut_params->obuf)
2923 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
2924 plaintext_len, buffer);
2926 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
2927 plaintext_len, buffer);
2930 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2933 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2935 tdata->ciphertext.data,
2936 tdata->validCipherLenInBits.len,
2937 "KASUMI Ciphertext data not as expected");
2942 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
2944 struct crypto_testsuite_params *ts_params = &testsuite_params;
2945 struct crypto_unittest_params *ut_params = &unittest_params;
2948 uint8_t *plaintext, *ciphertext;
2949 unsigned plaintext_pad_len;
2950 unsigned plaintext_len;
2952 /* Create KASUMI session */
2953 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2954 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2955 RTE_CRYPTO_CIPHER_KASUMI_F8,
2956 tdata->key.data, tdata->key.len,
2957 tdata->cipher_iv.len);
2961 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2962 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2964 /* Clear mbuf payload */
2965 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2966 rte_pktmbuf_tailroom(ut_params->ibuf));
2968 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2969 /* Append data which is padded to a multiple */
2970 /* of the algorithms block size */
2971 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2972 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2974 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2975 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2977 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2979 /* Create KASUMI operation */
2980 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
2981 tdata->cipher_iv.len,
2982 tdata->plaintext.len,
2987 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2989 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2991 ut_params->obuf = ut_params->op->sym->m_dst;
2992 if (ut_params->obuf)
2993 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
2995 ciphertext = plaintext;
2997 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3000 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3002 tdata->ciphertext.data,
3003 tdata->validCipherLenInBits.len,
3004 "KASUMI Ciphertext data not as expected");
3009 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
3011 struct crypto_testsuite_params *ts_params = &testsuite_params;
3012 struct crypto_unittest_params *ut_params = &unittest_params;
3015 unsigned int plaintext_pad_len;
3016 unsigned int plaintext_len;
3018 const uint8_t *ciphertext;
3019 uint8_t buffer[2048];
3021 struct rte_cryptodev_info dev_info;
3023 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3024 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3025 printf("Device doesn't support scatter-gather. "
3030 /* Create KASUMI session */
3031 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3032 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3033 RTE_CRYPTO_CIPHER_KASUMI_F8,
3034 tdata->key.data, tdata->key.len,
3035 tdata->cipher_iv.len);
3039 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3040 /* Append data which is padded to a multiple */
3041 /* of the algorithms block size */
3042 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3044 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3045 plaintext_pad_len, 10, 0);
3046 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3047 plaintext_pad_len, 3, 0);
3049 /* Append data which is padded to a multiple */
3050 /* of the algorithms block size */
3051 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3053 /* Create KASUMI operation */
3054 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3055 tdata->cipher_iv.len,
3056 tdata->plaintext.len,
3061 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3063 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3065 ut_params->obuf = ut_params->op->sym->m_dst;
3066 if (ut_params->obuf)
3067 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3068 plaintext_pad_len, buffer);
3070 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
3071 plaintext_pad_len, buffer);
3074 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3076 tdata->ciphertext.data,
3077 tdata->validCipherLenInBits.len,
3078 "KASUMI Ciphertext data not as expected");
3084 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
3086 struct crypto_testsuite_params *ts_params = &testsuite_params;
3087 struct crypto_unittest_params *ut_params = &unittest_params;
3090 uint8_t *ciphertext, *plaintext;
3091 unsigned ciphertext_pad_len;
3092 unsigned ciphertext_len;
3094 /* Create KASUMI session */
3095 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3096 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3097 RTE_CRYPTO_CIPHER_KASUMI_F8,
3098 tdata->key.data, tdata->key.len,
3099 tdata->cipher_iv.len);
3103 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3104 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3106 /* Clear mbuf payload */
3107 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3108 rte_pktmbuf_tailroom(ut_params->ibuf));
3110 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3111 /* Append data which is padded to a multiple */
3112 /* of the algorithms block size */
3113 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3114 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3115 ciphertext_pad_len);
3116 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3117 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3119 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3121 /* Create KASUMI operation */
3122 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3123 tdata->cipher_iv.len,
3124 tdata->ciphertext.len,
3129 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3131 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3133 ut_params->obuf = ut_params->op->sym->m_dst;
3134 if (ut_params->obuf)
3135 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3137 plaintext = ciphertext;
3139 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3142 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3144 tdata->plaintext.data,
3145 tdata->validCipherLenInBits.len,
3146 "KASUMI Plaintext data not as expected");
3151 test_kasumi_decryption(const struct kasumi_test_data *tdata)
3153 struct crypto_testsuite_params *ts_params = &testsuite_params;
3154 struct crypto_unittest_params *ut_params = &unittest_params;
3157 uint8_t *ciphertext, *plaintext;
3158 unsigned ciphertext_pad_len;
3159 unsigned ciphertext_len;
3161 /* Create KASUMI session */
3162 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3163 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3164 RTE_CRYPTO_CIPHER_KASUMI_F8,
3165 tdata->key.data, tdata->key.len,
3166 tdata->cipher_iv.len);
3170 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3172 /* Clear mbuf payload */
3173 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3174 rte_pktmbuf_tailroom(ut_params->ibuf));
3176 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3177 /* Append data which is padded to a multiple */
3178 /* of the algorithms block size */
3179 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3180 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3181 ciphertext_pad_len);
3182 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3184 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3186 /* Create KASUMI operation */
3187 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3188 tdata->cipher_iv.len,
3189 tdata->ciphertext.len,
3194 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3196 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3198 ut_params->obuf = ut_params->op->sym->m_dst;
3199 if (ut_params->obuf)
3200 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3202 plaintext = ciphertext;
3204 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3207 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3209 tdata->plaintext.data,
3210 tdata->validCipherLenInBits.len,
3211 "KASUMI Plaintext data not as expected");
3216 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3218 struct crypto_testsuite_params *ts_params = &testsuite_params;
3219 struct crypto_unittest_params *ut_params = &unittest_params;
3222 uint8_t *plaintext, *ciphertext;
3223 unsigned plaintext_pad_len;
3224 unsigned plaintext_len;
3226 /* Create SNOW 3G session */
3227 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3228 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3229 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3230 tdata->key.data, tdata->key.len,
3231 tdata->cipher_iv.len);
3235 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3237 /* Clear mbuf payload */
3238 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3239 rte_pktmbuf_tailroom(ut_params->ibuf));
3241 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3242 /* Append data which is padded to a multiple of */
3243 /* the algorithms block size */
3244 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3245 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3247 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3249 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3251 /* Create SNOW 3G operation */
3252 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3253 tdata->cipher_iv.len,
3254 tdata->validCipherLenInBits.len,
3259 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3261 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3263 ut_params->obuf = ut_params->op->sym->m_dst;
3264 if (ut_params->obuf)
3265 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3267 ciphertext = plaintext;
3269 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3272 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3274 tdata->ciphertext.data,
3275 tdata->validDataLenInBits.len,
3276 "SNOW 3G Ciphertext data not as expected");
3282 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
3284 struct crypto_testsuite_params *ts_params = &testsuite_params;
3285 struct crypto_unittest_params *ut_params = &unittest_params;
3286 uint8_t *plaintext, *ciphertext;
3289 unsigned plaintext_pad_len;
3290 unsigned plaintext_len;
3292 /* Create SNOW 3G session */
3293 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3294 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3295 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3296 tdata->key.data, tdata->key.len,
3297 tdata->cipher_iv.len);
3301 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3302 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3304 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3305 "Failed to allocate input buffer in mempool");
3306 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3307 "Failed to allocate output buffer in mempool");
3309 /* Clear mbuf payload */
3310 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3311 rte_pktmbuf_tailroom(ut_params->ibuf));
3313 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3314 /* Append data which is padded to a multiple of */
3315 /* the algorithms block size */
3316 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3317 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3319 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3320 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3322 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3324 /* Create SNOW 3G operation */
3325 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3326 tdata->cipher_iv.len,
3327 tdata->validCipherLenInBits.len,
3332 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3334 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3336 ut_params->obuf = ut_params->op->sym->m_dst;
3337 if (ut_params->obuf)
3338 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3340 ciphertext = plaintext;
3342 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3345 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3347 tdata->ciphertext.data,
3348 tdata->validDataLenInBits.len,
3349 "SNOW 3G Ciphertext data not as expected");
3354 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
3356 struct crypto_testsuite_params *ts_params = &testsuite_params;
3357 struct crypto_unittest_params *ut_params = &unittest_params;
3360 unsigned int plaintext_pad_len;
3361 unsigned int plaintext_len;
3362 uint8_t buffer[10000];
3363 const uint8_t *ciphertext;
3365 struct rte_cryptodev_info dev_info;
3367 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3368 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3369 printf("Device doesn't support scatter-gather. "
3374 /* Create SNOW 3G session */
3375 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3376 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3377 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3378 tdata->key.data, tdata->key.len,
3379 tdata->cipher_iv.len);
3383 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3384 /* Append data which is padded to a multiple of */
3385 /* the algorithms block size */
3386 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3388 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3389 plaintext_pad_len, 10, 0);
3390 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3391 plaintext_pad_len, 3, 0);
3393 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3394 "Failed to allocate input buffer in mempool");
3395 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3396 "Failed to allocate output buffer in mempool");
3398 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3400 /* Create SNOW 3G operation */
3401 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3402 tdata->cipher_iv.len,
3403 tdata->validCipherLenInBits.len,
3408 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3410 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3412 ut_params->obuf = ut_params->op->sym->m_dst;
3413 if (ut_params->obuf)
3414 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0,
3415 plaintext_len, buffer);
3417 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0,
3418 plaintext_len, buffer);
3420 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3423 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3425 tdata->ciphertext.data,
3426 tdata->validDataLenInBits.len,
3427 "SNOW 3G Ciphertext data not as expected");
3432 /* Shift right a buffer by "offset" bits, "offset" < 8 */
3434 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
3436 uint8_t curr_byte, prev_byte;
3437 uint32_t length_in_bytes = ceil_byte_length(length + offset);
3438 uint8_t lower_byte_mask = (1 << offset) - 1;
3441 prev_byte = buffer[0];
3442 buffer[0] >>= offset;
3444 for (i = 1; i < length_in_bytes; i++) {
3445 curr_byte = buffer[i];
3446 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
3447 (curr_byte >> offset);
3448 prev_byte = curr_byte;
3453 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
3455 struct crypto_testsuite_params *ts_params = &testsuite_params;
3456 struct crypto_unittest_params *ut_params = &unittest_params;
3457 uint8_t *plaintext, *ciphertext;
3459 uint32_t plaintext_len;
3460 uint32_t plaintext_pad_len;
3461 uint8_t extra_offset = 4;
3462 uint8_t *expected_ciphertext_shifted;
3464 /* Create SNOW 3G session */
3465 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3466 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3467 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3468 tdata->key.data, tdata->key.len,
3469 tdata->cipher_iv.len);
3473 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3474 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3476 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3477 "Failed to allocate input buffer in mempool");
3478 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3479 "Failed to allocate output buffer in mempool");
3481 /* Clear mbuf payload */
3482 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3483 rte_pktmbuf_tailroom(ut_params->ibuf));
3485 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
3487 * Append data which is padded to a
3488 * multiple of the algorithms block size
3490 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3492 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
3495 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3497 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
3498 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
3500 #ifdef RTE_APP_TEST_DEBUG
3501 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
3503 /* Create SNOW 3G operation */
3504 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3505 tdata->cipher_iv.len,
3506 tdata->validCipherLenInBits.len,
3511 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3513 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3515 ut_params->obuf = ut_params->op->sym->m_dst;
3516 if (ut_params->obuf)
3517 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3519 ciphertext = plaintext;
3521 #ifdef RTE_APP_TEST_DEBUG
3522 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3525 expected_ciphertext_shifted = rte_malloc(NULL, plaintext_len, 8);
3527 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
3528 "failed to reserve memory for ciphertext shifted\n");
3530 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
3531 ceil_byte_length(tdata->ciphertext.len));
3532 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
3535 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
3537 expected_ciphertext_shifted,
3538 tdata->validDataLenInBits.len,
3540 "SNOW 3G Ciphertext data not as expected");
3544 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
3546 struct crypto_testsuite_params *ts_params = &testsuite_params;
3547 struct crypto_unittest_params *ut_params = &unittest_params;
3551 uint8_t *plaintext, *ciphertext;
3552 unsigned ciphertext_pad_len;
3553 unsigned ciphertext_len;
3555 /* Create SNOW 3G session */
3556 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3557 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3558 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3559 tdata->key.data, tdata->key.len,
3560 tdata->cipher_iv.len);
3564 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3566 /* Clear mbuf payload */
3567 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3568 rte_pktmbuf_tailroom(ut_params->ibuf));
3570 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3571 /* Append data which is padded to a multiple of */
3572 /* the algorithms block size */
3573 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3574 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3575 ciphertext_pad_len);
3576 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3578 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3580 /* Create SNOW 3G operation */
3581 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
3582 tdata->cipher_iv.len,
3583 tdata->validCipherLenInBits.len,
3588 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3590 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3591 ut_params->obuf = ut_params->op->sym->m_dst;
3592 if (ut_params->obuf)
3593 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3595 plaintext = ciphertext;
3597 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3600 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3601 tdata->plaintext.data,
3602 tdata->validDataLenInBits.len,
3603 "SNOW 3G Plaintext data not as expected");
3607 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
3609 struct crypto_testsuite_params *ts_params = &testsuite_params;
3610 struct crypto_unittest_params *ut_params = &unittest_params;
3614 uint8_t *plaintext, *ciphertext;
3615 unsigned ciphertext_pad_len;
3616 unsigned ciphertext_len;
3618 /* Create SNOW 3G session */
3619 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3620 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3621 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3622 tdata->key.data, tdata->key.len,
3623 tdata->cipher_iv.len);
3627 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3628 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3630 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3631 "Failed to allocate input buffer");
3632 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3633 "Failed to allocate output buffer");
3635 /* Clear mbuf payload */
3636 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3637 rte_pktmbuf_tailroom(ut_params->ibuf));
3639 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
3640 rte_pktmbuf_tailroom(ut_params->obuf));
3642 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3643 /* Append data which is padded to a multiple of */
3644 /* the algorithms block size */
3645 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3646 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3647 ciphertext_pad_len);
3648 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3649 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3651 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3653 /* Create SNOW 3G operation */
3654 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data,
3655 tdata->cipher_iv.len,
3656 tdata->validCipherLenInBits.len,
3661 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3663 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3664 ut_params->obuf = ut_params->op->sym->m_dst;
3665 if (ut_params->obuf)
3666 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3668 plaintext = ciphertext;
3670 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3673 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3674 tdata->plaintext.data,
3675 tdata->validDataLenInBits.len,
3676 "SNOW 3G Plaintext data not as expected");
3681 test_zuc_cipher_auth(const struct wireless_test_data *tdata)
3683 struct crypto_testsuite_params *ts_params = &testsuite_params;
3684 struct crypto_unittest_params *ut_params = &unittest_params;
3688 uint8_t *plaintext, *ciphertext;
3689 unsigned int plaintext_pad_len;
3690 unsigned int plaintext_len;
3692 struct rte_cryptodev_sym_capability_idx cap_idx;
3694 /* Check if device supports ZUC EEA3 */
3695 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3696 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
3698 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3702 /* Check if device supports ZUC EIA3 */
3703 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3704 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
3706 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
3710 /* Create ZUC session */
3711 retval = create_zuc_cipher_auth_encrypt_generate_session(
3712 ts_params->valid_devs[0],
3716 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3718 /* clear mbuf payload */
3719 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3720 rte_pktmbuf_tailroom(ut_params->ibuf));
3722 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3723 /* Append data which is padded to a multiple of */
3724 /* the algorithms block size */
3725 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3726 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3728 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3730 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3732 /* Create ZUC operation */
3733 retval = create_zuc_cipher_hash_generate_operation(tdata);
3737 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3739 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3740 ut_params->obuf = ut_params->op->sym->m_src;
3741 if (ut_params->obuf)
3742 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3744 ciphertext = plaintext;
3746 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3748 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3750 tdata->ciphertext.data,
3751 tdata->validDataLenInBits.len,
3752 "ZUC Ciphertext data not as expected");
3754 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3755 + plaintext_pad_len;
3758 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3762 "ZUC Generated auth tag not as expected");
3767 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
3769 struct crypto_testsuite_params *ts_params = &testsuite_params;
3770 struct crypto_unittest_params *ut_params = &unittest_params;
3774 uint8_t *plaintext, *ciphertext;
3775 unsigned plaintext_pad_len;
3776 unsigned plaintext_len;
3778 /* Create SNOW 3G session */
3779 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
3780 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3781 RTE_CRYPTO_AUTH_OP_GENERATE,
3782 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3783 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3784 tdata->key.data, tdata->key.len,
3785 tdata->auth_iv.len, tdata->digest.len,
3786 tdata->cipher_iv.len);
3789 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3791 /* clear mbuf payload */
3792 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3793 rte_pktmbuf_tailroom(ut_params->ibuf));
3795 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3796 /* Append data which is padded to a multiple of */
3797 /* the algorithms block size */
3798 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3799 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3801 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3803 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3805 /* Create SNOW 3G operation */
3806 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3807 tdata->digest.len, tdata->auth_iv.data,
3809 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3810 tdata->cipher_iv.data, tdata->cipher_iv.len,
3811 tdata->validCipherLenInBits.len,
3813 tdata->validAuthLenInBits.len,
3819 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3821 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3822 ut_params->obuf = ut_params->op->sym->m_src;
3823 if (ut_params->obuf)
3824 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3826 ciphertext = plaintext;
3828 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3830 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3832 tdata->ciphertext.data,
3833 tdata->validDataLenInBits.len,
3834 "SNOW 3G Ciphertext data not as expected");
3836 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3837 + plaintext_pad_len;
3840 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3843 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3844 "SNOW 3G Generated auth tag not as expected");
3848 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
3850 struct crypto_testsuite_params *ts_params = &testsuite_params;
3851 struct crypto_unittest_params *ut_params = &unittest_params;
3855 uint8_t *plaintext, *ciphertext;
3856 unsigned plaintext_pad_len;
3857 unsigned plaintext_len;
3859 /* Create SNOW 3G session */
3860 retval = create_wireless_algo_auth_cipher_session(ts_params->valid_devs[0],
3861 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3862 RTE_CRYPTO_AUTH_OP_GENERATE,
3863 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3864 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3865 tdata->key.data, tdata->key.len,
3866 tdata->auth_iv.len, tdata->digest.len,
3867 tdata->cipher_iv.len);
3871 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3873 /* clear mbuf payload */
3874 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3875 rte_pktmbuf_tailroom(ut_params->ibuf));
3877 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3878 /* Append data which is padded to a multiple of */
3879 /* the algorithms block size */
3880 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3881 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3883 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3885 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3887 /* Create SNOW 3G operation */
3888 retval = create_wireless_algo_auth_cipher_operation(
3890 tdata->cipher_iv.data, tdata->cipher_iv.len,
3891 tdata->auth_iv.data, tdata->auth_iv.len,
3893 tdata->validCipherLenInBits.len,
3895 tdata->validAuthLenInBits.len,
3901 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3903 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3904 ut_params->obuf = ut_params->op->sym->m_src;
3905 if (ut_params->obuf)
3906 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3908 ciphertext = plaintext;
3910 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3911 + plaintext_pad_len;
3912 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3915 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3917 tdata->ciphertext.data,
3918 tdata->validDataLenInBits.len,
3919 "SNOW 3G Ciphertext data not as expected");
3922 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3925 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3926 "SNOW 3G Generated auth tag not as expected");
3931 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata)
3933 struct crypto_testsuite_params *ts_params = &testsuite_params;
3934 struct crypto_unittest_params *ut_params = &unittest_params;
3938 uint8_t *plaintext, *ciphertext;
3939 unsigned plaintext_pad_len;
3940 unsigned plaintext_len;
3942 /* Create KASUMI session */
3943 retval = create_wireless_algo_auth_cipher_session(
3944 ts_params->valid_devs[0],
3945 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3946 RTE_CRYPTO_AUTH_OP_GENERATE,
3947 RTE_CRYPTO_AUTH_KASUMI_F9,
3948 RTE_CRYPTO_CIPHER_KASUMI_F8,
3949 tdata->key.data, tdata->key.len,
3950 tdata->auth_iv.len, tdata->digest.len,
3951 tdata->cipher_iv.len);
3954 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3956 /* clear mbuf payload */
3957 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3958 rte_pktmbuf_tailroom(ut_params->ibuf));
3960 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3961 /* Append data which is padded to a multiple of */
3962 /* the algorithms block size */
3963 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3964 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3966 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3968 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3970 /* Create KASUMI operation */
3971 retval = create_wireless_algo_auth_cipher_operation(tdata->digest.len,
3972 tdata->cipher_iv.data, tdata->cipher_iv.len,
3973 tdata->auth_iv.data, tdata->auth_iv.len,
3975 tdata->validCipherLenInBits.len,
3977 tdata->validAuthLenInBits.len,
3984 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3986 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3987 ut_params->obuf = ut_params->op->sym->m_src;
3988 if (ut_params->obuf)
3989 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
3991 ciphertext = plaintext;
3994 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3996 tdata->ciphertext.data,
3997 tdata->validCipherLenInBits.len,
3998 "KASUMI Ciphertext data not as expected");
3999 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4000 + plaintext_pad_len;
4003 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4006 DIGEST_BYTE_LENGTH_KASUMI_F9,
4007 "KASUMI Generated auth tag not as expected");
4012 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
4014 struct crypto_testsuite_params *ts_params = &testsuite_params;
4015 struct crypto_unittest_params *ut_params = &unittest_params;
4019 uint8_t *plaintext, *ciphertext;
4020 unsigned plaintext_pad_len;
4021 unsigned plaintext_len;
4023 /* Create KASUMI session */
4024 retval = create_wireless_algo_cipher_auth_session(
4025 ts_params->valid_devs[0],
4026 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4027 RTE_CRYPTO_AUTH_OP_GENERATE,
4028 RTE_CRYPTO_AUTH_KASUMI_F9,
4029 RTE_CRYPTO_CIPHER_KASUMI_F8,
4030 tdata->key.data, tdata->key.len,
4031 tdata->auth_iv.len, tdata->digest.len,
4032 tdata->cipher_iv.len);
4036 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4038 /* clear mbuf payload */
4039 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4040 rte_pktmbuf_tailroom(ut_params->ibuf));
4042 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4043 /* Append data which is padded to a multiple of */
4044 /* the algorithms block size */
4045 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
4046 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4048 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4050 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
4052 /* Create KASUMI operation */
4053 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
4054 tdata->digest.len, tdata->auth_iv.data,
4056 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4057 tdata->cipher_iv.data, tdata->cipher_iv.len,
4058 tdata->validCipherLenInBits.len,
4060 tdata->validAuthLenInBits.len,
4066 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4068 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4069 ut_params->obuf = ut_params->op->sym->m_src;
4070 if (ut_params->obuf)
4071 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4073 ciphertext = plaintext;
4075 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4076 + plaintext_pad_len;
4079 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4081 tdata->ciphertext.data,
4082 tdata->validCipherLenInBits.len,
4083 "KASUMI Ciphertext data not as expected");
4086 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4089 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
4090 "KASUMI Generated auth tag not as expected");
4095 test_zuc_encryption(const struct wireless_test_data *tdata)
4097 struct crypto_testsuite_params *ts_params = &testsuite_params;
4098 struct crypto_unittest_params *ut_params = &unittest_params;
4101 uint8_t *plaintext, *ciphertext;
4102 unsigned plaintext_pad_len;
4103 unsigned plaintext_len;
4105 struct rte_cryptodev_sym_capability_idx cap_idx;
4107 /* Check if device supports ZUC EEA3 */
4108 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4109 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
4111 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4115 /* Create ZUC session */
4116 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4117 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4118 RTE_CRYPTO_CIPHER_ZUC_EEA3,
4119 tdata->key.data, tdata->key.len,
4120 tdata->cipher_iv.len);
4124 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4126 /* Clear mbuf payload */
4127 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4128 rte_pktmbuf_tailroom(ut_params->ibuf));
4130 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4131 /* Append data which is padded to a multiple */
4132 /* of the algorithms block size */
4133 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
4134 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4136 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4138 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
4140 /* Create ZUC operation */
4141 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4142 tdata->cipher_iv.len,
4143 tdata->plaintext.len,
4148 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4150 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4152 ut_params->obuf = ut_params->op->sym->m_dst;
4153 if (ut_params->obuf)
4154 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *);
4156 ciphertext = plaintext;
4158 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
4161 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4163 tdata->ciphertext.data,
4164 tdata->validCipherLenInBits.len,
4165 "ZUC Ciphertext data not as expected");
4170 test_zuc_encryption_sgl(const struct wireless_test_data *tdata)
4172 struct crypto_testsuite_params *ts_params = &testsuite_params;
4173 struct crypto_unittest_params *ut_params = &unittest_params;
4177 unsigned int plaintext_pad_len;
4178 unsigned int plaintext_len;
4179 const uint8_t *ciphertext;
4180 uint8_t ciphertext_buffer[2048];
4181 struct rte_cryptodev_info dev_info;
4183 struct rte_cryptodev_sym_capability_idx cap_idx;
4185 /* Check if device supports ZUC EEA3 */
4186 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4187 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3;
4189 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4193 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4194 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
4195 printf("Device doesn't support scatter-gather. "
4200 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4202 /* Append data which is padded to a multiple */
4203 /* of the algorithms block size */
4204 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
4206 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
4207 plaintext_pad_len, 10, 0);
4209 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
4210 tdata->plaintext.data);
4212 /* Create ZUC session */
4213 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
4214 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4215 RTE_CRYPTO_CIPHER_ZUC_EEA3,
4216 tdata->key.data, tdata->key.len,
4217 tdata->cipher_iv.len);
4221 /* Clear mbuf payload */
4223 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
4225 /* Create ZUC operation */
4226 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data,
4227 tdata->cipher_iv.len, tdata->plaintext.len,
4232 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4234 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4236 ut_params->obuf = ut_params->op->sym->m_dst;
4237 if (ut_params->obuf)
4238 ciphertext = rte_pktmbuf_read(ut_params->obuf,
4239 0, plaintext_len, ciphertext_buffer);
4241 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
4242 0, plaintext_len, ciphertext_buffer);
4245 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
4248 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4250 tdata->ciphertext.data,
4251 tdata->validCipherLenInBits.len,
4252 "ZUC Ciphertext data not as expected");
4258 test_zuc_authentication(const struct wireless_test_data *tdata)
4260 struct crypto_testsuite_params *ts_params = &testsuite_params;
4261 struct crypto_unittest_params *ut_params = &unittest_params;
4264 unsigned plaintext_pad_len;
4265 unsigned plaintext_len;
4268 struct rte_cryptodev_sym_capability_idx cap_idx;
4270 /* Check if device supports ZUC EIA3 */
4271 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4272 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3;
4274 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
4278 /* Create ZUC session */
4279 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
4280 tdata->key.data, tdata->key.len,
4281 tdata->auth_iv.len, tdata->digest.len,
4282 RTE_CRYPTO_AUTH_OP_GENERATE,
4283 RTE_CRYPTO_AUTH_ZUC_EIA3);
4287 /* alloc mbuf and set payload */
4288 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4290 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4291 rte_pktmbuf_tailroom(ut_params->ibuf));
4293 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4294 /* Append data which is padded to a multiple of */
4295 /* the algorithms block size */
4296 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
4297 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4299 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4301 /* Create ZUC operation */
4302 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
4303 tdata->auth_iv.data, tdata->auth_iv.len,
4304 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4305 tdata->validAuthLenInBits.len,
4310 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4312 ut_params->obuf = ut_params->op->sym->m_src;
4313 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4314 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4315 + plaintext_pad_len;
4318 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4321 DIGEST_BYTE_LENGTH_KASUMI_F9,
4322 "ZUC Generated auth tag not as expected");
4328 test_kasumi_encryption_test_case_1(void)
4330 return test_kasumi_encryption(&kasumi_test_case_1);
4334 test_kasumi_encryption_test_case_1_sgl(void)
4336 return test_kasumi_encryption_sgl(&kasumi_test_case_1);
4340 test_kasumi_encryption_test_case_1_oop(void)
4342 return test_kasumi_encryption_oop(&kasumi_test_case_1);
4346 test_kasumi_encryption_test_case_1_oop_sgl(void)
4348 return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
4352 test_kasumi_encryption_test_case_2(void)
4354 return test_kasumi_encryption(&kasumi_test_case_2);
4358 test_kasumi_encryption_test_case_3(void)
4360 return test_kasumi_encryption(&kasumi_test_case_3);
4364 test_kasumi_encryption_test_case_4(void)
4366 return test_kasumi_encryption(&kasumi_test_case_4);
4370 test_kasumi_encryption_test_case_5(void)
4372 return test_kasumi_encryption(&kasumi_test_case_5);
4376 test_kasumi_decryption_test_case_1(void)
4378 return test_kasumi_decryption(&kasumi_test_case_1);
4382 test_kasumi_decryption_test_case_1_oop(void)
4384 return test_kasumi_decryption_oop(&kasumi_test_case_1);
4388 test_kasumi_decryption_test_case_2(void)
4390 return test_kasumi_decryption(&kasumi_test_case_2);
4394 test_kasumi_decryption_test_case_3(void)
4396 return test_kasumi_decryption(&kasumi_test_case_3);
4400 test_kasumi_decryption_test_case_4(void)
4402 return test_kasumi_decryption(&kasumi_test_case_4);
4406 test_kasumi_decryption_test_case_5(void)
4408 return test_kasumi_decryption(&kasumi_test_case_5);
4411 test_snow3g_encryption_test_case_1(void)
4413 return test_snow3g_encryption(&snow3g_test_case_1);
4417 test_snow3g_encryption_test_case_1_oop(void)
4419 return test_snow3g_encryption_oop(&snow3g_test_case_1);
4423 test_snow3g_encryption_test_case_1_oop_sgl(void)
4425 return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
4430 test_snow3g_encryption_test_case_1_offset_oop(void)
4432 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
4436 test_snow3g_encryption_test_case_2(void)
4438 return test_snow3g_encryption(&snow3g_test_case_2);
4442 test_snow3g_encryption_test_case_3(void)
4444 return test_snow3g_encryption(&snow3g_test_case_3);
4448 test_snow3g_encryption_test_case_4(void)
4450 return test_snow3g_encryption(&snow3g_test_case_4);
4454 test_snow3g_encryption_test_case_5(void)
4456 return test_snow3g_encryption(&snow3g_test_case_5);
4460 test_snow3g_decryption_test_case_1(void)
4462 return test_snow3g_decryption(&snow3g_test_case_1);
4466 test_snow3g_decryption_test_case_1_oop(void)
4468 return test_snow3g_decryption_oop(&snow3g_test_case_1);
4472 test_snow3g_decryption_test_case_2(void)
4474 return test_snow3g_decryption(&snow3g_test_case_2);
4478 test_snow3g_decryption_test_case_3(void)
4480 return test_snow3g_decryption(&snow3g_test_case_3);
4484 test_snow3g_decryption_test_case_4(void)
4486 return test_snow3g_decryption(&snow3g_test_case_4);
4490 test_snow3g_decryption_test_case_5(void)
4492 return test_snow3g_decryption(&snow3g_test_case_5);
4495 test_snow3g_cipher_auth_test_case_1(void)
4497 return test_snow3g_cipher_auth(&snow3g_test_case_3);
4501 test_snow3g_auth_cipher_test_case_1(void)
4503 return test_snow3g_auth_cipher(&snow3g_test_case_6);
4507 test_kasumi_auth_cipher_test_case_1(void)
4509 return test_kasumi_auth_cipher(&kasumi_test_case_3);
4513 test_kasumi_cipher_auth_test_case_1(void)
4515 return test_kasumi_cipher_auth(&kasumi_test_case_6);
4519 test_zuc_encryption_test_case_1(void)
4521 return test_zuc_encryption(&zuc_test_case_cipher_193b);
4525 test_zuc_encryption_test_case_2(void)
4527 return test_zuc_encryption(&zuc_test_case_cipher_800b);
4531 test_zuc_encryption_test_case_3(void)
4533 return test_zuc_encryption(&zuc_test_case_cipher_1570b);
4537 test_zuc_encryption_test_case_4(void)
4539 return test_zuc_encryption(&zuc_test_case_cipher_2798b);
4543 test_zuc_encryption_test_case_5(void)
4545 return test_zuc_encryption(&zuc_test_case_cipher_4019b);
4549 test_zuc_encryption_test_case_6_sgl(void)
4551 return test_zuc_encryption_sgl(&zuc_test_case_cipher_193b);
4555 test_zuc_hash_generate_test_case_1(void)
4557 return test_zuc_authentication(&zuc_test_case_auth_1b);
4561 test_zuc_hash_generate_test_case_2(void)
4563 return test_zuc_authentication(&zuc_test_case_auth_90b);
4567 test_zuc_hash_generate_test_case_3(void)
4569 return test_zuc_authentication(&zuc_test_case_auth_577b);
4573 test_zuc_hash_generate_test_case_4(void)
4575 return test_zuc_authentication(&zuc_test_case_auth_2079b);
4579 test_zuc_hash_generate_test_case_5(void)
4581 return test_zuc_authentication(&zuc_test_auth_5670b);
4585 test_zuc_hash_generate_test_case_6(void)
4587 return test_zuc_authentication(&zuc_test_case_auth_128b);
4591 test_zuc_hash_generate_test_case_7(void)
4593 return test_zuc_authentication(&zuc_test_case_auth_2080b);
4597 test_zuc_hash_generate_test_case_8(void)
4599 return test_zuc_authentication(&zuc_test_case_auth_584b);
4603 test_zuc_cipher_auth_test_case_1(void)
4605 return test_zuc_cipher_auth(&zuc_test_case_cipher_200b_auth_200b);
4609 test_zuc_cipher_auth_test_case_2(void)
4611 return test_zuc_cipher_auth(&zuc_test_case_cipher_800b_auth_120b);
4615 test_3DES_chain_qat_all(void)
4617 struct crypto_testsuite_params *ts_params = &testsuite_params;
4620 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4621 ts_params->op_mpool,
4622 ts_params->session_mpool,
4623 ts_params->valid_devs[0],
4624 rte_cryptodev_driver_id_get(
4625 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
4626 BLKCIPHER_3DES_CHAIN_TYPE);
4628 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4630 return TEST_SUCCESS;
4634 test_DES_cipheronly_qat_all(void)
4636 struct crypto_testsuite_params *ts_params = &testsuite_params;
4639 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4640 ts_params->op_mpool,
4641 ts_params->session_mpool,
4642 ts_params->valid_devs[0],
4643 rte_cryptodev_driver_id_get(
4644 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
4645 BLKCIPHER_DES_CIPHERONLY_TYPE);
4647 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4649 return TEST_SUCCESS;
4653 test_DES_docsis_openssl_all(void)
4655 struct crypto_testsuite_params *ts_params = &testsuite_params;
4658 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4659 ts_params->op_mpool,
4660 ts_params->session_mpool,
4661 ts_params->valid_devs[0],
4662 rte_cryptodev_driver_id_get(
4663 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
4664 BLKCIPHER_DES_DOCSIS_TYPE);
4666 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4668 return TEST_SUCCESS;
4672 test_3DES_chain_dpaa2_sec_all(void)
4674 struct crypto_testsuite_params *ts_params = &testsuite_params;
4677 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4678 ts_params->op_mpool,
4679 ts_params->session_mpool,
4680 ts_params->valid_devs[0],
4681 rte_cryptodev_driver_id_get(
4682 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
4683 BLKCIPHER_3DES_CHAIN_TYPE);
4685 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4687 return TEST_SUCCESS;
4691 test_3DES_cipheronly_dpaa2_sec_all(void)
4693 struct crypto_testsuite_params *ts_params = &testsuite_params;
4696 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4697 ts_params->op_mpool,
4698 ts_params->session_mpool,
4699 ts_params->valid_devs[0],
4700 rte_cryptodev_driver_id_get(
4701 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)),
4702 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4704 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4706 return TEST_SUCCESS;
4710 test_3DES_cipheronly_qat_all(void)
4712 struct crypto_testsuite_params *ts_params = &testsuite_params;
4715 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4716 ts_params->op_mpool,
4717 ts_params->session_mpool,
4718 ts_params->valid_devs[0],
4719 rte_cryptodev_driver_id_get(
4720 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)),
4721 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4723 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4725 return TEST_SUCCESS;
4729 test_3DES_chain_openssl_all(void)
4731 struct crypto_testsuite_params *ts_params = &testsuite_params;
4734 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4735 ts_params->op_mpool,
4736 ts_params->session_mpool,
4737 ts_params->valid_devs[0],
4738 rte_cryptodev_driver_id_get(
4739 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
4740 BLKCIPHER_3DES_CHAIN_TYPE);
4742 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4744 return TEST_SUCCESS;
4748 test_3DES_cipheronly_openssl_all(void)
4750 struct crypto_testsuite_params *ts_params = &testsuite_params;
4753 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4754 ts_params->op_mpool,
4755 ts_params->session_mpool,
4756 ts_params->valid_devs[0],
4757 rte_cryptodev_driver_id_get(
4758 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)),
4759 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4761 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4763 return TEST_SUCCESS;
4766 /* ***** AES-GCM Tests ***** */
4769 create_gcm_session(uint8_t dev_id, enum rte_crypto_aead_operation op,
4770 const uint8_t *key, const uint8_t key_len,
4771 const uint16_t aad_len, const uint8_t auth_len,
4774 uint8_t aead_key[key_len];
4776 struct crypto_testsuite_params *ts_params = &testsuite_params;
4777 struct crypto_unittest_params *ut_params = &unittest_params;
4779 memcpy(aead_key, key, key_len);
4781 /* Setup AEAD Parameters */
4782 ut_params->aead_xform.type = RTE_CRYPTO_SYM_XFORM_AEAD;
4783 ut_params->aead_xform.next = NULL;
4784 ut_params->aead_xform.aead.algo = RTE_CRYPTO_AEAD_AES_GCM;
4785 ut_params->aead_xform.aead.op = op;
4786 ut_params->aead_xform.aead.key.data = aead_key;
4787 ut_params->aead_xform.aead.key.length = key_len;
4788 ut_params->aead_xform.aead.iv.offset = IV_OFFSET;
4789 ut_params->aead_xform.aead.iv.length = iv_len;
4790 ut_params->aead_xform.aead.digest_length = auth_len;
4791 ut_params->aead_xform.aead.add_auth_data_length = aad_len;
4793 TEST_HEXDUMP(stdout, "key:", key, key_len);
4795 /* Create Crypto session*/
4796 ut_params->sess = rte_cryptodev_sym_session_create(
4797 ts_params->session_mpool);
4799 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
4800 &ut_params->aead_xform, ts_params->session_mpool);
4802 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4808 create_gcm_xforms(struct rte_crypto_op *op,
4809 enum rte_crypto_aead_operation aead_op,
4810 uint8_t *key, const uint8_t key_len,
4811 const uint8_t aad_len, const uint8_t auth_len,
4814 TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 1),
4815 "failed to allocate space for crypto transform");
4817 struct rte_crypto_sym_op *sym_op = op->sym;
4819 /* Setup AEAD Parameters */
4820 sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
4821 sym_op->xform->next = NULL;
4822 sym_op->xform->aead.algo = RTE_CRYPTO_AEAD_AES_GCM;
4823 sym_op->xform->aead.op = aead_op;
4824 sym_op->xform->aead.key.data = key;
4825 sym_op->xform->aead.key.length = key_len;
4826 sym_op->xform->aead.iv.offset = IV_OFFSET;
4827 sym_op->xform->aead.iv.length = iv_len;
4828 sym_op->xform->aead.digest_length = auth_len;
4829 sym_op->xform->aead.add_auth_data_length = aad_len;
4831 TEST_HEXDUMP(stdout, "key:", key, key_len);
4837 create_gcm_operation(enum rte_crypto_aead_operation op,
4838 const struct gcm_test_data *tdata)
4840 struct crypto_testsuite_params *ts_params = &testsuite_params;
4841 struct crypto_unittest_params *ut_params = &unittest_params;
4843 uint8_t *plaintext, *ciphertext;
4844 unsigned int aad_pad_len, plaintext_pad_len;
4846 /* Generate Crypto op data structure */
4847 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4848 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4849 TEST_ASSERT_NOT_NULL(ut_params->op,
4850 "Failed to allocate symmetric crypto operation struct");
4852 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4854 /* Append aad data */
4855 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
4856 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4858 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
4859 "no room to append aad");
4861 sym_op->aead.aad.phys_addr =
4862 rte_pktmbuf_mtophys(ut_params->ibuf);
4863 memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len);
4864 TEST_HEXDUMP(stdout, "aad:", sym_op->aead.aad.data,
4867 /* Append IV at the end of the crypto operation*/
4868 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
4869 uint8_t *, IV_OFFSET);
4871 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
4872 TEST_HEXDUMP(stdout, "iv:", iv_ptr,
4875 /* Append plaintext/ciphertext */
4876 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
4877 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4878 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4880 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
4882 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
4883 TEST_HEXDUMP(stdout, "plaintext:", plaintext,
4884 tdata->plaintext.len);
4886 if (ut_params->obuf) {
4887 ciphertext = (uint8_t *)rte_pktmbuf_append(
4889 plaintext_pad_len + aad_pad_len);
4890 TEST_ASSERT_NOT_NULL(ciphertext,
4891 "no room to append ciphertext");
4893 memset(ciphertext + aad_pad_len, 0,
4894 tdata->ciphertext.len);
4897 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
4898 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4900 TEST_ASSERT_NOT_NULL(ciphertext,
4901 "no room to append ciphertext");
4903 memcpy(ciphertext, tdata->ciphertext.data,
4904 tdata->ciphertext.len);
4905 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext,
4906 tdata->ciphertext.len);
4908 if (ut_params->obuf) {
4909 plaintext = (uint8_t *)rte_pktmbuf_append(
4911 plaintext_pad_len + aad_pad_len);
4912 TEST_ASSERT_NOT_NULL(plaintext,
4913 "no room to append plaintext");
4915 memset(plaintext + aad_pad_len, 0,
4916 tdata->plaintext.len);
4920 /* Append digest data */
4921 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
4922 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
4923 ut_params->obuf ? ut_params->obuf :
4925 tdata->auth_tag.len);
4926 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
4927 "no room to append digest");
4928 memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len);
4929 sym_op->aead.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4930 ut_params->obuf ? ut_params->obuf :
4935 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append(
4936 ut_params->ibuf, tdata->auth_tag.len);
4937 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
4938 "no room to append digest");
4939 sym_op->aead.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4941 plaintext_pad_len + aad_pad_len);
4943 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
4944 tdata->auth_tag.len);
4945 TEST_HEXDUMP(stdout, "digest:",
4946 sym_op->aead.digest.data,
4947 tdata->auth_tag.len);
4950 sym_op->aead.data.length = tdata->plaintext.len;
4951 sym_op->aead.data.offset = aad_pad_len;
4957 test_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
4959 struct crypto_testsuite_params *ts_params = &testsuite_params;
4960 struct crypto_unittest_params *ut_params = &unittest_params;
4963 uint8_t *ciphertext, *auth_tag;
4964 uint16_t plaintext_pad_len;
4967 /* Create GCM session */
4968 retval = create_gcm_session(ts_params->valid_devs[0],
4969 RTE_CRYPTO_AEAD_OP_ENCRYPT,
4970 tdata->key.data, tdata->key.len,
4971 tdata->aad.len, tdata->auth_tag.len,
4976 if (tdata->aad.len > MBUF_SIZE) {
4977 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
4978 /* Populate full size of add data */
4979 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
4980 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
4982 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4984 /* clear mbuf payload */
4985 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4986 rte_pktmbuf_tailroom(ut_params->ibuf));
4988 /* Create GCM operation */
4989 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
4993 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4995 ut_params->op->sym->m_src = ut_params->ibuf;
4997 /* Process crypto operation */
4998 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4999 ut_params->op), "failed to process sym crypto op");
5001 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5002 "crypto op processing failed");
5004 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5006 if (ut_params->op->sym->m_dst) {
5007 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
5009 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
5010 uint8_t *, plaintext_pad_len);
5012 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
5014 ut_params->op->sym->cipher.data.offset);
5015 auth_tag = ciphertext + plaintext_pad_len;
5018 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5019 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5022 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5024 tdata->ciphertext.data,
5025 tdata->ciphertext.len,
5026 "GCM Ciphertext data not as expected");
5028 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5030 tdata->auth_tag.data,
5031 tdata->auth_tag.len,
5032 "GCM Generated auth tag not as expected");
5039 test_AES_GCM_authenticated_encryption_test_case_1(void)
5041 return test_AES_GCM_authenticated_encryption(&gcm_test_case_1);
5045 test_AES_GCM_authenticated_encryption_test_case_2(void)
5047 return test_AES_GCM_authenticated_encryption(&gcm_test_case_2);
5051 test_AES_GCM_authenticated_encryption_test_case_3(void)
5053 return test_AES_GCM_authenticated_encryption(&gcm_test_case_3);
5057 test_AES_GCM_authenticated_encryption_test_case_4(void)
5059 return test_AES_GCM_authenticated_encryption(&gcm_test_case_4);
5063 test_AES_GCM_authenticated_encryption_test_case_5(void)
5065 return test_AES_GCM_authenticated_encryption(&gcm_test_case_5);
5069 test_AES_GCM_authenticated_encryption_test_case_6(void)
5071 return test_AES_GCM_authenticated_encryption(&gcm_test_case_6);
5075 test_AES_GCM_authenticated_encryption_test_case_7(void)
5077 return test_AES_GCM_authenticated_encryption(&gcm_test_case_7);
5081 test_AES_GCM_auth_encryption_test_case_192_1(void)
5083 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_1);
5087 test_AES_GCM_auth_encryption_test_case_192_2(void)
5089 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_2);
5093 test_AES_GCM_auth_encryption_test_case_192_3(void)
5095 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_3);
5099 test_AES_GCM_auth_encryption_test_case_192_4(void)
5101 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_4);
5105 test_AES_GCM_auth_encryption_test_case_192_5(void)
5107 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_5);
5111 test_AES_GCM_auth_encryption_test_case_192_6(void)
5113 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_6);
5117 test_AES_GCM_auth_encryption_test_case_192_7(void)
5119 return test_AES_GCM_authenticated_encryption(&gcm_test_case_192_7);
5123 test_AES_GCM_auth_encryption_test_case_256_1(void)
5125 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_1);
5129 test_AES_GCM_auth_encryption_test_case_256_2(void)
5131 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_2);
5135 test_AES_GCM_auth_encryption_test_case_256_3(void)
5137 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_3);
5141 test_AES_GCM_auth_encryption_test_case_256_4(void)
5143 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_4);
5147 test_AES_GCM_auth_encryption_test_case_256_5(void)
5149 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_5);
5153 test_AES_GCM_auth_encryption_test_case_256_6(void)
5155 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_6);
5159 test_AES_GCM_auth_encryption_test_case_256_7(void)
5161 return test_AES_GCM_authenticated_encryption(&gcm_test_case_256_7);
5165 test_AES_GCM_auth_encryption_test_case_aad_1(void)
5167 return test_AES_GCM_authenticated_encryption(&gcm_test_case_aad_1);
5171 test_AES_GCM_auth_encryption_test_case_aad_2(void)
5173 return test_AES_GCM_authenticated_encryption(&gcm_test_case_aad_2);
5177 test_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
5179 struct crypto_testsuite_params *ts_params = &testsuite_params;
5180 struct crypto_unittest_params *ut_params = &unittest_params;
5186 /* Create GCM session */
5187 retval = create_gcm_session(ts_params->valid_devs[0],
5188 RTE_CRYPTO_AEAD_OP_DECRYPT,
5189 tdata->key.data, tdata->key.len,
5190 tdata->aad.len, tdata->auth_tag.len,
5195 /* alloc mbuf and set payload */
5196 if (tdata->aad.len > MBUF_SIZE) {
5197 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
5198 /* Populate full size of add data */
5199 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
5200 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
5202 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5204 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5205 rte_pktmbuf_tailroom(ut_params->ibuf));
5207 /* Create GCM operation */
5208 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
5212 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5214 ut_params->op->sym->m_src = ut_params->ibuf;
5216 /* Process crypto operation */
5217 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5218 ut_params->op), "failed to process sym crypto op");
5220 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5221 "crypto op processing failed");
5223 if (ut_params->op->sym->m_dst)
5224 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
5227 plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
5229 ut_params->op->sym->cipher.data.offset);
5231 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5234 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5236 tdata->plaintext.data,
5237 tdata->plaintext.len,
5238 "GCM plaintext data not as expected");
5240 TEST_ASSERT_EQUAL(ut_params->op->status,
5241 RTE_CRYPTO_OP_STATUS_SUCCESS,
5242 "GCM authentication failed");
5247 test_AES_GCM_authenticated_decryption_test_case_1(void)
5249 return test_AES_GCM_authenticated_decryption(&gcm_test_case_1);
5253 test_AES_GCM_authenticated_decryption_test_case_2(void)
5255 return test_AES_GCM_authenticated_decryption(&gcm_test_case_2);
5259 test_AES_GCM_authenticated_decryption_test_case_3(void)
5261 return test_AES_GCM_authenticated_decryption(&gcm_test_case_3);
5265 test_AES_GCM_authenticated_decryption_test_case_4(void)
5267 return test_AES_GCM_authenticated_decryption(&gcm_test_case_4);
5271 test_AES_GCM_authenticated_decryption_test_case_5(void)
5273 return test_AES_GCM_authenticated_decryption(&gcm_test_case_5);
5277 test_AES_GCM_authenticated_decryption_test_case_6(void)
5279 return test_AES_GCM_authenticated_decryption(&gcm_test_case_6);
5283 test_AES_GCM_authenticated_decryption_test_case_7(void)
5285 return test_AES_GCM_authenticated_decryption(&gcm_test_case_7);
5289 test_AES_GCM_auth_decryption_test_case_192_1(void)
5291 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_1);
5295 test_AES_GCM_auth_decryption_test_case_192_2(void)
5297 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_2);
5301 test_AES_GCM_auth_decryption_test_case_192_3(void)
5303 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_3);
5307 test_AES_GCM_auth_decryption_test_case_192_4(void)
5309 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_4);
5313 test_AES_GCM_auth_decryption_test_case_192_5(void)
5315 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_5);
5319 test_AES_GCM_auth_decryption_test_case_192_6(void)
5321 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_6);
5325 test_AES_GCM_auth_decryption_test_case_192_7(void)
5327 return test_AES_GCM_authenticated_decryption(&gcm_test_case_192_7);
5331 test_AES_GCM_auth_decryption_test_case_256_1(void)
5333 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_1);
5337 test_AES_GCM_auth_decryption_test_case_256_2(void)
5339 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_2);
5343 test_AES_GCM_auth_decryption_test_case_256_3(void)
5345 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_3);
5349 test_AES_GCM_auth_decryption_test_case_256_4(void)
5351 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_4);
5355 test_AES_GCM_auth_decryption_test_case_256_5(void)
5357 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_5);
5361 test_AES_GCM_auth_decryption_test_case_256_6(void)
5363 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_6);
5367 test_AES_GCM_auth_decryption_test_case_256_7(void)
5369 return test_AES_GCM_authenticated_decryption(&gcm_test_case_256_7);
5373 test_AES_GCM_auth_decryption_test_case_aad_1(void)
5375 return test_AES_GCM_authenticated_decryption(&gcm_test_case_aad_1);
5379 test_AES_GCM_auth_decryption_test_case_aad_2(void)
5381 return test_AES_GCM_authenticated_decryption(&gcm_test_case_aad_2);
5385 test_AES_GCM_authenticated_encryption_oop(const struct gcm_test_data *tdata)
5387 struct crypto_testsuite_params *ts_params = &testsuite_params;
5388 struct crypto_unittest_params *ut_params = &unittest_params;
5391 uint8_t *ciphertext, *auth_tag;
5392 uint16_t plaintext_pad_len;
5394 /* Create GCM session */
5395 retval = create_gcm_session(ts_params->valid_devs[0],
5396 RTE_CRYPTO_AEAD_OP_ENCRYPT,
5397 tdata->key.data, tdata->key.len,
5398 tdata->aad.len, tdata->auth_tag.len,
5403 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5404 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5406 /* clear mbuf payload */
5407 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5408 rte_pktmbuf_tailroom(ut_params->ibuf));
5409 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5410 rte_pktmbuf_tailroom(ut_params->obuf));
5412 /* Create GCM operation */
5413 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
5417 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5419 ut_params->op->sym->m_src = ut_params->ibuf;
5420 ut_params->op->sym->m_dst = ut_params->obuf;
5422 /* Process crypto operation */
5423 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5424 ut_params->op), "failed to process sym crypto op");
5426 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5427 "crypto op processing failed");
5429 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5431 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5432 ut_params->op->sym->cipher.data.offset);
5433 auth_tag = ciphertext + plaintext_pad_len;
5435 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5436 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5439 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5441 tdata->ciphertext.data,
5442 tdata->ciphertext.len,
5443 "GCM Ciphertext data not as expected");
5445 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5447 tdata->auth_tag.data,
5448 tdata->auth_tag.len,
5449 "GCM Generated auth tag not as expected");
5456 test_AES_GCM_authenticated_encryption_oop_test_case_1(void)
5458 return test_AES_GCM_authenticated_encryption_oop(&gcm_test_case_5);
5462 test_AES_GCM_authenticated_decryption_oop(const struct gcm_test_data *tdata)
5464 struct crypto_testsuite_params *ts_params = &testsuite_params;
5465 struct crypto_unittest_params *ut_params = &unittest_params;
5470 /* Create GCM session */
5471 retval = create_gcm_session(ts_params->valid_devs[0],
5472 RTE_CRYPTO_AEAD_OP_DECRYPT,
5473 tdata->key.data, tdata->key.len,
5474 tdata->aad.len, tdata->auth_tag.len,
5479 /* alloc mbuf and set payload */
5480 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5481 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5483 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5484 rte_pktmbuf_tailroom(ut_params->ibuf));
5485 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5486 rte_pktmbuf_tailroom(ut_params->obuf));
5488 /* Create GCM operation */
5489 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
5493 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5495 ut_params->op->sym->m_src = ut_params->ibuf;
5496 ut_params->op->sym->m_dst = ut_params->obuf;
5498 /* Process crypto operation */
5499 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5500 ut_params->op), "failed to process sym crypto op");
5502 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5503 "crypto op processing failed");
5505 plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5506 ut_params->op->sym->cipher.data.offset);
5508 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5511 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5513 tdata->plaintext.data,
5514 tdata->plaintext.len,
5515 "GCM plaintext data not as expected");
5517 TEST_ASSERT_EQUAL(ut_params->op->status,
5518 RTE_CRYPTO_OP_STATUS_SUCCESS,
5519 "GCM authentication failed");
5524 test_AES_GCM_authenticated_decryption_oop_test_case_1(void)
5526 return test_AES_GCM_authenticated_decryption_oop(&gcm_test_case_5);
5530 test_AES_GCM_authenticated_encryption_sessionless(
5531 const struct gcm_test_data *tdata)
5533 struct crypto_testsuite_params *ts_params = &testsuite_params;
5534 struct crypto_unittest_params *ut_params = &unittest_params;
5537 uint8_t *ciphertext, *auth_tag;
5538 uint16_t plaintext_pad_len;
5539 uint8_t key[tdata->key.len + 1];
5541 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5543 /* clear mbuf payload */
5544 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5545 rte_pktmbuf_tailroom(ut_params->ibuf));
5547 /* Create GCM operation */
5548 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata);
5552 /* Create GCM xforms */
5553 memcpy(key, tdata->key.data, tdata->key.len);
5554 retval = create_gcm_xforms(ut_params->op,
5555 RTE_CRYPTO_AEAD_OP_ENCRYPT,
5556 key, tdata->key.len,
5557 tdata->aad.len, tdata->auth_tag.len,
5562 ut_params->op->sym->m_src = ut_params->ibuf;
5564 TEST_ASSERT_EQUAL(ut_params->op->sess_type,
5565 RTE_CRYPTO_OP_SESSIONLESS,
5566 "crypto op session type not sessionless");
5568 /* Process crypto operation */
5569 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5570 ut_params->op), "failed to process sym crypto op");
5572 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5574 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5575 "crypto op status not success");
5577 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5579 ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5580 ut_params->op->sym->cipher.data.offset);
5581 auth_tag = ciphertext + plaintext_pad_len;
5583 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5584 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5587 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5589 tdata->ciphertext.data,
5590 tdata->ciphertext.len,
5591 "GCM Ciphertext data not as expected");
5593 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5595 tdata->auth_tag.data,
5596 tdata->auth_tag.len,
5597 "GCM Generated auth tag not as expected");
5604 test_AES_GCM_authenticated_encryption_sessionless_test_case_1(void)
5606 return test_AES_GCM_authenticated_encryption_sessionless(
5611 test_AES_GCM_authenticated_decryption_sessionless(
5612 const struct gcm_test_data *tdata)
5614 struct crypto_testsuite_params *ts_params = &testsuite_params;
5615 struct crypto_unittest_params *ut_params = &unittest_params;
5619 uint8_t key[tdata->key.len + 1];
5621 /* alloc mbuf and set payload */
5622 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5624 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5625 rte_pktmbuf_tailroom(ut_params->ibuf));
5627 /* Create GCM operation */
5628 retval = create_gcm_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata);
5632 /* Create GCM xforms */
5633 memcpy(key, tdata->key.data, tdata->key.len);
5634 retval = create_gcm_xforms(ut_params->op,
5635 RTE_CRYPTO_AEAD_OP_DECRYPT,
5636 key, tdata->key.len,
5637 tdata->aad.len, tdata->auth_tag.len,
5642 ut_params->op->sym->m_src = ut_params->ibuf;
5644 TEST_ASSERT_EQUAL(ut_params->op->sess_type,
5645 RTE_CRYPTO_OP_SESSIONLESS,
5646 "crypto op session type not sessionless");
5648 /* Process crypto operation */
5649 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5650 ut_params->op), "failed to process sym crypto op");
5652 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5654 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5655 "crypto op status not success");
5657 plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5658 ut_params->op->sym->cipher.data.offset);
5660 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5663 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5665 tdata->plaintext.data,
5666 tdata->plaintext.len,
5667 "GCM plaintext data not as expected");
5669 TEST_ASSERT_EQUAL(ut_params->op->status,
5670 RTE_CRYPTO_OP_STATUS_SUCCESS,
5671 "GCM authentication failed");
5676 test_AES_GCM_authenticated_decryption_sessionless_test_case_1(void)
5678 return test_AES_GCM_authenticated_decryption_sessionless(
5685 struct crypto_testsuite_params *ts_params = &testsuite_params;
5686 struct rte_cryptodev_stats stats;
5687 struct rte_cryptodev *dev;
5688 cryptodev_stats_get_t temp_pfn;
5690 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5691 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
5692 &stats) == -ENODEV),
5693 "rte_cryptodev_stats_get invalid dev failed");
5694 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
5695 "rte_cryptodev_stats_get invalid Param failed");
5696 dev = &rte_cryptodevs[ts_params->valid_devs[0]];
5697 temp_pfn = dev->dev_ops->stats_get;
5698 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
5699 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
5701 "rte_cryptodev_stats_get invalid Param failed");
5702 dev->dev_ops->stats_get = temp_pfn;
5704 /* Test expected values */
5706 test_AES_CBC_HMAC_SHA1_encrypt_digest();
5708 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5710 "rte_cryptodev_stats_get failed");
5711 TEST_ASSERT((stats.enqueued_count == 1),
5712 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5713 TEST_ASSERT((stats.dequeued_count == 1),
5714 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5715 TEST_ASSERT((stats.enqueue_err_count == 0),
5716 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5717 TEST_ASSERT((stats.dequeue_err_count == 0),
5718 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5720 /* invalid device but should ignore and not reset device stats*/
5721 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
5722 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5724 "rte_cryptodev_stats_get failed");
5725 TEST_ASSERT((stats.enqueued_count == 1),
5726 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5728 /* check that a valid reset clears stats */
5729 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5730 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5732 "rte_cryptodev_stats_get failed");
5733 TEST_ASSERT((stats.enqueued_count == 0),
5734 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5735 TEST_ASSERT((stats.dequeued_count == 0),
5736 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5738 return TEST_SUCCESS;
5741 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
5742 struct crypto_unittest_params *ut_params,
5743 enum rte_crypto_auth_operation op,
5744 const struct HMAC_MD5_vector *test_case)
5748 memcpy(key, test_case->key.data, test_case->key.len);
5750 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5751 ut_params->auth_xform.next = NULL;
5752 ut_params->auth_xform.auth.op = op;
5754 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
5756 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
5757 ut_params->auth_xform.auth.key.length = test_case->key.len;
5758 ut_params->auth_xform.auth.key.data = key;
5760 ut_params->sess = rte_cryptodev_sym_session_create(
5761 ts_params->session_mpool);
5763 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
5764 ut_params->sess, &ut_params->auth_xform,
5765 ts_params->session_mpool);
5767 if (ut_params->sess == NULL)
5770 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5772 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5773 rte_pktmbuf_tailroom(ut_params->ibuf));
5778 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
5779 const struct HMAC_MD5_vector *test_case,
5780 uint8_t **plaintext)
5782 uint16_t plaintext_pad_len;
5784 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5786 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5789 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5791 memcpy(*plaintext, test_case->plaintext.data,
5792 test_case->plaintext.len);
5794 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5795 ut_params->ibuf, MD5_DIGEST_LEN);
5796 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5797 "no room to append digest");
5798 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5799 ut_params->ibuf, plaintext_pad_len);
5801 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
5802 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
5803 test_case->auth_tag.len);
5806 sym_op->auth.data.offset = 0;
5807 sym_op->auth.data.length = test_case->plaintext.len;
5809 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5810 ut_params->op->sym->m_src = ut_params->ibuf;
5816 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
5818 uint16_t plaintext_pad_len;
5819 uint8_t *plaintext, *auth_tag;
5821 struct crypto_testsuite_params *ts_params = &testsuite_params;
5822 struct crypto_unittest_params *ut_params = &unittest_params;
5824 if (MD5_HMAC_create_session(ts_params, ut_params,
5825 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
5828 /* Generate Crypto op data structure */
5829 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5830 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5831 TEST_ASSERT_NOT_NULL(ut_params->op,
5832 "Failed to allocate symmetric crypto operation struct");
5834 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5837 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5840 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5841 ut_params->op), "failed to process sym crypto op");
5843 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5844 "crypto op processing failed");
5846 if (ut_params->op->sym->m_dst) {
5847 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
5848 uint8_t *, plaintext_pad_len);
5850 auth_tag = plaintext + plaintext_pad_len;
5853 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5855 test_case->auth_tag.data,
5856 test_case->auth_tag.len,
5857 "HMAC_MD5 generated tag not as expected");
5859 return TEST_SUCCESS;
5863 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
5867 struct crypto_testsuite_params *ts_params = &testsuite_params;
5868 struct crypto_unittest_params *ut_params = &unittest_params;
5870 if (MD5_HMAC_create_session(ts_params, ut_params,
5871 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
5875 /* Generate Crypto op data structure */
5876 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5877 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5878 TEST_ASSERT_NOT_NULL(ut_params->op,
5879 "Failed to allocate symmetric crypto operation struct");
5881 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5884 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5885 ut_params->op), "failed to process sym crypto op");
5887 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5888 "HMAC_MD5 crypto op processing failed");
5890 return TEST_SUCCESS;
5894 test_MD5_HMAC_generate_case_1(void)
5896 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
5900 test_MD5_HMAC_verify_case_1(void)
5902 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
5906 test_MD5_HMAC_generate_case_2(void)
5908 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
5912 test_MD5_HMAC_verify_case_2(void)
5914 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
5918 test_multi_session(void)
5920 struct crypto_testsuite_params *ts_params = &testsuite_params;
5921 struct crypto_unittest_params *ut_params = &unittest_params;
5923 struct rte_cryptodev_info dev_info;
5924 struct rte_cryptodev_sym_session **sessions;
5928 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
5929 aes_cbc_key, hmac_sha512_key);
5932 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5934 sessions = rte_malloc(NULL,
5935 (sizeof(struct rte_cryptodev_sym_session *) *
5936 dev_info.sym.max_nb_sessions) + 1, 0);
5938 /* Create multiple crypto sessions*/
5939 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
5941 sessions[i] = rte_cryptodev_sym_session_create(
5942 ts_params->session_mpool);
5944 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
5945 sessions[i], &ut_params->auth_xform,
5946 ts_params->session_mpool);
5947 TEST_ASSERT_NOT_NULL(sessions[i],
5948 "Session creation failed at session number %u",
5951 /* Attempt to send a request on each session */
5952 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
5956 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
5957 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
5959 "Failed to perform decrypt on request number %u.", i);
5960 /* free crypto operation structure */
5962 rte_crypto_op_free(ut_params->op);
5965 * free mbuf - both obuf and ibuf are usually the same,
5966 * so check if they point at the same address is necessary,
5967 * to avoid freeing the mbuf twice.
5969 if (ut_params->obuf) {
5970 rte_pktmbuf_free(ut_params->obuf);
5971 if (ut_params->ibuf == ut_params->obuf)
5972 ut_params->ibuf = 0;
5973 ut_params->obuf = 0;
5975 if (ut_params->ibuf) {
5976 rte_pktmbuf_free(ut_params->ibuf);
5977 ut_params->ibuf = 0;
5981 /* Next session create should fail */
5982 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
5983 sessions[i], &ut_params->auth_xform,
5984 ts_params->session_mpool);
5985 TEST_ASSERT_NULL(sessions[i],
5986 "Session creation succeeded unexpectedly!");
5988 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
5989 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
5991 rte_cryptodev_sym_session_free(sessions[i]);
5996 return TEST_SUCCESS;
5999 struct multi_session_params {
6000 struct crypto_unittest_params ut_params;
6001 uint8_t *cipher_key;
6003 const uint8_t *cipher;
6004 const uint8_t *digest;
6008 #define MB_SESSION_NUMBER 3
6011 test_multi_session_random_usage(void)
6013 struct crypto_testsuite_params *ts_params = &testsuite_params;
6014 struct rte_cryptodev_info dev_info;
6015 struct rte_cryptodev_sym_session **sessions;
6017 struct multi_session_params ut_paramz[] = {
6020 .cipher_key = ms_aes_cbc_key0,
6021 .hmac_key = ms_hmac_key0,
6022 .cipher = ms_aes_cbc_cipher0,
6023 .digest = ms_hmac_digest0,
6024 .iv = ms_aes_cbc_iv0
6027 .cipher_key = ms_aes_cbc_key1,
6028 .hmac_key = ms_hmac_key1,
6029 .cipher = ms_aes_cbc_cipher1,
6030 .digest = ms_hmac_digest1,
6031 .iv = ms_aes_cbc_iv1
6034 .cipher_key = ms_aes_cbc_key2,
6035 .hmac_key = ms_hmac_key2,
6036 .cipher = ms_aes_cbc_cipher2,
6037 .digest = ms_hmac_digest2,
6038 .iv = ms_aes_cbc_iv2
6043 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
6045 sessions = rte_malloc(NULL,
6046 (sizeof(struct rte_cryptodev_sym_session *)
6047 * dev_info.sym.max_nb_sessions) + 1, 0);
6049 for (i = 0; i < MB_SESSION_NUMBER; i++) {
6050 sessions[i] = rte_cryptodev_sym_session_create(
6051 ts_params->session_mpool);
6053 rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
6054 sizeof(struct crypto_unittest_params));
6056 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
6057 &ut_paramz[i].ut_params,
6058 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
6060 /* Create multiple crypto sessions*/
6061 rte_cryptodev_sym_session_init(
6062 ts_params->valid_devs[0],
6064 &ut_paramz[i].ut_params.auth_xform,
6065 ts_params->session_mpool);
6067 TEST_ASSERT_NOT_NULL(sessions[i],
6068 "Session creation failed at session number %u",
6074 for (i = 0; i < 40000; i++) {
6076 j = rand() % MB_SESSION_NUMBER;
6078 TEST_ASSERT_SUCCESS(
6079 test_AES_CBC_HMAC_SHA512_decrypt_perform(
6081 &ut_paramz[j].ut_params,
6082 ts_params, ut_paramz[j].cipher,
6083 ut_paramz[j].digest,
6085 "Failed to perform decrypt on request number %u.", i);
6087 if (ut_paramz[j].ut_params.op)
6088 rte_crypto_op_free(ut_paramz[j].ut_params.op);
6091 * free mbuf - both obuf and ibuf are usually the same,
6092 * so check if they point at the same address is necessary,
6093 * to avoid freeing the mbuf twice.
6095 if (ut_paramz[j].ut_params.obuf) {
6096 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
6097 if (ut_paramz[j].ut_params.ibuf
6098 == ut_paramz[j].ut_params.obuf)
6099 ut_paramz[j].ut_params.ibuf = 0;
6100 ut_paramz[j].ut_params.obuf = 0;
6102 if (ut_paramz[j].ut_params.ibuf) {
6103 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
6104 ut_paramz[j].ut_params.ibuf = 0;
6108 for (i = 0; i < MB_SESSION_NUMBER; i++) {
6109 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0],
6111 rte_cryptodev_sym_session_free(sessions[i]);
6116 return TEST_SUCCESS;
6120 test_null_cipher_only_operation(void)
6122 struct crypto_testsuite_params *ts_params = &testsuite_params;
6123 struct crypto_unittest_params *ut_params = &unittest_params;
6125 /* Generate test mbuf data and space for digest */
6126 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
6127 catch_22_quote, QUOTE_512_BYTES, 0);
6129 /* Setup Cipher Parameters */
6130 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6131 ut_params->cipher_xform.next = NULL;
6133 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
6134 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6136 ut_params->sess = rte_cryptodev_sym_session_create(
6137 ts_params->session_mpool);
6139 /* Create Crypto session*/
6140 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6142 &ut_params->cipher_xform,
6143 ts_params->session_mpool);
6144 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6146 /* Generate Crypto op data structure */
6147 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6148 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6149 TEST_ASSERT_NOT_NULL(ut_params->op,
6150 "Failed to allocate symmetric crypto operation struct");
6152 /* Set crypto operation data parameters */
6153 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6155 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6157 /* set crypto operation source mbuf */
6158 sym_op->m_src = ut_params->ibuf;
6160 sym_op->cipher.data.offset = 0;
6161 sym_op->cipher.data.length = QUOTE_512_BYTES;
6163 /* Process crypto operation */
6164 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6166 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
6168 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6169 "crypto operation processing failed");
6172 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6173 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
6176 "Ciphertext data not as expected");
6178 return TEST_SUCCESS;
6182 test_null_auth_only_operation(void)
6184 struct crypto_testsuite_params *ts_params = &testsuite_params;
6185 struct crypto_unittest_params *ut_params = &unittest_params;
6187 /* Generate test mbuf data and space for digest */
6188 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
6189 catch_22_quote, QUOTE_512_BYTES, 0);
6191 /* Setup HMAC Parameters */
6192 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6193 ut_params->auth_xform.next = NULL;
6195 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
6196 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6198 ut_params->sess = rte_cryptodev_sym_session_create(
6199 ts_params->session_mpool);
6201 /* Create Crypto session*/
6202 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6203 ut_params->sess, &ut_params->auth_xform,
6204 ts_params->session_mpool);
6205 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6207 /* Generate Crypto op data structure */
6208 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6209 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6210 TEST_ASSERT_NOT_NULL(ut_params->op,
6211 "Failed to allocate symmetric crypto operation struct");
6213 /* Set crypto operation data parameters */
6214 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6216 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6218 sym_op->m_src = ut_params->ibuf;
6220 sym_op->auth.data.offset = 0;
6221 sym_op->auth.data.length = QUOTE_512_BYTES;
6223 /* Process crypto operation */
6224 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6226 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
6228 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6229 "crypto operation processing failed");
6231 return TEST_SUCCESS;
6235 test_null_cipher_auth_operation(void)
6237 struct crypto_testsuite_params *ts_params = &testsuite_params;
6238 struct crypto_unittest_params *ut_params = &unittest_params;
6240 /* Generate test mbuf data and space for digest */
6241 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
6242 catch_22_quote, QUOTE_512_BYTES, 0);
6244 /* Setup Cipher Parameters */
6245 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6246 ut_params->cipher_xform.next = &ut_params->auth_xform;
6248 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
6249 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6251 /* Setup HMAC Parameters */
6252 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6253 ut_params->auth_xform.next = NULL;
6255 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
6256 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6258 ut_params->sess = rte_cryptodev_sym_session_create(
6259 ts_params->session_mpool);
6261 /* Create Crypto session*/
6262 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6263 ut_params->sess, &ut_params->cipher_xform,
6264 ts_params->session_mpool);
6265 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6267 /* Generate Crypto op data structure */
6268 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6269 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6270 TEST_ASSERT_NOT_NULL(ut_params->op,
6271 "Failed to allocate symmetric crypto operation struct");
6273 /* Set crypto operation data parameters */
6274 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6276 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6278 sym_op->m_src = ut_params->ibuf;
6280 sym_op->cipher.data.offset = 0;
6281 sym_op->cipher.data.length = QUOTE_512_BYTES;
6283 sym_op->auth.data.offset = 0;
6284 sym_op->auth.data.length = QUOTE_512_BYTES;
6286 /* Process crypto operation */
6287 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6289 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
6291 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6292 "crypto operation processing failed");
6295 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6296 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
6299 "Ciphertext data not as expected");
6301 return TEST_SUCCESS;
6305 test_null_auth_cipher_operation(void)
6307 struct crypto_testsuite_params *ts_params = &testsuite_params;
6308 struct crypto_unittest_params *ut_params = &unittest_params;
6310 /* Generate test mbuf data and space for digest */
6311 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
6312 catch_22_quote, QUOTE_512_BYTES, 0);
6314 /* Setup Cipher Parameters */
6315 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6316 ut_params->cipher_xform.next = NULL;
6318 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
6319 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6321 /* Setup HMAC Parameters */
6322 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6323 ut_params->auth_xform.next = &ut_params->cipher_xform;
6325 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
6326 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6328 ut_params->sess = rte_cryptodev_sym_session_create(
6329 ts_params->session_mpool);
6331 /* Create Crypto session*/
6332 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6333 ut_params->sess, &ut_params->cipher_xform,
6334 ts_params->session_mpool);
6335 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6337 /* Generate Crypto op data structure */
6338 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6339 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6340 TEST_ASSERT_NOT_NULL(ut_params->op,
6341 "Failed to allocate symmetric crypto operation struct");
6343 /* Set crypto operation data parameters */
6344 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6346 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6348 sym_op->m_src = ut_params->ibuf;
6350 sym_op->cipher.data.offset = 0;
6351 sym_op->cipher.data.length = QUOTE_512_BYTES;
6353 sym_op->auth.data.offset = 0;
6354 sym_op->auth.data.length = QUOTE_512_BYTES;
6356 /* Process crypto operation */
6357 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6359 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
6361 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6362 "crypto operation processing failed");
6365 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6366 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
6369 "Ciphertext data not as expected");
6371 return TEST_SUCCESS;
6376 test_null_invalid_operation(void)
6378 struct crypto_testsuite_params *ts_params = &testsuite_params;
6379 struct crypto_unittest_params *ut_params = &unittest_params;
6382 /* Setup Cipher Parameters */
6383 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6384 ut_params->cipher_xform.next = NULL;
6386 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
6387 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6389 ut_params->sess = rte_cryptodev_sym_session_create(
6390 ts_params->session_mpool);
6392 /* Create Crypto session*/
6393 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6394 ut_params->sess, &ut_params->cipher_xform,
6395 ts_params->session_mpool);
6396 TEST_ASSERT(ret == -1,
6397 "Session creation succeeded unexpectedly");
6400 /* Setup HMAC Parameters */
6401 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6402 ut_params->auth_xform.next = NULL;
6404 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
6405 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6407 ut_params->sess = rte_cryptodev_sym_session_create(
6408 ts_params->session_mpool);
6410 /* Create Crypto session*/
6411 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6412 ut_params->sess, &ut_params->auth_xform,
6413 ts_params->session_mpool);
6414 TEST_ASSERT(ret == -1,
6415 "Session creation succeeded unexpectedly");
6417 return TEST_SUCCESS;
6421 #define NULL_BURST_LENGTH (32)
6424 test_null_burst_operation(void)
6426 struct crypto_testsuite_params *ts_params = &testsuite_params;
6427 struct crypto_unittest_params *ut_params = &unittest_params;
6429 unsigned i, burst_len = NULL_BURST_LENGTH;
6431 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
6432 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
6434 /* Setup Cipher Parameters */
6435 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6436 ut_params->cipher_xform.next = &ut_params->auth_xform;
6438 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
6439 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6441 /* Setup HMAC Parameters */
6442 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6443 ut_params->auth_xform.next = NULL;
6445 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
6446 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6448 ut_params->sess = rte_cryptodev_sym_session_create(
6449 ts_params->session_mpool);
6451 /* Create Crypto session*/
6452 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
6453 ut_params->sess, &ut_params->cipher_xform,
6454 ts_params->session_mpool);
6455 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6457 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
6458 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
6459 burst_len, "failed to generate burst of crypto ops");
6461 /* Generate an operation for each mbuf in burst */
6462 for (i = 0; i < burst_len; i++) {
6463 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6465 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
6467 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
6471 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
6473 burst[i]->sym->m_src = m;
6476 /* Process crypto operation */
6477 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
6478 0, burst, burst_len),
6480 "Error enqueuing burst");
6482 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
6483 0, burst_dequeued, burst_len),
6485 "Error dequeuing burst");
6488 for (i = 0; i < burst_len; i++) {
6490 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
6491 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
6493 "data not as expected");
6495 rte_pktmbuf_free(burst[i]->sym->m_src);
6496 rte_crypto_op_free(burst[i]);
6499 return TEST_SUCCESS;
6503 generate_gmac_large_plaintext(uint8_t *data)
6507 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
6508 memcpy(&data[i], &data[0], 32);
6512 create_gmac_operation(enum rte_crypto_auth_operation op,
6513 const struct gmac_test_data *tdata)
6515 struct crypto_testsuite_params *ts_params = &testsuite_params;
6516 struct crypto_unittest_params *ut_params = &unittest_params;
6517 struct rte_crypto_sym_op *sym_op;
6519 uint32_t plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
6521 /* Generate Crypto op data structure */
6522 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6523 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6524 TEST_ASSERT_NOT_NULL(ut_params->op,
6525 "Failed to allocate symmetric crypto operation struct");
6527 sym_op = ut_params->op->sym;
6529 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6530 ut_params->ibuf, tdata->gmac_tag.len);
6531 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6532 "no room to append digest");
6534 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6535 ut_params->ibuf, plaintext_pad_len);
6537 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
6538 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
6539 tdata->gmac_tag.len);
6540 TEST_HEXDUMP(stdout, "digest:",
6541 sym_op->auth.digest.data,
6542 tdata->gmac_tag.len);
6545 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
6546 uint8_t *, IV_OFFSET);
6548 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len);
6550 TEST_HEXDUMP(stdout, "iv:", iv_ptr, tdata->iv.len);
6552 sym_op->cipher.data.length = 0;
6553 sym_op->cipher.data.offset = 0;
6555 sym_op->auth.data.offset = 0;
6556 sym_op->auth.data.length = tdata->plaintext.len;
6561 static int create_gmac_session(uint8_t dev_id,
6562 const struct gmac_test_data *tdata,
6563 enum rte_crypto_auth_operation auth_op)
6565 uint8_t auth_key[tdata->key.len];
6567 struct crypto_testsuite_params *ts_params = &testsuite_params;
6568 struct crypto_unittest_params *ut_params = &unittest_params;
6570 memcpy(auth_key, tdata->key.data, tdata->key.len);
6572 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6573 ut_params->auth_xform.next = NULL;
6575 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
6576 ut_params->auth_xform.auth.op = auth_op;
6577 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
6578 ut_params->auth_xform.auth.key.length = tdata->key.len;
6579 ut_params->auth_xform.auth.key.data = auth_key;
6580 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
6581 ut_params->auth_xform.auth.iv.length = tdata->iv.len;
6584 ut_params->sess = rte_cryptodev_sym_session_create(
6585 ts_params->session_mpool);
6587 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
6588 &ut_params->auth_xform,
6589 ts_params->session_mpool);
6591 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6597 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
6599 struct crypto_testsuite_params *ts_params = &testsuite_params;
6600 struct crypto_unittest_params *ut_params = &unittest_params;
6604 uint8_t *auth_tag, *plaintext;
6605 uint16_t plaintext_pad_len;
6607 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6608 "No GMAC length in the source data");
6610 retval = create_gmac_session(ts_params->valid_devs[0],
6611 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
6616 if (tdata->plaintext.len > MBUF_SIZE)
6617 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6619 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6620 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6621 "Failed to allocate input buffer in mempool");
6623 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6624 rte_pktmbuf_tailroom(ut_params->ibuf));
6626 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
6628 * Runtime generate the large plain text instead of use hard code
6629 * plain text vector. It is done to avoid create huge source file
6630 * with the test vector.
6632 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
6633 generate_gmac_large_plaintext(tdata->plaintext.data);
6635 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6637 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
6639 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
6640 TEST_HEXDUMP(stdout, "plaintext:", plaintext,
6641 tdata->plaintext.len);
6643 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
6649 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6651 ut_params->op->sym->m_src = ut_params->ibuf;
6653 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6654 ut_params->op), "failed to process sym crypto op");
6656 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6657 "crypto op processing failed");
6659 if (ut_params->op->sym->m_dst) {
6660 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
6661 uint8_t *, plaintext_pad_len);
6663 auth_tag = plaintext + plaintext_pad_len;
6666 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
6668 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6670 tdata->gmac_tag.data,
6671 tdata->gmac_tag.len,
6672 "GMAC Generated auth tag not as expected");
6678 test_AES_GMAC_authentication_test_case_1(void)
6680 return test_AES_GMAC_authentication(&gmac_test_case_1);
6684 test_AES_GMAC_authentication_test_case_2(void)
6686 return test_AES_GMAC_authentication(&gmac_test_case_2);
6690 test_AES_GMAC_authentication_test_case_3(void)
6692 return test_AES_GMAC_authentication(&gmac_test_case_3);
6696 test_AES_GMAC_authentication_test_case_4(void)
6698 return test_AES_GMAC_authentication(&gmac_test_case_4);
6702 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
6704 struct crypto_testsuite_params *ts_params = &testsuite_params;
6705 struct crypto_unittest_params *ut_params = &unittest_params;
6707 uint32_t plaintext_pad_len;
6710 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6711 "No GMAC length in the source data");
6713 retval = create_gmac_session(ts_params->valid_devs[0],
6714 tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
6719 if (tdata->plaintext.len > MBUF_SIZE)
6720 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6722 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6723 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6724 "Failed to allocate input buffer in mempool");
6726 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6727 rte_pktmbuf_tailroom(ut_params->ibuf));
6729 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
6732 * Runtime generate the large plain text instead of use hard code
6733 * plain text vector. It is done to avoid create huge source file
6734 * with the test vector.
6736 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH)
6737 generate_gmac_large_plaintext(tdata->plaintext.data);
6739 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6741 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
6743 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
6744 TEST_HEXDUMP(stdout, "plaintext:", plaintext,
6745 tdata->plaintext.len);
6747 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
6753 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6755 ut_params->op->sym->m_src = ut_params->ibuf;
6757 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6758 ut_params->op), "failed to process sym crypto op");
6760 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6761 "crypto op processing failed");
6768 test_AES_GMAC_authentication_verify_test_case_1(void)
6770 return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
6774 test_AES_GMAC_authentication_verify_test_case_2(void)
6776 return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
6780 test_AES_GMAC_authentication_verify_test_case_3(void)
6782 return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
6786 test_AES_GMAC_authentication_verify_test_case_4(void)
6788 return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
6791 struct test_crypto_vector {
6792 enum rte_crypto_cipher_algorithm crypto_algo;
6805 const uint8_t *data;
6810 const uint8_t *data;
6814 enum rte_crypto_auth_algorithm auth_algo;
6822 const uint8_t *data;
6832 static const struct test_crypto_vector
6833 hmac_sha1_test_crypto_vector = {
6834 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6836 .data = plaintext_hash,
6841 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6842 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6843 0xDE, 0xF4, 0xDE, 0xAD
6849 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
6850 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
6851 0x3F, 0x91, 0x64, 0x59
6857 static const struct test_crypto_vector
6858 aes128_gmac_test_vector = {
6859 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
6861 .data = plaintext_hash,
6866 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6867 0x08, 0x09, 0x0A, 0x0B
6873 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6874 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
6880 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
6881 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
6887 static const struct test_crypto_vector
6888 aes128cbc_hmac_sha1_test_vector = {
6889 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
6892 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
6893 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
6899 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6900 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
6905 .data = plaintext_hash,
6909 .data = ciphertext512_aes128cbc,
6912 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6915 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6916 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6917 0xDE, 0xF4, 0xDE, 0xAD
6923 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
6924 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6925 0x18, 0x8C, 0x1D, 0x32
6932 data_corruption(uint8_t *data)
6938 tag_corruption(uint8_t *data, unsigned int tag_offset)
6940 data[tag_offset] += 1;
6944 create_auth_session(struct crypto_unittest_params *ut_params,
6946 const struct test_crypto_vector *reference,
6947 enum rte_crypto_auth_operation auth_op)
6949 struct crypto_testsuite_params *ts_params = &testsuite_params;
6950 uint8_t auth_key[reference->auth_key.len + 1];
6952 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6954 /* Setup Authentication Parameters */
6955 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6956 ut_params->auth_xform.auth.op = auth_op;
6957 ut_params->auth_xform.next = NULL;
6958 ut_params->auth_xform.auth.algo = reference->auth_algo;
6959 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6960 ut_params->auth_xform.auth.key.data = auth_key;
6961 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6963 /* Create Crypto session*/
6964 ut_params->sess = rte_cryptodev_sym_session_create(
6965 ts_params->session_mpool);
6967 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
6968 &ut_params->auth_xform,
6969 ts_params->session_mpool);
6971 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6977 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
6979 const struct test_crypto_vector *reference,
6980 enum rte_crypto_auth_operation auth_op,
6981 enum rte_crypto_cipher_operation cipher_op)
6983 struct crypto_testsuite_params *ts_params = &testsuite_params;
6984 uint8_t cipher_key[reference->cipher_key.len + 1];
6985 uint8_t auth_key[reference->auth_key.len + 1];
6987 memcpy(cipher_key, reference->cipher_key.data,
6988 reference->cipher_key.len);
6989 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6991 /* Setup Authentication Parameters */
6992 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6993 ut_params->auth_xform.auth.op = auth_op;
6994 ut_params->auth_xform.auth.algo = reference->auth_algo;
6995 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6996 ut_params->auth_xform.auth.key.data = auth_key;
6997 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6999 if (reference->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) {
7000 ut_params->auth_xform.auth.iv.offset = IV_OFFSET;
7001 ut_params->auth_xform.auth.iv.length = reference->iv.len;
7003 ut_params->auth_xform.next = &ut_params->cipher_xform;
7005 /* Setup Cipher Parameters */
7006 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
7007 ut_params->cipher_xform.next = NULL;
7008 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
7009 ut_params->cipher_xform.cipher.op = cipher_op;
7010 ut_params->cipher_xform.cipher.key.data = cipher_key;
7011 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
7012 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
7013 ut_params->cipher_xform.cipher.iv.length = reference->iv.len;
7016 /* Create Crypto session*/
7017 ut_params->sess = rte_cryptodev_sym_session_create(
7018 ts_params->session_mpool);
7020 rte_cryptodev_sym_session_init(dev_id, ut_params->sess,
7021 &ut_params->auth_xform,
7022 ts_params->session_mpool);
7024 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
7030 create_auth_operation(struct crypto_testsuite_params *ts_params,
7031 struct crypto_unittest_params *ut_params,
7032 const struct test_crypto_vector *reference,
7033 unsigned int auth_generate)
7035 /* Generate Crypto op data structure */
7036 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7037 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7038 TEST_ASSERT_NOT_NULL(ut_params->op,
7039 "Failed to allocate pktmbuf offload");
7041 /* Set crypto operation data parameters */
7042 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7044 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7046 /* set crypto operation source mbuf */
7047 sym_op->m_src = ut_params->ibuf;
7050 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
7051 ut_params->ibuf, reference->digest.len);
7053 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
7054 "no room to append auth tag");
7056 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
7057 ut_params->ibuf, reference->plaintext.len);
7060 memset(sym_op->auth.digest.data, 0, reference->digest.len);
7062 memcpy(sym_op->auth.digest.data,
7063 reference->digest.data,
7064 reference->digest.len);
7066 TEST_HEXDUMP(stdout, "digest:",
7067 sym_op->auth.digest.data,
7068 reference->digest.len);
7070 sym_op->auth.data.length = reference->plaintext.len;
7071 sym_op->auth.data.offset = 0;
7077 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
7078 struct crypto_unittest_params *ut_params,
7079 const struct test_crypto_vector *reference,
7080 unsigned int auth_generate)
7082 /* Generate Crypto op data structure */
7083 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7084 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7085 TEST_ASSERT_NOT_NULL(ut_params->op,
7086 "Failed to allocate pktmbuf offload");
7088 /* Set crypto operation data parameters */
7089 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7091 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7093 /* set crypto operation source mbuf */
7094 sym_op->m_src = ut_params->ibuf;
7097 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
7098 ut_params->ibuf, reference->digest.len);
7100 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
7101 "no room to append auth tag");
7103 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
7104 ut_params->ibuf, reference->ciphertext.len);
7107 memset(sym_op->auth.digest.data, 0, reference->digest.len);
7109 memcpy(sym_op->auth.digest.data,
7110 reference->digest.data,
7111 reference->digest.len);
7113 TEST_HEXDUMP(stdout, "digest:",
7114 sym_op->auth.digest.data,
7115 reference->digest.len);
7117 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
7118 reference->iv.data, reference->iv.len);
7120 sym_op->cipher.data.length = 0;
7121 sym_op->cipher.data.offset = 0;
7123 sym_op->auth.data.length = reference->plaintext.len;
7124 sym_op->auth.data.offset = 0;
7130 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
7131 struct crypto_unittest_params *ut_params,
7132 const struct test_crypto_vector *reference,
7133 unsigned int auth_generate)
7135 /* Generate Crypto op data structure */
7136 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7137 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7138 TEST_ASSERT_NOT_NULL(ut_params->op,
7139 "Failed to allocate pktmbuf offload");
7141 /* Set crypto operation data parameters */
7142 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7144 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7146 /* set crypto operation source mbuf */
7147 sym_op->m_src = ut_params->ibuf;
7150 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
7151 ut_params->ibuf, reference->digest.len);
7153 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
7154 "no room to append auth tag");
7156 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
7157 ut_params->ibuf, reference->ciphertext.len);
7160 memset(sym_op->auth.digest.data, 0, reference->digest.len);
7162 memcpy(sym_op->auth.digest.data,
7163 reference->digest.data,
7164 reference->digest.len);
7166 TEST_HEXDUMP(stdout, "digest:",
7167 sym_op->auth.digest.data,
7168 reference->digest.len);
7170 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
7171 reference->iv.data, reference->iv.len);
7173 sym_op->cipher.data.length = reference->ciphertext.len;
7174 sym_op->cipher.data.offset = 0;
7176 sym_op->auth.data.length = reference->ciphertext.len;
7177 sym_op->auth.data.offset = 0;
7183 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
7184 struct crypto_unittest_params *ut_params,
7185 const struct test_crypto_vector *reference)
7187 return create_auth_operation(ts_params, ut_params, reference, 0);
7191 create_auth_verify_GMAC_operation(
7192 struct crypto_testsuite_params *ts_params,
7193 struct crypto_unittest_params *ut_params,
7194 const struct test_crypto_vector *reference)
7196 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
7200 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
7201 struct crypto_unittest_params *ut_params,
7202 const struct test_crypto_vector *reference)
7204 return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
7208 test_authentication_verify_fail_when_data_corruption(
7209 struct crypto_testsuite_params *ts_params,
7210 struct crypto_unittest_params *ut_params,
7211 const struct test_crypto_vector *reference,
7212 unsigned int data_corrupted)
7218 /* Create session */
7219 retval = create_auth_session(ut_params,
7220 ts_params->valid_devs[0],
7222 RTE_CRYPTO_AUTH_OP_VERIFY);
7226 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7227 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
7228 "Failed to allocate input buffer in mempool");
7230 /* clear mbuf payload */
7231 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7232 rte_pktmbuf_tailroom(ut_params->ibuf));
7234 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7235 reference->plaintext.len);
7236 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
7237 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
7239 TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
7241 /* Create operation */
7242 retval = create_auth_verify_operation(ts_params, ut_params, reference);
7248 data_corruption(plaintext);
7250 tag_corruption(plaintext, reference->plaintext.len);
7252 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
7254 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
7255 TEST_ASSERT_EQUAL(ut_params->op->status,
7256 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
7257 "authentication not failed");
7259 ut_params->obuf = ut_params->op->sym->m_src;
7260 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
7266 test_authentication_verify_GMAC_fail_when_corruption(
7267 struct crypto_testsuite_params *ts_params,
7268 struct crypto_unittest_params *ut_params,
7269 const struct test_crypto_vector *reference,
7270 unsigned int data_corrupted)
7275 /* Create session */
7276 retval = create_auth_cipher_session(ut_params,
7277 ts_params->valid_devs[0],
7279 RTE_CRYPTO_AUTH_OP_VERIFY,
7280 RTE_CRYPTO_CIPHER_OP_DECRYPT);
7284 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7285 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
7286 "Failed to allocate input buffer in mempool");
7288 /* clear mbuf payload */
7289 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7290 rte_pktmbuf_tailroom(ut_params->ibuf));
7292 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7293 reference->plaintext.len);
7294 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
7295 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
7297 TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
7299 /* Create operation */
7300 retval = create_auth_verify_GMAC_operation(ts_params,
7308 data_corruption(plaintext);
7310 tag_corruption(plaintext, reference->aad.len);
7312 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
7314 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
7315 TEST_ASSERT_EQUAL(ut_params->op->status,
7316 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
7317 "authentication not failed");
7319 ut_params->obuf = ut_params->op->sym->m_src;
7320 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
7326 test_authenticated_decryption_fail_when_corruption(
7327 struct crypto_testsuite_params *ts_params,
7328 struct crypto_unittest_params *ut_params,
7329 const struct test_crypto_vector *reference,
7330 unsigned int data_corrupted)
7334 uint8_t *ciphertext;
7336 /* Create session */
7337 retval = create_auth_cipher_session(ut_params,
7338 ts_params->valid_devs[0],
7340 RTE_CRYPTO_AUTH_OP_VERIFY,
7341 RTE_CRYPTO_CIPHER_OP_DECRYPT);
7345 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7346 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
7347 "Failed to allocate input buffer in mempool");
7349 /* clear mbuf payload */
7350 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7351 rte_pktmbuf_tailroom(ut_params->ibuf));
7353 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7354 reference->ciphertext.len);
7355 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
7356 memcpy(ciphertext, reference->ciphertext.data,
7357 reference->ciphertext.len);
7359 /* Create operation */
7360 retval = create_cipher_auth_verify_operation(ts_params,
7368 data_corruption(ciphertext);
7370 tag_corruption(ciphertext, reference->ciphertext.len);
7372 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
7375 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
7376 TEST_ASSERT_EQUAL(ut_params->op->status,
7377 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
7378 "authentication not failed");
7380 ut_params->obuf = ut_params->op->sym->m_src;
7381 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
7387 create_gcm_operation_SGL(enum rte_crypto_aead_operation op,
7388 const struct gcm_test_data *tdata,
7389 void *digest_mem, uint64_t digest_phys)
7391 struct crypto_testsuite_params *ts_params = &testsuite_params;
7392 struct crypto_unittest_params *ut_params = &unittest_params;
7394 const unsigned int auth_tag_len = tdata->auth_tag.len;
7395 const unsigned int iv_len = tdata->iv.len;
7396 const unsigned int aad_len = tdata->aad.len;
7398 /* Generate Crypto op data structure */
7399 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
7400 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
7401 TEST_ASSERT_NOT_NULL(ut_params->op,
7402 "Failed to allocate symmetric crypto operation struct");
7404 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
7406 sym_op->aead.digest.data = digest_mem;
7408 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
7409 "no room to append digest");
7411 sym_op->aead.digest.phys_addr = digest_phys;
7413 if (op == RTE_CRYPTO_AEAD_OP_DECRYPT) {
7414 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data,
7416 TEST_HEXDUMP(stdout, "digest:",
7417 sym_op->aead.digest.data,
7421 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op,
7422 uint8_t *, IV_OFFSET);
7424 rte_memcpy(iv_ptr, tdata->iv.data, iv_len);
7426 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend(
7427 ut_params->ibuf, aad_len);
7428 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
7429 "no room to prepend aad");
7430 sym_op->aead.aad.phys_addr = rte_pktmbuf_mtophys(
7433 memset(sym_op->aead.aad.data, 0, aad_len);
7434 rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len);
7436 TEST_HEXDUMP(stdout, "iv:", iv_ptr, iv_len);
7437 TEST_HEXDUMP(stdout, "aad:",
7438 sym_op->aead.aad.data, aad_len);
7440 sym_op->aead.data.length = tdata->plaintext.len;
7441 sym_op->aead.data.offset = aad_len;
7446 #define SGL_MAX_NO 16
7449 test_AES_GCM_authenticated_encryption_SGL(const struct gcm_test_data *tdata,
7450 const int oop, uint32_t fragsz, uint32_t fragsz_oop)
7452 struct crypto_testsuite_params *ts_params = &testsuite_params;
7453 struct crypto_unittest_params *ut_params = &unittest_params;
7454 struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
7457 int to_trn_tbl[SGL_MAX_NO];
7459 unsigned int trn_data = 0;
7460 uint8_t *plaintext, *ciphertext, *auth_tag;
7462 if (fragsz > tdata->plaintext.len)
7463 fragsz = tdata->plaintext.len;
7465 uint16_t plaintext_len = fragsz;
7466 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
7468 if (fragsz_oop > tdata->plaintext.len)
7469 frag_size_oop = tdata->plaintext.len;
7472 void *digest_mem = NULL;
7474 uint32_t prepend_len = tdata->aad.len;
7476 if (tdata->plaintext.len % fragsz != 0) {
7477 if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
7480 if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
7485 * For out-op-place we need to alloc another mbuf
7488 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7489 rte_pktmbuf_append(ut_params->obuf,
7490 frag_size_oop + prepend_len);
7491 buf_oop = ut_params->obuf;
7494 /* Create GCM session */
7495 retval = create_gcm_session(ts_params->valid_devs[0],
7496 RTE_CRYPTO_AEAD_OP_ENCRYPT,
7497 tdata->key.data, tdata->key.len,
7498 tdata->aad.len, tdata->auth_tag.len,
7503 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7505 /* clear mbuf payload */
7506 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7507 rte_pktmbuf_tailroom(ut_params->ibuf));
7509 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7512 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
7514 trn_data += plaintext_len;
7516 buf = ut_params->ibuf;
7519 * Loop until no more fragments
7522 while (trn_data < tdata->plaintext.len) {
7524 to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
7525 (tdata->plaintext.len - trn_data) : fragsz;
7527 to_trn_tbl[ecx++] = to_trn;
7529 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7532 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
7533 rte_pktmbuf_tailroom(buf));
7536 if (oop && !fragsz_oop) {
7537 buf_last_oop = buf_oop->next =
7538 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7539 buf_oop = buf_oop->next;
7540 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7541 0, rte_pktmbuf_tailroom(buf_oop));
7542 rte_pktmbuf_append(buf_oop, to_trn);
7545 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
7548 memcpy(plaintext, tdata->plaintext.data + trn_data,
7551 if (trn_data == tdata->plaintext.len) {
7554 digest_mem = rte_pktmbuf_append(buf_oop,
7555 tdata->auth_tag.len);
7557 digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
7558 tdata->auth_tag.len);
7562 uint64_t digest_phys = 0;
7564 ut_params->ibuf->nb_segs = segs;
7567 if (fragsz_oop && oop) {
7571 if (frag_size_oop == tdata->plaintext.len) {
7572 digest_mem = rte_pktmbuf_append(ut_params->obuf,
7573 tdata->auth_tag.len);
7575 digest_phys = rte_pktmbuf_mtophys_offset(
7577 tdata->plaintext.len + prepend_len);
7580 trn_data = frag_size_oop;
7581 while (trn_data < tdata->plaintext.len) {
7584 (tdata->plaintext.len - trn_data <
7586 (tdata->plaintext.len - trn_data) :
7589 to_trn_tbl[ecx++] = to_trn;
7591 buf_last_oop = buf_oop->next =
7592 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7593 buf_oop = buf_oop->next;
7594 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7595 0, rte_pktmbuf_tailroom(buf_oop));
7596 rte_pktmbuf_append(buf_oop, to_trn);
7600 if (trn_data == tdata->plaintext.len) {
7601 digest_mem = rte_pktmbuf_append(buf_oop,
7602 tdata->auth_tag.len);
7606 ut_params->obuf->nb_segs = segs;
7610 * Place digest at the end of the last buffer
7613 digest_phys = rte_pktmbuf_mtophys(buf) + to_trn;
7614 if (oop && buf_last_oop)
7615 digest_phys = rte_pktmbuf_mtophys(buf_last_oop) + to_trn;
7617 if (!digest_mem && !oop) {
7618 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7619 + tdata->auth_tag.len);
7620 digest_phys = rte_pktmbuf_mtophys_offset(ut_params->ibuf,
7621 tdata->plaintext.len);
7624 /* Create GCM opertaion */
7625 retval = create_gcm_operation_SGL(RTE_CRYPTO_AEAD_OP_ENCRYPT,
7626 tdata, digest_mem, digest_phys);
7631 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7633 ut_params->op->sym->m_src = ut_params->ibuf;
7635 ut_params->op->sym->m_dst = ut_params->obuf;
7637 /* Process crypto operation */
7638 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7639 ut_params->op), "failed to process sym crypto op");
7641 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7642 "crypto op processing failed");
7645 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7646 uint8_t *, prepend_len);
7648 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7649 uint8_t *, prepend_len);
7653 fragsz = fragsz_oop;
7655 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7657 tdata->ciphertext.data,
7659 "GCM Ciphertext data not as expected");
7661 buf = ut_params->op->sym->m_src->next;
7663 buf = ut_params->op->sym->m_dst->next;
7665 unsigned int off = fragsz;
7669 ciphertext = rte_pktmbuf_mtod(buf,
7672 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7674 tdata->ciphertext.data + off,
7676 "GCM Ciphertext data not as expected");
7678 off += to_trn_tbl[ecx++];
7682 auth_tag = digest_mem;
7683 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7685 tdata->auth_tag.data,
7686 tdata->auth_tag.len,
7687 "GCM Generated auth tag not as expected");
7693 #define OUT_OF_PLACE 1
7696 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
7698 return test_AES_GCM_authenticated_encryption_SGL(
7699 &gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
7703 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
7705 return test_AES_GCM_authenticated_encryption_SGL(
7706 &gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
7710 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
7712 return test_AES_GCM_authenticated_encryption_SGL(
7713 &gcm_test_case_8, OUT_OF_PLACE, 400,
7714 gcm_test_case_8.plaintext.len);
7718 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
7721 return test_AES_GCM_authenticated_encryption_SGL(
7722 &gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
7726 test_authentication_verify_fail_when_data_corrupted(
7727 struct crypto_testsuite_params *ts_params,
7728 struct crypto_unittest_params *ut_params,
7729 const struct test_crypto_vector *reference)
7731 return test_authentication_verify_fail_when_data_corruption(
7732 ts_params, ut_params, reference, 1);
7736 test_authentication_verify_fail_when_tag_corrupted(
7737 struct crypto_testsuite_params *ts_params,
7738 struct crypto_unittest_params *ut_params,
7739 const struct test_crypto_vector *reference)
7741 return test_authentication_verify_fail_when_data_corruption(
7742 ts_params, ut_params, reference, 0);
7746 test_authentication_verify_GMAC_fail_when_data_corrupted(
7747 struct crypto_testsuite_params *ts_params,
7748 struct crypto_unittest_params *ut_params,
7749 const struct test_crypto_vector *reference)
7751 return test_authentication_verify_GMAC_fail_when_corruption(
7752 ts_params, ut_params, reference, 1);
7756 test_authentication_verify_GMAC_fail_when_tag_corrupted(
7757 struct crypto_testsuite_params *ts_params,
7758 struct crypto_unittest_params *ut_params,
7759 const struct test_crypto_vector *reference)
7761 return test_authentication_verify_GMAC_fail_when_corruption(
7762 ts_params, ut_params, reference, 0);
7766 test_authenticated_decryption_fail_when_data_corrupted(
7767 struct crypto_testsuite_params *ts_params,
7768 struct crypto_unittest_params *ut_params,
7769 const struct test_crypto_vector *reference)
7771 return test_authenticated_decryption_fail_when_corruption(
7772 ts_params, ut_params, reference, 1);
7776 test_authenticated_decryption_fail_when_tag_corrupted(
7777 struct crypto_testsuite_params *ts_params,
7778 struct crypto_unittest_params *ut_params,
7779 const struct test_crypto_vector *reference)
7781 return test_authenticated_decryption_fail_when_corruption(
7782 ts_params, ut_params, reference, 0);
7786 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
7788 return test_authentication_verify_fail_when_data_corrupted(
7789 &testsuite_params, &unittest_params,
7790 &hmac_sha1_test_crypto_vector);
7794 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
7796 return test_authentication_verify_fail_when_tag_corrupted(
7797 &testsuite_params, &unittest_params,
7798 &hmac_sha1_test_crypto_vector);
7802 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
7804 return test_authentication_verify_GMAC_fail_when_data_corrupted(
7805 &testsuite_params, &unittest_params,
7806 &aes128_gmac_test_vector);
7810 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
7812 return test_authentication_verify_GMAC_fail_when_tag_corrupted(
7813 &testsuite_params, &unittest_params,
7814 &aes128_gmac_test_vector);
7818 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
7820 return test_authenticated_decryption_fail_when_data_corrupted(
7823 &aes128cbc_hmac_sha1_test_vector);
7827 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
7829 return test_authenticated_decryption_fail_when_tag_corrupted(
7832 &aes128cbc_hmac_sha1_test_vector);
7835 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
7837 /* global AESNI slave IDs for the scheduler test */
7838 uint8_t aesni_ids[2];
7841 test_scheduler_attach_slave_op(void)
7843 struct crypto_testsuite_params *ts_params = &testsuite_params;
7844 uint8_t sched_id = ts_params->valid_devs[0];
7845 uint32_t nb_devs, i, nb_devs_attached = 0;
7849 /* create 2 AESNI_MB if necessary */
7850 nb_devs = rte_cryptodev_device_count_by_driver(
7851 rte_cryptodev_driver_id_get(
7852 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)));
7854 for (i = nb_devs; i < 2; i++) {
7855 snprintf(vdev_name, sizeof(vdev_name), "%s_%u",
7856 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD),
7858 ret = rte_vdev_init(vdev_name, NULL);
7860 TEST_ASSERT(ret == 0,
7861 "Failed to create instance %u of"
7863 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7867 /* attach 2 AESNI_MB cdevs */
7868 for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
7870 struct rte_cryptodev_info info;
7872 rte_cryptodev_info_get(i, &info);
7873 if (info.driver_id != rte_cryptodev_driver_id_get(
7874 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)))
7878 * Create the session mempool again, since now there are new devices
7879 * to use the mempool.
7881 if (ts_params->session_mpool) {
7882 rte_mempool_free(ts_params->session_mpool);
7883 ts_params->session_mpool = NULL;
7885 unsigned int session_size = rte_cryptodev_get_private_session_size(i);
7888 * Create mempool with maximum number of sessions * 2,
7889 * to include the session headers
7891 if (ts_params->session_mpool == NULL) {
7892 ts_params->session_mpool = rte_mempool_create(
7894 info.sym.max_nb_sessions * 2,
7896 0, 0, NULL, NULL, NULL,
7897 NULL, SOCKET_ID_ANY,
7900 TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
7901 "session mempool allocation failed");
7904 ret = rte_cryptodev_scheduler_slave_attach(sched_id,
7907 TEST_ASSERT(ret == 0,
7908 "Failed to attach device %u of pmd : %s", i,
7909 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7911 aesni_ids[nb_devs_attached] = (uint8_t)i;
7920 test_scheduler_detach_slave_op(void)
7922 struct crypto_testsuite_params *ts_params = &testsuite_params;
7923 uint8_t sched_id = ts_params->valid_devs[0];
7927 for (i = 0; i < 2; i++) {
7928 ret = rte_cryptodev_scheduler_slave_detach(sched_id,
7930 TEST_ASSERT(ret == 0,
7931 "Failed to detach device %u", aesni_ids[i]);
7938 test_scheduler_mode_op(void)
7940 struct crypto_testsuite_params *ts_params = &testsuite_params;
7941 uint8_t sched_id = ts_params->valid_devs[0];
7942 struct rte_cryptodev_scheduler_ops op = {0};
7943 struct rte_cryptodev_scheduler dummy_scheduler = {
7944 .description = "dummy scheduler to test mode",
7945 .name = "dummy scheduler",
7946 .mode = CDEV_SCHED_MODE_USERDEFINED,
7951 /* set user defined mode */
7952 ret = rte_cryptodev_scheduler_load_user_scheduler(sched_id,
7954 TEST_ASSERT(ret == 0,
7955 "Failed to set cdev %u to user defined mode", sched_id);
7957 /* set round robin mode */
7958 ret = rte_cryptodev_scheduler_mode_set(sched_id,
7959 CDEV_SCHED_MODE_ROUNDROBIN);
7960 TEST_ASSERT(ret == 0,
7961 "Failed to set cdev %u to round-robin mode", sched_id);
7962 TEST_ASSERT(rte_cryptodev_scheduler_mode_get(sched_id) ==
7963 CDEV_SCHED_MODE_ROUNDROBIN, "Scheduling Mode "
7969 static struct unit_test_suite cryptodev_scheduler_testsuite = {
7970 .suite_name = "Crypto Device Scheduler Unit Test Suite",
7971 .setup = testsuite_setup,
7972 .teardown = testsuite_teardown,
7973 .unit_test_cases = {
7974 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
7975 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_op),
7976 TEST_CASE_ST(ut_setup, ut_teardown,
7977 test_AES_chain_scheduler_all),
7978 TEST_CASE_ST(ut_setup, ut_teardown,
7979 test_AES_cipheronly_scheduler_all),
7980 TEST_CASE_ST(ut_setup, ut_teardown,
7981 test_authonly_scheduler_all),
7982 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
7983 TEST_CASES_END() /**< NULL terminate unit test array */
7987 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
7989 static struct unit_test_suite cryptodev_qat_testsuite = {
7990 .suite_name = "Crypto QAT Unit Test Suite",
7991 .setup = testsuite_setup,
7992 .teardown = testsuite_teardown,
7993 .unit_test_cases = {
7994 TEST_CASE_ST(ut_setup, ut_teardown,
7995 test_device_configure_invalid_dev_id),
7996 TEST_CASE_ST(ut_setup, ut_teardown,
7997 test_device_configure_invalid_queue_pair_ids),
7998 TEST_CASE_ST(ut_setup, ut_teardown,
7999 test_queue_pair_descriptor_setup),
8000 TEST_CASE_ST(ut_setup, ut_teardown,
8001 test_multi_session),
8003 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
8004 TEST_CASE_ST(ut_setup, ut_teardown,
8005 test_AES_cipheronly_qat_all),
8006 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
8007 TEST_CASE_ST(ut_setup, ut_teardown,
8008 test_3DES_cipheronly_qat_all),
8009 TEST_CASE_ST(ut_setup, ut_teardown,
8010 test_DES_cipheronly_qat_all),
8011 TEST_CASE_ST(ut_setup, ut_teardown,
8012 test_AES_docsis_qat_all),
8013 TEST_CASE_ST(ut_setup, ut_teardown,
8014 test_DES_docsis_qat_all),
8015 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_qat_all),
8016 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
8018 /** AES GCM Authenticated Encryption */
8019 TEST_CASE_ST(ut_setup, ut_teardown,
8020 test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
8021 TEST_CASE_ST(ut_setup, ut_teardown,
8022 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
8023 TEST_CASE_ST(ut_setup, ut_teardown,
8024 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
8025 TEST_CASE_ST(ut_setup, ut_teardown,
8026 test_AES_GCM_authenticated_encryption_test_case_1),
8027 TEST_CASE_ST(ut_setup, ut_teardown,
8028 test_AES_GCM_authenticated_encryption_test_case_2),
8029 TEST_CASE_ST(ut_setup, ut_teardown,
8030 test_AES_GCM_authenticated_encryption_test_case_3),
8031 TEST_CASE_ST(ut_setup, ut_teardown,
8032 test_AES_GCM_authenticated_encryption_test_case_4),
8033 TEST_CASE_ST(ut_setup, ut_teardown,
8034 test_AES_GCM_authenticated_encryption_test_case_5),
8035 TEST_CASE_ST(ut_setup, ut_teardown,
8036 test_AES_GCM_authenticated_encryption_test_case_6),
8037 TEST_CASE_ST(ut_setup, ut_teardown,
8038 test_AES_GCM_authenticated_encryption_test_case_7),
8040 /** AES GCM Authenticated Decryption */
8041 TEST_CASE_ST(ut_setup, ut_teardown,
8042 test_AES_GCM_authenticated_decryption_test_case_1),
8043 TEST_CASE_ST(ut_setup, ut_teardown,
8044 test_AES_GCM_authenticated_decryption_test_case_2),
8045 TEST_CASE_ST(ut_setup, ut_teardown,
8046 test_AES_GCM_authenticated_decryption_test_case_3),
8047 TEST_CASE_ST(ut_setup, ut_teardown,
8048 test_AES_GCM_authenticated_decryption_test_case_4),
8049 TEST_CASE_ST(ut_setup, ut_teardown,
8050 test_AES_GCM_authenticated_decryption_test_case_5),
8051 TEST_CASE_ST(ut_setup, ut_teardown,
8052 test_AES_GCM_authenticated_decryption_test_case_6),
8053 TEST_CASE_ST(ut_setup, ut_teardown,
8054 test_AES_GCM_authenticated_decryption_test_case_7),
8056 /** AES GCM Authenticated Encryption 192 bits key */
8057 TEST_CASE_ST(ut_setup, ut_teardown,
8058 test_AES_GCM_auth_encryption_test_case_192_1),
8059 TEST_CASE_ST(ut_setup, ut_teardown,
8060 test_AES_GCM_auth_encryption_test_case_192_2),
8061 TEST_CASE_ST(ut_setup, ut_teardown,
8062 test_AES_GCM_auth_encryption_test_case_192_3),
8063 TEST_CASE_ST(ut_setup, ut_teardown,
8064 test_AES_GCM_auth_encryption_test_case_192_4),
8065 TEST_CASE_ST(ut_setup, ut_teardown,
8066 test_AES_GCM_auth_encryption_test_case_192_5),
8067 TEST_CASE_ST(ut_setup, ut_teardown,
8068 test_AES_GCM_auth_encryption_test_case_192_6),
8069 TEST_CASE_ST(ut_setup, ut_teardown,
8070 test_AES_GCM_auth_encryption_test_case_192_7),
8072 /** AES GCM Authenticated Decryption 192 bits key */
8073 TEST_CASE_ST(ut_setup, ut_teardown,
8074 test_AES_GCM_auth_decryption_test_case_192_1),
8075 TEST_CASE_ST(ut_setup, ut_teardown,
8076 test_AES_GCM_auth_decryption_test_case_192_2),
8077 TEST_CASE_ST(ut_setup, ut_teardown,
8078 test_AES_GCM_auth_decryption_test_case_192_3),
8079 TEST_CASE_ST(ut_setup, ut_teardown,
8080 test_AES_GCM_auth_decryption_test_case_192_4),
8081 TEST_CASE_ST(ut_setup, ut_teardown,
8082 test_AES_GCM_auth_decryption_test_case_192_5),
8083 TEST_CASE_ST(ut_setup, ut_teardown,
8084 test_AES_GCM_auth_decryption_test_case_192_6),
8085 TEST_CASE_ST(ut_setup, ut_teardown,
8086 test_AES_GCM_auth_decryption_test_case_192_7),
8088 /** AES GCM Authenticated Encryption 256 bits key */
8089 TEST_CASE_ST(ut_setup, ut_teardown,
8090 test_AES_GCM_auth_encryption_test_case_256_1),
8091 TEST_CASE_ST(ut_setup, ut_teardown,
8092 test_AES_GCM_auth_encryption_test_case_256_2),
8093 TEST_CASE_ST(ut_setup, ut_teardown,
8094 test_AES_GCM_auth_encryption_test_case_256_3),
8095 TEST_CASE_ST(ut_setup, ut_teardown,
8096 test_AES_GCM_auth_encryption_test_case_256_4),
8097 TEST_CASE_ST(ut_setup, ut_teardown,
8098 test_AES_GCM_auth_encryption_test_case_256_5),
8099 TEST_CASE_ST(ut_setup, ut_teardown,
8100 test_AES_GCM_auth_encryption_test_case_256_6),
8101 TEST_CASE_ST(ut_setup, ut_teardown,
8102 test_AES_GCM_auth_encryption_test_case_256_7),
8104 /** AES GMAC Authentication */
8105 TEST_CASE_ST(ut_setup, ut_teardown,
8106 test_AES_GMAC_authentication_test_case_1),
8107 TEST_CASE_ST(ut_setup, ut_teardown,
8108 test_AES_GMAC_authentication_verify_test_case_1),
8109 TEST_CASE_ST(ut_setup, ut_teardown,
8110 test_AES_GMAC_authentication_test_case_2),
8111 TEST_CASE_ST(ut_setup, ut_teardown,
8112 test_AES_GMAC_authentication_verify_test_case_2),
8113 TEST_CASE_ST(ut_setup, ut_teardown,
8114 test_AES_GMAC_authentication_test_case_3),
8115 TEST_CASE_ST(ut_setup, ut_teardown,
8116 test_AES_GMAC_authentication_verify_test_case_3),
8118 /** SNOW 3G encrypt only (UEA2) */
8119 TEST_CASE_ST(ut_setup, ut_teardown,
8120 test_snow3g_encryption_test_case_1),
8121 TEST_CASE_ST(ut_setup, ut_teardown,
8122 test_snow3g_encryption_test_case_2),
8123 TEST_CASE_ST(ut_setup, ut_teardown,
8124 test_snow3g_encryption_test_case_3),
8125 TEST_CASE_ST(ut_setup, ut_teardown,
8126 test_snow3g_encryption_test_case_4),
8127 TEST_CASE_ST(ut_setup, ut_teardown,
8128 test_snow3g_encryption_test_case_5),
8130 TEST_CASE_ST(ut_setup, ut_teardown,
8131 test_snow3g_encryption_test_case_1_oop),
8132 TEST_CASE_ST(ut_setup, ut_teardown,
8133 test_snow3g_decryption_test_case_1_oop),
8135 /** SNOW 3G decrypt only (UEA2) */
8136 TEST_CASE_ST(ut_setup, ut_teardown,
8137 test_snow3g_decryption_test_case_1),
8138 TEST_CASE_ST(ut_setup, ut_teardown,
8139 test_snow3g_decryption_test_case_2),
8140 TEST_CASE_ST(ut_setup, ut_teardown,
8141 test_snow3g_decryption_test_case_3),
8142 TEST_CASE_ST(ut_setup, ut_teardown,
8143 test_snow3g_decryption_test_case_4),
8144 TEST_CASE_ST(ut_setup, ut_teardown,
8145 test_snow3g_decryption_test_case_5),
8146 TEST_CASE_ST(ut_setup, ut_teardown,
8147 test_snow3g_hash_generate_test_case_1),
8148 TEST_CASE_ST(ut_setup, ut_teardown,
8149 test_snow3g_hash_generate_test_case_2),
8150 TEST_CASE_ST(ut_setup, ut_teardown,
8151 test_snow3g_hash_generate_test_case_3),
8152 TEST_CASE_ST(ut_setup, ut_teardown,
8153 test_snow3g_hash_verify_test_case_1),
8154 TEST_CASE_ST(ut_setup, ut_teardown,
8155 test_snow3g_hash_verify_test_case_2),
8156 TEST_CASE_ST(ut_setup, ut_teardown,
8157 test_snow3g_hash_verify_test_case_3),
8158 TEST_CASE_ST(ut_setup, ut_teardown,
8159 test_snow3g_cipher_auth_test_case_1),
8160 TEST_CASE_ST(ut_setup, ut_teardown,
8161 test_snow3g_auth_cipher_test_case_1),
8163 /** ZUC encrypt only (EEA3) */
8164 TEST_CASE_ST(ut_setup, ut_teardown,
8165 test_zuc_encryption_test_case_1),
8166 TEST_CASE_ST(ut_setup, ut_teardown,
8167 test_zuc_encryption_test_case_2),
8168 TEST_CASE_ST(ut_setup, ut_teardown,
8169 test_zuc_encryption_test_case_3),
8170 TEST_CASE_ST(ut_setup, ut_teardown,
8171 test_zuc_encryption_test_case_4),
8172 TEST_CASE_ST(ut_setup, ut_teardown,
8173 test_zuc_encryption_test_case_5),
8175 /** ZUC authenticate (EIA3) */
8176 TEST_CASE_ST(ut_setup, ut_teardown,
8177 test_zuc_hash_generate_test_case_6),
8178 TEST_CASE_ST(ut_setup, ut_teardown,
8179 test_zuc_hash_generate_test_case_7),
8180 TEST_CASE_ST(ut_setup, ut_teardown,
8181 test_zuc_hash_generate_test_case_8),
8183 /** ZUC alg-chain (EEA3/EIA3) */
8184 TEST_CASE_ST(ut_setup, ut_teardown,
8185 test_zuc_cipher_auth_test_case_1),
8186 TEST_CASE_ST(ut_setup, ut_teardown,
8187 test_zuc_cipher_auth_test_case_2),
8189 /** HMAC_MD5 Authentication */
8190 TEST_CASE_ST(ut_setup, ut_teardown,
8191 test_MD5_HMAC_generate_case_1),
8192 TEST_CASE_ST(ut_setup, ut_teardown,
8193 test_MD5_HMAC_verify_case_1),
8194 TEST_CASE_ST(ut_setup, ut_teardown,
8195 test_MD5_HMAC_generate_case_2),
8196 TEST_CASE_ST(ut_setup, ut_teardown,
8197 test_MD5_HMAC_verify_case_2),
8200 TEST_CASE_ST(ut_setup, ut_teardown,
8201 test_null_auth_only_operation),
8202 TEST_CASE_ST(ut_setup, ut_teardown,
8203 test_null_cipher_only_operation),
8204 TEST_CASE_ST(ut_setup, ut_teardown,
8205 test_null_cipher_auth_operation),
8206 TEST_CASE_ST(ut_setup, ut_teardown,
8207 test_null_auth_cipher_operation),
8209 TEST_CASE_ST(ut_setup, ut_teardown,
8210 test_kasumi_hash_generate_test_case_6),
8213 TEST_CASE_ST(ut_setup, ut_teardown,
8214 test_kasumi_encryption_test_case_1),
8215 TEST_CASE_ST(ut_setup, ut_teardown,
8216 test_kasumi_encryption_test_case_3),
8217 TEST_CASE_ST(ut_setup, ut_teardown,
8218 test_kasumi_auth_cipher_test_case_1),
8219 TEST_CASE_ST(ut_setup, ut_teardown,
8220 test_kasumi_cipher_auth_test_case_1),
8222 /** Negative tests */
8223 TEST_CASE_ST(ut_setup, ut_teardown,
8224 authentication_verify_HMAC_SHA1_fail_data_corrupt),
8225 TEST_CASE_ST(ut_setup, ut_teardown,
8226 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
8227 TEST_CASE_ST(ut_setup, ut_teardown,
8228 authentication_verify_AES128_GMAC_fail_data_corrupt),
8229 TEST_CASE_ST(ut_setup, ut_teardown,
8230 authentication_verify_AES128_GMAC_fail_tag_corrupt),
8231 TEST_CASE_ST(ut_setup, ut_teardown,
8232 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
8233 TEST_CASE_ST(ut_setup, ut_teardown,
8234 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
8236 TEST_CASES_END() /**< NULL terminate unit test array */
8240 static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
8241 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
8242 .setup = testsuite_setup,
8243 .teardown = testsuite_teardown,
8244 .unit_test_cases = {
8245 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
8246 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_mb_all),
8247 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_mb_all),
8248 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_mb_all),
8250 TEST_CASES_END() /**< NULL terminate unit test array */
8254 static struct unit_test_suite cryptodev_openssl_testsuite = {
8255 .suite_name = "Crypto Device OPENSSL Unit Test Suite",
8256 .setup = testsuite_setup,
8257 .teardown = testsuite_teardown,
8258 .unit_test_cases = {
8259 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
8260 TEST_CASE_ST(ut_setup, ut_teardown,
8261 test_multi_session_random_usage),
8262 TEST_CASE_ST(ut_setup, ut_teardown,
8263 test_AES_chain_openssl_all),
8264 TEST_CASE_ST(ut_setup, ut_teardown,
8265 test_AES_cipheronly_openssl_all),
8266 TEST_CASE_ST(ut_setup, ut_teardown,
8267 test_3DES_chain_openssl_all),
8268 TEST_CASE_ST(ut_setup, ut_teardown,
8269 test_3DES_cipheronly_openssl_all),
8270 TEST_CASE_ST(ut_setup, ut_teardown,
8271 test_DES_docsis_openssl_all),
8272 TEST_CASE_ST(ut_setup, ut_teardown,
8273 test_authonly_openssl_all),
8275 /** AES GCM Authenticated Encryption */
8276 TEST_CASE_ST(ut_setup, ut_teardown,
8277 test_AES_GCM_authenticated_encryption_test_case_1),
8278 TEST_CASE_ST(ut_setup, ut_teardown,
8279 test_AES_GCM_authenticated_encryption_test_case_2),
8280 TEST_CASE_ST(ut_setup, ut_teardown,
8281 test_AES_GCM_authenticated_encryption_test_case_3),
8282 TEST_CASE_ST(ut_setup, ut_teardown,
8283 test_AES_GCM_authenticated_encryption_test_case_4),
8284 TEST_CASE_ST(ut_setup, ut_teardown,
8285 test_AES_GCM_authenticated_encryption_test_case_5),
8286 TEST_CASE_ST(ut_setup, ut_teardown,
8287 test_AES_GCM_authenticated_encryption_test_case_6),
8288 TEST_CASE_ST(ut_setup, ut_teardown,
8289 test_AES_GCM_authenticated_encryption_test_case_7),
8291 /** AES GCM Authenticated Decryption */
8292 TEST_CASE_ST(ut_setup, ut_teardown,
8293 test_AES_GCM_authenticated_decryption_test_case_1),
8294 TEST_CASE_ST(ut_setup, ut_teardown,
8295 test_AES_GCM_authenticated_decryption_test_case_2),
8296 TEST_CASE_ST(ut_setup, ut_teardown,
8297 test_AES_GCM_authenticated_decryption_test_case_3),
8298 TEST_CASE_ST(ut_setup, ut_teardown,
8299 test_AES_GCM_authenticated_decryption_test_case_4),
8300 TEST_CASE_ST(ut_setup, ut_teardown,
8301 test_AES_GCM_authenticated_decryption_test_case_5),
8302 TEST_CASE_ST(ut_setup, ut_teardown,
8303 test_AES_GCM_authenticated_decryption_test_case_6),
8304 TEST_CASE_ST(ut_setup, ut_teardown,
8305 test_AES_GCM_authenticated_decryption_test_case_7),
8308 /** AES GCM Authenticated Encryption 192 bits key */
8309 TEST_CASE_ST(ut_setup, ut_teardown,
8310 test_AES_GCM_auth_encryption_test_case_192_1),
8311 TEST_CASE_ST(ut_setup, ut_teardown,
8312 test_AES_GCM_auth_encryption_test_case_192_2),
8313 TEST_CASE_ST(ut_setup, ut_teardown,
8314 test_AES_GCM_auth_encryption_test_case_192_3),
8315 TEST_CASE_ST(ut_setup, ut_teardown,
8316 test_AES_GCM_auth_encryption_test_case_192_4),
8317 TEST_CASE_ST(ut_setup, ut_teardown,
8318 test_AES_GCM_auth_encryption_test_case_192_5),
8319 TEST_CASE_ST(ut_setup, ut_teardown,
8320 test_AES_GCM_auth_encryption_test_case_192_6),
8321 TEST_CASE_ST(ut_setup, ut_teardown,
8322 test_AES_GCM_auth_encryption_test_case_192_7),
8324 /** AES GCM Authenticated Decryption 192 bits key */
8325 TEST_CASE_ST(ut_setup, ut_teardown,
8326 test_AES_GCM_auth_decryption_test_case_192_1),
8327 TEST_CASE_ST(ut_setup, ut_teardown,
8328 test_AES_GCM_auth_decryption_test_case_192_2),
8329 TEST_CASE_ST(ut_setup, ut_teardown,
8330 test_AES_GCM_auth_decryption_test_case_192_3),
8331 TEST_CASE_ST(ut_setup, ut_teardown,
8332 test_AES_GCM_auth_decryption_test_case_192_4),
8333 TEST_CASE_ST(ut_setup, ut_teardown,
8334 test_AES_GCM_auth_decryption_test_case_192_5),
8335 TEST_CASE_ST(ut_setup, ut_teardown,
8336 test_AES_GCM_auth_decryption_test_case_192_6),
8337 TEST_CASE_ST(ut_setup, ut_teardown,
8338 test_AES_GCM_auth_decryption_test_case_192_7),
8340 /** AES GCM Authenticated Encryption 256 bits key */
8341 TEST_CASE_ST(ut_setup, ut_teardown,
8342 test_AES_GCM_auth_encryption_test_case_256_1),
8343 TEST_CASE_ST(ut_setup, ut_teardown,
8344 test_AES_GCM_auth_encryption_test_case_256_2),
8345 TEST_CASE_ST(ut_setup, ut_teardown,
8346 test_AES_GCM_auth_encryption_test_case_256_3),
8347 TEST_CASE_ST(ut_setup, ut_teardown,
8348 test_AES_GCM_auth_encryption_test_case_256_4),
8349 TEST_CASE_ST(ut_setup, ut_teardown,
8350 test_AES_GCM_auth_encryption_test_case_256_5),
8351 TEST_CASE_ST(ut_setup, ut_teardown,
8352 test_AES_GCM_auth_encryption_test_case_256_6),
8353 TEST_CASE_ST(ut_setup, ut_teardown,
8354 test_AES_GCM_auth_encryption_test_case_256_7),
8356 /** AES GCM Authenticated Decryption 256 bits key */
8357 TEST_CASE_ST(ut_setup, ut_teardown,
8358 test_AES_GCM_auth_decryption_test_case_256_1),
8359 TEST_CASE_ST(ut_setup, ut_teardown,
8360 test_AES_GCM_auth_decryption_test_case_256_2),
8361 TEST_CASE_ST(ut_setup, ut_teardown,
8362 test_AES_GCM_auth_decryption_test_case_256_3),
8363 TEST_CASE_ST(ut_setup, ut_teardown,
8364 test_AES_GCM_auth_decryption_test_case_256_4),
8365 TEST_CASE_ST(ut_setup, ut_teardown,
8366 test_AES_GCM_auth_decryption_test_case_256_5),
8367 TEST_CASE_ST(ut_setup, ut_teardown,
8368 test_AES_GCM_auth_decryption_test_case_256_6),
8369 TEST_CASE_ST(ut_setup, ut_teardown,
8370 test_AES_GCM_auth_decryption_test_case_256_7),
8372 /** AES GMAC Authentication */
8373 TEST_CASE_ST(ut_setup, ut_teardown,
8374 test_AES_GMAC_authentication_test_case_1),
8375 TEST_CASE_ST(ut_setup, ut_teardown,
8376 test_AES_GMAC_authentication_verify_test_case_1),
8377 TEST_CASE_ST(ut_setup, ut_teardown,
8378 test_AES_GMAC_authentication_test_case_2),
8379 TEST_CASE_ST(ut_setup, ut_teardown,
8380 test_AES_GMAC_authentication_verify_test_case_2),
8381 TEST_CASE_ST(ut_setup, ut_teardown,
8382 test_AES_GMAC_authentication_test_case_3),
8383 TEST_CASE_ST(ut_setup, ut_teardown,
8384 test_AES_GMAC_authentication_verify_test_case_3),
8385 TEST_CASE_ST(ut_setup, ut_teardown,
8386 test_AES_GMAC_authentication_test_case_4),
8387 TEST_CASE_ST(ut_setup, ut_teardown,
8388 test_AES_GMAC_authentication_verify_test_case_4),
8390 /** Scatter-Gather */
8391 TEST_CASE_ST(ut_setup, ut_teardown,
8392 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
8394 /** Negative tests */
8395 TEST_CASE_ST(ut_setup, ut_teardown,
8396 authentication_verify_HMAC_SHA1_fail_data_corrupt),
8397 TEST_CASE_ST(ut_setup, ut_teardown,
8398 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
8399 TEST_CASE_ST(ut_setup, ut_teardown,
8400 authentication_verify_AES128_GMAC_fail_data_corrupt),
8401 TEST_CASE_ST(ut_setup, ut_teardown,
8402 authentication_verify_AES128_GMAC_fail_tag_corrupt),
8403 TEST_CASE_ST(ut_setup, ut_teardown,
8404 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
8405 TEST_CASE_ST(ut_setup, ut_teardown,
8406 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
8408 TEST_CASES_END() /**< NULL terminate unit test array */
8412 static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
8413 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
8414 .setup = testsuite_setup,
8415 .teardown = testsuite_teardown,
8416 .unit_test_cases = {
8417 /** AES GCM Authenticated Encryption */
8418 TEST_CASE_ST(ut_setup, ut_teardown,
8419 test_AES_GCM_authenticated_encryption_test_case_1),
8420 TEST_CASE_ST(ut_setup, ut_teardown,
8421 test_AES_GCM_authenticated_encryption_test_case_2),
8422 TEST_CASE_ST(ut_setup, ut_teardown,
8423 test_AES_GCM_authenticated_encryption_test_case_3),
8424 TEST_CASE_ST(ut_setup, ut_teardown,
8425 test_AES_GCM_authenticated_encryption_test_case_4),
8426 TEST_CASE_ST(ut_setup, ut_teardown,
8427 test_AES_GCM_authenticated_encryption_test_case_5),
8428 TEST_CASE_ST(ut_setup, ut_teardown,
8429 test_AES_GCM_authenticated_encryption_test_case_6),
8430 TEST_CASE_ST(ut_setup, ut_teardown,
8431 test_AES_GCM_authenticated_encryption_test_case_7),
8433 /** AES GCM Authenticated Decryption */
8434 TEST_CASE_ST(ut_setup, ut_teardown,
8435 test_AES_GCM_authenticated_decryption_test_case_1),
8436 TEST_CASE_ST(ut_setup, ut_teardown,
8437 test_AES_GCM_authenticated_decryption_test_case_2),
8438 TEST_CASE_ST(ut_setup, ut_teardown,
8439 test_AES_GCM_authenticated_decryption_test_case_3),
8440 TEST_CASE_ST(ut_setup, ut_teardown,
8441 test_AES_GCM_authenticated_decryption_test_case_4),
8442 TEST_CASE_ST(ut_setup, ut_teardown,
8443 test_AES_GCM_authenticated_decryption_test_case_5),
8444 TEST_CASE_ST(ut_setup, ut_teardown,
8445 test_AES_GCM_authenticated_decryption_test_case_6),
8446 TEST_CASE_ST(ut_setup, ut_teardown,
8447 test_AES_GCM_authenticated_decryption_test_case_7),
8449 /** AES GCM Authenticated Encryption 192 bits key */
8450 TEST_CASE_ST(ut_setup, ut_teardown,
8451 test_AES_GCM_auth_encryption_test_case_192_1),
8452 TEST_CASE_ST(ut_setup, ut_teardown,
8453 test_AES_GCM_auth_encryption_test_case_192_2),
8454 TEST_CASE_ST(ut_setup, ut_teardown,
8455 test_AES_GCM_auth_encryption_test_case_192_3),
8456 TEST_CASE_ST(ut_setup, ut_teardown,
8457 test_AES_GCM_auth_encryption_test_case_192_4),
8458 TEST_CASE_ST(ut_setup, ut_teardown,
8459 test_AES_GCM_auth_encryption_test_case_192_5),
8460 TEST_CASE_ST(ut_setup, ut_teardown,
8461 test_AES_GCM_auth_encryption_test_case_192_6),
8462 TEST_CASE_ST(ut_setup, ut_teardown,
8463 test_AES_GCM_auth_encryption_test_case_192_7),
8465 /** AES GCM Authenticated Decryption 192 bits key */
8466 TEST_CASE_ST(ut_setup, ut_teardown,
8467 test_AES_GCM_auth_decryption_test_case_192_1),
8468 TEST_CASE_ST(ut_setup, ut_teardown,
8469 test_AES_GCM_auth_decryption_test_case_192_2),
8470 TEST_CASE_ST(ut_setup, ut_teardown,
8471 test_AES_GCM_auth_decryption_test_case_192_3),
8472 TEST_CASE_ST(ut_setup, ut_teardown,
8473 test_AES_GCM_auth_decryption_test_case_192_4),
8474 TEST_CASE_ST(ut_setup, ut_teardown,
8475 test_AES_GCM_auth_decryption_test_case_192_5),
8476 TEST_CASE_ST(ut_setup, ut_teardown,
8477 test_AES_GCM_auth_decryption_test_case_192_6),
8478 TEST_CASE_ST(ut_setup, ut_teardown,
8479 test_AES_GCM_auth_decryption_test_case_192_7),
8481 /** AES GCM Authenticated Encryption 256 bits key */
8482 TEST_CASE_ST(ut_setup, ut_teardown,
8483 test_AES_GCM_auth_encryption_test_case_256_1),
8484 TEST_CASE_ST(ut_setup, ut_teardown,
8485 test_AES_GCM_auth_encryption_test_case_256_2),
8486 TEST_CASE_ST(ut_setup, ut_teardown,
8487 test_AES_GCM_auth_encryption_test_case_256_3),
8488 TEST_CASE_ST(ut_setup, ut_teardown,
8489 test_AES_GCM_auth_encryption_test_case_256_4),
8490 TEST_CASE_ST(ut_setup, ut_teardown,
8491 test_AES_GCM_auth_encryption_test_case_256_5),
8492 TEST_CASE_ST(ut_setup, ut_teardown,
8493 test_AES_GCM_auth_encryption_test_case_256_6),
8494 TEST_CASE_ST(ut_setup, ut_teardown,
8495 test_AES_GCM_auth_encryption_test_case_256_7),
8497 /** AES GCM Authenticated Decryption 256 bits key */
8498 TEST_CASE_ST(ut_setup, ut_teardown,
8499 test_AES_GCM_auth_decryption_test_case_256_1),
8500 TEST_CASE_ST(ut_setup, ut_teardown,
8501 test_AES_GCM_auth_decryption_test_case_256_2),
8502 TEST_CASE_ST(ut_setup, ut_teardown,
8503 test_AES_GCM_auth_decryption_test_case_256_3),
8504 TEST_CASE_ST(ut_setup, ut_teardown,
8505 test_AES_GCM_auth_decryption_test_case_256_4),
8506 TEST_CASE_ST(ut_setup, ut_teardown,
8507 test_AES_GCM_auth_decryption_test_case_256_5),
8508 TEST_CASE_ST(ut_setup, ut_teardown,
8509 test_AES_GCM_auth_decryption_test_case_256_6),
8510 TEST_CASE_ST(ut_setup, ut_teardown,
8511 test_AES_GCM_auth_decryption_test_case_256_7),
8513 /** AES GCM Authenticated Encryption big aad size */
8514 TEST_CASE_ST(ut_setup, ut_teardown,
8515 test_AES_GCM_auth_encryption_test_case_aad_1),
8516 TEST_CASE_ST(ut_setup, ut_teardown,
8517 test_AES_GCM_auth_encryption_test_case_aad_2),
8519 /** AES GCM Authenticated Decryption big aad size */
8520 TEST_CASE_ST(ut_setup, ut_teardown,
8521 test_AES_GCM_auth_decryption_test_case_aad_1),
8522 TEST_CASE_ST(ut_setup, ut_teardown,
8523 test_AES_GCM_auth_decryption_test_case_aad_2),
8525 /** AES GMAC Authentication */
8526 TEST_CASE_ST(ut_setup, ut_teardown,
8527 test_AES_GMAC_authentication_test_case_1),
8528 TEST_CASE_ST(ut_setup, ut_teardown,
8529 test_AES_GMAC_authentication_verify_test_case_1),
8530 TEST_CASE_ST(ut_setup, ut_teardown,
8531 test_AES_GMAC_authentication_test_case_3),
8532 TEST_CASE_ST(ut_setup, ut_teardown,
8533 test_AES_GMAC_authentication_verify_test_case_3),
8534 TEST_CASE_ST(ut_setup, ut_teardown,
8535 test_AES_GMAC_authentication_test_case_4),
8536 TEST_CASE_ST(ut_setup, ut_teardown,
8537 test_AES_GMAC_authentication_verify_test_case_4),
8539 /** Negative tests */
8540 TEST_CASE_ST(ut_setup, ut_teardown,
8541 authentication_verify_AES128_GMAC_fail_data_corrupt),
8542 TEST_CASE_ST(ut_setup, ut_teardown,
8543 authentication_verify_AES128_GMAC_fail_tag_corrupt),
8545 /** Out of place tests */
8546 TEST_CASE_ST(ut_setup, ut_teardown,
8547 test_AES_GCM_authenticated_encryption_oop_test_case_1),
8548 TEST_CASE_ST(ut_setup, ut_teardown,
8549 test_AES_GCM_authenticated_decryption_oop_test_case_1),
8551 /** Session-less tests */
8552 TEST_CASE_ST(ut_setup, ut_teardown,
8553 test_AES_GCM_authenticated_encryption_sessionless_test_case_1),
8554 TEST_CASE_ST(ut_setup, ut_teardown,
8555 test_AES_GCM_authenticated_decryption_sessionless_test_case_1),
8557 /** Scatter-Gather */
8558 TEST_CASE_ST(ut_setup, ut_teardown,
8559 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
8561 TEST_CASES_END() /**< NULL terminate unit test array */
8565 static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
8566 .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
8567 .setup = testsuite_setup,
8568 .teardown = testsuite_teardown,
8569 .unit_test_cases = {
8570 /** KASUMI encrypt only (UEA1) */
8571 TEST_CASE_ST(ut_setup, ut_teardown,
8572 test_kasumi_encryption_test_case_1),
8573 TEST_CASE_ST(ut_setup, ut_teardown,
8574 test_kasumi_encryption_test_case_1_sgl),
8575 TEST_CASE_ST(ut_setup, ut_teardown,
8576 test_kasumi_encryption_test_case_2),
8577 TEST_CASE_ST(ut_setup, ut_teardown,
8578 test_kasumi_encryption_test_case_3),
8579 TEST_CASE_ST(ut_setup, ut_teardown,
8580 test_kasumi_encryption_test_case_4),
8581 TEST_CASE_ST(ut_setup, ut_teardown,
8582 test_kasumi_encryption_test_case_5),
8583 /** KASUMI decrypt only (UEA1) */
8584 TEST_CASE_ST(ut_setup, ut_teardown,
8585 test_kasumi_decryption_test_case_1),
8586 TEST_CASE_ST(ut_setup, ut_teardown,
8587 test_kasumi_decryption_test_case_2),
8588 TEST_CASE_ST(ut_setup, ut_teardown,
8589 test_kasumi_decryption_test_case_3),
8590 TEST_CASE_ST(ut_setup, ut_teardown,
8591 test_kasumi_decryption_test_case_4),
8592 TEST_CASE_ST(ut_setup, ut_teardown,
8593 test_kasumi_decryption_test_case_5),
8595 TEST_CASE_ST(ut_setup, ut_teardown,
8596 test_kasumi_encryption_test_case_1_oop),
8597 TEST_CASE_ST(ut_setup, ut_teardown,
8598 test_kasumi_encryption_test_case_1_oop_sgl),
8601 TEST_CASE_ST(ut_setup, ut_teardown,
8602 test_kasumi_decryption_test_case_1_oop),
8604 /** KASUMI hash only (UIA1) */
8605 TEST_CASE_ST(ut_setup, ut_teardown,
8606 test_kasumi_hash_generate_test_case_1),
8607 TEST_CASE_ST(ut_setup, ut_teardown,
8608 test_kasumi_hash_generate_test_case_2),
8609 TEST_CASE_ST(ut_setup, ut_teardown,
8610 test_kasumi_hash_generate_test_case_3),
8611 TEST_CASE_ST(ut_setup, ut_teardown,
8612 test_kasumi_hash_generate_test_case_4),
8613 TEST_CASE_ST(ut_setup, ut_teardown,
8614 test_kasumi_hash_generate_test_case_5),
8615 TEST_CASE_ST(ut_setup, ut_teardown,
8616 test_kasumi_hash_generate_test_case_6),
8617 TEST_CASE_ST(ut_setup, ut_teardown,
8618 test_kasumi_hash_verify_test_case_1),
8619 TEST_CASE_ST(ut_setup, ut_teardown,
8620 test_kasumi_hash_verify_test_case_2),
8621 TEST_CASE_ST(ut_setup, ut_teardown,
8622 test_kasumi_hash_verify_test_case_3),
8623 TEST_CASE_ST(ut_setup, ut_teardown,
8624 test_kasumi_hash_verify_test_case_4),
8625 TEST_CASE_ST(ut_setup, ut_teardown,
8626 test_kasumi_hash_verify_test_case_5),
8627 TEST_CASE_ST(ut_setup, ut_teardown,
8628 test_kasumi_auth_cipher_test_case_1),
8629 TEST_CASE_ST(ut_setup, ut_teardown,
8630 test_kasumi_cipher_auth_test_case_1),
8631 TEST_CASES_END() /**< NULL terminate unit test array */
8634 static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
8635 .suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
8636 .setup = testsuite_setup,
8637 .teardown = testsuite_teardown,
8638 .unit_test_cases = {
8639 /** SNOW 3G encrypt only (UEA2) */
8640 TEST_CASE_ST(ut_setup, ut_teardown,
8641 test_snow3g_encryption_test_case_1),
8642 TEST_CASE_ST(ut_setup, ut_teardown,
8643 test_snow3g_encryption_test_case_2),
8644 TEST_CASE_ST(ut_setup, ut_teardown,
8645 test_snow3g_encryption_test_case_3),
8646 TEST_CASE_ST(ut_setup, ut_teardown,
8647 test_snow3g_encryption_test_case_4),
8648 TEST_CASE_ST(ut_setup, ut_teardown,
8649 test_snow3g_encryption_test_case_5),
8651 TEST_CASE_ST(ut_setup, ut_teardown,
8652 test_snow3g_encryption_test_case_1_oop),
8653 TEST_CASE_ST(ut_setup, ut_teardown,
8654 test_snow3g_encryption_test_case_1_oop_sgl),
8655 TEST_CASE_ST(ut_setup, ut_teardown,
8656 test_snow3g_decryption_test_case_1_oop),
8658 TEST_CASE_ST(ut_setup, ut_teardown,
8659 test_snow3g_encryption_test_case_1_offset_oop),
8661 /** SNOW 3G decrypt only (UEA2) */
8662 TEST_CASE_ST(ut_setup, ut_teardown,
8663 test_snow3g_decryption_test_case_1),
8664 TEST_CASE_ST(ut_setup, ut_teardown,
8665 test_snow3g_decryption_test_case_2),
8666 TEST_CASE_ST(ut_setup, ut_teardown,
8667 test_snow3g_decryption_test_case_3),
8668 TEST_CASE_ST(ut_setup, ut_teardown,
8669 test_snow3g_decryption_test_case_4),
8670 TEST_CASE_ST(ut_setup, ut_teardown,
8671 test_snow3g_decryption_test_case_5),
8672 TEST_CASE_ST(ut_setup, ut_teardown,
8673 test_snow3g_hash_generate_test_case_1),
8674 TEST_CASE_ST(ut_setup, ut_teardown,
8675 test_snow3g_hash_generate_test_case_2),
8676 TEST_CASE_ST(ut_setup, ut_teardown,
8677 test_snow3g_hash_generate_test_case_3),
8678 /* Tests with buffers which length is not byte-aligned */
8679 TEST_CASE_ST(ut_setup, ut_teardown,
8680 test_snow3g_hash_generate_test_case_4),
8681 TEST_CASE_ST(ut_setup, ut_teardown,
8682 test_snow3g_hash_generate_test_case_5),
8683 TEST_CASE_ST(ut_setup, ut_teardown,
8684 test_snow3g_hash_generate_test_case_6),
8685 TEST_CASE_ST(ut_setup, ut_teardown,
8686 test_snow3g_hash_verify_test_case_1),
8687 TEST_CASE_ST(ut_setup, ut_teardown,
8688 test_snow3g_hash_verify_test_case_2),
8689 TEST_CASE_ST(ut_setup, ut_teardown,
8690 test_snow3g_hash_verify_test_case_3),
8691 /* Tests with buffers which length is not byte-aligned */
8692 TEST_CASE_ST(ut_setup, ut_teardown,
8693 test_snow3g_hash_verify_test_case_4),
8694 TEST_CASE_ST(ut_setup, ut_teardown,
8695 test_snow3g_hash_verify_test_case_5),
8696 TEST_CASE_ST(ut_setup, ut_teardown,
8697 test_snow3g_hash_verify_test_case_6),
8698 TEST_CASE_ST(ut_setup, ut_teardown,
8699 test_snow3g_cipher_auth_test_case_1),
8700 TEST_CASE_ST(ut_setup, ut_teardown,
8701 test_snow3g_auth_cipher_test_case_1),
8703 TEST_CASES_END() /**< NULL terminate unit test array */
8707 static struct unit_test_suite cryptodev_sw_zuc_testsuite = {
8708 .suite_name = "Crypto Device SW ZUC Unit Test Suite",
8709 .setup = testsuite_setup,
8710 .teardown = testsuite_teardown,
8711 .unit_test_cases = {
8712 /** ZUC encrypt only (EEA3) */
8713 TEST_CASE_ST(ut_setup, ut_teardown,
8714 test_zuc_encryption_test_case_1),
8715 TEST_CASE_ST(ut_setup, ut_teardown,
8716 test_zuc_encryption_test_case_2),
8717 TEST_CASE_ST(ut_setup, ut_teardown,
8718 test_zuc_encryption_test_case_3),
8719 TEST_CASE_ST(ut_setup, ut_teardown,
8720 test_zuc_encryption_test_case_4),
8721 TEST_CASE_ST(ut_setup, ut_teardown,
8722 test_zuc_encryption_test_case_5),
8723 TEST_CASE_ST(ut_setup, ut_teardown,
8724 test_zuc_hash_generate_test_case_1),
8725 TEST_CASE_ST(ut_setup, ut_teardown,
8726 test_zuc_hash_generate_test_case_2),
8727 TEST_CASE_ST(ut_setup, ut_teardown,
8728 test_zuc_hash_generate_test_case_3),
8729 TEST_CASE_ST(ut_setup, ut_teardown,
8730 test_zuc_hash_generate_test_case_4),
8731 TEST_CASE_ST(ut_setup, ut_teardown,
8732 test_zuc_hash_generate_test_case_5),
8733 TEST_CASE_ST(ut_setup, ut_teardown,
8734 test_zuc_encryption_test_case_6_sgl),
8735 TEST_CASES_END() /**< NULL terminate unit test array */
8739 static struct unit_test_suite cryptodev_dpaa2_sec_testsuite = {
8740 .suite_name = "Crypto DPAA2_SEC Unit Test Suite",
8741 .setup = testsuite_setup,
8742 .teardown = testsuite_teardown,
8743 .unit_test_cases = {
8744 TEST_CASE_ST(ut_setup, ut_teardown,
8745 test_device_configure_invalid_dev_id),
8746 TEST_CASE_ST(ut_setup, ut_teardown,
8747 test_multi_session),
8749 TEST_CASE_ST(ut_setup, ut_teardown,
8750 test_AES_chain_dpaa2_sec_all),
8751 TEST_CASE_ST(ut_setup, ut_teardown,
8752 test_3DES_chain_dpaa2_sec_all),
8753 TEST_CASE_ST(ut_setup, ut_teardown,
8754 test_AES_cipheronly_dpaa2_sec_all),
8755 TEST_CASE_ST(ut_setup, ut_teardown,
8756 test_3DES_cipheronly_dpaa2_sec_all),
8757 TEST_CASE_ST(ut_setup, ut_teardown,
8758 test_authonly_dpaa2_sec_all),
8760 /** AES GCM Authenticated Encryption */
8761 TEST_CASE_ST(ut_setup, ut_teardown,
8762 test_AES_GCM_authenticated_encryption_test_case_1),
8763 TEST_CASE_ST(ut_setup, ut_teardown,
8764 test_AES_GCM_authenticated_encryption_test_case_2),
8765 TEST_CASE_ST(ut_setup, ut_teardown,
8766 test_AES_GCM_authenticated_encryption_test_case_3),
8767 TEST_CASE_ST(ut_setup, ut_teardown,
8768 test_AES_GCM_authenticated_encryption_test_case_4),
8769 TEST_CASE_ST(ut_setup, ut_teardown,
8770 test_AES_GCM_authenticated_encryption_test_case_5),
8771 TEST_CASE_ST(ut_setup, ut_teardown,
8772 test_AES_GCM_authenticated_encryption_test_case_6),
8773 TEST_CASE_ST(ut_setup, ut_teardown,
8774 test_AES_GCM_authenticated_encryption_test_case_7),
8776 /** AES GCM Authenticated Decryption */
8777 TEST_CASE_ST(ut_setup, ut_teardown,
8778 test_AES_GCM_authenticated_decryption_test_case_1),
8779 TEST_CASE_ST(ut_setup, ut_teardown,
8780 test_AES_GCM_authenticated_decryption_test_case_2),
8781 TEST_CASE_ST(ut_setup, ut_teardown,
8782 test_AES_GCM_authenticated_decryption_test_case_3),
8783 TEST_CASE_ST(ut_setup, ut_teardown,
8784 test_AES_GCM_authenticated_decryption_test_case_4),
8785 TEST_CASE_ST(ut_setup, ut_teardown,
8786 test_AES_GCM_authenticated_decryption_test_case_5),
8787 TEST_CASE_ST(ut_setup, ut_teardown,
8788 test_AES_GCM_authenticated_decryption_test_case_6),
8789 TEST_CASE_ST(ut_setup, ut_teardown,
8790 test_AES_GCM_authenticated_decryption_test_case_7),
8792 /** AES GCM Authenticated Encryption 192 bits key */
8793 TEST_CASE_ST(ut_setup, ut_teardown,
8794 test_AES_GCM_auth_encryption_test_case_192_1),
8795 TEST_CASE_ST(ut_setup, ut_teardown,
8796 test_AES_GCM_auth_encryption_test_case_192_2),
8797 TEST_CASE_ST(ut_setup, ut_teardown,
8798 test_AES_GCM_auth_encryption_test_case_192_3),
8799 TEST_CASE_ST(ut_setup, ut_teardown,
8800 test_AES_GCM_auth_encryption_test_case_192_4),
8801 TEST_CASE_ST(ut_setup, ut_teardown,
8802 test_AES_GCM_auth_encryption_test_case_192_5),
8803 TEST_CASE_ST(ut_setup, ut_teardown,
8804 test_AES_GCM_auth_encryption_test_case_192_6),
8805 TEST_CASE_ST(ut_setup, ut_teardown,
8806 test_AES_GCM_auth_encryption_test_case_192_7),
8808 /** AES GCM Authenticated Decryption 192 bits key */
8809 TEST_CASE_ST(ut_setup, ut_teardown,
8810 test_AES_GCM_auth_decryption_test_case_192_1),
8811 TEST_CASE_ST(ut_setup, ut_teardown,
8812 test_AES_GCM_auth_decryption_test_case_192_2),
8813 TEST_CASE_ST(ut_setup, ut_teardown,
8814 test_AES_GCM_auth_decryption_test_case_192_3),
8815 TEST_CASE_ST(ut_setup, ut_teardown,
8816 test_AES_GCM_auth_decryption_test_case_192_4),
8817 TEST_CASE_ST(ut_setup, ut_teardown,
8818 test_AES_GCM_auth_decryption_test_case_192_5),
8819 TEST_CASE_ST(ut_setup, ut_teardown,
8820 test_AES_GCM_auth_decryption_test_case_192_6),
8821 TEST_CASE_ST(ut_setup, ut_teardown,
8822 test_AES_GCM_auth_decryption_test_case_192_7),
8824 /** AES GCM Authenticated Encryption 256 bits key */
8825 TEST_CASE_ST(ut_setup, ut_teardown,
8826 test_AES_GCM_auth_encryption_test_case_256_1),
8827 TEST_CASE_ST(ut_setup, ut_teardown,
8828 test_AES_GCM_auth_encryption_test_case_256_2),
8829 TEST_CASE_ST(ut_setup, ut_teardown,
8830 test_AES_GCM_auth_encryption_test_case_256_3),
8831 TEST_CASE_ST(ut_setup, ut_teardown,
8832 test_AES_GCM_auth_encryption_test_case_256_4),
8833 TEST_CASE_ST(ut_setup, ut_teardown,
8834 test_AES_GCM_auth_encryption_test_case_256_5),
8835 TEST_CASE_ST(ut_setup, ut_teardown,
8836 test_AES_GCM_auth_encryption_test_case_256_6),
8837 TEST_CASE_ST(ut_setup, ut_teardown,
8838 test_AES_GCM_auth_encryption_test_case_256_7),
8840 /** AES GCM Authenticated Decryption 256 bits key */
8841 TEST_CASE_ST(ut_setup, ut_teardown,
8842 test_AES_GCM_auth_decryption_test_case_256_1),
8843 TEST_CASE_ST(ut_setup, ut_teardown,
8844 test_AES_GCM_auth_decryption_test_case_256_2),
8845 TEST_CASE_ST(ut_setup, ut_teardown,
8846 test_AES_GCM_auth_decryption_test_case_256_3),
8847 TEST_CASE_ST(ut_setup, ut_teardown,
8848 test_AES_GCM_auth_decryption_test_case_256_4),
8849 TEST_CASE_ST(ut_setup, ut_teardown,
8850 test_AES_GCM_auth_decryption_test_case_256_5),
8851 TEST_CASE_ST(ut_setup, ut_teardown,
8852 test_AES_GCM_auth_decryption_test_case_256_6),
8853 TEST_CASE_ST(ut_setup, ut_teardown,
8854 test_AES_GCM_auth_decryption_test_case_256_7),
8856 TEST_CASES_END() /**< NULL terminate unit test array */
8860 static struct unit_test_suite cryptodev_null_testsuite = {
8861 .suite_name = "Crypto Device NULL Unit Test Suite",
8862 .setup = testsuite_setup,
8863 .teardown = testsuite_teardown,
8864 .unit_test_cases = {
8865 TEST_CASE_ST(ut_setup, ut_teardown,
8866 test_null_auth_only_operation),
8867 TEST_CASE_ST(ut_setup, ut_teardown,
8868 test_null_cipher_only_operation),
8869 TEST_CASE_ST(ut_setup, ut_teardown,
8870 test_null_cipher_auth_operation),
8871 TEST_CASE_ST(ut_setup, ut_teardown,
8872 test_null_auth_cipher_operation),
8873 TEST_CASE_ST(ut_setup, ut_teardown,
8874 test_null_invalid_operation),
8875 TEST_CASE_ST(ut_setup, ut_teardown,
8876 test_null_burst_operation),
8878 TEST_CASES_END() /**< NULL terminate unit test array */
8882 static struct unit_test_suite cryptodev_armv8_testsuite = {
8883 .suite_name = "Crypto Device ARMv8 Unit Test Suite",
8884 .setup = testsuite_setup,
8885 .teardown = testsuite_teardown,
8886 .unit_test_cases = {
8887 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
8889 /** Negative tests */
8890 TEST_CASE_ST(ut_setup, ut_teardown,
8891 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
8892 TEST_CASE_ST(ut_setup, ut_teardown,
8893 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
8895 TEST_CASES_END() /**< NULL terminate unit test array */
8900 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
8902 gbl_driver_id = rte_cryptodev_driver_id_get(
8903 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
8905 if (gbl_driver_id == -1) {
8906 RTE_LOG(ERR, USER1, "QAT PMD must be loaded. Check if "
8907 "CONFIG_RTE_LIBRTE_PMD_QAT is enabled "
8908 "in config file to run this testsuite.\n");
8912 return unit_test_suite_runner(&cryptodev_qat_testsuite);
8916 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
8918 gbl_driver_id = rte_cryptodev_driver_id_get(
8919 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
8921 if (gbl_driver_id == -1) {
8922 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded. Check if "
8923 "CONFIG_RTE_LIBRTE_PMD_AESNI_MB is enabled "
8924 "in config file to run this testsuite.\n");
8928 return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
8932 test_cryptodev_openssl(void)
8934 gbl_driver_id = rte_cryptodev_driver_id_get(
8935 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
8937 if (gbl_driver_id == -1) {
8938 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded. Check if "
8939 "CONFIG_RTE_LIBRTE_PMD_AESNI_MB is enabled "
8940 "in config file to run this testsuite.\n");
8944 return unit_test_suite_runner(&cryptodev_openssl_testsuite);
8948 test_cryptodev_aesni_gcm(void)
8950 gbl_driver_id = rte_cryptodev_driver_id_get(
8951 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
8953 if (gbl_driver_id == -1) {
8954 RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded. Check if "
8955 "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM is enabled "
8956 "in config file to run this testsuite.\n");
8960 return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
8964 test_cryptodev_null(void)
8966 gbl_driver_id = rte_cryptodev_driver_id_get(
8967 RTE_STR(CRYPTODEV_NAME_NULL_PMD));
8969 if (gbl_driver_id == -1) {
8970 RTE_LOG(ERR, USER1, "NULL PMD must be loaded. Check if "
8971 "CONFIG_RTE_LIBRTE_PMD_NULL is enabled "
8972 "in config file to run this testsuite.\n");
8976 return unit_test_suite_runner(&cryptodev_null_testsuite);
8980 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
8982 gbl_driver_id = rte_cryptodev_driver_id_get(
8983 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
8985 if (gbl_driver_id == -1) {
8986 RTE_LOG(ERR, USER1, "SNOW3G PMD must be loaded. Check if "
8987 "CONFIG_RTE_LIBRTE_PMD_SNOW3G is enabled "
8988 "in config file to run this testsuite.\n");
8992 return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
8996 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
8998 gbl_driver_id = rte_cryptodev_driver_id_get(
8999 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
9001 if (gbl_driver_id == -1) {
9002 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
9003 "CONFIG_RTE_LIBRTE_PMD_KASUMI is enabled "
9004 "in config file to run this testsuite.\n");
9008 return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
9012 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
9014 gbl_driver_id = rte_cryptodev_driver_id_get(
9015 RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
9017 if (gbl_driver_id == -1) {
9018 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if "
9019 "CONFIG_RTE_LIBRTE_PMD_ZUC is enabled "
9020 "in config file to run this testsuite.\n");
9024 return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
9028 test_cryptodev_armv8(void)
9030 gbl_driver_id = rte_cryptodev_driver_id_get(
9031 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
9033 if (gbl_driver_id == -1) {
9034 RTE_LOG(ERR, USER1, "ARMV8 PMD must be loaded. Check if "
9035 "CONFIG_RTE_LIBRTE_PMD_ARMV8 is enabled "
9036 "in config file to run this testsuite.\n");
9040 return unit_test_suite_runner(&cryptodev_armv8_testsuite);
9043 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
9046 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
9048 gbl_driver_id = rte_cryptodev_driver_id_get(
9049 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
9051 if (gbl_driver_id == -1) {
9052 RTE_LOG(ERR, USER1, "SCHEDULER PMD must be loaded. Check if "
9053 "CONFIG_RTE_LIBRTE_PMD_SCHEDULER is enabled "
9054 "in config file to run this testsuite.\n");
9058 if (rte_cryptodev_driver_id_get(
9059 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) == -1) {
9060 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
9061 " enabled in config file to run this testsuite.\n");
9064 return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
9067 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
9072 test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
9074 gbl_driver_id = rte_cryptodev_driver_id_get(
9075 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD));
9077 if (gbl_driver_id == -1) {
9078 RTE_LOG(ERR, USER1, "DPAA2 SEC PMD must be loaded. Check if "
9079 "CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC is enabled "
9080 "in config file to run this testsuite.\n");
9084 return unit_test_suite_runner(&cryptodev_dpaa2_sec_testsuite);
9087 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
9088 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
9089 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
9090 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
9091 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
9092 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
9093 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
9094 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
9095 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);
9096 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec);