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>
39 #include <rte_crypto.h>
40 #include <rte_cryptodev.h>
41 #include <rte_cryptodev_pmd.h>
43 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
44 #include <rte_cryptodev_scheduler.h>
45 #include <rte_cryptodev_scheduler_operations.h>
49 #include "test_cryptodev.h"
51 #include "test_cryptodev_blockcipher.h"
52 #include "test_cryptodev_aes_test_vectors.h"
53 #include "test_cryptodev_des_test_vectors.h"
54 #include "test_cryptodev_hash_test_vectors.h"
55 #include "test_cryptodev_kasumi_test_vectors.h"
56 #include "test_cryptodev_kasumi_hash_test_vectors.h"
57 #include "test_cryptodev_snow3g_test_vectors.h"
58 #include "test_cryptodev_snow3g_hash_test_vectors.h"
59 #include "test_cryptodev_zuc_test_vectors.h"
60 #include "test_cryptodev_zuc_hash_test_vectors.h"
61 #include "test_cryptodev_gcm_test_vectors.h"
62 #include "test_cryptodev_hmac_test_vectors.h"
64 static enum rte_cryptodev_type gbl_cryptodev_type;
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_cryptodev_config conf;
71 struct rte_cryptodev_qp_conf qp_conf;
73 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
74 uint8_t valid_dev_count;
77 struct crypto_unittest_params {
78 struct rte_crypto_sym_xform cipher_xform;
79 struct rte_crypto_sym_xform auth_xform;
81 struct rte_cryptodev_sym_session *sess;
83 struct rte_crypto_op *op;
85 struct rte_mbuf *obuf, *ibuf;
90 #define ALIGN_POW2_ROUNDUP(num, align) \
91 (((num) + (align) - 1) & ~((align) - 1))
94 * Forward declarations.
97 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
98 struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
102 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
103 struct crypto_unittest_params *ut_params,
104 struct crypto_testsuite_params *ts_param,
105 const uint8_t *cipher,
106 const uint8_t *digest,
109 static struct rte_mbuf *
110 setup_test_string(struct rte_mempool *mpool,
111 const char *string, size_t len, uint8_t blocksize)
113 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
114 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
116 memset(m->buf_addr, 0, m->buf_len);
118 char *dst = rte_pktmbuf_append(m, t_len);
125 rte_memcpy(dst, string, t_len);
127 memset(dst, 0, t_len);
133 /* Get number of bytes in X bits (rounding up) */
135 ceil_byte_length(uint32_t num_bits)
138 return ((num_bits >> 3) + 1);
140 return (num_bits >> 3);
143 static struct rte_crypto_op *
144 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
146 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
147 printf("Error sending packet for encryption");
153 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
159 static struct crypto_testsuite_params testsuite_params = { NULL };
160 static struct crypto_unittest_params unittest_params;
163 testsuite_setup(void)
165 struct crypto_testsuite_params *ts_params = &testsuite_params;
166 struct rte_cryptodev_info info;
167 uint32_t i = 0, nb_devs, dev_id;
171 memset(ts_params, 0, sizeof(*ts_params));
173 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
174 if (ts_params->mbuf_pool == NULL) {
175 /* Not already created so create */
176 ts_params->mbuf_pool = rte_pktmbuf_pool_create(
178 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
180 if (ts_params->mbuf_pool == NULL) {
181 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
186 ts_params->large_mbuf_pool = rte_mempool_lookup(
187 "CRYPTO_LARGE_MBUFPOOL");
188 if (ts_params->large_mbuf_pool == NULL) {
189 /* Not already created so create */
190 ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
191 "CRYPTO_LARGE_MBUFPOOL",
194 if (ts_params->large_mbuf_pool == NULL) {
196 "Can't create CRYPTO_LARGE_MBUFPOOL\n");
201 ts_params->op_mpool = rte_crypto_op_pool_create(
202 "MBUF_CRYPTO_SYM_OP_POOL",
203 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
204 NUM_MBUFS, MBUF_CACHE_SIZE,
206 sizeof(struct rte_crypto_sym_xform),
208 if (ts_params->op_mpool == NULL) {
209 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
213 /* Create 2 AESNI MB devices if required */
214 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {
215 #ifndef RTE_LIBRTE_PMD_AESNI_MB
216 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
217 " enabled in config file to run this testsuite.\n");
220 nb_devs = rte_cryptodev_count_devtype(
221 RTE_CRYPTODEV_AESNI_MB_PMD);
223 for (i = nb_devs; i < 2; i++) {
224 ret = rte_eal_vdev_init(
225 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
227 TEST_ASSERT(ret == 0,
228 "Failed to create instance %u of"
230 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
235 /* Create 2 AESNI GCM devices if required */
236 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_GCM_PMD) {
237 #ifndef RTE_LIBRTE_PMD_AESNI_GCM
238 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
239 " enabled in config file to run this testsuite.\n");
242 nb_devs = rte_cryptodev_count_devtype(
243 RTE_CRYPTODEV_AESNI_GCM_PMD);
245 for (i = nb_devs; i < 2; i++) {
246 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
247 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
248 "Failed to create instance %u of"
250 i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
255 /* Create 2 SNOW 3G devices if required */
256 if (gbl_cryptodev_type == RTE_CRYPTODEV_SNOW3G_PMD) {
257 #ifndef RTE_LIBRTE_PMD_SNOW3G
258 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
259 " enabled in config file to run this testsuite.\n");
262 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
264 for (i = nb_devs; i < 2; i++) {
265 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
266 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
267 "Failed to create instance %u of"
269 i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
274 /* Create 2 KASUMI devices if required */
275 if (gbl_cryptodev_type == RTE_CRYPTODEV_KASUMI_PMD) {
276 #ifndef RTE_LIBRTE_PMD_KASUMI
277 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_KASUMI must be"
278 " enabled in config file to run this testsuite.\n");
281 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_KASUMI_PMD);
283 for (i = nb_devs; i < 2; i++) {
284 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
285 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
286 "Failed to create instance %u of"
288 i, RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
293 /* Create 2 ZUC devices if required */
294 if (gbl_cryptodev_type == RTE_CRYPTODEV_ZUC_PMD) {
295 #ifndef RTE_LIBRTE_PMD_ZUC
296 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ZUC must be"
297 " enabled in config file to run this testsuite.\n");
300 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_ZUC_PMD);
302 for (i = nb_devs; i < 2; i++) {
303 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
304 RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
305 "Failed to create instance %u of"
307 i, RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
312 /* Create 2 NULL devices if required */
313 if (gbl_cryptodev_type == RTE_CRYPTODEV_NULL_PMD) {
314 #ifndef RTE_LIBRTE_PMD_NULL_CRYPTO
315 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO must be"
316 " enabled in config file to run this testsuite.\n");
319 nb_devs = rte_cryptodev_count_devtype(
320 RTE_CRYPTODEV_NULL_PMD);
322 for (i = nb_devs; i < 2; i++) {
323 int dev_id = rte_eal_vdev_init(
324 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
326 TEST_ASSERT(dev_id >= 0,
327 "Failed to create instance %u of"
329 i, RTE_STR(CRYPTODEV_NAME_NULL_PMD));
334 /* Create 2 OPENSSL devices if required */
335 if (gbl_cryptodev_type == RTE_CRYPTODEV_OPENSSL_PMD) {
336 #ifndef RTE_LIBRTE_PMD_OPENSSL
337 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_OPENSSL must be"
338 " enabled in config file to run this testsuite.\n");
341 nb_devs = rte_cryptodev_count_devtype(
342 RTE_CRYPTODEV_OPENSSL_PMD);
344 for (i = nb_devs; i < 2; i++) {
345 ret = rte_eal_vdev_init(
346 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
349 TEST_ASSERT(ret == 0, "Failed to create "
350 "instance %u of pmd : %s", i,
351 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
356 /* Create 2 ARMv8 devices if required */
357 if (gbl_cryptodev_type == RTE_CRYPTODEV_ARMV8_PMD) {
358 #ifndef RTE_LIBRTE_PMD_ARMV8_CRYPTO
359 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO must be"
360 " enabled in config file to run this testsuite.\n");
363 nb_devs = rte_cryptodev_count_devtype(
364 RTE_CRYPTODEV_ARMV8_PMD);
366 for (i = nb_devs; i < 2; i++) {
367 ret = rte_eal_vdev_init(
368 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
371 TEST_ASSERT(ret == 0, "Failed to create "
372 "instance %u of pmd : %s", i,
373 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
378 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
379 if (gbl_cryptodev_type == RTE_CRYPTODEV_SCHEDULER_PMD) {
381 #ifndef RTE_LIBRTE_PMD_AESNI_MB
382 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
383 " enabled in config file to run this testsuite.\n");
386 nb_devs = rte_cryptodev_count_devtype(
387 RTE_CRYPTODEV_SCHEDULER_PMD);
389 ret = rte_eal_vdev_init(
390 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD),
393 TEST_ASSERT(ret == 0,
394 "Failed to create instance %u of"
396 i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
399 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
401 #ifndef RTE_LIBRTE_PMD_QAT
402 if (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {
403 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
404 "in config file to run this testsuite.\n");
409 nb_devs = rte_cryptodev_count();
411 RTE_LOG(ERR, USER1, "No crypto devices found?\n");
415 /* Create list of valid crypto devs */
416 for (i = 0; i < nb_devs; i++) {
417 rte_cryptodev_info_get(i, &info);
418 if (info.dev_type == gbl_cryptodev_type)
419 ts_params->valid_devs[ts_params->valid_dev_count++] = i;
422 if (ts_params->valid_dev_count < 1)
425 /* Set up all the qps on the first of the valid devices found */
427 dev_id = ts_params->valid_devs[0];
429 rte_cryptodev_info_get(dev_id, &info);
431 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
432 ts_params->conf.socket_id = SOCKET_ID_ANY;
433 ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
435 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
437 "Failed to configure cryptodev %u with %u qps",
438 dev_id, ts_params->conf.nb_queue_pairs);
440 ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
442 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
443 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
444 dev_id, qp_id, &ts_params->qp_conf,
445 rte_cryptodev_socket_id(dev_id)),
446 "Failed to setup queue pair %u on cryptodev %u",
454 testsuite_teardown(void)
456 struct crypto_testsuite_params *ts_params = &testsuite_params;
458 if (ts_params->mbuf_pool != NULL) {
459 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
460 rte_mempool_avail_count(ts_params->mbuf_pool));
463 if (ts_params->op_mpool != NULL) {
464 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
465 rte_mempool_avail_count(ts_params->op_mpool));
473 struct crypto_testsuite_params *ts_params = &testsuite_params;
474 struct crypto_unittest_params *ut_params = &unittest_params;
478 /* Clear unit test parameters before running test */
479 memset(ut_params, 0, sizeof(*ut_params));
481 /* Reconfigure device to default parameters */
482 ts_params->conf.socket_id = SOCKET_ID_ANY;
483 ts_params->conf.session_mp.nb_objs = DEFAULT_NUM_OPS_INFLIGHT;
485 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
487 "Failed to configure cryptodev %u",
488 ts_params->valid_devs[0]);
490 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
491 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
492 ts_params->valid_devs[0], qp_id,
494 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
495 "Failed to setup queue pair %u on cryptodev %u",
496 qp_id, ts_params->valid_devs[0]);
500 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
502 /* Start the device */
503 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
504 "Failed to start cryptodev %u",
505 ts_params->valid_devs[0]);
513 struct crypto_testsuite_params *ts_params = &testsuite_params;
514 struct crypto_unittest_params *ut_params = &unittest_params;
515 struct rte_cryptodev_stats stats;
517 /* free crypto session structure */
518 if (ut_params->sess) {
519 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
521 ut_params->sess = NULL;
524 /* free crypto operation structure */
526 rte_crypto_op_free(ut_params->op);
529 * free mbuf - both obuf and ibuf are usually the same,
530 * so check if they point at the same address is necessary,
531 * to avoid freeing the mbuf twice.
533 if (ut_params->obuf) {
534 rte_pktmbuf_free(ut_params->obuf);
535 if (ut_params->ibuf == ut_params->obuf)
539 if (ut_params->ibuf) {
540 rte_pktmbuf_free(ut_params->ibuf);
544 if (ts_params->mbuf_pool != NULL)
545 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
546 rte_mempool_avail_count(ts_params->mbuf_pool));
548 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
550 /* Stop the device */
551 rte_cryptodev_stop(ts_params->valid_devs[0]);
555 test_device_configure_invalid_dev_id(void)
557 struct crypto_testsuite_params *ts_params = &testsuite_params;
558 uint16_t dev_id, num_devs = 0;
560 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
561 "Need at least %d devices for test", 1);
563 /* valid dev_id values */
564 dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
566 /* Stop the device in case it's started so it can be configured */
567 rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
569 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
570 "Failed test for rte_cryptodev_configure: "
571 "invalid dev_num %u", dev_id);
573 /* invalid dev_id values */
576 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
577 "Failed test for rte_cryptodev_configure: "
578 "invalid dev_num %u", dev_id);
582 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
583 "Failed test for rte_cryptodev_configure:"
584 "invalid dev_num %u", dev_id);
590 test_device_configure_invalid_queue_pair_ids(void)
592 struct crypto_testsuite_params *ts_params = &testsuite_params;
593 uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
595 /* Stop the device in case it's started so it can be configured */
596 rte_cryptodev_stop(ts_params->valid_devs[0]);
598 /* valid - one queue pairs */
599 ts_params->conf.nb_queue_pairs = 1;
601 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
603 "Failed to configure cryptodev: dev_id %u, qp_id %u",
604 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
607 /* valid - max value queue pairs */
608 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
610 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
612 "Failed to configure cryptodev: dev_id %u, qp_id %u",
613 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
616 /* invalid - zero queue pairs */
617 ts_params->conf.nb_queue_pairs = 0;
619 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
621 "Failed test for rte_cryptodev_configure, dev_id %u,"
623 ts_params->valid_devs[0],
624 ts_params->conf.nb_queue_pairs);
627 /* invalid - max value supported by field queue pairs */
628 ts_params->conf.nb_queue_pairs = UINT16_MAX;
630 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
632 "Failed test for rte_cryptodev_configure, dev_id %u,"
634 ts_params->valid_devs[0],
635 ts_params->conf.nb_queue_pairs);
638 /* invalid - max value + 1 queue pairs */
639 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
641 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
643 "Failed test for rte_cryptodev_configure, dev_id %u,"
645 ts_params->valid_devs[0],
646 ts_params->conf.nb_queue_pairs);
648 /* revert to original testsuite value */
649 ts_params->conf.nb_queue_pairs = orig_nb_qps;
655 test_queue_pair_descriptor_setup(void)
657 struct crypto_testsuite_params *ts_params = &testsuite_params;
658 struct rte_cryptodev_info dev_info;
659 struct rte_cryptodev_qp_conf qp_conf = {
660 .nb_descriptors = MAX_NUM_OPS_INFLIGHT
665 /* Stop the device in case it's started so it can be configured */
666 rte_cryptodev_stop(ts_params->valid_devs[0]);
669 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
671 ts_params->conf.session_mp.nb_objs = dev_info.sym.max_nb_sessions;
673 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
674 &ts_params->conf), "Failed to configure cryptodev %u",
675 ts_params->valid_devs[0]);
679 * Test various ring sizes on this device. memzones can't be
680 * freed so are re-used if ring is released and re-created.
682 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
684 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
685 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
686 ts_params->valid_devs[0], qp_id, &qp_conf,
687 rte_cryptodev_socket_id(
688 ts_params->valid_devs[0])),
690 "rte_cryptodev_queue_pair_setup: num_inflights "
691 "%u on qp %u on cryptodev %u",
692 qp_conf.nb_descriptors, qp_id,
693 ts_params->valid_devs[0]);
696 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
698 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
699 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
700 ts_params->valid_devs[0], qp_id, &qp_conf,
701 rte_cryptodev_socket_id(
702 ts_params->valid_devs[0])),
704 " rte_cryptodev_queue_pair_setup: num_inflights"
705 " %u on qp %u on cryptodev %u",
706 qp_conf.nb_descriptors, qp_id,
707 ts_params->valid_devs[0]);
710 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
712 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
713 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
714 ts_params->valid_devs[0], qp_id, &qp_conf,
715 rte_cryptodev_socket_id(
716 ts_params->valid_devs[0])),
718 "rte_cryptodev_queue_pair_setup: num_inflights"
719 " %u on qp %u on cryptodev %u",
720 qp_conf.nb_descriptors, qp_id,
721 ts_params->valid_devs[0]);
724 /* invalid number of descriptors - max supported + 2 */
725 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
727 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
728 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
729 ts_params->valid_devs[0], qp_id, &qp_conf,
730 rte_cryptodev_socket_id(
731 ts_params->valid_devs[0])),
732 "Unexpectedly passed test for "
733 "rte_cryptodev_queue_pair_setup:"
734 "num_inflights %u on qp %u on cryptodev %u",
735 qp_conf.nb_descriptors, qp_id,
736 ts_params->valid_devs[0]);
739 /* invalid number of descriptors - max value of parameter */
740 qp_conf.nb_descriptors = UINT32_MAX-1;
742 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
743 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
744 ts_params->valid_devs[0], qp_id, &qp_conf,
745 rte_cryptodev_socket_id(
746 ts_params->valid_devs[0])),
747 "Unexpectedly passed test for "
748 "rte_cryptodev_queue_pair_setup:"
749 "num_inflights %u on qp %u on cryptodev %u",
750 qp_conf.nb_descriptors, qp_id,
751 ts_params->valid_devs[0]);
754 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
756 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
757 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
758 ts_params->valid_devs[0], qp_id, &qp_conf,
759 rte_cryptodev_socket_id(
760 ts_params->valid_devs[0])),
762 " rte_cryptodev_queue_pair_setup:"
763 "num_inflights %u on qp %u on cryptodev %u",
764 qp_conf.nb_descriptors, qp_id,
765 ts_params->valid_devs[0]);
768 /* invalid number of descriptors - max supported + 1 */
769 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
771 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
772 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
773 ts_params->valid_devs[0], qp_id, &qp_conf,
774 rte_cryptodev_socket_id(
775 ts_params->valid_devs[0])),
776 "Unexpectedly passed test for "
777 "rte_cryptodev_queue_pair_setup:"
778 "num_inflights %u on qp %u on cryptodev %u",
779 qp_conf.nb_descriptors, qp_id,
780 ts_params->valid_devs[0]);
783 /* test invalid queue pair id */
784 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
786 qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; /*invalid */
788 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
789 ts_params->valid_devs[0],
791 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
792 "Failed test for rte_cryptodev_queue_pair_setup:"
793 "invalid qp %u on cryptodev %u",
794 qp_id, ts_params->valid_devs[0]);
796 qp_id = 0xffff; /*invalid*/
798 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
799 ts_params->valid_devs[0],
801 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
802 "Failed test for rte_cryptodev_queue_pair_setup:"
803 "invalid qp %u on cryptodev %u",
804 qp_id, ts_params->valid_devs[0]);
809 /* ***** Plaintext data for tests ***** */
811 const char catch_22_quote_1[] =
812 "There was only one catch and that was Catch-22, which "
813 "specified that a concern for one's safety in the face of "
814 "dangers that were real and immediate was the process of a "
815 "rational mind. Orr was crazy and could be grounded. All he "
816 "had to do was ask; and as soon as he did, he would no longer "
817 "be crazy and would have to fly more missions. Orr would be "
818 "crazy to fly more missions and sane if he didn't, but if he "
819 "was sane he had to fly them. If he flew them he was crazy "
820 "and didn't have to; but if he didn't want to he was sane and "
821 "had to. Yossarian was moved very deeply by the absolute "
822 "simplicity of this clause of Catch-22 and let out a "
823 "respectful whistle. \"That's some catch, that Catch-22\", he "
824 "observed. \"It's the best there is,\" Doc Daneeka agreed.";
826 const char catch_22_quote[] =
827 "What a lousy earth! He wondered how many people were "
828 "destitute that same night even in his own prosperous country, "
829 "how many homes were shanties, how many husbands were drunk "
830 "and wives socked, and how many children were bullied, abused, "
831 "or abandoned. How many families hungered for food they could "
832 "not afford to buy? How many hearts were broken? How many "
833 "suicides would take place that same night, how many people "
834 "would go insane? How many cockroaches and landlords would "
835 "triumph? How many winners were losers, successes failures, "
836 "and rich men poor men? How many wise guys were stupid? How "
837 "many happy endings were unhappy endings? How many honest men "
838 "were liars, brave men cowards, loyal men traitors, how many "
839 "sainted men were corrupt, how many people in positions of "
840 "trust had sold their souls to bodyguards, how many had never "
841 "had souls? How many straight-and-narrow paths were crooked "
842 "paths? How many best families were worst families and how "
843 "many good people were bad people? When you added them all up "
844 "and then subtracted, you might be left with only the children, "
845 "and perhaps with Albert Einstein and an old violinist or "
846 "sculptor somewhere.";
848 #define QUOTE_480_BYTES (480)
849 #define QUOTE_512_BYTES (512)
850 #define QUOTE_768_BYTES (768)
851 #define QUOTE_1024_BYTES (1024)
855 /* ***** SHA1 Hash Tests ***** */
857 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
859 static uint8_t hmac_sha1_key[] = {
860 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
861 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
862 0xDE, 0xF4, 0xDE, 0xAD };
864 /* ***** SHA224 Hash Tests ***** */
866 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
869 /* ***** AES-CBC Cipher Tests ***** */
871 #define CIPHER_KEY_LENGTH_AES_CBC (16)
872 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
874 static uint8_t aes_cbc_key[] = {
875 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
876 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
878 static uint8_t aes_cbc_iv[] = {
879 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
880 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
883 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
885 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
886 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
887 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
888 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
889 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
890 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
891 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
892 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
893 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
894 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
895 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
896 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
897 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
898 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
899 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
900 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
901 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
902 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
903 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
904 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
905 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
906 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
907 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
908 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
909 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
910 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
911 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
912 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
913 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
914 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
915 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
916 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
917 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
918 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
919 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
920 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
921 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
922 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
923 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
924 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
925 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
926 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
927 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
928 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
929 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
930 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
931 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
932 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
933 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
934 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
935 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
936 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
937 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
938 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
939 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
940 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
941 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
942 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
943 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
944 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
945 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
946 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
947 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
948 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
949 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
952 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
953 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
954 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
955 0x18, 0x8c, 0x1d, 0x32
959 /* Multisession Vector context Test */
961 static uint8_t ms_aes_cbc_key0[] = {
962 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
963 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
966 static uint8_t ms_aes_cbc_iv0[] = {
967 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
968 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
971 static const uint8_t ms_aes_cbc_cipher0[] = {
972 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
973 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
974 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
975 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
976 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
977 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
978 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
979 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
980 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
981 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
982 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
983 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
984 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
985 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
986 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
987 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
988 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
989 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
990 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
991 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
992 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
993 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
994 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
995 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
996 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
997 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
998 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
999 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
1000 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
1001 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
1002 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
1003 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
1004 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
1005 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
1006 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
1007 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
1008 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
1009 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
1010 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
1011 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
1012 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
1013 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
1014 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
1015 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
1016 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
1017 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
1018 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
1019 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
1020 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
1021 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
1022 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
1023 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
1024 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
1025 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
1026 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
1027 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
1028 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
1029 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
1030 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
1031 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
1032 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
1033 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
1034 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
1035 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
1039 static uint8_t ms_hmac_key0[] = {
1040 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1041 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1042 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1043 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1044 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1045 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1046 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1047 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1050 static const uint8_t ms_hmac_digest0[] = {
1051 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1052 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1053 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1054 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1055 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1056 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1057 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1058 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1062 /* Begin session 1 */
1064 static uint8_t ms_aes_cbc_key1[] = {
1065 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1066 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1069 static uint8_t ms_aes_cbc_iv1[] = {
1070 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1071 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1074 static const uint8_t ms_aes_cbc_cipher1[] = {
1075 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1076 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1077 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1078 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1079 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1080 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1081 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1082 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1083 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1084 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1085 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1086 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1087 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1088 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1089 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1090 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1091 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1092 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1093 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1094 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1095 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1096 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1097 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1098 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1099 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1100 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1101 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1102 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1103 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1104 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1105 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1106 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1107 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1108 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1109 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1110 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1111 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1112 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1113 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1114 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1115 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1116 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1117 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1118 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1119 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1120 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1121 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1122 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1123 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1124 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1125 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1126 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1127 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1128 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1129 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1130 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1131 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1132 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1133 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1134 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1135 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1136 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1137 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1138 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1142 static uint8_t ms_hmac_key1[] = {
1143 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1144 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1145 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1146 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1147 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1148 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1149 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1150 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1153 static const uint8_t ms_hmac_digest1[] = {
1154 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1155 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1156 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1157 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1158 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1159 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1160 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1161 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1164 /* Begin Session 2 */
1165 static uint8_t ms_aes_cbc_key2[] = {
1166 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1167 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1170 static uint8_t ms_aes_cbc_iv2[] = {
1171 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1172 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1175 static const uint8_t ms_aes_cbc_cipher2[] = {
1176 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1177 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1178 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1179 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1180 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1181 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1182 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1183 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1184 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1185 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1186 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1187 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1188 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1189 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1190 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1191 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1192 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1193 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1194 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1195 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1196 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1197 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1198 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1199 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1200 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1201 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1202 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1203 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1204 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1205 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1206 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1207 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1208 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1209 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1210 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1211 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1212 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1213 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1214 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1215 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1216 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1217 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1218 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1219 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1220 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1221 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1222 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1223 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1224 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1225 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1226 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1227 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1228 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1229 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1230 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1231 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1232 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1233 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1234 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1235 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1236 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1237 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1238 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1239 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1242 static uint8_t ms_hmac_key2[] = {
1243 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1244 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1245 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1246 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1247 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1248 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1249 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1250 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1253 static const uint8_t ms_hmac_digest2[] = {
1254 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1255 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1256 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1257 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1258 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1259 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1260 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1261 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1268 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1270 struct crypto_testsuite_params *ts_params = &testsuite_params;
1271 struct crypto_unittest_params *ut_params = &unittest_params;
1273 /* Generate test mbuf data and space for digest */
1274 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1275 catch_22_quote, QUOTE_512_BYTES, 0);
1277 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1278 DIGEST_BYTE_LENGTH_SHA1);
1279 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1281 /* Setup Cipher Parameters */
1282 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1283 ut_params->cipher_xform.next = &ut_params->auth_xform;
1285 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1286 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1287 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1288 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1290 /* Setup HMAC Parameters */
1291 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1293 ut_params->auth_xform.next = NULL;
1295 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1296 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1297 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1298 ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1299 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1301 /* Create crypto session*/
1302 ut_params->sess = rte_cryptodev_sym_session_create(
1303 ts_params->valid_devs[0],
1304 &ut_params->cipher_xform);
1305 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1307 /* Generate crypto op data structure */
1308 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1309 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1310 TEST_ASSERT_NOT_NULL(ut_params->op,
1311 "Failed to allocate symmetric crypto operation struct");
1313 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1315 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1317 /* set crypto operation source mbuf */
1318 sym_op->m_src = ut_params->ibuf;
1320 /* Set crypto operation authentication parameters */
1321 sym_op->auth.digest.data = ut_params->digest;
1322 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1323 ut_params->ibuf, QUOTE_512_BYTES);
1324 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA1;
1326 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1327 sym_op->auth.data.length = QUOTE_512_BYTES;
1329 /* Set crypto operation cipher parameters */
1330 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1331 CIPHER_IV_LENGTH_AES_CBC);
1332 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1333 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1335 rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
1336 CIPHER_IV_LENGTH_AES_CBC);
1338 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1339 sym_op->cipher.data.length = QUOTE_512_BYTES;
1341 /* Process crypto operation */
1342 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1343 ut_params->op), "failed to process sym crypto op");
1345 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1346 "crypto op processing failed");
1349 uint8_t *ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
1350 uint8_t *, CIPHER_IV_LENGTH_AES_CBC);
1352 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1353 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1355 "ciphertext data not as expected");
1357 uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1359 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1360 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1361 gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
1362 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1363 DIGEST_BYTE_LENGTH_SHA1,
1364 "Generated digest data not as expected");
1366 return TEST_SUCCESS;
1369 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1371 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
1373 static uint8_t hmac_sha512_key[] = {
1374 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1375 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1376 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1377 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1378 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1379 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1380 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1381 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1383 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1384 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1385 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1386 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1387 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1388 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1389 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1390 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1391 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1396 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1397 struct crypto_unittest_params *ut_params,
1398 uint8_t *cipher_key,
1402 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1403 struct crypto_unittest_params *ut_params,
1404 struct crypto_testsuite_params *ts_params,
1405 const uint8_t *cipher,
1406 const uint8_t *digest,
1411 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1412 struct crypto_unittest_params *ut_params,
1413 uint8_t *cipher_key,
1417 /* Setup Cipher Parameters */
1418 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1419 ut_params->cipher_xform.next = NULL;
1421 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1422 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1423 ut_params->cipher_xform.cipher.key.data = cipher_key;
1424 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1426 /* Setup HMAC Parameters */
1427 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1428 ut_params->auth_xform.next = &ut_params->cipher_xform;
1430 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1431 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1432 ut_params->auth_xform.auth.key.data = hmac_key;
1433 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1434 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1436 return TEST_SUCCESS;
1441 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1442 struct crypto_unittest_params *ut_params,
1443 struct crypto_testsuite_params *ts_params,
1444 const uint8_t *cipher,
1445 const uint8_t *digest,
1448 /* Generate test mbuf data and digest */
1449 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1452 QUOTE_512_BYTES, 0);
1454 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1455 DIGEST_BYTE_LENGTH_SHA512);
1456 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1458 rte_memcpy(ut_params->digest,
1460 DIGEST_BYTE_LENGTH_SHA512);
1462 /* Generate Crypto op data structure */
1463 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1464 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1465 TEST_ASSERT_NOT_NULL(ut_params->op,
1466 "Failed to allocate symmetric crypto operation struct");
1468 rte_crypto_op_attach_sym_session(ut_params->op, sess);
1470 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1472 /* set crypto operation source mbuf */
1473 sym_op->m_src = ut_params->ibuf;
1475 sym_op->auth.digest.data = ut_params->digest;
1476 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1477 ut_params->ibuf, QUOTE_512_BYTES);
1478 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA512;
1480 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1481 sym_op->auth.data.length = QUOTE_512_BYTES;
1483 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1484 ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
1485 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys_offset(
1486 ut_params->ibuf, 0);
1487 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1489 rte_memcpy(sym_op->cipher.iv.data, iv,
1490 CIPHER_IV_LENGTH_AES_CBC);
1492 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1493 sym_op->cipher.data.length = QUOTE_512_BYTES;
1495 /* Process crypto operation */
1496 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1497 ut_params->op), "failed to process sym crypto op");
1499 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1500 "crypto op processing failed");
1502 ut_params->obuf = ut_params->op->sym->m_src;
1505 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1506 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
1507 CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
1509 "Plaintext data not as expected");
1512 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1513 "Digest verification failed");
1515 return TEST_SUCCESS;
1519 test_AES_cipheronly_mb_all(void)
1521 struct crypto_testsuite_params *ts_params = &testsuite_params;
1524 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1525 ts_params->op_mpool, ts_params->valid_devs[0],
1526 RTE_CRYPTODEV_AESNI_MB_PMD,
1527 BLKCIPHER_AES_CIPHERONLY_TYPE);
1529 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1531 return TEST_SUCCESS;
1535 test_AES_docsis_mb_all(void)
1537 struct crypto_testsuite_params *ts_params = &testsuite_params;
1540 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1541 ts_params->op_mpool, ts_params->valid_devs[0],
1542 RTE_CRYPTODEV_AESNI_MB_PMD,
1543 BLKCIPHER_AES_DOCSIS_TYPE);
1545 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1547 return TEST_SUCCESS;
1551 test_authonly_mb_all(void)
1553 struct crypto_testsuite_params *ts_params = &testsuite_params;
1556 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1557 ts_params->op_mpool, ts_params->valid_devs[0],
1558 RTE_CRYPTODEV_AESNI_MB_PMD,
1559 BLKCIPHER_AUTHONLY_TYPE);
1561 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1563 return TEST_SUCCESS;
1567 test_AES_chain_mb_all(void)
1569 struct crypto_testsuite_params *ts_params = &testsuite_params;
1572 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1573 ts_params->op_mpool, ts_params->valid_devs[0],
1574 RTE_CRYPTODEV_AESNI_MB_PMD,
1575 BLKCIPHER_AES_CHAIN_TYPE);
1577 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1579 return TEST_SUCCESS;
1582 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
1585 test_AES_cipheronly_scheduler_all(void)
1587 struct crypto_testsuite_params *ts_params = &testsuite_params;
1590 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1591 ts_params->op_mpool, ts_params->valid_devs[0],
1592 RTE_CRYPTODEV_SCHEDULER_PMD,
1593 BLKCIPHER_AES_CIPHERONLY_TYPE);
1595 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1597 return TEST_SUCCESS;
1601 test_AES_chain_scheduler_all(void)
1603 struct crypto_testsuite_params *ts_params = &testsuite_params;
1606 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1607 ts_params->op_mpool, ts_params->valid_devs[0],
1608 RTE_CRYPTODEV_SCHEDULER_PMD,
1609 BLKCIPHER_AES_CHAIN_TYPE);
1611 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1613 return TEST_SUCCESS;
1617 test_authonly_scheduler_all(void)
1619 struct crypto_testsuite_params *ts_params = &testsuite_params;
1622 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1623 ts_params->op_mpool, ts_params->valid_devs[0],
1624 RTE_CRYPTODEV_SCHEDULER_PMD,
1625 BLKCIPHER_AUTHONLY_TYPE);
1627 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1629 return TEST_SUCCESS;
1632 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
1635 test_AES_chain_openssl_all(void)
1637 struct crypto_testsuite_params *ts_params = &testsuite_params;
1640 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1641 ts_params->op_mpool, ts_params->valid_devs[0],
1642 RTE_CRYPTODEV_OPENSSL_PMD,
1643 BLKCIPHER_AES_CHAIN_TYPE);
1645 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1647 return TEST_SUCCESS;
1651 test_AES_cipheronly_openssl_all(void)
1653 struct crypto_testsuite_params *ts_params = &testsuite_params;
1656 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1657 ts_params->op_mpool, ts_params->valid_devs[0],
1658 RTE_CRYPTODEV_OPENSSL_PMD,
1659 BLKCIPHER_AES_CIPHERONLY_TYPE);
1661 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1663 return TEST_SUCCESS;
1667 test_AES_chain_qat_all(void)
1669 struct crypto_testsuite_params *ts_params = &testsuite_params;
1672 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1673 ts_params->op_mpool, ts_params->valid_devs[0],
1674 RTE_CRYPTODEV_QAT_SYM_PMD,
1675 BLKCIPHER_AES_CHAIN_TYPE);
1677 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1679 return TEST_SUCCESS;
1683 test_AES_cipheronly_qat_all(void)
1685 struct crypto_testsuite_params *ts_params = &testsuite_params;
1688 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1689 ts_params->op_mpool, ts_params->valid_devs[0],
1690 RTE_CRYPTODEV_QAT_SYM_PMD,
1691 BLKCIPHER_AES_CIPHERONLY_TYPE);
1693 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1695 return TEST_SUCCESS;
1699 test_authonly_openssl_all(void)
1701 struct crypto_testsuite_params *ts_params = &testsuite_params;
1704 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1705 ts_params->op_mpool, ts_params->valid_devs[0],
1706 RTE_CRYPTODEV_OPENSSL_PMD,
1707 BLKCIPHER_AUTHONLY_TYPE);
1709 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1711 return TEST_SUCCESS;
1715 test_AES_chain_armv8_all(void)
1717 struct crypto_testsuite_params *ts_params = &testsuite_params;
1720 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1721 ts_params->op_mpool, ts_params->valid_devs[0],
1722 RTE_CRYPTODEV_ARMV8_PMD,
1723 BLKCIPHER_AES_CHAIN_TYPE);
1725 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1727 return TEST_SUCCESS;
1730 /* ***** SNOW 3G Tests ***** */
1732 create_wireless_algo_hash_session(uint8_t dev_id,
1733 const uint8_t *key, const uint8_t key_len,
1734 const uint8_t aad_len, const uint8_t auth_len,
1735 enum rte_crypto_auth_operation op,
1736 enum rte_crypto_auth_algorithm algo)
1738 uint8_t hash_key[key_len];
1740 struct crypto_unittest_params *ut_params = &unittest_params;
1742 memcpy(hash_key, key, key_len);
1744 TEST_HEXDUMP(stdout, "key:", key, key_len);
1746 /* Setup Authentication Parameters */
1747 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1748 ut_params->auth_xform.next = NULL;
1750 ut_params->auth_xform.auth.op = op;
1751 ut_params->auth_xform.auth.algo = algo;
1752 ut_params->auth_xform.auth.key.length = key_len;
1753 ut_params->auth_xform.auth.key.data = hash_key;
1754 ut_params->auth_xform.auth.digest_length = auth_len;
1755 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1756 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1757 &ut_params->auth_xform);
1758 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1763 create_wireless_algo_cipher_session(uint8_t dev_id,
1764 enum rte_crypto_cipher_operation op,
1765 enum rte_crypto_cipher_algorithm algo,
1766 const uint8_t *key, const uint8_t key_len)
1768 uint8_t cipher_key[key_len];
1770 struct crypto_unittest_params *ut_params = &unittest_params;
1772 memcpy(cipher_key, key, key_len);
1774 /* Setup Cipher Parameters */
1775 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1776 ut_params->cipher_xform.next = NULL;
1778 ut_params->cipher_xform.cipher.algo = algo;
1779 ut_params->cipher_xform.cipher.op = op;
1780 ut_params->cipher_xform.cipher.key.data = cipher_key;
1781 ut_params->cipher_xform.cipher.key.length = key_len;
1783 TEST_HEXDUMP(stdout, "key:", key, key_len);
1785 /* Create Crypto session */
1786 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1789 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1794 create_wireless_algo_cipher_operation(const uint8_t *iv, const unsigned iv_len,
1795 const unsigned cipher_len,
1796 const unsigned cipher_offset,
1797 enum rte_crypto_cipher_algorithm algo)
1799 struct crypto_testsuite_params *ts_params = &testsuite_params;
1800 struct crypto_unittest_params *ut_params = &unittest_params;
1801 unsigned iv_pad_len = 0;
1803 /* Generate Crypto op data structure */
1804 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1805 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1806 TEST_ASSERT_NOT_NULL(ut_params->op,
1807 "Failed to allocate pktmbuf offload");
1809 /* Set crypto operation data parameters */
1810 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1812 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1814 /* set crypto operation source mbuf */
1815 sym_op->m_src = ut_params->ibuf;
1818 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1819 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1821 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1823 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf
1826 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1828 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1829 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1830 sym_op->cipher.iv.length = iv_pad_len;
1832 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1833 sym_op->cipher.data.length = cipher_len;
1834 sym_op->cipher.data.offset = cipher_offset;
1839 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, const uint8_t iv_len,
1840 const unsigned cipher_len,
1841 const unsigned cipher_offset,
1842 enum rte_crypto_cipher_algorithm algo)
1844 struct crypto_testsuite_params *ts_params = &testsuite_params;
1845 struct crypto_unittest_params *ut_params = &unittest_params;
1846 unsigned iv_pad_len = 0;
1848 /* Generate Crypto op data structure */
1849 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1850 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1851 TEST_ASSERT_NOT_NULL(ut_params->op,
1852 "Failed to allocate pktmbuf offload");
1854 /* Set crypto operation data parameters */
1855 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1857 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1859 /* set crypto operation source mbuf */
1860 sym_op->m_src = ut_params->ibuf;
1861 sym_op->m_dst = ut_params->obuf;
1864 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1865 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1867 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1868 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1871 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1873 /* For OOP operation both buffers must have the same size */
1874 if (ut_params->obuf)
1875 rte_pktmbuf_prepend(ut_params->obuf, iv_pad_len);
1877 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1878 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1879 sym_op->cipher.iv.length = iv_pad_len;
1881 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1882 sym_op->cipher.data.length = cipher_len;
1883 sym_op->cipher.data.offset = cipher_offset;
1888 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
1889 enum rte_crypto_cipher_operation cipher_op,
1890 enum rte_crypto_auth_operation auth_op,
1891 enum rte_crypto_auth_algorithm auth_algo,
1892 enum rte_crypto_cipher_algorithm cipher_algo,
1893 const uint8_t *key, const uint8_t key_len,
1894 const uint8_t aad_len, const uint8_t auth_len)
1897 uint8_t cipher_auth_key[key_len];
1899 struct crypto_unittest_params *ut_params = &unittest_params;
1901 memcpy(cipher_auth_key, key, key_len);
1903 /* Setup Authentication Parameters */
1904 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1905 ut_params->auth_xform.next = NULL;
1907 ut_params->auth_xform.auth.op = auth_op;
1908 ut_params->auth_xform.auth.algo = auth_algo;
1909 ut_params->auth_xform.auth.key.length = key_len;
1910 /* Hash key = cipher key */
1911 ut_params->auth_xform.auth.key.data = cipher_auth_key;
1912 ut_params->auth_xform.auth.digest_length = auth_len;
1913 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1915 /* Setup Cipher Parameters */
1916 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1917 ut_params->cipher_xform.next = &ut_params->auth_xform;
1919 ut_params->cipher_xform.cipher.algo = cipher_algo;
1920 ut_params->cipher_xform.cipher.op = cipher_op;
1921 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
1922 ut_params->cipher_xform.cipher.key.length = key_len;
1924 TEST_HEXDUMP(stdout, "key:", key, key_len);
1926 /* Create Crypto session*/
1927 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1928 &ut_params->cipher_xform);
1930 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1935 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
1936 enum rte_crypto_cipher_operation cipher_op,
1937 enum rte_crypto_auth_operation auth_op,
1938 enum rte_crypto_auth_algorithm auth_algo,
1939 enum rte_crypto_cipher_algorithm cipher_algo,
1940 const uint8_t *key, const uint8_t key_len,
1941 const uint8_t aad_len, const uint8_t auth_len)
1943 uint8_t auth_cipher_key[key_len];
1945 struct crypto_unittest_params *ut_params = &unittest_params;
1947 memcpy(auth_cipher_key, key, key_len);
1949 /* Setup Authentication Parameters */
1950 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1951 ut_params->auth_xform.auth.op = auth_op;
1952 ut_params->auth_xform.next = &ut_params->cipher_xform;
1953 ut_params->auth_xform.auth.algo = auth_algo;
1954 ut_params->auth_xform.auth.key.length = key_len;
1955 ut_params->auth_xform.auth.key.data = auth_cipher_key;
1956 ut_params->auth_xform.auth.digest_length = auth_len;
1957 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1959 /* Setup Cipher Parameters */
1960 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1961 ut_params->cipher_xform.next = NULL;
1962 ut_params->cipher_xform.cipher.algo = cipher_algo;
1963 ut_params->cipher_xform.cipher.op = cipher_op;
1964 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
1965 ut_params->cipher_xform.cipher.key.length = key_len;
1967 TEST_HEXDUMP(stdout, "key:", key, key_len);
1969 /* Create Crypto session*/
1970 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1971 &ut_params->auth_xform);
1973 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1979 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
1980 const unsigned auth_tag_len,
1981 const uint8_t *aad, const unsigned aad_len,
1982 unsigned data_pad_len,
1983 enum rte_crypto_auth_operation op,
1984 enum rte_crypto_auth_algorithm algo,
1985 const unsigned auth_len, const unsigned auth_offset)
1987 struct crypto_testsuite_params *ts_params = &testsuite_params;
1989 struct crypto_unittest_params *ut_params = &unittest_params;
1991 unsigned aad_buffer_len;
1993 /* Generate Crypto op data structure */
1994 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1995 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1996 TEST_ASSERT_NOT_NULL(ut_params->op,
1997 "Failed to allocate pktmbuf offload");
1999 /* Set crypto operation data parameters */
2000 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2002 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2004 /* set crypto operation source mbuf */
2005 sym_op->m_src = ut_params->ibuf;
2009 * Always allocate the aad up to the block size.
2010 * The cryptodev API calls out -
2011 * - the array must be big enough to hold the AAD, plus any
2012 * space to round this up to the nearest multiple of the
2013 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
2015 if (algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2016 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2018 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2019 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
2020 ut_params->ibuf, aad_buffer_len);
2021 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2022 "no room to prepend aad");
2023 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2025 sym_op->auth.aad.length = aad_len;
2027 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2028 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2030 TEST_HEXDUMP(stdout, "aad:",
2031 sym_op->auth.aad.data, aad_len);
2034 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2035 ut_params->ibuf, auth_tag_len);
2037 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2038 "no room to append auth tag");
2039 ut_params->digest = sym_op->auth.digest.data;
2040 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2041 ut_params->ibuf, data_pad_len + aad_len);
2042 sym_op->auth.digest.length = auth_tag_len;
2043 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2044 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2046 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2048 TEST_HEXDUMP(stdout, "digest:",
2049 sym_op->auth.digest.data,
2050 sym_op->auth.digest.length);
2052 sym_op->auth.data.length = auth_len;
2053 sym_op->auth.data.offset = auth_offset;
2059 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2060 const unsigned auth_tag_len,
2061 const uint8_t *aad, const uint8_t aad_len,
2062 unsigned data_pad_len,
2063 enum rte_crypto_auth_operation op,
2064 enum rte_crypto_auth_algorithm auth_algo,
2065 enum rte_crypto_cipher_algorithm cipher_algo,
2066 const uint8_t *iv, const uint8_t iv_len,
2067 const unsigned cipher_len, const unsigned cipher_offset,
2068 const unsigned auth_len, const unsigned auth_offset)
2070 struct crypto_testsuite_params *ts_params = &testsuite_params;
2071 struct crypto_unittest_params *ut_params = &unittest_params;
2073 unsigned iv_pad_len = 0;
2074 unsigned aad_buffer_len;
2076 /* Generate Crypto op data structure */
2077 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2078 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2079 TEST_ASSERT_NOT_NULL(ut_params->op,
2080 "Failed to allocate pktmbuf offload");
2081 /* Set crypto operation data parameters */
2082 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2084 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2086 /* set crypto operation source mbuf */
2087 sym_op->m_src = ut_params->ibuf;
2090 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2091 ut_params->ibuf, auth_tag_len);
2093 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2094 "no room to append auth tag");
2095 ut_params->digest = sym_op->auth.digest.data;
2096 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2097 ut_params->ibuf, data_pad_len);
2098 sym_op->auth.digest.length = auth_tag_len;
2099 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2100 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2102 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2104 TEST_HEXDUMP(stdout, "digest:",
2105 sym_op->auth.digest.data,
2106 sym_op->auth.digest.length);
2110 * Always allocate the aad up to the block size.
2111 * The cryptodev API calls out -
2112 * - the array must be big enough to hold the AAD, plus any
2113 * space to round this up to the nearest multiple of the
2114 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
2116 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2117 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2119 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2120 sym_op->auth.aad.data =
2121 (uint8_t *)rte_pktmbuf_prepend(
2122 ut_params->ibuf, aad_buffer_len);
2123 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2124 "no room to prepend aad");
2125 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2127 sym_op->auth.aad.length = aad_len;
2128 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2129 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2130 TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data, aad_len);
2133 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
2134 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
2136 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
2137 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
2138 ut_params->ibuf, iv_pad_len);
2140 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
2141 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
2142 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
2143 sym_op->cipher.iv.length = iv_pad_len;
2144 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
2145 sym_op->cipher.data.length = cipher_len;
2146 sym_op->cipher.data.offset = cipher_offset + auth_offset;
2147 sym_op->auth.data.length = auth_len;
2148 sym_op->auth.data.offset = auth_offset + cipher_offset;
2154 create_wireless_algo_auth_cipher_operation(const unsigned auth_tag_len,
2155 const uint8_t *iv, const uint8_t iv_len,
2156 const uint8_t *aad, const uint8_t aad_len,
2157 unsigned data_pad_len,
2158 const unsigned cipher_len, const unsigned cipher_offset,
2159 const unsigned auth_len, const unsigned auth_offset,
2160 enum rte_crypto_auth_algorithm auth_algo,
2161 enum rte_crypto_cipher_algorithm cipher_algo)
2163 struct crypto_testsuite_params *ts_params = &testsuite_params;
2164 struct crypto_unittest_params *ut_params = &unittest_params;
2166 unsigned iv_pad_len = 0;
2167 unsigned aad_buffer_len = 0;
2169 /* Generate Crypto op data structure */
2170 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2171 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2172 TEST_ASSERT_NOT_NULL(ut_params->op,
2173 "Failed to allocate pktmbuf offload");
2175 /* Set crypto operation data parameters */
2176 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2178 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2180 /* set crypto operation source mbuf */
2181 sym_op->m_src = ut_params->ibuf;
2184 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2185 ut_params->ibuf, auth_tag_len);
2187 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2188 "no room to append auth tag");
2190 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2191 ut_params->ibuf, data_pad_len);
2192 sym_op->auth.digest.length = auth_tag_len;
2194 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2196 TEST_HEXDUMP(stdout, "digest:",
2197 sym_op->auth.digest.data,
2198 sym_op->auth.digest.length);
2202 * Always allocate the aad up to the block size.
2203 * The cryptodev API calls out -
2204 * - the array must be big enough to hold the AAD, plus any
2205 * space to round this up to the nearest multiple of the
2206 * block size (8 bytes for KASUMI 16 bytes).
2208 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2209 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2211 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2212 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
2213 ut_params->ibuf, aad_buffer_len);
2214 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2215 "no room to prepend aad");
2216 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2218 sym_op->auth.aad.length = aad_len;
2219 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2220 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2221 TEST_HEXDUMP(stdout, "aad:",
2222 sym_op->auth.aad.data, aad_len);
2225 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
2226 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
2228 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
2230 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
2231 ut_params->ibuf, iv_pad_len);
2232 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
2234 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
2235 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
2236 sym_op->cipher.iv.length = iv_pad_len;
2238 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
2240 sym_op->cipher.data.length = cipher_len;
2241 sym_op->cipher.data.offset = auth_offset + cipher_offset;
2243 sym_op->auth.data.length = auth_len;
2244 sym_op->auth.data.offset = auth_offset + cipher_offset;
2250 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2252 struct crypto_testsuite_params *ts_params = &testsuite_params;
2253 struct crypto_unittest_params *ut_params = &unittest_params;
2256 unsigned plaintext_pad_len;
2257 unsigned plaintext_len;
2260 /* Create SNOW 3G session */
2261 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2262 tdata->key.data, tdata->key.len,
2263 tdata->aad.len, tdata->digest.len,
2264 RTE_CRYPTO_AUTH_OP_GENERATE,
2265 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2269 /* alloc mbuf and set payload */
2270 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2272 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2273 rte_pktmbuf_tailroom(ut_params->ibuf));
2275 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2276 /* Append data which is padded to a multiple of */
2277 /* the algorithms block size */
2278 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2279 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2281 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2283 /* Create SNOW 3G operation */
2284 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2285 tdata->aad.data, tdata->aad.len,
2286 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2287 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2288 tdata->validAuthLenInBits.len,
2289 tdata->validAuthOffsetLenInBits.len);
2293 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2295 ut_params->obuf = ut_params->op->sym->m_src;
2296 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2297 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2298 + plaintext_pad_len + tdata->aad.len;
2301 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2304 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2305 "SNOW 3G Generated auth tag not as expected");
2311 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
2313 struct crypto_testsuite_params *ts_params = &testsuite_params;
2314 struct crypto_unittest_params *ut_params = &unittest_params;
2317 unsigned plaintext_pad_len;
2318 unsigned plaintext_len;
2321 /* Create SNOW 3G session */
2322 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2323 tdata->key.data, tdata->key.len,
2324 tdata->aad.len, tdata->digest.len,
2325 RTE_CRYPTO_AUTH_OP_VERIFY,
2326 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2329 /* alloc mbuf and set payload */
2330 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2332 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2333 rte_pktmbuf_tailroom(ut_params->ibuf));
2335 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2336 /* Append data which is padded to a multiple of */
2337 /* the algorithms block size */
2338 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2339 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2341 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2343 /* Create SNOW 3G operation */
2344 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2346 tdata->aad.data, tdata->aad.len,
2348 RTE_CRYPTO_AUTH_OP_VERIFY,
2349 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2350 tdata->validAuthLenInBits.len,
2351 tdata->validAuthOffsetLenInBits.len);
2355 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2357 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2358 ut_params->obuf = ut_params->op->sym->m_src;
2359 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2360 + plaintext_pad_len + tdata->aad.len;
2363 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2372 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
2374 struct crypto_testsuite_params *ts_params = &testsuite_params;
2375 struct crypto_unittest_params *ut_params = &unittest_params;
2378 unsigned plaintext_pad_len;
2379 unsigned plaintext_len;
2382 /* Create KASUMI session */
2383 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2384 tdata->key.data, tdata->key.len,
2385 tdata->aad.len, tdata->digest.len,
2386 RTE_CRYPTO_AUTH_OP_GENERATE,
2387 RTE_CRYPTO_AUTH_KASUMI_F9);
2391 /* alloc mbuf and set payload */
2392 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2394 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2395 rte_pktmbuf_tailroom(ut_params->ibuf));
2397 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2398 /* Append data which is padded to a multiple of */
2399 /* the algorithms block size */
2400 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2401 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2403 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2405 /* Create KASUMI operation */
2406 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2407 tdata->aad.data, tdata->aad.len,
2408 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2409 RTE_CRYPTO_AUTH_KASUMI_F9,
2410 tdata->validAuthLenInBits.len,
2411 tdata->validAuthOffsetLenInBits.len);
2415 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2417 ut_params->obuf = ut_params->op->sym->m_src;
2418 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2419 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2420 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
2423 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2426 DIGEST_BYTE_LENGTH_KASUMI_F9,
2427 "KASUMI Generated auth tag not as expected");
2433 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
2435 struct crypto_testsuite_params *ts_params = &testsuite_params;
2436 struct crypto_unittest_params *ut_params = &unittest_params;
2439 unsigned plaintext_pad_len;
2440 unsigned plaintext_len;
2443 /* Create KASUMI session */
2444 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2445 tdata->key.data, tdata->key.len,
2446 tdata->aad.len, tdata->digest.len,
2447 RTE_CRYPTO_AUTH_OP_VERIFY,
2448 RTE_CRYPTO_AUTH_KASUMI_F9);
2451 /* alloc mbuf and set payload */
2452 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2454 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2455 rte_pktmbuf_tailroom(ut_params->ibuf));
2457 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2458 /* Append data which is padded to a multiple */
2459 /* of the algorithms block size */
2460 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2461 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2463 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2465 /* Create KASUMI operation */
2466 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2468 tdata->aad.data, tdata->aad.len,
2470 RTE_CRYPTO_AUTH_OP_VERIFY,
2471 RTE_CRYPTO_AUTH_KASUMI_F9,
2472 tdata->validAuthLenInBits.len,
2473 tdata->validAuthOffsetLenInBits.len);
2477 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2479 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2480 ut_params->obuf = ut_params->op->sym->m_src;
2481 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2482 + plaintext_pad_len + tdata->aad.len;
2485 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2494 test_snow3g_hash_generate_test_case_1(void)
2496 return test_snow3g_authentication(&snow3g_hash_test_case_1);
2500 test_snow3g_hash_generate_test_case_2(void)
2502 return test_snow3g_authentication(&snow3g_hash_test_case_2);
2506 test_snow3g_hash_generate_test_case_3(void)
2508 return test_snow3g_authentication(&snow3g_hash_test_case_3);
2512 test_snow3g_hash_generate_test_case_4(void)
2514 return test_snow3g_authentication(&snow3g_hash_test_case_4);
2518 test_snow3g_hash_generate_test_case_5(void)
2520 return test_snow3g_authentication(&snow3g_hash_test_case_5);
2524 test_snow3g_hash_generate_test_case_6(void)
2526 return test_snow3g_authentication(&snow3g_hash_test_case_6);
2530 test_snow3g_hash_verify_test_case_1(void)
2532 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
2537 test_snow3g_hash_verify_test_case_2(void)
2539 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
2543 test_snow3g_hash_verify_test_case_3(void)
2545 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
2549 test_snow3g_hash_verify_test_case_4(void)
2551 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
2555 test_snow3g_hash_verify_test_case_5(void)
2557 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
2561 test_snow3g_hash_verify_test_case_6(void)
2563 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
2567 test_kasumi_hash_generate_test_case_1(void)
2569 return test_kasumi_authentication(&kasumi_hash_test_case_1);
2573 test_kasumi_hash_generate_test_case_2(void)
2575 return test_kasumi_authentication(&kasumi_hash_test_case_2);
2579 test_kasumi_hash_generate_test_case_3(void)
2581 return test_kasumi_authentication(&kasumi_hash_test_case_3);
2585 test_kasumi_hash_generate_test_case_4(void)
2587 return test_kasumi_authentication(&kasumi_hash_test_case_4);
2591 test_kasumi_hash_generate_test_case_5(void)
2593 return test_kasumi_authentication(&kasumi_hash_test_case_5);
2597 test_kasumi_hash_generate_test_case_6(void)
2599 return test_kasumi_authentication(&kasumi_hash_test_case_6);
2603 test_kasumi_hash_verify_test_case_1(void)
2605 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
2609 test_kasumi_hash_verify_test_case_2(void)
2611 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
2615 test_kasumi_hash_verify_test_case_3(void)
2617 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
2621 test_kasumi_hash_verify_test_case_4(void)
2623 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
2627 test_kasumi_hash_verify_test_case_5(void)
2629 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
2633 test_kasumi_encryption(const struct kasumi_test_data *tdata)
2635 struct crypto_testsuite_params *ts_params = &testsuite_params;
2636 struct crypto_unittest_params *ut_params = &unittest_params;
2639 uint8_t *plaintext, *ciphertext;
2640 unsigned plaintext_pad_len;
2641 unsigned plaintext_len;
2643 /* Create KASUMI session */
2644 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2645 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2646 RTE_CRYPTO_CIPHER_KASUMI_F8,
2647 tdata->key.data, tdata->key.len);
2651 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2653 /* Clear mbuf payload */
2654 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2655 rte_pktmbuf_tailroom(ut_params->ibuf));
2657 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2658 /* Append data which is padded to a multiple */
2659 /* of the algorithms block size */
2660 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2661 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2663 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2665 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2667 /* Create KASUMI operation */
2668 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
2669 tdata->plaintext.len,
2670 tdata->validCipherOffsetLenInBits.len,
2671 RTE_CRYPTO_CIPHER_KASUMI_F8);
2675 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2677 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2679 ut_params->obuf = ut_params->op->sym->m_dst;
2680 if (ut_params->obuf)
2681 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2684 ciphertext = plaintext;
2686 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2689 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2691 tdata->ciphertext.data,
2692 tdata->validCipherLenInBits.len,
2693 "KASUMI Ciphertext data not as expected");
2698 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
2700 struct crypto_testsuite_params *ts_params = &testsuite_params;
2701 struct crypto_unittest_params *ut_params = &unittest_params;
2705 unsigned int plaintext_pad_len;
2706 unsigned int plaintext_len;
2708 uint8_t buffer[10000];
2709 const uint8_t *ciphertext;
2711 struct rte_cryptodev_info dev_info;
2713 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2714 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
2715 printf("Device doesn't support scatter-gather. "
2720 /* Create KASUMI session */
2721 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2722 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2723 RTE_CRYPTO_CIPHER_KASUMI_F8,
2724 tdata->key.data, tdata->key.len);
2728 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2731 /* Append data which is padded to a multiple */
2732 /* of the algorithms block size */
2733 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2735 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
2736 plaintext_pad_len, 10, 0);
2738 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
2740 /* Create KASUMI operation */
2741 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
2743 tdata->plaintext.len,
2744 tdata->validCipherOffsetLenInBits.len,
2745 RTE_CRYPTO_CIPHER_KASUMI_F8);
2749 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2751 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2753 ut_params->obuf = ut_params->op->sym->m_dst;
2755 if (ut_params->obuf)
2756 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
2757 plaintext_len, buffer);
2759 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
2760 plaintext_len, buffer);
2763 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2766 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2768 tdata->ciphertext.data,
2769 tdata->validCipherLenInBits.len,
2770 "KASUMI Ciphertext data not as expected");
2775 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
2777 struct crypto_testsuite_params *ts_params = &testsuite_params;
2778 struct crypto_unittest_params *ut_params = &unittest_params;
2781 uint8_t *plaintext, *ciphertext;
2782 unsigned plaintext_pad_len;
2783 unsigned plaintext_len;
2785 /* Create KASUMI session */
2786 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2787 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2788 RTE_CRYPTO_CIPHER_KASUMI_F8,
2789 tdata->key.data, tdata->key.len);
2793 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2794 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2796 /* Clear mbuf payload */
2797 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2798 rte_pktmbuf_tailroom(ut_params->ibuf));
2800 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2801 /* Append data which is padded to a multiple */
2802 /* of the algorithms block size */
2803 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2804 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2806 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2807 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2809 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2811 /* Create KASUMI operation */
2812 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2814 tdata->plaintext.len,
2815 tdata->validCipherOffsetLenInBits.len,
2816 RTE_CRYPTO_CIPHER_KASUMI_F8);
2820 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2822 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2824 ut_params->obuf = ut_params->op->sym->m_dst;
2825 if (ut_params->obuf)
2826 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2829 ciphertext = plaintext;
2831 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2834 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2836 tdata->ciphertext.data,
2837 tdata->validCipherLenInBits.len,
2838 "KASUMI Ciphertext data not as expected");
2843 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
2845 struct crypto_testsuite_params *ts_params = &testsuite_params;
2846 struct crypto_unittest_params *ut_params = &unittest_params;
2849 unsigned int plaintext_pad_len;
2850 unsigned int plaintext_len;
2852 const uint8_t *ciphertext;
2853 uint8_t buffer[2048];
2855 struct rte_cryptodev_info dev_info;
2857 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2858 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
2859 printf("Device doesn't support scatter-gather. "
2864 /* Create KASUMI session */
2865 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2866 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2867 RTE_CRYPTO_CIPHER_KASUMI_F8,
2868 tdata->key.data, tdata->key.len);
2872 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2873 /* Append data which is padded to a multiple */
2874 /* of the algorithms block size */
2875 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2877 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
2878 plaintext_pad_len, 10, 0);
2879 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
2880 plaintext_pad_len, 3, 0);
2882 /* Append data which is padded to a multiple */
2883 /* of the algorithms block size */
2884 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
2886 /* Create KASUMI operation */
2887 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2889 tdata->plaintext.len,
2890 tdata->validCipherOffsetLenInBits.len,
2891 RTE_CRYPTO_CIPHER_KASUMI_F8);
2895 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2897 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2899 ut_params->obuf = ut_params->op->sym->m_dst;
2900 if (ut_params->obuf)
2901 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
2902 plaintext_pad_len, buffer);
2904 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
2905 plaintext_pad_len, buffer);
2908 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2910 tdata->ciphertext.data,
2911 tdata->validCipherLenInBits.len,
2912 "KASUMI Ciphertext data not as expected");
2918 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
2920 struct crypto_testsuite_params *ts_params = &testsuite_params;
2921 struct crypto_unittest_params *ut_params = &unittest_params;
2924 uint8_t *ciphertext, *plaintext;
2925 unsigned ciphertext_pad_len;
2926 unsigned ciphertext_len;
2928 /* Create KASUMI session */
2929 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2930 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2931 RTE_CRYPTO_CIPHER_KASUMI_F8,
2932 tdata->key.data, tdata->key.len);
2936 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2937 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2939 /* Clear mbuf payload */
2940 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2941 rte_pktmbuf_tailroom(ut_params->ibuf));
2943 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2944 /* Append data which is padded to a multiple */
2945 /* of the algorithms block size */
2946 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2947 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2948 ciphertext_pad_len);
2949 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
2950 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2952 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2954 /* Create KASUMI operation */
2955 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2957 tdata->ciphertext.len,
2958 tdata->validCipherOffsetLenInBits.len,
2959 RTE_CRYPTO_CIPHER_KASUMI_F8);
2963 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2965 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2967 ut_params->obuf = ut_params->op->sym->m_dst;
2968 if (ut_params->obuf)
2969 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2972 plaintext = ciphertext;
2974 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2977 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2979 tdata->plaintext.data,
2980 tdata->validCipherLenInBits.len,
2981 "KASUMI Plaintext data not as expected");
2986 test_kasumi_decryption(const struct kasumi_test_data *tdata)
2988 struct crypto_testsuite_params *ts_params = &testsuite_params;
2989 struct crypto_unittest_params *ut_params = &unittest_params;
2992 uint8_t *ciphertext, *plaintext;
2993 unsigned ciphertext_pad_len;
2994 unsigned ciphertext_len;
2996 /* Create KASUMI session */
2997 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2998 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2999 RTE_CRYPTO_CIPHER_KASUMI_F8,
3000 tdata->key.data, tdata->key.len);
3004 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3006 /* Clear mbuf payload */
3007 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3008 rte_pktmbuf_tailroom(ut_params->ibuf));
3010 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3011 /* Append data which is padded to a multiple */
3012 /* of the algorithms block size */
3013 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3014 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3015 ciphertext_pad_len);
3016 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3018 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3020 /* Create KASUMI operation */
3021 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
3023 tdata->ciphertext.len,
3024 tdata->validCipherOffsetLenInBits.len,
3025 RTE_CRYPTO_CIPHER_KASUMI_F8);
3029 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3031 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3033 ut_params->obuf = ut_params->op->sym->m_dst;
3034 if (ut_params->obuf)
3035 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3038 plaintext = ciphertext;
3040 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3043 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3045 tdata->plaintext.data,
3046 tdata->validCipherLenInBits.len,
3047 "KASUMI Plaintext data not as expected");
3052 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3054 struct crypto_testsuite_params *ts_params = &testsuite_params;
3055 struct crypto_unittest_params *ut_params = &unittest_params;
3058 uint8_t *plaintext, *ciphertext;
3059 unsigned plaintext_pad_len;
3060 unsigned plaintext_len;
3062 /* Create SNOW 3G session */
3063 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3064 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3065 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3066 tdata->key.data, tdata->key.len);
3070 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3072 /* Clear mbuf payload */
3073 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3074 rte_pktmbuf_tailroom(ut_params->ibuf));
3076 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3077 /* Append data which is padded to a multiple of */
3078 /* the algorithms block size */
3079 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3080 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3082 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3084 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3086 /* Create SNOW 3G operation */
3087 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3088 tdata->validCipherLenInBits.len,
3089 tdata->validCipherOffsetLenInBits.len,
3090 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3094 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3096 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3098 ut_params->obuf = ut_params->op->sym->m_dst;
3099 if (ut_params->obuf)
3100 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3103 ciphertext = plaintext;
3105 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3108 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3110 tdata->ciphertext.data,
3111 tdata->validDataLenInBits.len,
3112 "SNOW 3G Ciphertext data not as expected");
3118 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
3120 struct crypto_testsuite_params *ts_params = &testsuite_params;
3121 struct crypto_unittest_params *ut_params = &unittest_params;
3122 uint8_t *plaintext, *ciphertext;
3125 unsigned plaintext_pad_len;
3126 unsigned plaintext_len;
3128 /* Create SNOW 3G session */
3129 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3130 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3131 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3132 tdata->key.data, tdata->key.len);
3136 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3137 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3139 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3140 "Failed to allocate input buffer in mempool");
3141 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3142 "Failed to allocate output buffer in mempool");
3144 /* Clear mbuf payload */
3145 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3146 rte_pktmbuf_tailroom(ut_params->ibuf));
3148 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3149 /* Append data which is padded to a multiple of */
3150 /* the algorithms block size */
3151 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3152 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3154 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3155 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3157 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3159 /* Create SNOW 3G operation */
3160 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3162 tdata->validCipherLenInBits.len,
3163 tdata->validCipherOffsetLenInBits.len,
3164 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3168 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3170 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3172 ut_params->obuf = ut_params->op->sym->m_dst;
3173 if (ut_params->obuf)
3174 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3177 ciphertext = plaintext;
3179 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3182 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3184 tdata->ciphertext.data,
3185 tdata->validDataLenInBits.len,
3186 "SNOW 3G Ciphertext data not as expected");
3191 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
3193 struct crypto_testsuite_params *ts_params = &testsuite_params;
3194 struct crypto_unittest_params *ut_params = &unittest_params;
3197 unsigned int plaintext_pad_len;
3198 unsigned int plaintext_len;
3199 uint8_t buffer[10000];
3200 const uint8_t *ciphertext;
3202 struct rte_cryptodev_info dev_info;
3204 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3205 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3206 printf("Device doesn't support scatter-gather. "
3211 /* Create SNOW 3G session */
3212 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3213 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3214 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3215 tdata->key.data, tdata->key.len);
3219 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3220 /* Append data which is padded to a multiple of */
3221 /* the algorithms block size */
3222 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3224 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3225 plaintext_pad_len, 10, 0);
3226 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3227 plaintext_pad_len, 3, 0);
3229 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3230 "Failed to allocate input buffer in mempool");
3231 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3232 "Failed to allocate output buffer in mempool");
3234 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3236 /* Create SNOW 3G operation */
3237 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3239 tdata->validCipherLenInBits.len,
3240 tdata->validCipherOffsetLenInBits.len,
3241 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3245 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3247 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3249 ut_params->obuf = ut_params->op->sym->m_dst;
3250 if (ut_params->obuf)
3251 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
3252 plaintext_len, buffer);
3254 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
3255 plaintext_len, buffer);
3257 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3260 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3262 tdata->ciphertext.data,
3263 tdata->validDataLenInBits.len,
3264 "SNOW 3G Ciphertext data not as expected");
3269 /* Shift right a buffer by "offset" bits, "offset" < 8 */
3271 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
3273 uint8_t curr_byte, prev_byte;
3274 uint32_t length_in_bytes = ceil_byte_length(length + offset);
3275 uint8_t lower_byte_mask = (1 << offset) - 1;
3278 prev_byte = buffer[0];
3279 buffer[0] >>= offset;
3281 for (i = 1; i < length_in_bytes; i++) {
3282 curr_byte = buffer[i];
3283 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
3284 (curr_byte >> offset);
3285 prev_byte = curr_byte;
3290 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
3292 struct crypto_testsuite_params *ts_params = &testsuite_params;
3293 struct crypto_unittest_params *ut_params = &unittest_params;
3294 uint8_t *plaintext, *ciphertext;
3296 uint32_t plaintext_len;
3297 uint32_t plaintext_pad_len;
3298 uint8_t extra_offset = 4;
3299 uint8_t *expected_ciphertext_shifted;
3301 /* Create SNOW 3G session */
3302 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3303 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3304 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3305 tdata->key.data, tdata->key.len);
3309 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3310 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3312 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3313 "Failed to allocate input buffer in mempool");
3314 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3315 "Failed to allocate output buffer in mempool");
3317 /* Clear mbuf payload */
3318 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3319 rte_pktmbuf_tailroom(ut_params->ibuf));
3321 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
3323 * Append data which is padded to a
3324 * multiple of the algorithms block size
3326 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3328 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
3331 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3333 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
3334 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
3336 #ifdef RTE_APP_TEST_DEBUG
3337 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
3339 /* Create SNOW 3G operation */
3340 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3342 tdata->validCipherLenInBits.len,
3343 tdata->validCipherOffsetLenInBits.len +
3345 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3349 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3351 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3353 ut_params->obuf = ut_params->op->sym->m_dst;
3354 if (ut_params->obuf)
3355 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3358 ciphertext = plaintext;
3360 #ifdef RTE_APP_TEST_DEBUG
3361 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3364 expected_ciphertext_shifted = rte_malloc(NULL,
3365 ceil_byte_length(plaintext_len + extra_offset), 0);
3367 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
3368 "failed to reserve memory for ciphertext shifted\n");
3370 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
3371 ceil_byte_length(tdata->ciphertext.len));
3372 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
3375 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
3377 expected_ciphertext_shifted,
3378 tdata->validDataLenInBits.len,
3380 "SNOW 3G Ciphertext data not as expected");
3384 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
3386 struct crypto_testsuite_params *ts_params = &testsuite_params;
3387 struct crypto_unittest_params *ut_params = &unittest_params;
3391 uint8_t *plaintext, *ciphertext;
3392 unsigned ciphertext_pad_len;
3393 unsigned ciphertext_len;
3395 /* Create SNOW 3G session */
3396 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3397 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3398 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3399 tdata->key.data, tdata->key.len);
3403 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3405 /* Clear mbuf payload */
3406 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3407 rte_pktmbuf_tailroom(ut_params->ibuf));
3409 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3410 /* Append data which is padded to a multiple of */
3411 /* the algorithms block size */
3412 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3413 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3414 ciphertext_pad_len);
3415 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3417 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3419 /* Create SNOW 3G operation */
3420 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3421 tdata->validCipherLenInBits.len,
3422 tdata->validCipherOffsetLenInBits.len,
3423 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3427 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3429 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3430 ut_params->obuf = ut_params->op->sym->m_dst;
3431 if (ut_params->obuf)
3432 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3435 plaintext = ciphertext;
3437 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3440 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3441 tdata->plaintext.data,
3442 tdata->validDataLenInBits.len,
3443 "SNOW 3G Plaintext data not as expected");
3447 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
3449 struct crypto_testsuite_params *ts_params = &testsuite_params;
3450 struct crypto_unittest_params *ut_params = &unittest_params;
3454 uint8_t *plaintext, *ciphertext;
3455 unsigned ciphertext_pad_len;
3456 unsigned ciphertext_len;
3458 /* Create SNOW 3G session */
3459 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3460 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3461 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3462 tdata->key.data, tdata->key.len);
3466 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3467 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3469 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3470 "Failed to allocate input buffer");
3471 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3472 "Failed to allocate output buffer");
3474 /* Clear mbuf payload */
3475 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3476 rte_pktmbuf_tailroom(ut_params->ibuf));
3478 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
3479 rte_pktmbuf_tailroom(ut_params->obuf));
3481 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3482 /* Append data which is padded to a multiple of */
3483 /* the algorithms block size */
3484 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3485 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3486 ciphertext_pad_len);
3487 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3488 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3490 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3492 /* Create SNOW 3G operation */
3493 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3495 tdata->validCipherLenInBits.len,
3496 tdata->validCipherOffsetLenInBits.len,
3497 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3501 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3503 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3504 ut_params->obuf = ut_params->op->sym->m_dst;
3505 if (ut_params->obuf)
3506 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3509 plaintext = ciphertext;
3511 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3514 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3515 tdata->plaintext.data,
3516 tdata->validDataLenInBits.len,
3517 "SNOW 3G Plaintext data not as expected");
3522 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
3524 struct crypto_testsuite_params *ts_params = &testsuite_params;
3525 struct crypto_unittest_params *ut_params = &unittest_params;
3529 uint8_t *plaintext, *ciphertext;
3530 unsigned plaintext_pad_len;
3531 unsigned plaintext_len;
3533 /* Create SNOW 3G session */
3534 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
3535 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3536 RTE_CRYPTO_AUTH_OP_GENERATE,
3537 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3538 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3539 tdata->key.data, tdata->key.len,
3540 tdata->aad.len, tdata->digest.len);
3543 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3545 /* clear mbuf payload */
3546 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3547 rte_pktmbuf_tailroom(ut_params->ibuf));
3549 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3550 /* Append data which is padded to a multiple of */
3551 /* the algorithms block size */
3552 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3553 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3555 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3557 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3559 /* Create SNOW 3G operation */
3560 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3561 tdata->digest.len, tdata->aad.data,
3562 tdata->aad.len, /*tdata->plaintext.len,*/
3563 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3564 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3565 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3566 tdata->iv.data, tdata->iv.len,
3567 tdata->validCipherLenInBits.len,
3568 tdata->validCipherOffsetLenInBits.len,
3569 tdata->validAuthLenInBits.len,
3570 tdata->validAuthOffsetLenInBits.len
3575 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3577 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3578 ut_params->obuf = ut_params->op->sym->m_src;
3579 if (ut_params->obuf)
3580 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3581 + tdata->iv.len + tdata->aad.len;
3583 ciphertext = plaintext;
3585 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3587 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3589 tdata->ciphertext.data,
3590 tdata->validDataLenInBits.len,
3591 "SNOW 3G Ciphertext data not as expected");
3593 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3594 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3597 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3600 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3601 "SNOW 3G Generated auth tag not as expected");
3605 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
3607 struct crypto_testsuite_params *ts_params = &testsuite_params;
3608 struct crypto_unittest_params *ut_params = &unittest_params;
3612 uint8_t *plaintext, *ciphertext;
3613 unsigned plaintext_pad_len;
3614 unsigned plaintext_len;
3616 /* Create SNOW 3G session */
3617 retval = create_wireless_algo_auth_cipher_session(ts_params->valid_devs[0],
3618 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3619 RTE_CRYPTO_AUTH_OP_GENERATE,
3620 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3621 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3622 tdata->key.data, tdata->key.len,
3623 tdata->aad.len, tdata->digest.len);
3627 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3629 /* clear mbuf payload */
3630 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3631 rte_pktmbuf_tailroom(ut_params->ibuf));
3633 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3634 /* Append data which is padded to a multiple of */
3635 /* the algorithms block size */
3636 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3637 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3639 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3641 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3643 /* Create SNOW 3G operation */
3644 retval = create_wireless_algo_auth_cipher_operation(
3646 tdata->iv.data, tdata->iv.len,
3647 tdata->aad.data, tdata->aad.len,
3649 tdata->validCipherLenInBits.len,
3650 tdata->validCipherOffsetLenInBits.len,
3651 tdata->validAuthLenInBits.len,
3652 tdata->validAuthOffsetLenInBits.len,
3653 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3654 RTE_CRYPTO_CIPHER_SNOW3G_UEA2
3660 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3662 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3663 ut_params->obuf = ut_params->op->sym->m_src;
3664 if (ut_params->obuf)
3665 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3666 + tdata->aad.len + tdata->iv.len;
3668 ciphertext = plaintext;
3670 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3671 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3672 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3675 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3677 tdata->ciphertext.data,
3678 tdata->validDataLenInBits.len,
3679 "SNOW 3G Ciphertext data not as expected");
3682 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3685 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3686 "SNOW 3G Generated auth tag not as expected");
3691 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata)
3693 struct crypto_testsuite_params *ts_params = &testsuite_params;
3694 struct crypto_unittest_params *ut_params = &unittest_params;
3698 uint8_t *plaintext, *ciphertext;
3699 unsigned plaintext_pad_len;
3700 unsigned plaintext_len;
3702 /* Create KASUMI session */
3703 retval = create_wireless_algo_auth_cipher_session(
3704 ts_params->valid_devs[0],
3705 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3706 RTE_CRYPTO_AUTH_OP_GENERATE,
3707 RTE_CRYPTO_AUTH_KASUMI_F9,
3708 RTE_CRYPTO_CIPHER_KASUMI_F8,
3709 tdata->key.data, tdata->key.len,
3710 tdata->aad.len, tdata->digest.len);
3713 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3715 /* clear mbuf payload */
3716 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3717 rte_pktmbuf_tailroom(ut_params->ibuf));
3719 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3720 /* Append data which is padded to a multiple of */
3721 /* the algorithms block size */
3722 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3723 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3725 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3727 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3729 /* Create KASUMI operation */
3730 retval = create_wireless_algo_auth_cipher_operation(tdata->digest.len,
3731 tdata->iv.data, tdata->iv.len,
3732 tdata->aad.data, tdata->aad.len,
3734 tdata->validCipherLenInBits.len,
3735 tdata->validCipherOffsetLenInBits.len,
3736 tdata->validAuthLenInBits.len,
3737 tdata->validAuthOffsetLenInBits.len,
3738 RTE_CRYPTO_AUTH_KASUMI_F9,
3739 RTE_CRYPTO_CIPHER_KASUMI_F8
3745 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3747 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3748 ut_params->obuf = ut_params->op->sym->m_src;
3749 if (ut_params->obuf)
3750 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3751 + tdata->iv.len + tdata->aad.len;
3753 ciphertext = plaintext;
3756 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3758 tdata->ciphertext.data,
3759 tdata->validCipherLenInBits.len,
3760 "KASUMI Ciphertext data not as expected");
3761 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3762 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3765 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3768 DIGEST_BYTE_LENGTH_KASUMI_F9,
3769 "KASUMI Generated auth tag not as expected");
3774 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
3776 struct crypto_testsuite_params *ts_params = &testsuite_params;
3777 struct crypto_unittest_params *ut_params = &unittest_params;
3781 uint8_t *plaintext, *ciphertext;
3782 unsigned plaintext_pad_len;
3783 unsigned plaintext_len;
3785 /* Create KASUMI session */
3786 retval = create_wireless_algo_cipher_auth_session(
3787 ts_params->valid_devs[0],
3788 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3789 RTE_CRYPTO_AUTH_OP_GENERATE,
3790 RTE_CRYPTO_AUTH_KASUMI_F9,
3791 RTE_CRYPTO_CIPHER_KASUMI_F8,
3792 tdata->key.data, tdata->key.len,
3793 tdata->aad.len, tdata->digest.len);
3797 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3799 /* clear mbuf payload */
3800 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3801 rte_pktmbuf_tailroom(ut_params->ibuf));
3803 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3804 /* Append data which is padded to a multiple of */
3805 /* the algorithms block size */
3806 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3807 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3809 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3811 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3813 /* Create KASUMI operation */
3814 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3815 tdata->digest.len, tdata->aad.data,
3817 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3818 RTE_CRYPTO_AUTH_KASUMI_F9,
3819 RTE_CRYPTO_CIPHER_KASUMI_F8,
3820 tdata->iv.data, tdata->iv.len,
3821 tdata->validCipherLenInBits.len,
3822 tdata->validCipherOffsetLenInBits.len,
3823 tdata->validAuthLenInBits.len,
3824 tdata->validAuthOffsetLenInBits.len
3829 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3831 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3832 ut_params->obuf = ut_params->op->sym->m_src;
3833 if (ut_params->obuf)
3834 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3835 + tdata->aad.len + tdata->iv.len;
3837 ciphertext = plaintext;
3839 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3840 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3843 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3845 tdata->ciphertext.data,
3846 tdata->validCipherLenInBits.len,
3847 "KASUMI Ciphertext data not as expected");
3850 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3853 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3854 "KASUMI Generated auth tag not as expected");
3859 test_zuc_encryption(const struct zuc_test_data *tdata)
3861 struct crypto_testsuite_params *ts_params = &testsuite_params;
3862 struct crypto_unittest_params *ut_params = &unittest_params;
3865 uint8_t *plaintext, *ciphertext;
3866 unsigned plaintext_pad_len;
3867 unsigned plaintext_len;
3869 /* Create ZUC session */
3870 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3871 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3872 RTE_CRYPTO_CIPHER_ZUC_EEA3,
3873 tdata->key.data, tdata->key.len);
3877 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3879 /* Clear mbuf payload */
3880 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3881 rte_pktmbuf_tailroom(ut_params->ibuf));
3883 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3884 /* Append data which is padded to a multiple */
3885 /* of the algorithms block size */
3886 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3887 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3889 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3891 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3893 /* Create ZUC operation */
3894 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3895 tdata->plaintext.len,
3896 tdata->validCipherOffsetLenInBits.len,
3897 RTE_CRYPTO_CIPHER_ZUC_EEA3);
3901 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3903 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3905 ut_params->obuf = ut_params->op->sym->m_dst;
3906 if (ut_params->obuf)
3907 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3910 ciphertext = plaintext;
3912 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3915 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3917 tdata->ciphertext.data,
3918 tdata->validCipherLenInBits.len,
3919 "ZUC Ciphertext data not as expected");
3924 test_zuc_encryption_sgl(const struct zuc_test_data *tdata)
3926 struct crypto_testsuite_params *ts_params = &testsuite_params;
3927 struct crypto_unittest_params *ut_params = &unittest_params;
3931 unsigned int plaintext_pad_len;
3932 unsigned int plaintext_len;
3933 const uint8_t *ciphertext;
3934 uint8_t ciphertext_buffer[2048];
3935 struct rte_cryptodev_info dev_info;
3937 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3938 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3939 printf("Device doesn't support scatter-gather. "
3944 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3946 /* Append data which is padded to a multiple */
3947 /* of the algorithms block size */
3948 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3950 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3951 plaintext_pad_len, 10, 0);
3953 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
3954 tdata->plaintext.data);
3956 /* Create ZUC session */
3957 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3958 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3959 RTE_CRYPTO_CIPHER_ZUC_EEA3,
3960 tdata->key.data, tdata->key.len);
3964 /* Clear mbuf payload */
3966 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3968 /* Create ZUC operation */
3969 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
3970 tdata->iv.len, tdata->plaintext.len,
3971 tdata->validCipherOffsetLenInBits.len,
3972 RTE_CRYPTO_CIPHER_ZUC_EEA3);
3976 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3978 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3980 ut_params->obuf = ut_params->op->sym->m_dst;
3981 if (ut_params->obuf)
3982 ciphertext = rte_pktmbuf_read(ut_params->obuf,
3983 tdata->iv.len, plaintext_len, ciphertext_buffer);
3985 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
3986 tdata->iv.len, plaintext_len, ciphertext_buffer);
3989 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3992 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3994 tdata->ciphertext.data,
3995 tdata->validCipherLenInBits.len,
3996 "ZUC Ciphertext data not as expected");
4002 test_zuc_authentication(const struct zuc_hash_test_data *tdata)
4004 struct crypto_testsuite_params *ts_params = &testsuite_params;
4005 struct crypto_unittest_params *ut_params = &unittest_params;
4008 unsigned plaintext_pad_len;
4009 unsigned plaintext_len;
4012 /* Create ZUC session */
4013 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
4014 tdata->key.data, tdata->key.len,
4015 tdata->aad.len, tdata->digest.len,
4016 RTE_CRYPTO_AUTH_OP_GENERATE,
4017 RTE_CRYPTO_AUTH_ZUC_EIA3);
4021 /* alloc mbuf and set payload */
4022 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4024 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4025 rte_pktmbuf_tailroom(ut_params->ibuf));
4027 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4028 /* Append data which is padded to a multiple of */
4029 /* the algorithms block size */
4030 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
4031 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4033 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4035 /* Create ZUC operation */
4036 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
4037 tdata->aad.data, tdata->aad.len,
4038 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4039 RTE_CRYPTO_AUTH_ZUC_EIA3,
4040 tdata->validAuthLenInBits.len,
4041 tdata->validAuthOffsetLenInBits.len);
4045 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4047 ut_params->obuf = ut_params->op->sym->m_src;
4048 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4049 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4050 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
4053 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4056 DIGEST_BYTE_LENGTH_KASUMI_F9,
4057 "ZUC Generated auth tag not as expected");
4063 test_kasumi_encryption_test_case_1(void)
4065 return test_kasumi_encryption(&kasumi_test_case_1);
4069 test_kasumi_encryption_test_case_1_sgl(void)
4071 return test_kasumi_encryption_sgl(&kasumi_test_case_1);
4075 test_kasumi_encryption_test_case_1_oop(void)
4077 return test_kasumi_encryption_oop(&kasumi_test_case_1);
4081 test_kasumi_encryption_test_case_1_oop_sgl(void)
4083 return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
4087 test_kasumi_encryption_test_case_2(void)
4089 return test_kasumi_encryption(&kasumi_test_case_2);
4093 test_kasumi_encryption_test_case_3(void)
4095 return test_kasumi_encryption(&kasumi_test_case_3);
4099 test_kasumi_encryption_test_case_4(void)
4101 return test_kasumi_encryption(&kasumi_test_case_4);
4105 test_kasumi_encryption_test_case_5(void)
4107 return test_kasumi_encryption(&kasumi_test_case_5);
4111 test_kasumi_decryption_test_case_1(void)
4113 return test_kasumi_decryption(&kasumi_test_case_1);
4117 test_kasumi_decryption_test_case_1_oop(void)
4119 return test_kasumi_decryption_oop(&kasumi_test_case_1);
4123 test_kasumi_decryption_test_case_2(void)
4125 return test_kasumi_decryption(&kasumi_test_case_2);
4129 test_kasumi_decryption_test_case_3(void)
4131 return test_kasumi_decryption(&kasumi_test_case_3);
4135 test_kasumi_decryption_test_case_4(void)
4137 return test_kasumi_decryption(&kasumi_test_case_4);
4141 test_kasumi_decryption_test_case_5(void)
4143 return test_kasumi_decryption(&kasumi_test_case_5);
4146 test_snow3g_encryption_test_case_1(void)
4148 return test_snow3g_encryption(&snow3g_test_case_1);
4152 test_snow3g_encryption_test_case_1_oop(void)
4154 return test_snow3g_encryption_oop(&snow3g_test_case_1);
4158 test_snow3g_encryption_test_case_1_oop_sgl(void)
4160 return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
4165 test_snow3g_encryption_test_case_1_offset_oop(void)
4167 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
4171 test_snow3g_encryption_test_case_2(void)
4173 return test_snow3g_encryption(&snow3g_test_case_2);
4177 test_snow3g_encryption_test_case_3(void)
4179 return test_snow3g_encryption(&snow3g_test_case_3);
4183 test_snow3g_encryption_test_case_4(void)
4185 return test_snow3g_encryption(&snow3g_test_case_4);
4189 test_snow3g_encryption_test_case_5(void)
4191 return test_snow3g_encryption(&snow3g_test_case_5);
4195 test_snow3g_decryption_test_case_1(void)
4197 return test_snow3g_decryption(&snow3g_test_case_1);
4201 test_snow3g_decryption_test_case_1_oop(void)
4203 return test_snow3g_decryption_oop(&snow3g_test_case_1);
4207 test_snow3g_decryption_test_case_2(void)
4209 return test_snow3g_decryption(&snow3g_test_case_2);
4213 test_snow3g_decryption_test_case_3(void)
4215 return test_snow3g_decryption(&snow3g_test_case_3);
4219 test_snow3g_decryption_test_case_4(void)
4221 return test_snow3g_decryption(&snow3g_test_case_4);
4225 test_snow3g_decryption_test_case_5(void)
4227 return test_snow3g_decryption(&snow3g_test_case_5);
4230 test_snow3g_cipher_auth_test_case_1(void)
4232 return test_snow3g_cipher_auth(&snow3g_test_case_3);
4236 test_snow3g_auth_cipher_test_case_1(void)
4238 return test_snow3g_auth_cipher(&snow3g_test_case_6);
4242 test_kasumi_auth_cipher_test_case_1(void)
4244 return test_kasumi_auth_cipher(&kasumi_test_case_3);
4248 test_kasumi_cipher_auth_test_case_1(void)
4250 return test_kasumi_cipher_auth(&kasumi_test_case_6);
4254 test_zuc_encryption_test_case_1(void)
4256 return test_zuc_encryption(&zuc_test_case_1);
4260 test_zuc_encryption_test_case_2(void)
4262 return test_zuc_encryption(&zuc_test_case_2);
4266 test_zuc_encryption_test_case_3(void)
4268 return test_zuc_encryption(&zuc_test_case_3);
4272 test_zuc_encryption_test_case_4(void)
4274 return test_zuc_encryption(&zuc_test_case_4);
4278 test_zuc_encryption_test_case_5(void)
4280 return test_zuc_encryption(&zuc_test_case_5);
4284 test_zuc_encryption_test_case_6_sgl(void)
4286 return test_zuc_encryption_sgl(&zuc_test_case_1);
4290 test_zuc_hash_generate_test_case_1(void)
4292 return test_zuc_authentication(&zuc_hash_test_case_1);
4296 test_zuc_hash_generate_test_case_2(void)
4298 return test_zuc_authentication(&zuc_hash_test_case_2);
4302 test_zuc_hash_generate_test_case_3(void)
4304 return test_zuc_authentication(&zuc_hash_test_case_3);
4308 test_zuc_hash_generate_test_case_4(void)
4310 return test_zuc_authentication(&zuc_hash_test_case_4);
4314 test_zuc_hash_generate_test_case_5(void)
4316 return test_zuc_authentication(&zuc_hash_test_case_5);
4320 test_3DES_chain_qat_all(void)
4322 struct crypto_testsuite_params *ts_params = &testsuite_params;
4325 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4326 ts_params->op_mpool, ts_params->valid_devs[0],
4327 RTE_CRYPTODEV_QAT_SYM_PMD,
4328 BLKCIPHER_3DES_CHAIN_TYPE);
4330 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4332 return TEST_SUCCESS;
4336 test_DES_cipheronly_qat_all(void)
4338 struct crypto_testsuite_params *ts_params = &testsuite_params;
4341 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4342 ts_params->op_mpool, ts_params->valid_devs[0],
4343 RTE_CRYPTODEV_QAT_SYM_PMD,
4344 BLKCIPHER_DES_CIPHERONLY_TYPE);
4346 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4348 return TEST_SUCCESS;
4352 test_3DES_cipheronly_qat_all(void)
4354 struct crypto_testsuite_params *ts_params = &testsuite_params;
4357 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4358 ts_params->op_mpool, ts_params->valid_devs[0],
4359 RTE_CRYPTODEV_QAT_SYM_PMD,
4360 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4362 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4364 return TEST_SUCCESS;
4368 test_3DES_chain_openssl_all(void)
4370 struct crypto_testsuite_params *ts_params = &testsuite_params;
4373 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4374 ts_params->op_mpool, ts_params->valid_devs[0],
4375 RTE_CRYPTODEV_OPENSSL_PMD,
4376 BLKCIPHER_3DES_CHAIN_TYPE);
4378 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4380 return TEST_SUCCESS;
4384 test_3DES_cipheronly_openssl_all(void)
4386 struct crypto_testsuite_params *ts_params = &testsuite_params;
4389 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4390 ts_params->op_mpool, ts_params->valid_devs[0],
4391 RTE_CRYPTODEV_OPENSSL_PMD,
4392 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4394 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4396 return TEST_SUCCESS;
4399 /* ***** AES-GCM Tests ***** */
4402 create_gcm_session(uint8_t dev_id, enum rte_crypto_cipher_operation op,
4403 const uint8_t *key, const uint8_t key_len,
4404 const uint8_t aad_len, const uint8_t auth_len,
4405 enum rte_crypto_auth_operation auth_op)
4407 uint8_t cipher_key[key_len];
4409 struct crypto_unittest_params *ut_params = &unittest_params;
4411 memcpy(cipher_key, key, key_len);
4413 /* Setup Cipher Parameters */
4414 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4415 ut_params->cipher_xform.next = NULL;
4417 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
4418 ut_params->auth_xform.auth.op = auth_op;
4419 ut_params->cipher_xform.cipher.op = op;
4420 ut_params->cipher_xform.cipher.key.data = cipher_key;
4421 ut_params->cipher_xform.cipher.key.length = key_len;
4423 TEST_HEXDUMP(stdout, "key:", key, key_len);
4425 /* Setup Authentication Parameters */
4426 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4427 ut_params->auth_xform.next = NULL;
4429 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
4431 ut_params->auth_xform.auth.digest_length = auth_len;
4432 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
4433 ut_params->auth_xform.auth.key.length = 0;
4434 ut_params->auth_xform.auth.key.data = NULL;
4436 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4437 ut_params->cipher_xform.next = &ut_params->auth_xform;
4439 /* Create Crypto session*/
4440 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
4441 &ut_params->cipher_xform);
4442 } else {/* Create Crypto session*/
4443 ut_params->auth_xform.next = &ut_params->cipher_xform;
4444 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
4445 &ut_params->auth_xform);
4448 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4454 create_gcm_xforms(struct rte_crypto_op *op,
4455 enum rte_crypto_cipher_operation cipher_op,
4456 uint8_t *key, const uint8_t key_len,
4457 const uint8_t aad_len, const uint8_t auth_len,
4458 enum rte_crypto_auth_operation auth_op)
4460 TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 2),
4461 "failed to allocate space for crypto transforms");
4463 struct rte_crypto_sym_op *sym_op = op->sym;
4465 /* Setup Cipher Parameters */
4466 sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4467 sym_op->xform->cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
4468 sym_op->xform->cipher.op = cipher_op;
4469 sym_op->xform->cipher.key.data = key;
4470 sym_op->xform->cipher.key.length = key_len;
4472 TEST_HEXDUMP(stdout, "key:", key, key_len);
4474 /* Setup Authentication Parameters */
4475 sym_op->xform->next->type = RTE_CRYPTO_SYM_XFORM_AUTH;
4476 sym_op->xform->next->auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
4477 sym_op->xform->next->auth.op = auth_op;
4478 sym_op->xform->next->auth.digest_length = auth_len;
4479 sym_op->xform->next->auth.add_auth_data_length = aad_len;
4480 sym_op->xform->next->auth.key.length = 0;
4481 sym_op->xform->next->auth.key.data = NULL;
4482 sym_op->xform->next->next = NULL;
4488 create_gcm_operation(enum rte_crypto_cipher_operation op,
4489 const struct gcm_test_data *tdata)
4491 struct crypto_testsuite_params *ts_params = &testsuite_params;
4492 struct crypto_unittest_params *ut_params = &unittest_params;
4494 uint8_t *plaintext, *ciphertext;
4495 unsigned int iv_pad_len, aad_pad_len, plaintext_pad_len;
4497 /* Generate Crypto op data structure */
4498 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4499 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4500 TEST_ASSERT_NOT_NULL(ut_params->op,
4501 "Failed to allocate symmetric crypto operation struct");
4503 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4505 /* Append aad data */
4506 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
4507 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4509 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
4510 "no room to append aad");
4512 sym_op->auth.aad.length = tdata->aad.len;
4513 sym_op->auth.aad.phys_addr =
4514 rte_pktmbuf_mtophys(ut_params->ibuf);
4515 memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
4516 TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data,
4517 sym_op->auth.aad.length);
4520 iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
4521 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
4522 ut_params->ibuf, iv_pad_len);
4523 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
4525 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
4526 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
4527 sym_op->cipher.iv.length = tdata->iv.len;
4529 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
4530 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data,
4531 sym_op->cipher.iv.length);
4533 /* Append plaintext/ciphertext */
4534 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4535 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4536 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4538 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
4540 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
4541 TEST_HEXDUMP(stdout, "plaintext:", plaintext,
4542 tdata->plaintext.len);
4544 if (ut_params->obuf) {
4545 ciphertext = (uint8_t *)rte_pktmbuf_append(
4547 plaintext_pad_len + aad_pad_len +
4549 TEST_ASSERT_NOT_NULL(ciphertext,
4550 "no room to append ciphertext");
4552 memset(ciphertext + aad_pad_len + iv_pad_len, 0,
4553 tdata->ciphertext.len);
4556 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
4557 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4559 TEST_ASSERT_NOT_NULL(ciphertext,
4560 "no room to append ciphertext");
4562 memcpy(ciphertext, tdata->ciphertext.data,
4563 tdata->ciphertext.len);
4564 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext,
4565 tdata->ciphertext.len);
4567 if (ut_params->obuf) {
4568 plaintext = (uint8_t *)rte_pktmbuf_append(
4570 plaintext_pad_len + aad_pad_len +
4572 TEST_ASSERT_NOT_NULL(plaintext,
4573 "no room to append plaintext");
4575 memset(plaintext + aad_pad_len + iv_pad_len, 0,
4576 tdata->plaintext.len);
4580 /* Append digest data */
4581 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4582 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
4583 ut_params->obuf ? ut_params->obuf :
4585 tdata->auth_tag.len);
4586 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
4587 "no room to append digest");
4588 memset(sym_op->auth.digest.data, 0, tdata->auth_tag.len);
4589 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4590 ut_params->obuf ? ut_params->obuf :
4593 aad_pad_len + iv_pad_len);
4594 sym_op->auth.digest.length = tdata->auth_tag.len;
4596 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
4597 ut_params->ibuf, tdata->auth_tag.len);
4598 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
4599 "no room to append digest");
4600 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4602 plaintext_pad_len + aad_pad_len + iv_pad_len);
4603 sym_op->auth.digest.length = tdata->auth_tag.len;
4605 rte_memcpy(sym_op->auth.digest.data, tdata->auth_tag.data,
4606 tdata->auth_tag.len);
4607 TEST_HEXDUMP(stdout, "digest:",
4608 sym_op->auth.digest.data,
4609 sym_op->auth.digest.length);
4612 sym_op->cipher.data.length = tdata->plaintext.len;
4613 sym_op->cipher.data.offset = aad_pad_len + iv_pad_len;
4615 sym_op->auth.data.length = tdata->plaintext.len;
4616 sym_op->auth.data.offset = aad_pad_len + iv_pad_len;
4622 test_mb_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
4624 struct crypto_testsuite_params *ts_params = &testsuite_params;
4625 struct crypto_unittest_params *ut_params = &unittest_params;
4628 uint8_t *ciphertext, *auth_tag;
4629 uint16_t plaintext_pad_len;
4632 /* Create GCM session */
4633 retval = create_gcm_session(ts_params->valid_devs[0],
4634 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4635 tdata->key.data, tdata->key.len,
4636 tdata->aad.len, tdata->auth_tag.len,
4637 RTE_CRYPTO_AUTH_OP_GENERATE);
4641 if (tdata->aad.len > MBUF_SIZE) {
4642 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
4643 /* Populate full size of add data */
4644 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
4645 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
4647 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4649 /* clear mbuf payload */
4650 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4651 rte_pktmbuf_tailroom(ut_params->ibuf));
4653 /* Create GCM operation */
4654 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
4658 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4660 ut_params->op->sym->m_src = ut_params->ibuf;
4662 /* Process crypto operation */
4663 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4664 ut_params->op), "failed to process sym crypto op");
4666 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4667 "crypto op processing failed");
4669 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4671 if (ut_params->op->sym->m_dst) {
4672 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4674 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
4675 uint8_t *, plaintext_pad_len);
4677 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
4679 ut_params->op->sym->cipher.data.offset);
4680 auth_tag = ciphertext + plaintext_pad_len;
4683 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
4684 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
4687 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4689 tdata->ciphertext.data,
4690 tdata->ciphertext.len,
4691 "GCM Ciphertext data not as expected");
4693 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4695 tdata->auth_tag.data,
4696 tdata->auth_tag.len,
4697 "GCM Generated auth tag not as expected");
4704 test_mb_AES_GCM_authenticated_encryption_test_case_1(void)
4706 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_1);
4710 test_mb_AES_GCM_authenticated_encryption_test_case_2(void)
4712 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_2);
4716 test_mb_AES_GCM_authenticated_encryption_test_case_3(void)
4718 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_3);
4722 test_mb_AES_GCM_authenticated_encryption_test_case_4(void)
4724 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_4);
4728 test_mb_AES_GCM_authenticated_encryption_test_case_5(void)
4730 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_5);
4734 test_mb_AES_GCM_authenticated_encryption_test_case_6(void)
4736 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_6);
4740 test_mb_AES_GCM_authenticated_encryption_test_case_7(void)
4742 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_7);
4746 test_mb_AES_GCM_auth_encryption_test_case_256_1(void)
4748 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_1);
4752 test_mb_AES_GCM_auth_encryption_test_case_256_2(void)
4754 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_2);
4758 test_mb_AES_GCM_auth_encryption_test_case_256_3(void)
4760 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_3);
4764 test_mb_AES_GCM_auth_encryption_test_case_256_4(void)
4766 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_4);
4770 test_mb_AES_GCM_auth_encryption_test_case_256_5(void)
4772 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_5);
4776 test_mb_AES_GCM_auth_encryption_test_case_256_6(void)
4778 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_6);
4782 test_mb_AES_GCM_auth_encryption_test_case_256_7(void)
4784 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_7);
4788 test_mb_AES_GCM_auth_encryption_test_case_aad_1(void)
4790 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_aad_1);
4794 test_mb_AES_GCM_auth_encryption_test_case_aad_2(void)
4796 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_aad_2);
4800 test_mb_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
4802 struct crypto_testsuite_params *ts_params = &testsuite_params;
4803 struct crypto_unittest_params *ut_params = &unittest_params;
4809 /* Create GCM session */
4810 retval = create_gcm_session(ts_params->valid_devs[0],
4811 RTE_CRYPTO_CIPHER_OP_DECRYPT,
4812 tdata->key.data, tdata->key.len,
4813 tdata->aad.len, tdata->auth_tag.len,
4814 RTE_CRYPTO_AUTH_OP_VERIFY);
4818 /* alloc mbuf and set payload */
4819 if (tdata->aad.len > MBUF_SIZE) {
4820 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
4821 /* Populate full size of add data */
4822 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
4823 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
4825 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4827 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4828 rte_pktmbuf_tailroom(ut_params->ibuf));
4830 /* Create GCM operation */
4831 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
4835 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4837 ut_params->op->sym->m_src = ut_params->ibuf;
4839 /* Process crypto operation */
4840 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4841 ut_params->op), "failed to process sym crypto op");
4843 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4844 "crypto op processing failed");
4846 if (ut_params->op->sym->m_dst)
4847 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4850 plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
4852 ut_params->op->sym->cipher.data.offset);
4854 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
4857 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4859 tdata->plaintext.data,
4860 tdata->plaintext.len,
4861 "GCM plaintext data not as expected");
4863 TEST_ASSERT_EQUAL(ut_params->op->status,
4864 RTE_CRYPTO_OP_STATUS_SUCCESS,
4865 "GCM authentication failed");
4870 test_mb_AES_GCM_authenticated_decryption_test_case_1(void)
4872 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_1);
4876 test_mb_AES_GCM_authenticated_decryption_test_case_2(void)
4878 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_2);
4882 test_mb_AES_GCM_authenticated_decryption_test_case_3(void)
4884 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_3);
4888 test_mb_AES_GCM_authenticated_decryption_test_case_4(void)
4890 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_4);
4894 test_mb_AES_GCM_authenticated_decryption_test_case_5(void)
4896 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_5);
4900 test_mb_AES_GCM_authenticated_decryption_test_case_6(void)
4902 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_6);
4906 test_mb_AES_GCM_authenticated_decryption_test_case_7(void)
4908 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_7);
4912 test_mb_AES_GCM_auth_decryption_test_case_256_1(void)
4914 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_1);
4918 test_mb_AES_GCM_auth_decryption_test_case_256_2(void)
4920 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_2);
4924 test_mb_AES_GCM_auth_decryption_test_case_256_3(void)
4926 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_3);
4930 test_mb_AES_GCM_auth_decryption_test_case_256_4(void)
4932 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_4);
4936 test_mb_AES_GCM_auth_decryption_test_case_256_5(void)
4938 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_5);
4942 test_mb_AES_GCM_auth_decryption_test_case_256_6(void)
4944 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_6);
4948 test_mb_AES_GCM_auth_decryption_test_case_256_7(void)
4950 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_7);
4954 test_mb_AES_GCM_auth_decryption_test_case_aad_1(void)
4956 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_aad_1);
4960 test_mb_AES_GCM_auth_decryption_test_case_aad_2(void)
4962 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_aad_2);
4966 test_AES_GCM_authenticated_encryption_oop(const struct gcm_test_data *tdata)
4968 struct crypto_testsuite_params *ts_params = &testsuite_params;
4969 struct crypto_unittest_params *ut_params = &unittest_params;
4972 uint8_t *ciphertext, *auth_tag;
4973 uint16_t plaintext_pad_len;
4975 /* Create GCM session */
4976 retval = create_gcm_session(ts_params->valid_devs[0],
4977 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4978 tdata->key.data, tdata->key.len,
4979 tdata->aad.len, tdata->auth_tag.len,
4980 RTE_CRYPTO_AUTH_OP_GENERATE);
4984 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4985 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4987 /* clear mbuf payload */
4988 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4989 rte_pktmbuf_tailroom(ut_params->ibuf));
4990 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
4991 rte_pktmbuf_tailroom(ut_params->obuf));
4993 /* Create GCM operation */
4994 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
4998 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5000 ut_params->op->sym->m_src = ut_params->ibuf;
5001 ut_params->op->sym->m_dst = ut_params->obuf;
5003 /* Process crypto operation */
5004 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5005 ut_params->op), "failed to process sym crypto op");
5007 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5008 "crypto op processing failed");
5010 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5012 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5013 ut_params->op->sym->cipher.data.offset);
5014 auth_tag = ciphertext + plaintext_pad_len;
5016 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5017 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5020 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5022 tdata->ciphertext.data,
5023 tdata->ciphertext.len,
5024 "GCM Ciphertext data not as expected");
5026 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5028 tdata->auth_tag.data,
5029 tdata->auth_tag.len,
5030 "GCM Generated auth tag not as expected");
5037 test_mb_AES_GCM_authenticated_encryption_oop(void)
5039 return test_AES_GCM_authenticated_encryption_oop(&gcm_test_case_5);
5043 test_AES_GCM_authenticated_decryption_oop(const struct gcm_test_data *tdata)
5045 struct crypto_testsuite_params *ts_params = &testsuite_params;
5046 struct crypto_unittest_params *ut_params = &unittest_params;
5051 /* Create GCM session */
5052 retval = create_gcm_session(ts_params->valid_devs[0],
5053 RTE_CRYPTO_CIPHER_OP_DECRYPT,
5054 tdata->key.data, tdata->key.len,
5055 tdata->aad.len, tdata->auth_tag.len,
5056 RTE_CRYPTO_AUTH_OP_VERIFY);
5060 /* alloc mbuf and set payload */
5061 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5062 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5064 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5065 rte_pktmbuf_tailroom(ut_params->ibuf));
5066 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5067 rte_pktmbuf_tailroom(ut_params->obuf));
5069 /* Create GCM operation */
5070 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
5074 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5076 ut_params->op->sym->m_src = ut_params->ibuf;
5077 ut_params->op->sym->m_dst = ut_params->obuf;
5079 /* Process crypto operation */
5080 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5081 ut_params->op), "failed to process sym crypto op");
5083 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5084 "crypto op processing failed");
5086 plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5087 ut_params->op->sym->cipher.data.offset);
5089 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5092 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5094 tdata->plaintext.data,
5095 tdata->plaintext.len,
5096 "GCM plaintext data not as expected");
5098 TEST_ASSERT_EQUAL(ut_params->op->status,
5099 RTE_CRYPTO_OP_STATUS_SUCCESS,
5100 "GCM authentication failed");
5105 test_mb_AES_GCM_authenticated_decryption_oop(void)
5107 return test_AES_GCM_authenticated_decryption_oop(&gcm_test_case_5);
5111 test_AES_GCM_authenticated_encryption_sessionless(
5112 const struct gcm_test_data *tdata)
5114 struct crypto_testsuite_params *ts_params = &testsuite_params;
5115 struct crypto_unittest_params *ut_params = &unittest_params;
5118 uint8_t *ciphertext, *auth_tag;
5119 uint16_t plaintext_pad_len;
5120 uint8_t key[tdata->key.len + 1];
5122 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5124 /* clear mbuf payload */
5125 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5126 rte_pktmbuf_tailroom(ut_params->ibuf));
5128 /* Create GCM operation */
5129 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
5133 /* Create GCM xforms */
5134 memcpy(key, tdata->key.data, tdata->key.len);
5135 retval = create_gcm_xforms(ut_params->op,
5136 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5137 key, tdata->key.len,
5138 tdata->aad.len, tdata->auth_tag.len,
5139 RTE_CRYPTO_AUTH_OP_GENERATE);
5143 ut_params->op->sym->m_src = ut_params->ibuf;
5145 TEST_ASSERT_EQUAL(ut_params->op->sym->sess_type,
5146 RTE_CRYPTO_SYM_OP_SESSIONLESS,
5147 "crypto op session type not sessionless");
5149 /* Process crypto operation */
5150 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5151 ut_params->op), "failed to process sym crypto op");
5153 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5155 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5156 "crypto op status not success");
5158 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5160 ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5161 ut_params->op->sym->cipher.data.offset);
5162 auth_tag = ciphertext + plaintext_pad_len;
5164 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5165 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5168 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5170 tdata->ciphertext.data,
5171 tdata->ciphertext.len,
5172 "GCM Ciphertext data not as expected");
5174 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5176 tdata->auth_tag.data,
5177 tdata->auth_tag.len,
5178 "GCM Generated auth tag not as expected");
5185 test_mb_AES_GCM_authenticated_encryption_sessionless(void)
5187 return test_AES_GCM_authenticated_encryption_sessionless(
5192 test_AES_GCM_authenticated_decryption_sessionless(
5193 const struct gcm_test_data *tdata)
5195 struct crypto_testsuite_params *ts_params = &testsuite_params;
5196 struct crypto_unittest_params *ut_params = &unittest_params;
5200 uint8_t key[tdata->key.len + 1];
5202 /* alloc mbuf and set payload */
5203 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5205 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5206 rte_pktmbuf_tailroom(ut_params->ibuf));
5208 /* Create GCM operation */
5209 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
5213 /* Create GCM xforms */
5214 memcpy(key, tdata->key.data, tdata->key.len);
5215 retval = create_gcm_xforms(ut_params->op,
5216 RTE_CRYPTO_CIPHER_OP_DECRYPT,
5217 key, tdata->key.len,
5218 tdata->aad.len, tdata->auth_tag.len,
5219 RTE_CRYPTO_AUTH_OP_VERIFY);
5223 ut_params->op->sym->m_src = ut_params->ibuf;
5225 TEST_ASSERT_EQUAL(ut_params->op->sym->sess_type,
5226 RTE_CRYPTO_SYM_OP_SESSIONLESS,
5227 "crypto op session type not sessionless");
5229 /* Process crypto operation */
5230 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5231 ut_params->op), "failed to process sym crypto op");
5233 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5235 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5236 "crypto op status not success");
5238 plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5239 ut_params->op->sym->cipher.data.offset);
5241 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5244 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5246 tdata->plaintext.data,
5247 tdata->plaintext.len,
5248 "GCM plaintext data not as expected");
5250 TEST_ASSERT_EQUAL(ut_params->op->status,
5251 RTE_CRYPTO_OP_STATUS_SUCCESS,
5252 "GCM authentication failed");
5257 test_mb_AES_GCM_authenticated_decryption_sessionless(void)
5259 return test_AES_GCM_authenticated_decryption_sessionless(
5266 struct crypto_testsuite_params *ts_params = &testsuite_params;
5267 struct rte_cryptodev_stats stats;
5268 struct rte_cryptodev *dev;
5269 cryptodev_stats_get_t temp_pfn;
5271 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5272 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
5273 &stats) == -ENODEV),
5274 "rte_cryptodev_stats_get invalid dev failed");
5275 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
5276 "rte_cryptodev_stats_get invalid Param failed");
5277 dev = &rte_cryptodevs[ts_params->valid_devs[0]];
5278 temp_pfn = dev->dev_ops->stats_get;
5279 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
5280 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
5282 "rte_cryptodev_stats_get invalid Param failed");
5283 dev->dev_ops->stats_get = temp_pfn;
5285 /* Test expected values */
5287 test_AES_CBC_HMAC_SHA1_encrypt_digest();
5289 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5291 "rte_cryptodev_stats_get failed");
5292 TEST_ASSERT((stats.enqueued_count == 1),
5293 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5294 TEST_ASSERT((stats.dequeued_count == 1),
5295 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5296 TEST_ASSERT((stats.enqueue_err_count == 0),
5297 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5298 TEST_ASSERT((stats.dequeue_err_count == 0),
5299 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5301 /* invalid device but should ignore and not reset device stats*/
5302 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
5303 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5305 "rte_cryptodev_stats_get failed");
5306 TEST_ASSERT((stats.enqueued_count == 1),
5307 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5309 /* check that a valid reset clears stats */
5310 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5311 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5313 "rte_cryptodev_stats_get failed");
5314 TEST_ASSERT((stats.enqueued_count == 0),
5315 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5316 TEST_ASSERT((stats.dequeued_count == 0),
5317 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5319 return TEST_SUCCESS;
5322 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
5323 struct crypto_unittest_params *ut_params,
5324 enum rte_crypto_auth_operation op,
5325 const struct HMAC_MD5_vector *test_case)
5329 memcpy(key, test_case->key.data, test_case->key.len);
5331 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5332 ut_params->auth_xform.next = NULL;
5333 ut_params->auth_xform.auth.op = op;
5335 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
5337 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
5338 ut_params->auth_xform.auth.add_auth_data_length = 0;
5339 ut_params->auth_xform.auth.key.length = test_case->key.len;
5340 ut_params->auth_xform.auth.key.data = key;
5342 ut_params->sess = rte_cryptodev_sym_session_create(
5343 ts_params->valid_devs[0], &ut_params->auth_xform);
5345 if (ut_params->sess == NULL)
5348 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5350 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5351 rte_pktmbuf_tailroom(ut_params->ibuf));
5356 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
5357 const struct HMAC_MD5_vector *test_case,
5358 uint8_t **plaintext)
5360 uint16_t plaintext_pad_len;
5362 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5364 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5367 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5369 memcpy(*plaintext, test_case->plaintext.data,
5370 test_case->plaintext.len);
5372 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5373 ut_params->ibuf, MD5_DIGEST_LEN);
5374 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5375 "no room to append digest");
5376 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5377 ut_params->ibuf, plaintext_pad_len);
5378 sym_op->auth.digest.length = MD5_DIGEST_LEN;
5380 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
5381 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
5382 test_case->auth_tag.len);
5385 sym_op->auth.data.offset = 0;
5386 sym_op->auth.data.length = test_case->plaintext.len;
5388 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5389 ut_params->op->sym->m_src = ut_params->ibuf;
5395 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
5397 uint16_t plaintext_pad_len;
5398 uint8_t *plaintext, *auth_tag;
5400 struct crypto_testsuite_params *ts_params = &testsuite_params;
5401 struct crypto_unittest_params *ut_params = &unittest_params;
5403 if (MD5_HMAC_create_session(ts_params, ut_params,
5404 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
5407 /* Generate Crypto op data structure */
5408 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5409 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5410 TEST_ASSERT_NOT_NULL(ut_params->op,
5411 "Failed to allocate symmetric crypto operation struct");
5413 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5416 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5419 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5420 ut_params->op), "failed to process sym crypto op");
5422 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5423 "crypto op processing failed");
5425 if (ut_params->op->sym->m_dst) {
5426 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
5427 uint8_t *, plaintext_pad_len);
5429 auth_tag = plaintext + plaintext_pad_len;
5432 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5434 test_case->auth_tag.data,
5435 test_case->auth_tag.len,
5436 "HMAC_MD5 generated tag not as expected");
5438 return TEST_SUCCESS;
5442 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
5446 struct crypto_testsuite_params *ts_params = &testsuite_params;
5447 struct crypto_unittest_params *ut_params = &unittest_params;
5449 if (MD5_HMAC_create_session(ts_params, ut_params,
5450 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
5454 /* Generate Crypto op data structure */
5455 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5456 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5457 TEST_ASSERT_NOT_NULL(ut_params->op,
5458 "Failed to allocate symmetric crypto operation struct");
5460 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5463 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5464 ut_params->op), "failed to process sym crypto op");
5466 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5467 "HMAC_MD5 crypto op processing failed");
5469 return TEST_SUCCESS;
5473 test_MD5_HMAC_generate_case_1(void)
5475 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
5479 test_MD5_HMAC_verify_case_1(void)
5481 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
5485 test_MD5_HMAC_generate_case_2(void)
5487 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
5491 test_MD5_HMAC_verify_case_2(void)
5493 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
5497 test_multi_session(void)
5499 struct crypto_testsuite_params *ts_params = &testsuite_params;
5500 struct crypto_unittest_params *ut_params = &unittest_params;
5502 struct rte_cryptodev_info dev_info;
5503 struct rte_cryptodev_sym_session **sessions;
5507 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
5508 aes_cbc_key, hmac_sha512_key);
5511 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5513 sessions = rte_malloc(NULL,
5514 (sizeof(struct rte_cryptodev_sym_session *) *
5515 dev_info.sym.max_nb_sessions) + 1, 0);
5517 /* Create multiple crypto sessions*/
5518 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
5519 sessions[i] = rte_cryptodev_sym_session_create(
5520 ts_params->valid_devs[0],
5521 &ut_params->auth_xform);
5522 TEST_ASSERT_NOT_NULL(sessions[i],
5523 "Session creation failed at session number %u",
5526 /* Attempt to send a request on each session */
5527 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
5531 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
5532 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
5534 "Failed to perform decrypt on request number %u.", i);
5535 /* free crypto operation structure */
5537 rte_crypto_op_free(ut_params->op);
5540 * free mbuf - both obuf and ibuf are usually the same,
5541 * so check if they point at the same address is necessary,
5542 * to avoid freeing the mbuf twice.
5544 if (ut_params->obuf) {
5545 rte_pktmbuf_free(ut_params->obuf);
5546 if (ut_params->ibuf == ut_params->obuf)
5547 ut_params->ibuf = 0;
5548 ut_params->obuf = 0;
5550 if (ut_params->ibuf) {
5551 rte_pktmbuf_free(ut_params->ibuf);
5552 ut_params->ibuf = 0;
5556 /* Next session create should fail */
5557 sessions[i] = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
5558 &ut_params->auth_xform);
5559 TEST_ASSERT_NULL(sessions[i],
5560 "Session creation succeeded unexpectedly!");
5562 for (i = 0; i < dev_info.sym.max_nb_sessions; i++)
5563 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
5568 return TEST_SUCCESS;
5571 struct multi_session_params {
5572 struct crypto_unittest_params ut_params;
5573 uint8_t *cipher_key;
5575 const uint8_t *cipher;
5576 const uint8_t *digest;
5580 #define MB_SESSION_NUMBER 3
5583 test_multi_session_random_usage(void)
5585 struct crypto_testsuite_params *ts_params = &testsuite_params;
5586 struct rte_cryptodev_info dev_info;
5587 struct rte_cryptodev_sym_session **sessions;
5589 struct multi_session_params ut_paramz[] = {
5592 .cipher_key = ms_aes_cbc_key0,
5593 .hmac_key = ms_hmac_key0,
5594 .cipher = ms_aes_cbc_cipher0,
5595 .digest = ms_hmac_digest0,
5596 .iv = ms_aes_cbc_iv0
5599 .cipher_key = ms_aes_cbc_key1,
5600 .hmac_key = ms_hmac_key1,
5601 .cipher = ms_aes_cbc_cipher1,
5602 .digest = ms_hmac_digest1,
5603 .iv = ms_aes_cbc_iv1
5606 .cipher_key = ms_aes_cbc_key2,
5607 .hmac_key = ms_hmac_key2,
5608 .cipher = ms_aes_cbc_cipher2,
5609 .digest = ms_hmac_digest2,
5610 .iv = ms_aes_cbc_iv2
5615 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5617 sessions = rte_malloc(NULL,
5618 (sizeof(struct rte_cryptodev_sym_session *)
5619 * dev_info.sym.max_nb_sessions) + 1, 0);
5621 for (i = 0; i < MB_SESSION_NUMBER; i++) {
5622 rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
5623 sizeof(struct crypto_unittest_params));
5625 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
5626 &ut_paramz[i].ut_params,
5627 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
5629 /* Create multiple crypto sessions*/
5630 sessions[i] = rte_cryptodev_sym_session_create(
5631 ts_params->valid_devs[0],
5632 &ut_paramz[i].ut_params.auth_xform);
5634 TEST_ASSERT_NOT_NULL(sessions[i],
5635 "Session creation failed at session number %u",
5641 for (i = 0; i < 40000; i++) {
5643 j = rand() % MB_SESSION_NUMBER;
5645 TEST_ASSERT_SUCCESS(
5646 test_AES_CBC_HMAC_SHA512_decrypt_perform(
5648 &ut_paramz[j].ut_params,
5649 ts_params, ut_paramz[j].cipher,
5650 ut_paramz[j].digest,
5652 "Failed to perform decrypt on request number %u.", i);
5654 if (ut_paramz[j].ut_params.op)
5655 rte_crypto_op_free(ut_paramz[j].ut_params.op);
5658 * free mbuf - both obuf and ibuf are usually the same,
5659 * so check if they point at the same address is necessary,
5660 * to avoid freeing the mbuf twice.
5662 if (ut_paramz[j].ut_params.obuf) {
5663 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
5664 if (ut_paramz[j].ut_params.ibuf
5665 == ut_paramz[j].ut_params.obuf)
5666 ut_paramz[j].ut_params.ibuf = 0;
5667 ut_paramz[j].ut_params.obuf = 0;
5669 if (ut_paramz[j].ut_params.ibuf) {
5670 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
5671 ut_paramz[j].ut_params.ibuf = 0;
5675 for (i = 0; i < MB_SESSION_NUMBER; i++)
5676 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
5681 return TEST_SUCCESS;
5685 test_null_cipher_only_operation(void)
5687 struct crypto_testsuite_params *ts_params = &testsuite_params;
5688 struct crypto_unittest_params *ut_params = &unittest_params;
5690 /* Generate test mbuf data and space for digest */
5691 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5692 catch_22_quote, QUOTE_512_BYTES, 0);
5694 /* Setup Cipher Parameters */
5695 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5696 ut_params->cipher_xform.next = NULL;
5698 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5699 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5701 /* Create Crypto session*/
5702 ut_params->sess = rte_cryptodev_sym_session_create(
5703 ts_params->valid_devs[0], &ut_params->cipher_xform);
5704 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5706 /* Generate Crypto op data structure */
5707 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5708 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5709 TEST_ASSERT_NOT_NULL(ut_params->op,
5710 "Failed to allocate symmetric crypto operation struct");
5712 /* Set crypto operation data parameters */
5713 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5715 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5717 /* set crypto operation source mbuf */
5718 sym_op->m_src = ut_params->ibuf;
5720 sym_op->cipher.data.offset = 0;
5721 sym_op->cipher.data.length = QUOTE_512_BYTES;
5723 /* Process crypto operation */
5724 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5726 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5728 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5729 "crypto operation processing failed");
5732 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5733 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5736 "Ciphertext data not as expected");
5738 return TEST_SUCCESS;
5742 test_null_auth_only_operation(void)
5744 struct crypto_testsuite_params *ts_params = &testsuite_params;
5745 struct crypto_unittest_params *ut_params = &unittest_params;
5747 /* Generate test mbuf data and space for digest */
5748 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5749 catch_22_quote, QUOTE_512_BYTES, 0);
5751 /* Setup HMAC Parameters */
5752 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5753 ut_params->auth_xform.next = NULL;
5755 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5756 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5758 /* Create Crypto session*/
5759 ut_params->sess = rte_cryptodev_sym_session_create(
5760 ts_params->valid_devs[0], &ut_params->auth_xform);
5761 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5763 /* Generate Crypto op data structure */
5764 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5765 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5766 TEST_ASSERT_NOT_NULL(ut_params->op,
5767 "Failed to allocate symmetric crypto operation struct");
5769 /* Set crypto operation data parameters */
5770 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5772 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5774 sym_op->m_src = ut_params->ibuf;
5776 sym_op->auth.data.offset = 0;
5777 sym_op->auth.data.length = QUOTE_512_BYTES;
5779 /* Process crypto operation */
5780 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5782 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5784 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5785 "crypto operation processing failed");
5787 return TEST_SUCCESS;
5791 test_null_cipher_auth_operation(void)
5793 struct crypto_testsuite_params *ts_params = &testsuite_params;
5794 struct crypto_unittest_params *ut_params = &unittest_params;
5796 /* Generate test mbuf data and space for digest */
5797 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5798 catch_22_quote, QUOTE_512_BYTES, 0);
5800 /* Setup Cipher Parameters */
5801 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5802 ut_params->cipher_xform.next = &ut_params->auth_xform;
5804 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5805 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5807 /* Setup HMAC Parameters */
5808 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5809 ut_params->auth_xform.next = NULL;
5811 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5812 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5814 /* Create Crypto session*/
5815 ut_params->sess = rte_cryptodev_sym_session_create(
5816 ts_params->valid_devs[0], &ut_params->cipher_xform);
5817 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5819 /* Generate Crypto op data structure */
5820 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5821 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5822 TEST_ASSERT_NOT_NULL(ut_params->op,
5823 "Failed to allocate symmetric crypto operation struct");
5825 /* Set crypto operation data parameters */
5826 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5828 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5830 sym_op->m_src = ut_params->ibuf;
5832 sym_op->cipher.data.offset = 0;
5833 sym_op->cipher.data.length = QUOTE_512_BYTES;
5835 sym_op->auth.data.offset = 0;
5836 sym_op->auth.data.length = QUOTE_512_BYTES;
5838 /* Process crypto operation */
5839 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5841 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5843 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5844 "crypto operation processing failed");
5847 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5848 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5851 "Ciphertext data not as expected");
5853 return TEST_SUCCESS;
5857 test_null_auth_cipher_operation(void)
5859 struct crypto_testsuite_params *ts_params = &testsuite_params;
5860 struct crypto_unittest_params *ut_params = &unittest_params;
5862 /* Generate test mbuf data and space for digest */
5863 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5864 catch_22_quote, QUOTE_512_BYTES, 0);
5866 /* Setup Cipher Parameters */
5867 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5868 ut_params->cipher_xform.next = NULL;
5870 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5871 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5873 /* Setup HMAC Parameters */
5874 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5875 ut_params->auth_xform.next = &ut_params->cipher_xform;
5877 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5878 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5880 /* Create Crypto session*/
5881 ut_params->sess = rte_cryptodev_sym_session_create(
5882 ts_params->valid_devs[0], &ut_params->cipher_xform);
5883 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5885 /* Generate Crypto op data structure */
5886 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5887 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5888 TEST_ASSERT_NOT_NULL(ut_params->op,
5889 "Failed to allocate symmetric crypto operation struct");
5891 /* Set crypto operation data parameters */
5892 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5894 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5896 sym_op->m_src = ut_params->ibuf;
5898 sym_op->cipher.data.offset = 0;
5899 sym_op->cipher.data.length = QUOTE_512_BYTES;
5901 sym_op->auth.data.offset = 0;
5902 sym_op->auth.data.length = QUOTE_512_BYTES;
5904 /* Process crypto operation */
5905 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5907 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5909 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5910 "crypto operation processing failed");
5913 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5914 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5917 "Ciphertext data not as expected");
5919 return TEST_SUCCESS;
5924 test_null_invalid_operation(void)
5926 struct crypto_testsuite_params *ts_params = &testsuite_params;
5927 struct crypto_unittest_params *ut_params = &unittest_params;
5929 /* Setup Cipher Parameters */
5930 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5931 ut_params->cipher_xform.next = NULL;
5933 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
5934 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5936 /* Create Crypto session*/
5937 ut_params->sess = rte_cryptodev_sym_session_create(
5938 ts_params->valid_devs[0], &ut_params->cipher_xform);
5939 TEST_ASSERT_NULL(ut_params->sess,
5940 "Session creation succeeded unexpectedly");
5943 /* Setup HMAC Parameters */
5944 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5945 ut_params->auth_xform.next = NULL;
5947 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
5948 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5950 /* Create Crypto session*/
5951 ut_params->sess = rte_cryptodev_sym_session_create(
5952 ts_params->valid_devs[0], &ut_params->auth_xform);
5953 TEST_ASSERT_NULL(ut_params->sess,
5954 "Session creation succeeded unexpectedly");
5956 return TEST_SUCCESS;
5960 #define NULL_BURST_LENGTH (32)
5963 test_null_burst_operation(void)
5965 struct crypto_testsuite_params *ts_params = &testsuite_params;
5966 struct crypto_unittest_params *ut_params = &unittest_params;
5968 unsigned i, burst_len = NULL_BURST_LENGTH;
5970 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
5971 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
5973 /* Setup Cipher Parameters */
5974 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5975 ut_params->cipher_xform.next = &ut_params->auth_xform;
5977 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5978 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5980 /* Setup HMAC Parameters */
5981 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5982 ut_params->auth_xform.next = NULL;
5984 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5985 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5987 /* Create Crypto session*/
5988 ut_params->sess = rte_cryptodev_sym_session_create(
5989 ts_params->valid_devs[0], &ut_params->cipher_xform);
5990 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5992 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
5993 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
5994 burst_len, "failed to generate burst of crypto ops");
5996 /* Generate an operation for each mbuf in burst */
5997 for (i = 0; i < burst_len; i++) {
5998 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6000 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
6002 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
6006 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
6008 burst[i]->sym->m_src = m;
6011 /* Process crypto operation */
6012 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
6013 0, burst, burst_len),
6015 "Error enqueuing burst");
6017 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
6018 0, burst_dequeued, burst_len),
6020 "Error dequeuing burst");
6023 for (i = 0; i < burst_len; i++) {
6025 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
6026 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
6028 "data not as expected");
6030 rte_pktmbuf_free(burst[i]->sym->m_src);
6031 rte_crypto_op_free(burst[i]);
6034 return TEST_SUCCESS;
6038 generate_gmac_large_plaintext(uint8_t *data)
6042 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
6043 memcpy(&data[i], &data[0], 32);
6047 create_gmac_operation(enum rte_crypto_auth_operation op,
6048 const struct gmac_test_data *tdata)
6050 struct crypto_testsuite_params *ts_params = &testsuite_params;
6051 struct crypto_unittest_params *ut_params = &unittest_params;
6052 struct rte_crypto_sym_op *sym_op;
6054 unsigned iv_pad_len;
6055 unsigned aad_pad_len;
6057 iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
6058 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
6061 * Runtime generate the large plain text instead of use hard code
6062 * plain text vector. It is done to avoid create huge source file
6063 * with the test vector.
6065 if (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)
6066 generate_gmac_large_plaintext(tdata->aad.data);
6068 /* Generate Crypto op data structure */
6069 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6070 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6071 TEST_ASSERT_NOT_NULL(ut_params->op,
6072 "Failed to allocate symmetric crypto operation struct");
6074 sym_op = ut_params->op->sym;
6075 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6077 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
6078 "no room to append aad");
6080 sym_op->auth.aad.length = tdata->aad.len;
6081 sym_op->auth.aad.phys_addr =
6082 rte_pktmbuf_mtophys(ut_params->ibuf);
6083 memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
6085 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6086 ut_params->ibuf, tdata->gmac_tag.len);
6087 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6088 "no room to append digest");
6090 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6091 ut_params->ibuf, aad_pad_len);
6092 sym_op->auth.digest.length = tdata->gmac_tag.len;
6094 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
6095 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
6096 tdata->gmac_tag.len);
6097 TEST_HEXDUMP(stdout, "digest:",
6098 sym_op->auth.digest.data,
6099 sym_op->auth.digest.length);
6102 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6103 ut_params->ibuf, iv_pad_len);
6104 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6106 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
6107 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6108 sym_op->cipher.iv.length = tdata->iv.len;
6110 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
6112 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
6114 sym_op->cipher.data.length = 0;
6115 sym_op->cipher.data.offset = 0;
6117 sym_op->auth.data.offset = 0;
6118 sym_op->auth.data.length = 0;
6123 static int create_gmac_session(uint8_t dev_id,
6124 enum rte_crypto_cipher_operation op,
6125 const struct gmac_test_data *tdata,
6126 enum rte_crypto_auth_operation auth_op)
6128 uint8_t cipher_key[tdata->key.len];
6130 struct crypto_unittest_params *ut_params = &unittest_params;
6132 memcpy(cipher_key, tdata->key.data, tdata->key.len);
6134 /* For GMAC we setup cipher parameters */
6135 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6136 ut_params->cipher_xform.next = NULL;
6137 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
6138 ut_params->cipher_xform.cipher.op = op;
6139 ut_params->cipher_xform.cipher.key.data = cipher_key;
6140 ut_params->cipher_xform.cipher.key.length = tdata->key.len;
6142 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6143 ut_params->auth_xform.next = NULL;
6145 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
6146 ut_params->auth_xform.auth.op = auth_op;
6147 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
6148 ut_params->auth_xform.auth.add_auth_data_length = 0;
6149 ut_params->auth_xform.auth.key.length = 0;
6150 ut_params->auth_xform.auth.key.data = NULL;
6152 ut_params->cipher_xform.next = &ut_params->auth_xform;
6154 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6155 &ut_params->cipher_xform);
6157 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6163 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
6165 struct crypto_testsuite_params *ts_params = &testsuite_params;
6166 struct crypto_unittest_params *ut_params = &unittest_params;
6170 uint8_t *auth_tag, *p;
6171 uint16_t aad_pad_len;
6173 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6174 "No GMAC length in the source data");
6176 retval = create_gmac_session(ts_params->valid_devs[0],
6177 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6178 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
6183 if (tdata->aad.len > MBUF_SIZE)
6184 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6186 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6187 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6188 "Failed to allocate input buffer in mempool");
6190 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6191 rte_pktmbuf_tailroom(ut_params->ibuf));
6193 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
6195 p = rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *);
6197 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
6203 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6205 ut_params->op->sym->m_src = ut_params->ibuf;
6207 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6208 ut_params->op), "failed to process sym crypto op");
6210 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6211 "crypto op processing failed");
6213 if (ut_params->op->sym->m_dst) {
6214 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
6215 uint8_t *, aad_pad_len);
6217 auth_tag = p + aad_pad_len;
6220 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
6222 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6224 tdata->gmac_tag.data,
6225 tdata->gmac_tag.len,
6226 "GMAC Generated auth tag not as expected");
6232 test_AES_GMAC_authentication_test_case_1(void)
6234 return test_AES_GMAC_authentication(&gmac_test_case_1);
6238 test_AES_GMAC_authentication_test_case_2(void)
6240 return test_AES_GMAC_authentication(&gmac_test_case_2);
6244 test_AES_GMAC_authentication_test_case_3(void)
6246 return test_AES_GMAC_authentication(&gmac_test_case_3);
6250 test_AES_GMAC_authentication_test_case_4(void)
6252 return test_AES_GMAC_authentication(&gmac_test_case_4);
6256 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
6258 struct crypto_testsuite_params *ts_params = &testsuite_params;
6259 struct crypto_unittest_params *ut_params = &unittest_params;
6262 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6263 "No GMAC length in the source data");
6265 retval = create_gmac_session(ts_params->valid_devs[0],
6266 RTE_CRYPTO_CIPHER_OP_DECRYPT,
6267 tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
6272 if (tdata->aad.len > MBUF_SIZE)
6273 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6275 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6276 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6277 "Failed to allocate input buffer in mempool");
6279 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6280 rte_pktmbuf_tailroom(ut_params->ibuf));
6282 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
6288 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6290 ut_params->op->sym->m_src = ut_params->ibuf;
6292 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6293 ut_params->op), "failed to process sym crypto op");
6295 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6296 "crypto op processing failed");
6303 test_AES_GMAC_authentication_verify_test_case_1(void)
6305 return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
6309 test_AES_GMAC_authentication_verify_test_case_2(void)
6311 return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
6315 test_AES_GMAC_authentication_verify_test_case_3(void)
6317 return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
6321 test_AES_GMAC_authentication_verify_test_case_4(void)
6323 return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
6326 struct test_crypto_vector {
6327 enum rte_crypto_cipher_algorithm crypto_algo;
6340 const uint8_t *data;
6345 const uint8_t *data;
6349 enum rte_crypto_auth_algorithm auth_algo;
6357 const uint8_t *data;
6367 static const struct test_crypto_vector
6368 hmac_sha1_test_crypto_vector = {
6369 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6371 .data = plaintext_hash,
6376 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6377 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6378 0xDE, 0xF4, 0xDE, 0xAD
6384 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
6385 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
6386 0x3F, 0x91, 0x64, 0x59
6392 static const struct test_crypto_vector
6393 aes128_gmac_test_vector = {
6394 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
6395 .crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,
6397 .data = plaintext_hash,
6402 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6403 0x08, 0x09, 0x0A, 0x0B
6409 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6410 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
6416 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
6417 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
6423 static const struct test_crypto_vector
6424 aes128cbc_hmac_sha1_test_vector = {
6425 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
6428 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
6429 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
6435 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6436 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
6441 .data = plaintext_hash,
6445 .data = ciphertext512_aes128cbc,
6448 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6451 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6452 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6453 0xDE, 0xF4, 0xDE, 0xAD
6459 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
6460 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6461 0x18, 0x8C, 0x1D, 0x32
6468 data_corruption(uint8_t *data)
6474 tag_corruption(uint8_t *data, unsigned int tag_offset)
6476 data[tag_offset] += 1;
6480 create_auth_session(struct crypto_unittest_params *ut_params,
6482 const struct test_crypto_vector *reference,
6483 enum rte_crypto_auth_operation auth_op)
6485 uint8_t auth_key[reference->auth_key.len + 1];
6487 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6489 /* Setup Authentication Parameters */
6490 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6491 ut_params->auth_xform.auth.op = auth_op;
6492 ut_params->auth_xform.next = NULL;
6493 ut_params->auth_xform.auth.algo = reference->auth_algo;
6494 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6495 ut_params->auth_xform.auth.key.data = auth_key;
6496 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6497 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
6499 /* Create Crypto session*/
6500 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6501 &ut_params->auth_xform);
6503 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6509 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
6511 const struct test_crypto_vector *reference,
6512 enum rte_crypto_auth_operation auth_op,
6513 enum rte_crypto_cipher_operation cipher_op)
6515 uint8_t cipher_key[reference->cipher_key.len + 1];
6516 uint8_t auth_key[reference->auth_key.len + 1];
6518 memcpy(cipher_key, reference->cipher_key.data,
6519 reference->cipher_key.len);
6520 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6522 /* Setup Authentication Parameters */
6523 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6524 ut_params->auth_xform.auth.op = auth_op;
6525 ut_params->auth_xform.next = &ut_params->cipher_xform;
6526 ut_params->auth_xform.auth.algo = reference->auth_algo;
6527 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6528 ut_params->auth_xform.auth.key.data = auth_key;
6529 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6530 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
6532 /* Setup Cipher Parameters */
6533 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6534 ut_params->cipher_xform.next = NULL;
6535 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
6536 ut_params->cipher_xform.cipher.op = cipher_op;
6537 ut_params->cipher_xform.cipher.key.data = cipher_key;
6538 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
6540 /* Create Crypto session*/
6541 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6542 &ut_params->auth_xform);
6544 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6550 create_auth_operation(struct crypto_testsuite_params *ts_params,
6551 struct crypto_unittest_params *ut_params,
6552 const struct test_crypto_vector *reference,
6553 unsigned int auth_generate)
6555 /* Generate Crypto op data structure */
6556 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6557 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6558 TEST_ASSERT_NOT_NULL(ut_params->op,
6559 "Failed to allocate pktmbuf offload");
6561 /* Set crypto operation data parameters */
6562 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6564 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6566 /* set crypto operation source mbuf */
6567 sym_op->m_src = ut_params->ibuf;
6570 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6571 ut_params->ibuf, reference->digest.len);
6573 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6574 "no room to append auth tag");
6576 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6577 ut_params->ibuf, reference->plaintext.len);
6578 sym_op->auth.digest.length = reference->digest.len;
6581 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6583 memcpy(sym_op->auth.digest.data,
6584 reference->digest.data,
6585 reference->digest.len);
6587 TEST_HEXDUMP(stdout, "digest:",
6588 sym_op->auth.digest.data,
6589 sym_op->auth.digest.length);
6591 sym_op->auth.data.length = reference->plaintext.len;
6592 sym_op->auth.data.offset = 0;
6598 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
6599 struct crypto_unittest_params *ut_params,
6600 const struct test_crypto_vector *reference,
6601 unsigned int auth_generate)
6603 /* Generate Crypto op data structure */
6604 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6605 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6606 TEST_ASSERT_NOT_NULL(ut_params->op,
6607 "Failed to allocate pktmbuf offload");
6609 /* Set crypto operation data parameters */
6610 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6612 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6614 /* set crypto operation source mbuf */
6615 sym_op->m_src = ut_params->ibuf;
6618 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6619 reference->aad.len);
6620 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, "no room to append AAD");
6621 memcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);
6623 TEST_HEXDUMP(stdout, "AAD:", sym_op->auth.aad.data, reference->aad.len);
6625 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6626 sym_op->auth.aad.length = reference->aad.len;
6629 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6630 ut_params->ibuf, reference->digest.len);
6632 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6633 "no room to append auth tag");
6635 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6636 ut_params->ibuf, reference->ciphertext.len);
6637 sym_op->auth.digest.length = reference->digest.len;
6640 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6642 memcpy(sym_op->auth.digest.data,
6643 reference->digest.data,
6644 reference->digest.len);
6646 TEST_HEXDUMP(stdout, "digest:",
6647 sym_op->auth.digest.data,
6648 sym_op->auth.digest.length);
6650 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6651 ut_params->ibuf, reference->iv.len);
6652 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6654 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6655 sym_op->cipher.iv.length = reference->iv.len;
6657 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
6659 sym_op->cipher.data.length = 0;
6660 sym_op->cipher.data.offset = 0;
6662 sym_op->auth.data.length = 0;
6663 sym_op->auth.data.offset = 0;
6669 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
6670 struct crypto_unittest_params *ut_params,
6671 const struct test_crypto_vector *reference,
6672 unsigned int auth_generate)
6674 /* Generate Crypto op data structure */
6675 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6676 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6677 TEST_ASSERT_NOT_NULL(ut_params->op,
6678 "Failed to allocate pktmbuf offload");
6680 /* Set crypto operation data parameters */
6681 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6683 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6685 /* set crypto operation source mbuf */
6686 sym_op->m_src = ut_params->ibuf;
6689 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6690 ut_params->ibuf, reference->digest.len);
6692 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6693 "no room to append auth tag");
6695 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6696 ut_params->ibuf, reference->ciphertext.len);
6697 sym_op->auth.digest.length = reference->digest.len;
6700 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6702 memcpy(sym_op->auth.digest.data,
6703 reference->digest.data,
6704 reference->digest.len);
6706 TEST_HEXDUMP(stdout, "digest:",
6707 sym_op->auth.digest.data,
6708 sym_op->auth.digest.length);
6710 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6711 ut_params->ibuf, reference->iv.len);
6712 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6714 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6715 sym_op->cipher.iv.length = reference->iv.len;
6717 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
6719 sym_op->cipher.data.length = reference->ciphertext.len;
6720 sym_op->cipher.data.offset = reference->iv.len;
6722 sym_op->auth.data.length = reference->ciphertext.len;
6723 sym_op->auth.data.offset = reference->iv.len;
6729 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
6730 struct crypto_unittest_params *ut_params,
6731 const struct test_crypto_vector *reference)
6733 return create_auth_operation(ts_params, ut_params, reference, 0);
6737 create_auth_verify_GMAC_operation(
6738 struct crypto_testsuite_params *ts_params,
6739 struct crypto_unittest_params *ut_params,
6740 const struct test_crypto_vector *reference)
6742 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
6746 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
6747 struct crypto_unittest_params *ut_params,
6748 const struct test_crypto_vector *reference)
6750 return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
6754 test_authentication_verify_fail_when_data_corruption(
6755 struct crypto_testsuite_params *ts_params,
6756 struct crypto_unittest_params *ut_params,
6757 const struct test_crypto_vector *reference,
6758 unsigned int data_corrupted)
6764 /* Create session */
6765 retval = create_auth_session(ut_params,
6766 ts_params->valid_devs[0],
6768 RTE_CRYPTO_AUTH_OP_VERIFY);
6772 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6773 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6774 "Failed to allocate input buffer in mempool");
6776 /* clear mbuf payload */
6777 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6778 rte_pktmbuf_tailroom(ut_params->ibuf));
6780 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6781 reference->plaintext.len);
6782 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
6783 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
6785 TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
6787 /* Create operation */
6788 retval = create_auth_verify_operation(ts_params, ut_params, reference);
6794 data_corruption(plaintext);
6796 tag_corruption(plaintext, reference->plaintext.len);
6798 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6800 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6801 TEST_ASSERT_EQUAL(ut_params->op->status,
6802 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6803 "authentication not failed");
6805 ut_params->obuf = ut_params->op->sym->m_src;
6806 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6812 test_authentication_verify_GMAC_fail_when_corruption(
6813 struct crypto_testsuite_params *ts_params,
6814 struct crypto_unittest_params *ut_params,
6815 const struct test_crypto_vector *reference,
6816 unsigned int data_corrupted)
6820 /* Create session */
6821 retval = create_auth_cipher_session(ut_params,
6822 ts_params->valid_devs[0],
6824 RTE_CRYPTO_AUTH_OP_VERIFY,
6825 RTE_CRYPTO_CIPHER_OP_DECRYPT);
6829 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6830 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6831 "Failed to allocate input buffer in mempool");
6833 /* clear mbuf payload */
6834 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6835 rte_pktmbuf_tailroom(ut_params->ibuf));
6837 /* Create operation */
6838 retval = create_auth_verify_GMAC_operation(ts_params,
6846 data_corruption(ut_params->op->sym->auth.aad.data);
6848 tag_corruption(ut_params->op->sym->auth.aad.data,
6849 reference->aad.len);
6851 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6853 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6854 TEST_ASSERT_EQUAL(ut_params->op->status,
6855 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6856 "authentication not failed");
6858 ut_params->obuf = ut_params->op->sym->m_src;
6859 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6865 test_authenticated_decryption_fail_when_corruption(
6866 struct crypto_testsuite_params *ts_params,
6867 struct crypto_unittest_params *ut_params,
6868 const struct test_crypto_vector *reference,
6869 unsigned int data_corrupted)
6873 uint8_t *ciphertext;
6875 /* Create session */
6876 retval = create_auth_cipher_session(ut_params,
6877 ts_params->valid_devs[0],
6879 RTE_CRYPTO_AUTH_OP_VERIFY,
6880 RTE_CRYPTO_CIPHER_OP_DECRYPT);
6884 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6885 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6886 "Failed to allocate input buffer in mempool");
6888 /* clear mbuf payload */
6889 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6890 rte_pktmbuf_tailroom(ut_params->ibuf));
6892 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6893 reference->ciphertext.len);
6894 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
6895 memcpy(ciphertext, reference->ciphertext.data,
6896 reference->ciphertext.len);
6898 /* Create operation */
6899 retval = create_cipher_auth_verify_operation(ts_params,
6907 data_corruption(ciphertext);
6909 tag_corruption(ciphertext, reference->ciphertext.len);
6911 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6914 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6915 TEST_ASSERT_EQUAL(ut_params->op->status,
6916 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6917 "authentication not failed");
6919 ut_params->obuf = ut_params->op->sym->m_src;
6920 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6926 create_gcm_operation_SGL(enum rte_crypto_cipher_operation op,
6927 const struct gcm_test_data *tdata,
6928 void *digest_mem, uint64_t digest_phys)
6930 struct crypto_testsuite_params *ts_params = &testsuite_params;
6931 struct crypto_unittest_params *ut_params = &unittest_params;
6933 const unsigned int auth_tag_len = tdata->auth_tag.len;
6934 const unsigned int iv_len = tdata->iv.len;
6935 const unsigned int aad_len = tdata->aad.len;
6937 unsigned int iv_pad_len = 0;
6939 /* Generate Crypto op data structure */
6940 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6941 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6942 TEST_ASSERT_NOT_NULL(ut_params->op,
6943 "Failed to allocate symmetric crypto operation struct");
6945 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6947 sym_op->auth.digest.data = digest_mem;
6949 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6950 "no room to append digest");
6952 sym_op->auth.digest.phys_addr = digest_phys;
6953 sym_op->auth.digest.length = auth_tag_len;
6955 if (op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
6956 rte_memcpy(sym_op->auth.digest.data, tdata->auth_tag.data,
6958 TEST_HEXDUMP(stdout, "digest:",
6959 sym_op->auth.digest.data,
6960 sym_op->auth.digest.length);
6963 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
6965 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6966 ut_params->ibuf, iv_pad_len);
6968 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data,
6969 "no room to prepend iv");
6971 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
6972 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6973 sym_op->cipher.iv.length = iv_len;
6975 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, iv_pad_len);
6977 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
6978 ut_params->ibuf, aad_len);
6979 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
6980 "no room to prepend aad");
6981 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
6983 sym_op->auth.aad.length = aad_len;
6985 memset(sym_op->auth.aad.data, 0, aad_len);
6986 rte_memcpy(sym_op->auth.aad.data, tdata->aad.data, aad_len);
6988 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
6989 TEST_HEXDUMP(stdout, "aad:",
6990 sym_op->auth.aad.data, aad_len);
6992 sym_op->cipher.data.length = tdata->plaintext.len;
6993 sym_op->cipher.data.offset = aad_len + iv_pad_len;
6995 sym_op->auth.data.offset = aad_len + iv_pad_len;
6996 sym_op->auth.data.length = tdata->plaintext.len;
7001 #define SGL_MAX_NO 16
7004 test_AES_GCM_authenticated_encryption_SGL(const struct gcm_test_data *tdata,
7005 const int oop, uint32_t fragsz, uint32_t fragsz_oop)
7007 struct crypto_testsuite_params *ts_params = &testsuite_params;
7008 struct crypto_unittest_params *ut_params = &unittest_params;
7009 struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
7012 int to_trn_tbl[SGL_MAX_NO];
7014 unsigned int trn_data = 0;
7015 uint8_t *plaintext, *ciphertext, *auth_tag;
7017 if (fragsz > tdata->plaintext.len)
7018 fragsz = tdata->plaintext.len;
7020 uint16_t plaintext_len = fragsz;
7021 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
7023 if (fragsz_oop > tdata->plaintext.len)
7024 frag_size_oop = tdata->plaintext.len;
7027 void *digest_mem = NULL;
7029 uint32_t prepend_len = ALIGN_POW2_ROUNDUP(tdata->iv.len, 16)
7032 if (tdata->plaintext.len % fragsz != 0) {
7033 if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
7036 if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
7041 * For out-op-place we need to alloc another mbuf
7044 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7045 rte_pktmbuf_append(ut_params->obuf,
7046 frag_size_oop + prepend_len);
7047 buf_oop = ut_params->obuf;
7050 /* Create GCM session */
7051 retval = create_gcm_session(ts_params->valid_devs[0],
7052 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
7053 tdata->key.data, tdata->key.len,
7054 tdata->aad.len, tdata->auth_tag.len,
7055 RTE_CRYPTO_AUTH_OP_GENERATE);
7059 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7061 /* clear mbuf payload */
7062 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7063 rte_pktmbuf_tailroom(ut_params->ibuf));
7065 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7068 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
7070 trn_data += plaintext_len;
7072 buf = ut_params->ibuf;
7075 * Loop until no more fragments
7078 while (trn_data < tdata->plaintext.len) {
7080 to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
7081 (tdata->plaintext.len - trn_data) : fragsz;
7083 to_trn_tbl[ecx++] = to_trn;
7085 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7088 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
7089 rte_pktmbuf_tailroom(buf));
7092 if (oop && !fragsz_oop) {
7093 buf_last_oop = buf_oop->next =
7094 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7095 buf_oop = buf_oop->next;
7096 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7097 0, rte_pktmbuf_tailroom(buf_oop));
7098 rte_pktmbuf_append(buf_oop, to_trn);
7101 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
7104 memcpy(plaintext, tdata->plaintext.data + trn_data,
7107 if (trn_data == tdata->plaintext.len) {
7110 digest_mem = rte_pktmbuf_append(buf_oop,
7111 tdata->auth_tag.len);
7113 digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
7114 tdata->auth_tag.len);
7118 uint64_t digest_phys = 0;
7120 ut_params->ibuf->nb_segs = segs;
7123 if (fragsz_oop && oop) {
7127 if (frag_size_oop == tdata->plaintext.len) {
7128 digest_mem = rte_pktmbuf_append(ut_params->obuf,
7129 tdata->auth_tag.len);
7131 digest_phys = rte_pktmbuf_mtophys_offset(
7133 tdata->plaintext.len + prepend_len);
7136 trn_data = frag_size_oop;
7137 while (trn_data < tdata->plaintext.len) {
7140 (tdata->plaintext.len - trn_data <
7142 (tdata->plaintext.len - trn_data) :
7145 to_trn_tbl[ecx++] = to_trn;
7147 buf_last_oop = buf_oop->next =
7148 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7149 buf_oop = buf_oop->next;
7150 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7151 0, rte_pktmbuf_tailroom(buf_oop));
7152 rte_pktmbuf_append(buf_oop, to_trn);
7156 if (trn_data == tdata->plaintext.len) {
7157 digest_mem = rte_pktmbuf_append(buf_oop,
7158 tdata->auth_tag.len);
7162 ut_params->obuf->nb_segs = segs;
7166 * Place digest at the end of the last buffer
7169 digest_phys = rte_pktmbuf_mtophys(buf) + to_trn;
7170 if (oop && buf_last_oop)
7171 digest_phys = rte_pktmbuf_mtophys(buf_last_oop) + to_trn;
7173 if (!digest_mem && !oop) {
7174 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7175 + tdata->auth_tag.len);
7176 digest_phys = rte_pktmbuf_mtophys_offset(ut_params->ibuf,
7177 tdata->plaintext.len);
7180 /* Create GCM opertaion */
7181 retval = create_gcm_operation_SGL(RTE_CRYPTO_CIPHER_OP_ENCRYPT,
7182 tdata, digest_mem, digest_phys);
7187 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7189 ut_params->op->sym->m_src = ut_params->ibuf;
7191 ut_params->op->sym->m_dst = ut_params->obuf;
7193 /* Process crypto operation */
7194 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7195 ut_params->op), "failed to process sym crypto op");
7197 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7198 "crypto op processing failed");
7201 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7202 uint8_t *, prepend_len);
7204 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7205 uint8_t *, prepend_len);
7209 fragsz = fragsz_oop;
7211 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7213 tdata->ciphertext.data,
7215 "GCM Ciphertext data not as expected");
7217 buf = ut_params->op->sym->m_src->next;
7219 buf = ut_params->op->sym->m_dst->next;
7221 unsigned int off = fragsz;
7225 ciphertext = rte_pktmbuf_mtod(buf,
7228 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7230 tdata->ciphertext.data + off,
7232 "GCM Ciphertext data not as expected");
7234 off += to_trn_tbl[ecx++];
7238 auth_tag = digest_mem;
7239 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7241 tdata->auth_tag.data,
7242 tdata->auth_tag.len,
7243 "GCM Generated auth tag not as expected");
7249 #define OUT_OF_PLACE 1
7252 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
7254 return test_AES_GCM_authenticated_encryption_SGL(
7255 &gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
7259 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
7261 return test_AES_GCM_authenticated_encryption_SGL(
7262 &gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
7266 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
7268 return test_AES_GCM_authenticated_encryption_SGL(
7269 &gcm_test_case_8, OUT_OF_PLACE, 400,
7270 gcm_test_case_8.plaintext.len);
7274 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
7277 return test_AES_GCM_authenticated_encryption_SGL(
7278 &gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
7282 test_authentication_verify_fail_when_data_corrupted(
7283 struct crypto_testsuite_params *ts_params,
7284 struct crypto_unittest_params *ut_params,
7285 const struct test_crypto_vector *reference)
7287 return test_authentication_verify_fail_when_data_corruption(
7288 ts_params, ut_params, reference, 1);
7292 test_authentication_verify_fail_when_tag_corrupted(
7293 struct crypto_testsuite_params *ts_params,
7294 struct crypto_unittest_params *ut_params,
7295 const struct test_crypto_vector *reference)
7297 return test_authentication_verify_fail_when_data_corruption(
7298 ts_params, ut_params, reference, 0);
7302 test_authentication_verify_GMAC_fail_when_data_corrupted(
7303 struct crypto_testsuite_params *ts_params,
7304 struct crypto_unittest_params *ut_params,
7305 const struct test_crypto_vector *reference)
7307 return test_authentication_verify_GMAC_fail_when_corruption(
7308 ts_params, ut_params, reference, 1);
7312 test_authentication_verify_GMAC_fail_when_tag_corrupted(
7313 struct crypto_testsuite_params *ts_params,
7314 struct crypto_unittest_params *ut_params,
7315 const struct test_crypto_vector *reference)
7317 return test_authentication_verify_GMAC_fail_when_corruption(
7318 ts_params, ut_params, reference, 0);
7322 test_authenticated_decryption_fail_when_data_corrupted(
7323 struct crypto_testsuite_params *ts_params,
7324 struct crypto_unittest_params *ut_params,
7325 const struct test_crypto_vector *reference)
7327 return test_authenticated_decryption_fail_when_corruption(
7328 ts_params, ut_params, reference, 1);
7332 test_authenticated_decryption_fail_when_tag_corrupted(
7333 struct crypto_testsuite_params *ts_params,
7334 struct crypto_unittest_params *ut_params,
7335 const struct test_crypto_vector *reference)
7337 return test_authenticated_decryption_fail_when_corruption(
7338 ts_params, ut_params, reference, 0);
7342 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
7344 return test_authentication_verify_fail_when_data_corrupted(
7345 &testsuite_params, &unittest_params,
7346 &hmac_sha1_test_crypto_vector);
7350 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
7352 return test_authentication_verify_fail_when_tag_corrupted(
7353 &testsuite_params, &unittest_params,
7354 &hmac_sha1_test_crypto_vector);
7358 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
7360 return test_authentication_verify_GMAC_fail_when_data_corrupted(
7361 &testsuite_params, &unittest_params,
7362 &aes128_gmac_test_vector);
7366 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
7368 return test_authentication_verify_GMAC_fail_when_tag_corrupted(
7369 &testsuite_params, &unittest_params,
7370 &aes128_gmac_test_vector);
7374 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
7376 return test_authenticated_decryption_fail_when_data_corrupted(
7379 &aes128cbc_hmac_sha1_test_vector);
7383 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
7385 return test_authenticated_decryption_fail_when_tag_corrupted(
7388 &aes128cbc_hmac_sha1_test_vector);
7391 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
7393 /* global AESNI slave IDs for the scheduler test */
7394 uint8_t aesni_ids[2];
7397 test_scheduler_attach_slave_op(void)
7399 struct crypto_testsuite_params *ts_params = &testsuite_params;
7400 uint8_t sched_id = ts_params->valid_devs[0];
7401 uint32_t nb_devs, i, nb_devs_attached = 0;
7404 /* create 2 AESNI_MB if necessary */
7405 nb_devs = rte_cryptodev_count_devtype(
7406 RTE_CRYPTODEV_AESNI_MB_PMD);
7408 for (i = nb_devs; i < 2; i++) {
7409 ret = rte_eal_vdev_init(
7410 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
7412 TEST_ASSERT(ret == 0,
7413 "Failed to create instance %u of"
7415 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7419 /* attach 2 AESNI_MB cdevs */
7420 for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
7422 struct rte_cryptodev_info info;
7424 rte_cryptodev_info_get(i, &info);
7425 if (info.dev_type != RTE_CRYPTODEV_AESNI_MB_PMD)
7428 ret = rte_cryptodev_scheduler_slave_attach(sched_id,
7431 TEST_ASSERT(ret == 0,
7432 "Failed to attach device %u of pmd : %s", i,
7433 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7435 aesni_ids[nb_devs_attached] = (uint8_t)i;
7444 test_scheduler_detach_slave_op(void)
7446 struct crypto_testsuite_params *ts_params = &testsuite_params;
7447 uint8_t sched_id = ts_params->valid_devs[0];
7451 for (i = 0; i < 2; i++) {
7452 ret = rte_cryptodev_scheduler_slave_detach(sched_id,
7454 TEST_ASSERT(ret == 0,
7455 "Failed to detach device %u", aesni_ids[i]);
7462 test_scheduler_mode_op(void)
7464 struct crypto_testsuite_params *ts_params = &testsuite_params;
7465 uint8_t sched_id = ts_params->valid_devs[0];
7466 struct rte_cryptodev_scheduler_ops op = {0};
7467 struct rte_cryptodev_scheduler dummy_scheduler = {
7468 .description = "dummy scheduler to test mode",
7469 .name = "dummy scheduler",
7470 .mode = CDEV_SCHED_MODE_USERDEFINED,
7475 /* set user defined mode */
7476 ret = rte_cryptodev_scheduler_load_user_scheduler(sched_id,
7478 TEST_ASSERT(ret == 0,
7479 "Failed to set cdev %u to user defined mode", sched_id);
7481 /* set round robin mode */
7482 ret = rte_crpytodev_scheduler_mode_set(sched_id,
7483 CDEV_SCHED_MODE_ROUNDROBIN);
7484 TEST_ASSERT(ret == 0,
7485 "Failed to set cdev %u to round-robin mode", sched_id);
7486 TEST_ASSERT(rte_crpytodev_scheduler_mode_get(sched_id) ==
7487 CDEV_SCHED_MODE_ROUNDROBIN, "Scheduling Mode "
7493 static struct unit_test_suite cryptodev_scheduler_testsuite = {
7494 .suite_name = "Crypto Device Scheduler Unit Test Suite",
7495 .setup = testsuite_setup,
7496 .teardown = testsuite_teardown,
7497 .unit_test_cases = {
7498 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
7499 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_op),
7500 TEST_CASE_ST(ut_setup, ut_teardown,
7501 test_AES_chain_scheduler_all),
7502 TEST_CASE_ST(ut_setup, ut_teardown,
7503 test_AES_cipheronly_scheduler_all),
7504 TEST_CASE_ST(ut_setup, ut_teardown,
7505 test_authonly_scheduler_all),
7506 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
7507 TEST_CASES_END() /**< NULL terminate unit test array */
7511 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
7513 static struct unit_test_suite cryptodev_qat_testsuite = {
7514 .suite_name = "Crypto QAT Unit Test Suite",
7515 .setup = testsuite_setup,
7516 .teardown = testsuite_teardown,
7517 .unit_test_cases = {
7518 TEST_CASE_ST(ut_setup, ut_teardown,
7519 test_device_configure_invalid_dev_id),
7520 TEST_CASE_ST(ut_setup, ut_teardown,
7521 test_device_configure_invalid_queue_pair_ids),
7522 TEST_CASE_ST(ut_setup, ut_teardown,
7523 test_queue_pair_descriptor_setup),
7524 TEST_CASE_ST(ut_setup, ut_teardown,
7525 test_multi_session),
7527 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
7528 TEST_CASE_ST(ut_setup, ut_teardown,
7529 test_AES_cipheronly_qat_all),
7530 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
7531 TEST_CASE_ST(ut_setup, ut_teardown,
7532 test_3DES_cipheronly_qat_all),
7533 TEST_CASE_ST(ut_setup, ut_teardown,
7534 test_DES_cipheronly_qat_all),
7535 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
7537 /** AES GCM Authenticated Encryption */
7538 TEST_CASE_ST(ut_setup, ut_teardown,
7539 test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
7540 TEST_CASE_ST(ut_setup, ut_teardown,
7541 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
7542 TEST_CASE_ST(ut_setup, ut_teardown,
7543 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
7544 TEST_CASE_ST(ut_setup, ut_teardown,
7545 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7546 TEST_CASE_ST(ut_setup, ut_teardown,
7547 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7548 TEST_CASE_ST(ut_setup, ut_teardown,
7549 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7550 TEST_CASE_ST(ut_setup, ut_teardown,
7551 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7552 TEST_CASE_ST(ut_setup, ut_teardown,
7553 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7554 TEST_CASE_ST(ut_setup, ut_teardown,
7555 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7556 TEST_CASE_ST(ut_setup, ut_teardown,
7557 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7559 /** AES GCM Authenticated Decryption */
7560 TEST_CASE_ST(ut_setup, ut_teardown,
7561 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7562 TEST_CASE_ST(ut_setup, ut_teardown,
7563 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7564 TEST_CASE_ST(ut_setup, ut_teardown,
7565 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7566 TEST_CASE_ST(ut_setup, ut_teardown,
7567 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7568 TEST_CASE_ST(ut_setup, ut_teardown,
7569 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7570 TEST_CASE_ST(ut_setup, ut_teardown,
7571 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7572 TEST_CASE_ST(ut_setup, ut_teardown,
7573 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7575 /** AES GMAC Authentication */
7576 TEST_CASE_ST(ut_setup, ut_teardown,
7577 test_AES_GMAC_authentication_test_case_1),
7578 TEST_CASE_ST(ut_setup, ut_teardown,
7579 test_AES_GMAC_authentication_verify_test_case_1),
7580 TEST_CASE_ST(ut_setup, ut_teardown,
7581 test_AES_GMAC_authentication_test_case_2),
7582 TEST_CASE_ST(ut_setup, ut_teardown,
7583 test_AES_GMAC_authentication_verify_test_case_2),
7584 TEST_CASE_ST(ut_setup, ut_teardown,
7585 test_AES_GMAC_authentication_test_case_3),
7586 TEST_CASE_ST(ut_setup, ut_teardown,
7587 test_AES_GMAC_authentication_verify_test_case_3),
7589 /** SNOW 3G encrypt only (UEA2) */
7590 TEST_CASE_ST(ut_setup, ut_teardown,
7591 test_snow3g_encryption_test_case_1),
7592 TEST_CASE_ST(ut_setup, ut_teardown,
7593 test_snow3g_encryption_test_case_2),
7594 TEST_CASE_ST(ut_setup, ut_teardown,
7595 test_snow3g_encryption_test_case_3),
7596 TEST_CASE_ST(ut_setup, ut_teardown,
7597 test_snow3g_encryption_test_case_4),
7598 TEST_CASE_ST(ut_setup, ut_teardown,
7599 test_snow3g_encryption_test_case_5),
7601 TEST_CASE_ST(ut_setup, ut_teardown,
7602 test_snow3g_encryption_test_case_1_oop),
7603 TEST_CASE_ST(ut_setup, ut_teardown,
7604 test_snow3g_decryption_test_case_1_oop),
7606 /** SNOW 3G decrypt only (UEA2) */
7607 TEST_CASE_ST(ut_setup, ut_teardown,
7608 test_snow3g_decryption_test_case_1),
7609 TEST_CASE_ST(ut_setup, ut_teardown,
7610 test_snow3g_decryption_test_case_2),
7611 TEST_CASE_ST(ut_setup, ut_teardown,
7612 test_snow3g_decryption_test_case_3),
7613 TEST_CASE_ST(ut_setup, ut_teardown,
7614 test_snow3g_decryption_test_case_4),
7615 TEST_CASE_ST(ut_setup, ut_teardown,
7616 test_snow3g_decryption_test_case_5),
7617 TEST_CASE_ST(ut_setup, ut_teardown,
7618 test_snow3g_hash_generate_test_case_1),
7619 TEST_CASE_ST(ut_setup, ut_teardown,
7620 test_snow3g_hash_generate_test_case_2),
7621 TEST_CASE_ST(ut_setup, ut_teardown,
7622 test_snow3g_hash_generate_test_case_3),
7623 TEST_CASE_ST(ut_setup, ut_teardown,
7624 test_snow3g_hash_verify_test_case_1),
7625 TEST_CASE_ST(ut_setup, ut_teardown,
7626 test_snow3g_hash_verify_test_case_2),
7627 TEST_CASE_ST(ut_setup, ut_teardown,
7628 test_snow3g_hash_verify_test_case_3),
7629 TEST_CASE_ST(ut_setup, ut_teardown,
7630 test_snow3g_cipher_auth_test_case_1),
7631 TEST_CASE_ST(ut_setup, ut_teardown,
7632 test_snow3g_auth_cipher_test_case_1),
7634 /** HMAC_MD5 Authentication */
7635 TEST_CASE_ST(ut_setup, ut_teardown,
7636 test_MD5_HMAC_generate_case_1),
7637 TEST_CASE_ST(ut_setup, ut_teardown,
7638 test_MD5_HMAC_verify_case_1),
7639 TEST_CASE_ST(ut_setup, ut_teardown,
7640 test_MD5_HMAC_generate_case_2),
7641 TEST_CASE_ST(ut_setup, ut_teardown,
7642 test_MD5_HMAC_verify_case_2),
7645 TEST_CASE_ST(ut_setup, ut_teardown,
7646 test_null_auth_only_operation),
7647 TEST_CASE_ST(ut_setup, ut_teardown,
7648 test_null_cipher_only_operation),
7649 TEST_CASE_ST(ut_setup, ut_teardown,
7650 test_null_cipher_auth_operation),
7651 TEST_CASE_ST(ut_setup, ut_teardown,
7652 test_null_auth_cipher_operation),
7654 TEST_CASE_ST(ut_setup, ut_teardown,
7655 test_kasumi_hash_generate_test_case_6),
7658 TEST_CASE_ST(ut_setup, ut_teardown,
7659 test_kasumi_encryption_test_case_1),
7660 TEST_CASE_ST(ut_setup, ut_teardown,
7661 test_kasumi_encryption_test_case_3),
7662 TEST_CASE_ST(ut_setup, ut_teardown,
7663 test_kasumi_auth_cipher_test_case_1),
7664 TEST_CASE_ST(ut_setup, ut_teardown,
7665 test_kasumi_cipher_auth_test_case_1),
7667 /** Negative tests */
7668 TEST_CASE_ST(ut_setup, ut_teardown,
7669 authentication_verify_HMAC_SHA1_fail_data_corrupt),
7670 TEST_CASE_ST(ut_setup, ut_teardown,
7671 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
7672 TEST_CASE_ST(ut_setup, ut_teardown,
7673 authentication_verify_AES128_GMAC_fail_data_corrupt),
7674 TEST_CASE_ST(ut_setup, ut_teardown,
7675 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7676 TEST_CASE_ST(ut_setup, ut_teardown,
7677 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
7678 TEST_CASE_ST(ut_setup, ut_teardown,
7679 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
7681 TEST_CASES_END() /**< NULL terminate unit test array */
7685 static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
7686 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
7687 .setup = testsuite_setup,
7688 .teardown = testsuite_teardown,
7689 .unit_test_cases = {
7690 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
7691 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_mb_all),
7692 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_mb_all),
7693 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_mb_all),
7695 TEST_CASES_END() /**< NULL terminate unit test array */
7699 static struct unit_test_suite cryptodev_openssl_testsuite = {
7700 .suite_name = "Crypto Device OPENSSL Unit Test Suite",
7701 .setup = testsuite_setup,
7702 .teardown = testsuite_teardown,
7703 .unit_test_cases = {
7704 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
7705 TEST_CASE_ST(ut_setup, ut_teardown,
7706 test_multi_session_random_usage),
7707 TEST_CASE_ST(ut_setup, ut_teardown,
7708 test_AES_chain_openssl_all),
7709 TEST_CASE_ST(ut_setup, ut_teardown,
7710 test_AES_cipheronly_openssl_all),
7711 TEST_CASE_ST(ut_setup, ut_teardown,
7712 test_3DES_chain_openssl_all),
7713 TEST_CASE_ST(ut_setup, ut_teardown,
7714 test_3DES_cipheronly_openssl_all),
7715 TEST_CASE_ST(ut_setup, ut_teardown,
7716 test_authonly_openssl_all),
7718 /** AES GCM Authenticated Encryption */
7719 TEST_CASE_ST(ut_setup, ut_teardown,
7720 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7721 TEST_CASE_ST(ut_setup, ut_teardown,
7722 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7723 TEST_CASE_ST(ut_setup, ut_teardown,
7724 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7725 TEST_CASE_ST(ut_setup, ut_teardown,
7726 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7727 TEST_CASE_ST(ut_setup, ut_teardown,
7728 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7729 TEST_CASE_ST(ut_setup, ut_teardown,
7730 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7731 TEST_CASE_ST(ut_setup, ut_teardown,
7732 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7734 /** AES GCM Authenticated Decryption */
7735 TEST_CASE_ST(ut_setup, ut_teardown,
7736 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7737 TEST_CASE_ST(ut_setup, ut_teardown,
7738 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7739 TEST_CASE_ST(ut_setup, ut_teardown,
7740 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7741 TEST_CASE_ST(ut_setup, ut_teardown,
7742 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7743 TEST_CASE_ST(ut_setup, ut_teardown,
7744 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7745 TEST_CASE_ST(ut_setup, ut_teardown,
7746 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7747 TEST_CASE_ST(ut_setup, ut_teardown,
7748 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7750 /** AES GMAC Authentication */
7751 TEST_CASE_ST(ut_setup, ut_teardown,
7752 test_AES_GMAC_authentication_test_case_1),
7753 TEST_CASE_ST(ut_setup, ut_teardown,
7754 test_AES_GMAC_authentication_verify_test_case_1),
7755 TEST_CASE_ST(ut_setup, ut_teardown,
7756 test_AES_GMAC_authentication_test_case_2),
7757 TEST_CASE_ST(ut_setup, ut_teardown,
7758 test_AES_GMAC_authentication_verify_test_case_2),
7759 TEST_CASE_ST(ut_setup, ut_teardown,
7760 test_AES_GMAC_authentication_test_case_3),
7761 TEST_CASE_ST(ut_setup, ut_teardown,
7762 test_AES_GMAC_authentication_verify_test_case_3),
7763 TEST_CASE_ST(ut_setup, ut_teardown,
7764 test_AES_GMAC_authentication_test_case_4),
7765 TEST_CASE_ST(ut_setup, ut_teardown,
7766 test_AES_GMAC_authentication_verify_test_case_4),
7768 /** Scatter-Gather */
7769 TEST_CASE_ST(ut_setup, ut_teardown,
7770 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
7772 /** Negative tests */
7773 TEST_CASE_ST(ut_setup, ut_teardown,
7774 authentication_verify_HMAC_SHA1_fail_data_corrupt),
7775 TEST_CASE_ST(ut_setup, ut_teardown,
7776 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
7777 TEST_CASE_ST(ut_setup, ut_teardown,
7778 authentication_verify_AES128_GMAC_fail_data_corrupt),
7779 TEST_CASE_ST(ut_setup, ut_teardown,
7780 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7781 TEST_CASE_ST(ut_setup, ut_teardown,
7782 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
7783 TEST_CASE_ST(ut_setup, ut_teardown,
7784 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
7786 TEST_CASES_END() /**< NULL terminate unit test array */
7790 static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
7791 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
7792 .setup = testsuite_setup,
7793 .teardown = testsuite_teardown,
7794 .unit_test_cases = {
7795 /** AES GCM Authenticated Encryption */
7796 TEST_CASE_ST(ut_setup, ut_teardown,
7797 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7798 TEST_CASE_ST(ut_setup, ut_teardown,
7799 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7800 TEST_CASE_ST(ut_setup, ut_teardown,
7801 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7802 TEST_CASE_ST(ut_setup, ut_teardown,
7803 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7804 TEST_CASE_ST(ut_setup, ut_teardown,
7805 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7806 TEST_CASE_ST(ut_setup, ut_teardown,
7807 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7808 TEST_CASE_ST(ut_setup, ut_teardown,
7809 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7811 /** AES GCM Authenticated Decryption */
7812 TEST_CASE_ST(ut_setup, ut_teardown,
7813 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7814 TEST_CASE_ST(ut_setup, ut_teardown,
7815 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7816 TEST_CASE_ST(ut_setup, ut_teardown,
7817 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7818 TEST_CASE_ST(ut_setup, ut_teardown,
7819 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7820 TEST_CASE_ST(ut_setup, ut_teardown,
7821 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7822 TEST_CASE_ST(ut_setup, ut_teardown,
7823 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7824 TEST_CASE_ST(ut_setup, ut_teardown,
7825 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7827 /** AES GCM Authenticated Encryption 256 bits key */
7828 TEST_CASE_ST(ut_setup, ut_teardown,
7829 test_mb_AES_GCM_auth_encryption_test_case_256_1),
7830 TEST_CASE_ST(ut_setup, ut_teardown,
7831 test_mb_AES_GCM_auth_encryption_test_case_256_2),
7832 TEST_CASE_ST(ut_setup, ut_teardown,
7833 test_mb_AES_GCM_auth_encryption_test_case_256_3),
7834 TEST_CASE_ST(ut_setup, ut_teardown,
7835 test_mb_AES_GCM_auth_encryption_test_case_256_4),
7836 TEST_CASE_ST(ut_setup, ut_teardown,
7837 test_mb_AES_GCM_auth_encryption_test_case_256_5),
7838 TEST_CASE_ST(ut_setup, ut_teardown,
7839 test_mb_AES_GCM_auth_encryption_test_case_256_6),
7840 TEST_CASE_ST(ut_setup, ut_teardown,
7841 test_mb_AES_GCM_auth_encryption_test_case_256_7),
7843 /** AES GCM Authenticated Decryption 256 bits key */
7844 TEST_CASE_ST(ut_setup, ut_teardown,
7845 test_mb_AES_GCM_auth_decryption_test_case_256_1),
7846 TEST_CASE_ST(ut_setup, ut_teardown,
7847 test_mb_AES_GCM_auth_decryption_test_case_256_2),
7848 TEST_CASE_ST(ut_setup, ut_teardown,
7849 test_mb_AES_GCM_auth_decryption_test_case_256_3),
7850 TEST_CASE_ST(ut_setup, ut_teardown,
7851 test_mb_AES_GCM_auth_decryption_test_case_256_4),
7852 TEST_CASE_ST(ut_setup, ut_teardown,
7853 test_mb_AES_GCM_auth_decryption_test_case_256_5),
7854 TEST_CASE_ST(ut_setup, ut_teardown,
7855 test_mb_AES_GCM_auth_decryption_test_case_256_6),
7856 TEST_CASE_ST(ut_setup, ut_teardown,
7857 test_mb_AES_GCM_auth_decryption_test_case_256_7),
7859 /** AES GCM Authenticated Encryption big aad size */
7860 TEST_CASE_ST(ut_setup, ut_teardown,
7861 test_mb_AES_GCM_auth_encryption_test_case_aad_1),
7862 TEST_CASE_ST(ut_setup, ut_teardown,
7863 test_mb_AES_GCM_auth_encryption_test_case_aad_2),
7865 /** AES GCM Authenticated Decryption big aad size */
7866 TEST_CASE_ST(ut_setup, ut_teardown,
7867 test_mb_AES_GCM_auth_decryption_test_case_aad_1),
7868 TEST_CASE_ST(ut_setup, ut_teardown,
7869 test_mb_AES_GCM_auth_decryption_test_case_aad_2),
7871 /** AES GMAC Authentication */
7872 TEST_CASE_ST(ut_setup, ut_teardown,
7873 test_AES_GMAC_authentication_test_case_1),
7874 TEST_CASE_ST(ut_setup, ut_teardown,
7875 test_AES_GMAC_authentication_verify_test_case_1),
7876 TEST_CASE_ST(ut_setup, ut_teardown,
7877 test_AES_GMAC_authentication_test_case_3),
7878 TEST_CASE_ST(ut_setup, ut_teardown,
7879 test_AES_GMAC_authentication_verify_test_case_3),
7880 TEST_CASE_ST(ut_setup, ut_teardown,
7881 test_AES_GMAC_authentication_test_case_4),
7882 TEST_CASE_ST(ut_setup, ut_teardown,
7883 test_AES_GMAC_authentication_verify_test_case_4),
7885 /** Negative tests */
7886 TEST_CASE_ST(ut_setup, ut_teardown,
7887 authentication_verify_AES128_GMAC_fail_data_corrupt),
7888 TEST_CASE_ST(ut_setup, ut_teardown,
7889 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7891 /** Out of place tests */
7892 TEST_CASE_ST(ut_setup, ut_teardown,
7893 test_mb_AES_GCM_authenticated_encryption_oop),
7894 TEST_CASE_ST(ut_setup, ut_teardown,
7895 test_mb_AES_GCM_authenticated_decryption_oop),
7897 /** Session-less tests */
7898 TEST_CASE_ST(ut_setup, ut_teardown,
7899 test_mb_AES_GCM_authenticated_encryption_sessionless),
7900 TEST_CASE_ST(ut_setup, ut_teardown,
7901 test_mb_AES_GCM_authenticated_decryption_sessionless),
7903 /** Scatter-Gather */
7904 TEST_CASE_ST(ut_setup, ut_teardown,
7905 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
7907 TEST_CASES_END() /**< NULL terminate unit test array */
7911 static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
7912 .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
7913 .setup = testsuite_setup,
7914 .teardown = testsuite_teardown,
7915 .unit_test_cases = {
7916 /** KASUMI encrypt only (UEA1) */
7917 TEST_CASE_ST(ut_setup, ut_teardown,
7918 test_kasumi_encryption_test_case_1),
7919 TEST_CASE_ST(ut_setup, ut_teardown,
7920 test_kasumi_encryption_test_case_1_sgl),
7921 TEST_CASE_ST(ut_setup, ut_teardown,
7922 test_kasumi_encryption_test_case_2),
7923 TEST_CASE_ST(ut_setup, ut_teardown,
7924 test_kasumi_encryption_test_case_3),
7925 TEST_CASE_ST(ut_setup, ut_teardown,
7926 test_kasumi_encryption_test_case_4),
7927 TEST_CASE_ST(ut_setup, ut_teardown,
7928 test_kasumi_encryption_test_case_5),
7929 /** KASUMI decrypt only (UEA1) */
7930 TEST_CASE_ST(ut_setup, ut_teardown,
7931 test_kasumi_decryption_test_case_1),
7932 TEST_CASE_ST(ut_setup, ut_teardown,
7933 test_kasumi_decryption_test_case_2),
7934 TEST_CASE_ST(ut_setup, ut_teardown,
7935 test_kasumi_decryption_test_case_3),
7936 TEST_CASE_ST(ut_setup, ut_teardown,
7937 test_kasumi_decryption_test_case_4),
7938 TEST_CASE_ST(ut_setup, ut_teardown,
7939 test_kasumi_decryption_test_case_5),
7941 TEST_CASE_ST(ut_setup, ut_teardown,
7942 test_kasumi_encryption_test_case_1_oop),
7943 TEST_CASE_ST(ut_setup, ut_teardown,
7944 test_kasumi_encryption_test_case_1_oop_sgl),
7947 TEST_CASE_ST(ut_setup, ut_teardown,
7948 test_kasumi_decryption_test_case_1_oop),
7950 /** KASUMI hash only (UIA1) */
7951 TEST_CASE_ST(ut_setup, ut_teardown,
7952 test_kasumi_hash_generate_test_case_1),
7953 TEST_CASE_ST(ut_setup, ut_teardown,
7954 test_kasumi_hash_generate_test_case_2),
7955 TEST_CASE_ST(ut_setup, ut_teardown,
7956 test_kasumi_hash_generate_test_case_3),
7957 TEST_CASE_ST(ut_setup, ut_teardown,
7958 test_kasumi_hash_generate_test_case_4),
7959 TEST_CASE_ST(ut_setup, ut_teardown,
7960 test_kasumi_hash_generate_test_case_5),
7961 TEST_CASE_ST(ut_setup, ut_teardown,
7962 test_kasumi_hash_generate_test_case_6),
7963 TEST_CASE_ST(ut_setup, ut_teardown,
7964 test_kasumi_hash_verify_test_case_1),
7965 TEST_CASE_ST(ut_setup, ut_teardown,
7966 test_kasumi_hash_verify_test_case_2),
7967 TEST_CASE_ST(ut_setup, ut_teardown,
7968 test_kasumi_hash_verify_test_case_3),
7969 TEST_CASE_ST(ut_setup, ut_teardown,
7970 test_kasumi_hash_verify_test_case_4),
7971 TEST_CASE_ST(ut_setup, ut_teardown,
7972 test_kasumi_hash_verify_test_case_5),
7973 TEST_CASE_ST(ut_setup, ut_teardown,
7974 test_kasumi_auth_cipher_test_case_1),
7975 TEST_CASE_ST(ut_setup, ut_teardown,
7976 test_kasumi_cipher_auth_test_case_1),
7977 TEST_CASES_END() /**< NULL terminate unit test array */
7980 static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
7981 .suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
7982 .setup = testsuite_setup,
7983 .teardown = testsuite_teardown,
7984 .unit_test_cases = {
7985 /** SNOW 3G encrypt only (UEA2) */
7986 TEST_CASE_ST(ut_setup, ut_teardown,
7987 test_snow3g_encryption_test_case_1),
7988 TEST_CASE_ST(ut_setup, ut_teardown,
7989 test_snow3g_encryption_test_case_2),
7990 TEST_CASE_ST(ut_setup, ut_teardown,
7991 test_snow3g_encryption_test_case_3),
7992 TEST_CASE_ST(ut_setup, ut_teardown,
7993 test_snow3g_encryption_test_case_4),
7994 TEST_CASE_ST(ut_setup, ut_teardown,
7995 test_snow3g_encryption_test_case_5),
7997 TEST_CASE_ST(ut_setup, ut_teardown,
7998 test_snow3g_encryption_test_case_1_oop),
7999 TEST_CASE_ST(ut_setup, ut_teardown,
8000 test_snow3g_encryption_test_case_1_oop_sgl),
8001 TEST_CASE_ST(ut_setup, ut_teardown,
8002 test_snow3g_decryption_test_case_1_oop),
8004 TEST_CASE_ST(ut_setup, ut_teardown,
8005 test_snow3g_encryption_test_case_1_offset_oop),
8007 /** SNOW 3G decrypt only (UEA2) */
8008 TEST_CASE_ST(ut_setup, ut_teardown,
8009 test_snow3g_decryption_test_case_1),
8010 TEST_CASE_ST(ut_setup, ut_teardown,
8011 test_snow3g_decryption_test_case_2),
8012 TEST_CASE_ST(ut_setup, ut_teardown,
8013 test_snow3g_decryption_test_case_3),
8014 TEST_CASE_ST(ut_setup, ut_teardown,
8015 test_snow3g_decryption_test_case_4),
8016 TEST_CASE_ST(ut_setup, ut_teardown,
8017 test_snow3g_decryption_test_case_5),
8018 TEST_CASE_ST(ut_setup, ut_teardown,
8019 test_snow3g_hash_generate_test_case_1),
8020 TEST_CASE_ST(ut_setup, ut_teardown,
8021 test_snow3g_hash_generate_test_case_2),
8022 TEST_CASE_ST(ut_setup, ut_teardown,
8023 test_snow3g_hash_generate_test_case_3),
8024 /* Tests with buffers which length is not byte-aligned */
8025 TEST_CASE_ST(ut_setup, ut_teardown,
8026 test_snow3g_hash_generate_test_case_4),
8027 TEST_CASE_ST(ut_setup, ut_teardown,
8028 test_snow3g_hash_generate_test_case_5),
8029 TEST_CASE_ST(ut_setup, ut_teardown,
8030 test_snow3g_hash_generate_test_case_6),
8031 TEST_CASE_ST(ut_setup, ut_teardown,
8032 test_snow3g_hash_verify_test_case_1),
8033 TEST_CASE_ST(ut_setup, ut_teardown,
8034 test_snow3g_hash_verify_test_case_2),
8035 TEST_CASE_ST(ut_setup, ut_teardown,
8036 test_snow3g_hash_verify_test_case_3),
8037 /* Tests with buffers which length is not byte-aligned */
8038 TEST_CASE_ST(ut_setup, ut_teardown,
8039 test_snow3g_hash_verify_test_case_4),
8040 TEST_CASE_ST(ut_setup, ut_teardown,
8041 test_snow3g_hash_verify_test_case_5),
8042 TEST_CASE_ST(ut_setup, ut_teardown,
8043 test_snow3g_hash_verify_test_case_6),
8044 TEST_CASE_ST(ut_setup, ut_teardown,
8045 test_snow3g_cipher_auth_test_case_1),
8046 TEST_CASE_ST(ut_setup, ut_teardown,
8047 test_snow3g_auth_cipher_test_case_1),
8049 TEST_CASES_END() /**< NULL terminate unit test array */
8053 static struct unit_test_suite cryptodev_sw_zuc_testsuite = {
8054 .suite_name = "Crypto Device SW ZUC Unit Test Suite",
8055 .setup = testsuite_setup,
8056 .teardown = testsuite_teardown,
8057 .unit_test_cases = {
8058 /** ZUC encrypt only (EEA3) */
8059 TEST_CASE_ST(ut_setup, ut_teardown,
8060 test_zuc_encryption_test_case_1),
8061 TEST_CASE_ST(ut_setup, ut_teardown,
8062 test_zuc_encryption_test_case_2),
8063 TEST_CASE_ST(ut_setup, ut_teardown,
8064 test_zuc_encryption_test_case_3),
8065 TEST_CASE_ST(ut_setup, ut_teardown,
8066 test_zuc_encryption_test_case_4),
8067 TEST_CASE_ST(ut_setup, ut_teardown,
8068 test_zuc_encryption_test_case_5),
8069 TEST_CASE_ST(ut_setup, ut_teardown,
8070 test_zuc_hash_generate_test_case_1),
8071 TEST_CASE_ST(ut_setup, ut_teardown,
8072 test_zuc_hash_generate_test_case_2),
8073 TEST_CASE_ST(ut_setup, ut_teardown,
8074 test_zuc_hash_generate_test_case_3),
8075 TEST_CASE_ST(ut_setup, ut_teardown,
8076 test_zuc_hash_generate_test_case_4),
8077 TEST_CASE_ST(ut_setup, ut_teardown,
8078 test_zuc_hash_generate_test_case_5),
8079 TEST_CASE_ST(ut_setup, ut_teardown,
8080 test_zuc_encryption_test_case_6_sgl),
8081 TEST_CASES_END() /**< NULL terminate unit test array */
8085 static struct unit_test_suite cryptodev_null_testsuite = {
8086 .suite_name = "Crypto Device NULL Unit Test Suite",
8087 .setup = testsuite_setup,
8088 .teardown = testsuite_teardown,
8089 .unit_test_cases = {
8090 TEST_CASE_ST(ut_setup, ut_teardown,
8091 test_null_auth_only_operation),
8092 TEST_CASE_ST(ut_setup, ut_teardown,
8093 test_null_cipher_only_operation),
8094 TEST_CASE_ST(ut_setup, ut_teardown,
8095 test_null_cipher_auth_operation),
8096 TEST_CASE_ST(ut_setup, ut_teardown,
8097 test_null_auth_cipher_operation),
8098 TEST_CASE_ST(ut_setup, ut_teardown,
8099 test_null_invalid_operation),
8100 TEST_CASE_ST(ut_setup, ut_teardown,
8101 test_null_burst_operation),
8103 TEST_CASES_END() /**< NULL terminate unit test array */
8107 static struct unit_test_suite cryptodev_armv8_testsuite = {
8108 .suite_name = "Crypto Device ARMv8 Unit Test Suite",
8109 .setup = testsuite_setup,
8110 .teardown = testsuite_teardown,
8111 .unit_test_cases = {
8112 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
8114 /** Negative tests */
8115 TEST_CASE_ST(ut_setup, ut_teardown,
8116 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
8117 TEST_CASE_ST(ut_setup, ut_teardown,
8118 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
8120 TEST_CASES_END() /**< NULL terminate unit test array */
8125 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
8127 gbl_cryptodev_type = RTE_CRYPTODEV_QAT_SYM_PMD;
8128 return unit_test_suite_runner(&cryptodev_qat_testsuite);
8132 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
8134 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
8136 return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
8140 test_cryptodev_openssl(void)
8142 gbl_cryptodev_type = RTE_CRYPTODEV_OPENSSL_PMD;
8144 return unit_test_suite_runner(&cryptodev_openssl_testsuite);
8148 test_cryptodev_aesni_gcm(void)
8150 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;
8152 return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
8156 test_cryptodev_null(void)
8158 gbl_cryptodev_type = RTE_CRYPTODEV_NULL_PMD;
8160 return unit_test_suite_runner(&cryptodev_null_testsuite);
8164 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
8166 gbl_cryptodev_type = RTE_CRYPTODEV_SNOW3G_PMD;
8168 return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
8172 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
8174 gbl_cryptodev_type = RTE_CRYPTODEV_KASUMI_PMD;
8176 return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
8180 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
8182 gbl_cryptodev_type = RTE_CRYPTODEV_ZUC_PMD;
8184 return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
8188 test_cryptodev_armv8(void)
8190 gbl_cryptodev_type = RTE_CRYPTODEV_ARMV8_PMD;
8192 return unit_test_suite_runner(&cryptodev_armv8_testsuite);
8195 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
8198 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
8200 gbl_cryptodev_type = RTE_CRYPTODEV_SCHEDULER_PMD;
8201 return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
8204 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
8208 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
8209 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
8210 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
8211 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
8212 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
8213 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
8214 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
8215 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
8216 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);