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_AES_docsis_qat_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_QAT_SYM_PMD,
1559 BLKCIPHER_AES_DOCSIS_TYPE);
1561 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1563 return TEST_SUCCESS;
1567 test_DES_docsis_qat_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_QAT_SYM_PMD,
1575 BLKCIPHER_DES_DOCSIS_TYPE);
1577 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1579 return TEST_SUCCESS;
1583 test_authonly_mb_all(void)
1585 struct crypto_testsuite_params *ts_params = &testsuite_params;
1588 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1589 ts_params->op_mpool, ts_params->valid_devs[0],
1590 RTE_CRYPTODEV_AESNI_MB_PMD,
1591 BLKCIPHER_AUTHONLY_TYPE);
1593 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1595 return TEST_SUCCESS;
1599 test_AES_chain_mb_all(void)
1601 struct crypto_testsuite_params *ts_params = &testsuite_params;
1604 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1605 ts_params->op_mpool, ts_params->valid_devs[0],
1606 RTE_CRYPTODEV_AESNI_MB_PMD,
1607 BLKCIPHER_AES_CHAIN_TYPE);
1609 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1611 return TEST_SUCCESS;
1614 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
1617 test_AES_cipheronly_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_AES_CIPHERONLY_TYPE);
1627 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1629 return TEST_SUCCESS;
1633 test_AES_chain_scheduler_all(void)
1635 struct crypto_testsuite_params *ts_params = &testsuite_params;
1638 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1639 ts_params->op_mpool, ts_params->valid_devs[0],
1640 RTE_CRYPTODEV_SCHEDULER_PMD,
1641 BLKCIPHER_AES_CHAIN_TYPE);
1643 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1645 return TEST_SUCCESS;
1649 test_authonly_scheduler_all(void)
1651 struct crypto_testsuite_params *ts_params = &testsuite_params;
1654 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1655 ts_params->op_mpool, ts_params->valid_devs[0],
1656 RTE_CRYPTODEV_SCHEDULER_PMD,
1657 BLKCIPHER_AUTHONLY_TYPE);
1659 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1661 return TEST_SUCCESS;
1664 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
1667 test_AES_chain_openssl_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_OPENSSL_PMD,
1675 BLKCIPHER_AES_CHAIN_TYPE);
1677 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1679 return TEST_SUCCESS;
1683 test_AES_cipheronly_openssl_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_OPENSSL_PMD,
1691 BLKCIPHER_AES_CIPHERONLY_TYPE);
1693 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1695 return TEST_SUCCESS;
1699 test_AES_chain_qat_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_QAT_SYM_PMD,
1707 BLKCIPHER_AES_CHAIN_TYPE);
1709 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1711 return TEST_SUCCESS;
1715 test_AES_cipheronly_qat_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_QAT_SYM_PMD,
1723 BLKCIPHER_AES_CIPHERONLY_TYPE);
1725 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1727 return TEST_SUCCESS;
1731 test_authonly_openssl_all(void)
1733 struct crypto_testsuite_params *ts_params = &testsuite_params;
1736 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1737 ts_params->op_mpool, ts_params->valid_devs[0],
1738 RTE_CRYPTODEV_OPENSSL_PMD,
1739 BLKCIPHER_AUTHONLY_TYPE);
1741 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1743 return TEST_SUCCESS;
1747 test_AES_chain_armv8_all(void)
1749 struct crypto_testsuite_params *ts_params = &testsuite_params;
1752 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1753 ts_params->op_mpool, ts_params->valid_devs[0],
1754 RTE_CRYPTODEV_ARMV8_PMD,
1755 BLKCIPHER_AES_CHAIN_TYPE);
1757 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1759 return TEST_SUCCESS;
1762 /* ***** SNOW 3G Tests ***** */
1764 create_wireless_algo_hash_session(uint8_t dev_id,
1765 const uint8_t *key, const uint8_t key_len,
1766 const uint8_t aad_len, const uint8_t auth_len,
1767 enum rte_crypto_auth_operation op,
1768 enum rte_crypto_auth_algorithm algo)
1770 uint8_t hash_key[key_len];
1772 struct crypto_unittest_params *ut_params = &unittest_params;
1774 memcpy(hash_key, key, key_len);
1776 TEST_HEXDUMP(stdout, "key:", key, key_len);
1778 /* Setup Authentication Parameters */
1779 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1780 ut_params->auth_xform.next = NULL;
1782 ut_params->auth_xform.auth.op = op;
1783 ut_params->auth_xform.auth.algo = algo;
1784 ut_params->auth_xform.auth.key.length = key_len;
1785 ut_params->auth_xform.auth.key.data = hash_key;
1786 ut_params->auth_xform.auth.digest_length = auth_len;
1787 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1788 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1789 &ut_params->auth_xform);
1790 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1795 create_wireless_algo_cipher_session(uint8_t dev_id,
1796 enum rte_crypto_cipher_operation op,
1797 enum rte_crypto_cipher_algorithm algo,
1798 const uint8_t *key, const uint8_t key_len)
1800 uint8_t cipher_key[key_len];
1802 struct crypto_unittest_params *ut_params = &unittest_params;
1804 memcpy(cipher_key, key, key_len);
1806 /* Setup Cipher Parameters */
1807 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1808 ut_params->cipher_xform.next = NULL;
1810 ut_params->cipher_xform.cipher.algo = algo;
1811 ut_params->cipher_xform.cipher.op = op;
1812 ut_params->cipher_xform.cipher.key.data = cipher_key;
1813 ut_params->cipher_xform.cipher.key.length = key_len;
1815 TEST_HEXDUMP(stdout, "key:", key, key_len);
1817 /* Create Crypto session */
1818 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1821 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1826 create_wireless_algo_cipher_operation(const uint8_t *iv, const unsigned iv_len,
1827 const unsigned cipher_len,
1828 const unsigned cipher_offset,
1829 enum rte_crypto_cipher_algorithm algo)
1831 struct crypto_testsuite_params *ts_params = &testsuite_params;
1832 struct crypto_unittest_params *ut_params = &unittest_params;
1833 unsigned iv_pad_len = 0;
1835 /* Generate Crypto op data structure */
1836 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1837 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1838 TEST_ASSERT_NOT_NULL(ut_params->op,
1839 "Failed to allocate pktmbuf offload");
1841 /* Set crypto operation data parameters */
1842 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1844 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1846 /* set crypto operation source mbuf */
1847 sym_op->m_src = ut_params->ibuf;
1850 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1851 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1853 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1855 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf
1858 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1860 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1861 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1862 sym_op->cipher.iv.length = iv_pad_len;
1864 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1865 sym_op->cipher.data.length = cipher_len;
1866 sym_op->cipher.data.offset = cipher_offset;
1871 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, const uint8_t iv_len,
1872 const unsigned cipher_len,
1873 const unsigned cipher_offset,
1874 enum rte_crypto_cipher_algorithm algo)
1876 struct crypto_testsuite_params *ts_params = &testsuite_params;
1877 struct crypto_unittest_params *ut_params = &unittest_params;
1878 unsigned iv_pad_len = 0;
1880 /* Generate Crypto op data structure */
1881 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1882 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1883 TEST_ASSERT_NOT_NULL(ut_params->op,
1884 "Failed to allocate pktmbuf offload");
1886 /* Set crypto operation data parameters */
1887 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1889 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1891 /* set crypto operation source mbuf */
1892 sym_op->m_src = ut_params->ibuf;
1893 sym_op->m_dst = ut_params->obuf;
1896 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1897 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1899 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1900 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1903 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1905 /* For OOP operation both buffers must have the same size */
1906 if (ut_params->obuf)
1907 rte_pktmbuf_prepend(ut_params->obuf, iv_pad_len);
1909 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1910 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1911 sym_op->cipher.iv.length = iv_pad_len;
1913 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1914 sym_op->cipher.data.length = cipher_len;
1915 sym_op->cipher.data.offset = cipher_offset;
1920 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
1921 enum rte_crypto_cipher_operation cipher_op,
1922 enum rte_crypto_auth_operation auth_op,
1923 enum rte_crypto_auth_algorithm auth_algo,
1924 enum rte_crypto_cipher_algorithm cipher_algo,
1925 const uint8_t *key, const uint8_t key_len,
1926 const uint8_t aad_len, const uint8_t auth_len)
1929 uint8_t cipher_auth_key[key_len];
1931 struct crypto_unittest_params *ut_params = &unittest_params;
1933 memcpy(cipher_auth_key, key, key_len);
1935 /* Setup Authentication Parameters */
1936 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1937 ut_params->auth_xform.next = NULL;
1939 ut_params->auth_xform.auth.op = auth_op;
1940 ut_params->auth_xform.auth.algo = auth_algo;
1941 ut_params->auth_xform.auth.key.length = key_len;
1942 /* Hash key = cipher key */
1943 ut_params->auth_xform.auth.key.data = cipher_auth_key;
1944 ut_params->auth_xform.auth.digest_length = auth_len;
1945 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1947 /* Setup Cipher Parameters */
1948 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1949 ut_params->cipher_xform.next = &ut_params->auth_xform;
1951 ut_params->cipher_xform.cipher.algo = cipher_algo;
1952 ut_params->cipher_xform.cipher.op = cipher_op;
1953 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
1954 ut_params->cipher_xform.cipher.key.length = key_len;
1956 TEST_HEXDUMP(stdout, "key:", key, key_len);
1958 /* Create Crypto session*/
1959 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1960 &ut_params->cipher_xform);
1962 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1967 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
1968 enum rte_crypto_cipher_operation cipher_op,
1969 enum rte_crypto_auth_operation auth_op,
1970 enum rte_crypto_auth_algorithm auth_algo,
1971 enum rte_crypto_cipher_algorithm cipher_algo,
1972 const uint8_t *key, const uint8_t key_len,
1973 const uint8_t aad_len, const uint8_t auth_len)
1975 uint8_t auth_cipher_key[key_len];
1977 struct crypto_unittest_params *ut_params = &unittest_params;
1979 memcpy(auth_cipher_key, key, key_len);
1981 /* Setup Authentication Parameters */
1982 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1983 ut_params->auth_xform.auth.op = auth_op;
1984 ut_params->auth_xform.next = &ut_params->cipher_xform;
1985 ut_params->auth_xform.auth.algo = auth_algo;
1986 ut_params->auth_xform.auth.key.length = key_len;
1987 ut_params->auth_xform.auth.key.data = auth_cipher_key;
1988 ut_params->auth_xform.auth.digest_length = auth_len;
1989 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1991 /* Setup Cipher Parameters */
1992 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1993 ut_params->cipher_xform.next = NULL;
1994 ut_params->cipher_xform.cipher.algo = cipher_algo;
1995 ut_params->cipher_xform.cipher.op = cipher_op;
1996 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
1997 ut_params->cipher_xform.cipher.key.length = key_len;
1999 TEST_HEXDUMP(stdout, "key:", key, key_len);
2001 /* Create Crypto session*/
2002 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
2003 &ut_params->auth_xform);
2005 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2011 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
2012 const unsigned auth_tag_len,
2013 const uint8_t *aad, const unsigned aad_len,
2014 unsigned data_pad_len,
2015 enum rte_crypto_auth_operation op,
2016 enum rte_crypto_auth_algorithm algo,
2017 const unsigned auth_len, const unsigned auth_offset)
2019 struct crypto_testsuite_params *ts_params = &testsuite_params;
2021 struct crypto_unittest_params *ut_params = &unittest_params;
2023 unsigned aad_buffer_len;
2025 /* Generate Crypto op data structure */
2026 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2027 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2028 TEST_ASSERT_NOT_NULL(ut_params->op,
2029 "Failed to allocate pktmbuf offload");
2031 /* Set crypto operation data parameters */
2032 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2034 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2036 /* set crypto operation source mbuf */
2037 sym_op->m_src = ut_params->ibuf;
2041 * Always allocate the aad up to the block size.
2042 * The cryptodev API calls out -
2043 * - the array must be big enough to hold the AAD, plus any
2044 * space to round this up to the nearest multiple of the
2045 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
2047 if (algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2048 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2050 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2051 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
2052 ut_params->ibuf, aad_buffer_len);
2053 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2054 "no room to prepend aad");
2055 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2057 sym_op->auth.aad.length = aad_len;
2059 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2060 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2062 TEST_HEXDUMP(stdout, "aad:",
2063 sym_op->auth.aad.data, aad_len);
2066 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2067 ut_params->ibuf, auth_tag_len);
2069 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2070 "no room to append auth tag");
2071 ut_params->digest = sym_op->auth.digest.data;
2072 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2073 ut_params->ibuf, data_pad_len + aad_len);
2074 sym_op->auth.digest.length = auth_tag_len;
2075 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2076 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2078 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2080 TEST_HEXDUMP(stdout, "digest:",
2081 sym_op->auth.digest.data,
2082 sym_op->auth.digest.length);
2084 sym_op->auth.data.length = auth_len;
2085 sym_op->auth.data.offset = auth_offset;
2091 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
2092 const unsigned auth_tag_len,
2093 const uint8_t *aad, const uint8_t aad_len,
2094 unsigned data_pad_len,
2095 enum rte_crypto_auth_operation op,
2096 enum rte_crypto_auth_algorithm auth_algo,
2097 enum rte_crypto_cipher_algorithm cipher_algo,
2098 const uint8_t *iv, const uint8_t iv_len,
2099 const unsigned cipher_len, const unsigned cipher_offset,
2100 const unsigned auth_len, const unsigned auth_offset)
2102 struct crypto_testsuite_params *ts_params = &testsuite_params;
2103 struct crypto_unittest_params *ut_params = &unittest_params;
2105 unsigned iv_pad_len = 0;
2106 unsigned aad_buffer_len;
2108 /* Generate Crypto op data structure */
2109 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2110 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2111 TEST_ASSERT_NOT_NULL(ut_params->op,
2112 "Failed to allocate pktmbuf offload");
2113 /* Set crypto operation data parameters */
2114 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2116 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2118 /* set crypto operation source mbuf */
2119 sym_op->m_src = ut_params->ibuf;
2122 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2123 ut_params->ibuf, auth_tag_len);
2125 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2126 "no room to append auth tag");
2127 ut_params->digest = sym_op->auth.digest.data;
2128 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2129 ut_params->ibuf, data_pad_len);
2130 sym_op->auth.digest.length = auth_tag_len;
2131 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
2132 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2134 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
2136 TEST_HEXDUMP(stdout, "digest:",
2137 sym_op->auth.digest.data,
2138 sym_op->auth.digest.length);
2142 * Always allocate the aad up to the block size.
2143 * The cryptodev API calls out -
2144 * - the array must be big enough to hold the AAD, plus any
2145 * space to round this up to the nearest multiple of the
2146 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
2148 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2149 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2151 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2152 sym_op->auth.aad.data =
2153 (uint8_t *)rte_pktmbuf_prepend(
2154 ut_params->ibuf, aad_buffer_len);
2155 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2156 "no room to prepend aad");
2157 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2159 sym_op->auth.aad.length = aad_len;
2160 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2161 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2162 TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data, aad_len);
2165 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
2166 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
2168 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
2169 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
2170 ut_params->ibuf, iv_pad_len);
2172 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
2173 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
2174 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
2175 sym_op->cipher.iv.length = iv_pad_len;
2176 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
2177 sym_op->cipher.data.length = cipher_len;
2178 sym_op->cipher.data.offset = cipher_offset + auth_offset;
2179 sym_op->auth.data.length = auth_len;
2180 sym_op->auth.data.offset = auth_offset + cipher_offset;
2186 create_wireless_algo_auth_cipher_operation(const unsigned auth_tag_len,
2187 const uint8_t *iv, const uint8_t iv_len,
2188 const uint8_t *aad, const uint8_t aad_len,
2189 unsigned data_pad_len,
2190 const unsigned cipher_len, const unsigned cipher_offset,
2191 const unsigned auth_len, const unsigned auth_offset,
2192 enum rte_crypto_auth_algorithm auth_algo,
2193 enum rte_crypto_cipher_algorithm cipher_algo)
2195 struct crypto_testsuite_params *ts_params = &testsuite_params;
2196 struct crypto_unittest_params *ut_params = &unittest_params;
2198 unsigned iv_pad_len = 0;
2199 unsigned aad_buffer_len = 0;
2201 /* Generate Crypto op data structure */
2202 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2203 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2204 TEST_ASSERT_NOT_NULL(ut_params->op,
2205 "Failed to allocate pktmbuf offload");
2207 /* Set crypto operation data parameters */
2208 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2210 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2212 /* set crypto operation source mbuf */
2213 sym_op->m_src = ut_params->ibuf;
2216 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2217 ut_params->ibuf, auth_tag_len);
2219 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2220 "no room to append auth tag");
2222 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2223 ut_params->ibuf, data_pad_len);
2224 sym_op->auth.digest.length = auth_tag_len;
2226 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2228 TEST_HEXDUMP(stdout, "digest:",
2229 sym_op->auth.digest.data,
2230 sym_op->auth.digest.length);
2234 * Always allocate the aad up to the block size.
2235 * The cryptodev API calls out -
2236 * - the array must be big enough to hold the AAD, plus any
2237 * space to round this up to the nearest multiple of the
2238 * block size (8 bytes for KASUMI 16 bytes).
2240 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2241 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2243 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2244 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
2245 ut_params->ibuf, aad_buffer_len);
2246 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2247 "no room to prepend aad");
2248 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2250 sym_op->auth.aad.length = aad_len;
2251 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2252 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2253 TEST_HEXDUMP(stdout, "aad:",
2254 sym_op->auth.aad.data, aad_len);
2257 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
2258 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
2260 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
2262 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
2263 ut_params->ibuf, iv_pad_len);
2264 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
2266 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
2267 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
2268 sym_op->cipher.iv.length = iv_pad_len;
2270 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
2272 sym_op->cipher.data.length = cipher_len;
2273 sym_op->cipher.data.offset = auth_offset + cipher_offset;
2275 sym_op->auth.data.length = auth_len;
2276 sym_op->auth.data.offset = auth_offset + cipher_offset;
2282 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2284 struct crypto_testsuite_params *ts_params = &testsuite_params;
2285 struct crypto_unittest_params *ut_params = &unittest_params;
2288 unsigned plaintext_pad_len;
2289 unsigned plaintext_len;
2292 /* Create SNOW 3G session */
2293 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2294 tdata->key.data, tdata->key.len,
2295 tdata->aad.len, tdata->digest.len,
2296 RTE_CRYPTO_AUTH_OP_GENERATE,
2297 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2301 /* alloc mbuf and set payload */
2302 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2304 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2305 rte_pktmbuf_tailroom(ut_params->ibuf));
2307 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2308 /* Append data which is padded to a multiple of */
2309 /* the algorithms block size */
2310 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2311 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2313 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2315 /* Create SNOW 3G operation */
2316 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2317 tdata->aad.data, tdata->aad.len,
2318 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2319 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2320 tdata->validAuthLenInBits.len,
2321 tdata->validAuthOffsetLenInBits.len);
2325 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2327 ut_params->obuf = ut_params->op->sym->m_src;
2328 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2329 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2330 + plaintext_pad_len + tdata->aad.len;
2333 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2336 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2337 "SNOW 3G Generated auth tag not as expected");
2343 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
2345 struct crypto_testsuite_params *ts_params = &testsuite_params;
2346 struct crypto_unittest_params *ut_params = &unittest_params;
2349 unsigned plaintext_pad_len;
2350 unsigned plaintext_len;
2353 /* Create SNOW 3G session */
2354 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2355 tdata->key.data, tdata->key.len,
2356 tdata->aad.len, tdata->digest.len,
2357 RTE_CRYPTO_AUTH_OP_VERIFY,
2358 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2361 /* alloc mbuf and set payload */
2362 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2364 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2365 rte_pktmbuf_tailroom(ut_params->ibuf));
2367 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2368 /* Append data which is padded to a multiple of */
2369 /* the algorithms block size */
2370 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2371 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2373 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2375 /* Create SNOW 3G operation */
2376 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2378 tdata->aad.data, tdata->aad.len,
2380 RTE_CRYPTO_AUTH_OP_VERIFY,
2381 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2382 tdata->validAuthLenInBits.len,
2383 tdata->validAuthOffsetLenInBits.len);
2387 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2389 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2390 ut_params->obuf = ut_params->op->sym->m_src;
2391 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2392 + plaintext_pad_len + tdata->aad.len;
2395 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2404 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
2406 struct crypto_testsuite_params *ts_params = &testsuite_params;
2407 struct crypto_unittest_params *ut_params = &unittest_params;
2410 unsigned plaintext_pad_len;
2411 unsigned plaintext_len;
2414 /* Create KASUMI session */
2415 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2416 tdata->key.data, tdata->key.len,
2417 tdata->aad.len, tdata->digest.len,
2418 RTE_CRYPTO_AUTH_OP_GENERATE,
2419 RTE_CRYPTO_AUTH_KASUMI_F9);
2423 /* alloc mbuf and set payload */
2424 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2426 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2427 rte_pktmbuf_tailroom(ut_params->ibuf));
2429 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2430 /* Append data which is padded to a multiple of */
2431 /* the algorithms block size */
2432 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2433 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2435 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2437 /* Create KASUMI operation */
2438 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2439 tdata->aad.data, tdata->aad.len,
2440 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2441 RTE_CRYPTO_AUTH_KASUMI_F9,
2442 tdata->validAuthLenInBits.len,
2443 tdata->validAuthOffsetLenInBits.len);
2447 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2449 ut_params->obuf = ut_params->op->sym->m_src;
2450 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2451 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2452 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
2455 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2458 DIGEST_BYTE_LENGTH_KASUMI_F9,
2459 "KASUMI Generated auth tag not as expected");
2465 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
2467 struct crypto_testsuite_params *ts_params = &testsuite_params;
2468 struct crypto_unittest_params *ut_params = &unittest_params;
2471 unsigned plaintext_pad_len;
2472 unsigned plaintext_len;
2475 /* Create KASUMI session */
2476 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2477 tdata->key.data, tdata->key.len,
2478 tdata->aad.len, tdata->digest.len,
2479 RTE_CRYPTO_AUTH_OP_VERIFY,
2480 RTE_CRYPTO_AUTH_KASUMI_F9);
2483 /* alloc mbuf and set payload */
2484 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2486 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2487 rte_pktmbuf_tailroom(ut_params->ibuf));
2489 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2490 /* Append data which is padded to a multiple */
2491 /* of the algorithms block size */
2492 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2493 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2495 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2497 /* Create KASUMI operation */
2498 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2500 tdata->aad.data, tdata->aad.len,
2502 RTE_CRYPTO_AUTH_OP_VERIFY,
2503 RTE_CRYPTO_AUTH_KASUMI_F9,
2504 tdata->validAuthLenInBits.len,
2505 tdata->validAuthOffsetLenInBits.len);
2509 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2511 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2512 ut_params->obuf = ut_params->op->sym->m_src;
2513 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2514 + plaintext_pad_len + tdata->aad.len;
2517 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2526 test_snow3g_hash_generate_test_case_1(void)
2528 return test_snow3g_authentication(&snow3g_hash_test_case_1);
2532 test_snow3g_hash_generate_test_case_2(void)
2534 return test_snow3g_authentication(&snow3g_hash_test_case_2);
2538 test_snow3g_hash_generate_test_case_3(void)
2540 return test_snow3g_authentication(&snow3g_hash_test_case_3);
2544 test_snow3g_hash_generate_test_case_4(void)
2546 return test_snow3g_authentication(&snow3g_hash_test_case_4);
2550 test_snow3g_hash_generate_test_case_5(void)
2552 return test_snow3g_authentication(&snow3g_hash_test_case_5);
2556 test_snow3g_hash_generate_test_case_6(void)
2558 return test_snow3g_authentication(&snow3g_hash_test_case_6);
2562 test_snow3g_hash_verify_test_case_1(void)
2564 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
2569 test_snow3g_hash_verify_test_case_2(void)
2571 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
2575 test_snow3g_hash_verify_test_case_3(void)
2577 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
2581 test_snow3g_hash_verify_test_case_4(void)
2583 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
2587 test_snow3g_hash_verify_test_case_5(void)
2589 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
2593 test_snow3g_hash_verify_test_case_6(void)
2595 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
2599 test_kasumi_hash_generate_test_case_1(void)
2601 return test_kasumi_authentication(&kasumi_hash_test_case_1);
2605 test_kasumi_hash_generate_test_case_2(void)
2607 return test_kasumi_authentication(&kasumi_hash_test_case_2);
2611 test_kasumi_hash_generate_test_case_3(void)
2613 return test_kasumi_authentication(&kasumi_hash_test_case_3);
2617 test_kasumi_hash_generate_test_case_4(void)
2619 return test_kasumi_authentication(&kasumi_hash_test_case_4);
2623 test_kasumi_hash_generate_test_case_5(void)
2625 return test_kasumi_authentication(&kasumi_hash_test_case_5);
2629 test_kasumi_hash_generate_test_case_6(void)
2631 return test_kasumi_authentication(&kasumi_hash_test_case_6);
2635 test_kasumi_hash_verify_test_case_1(void)
2637 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
2641 test_kasumi_hash_verify_test_case_2(void)
2643 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
2647 test_kasumi_hash_verify_test_case_3(void)
2649 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
2653 test_kasumi_hash_verify_test_case_4(void)
2655 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
2659 test_kasumi_hash_verify_test_case_5(void)
2661 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
2665 test_kasumi_encryption(const struct kasumi_test_data *tdata)
2667 struct crypto_testsuite_params *ts_params = &testsuite_params;
2668 struct crypto_unittest_params *ut_params = &unittest_params;
2671 uint8_t *plaintext, *ciphertext;
2672 unsigned plaintext_pad_len;
2673 unsigned plaintext_len;
2675 /* Create KASUMI session */
2676 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2677 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2678 RTE_CRYPTO_CIPHER_KASUMI_F8,
2679 tdata->key.data, tdata->key.len);
2683 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2685 /* Clear mbuf payload */
2686 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2687 rte_pktmbuf_tailroom(ut_params->ibuf));
2689 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2690 /* Append data which is padded to a multiple */
2691 /* of the algorithms block size */
2692 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2693 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2695 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2697 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2699 /* Create KASUMI operation */
2700 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
2701 tdata->plaintext.len,
2702 tdata->validCipherOffsetLenInBits.len,
2703 RTE_CRYPTO_CIPHER_KASUMI_F8);
2707 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2709 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2711 ut_params->obuf = ut_params->op->sym->m_dst;
2712 if (ut_params->obuf)
2713 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2716 ciphertext = plaintext;
2718 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2721 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2723 tdata->ciphertext.data,
2724 tdata->validCipherLenInBits.len,
2725 "KASUMI Ciphertext data not as expected");
2730 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)
2732 struct crypto_testsuite_params *ts_params = &testsuite_params;
2733 struct crypto_unittest_params *ut_params = &unittest_params;
2737 unsigned int plaintext_pad_len;
2738 unsigned int plaintext_len;
2740 uint8_t buffer[10000];
2741 const uint8_t *ciphertext;
2743 struct rte_cryptodev_info dev_info;
2745 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2746 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
2747 printf("Device doesn't support scatter-gather. "
2752 /* Create KASUMI session */
2753 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2754 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2755 RTE_CRYPTO_CIPHER_KASUMI_F8,
2756 tdata->key.data, tdata->key.len);
2760 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2763 /* Append data which is padded to a multiple */
2764 /* of the algorithms block size */
2765 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2767 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
2768 plaintext_pad_len, 10, 0);
2770 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
2772 /* Create KASUMI operation */
2773 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
2775 tdata->plaintext.len,
2776 tdata->validCipherOffsetLenInBits.len,
2777 RTE_CRYPTO_CIPHER_KASUMI_F8);
2781 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2783 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2785 ut_params->obuf = ut_params->op->sym->m_dst;
2787 if (ut_params->obuf)
2788 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
2789 plaintext_len, buffer);
2791 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
2792 plaintext_len, buffer);
2795 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2798 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2800 tdata->ciphertext.data,
2801 tdata->validCipherLenInBits.len,
2802 "KASUMI Ciphertext data not as expected");
2807 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
2809 struct crypto_testsuite_params *ts_params = &testsuite_params;
2810 struct crypto_unittest_params *ut_params = &unittest_params;
2813 uint8_t *plaintext, *ciphertext;
2814 unsigned plaintext_pad_len;
2815 unsigned plaintext_len;
2817 /* Create KASUMI session */
2818 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2819 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2820 RTE_CRYPTO_CIPHER_KASUMI_F8,
2821 tdata->key.data, tdata->key.len);
2825 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2826 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2828 /* Clear mbuf payload */
2829 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2830 rte_pktmbuf_tailroom(ut_params->ibuf));
2832 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2833 /* Append data which is padded to a multiple */
2834 /* of the algorithms block size */
2835 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2836 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2838 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2839 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2841 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2843 /* Create KASUMI operation */
2844 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2846 tdata->plaintext.len,
2847 tdata->validCipherOffsetLenInBits.len,
2848 RTE_CRYPTO_CIPHER_KASUMI_F8);
2852 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2854 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2856 ut_params->obuf = ut_params->op->sym->m_dst;
2857 if (ut_params->obuf)
2858 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2861 ciphertext = plaintext;
2863 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2866 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2868 tdata->ciphertext.data,
2869 tdata->validCipherLenInBits.len,
2870 "KASUMI Ciphertext data not as expected");
2875 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)
2877 struct crypto_testsuite_params *ts_params = &testsuite_params;
2878 struct crypto_unittest_params *ut_params = &unittest_params;
2881 unsigned int plaintext_pad_len;
2882 unsigned int plaintext_len;
2884 const uint8_t *ciphertext;
2885 uint8_t buffer[2048];
2887 struct rte_cryptodev_info dev_info;
2889 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2890 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
2891 printf("Device doesn't support scatter-gather. "
2896 /* Create KASUMI session */
2897 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2898 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2899 RTE_CRYPTO_CIPHER_KASUMI_F8,
2900 tdata->key.data, tdata->key.len);
2904 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2905 /* Append data which is padded to a multiple */
2906 /* of the algorithms block size */
2907 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2909 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
2910 plaintext_pad_len, 10, 0);
2911 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
2912 plaintext_pad_len, 3, 0);
2914 /* Append data which is padded to a multiple */
2915 /* of the algorithms block size */
2916 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
2918 /* Create KASUMI operation */
2919 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2921 tdata->plaintext.len,
2922 tdata->validCipherOffsetLenInBits.len,
2923 RTE_CRYPTO_CIPHER_KASUMI_F8);
2927 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2929 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2931 ut_params->obuf = ut_params->op->sym->m_dst;
2932 if (ut_params->obuf)
2933 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
2934 plaintext_pad_len, buffer);
2936 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
2937 plaintext_pad_len, buffer);
2940 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2942 tdata->ciphertext.data,
2943 tdata->validCipherLenInBits.len,
2944 "KASUMI Ciphertext data not as expected");
2950 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
2952 struct crypto_testsuite_params *ts_params = &testsuite_params;
2953 struct crypto_unittest_params *ut_params = &unittest_params;
2956 uint8_t *ciphertext, *plaintext;
2957 unsigned ciphertext_pad_len;
2958 unsigned ciphertext_len;
2960 /* Create KASUMI session */
2961 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2962 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2963 RTE_CRYPTO_CIPHER_KASUMI_F8,
2964 tdata->key.data, tdata->key.len);
2968 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2969 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2971 /* Clear mbuf payload */
2972 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2973 rte_pktmbuf_tailroom(ut_params->ibuf));
2975 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2976 /* Append data which is padded to a multiple */
2977 /* of the algorithms block size */
2978 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2979 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2980 ciphertext_pad_len);
2981 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
2982 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2984 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2986 /* Create KASUMI operation */
2987 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2989 tdata->ciphertext.len,
2990 tdata->validCipherOffsetLenInBits.len,
2991 RTE_CRYPTO_CIPHER_KASUMI_F8);
2995 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2997 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2999 ut_params->obuf = ut_params->op->sym->m_dst;
3000 if (ut_params->obuf)
3001 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3004 plaintext = ciphertext;
3006 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3009 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3011 tdata->plaintext.data,
3012 tdata->validCipherLenInBits.len,
3013 "KASUMI Plaintext data not as expected");
3018 test_kasumi_decryption(const struct kasumi_test_data *tdata)
3020 struct crypto_testsuite_params *ts_params = &testsuite_params;
3021 struct crypto_unittest_params *ut_params = &unittest_params;
3024 uint8_t *ciphertext, *plaintext;
3025 unsigned ciphertext_pad_len;
3026 unsigned ciphertext_len;
3028 /* Create KASUMI session */
3029 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3030 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3031 RTE_CRYPTO_CIPHER_KASUMI_F8,
3032 tdata->key.data, tdata->key.len);
3036 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3038 /* Clear mbuf payload */
3039 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3040 rte_pktmbuf_tailroom(ut_params->ibuf));
3042 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3043 /* Append data which is padded to a multiple */
3044 /* of the algorithms block size */
3045 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
3046 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3047 ciphertext_pad_len);
3048 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3050 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3052 /* Create KASUMI operation */
3053 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
3055 tdata->ciphertext.len,
3056 tdata->validCipherOffsetLenInBits.len,
3057 RTE_CRYPTO_CIPHER_KASUMI_F8);
3061 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3063 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3065 ut_params->obuf = ut_params->op->sym->m_dst;
3066 if (ut_params->obuf)
3067 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3070 plaintext = ciphertext;
3072 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3075 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3077 tdata->plaintext.data,
3078 tdata->validCipherLenInBits.len,
3079 "KASUMI Plaintext data not as expected");
3084 test_snow3g_encryption(const struct snow3g_test_data *tdata)
3086 struct crypto_testsuite_params *ts_params = &testsuite_params;
3087 struct crypto_unittest_params *ut_params = &unittest_params;
3090 uint8_t *plaintext, *ciphertext;
3091 unsigned plaintext_pad_len;
3092 unsigned plaintext_len;
3094 /* Create SNOW 3G session */
3095 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3096 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3097 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3098 tdata->key.data, tdata->key.len);
3102 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3104 /* Clear mbuf payload */
3105 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3106 rte_pktmbuf_tailroom(ut_params->ibuf));
3108 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3109 /* Append data which is padded to a multiple of */
3110 /* the algorithms block size */
3111 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3112 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3114 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3116 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3118 /* Create SNOW 3G operation */
3119 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3120 tdata->validCipherLenInBits.len,
3121 tdata->validCipherOffsetLenInBits.len,
3122 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3126 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3128 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3130 ut_params->obuf = ut_params->op->sym->m_dst;
3131 if (ut_params->obuf)
3132 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3135 ciphertext = plaintext;
3137 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3140 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3142 tdata->ciphertext.data,
3143 tdata->validDataLenInBits.len,
3144 "SNOW 3G Ciphertext data not as expected");
3150 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
3152 struct crypto_testsuite_params *ts_params = &testsuite_params;
3153 struct crypto_unittest_params *ut_params = &unittest_params;
3154 uint8_t *plaintext, *ciphertext;
3157 unsigned plaintext_pad_len;
3158 unsigned plaintext_len;
3160 /* Create SNOW 3G session */
3161 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3162 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3163 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3164 tdata->key.data, tdata->key.len);
3168 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3169 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3171 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3172 "Failed to allocate input buffer in mempool");
3173 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3174 "Failed to allocate output buffer in mempool");
3176 /* Clear mbuf payload */
3177 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3178 rte_pktmbuf_tailroom(ut_params->ibuf));
3180 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3181 /* Append data which is padded to a multiple of */
3182 /* the algorithms block size */
3183 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3184 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3186 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3187 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3189 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3191 /* Create SNOW 3G operation */
3192 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3194 tdata->validCipherLenInBits.len,
3195 tdata->validCipherOffsetLenInBits.len,
3196 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3200 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3202 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3204 ut_params->obuf = ut_params->op->sym->m_dst;
3205 if (ut_params->obuf)
3206 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3209 ciphertext = plaintext;
3211 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3214 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3216 tdata->ciphertext.data,
3217 tdata->validDataLenInBits.len,
3218 "SNOW 3G Ciphertext data not as expected");
3223 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)
3225 struct crypto_testsuite_params *ts_params = &testsuite_params;
3226 struct crypto_unittest_params *ut_params = &unittest_params;
3229 unsigned int plaintext_pad_len;
3230 unsigned int plaintext_len;
3231 uint8_t buffer[10000];
3232 const uint8_t *ciphertext;
3234 struct rte_cryptodev_info dev_info;
3236 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3237 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3238 printf("Device doesn't support scatter-gather. "
3243 /* Create SNOW 3G session */
3244 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3245 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3246 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3247 tdata->key.data, tdata->key.len);
3251 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3252 /* Append data which is padded to a multiple of */
3253 /* the algorithms block size */
3254 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3256 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3257 plaintext_pad_len, 10, 0);
3258 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool,
3259 plaintext_pad_len, 3, 0);
3261 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3262 "Failed to allocate input buffer in mempool");
3263 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3264 "Failed to allocate output buffer in mempool");
3266 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
3268 /* Create SNOW 3G operation */
3269 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3271 tdata->validCipherLenInBits.len,
3272 tdata->validCipherOffsetLenInBits.len,
3273 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3277 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3279 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3281 ut_params->obuf = ut_params->op->sym->m_dst;
3282 if (ut_params->obuf)
3283 ciphertext = rte_pktmbuf_read(ut_params->obuf, tdata->iv.len,
3284 plaintext_len, buffer);
3286 ciphertext = rte_pktmbuf_read(ut_params->ibuf, tdata->iv.len,
3287 plaintext_len, buffer);
3289 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3292 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3294 tdata->ciphertext.data,
3295 tdata->validDataLenInBits.len,
3296 "SNOW 3G Ciphertext data not as expected");
3301 /* Shift right a buffer by "offset" bits, "offset" < 8 */
3303 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
3305 uint8_t curr_byte, prev_byte;
3306 uint32_t length_in_bytes = ceil_byte_length(length + offset);
3307 uint8_t lower_byte_mask = (1 << offset) - 1;
3310 prev_byte = buffer[0];
3311 buffer[0] >>= offset;
3313 for (i = 1; i < length_in_bytes; i++) {
3314 curr_byte = buffer[i];
3315 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
3316 (curr_byte >> offset);
3317 prev_byte = curr_byte;
3322 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
3324 struct crypto_testsuite_params *ts_params = &testsuite_params;
3325 struct crypto_unittest_params *ut_params = &unittest_params;
3326 uint8_t *plaintext, *ciphertext;
3328 uint32_t plaintext_len;
3329 uint32_t plaintext_pad_len;
3330 uint8_t extra_offset = 4;
3331 uint8_t *expected_ciphertext_shifted;
3333 /* Create SNOW 3G session */
3334 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3335 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3336 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3337 tdata->key.data, tdata->key.len);
3341 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3342 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3344 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3345 "Failed to allocate input buffer in mempool");
3346 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3347 "Failed to allocate output buffer in mempool");
3349 /* Clear mbuf payload */
3350 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3351 rte_pktmbuf_tailroom(ut_params->ibuf));
3353 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
3355 * Append data which is padded to a
3356 * multiple of the algorithms block size
3358 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3360 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
3363 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
3365 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
3366 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
3368 #ifdef RTE_APP_TEST_DEBUG
3369 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
3371 /* Create SNOW 3G operation */
3372 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3374 tdata->validCipherLenInBits.len,
3375 tdata->validCipherOffsetLenInBits.len +
3377 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3381 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3383 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3385 ut_params->obuf = ut_params->op->sym->m_dst;
3386 if (ut_params->obuf)
3387 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3390 ciphertext = plaintext;
3392 #ifdef RTE_APP_TEST_DEBUG
3393 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
3396 expected_ciphertext_shifted = rte_malloc(NULL,
3397 ceil_byte_length(plaintext_len + extra_offset), 0);
3399 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
3400 "failed to reserve memory for ciphertext shifted\n");
3402 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
3403 ceil_byte_length(tdata->ciphertext.len));
3404 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
3407 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
3409 expected_ciphertext_shifted,
3410 tdata->validDataLenInBits.len,
3412 "SNOW 3G Ciphertext data not as expected");
3416 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
3418 struct crypto_testsuite_params *ts_params = &testsuite_params;
3419 struct crypto_unittest_params *ut_params = &unittest_params;
3423 uint8_t *plaintext, *ciphertext;
3424 unsigned ciphertext_pad_len;
3425 unsigned ciphertext_len;
3427 /* Create SNOW 3G session */
3428 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3429 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3430 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3431 tdata->key.data, tdata->key.len);
3435 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3437 /* Clear mbuf payload */
3438 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3439 rte_pktmbuf_tailroom(ut_params->ibuf));
3441 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3442 /* Append data which is padded to a multiple of */
3443 /* the algorithms block size */
3444 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3445 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3446 ciphertext_pad_len);
3447 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3449 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3451 /* Create SNOW 3G operation */
3452 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3453 tdata->validCipherLenInBits.len,
3454 tdata->validCipherOffsetLenInBits.len,
3455 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3459 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3461 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3462 ut_params->obuf = ut_params->op->sym->m_dst;
3463 if (ut_params->obuf)
3464 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3467 plaintext = ciphertext;
3469 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3472 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3473 tdata->plaintext.data,
3474 tdata->validDataLenInBits.len,
3475 "SNOW 3G Plaintext data not as expected");
3479 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
3481 struct crypto_testsuite_params *ts_params = &testsuite_params;
3482 struct crypto_unittest_params *ut_params = &unittest_params;
3486 uint8_t *plaintext, *ciphertext;
3487 unsigned ciphertext_pad_len;
3488 unsigned ciphertext_len;
3490 /* Create SNOW 3G session */
3491 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3492 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3493 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3494 tdata->key.data, tdata->key.len);
3498 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3499 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3501 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3502 "Failed to allocate input buffer");
3503 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3504 "Failed to allocate output buffer");
3506 /* Clear mbuf payload */
3507 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3508 rte_pktmbuf_tailroom(ut_params->ibuf));
3510 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
3511 rte_pktmbuf_tailroom(ut_params->obuf));
3513 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3514 /* Append data which is padded to a multiple of */
3515 /* the algorithms block size */
3516 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3517 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3518 ciphertext_pad_len);
3519 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3520 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3522 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3524 /* Create SNOW 3G operation */
3525 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3527 tdata->validCipherLenInBits.len,
3528 tdata->validCipherOffsetLenInBits.len,
3529 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3533 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3535 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3536 ut_params->obuf = ut_params->op->sym->m_dst;
3537 if (ut_params->obuf)
3538 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3541 plaintext = ciphertext;
3543 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3546 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3547 tdata->plaintext.data,
3548 tdata->validDataLenInBits.len,
3549 "SNOW 3G Plaintext data not as expected");
3554 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
3556 struct crypto_testsuite_params *ts_params = &testsuite_params;
3557 struct crypto_unittest_params *ut_params = &unittest_params;
3561 uint8_t *plaintext, *ciphertext;
3562 unsigned plaintext_pad_len;
3563 unsigned plaintext_len;
3565 /* Create SNOW 3G session */
3566 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
3567 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3568 RTE_CRYPTO_AUTH_OP_GENERATE,
3569 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3570 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3571 tdata->key.data, tdata->key.len,
3572 tdata->aad.len, tdata->digest.len);
3575 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3577 /* clear mbuf payload */
3578 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3579 rte_pktmbuf_tailroom(ut_params->ibuf));
3581 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3582 /* Append data which is padded to a multiple of */
3583 /* the algorithms block size */
3584 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3585 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3587 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3589 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3591 /* Create SNOW 3G operation */
3592 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3593 tdata->digest.len, tdata->aad.data,
3594 tdata->aad.len, /*tdata->plaintext.len,*/
3595 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3596 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3597 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3598 tdata->iv.data, tdata->iv.len,
3599 tdata->validCipherLenInBits.len,
3600 tdata->validCipherOffsetLenInBits.len,
3601 tdata->validAuthLenInBits.len,
3602 tdata->validAuthOffsetLenInBits.len
3607 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3609 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3610 ut_params->obuf = ut_params->op->sym->m_src;
3611 if (ut_params->obuf)
3612 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3613 + tdata->iv.len + tdata->aad.len;
3615 ciphertext = plaintext;
3617 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3619 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3621 tdata->ciphertext.data,
3622 tdata->validDataLenInBits.len,
3623 "SNOW 3G Ciphertext data not as expected");
3625 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3626 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3629 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3632 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3633 "SNOW 3G Generated auth tag not as expected");
3637 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
3639 struct crypto_testsuite_params *ts_params = &testsuite_params;
3640 struct crypto_unittest_params *ut_params = &unittest_params;
3644 uint8_t *plaintext, *ciphertext;
3645 unsigned plaintext_pad_len;
3646 unsigned plaintext_len;
3648 /* Create SNOW 3G session */
3649 retval = create_wireless_algo_auth_cipher_session(ts_params->valid_devs[0],
3650 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3651 RTE_CRYPTO_AUTH_OP_GENERATE,
3652 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3653 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3654 tdata->key.data, tdata->key.len,
3655 tdata->aad.len, tdata->digest.len);
3659 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3661 /* clear mbuf payload */
3662 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3663 rte_pktmbuf_tailroom(ut_params->ibuf));
3665 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3666 /* Append data which is padded to a multiple of */
3667 /* the algorithms block size */
3668 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3669 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3671 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3673 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3675 /* Create SNOW 3G operation */
3676 retval = create_wireless_algo_auth_cipher_operation(
3678 tdata->iv.data, tdata->iv.len,
3679 tdata->aad.data, tdata->aad.len,
3681 tdata->validCipherLenInBits.len,
3682 tdata->validCipherOffsetLenInBits.len,
3683 tdata->validAuthLenInBits.len,
3684 tdata->validAuthOffsetLenInBits.len,
3685 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3686 RTE_CRYPTO_CIPHER_SNOW3G_UEA2
3692 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3694 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3695 ut_params->obuf = ut_params->op->sym->m_src;
3696 if (ut_params->obuf)
3697 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3698 + tdata->aad.len + tdata->iv.len;
3700 ciphertext = plaintext;
3702 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3703 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3704 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3707 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3709 tdata->ciphertext.data,
3710 tdata->validDataLenInBits.len,
3711 "SNOW 3G Ciphertext data not as expected");
3714 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3717 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3718 "SNOW 3G Generated auth tag not as expected");
3723 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata)
3725 struct crypto_testsuite_params *ts_params = &testsuite_params;
3726 struct crypto_unittest_params *ut_params = &unittest_params;
3730 uint8_t *plaintext, *ciphertext;
3731 unsigned plaintext_pad_len;
3732 unsigned plaintext_len;
3734 /* Create KASUMI session */
3735 retval = create_wireless_algo_auth_cipher_session(
3736 ts_params->valid_devs[0],
3737 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3738 RTE_CRYPTO_AUTH_OP_GENERATE,
3739 RTE_CRYPTO_AUTH_KASUMI_F9,
3740 RTE_CRYPTO_CIPHER_KASUMI_F8,
3741 tdata->key.data, tdata->key.len,
3742 tdata->aad.len, tdata->digest.len);
3745 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3747 /* clear mbuf payload */
3748 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3749 rte_pktmbuf_tailroom(ut_params->ibuf));
3751 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3752 /* Append data which is padded to a multiple of */
3753 /* the algorithms block size */
3754 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3755 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3757 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3759 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3761 /* Create KASUMI operation */
3762 retval = create_wireless_algo_auth_cipher_operation(tdata->digest.len,
3763 tdata->iv.data, tdata->iv.len,
3764 tdata->aad.data, tdata->aad.len,
3766 tdata->validCipherLenInBits.len,
3767 tdata->validCipherOffsetLenInBits.len,
3768 tdata->validAuthLenInBits.len,
3769 tdata->validAuthOffsetLenInBits.len,
3770 RTE_CRYPTO_AUTH_KASUMI_F9,
3771 RTE_CRYPTO_CIPHER_KASUMI_F8
3777 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3779 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3780 ut_params->obuf = ut_params->op->sym->m_src;
3781 if (ut_params->obuf)
3782 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3783 + tdata->iv.len + tdata->aad.len;
3785 ciphertext = plaintext;
3788 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3790 tdata->ciphertext.data,
3791 tdata->validCipherLenInBits.len,
3792 "KASUMI Ciphertext data not as expected");
3793 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3794 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3797 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3800 DIGEST_BYTE_LENGTH_KASUMI_F9,
3801 "KASUMI Generated auth tag not as expected");
3806 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
3808 struct crypto_testsuite_params *ts_params = &testsuite_params;
3809 struct crypto_unittest_params *ut_params = &unittest_params;
3813 uint8_t *plaintext, *ciphertext;
3814 unsigned plaintext_pad_len;
3815 unsigned plaintext_len;
3817 /* Create KASUMI session */
3818 retval = create_wireless_algo_cipher_auth_session(
3819 ts_params->valid_devs[0],
3820 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3821 RTE_CRYPTO_AUTH_OP_GENERATE,
3822 RTE_CRYPTO_AUTH_KASUMI_F9,
3823 RTE_CRYPTO_CIPHER_KASUMI_F8,
3824 tdata->key.data, tdata->key.len,
3825 tdata->aad.len, tdata->digest.len);
3829 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3831 /* clear mbuf payload */
3832 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3833 rte_pktmbuf_tailroom(ut_params->ibuf));
3835 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3836 /* Append data which is padded to a multiple of */
3837 /* the algorithms block size */
3838 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3839 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3841 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3843 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3845 /* Create KASUMI operation */
3846 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3847 tdata->digest.len, tdata->aad.data,
3849 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3850 RTE_CRYPTO_AUTH_KASUMI_F9,
3851 RTE_CRYPTO_CIPHER_KASUMI_F8,
3852 tdata->iv.data, tdata->iv.len,
3853 tdata->validCipherLenInBits.len,
3854 tdata->validCipherOffsetLenInBits.len,
3855 tdata->validAuthLenInBits.len,
3856 tdata->validAuthOffsetLenInBits.len
3861 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3863 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3864 ut_params->obuf = ut_params->op->sym->m_src;
3865 if (ut_params->obuf)
3866 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3867 + tdata->aad.len + tdata->iv.len;
3869 ciphertext = plaintext;
3871 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3872 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3875 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3877 tdata->ciphertext.data,
3878 tdata->validCipherLenInBits.len,
3879 "KASUMI Ciphertext data not as expected");
3882 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3885 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3886 "KASUMI Generated auth tag not as expected");
3891 test_zuc_encryption(const struct zuc_test_data *tdata)
3893 struct crypto_testsuite_params *ts_params = &testsuite_params;
3894 struct crypto_unittest_params *ut_params = &unittest_params;
3897 uint8_t *plaintext, *ciphertext;
3898 unsigned plaintext_pad_len;
3899 unsigned plaintext_len;
3901 /* Create ZUC session */
3902 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3903 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3904 RTE_CRYPTO_CIPHER_ZUC_EEA3,
3905 tdata->key.data, tdata->key.len);
3909 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3911 /* Clear mbuf payload */
3912 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3913 rte_pktmbuf_tailroom(ut_params->ibuf));
3915 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3916 /* Append data which is padded to a multiple */
3917 /* of the algorithms block size */
3918 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3919 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3921 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3923 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3925 /* Create ZUC operation */
3926 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3927 tdata->plaintext.len,
3928 tdata->validCipherOffsetLenInBits.len,
3929 RTE_CRYPTO_CIPHER_ZUC_EEA3);
3933 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3935 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3937 ut_params->obuf = ut_params->op->sym->m_dst;
3938 if (ut_params->obuf)
3939 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3942 ciphertext = plaintext;
3944 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3947 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3949 tdata->ciphertext.data,
3950 tdata->validCipherLenInBits.len,
3951 "ZUC Ciphertext data not as expected");
3956 test_zuc_encryption_sgl(const struct zuc_test_data *tdata)
3958 struct crypto_testsuite_params *ts_params = &testsuite_params;
3959 struct crypto_unittest_params *ut_params = &unittest_params;
3963 unsigned int plaintext_pad_len;
3964 unsigned int plaintext_len;
3965 const uint8_t *ciphertext;
3966 uint8_t ciphertext_buffer[2048];
3967 struct rte_cryptodev_info dev_info;
3969 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3970 if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER)) {
3971 printf("Device doesn't support scatter-gather. "
3976 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3978 /* Append data which is padded to a multiple */
3979 /* of the algorithms block size */
3980 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3982 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool,
3983 plaintext_pad_len, 10, 0);
3985 pktmbuf_write(ut_params->ibuf, 0, plaintext_len,
3986 tdata->plaintext.data);
3988 /* Create ZUC session */
3989 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3990 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3991 RTE_CRYPTO_CIPHER_ZUC_EEA3,
3992 tdata->key.data, tdata->key.len);
3996 /* Clear mbuf payload */
3998 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data);
4000 /* Create ZUC operation */
4001 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
4002 tdata->iv.len, tdata->plaintext.len,
4003 tdata->validCipherOffsetLenInBits.len,
4004 RTE_CRYPTO_CIPHER_ZUC_EEA3);
4008 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4010 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4012 ut_params->obuf = ut_params->op->sym->m_dst;
4013 if (ut_params->obuf)
4014 ciphertext = rte_pktmbuf_read(ut_params->obuf,
4015 tdata->iv.len, plaintext_len, ciphertext_buffer);
4017 ciphertext = rte_pktmbuf_read(ut_params->ibuf,
4018 tdata->iv.len, plaintext_len, ciphertext_buffer);
4021 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
4024 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
4026 tdata->ciphertext.data,
4027 tdata->validCipherLenInBits.len,
4028 "ZUC Ciphertext data not as expected");
4034 test_zuc_authentication(const struct zuc_hash_test_data *tdata)
4036 struct crypto_testsuite_params *ts_params = &testsuite_params;
4037 struct crypto_unittest_params *ut_params = &unittest_params;
4040 unsigned plaintext_pad_len;
4041 unsigned plaintext_len;
4044 /* Create ZUC session */
4045 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
4046 tdata->key.data, tdata->key.len,
4047 tdata->aad.len, tdata->digest.len,
4048 RTE_CRYPTO_AUTH_OP_GENERATE,
4049 RTE_CRYPTO_AUTH_ZUC_EIA3);
4053 /* alloc mbuf and set payload */
4054 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4056 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4057 rte_pktmbuf_tailroom(ut_params->ibuf));
4059 plaintext_len = ceil_byte_length(tdata->plaintext.len);
4060 /* Append data which is padded to a multiple of */
4061 /* the algorithms block size */
4062 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
4063 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4065 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
4067 /* Create ZUC operation */
4068 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
4069 tdata->aad.data, tdata->aad.len,
4070 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
4071 RTE_CRYPTO_AUTH_ZUC_EIA3,
4072 tdata->validAuthLenInBits.len,
4073 tdata->validAuthOffsetLenInBits.len);
4077 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4079 ut_params->obuf = ut_params->op->sym->m_src;
4080 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
4081 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
4082 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
4085 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4088 DIGEST_BYTE_LENGTH_KASUMI_F9,
4089 "ZUC Generated auth tag not as expected");
4095 test_kasumi_encryption_test_case_1(void)
4097 return test_kasumi_encryption(&kasumi_test_case_1);
4101 test_kasumi_encryption_test_case_1_sgl(void)
4103 return test_kasumi_encryption_sgl(&kasumi_test_case_1);
4107 test_kasumi_encryption_test_case_1_oop(void)
4109 return test_kasumi_encryption_oop(&kasumi_test_case_1);
4113 test_kasumi_encryption_test_case_1_oop_sgl(void)
4115 return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1);
4119 test_kasumi_encryption_test_case_2(void)
4121 return test_kasumi_encryption(&kasumi_test_case_2);
4125 test_kasumi_encryption_test_case_3(void)
4127 return test_kasumi_encryption(&kasumi_test_case_3);
4131 test_kasumi_encryption_test_case_4(void)
4133 return test_kasumi_encryption(&kasumi_test_case_4);
4137 test_kasumi_encryption_test_case_5(void)
4139 return test_kasumi_encryption(&kasumi_test_case_5);
4143 test_kasumi_decryption_test_case_1(void)
4145 return test_kasumi_decryption(&kasumi_test_case_1);
4149 test_kasumi_decryption_test_case_1_oop(void)
4151 return test_kasumi_decryption_oop(&kasumi_test_case_1);
4155 test_kasumi_decryption_test_case_2(void)
4157 return test_kasumi_decryption(&kasumi_test_case_2);
4161 test_kasumi_decryption_test_case_3(void)
4163 return test_kasumi_decryption(&kasumi_test_case_3);
4167 test_kasumi_decryption_test_case_4(void)
4169 return test_kasumi_decryption(&kasumi_test_case_4);
4173 test_kasumi_decryption_test_case_5(void)
4175 return test_kasumi_decryption(&kasumi_test_case_5);
4178 test_snow3g_encryption_test_case_1(void)
4180 return test_snow3g_encryption(&snow3g_test_case_1);
4184 test_snow3g_encryption_test_case_1_oop(void)
4186 return test_snow3g_encryption_oop(&snow3g_test_case_1);
4190 test_snow3g_encryption_test_case_1_oop_sgl(void)
4192 return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1);
4197 test_snow3g_encryption_test_case_1_offset_oop(void)
4199 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
4203 test_snow3g_encryption_test_case_2(void)
4205 return test_snow3g_encryption(&snow3g_test_case_2);
4209 test_snow3g_encryption_test_case_3(void)
4211 return test_snow3g_encryption(&snow3g_test_case_3);
4215 test_snow3g_encryption_test_case_4(void)
4217 return test_snow3g_encryption(&snow3g_test_case_4);
4221 test_snow3g_encryption_test_case_5(void)
4223 return test_snow3g_encryption(&snow3g_test_case_5);
4227 test_snow3g_decryption_test_case_1(void)
4229 return test_snow3g_decryption(&snow3g_test_case_1);
4233 test_snow3g_decryption_test_case_1_oop(void)
4235 return test_snow3g_decryption_oop(&snow3g_test_case_1);
4239 test_snow3g_decryption_test_case_2(void)
4241 return test_snow3g_decryption(&snow3g_test_case_2);
4245 test_snow3g_decryption_test_case_3(void)
4247 return test_snow3g_decryption(&snow3g_test_case_3);
4251 test_snow3g_decryption_test_case_4(void)
4253 return test_snow3g_decryption(&snow3g_test_case_4);
4257 test_snow3g_decryption_test_case_5(void)
4259 return test_snow3g_decryption(&snow3g_test_case_5);
4262 test_snow3g_cipher_auth_test_case_1(void)
4264 return test_snow3g_cipher_auth(&snow3g_test_case_3);
4268 test_snow3g_auth_cipher_test_case_1(void)
4270 return test_snow3g_auth_cipher(&snow3g_test_case_6);
4274 test_kasumi_auth_cipher_test_case_1(void)
4276 return test_kasumi_auth_cipher(&kasumi_test_case_3);
4280 test_kasumi_cipher_auth_test_case_1(void)
4282 return test_kasumi_cipher_auth(&kasumi_test_case_6);
4286 test_zuc_encryption_test_case_1(void)
4288 return test_zuc_encryption(&zuc_test_case_1);
4292 test_zuc_encryption_test_case_2(void)
4294 return test_zuc_encryption(&zuc_test_case_2);
4298 test_zuc_encryption_test_case_3(void)
4300 return test_zuc_encryption(&zuc_test_case_3);
4304 test_zuc_encryption_test_case_4(void)
4306 return test_zuc_encryption(&zuc_test_case_4);
4310 test_zuc_encryption_test_case_5(void)
4312 return test_zuc_encryption(&zuc_test_case_5);
4316 test_zuc_encryption_test_case_6_sgl(void)
4318 return test_zuc_encryption_sgl(&zuc_test_case_1);
4322 test_zuc_hash_generate_test_case_1(void)
4324 return test_zuc_authentication(&zuc_hash_test_case_1);
4328 test_zuc_hash_generate_test_case_2(void)
4330 return test_zuc_authentication(&zuc_hash_test_case_2);
4334 test_zuc_hash_generate_test_case_3(void)
4336 return test_zuc_authentication(&zuc_hash_test_case_3);
4340 test_zuc_hash_generate_test_case_4(void)
4342 return test_zuc_authentication(&zuc_hash_test_case_4);
4346 test_zuc_hash_generate_test_case_5(void)
4348 return test_zuc_authentication(&zuc_hash_test_case_5);
4352 test_3DES_chain_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_CHAIN_TYPE);
4362 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4364 return TEST_SUCCESS;
4368 test_DES_cipheronly_qat_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_QAT_SYM_PMD,
4376 BLKCIPHER_DES_CIPHERONLY_TYPE);
4378 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4380 return TEST_SUCCESS;
4384 test_DES_docsis_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_DES_DOCSIS_TYPE);
4394 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4396 return TEST_SUCCESS;
4400 test_3DES_cipheronly_qat_all(void)
4402 struct crypto_testsuite_params *ts_params = &testsuite_params;
4405 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4406 ts_params->op_mpool, ts_params->valid_devs[0],
4407 RTE_CRYPTODEV_QAT_SYM_PMD,
4408 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4410 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4412 return TEST_SUCCESS;
4416 test_3DES_chain_openssl_all(void)
4418 struct crypto_testsuite_params *ts_params = &testsuite_params;
4421 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4422 ts_params->op_mpool, ts_params->valid_devs[0],
4423 RTE_CRYPTODEV_OPENSSL_PMD,
4424 BLKCIPHER_3DES_CHAIN_TYPE);
4426 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4428 return TEST_SUCCESS;
4432 test_3DES_cipheronly_openssl_all(void)
4434 struct crypto_testsuite_params *ts_params = &testsuite_params;
4437 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
4438 ts_params->op_mpool, ts_params->valid_devs[0],
4439 RTE_CRYPTODEV_OPENSSL_PMD,
4440 BLKCIPHER_3DES_CIPHERONLY_TYPE);
4442 TEST_ASSERT_EQUAL(status, 0, "Test failed");
4444 return TEST_SUCCESS;
4447 /* ***** AES-GCM Tests ***** */
4450 create_gcm_session(uint8_t dev_id, enum rte_crypto_cipher_operation op,
4451 const uint8_t *key, const uint8_t key_len,
4452 const uint8_t aad_len, const uint8_t auth_len,
4453 enum rte_crypto_auth_operation auth_op)
4455 uint8_t cipher_key[key_len];
4457 struct crypto_unittest_params *ut_params = &unittest_params;
4459 memcpy(cipher_key, key, key_len);
4461 /* Setup Cipher Parameters */
4462 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4463 ut_params->cipher_xform.next = NULL;
4465 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
4466 ut_params->auth_xform.auth.op = auth_op;
4467 ut_params->cipher_xform.cipher.op = op;
4468 ut_params->cipher_xform.cipher.key.data = cipher_key;
4469 ut_params->cipher_xform.cipher.key.length = key_len;
4471 TEST_HEXDUMP(stdout, "key:", key, key_len);
4473 /* Setup Authentication Parameters */
4474 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4475 ut_params->auth_xform.next = NULL;
4477 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
4479 ut_params->auth_xform.auth.digest_length = auth_len;
4480 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
4481 ut_params->auth_xform.auth.key.length = 0;
4482 ut_params->auth_xform.auth.key.data = NULL;
4484 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4485 ut_params->cipher_xform.next = &ut_params->auth_xform;
4487 /* Create Crypto session*/
4488 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
4489 &ut_params->cipher_xform);
4490 } else {/* Create Crypto session*/
4491 ut_params->auth_xform.next = &ut_params->cipher_xform;
4492 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
4493 &ut_params->auth_xform);
4496 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4502 create_gcm_xforms(struct rte_crypto_op *op,
4503 enum rte_crypto_cipher_operation cipher_op,
4504 uint8_t *key, const uint8_t key_len,
4505 const uint8_t aad_len, const uint8_t auth_len,
4506 enum rte_crypto_auth_operation auth_op)
4508 TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 2),
4509 "failed to allocate space for crypto transforms");
4511 struct rte_crypto_sym_op *sym_op = op->sym;
4513 /* Setup Cipher Parameters */
4514 sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4515 sym_op->xform->cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
4516 sym_op->xform->cipher.op = cipher_op;
4517 sym_op->xform->cipher.key.data = key;
4518 sym_op->xform->cipher.key.length = key_len;
4520 TEST_HEXDUMP(stdout, "key:", key, key_len);
4522 /* Setup Authentication Parameters */
4523 sym_op->xform->next->type = RTE_CRYPTO_SYM_XFORM_AUTH;
4524 sym_op->xform->next->auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
4525 sym_op->xform->next->auth.op = auth_op;
4526 sym_op->xform->next->auth.digest_length = auth_len;
4527 sym_op->xform->next->auth.add_auth_data_length = aad_len;
4528 sym_op->xform->next->auth.key.length = 0;
4529 sym_op->xform->next->auth.key.data = NULL;
4530 sym_op->xform->next->next = NULL;
4536 create_gcm_operation(enum rte_crypto_cipher_operation op,
4537 const struct gcm_test_data *tdata)
4539 struct crypto_testsuite_params *ts_params = &testsuite_params;
4540 struct crypto_unittest_params *ut_params = &unittest_params;
4542 uint8_t *plaintext, *ciphertext;
4543 unsigned int iv_pad_len, aad_pad_len, plaintext_pad_len;
4545 /* Generate Crypto op data structure */
4546 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4547 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4548 TEST_ASSERT_NOT_NULL(ut_params->op,
4549 "Failed to allocate symmetric crypto operation struct");
4551 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4553 /* Append aad data */
4554 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
4555 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4557 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
4558 "no room to append aad");
4560 sym_op->auth.aad.length = tdata->aad.len;
4561 sym_op->auth.aad.phys_addr =
4562 rte_pktmbuf_mtophys(ut_params->ibuf);
4563 memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
4564 TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data,
4565 sym_op->auth.aad.length);
4568 iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
4569 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
4570 ut_params->ibuf, iv_pad_len);
4571 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
4573 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
4574 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
4575 sym_op->cipher.iv.length = tdata->iv.len;
4577 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
4578 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data,
4579 sym_op->cipher.iv.length);
4581 /* Append plaintext/ciphertext */
4582 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4583 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4584 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4586 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
4588 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
4589 TEST_HEXDUMP(stdout, "plaintext:", plaintext,
4590 tdata->plaintext.len);
4592 if (ut_params->obuf) {
4593 ciphertext = (uint8_t *)rte_pktmbuf_append(
4595 plaintext_pad_len + aad_pad_len +
4597 TEST_ASSERT_NOT_NULL(ciphertext,
4598 "no room to append ciphertext");
4600 memset(ciphertext + aad_pad_len + iv_pad_len, 0,
4601 tdata->ciphertext.len);
4604 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
4605 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4607 TEST_ASSERT_NOT_NULL(ciphertext,
4608 "no room to append ciphertext");
4610 memcpy(ciphertext, tdata->ciphertext.data,
4611 tdata->ciphertext.len);
4612 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext,
4613 tdata->ciphertext.len);
4615 if (ut_params->obuf) {
4616 plaintext = (uint8_t *)rte_pktmbuf_append(
4618 plaintext_pad_len + aad_pad_len +
4620 TEST_ASSERT_NOT_NULL(plaintext,
4621 "no room to append plaintext");
4623 memset(plaintext + aad_pad_len + iv_pad_len, 0,
4624 tdata->plaintext.len);
4628 /* Append digest data */
4629 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4630 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
4631 ut_params->obuf ? ut_params->obuf :
4633 tdata->auth_tag.len);
4634 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
4635 "no room to append digest");
4636 memset(sym_op->auth.digest.data, 0, tdata->auth_tag.len);
4637 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4638 ut_params->obuf ? ut_params->obuf :
4641 aad_pad_len + iv_pad_len);
4642 sym_op->auth.digest.length = tdata->auth_tag.len;
4644 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
4645 ut_params->ibuf, tdata->auth_tag.len);
4646 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
4647 "no room to append digest");
4648 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4650 plaintext_pad_len + aad_pad_len + iv_pad_len);
4651 sym_op->auth.digest.length = tdata->auth_tag.len;
4653 rte_memcpy(sym_op->auth.digest.data, tdata->auth_tag.data,
4654 tdata->auth_tag.len);
4655 TEST_HEXDUMP(stdout, "digest:",
4656 sym_op->auth.digest.data,
4657 sym_op->auth.digest.length);
4660 sym_op->cipher.data.length = tdata->plaintext.len;
4661 sym_op->cipher.data.offset = aad_pad_len + iv_pad_len;
4663 sym_op->auth.data.length = tdata->plaintext.len;
4664 sym_op->auth.data.offset = aad_pad_len + iv_pad_len;
4670 test_mb_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
4672 struct crypto_testsuite_params *ts_params = &testsuite_params;
4673 struct crypto_unittest_params *ut_params = &unittest_params;
4676 uint8_t *ciphertext, *auth_tag;
4677 uint16_t plaintext_pad_len;
4680 /* Create GCM session */
4681 retval = create_gcm_session(ts_params->valid_devs[0],
4682 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4683 tdata->key.data, tdata->key.len,
4684 tdata->aad.len, tdata->auth_tag.len,
4685 RTE_CRYPTO_AUTH_OP_GENERATE);
4689 if (tdata->aad.len > MBUF_SIZE) {
4690 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
4691 /* Populate full size of add data */
4692 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
4693 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
4695 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4697 /* clear mbuf payload */
4698 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4699 rte_pktmbuf_tailroom(ut_params->ibuf));
4701 /* Create GCM operation */
4702 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
4706 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4708 ut_params->op->sym->m_src = ut_params->ibuf;
4710 /* Process crypto operation */
4711 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4712 ut_params->op), "failed to process sym crypto op");
4714 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4715 "crypto op processing failed");
4717 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4719 if (ut_params->op->sym->m_dst) {
4720 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4722 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
4723 uint8_t *, plaintext_pad_len);
4725 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
4727 ut_params->op->sym->cipher.data.offset);
4728 auth_tag = ciphertext + plaintext_pad_len;
4731 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
4732 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
4735 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4737 tdata->ciphertext.data,
4738 tdata->ciphertext.len,
4739 "GCM Ciphertext data not as expected");
4741 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4743 tdata->auth_tag.data,
4744 tdata->auth_tag.len,
4745 "GCM Generated auth tag not as expected");
4752 test_mb_AES_GCM_authenticated_encryption_test_case_1(void)
4754 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_1);
4758 test_mb_AES_GCM_authenticated_encryption_test_case_2(void)
4760 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_2);
4764 test_mb_AES_GCM_authenticated_encryption_test_case_3(void)
4766 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_3);
4770 test_mb_AES_GCM_authenticated_encryption_test_case_4(void)
4772 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_4);
4776 test_mb_AES_GCM_authenticated_encryption_test_case_5(void)
4778 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_5);
4782 test_mb_AES_GCM_authenticated_encryption_test_case_6(void)
4784 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_6);
4788 test_mb_AES_GCM_authenticated_encryption_test_case_7(void)
4790 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_7);
4794 test_mb_AES_GCM_auth_encryption_test_case_256_1(void)
4796 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_1);
4800 test_mb_AES_GCM_auth_encryption_test_case_256_2(void)
4802 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_2);
4806 test_mb_AES_GCM_auth_encryption_test_case_256_3(void)
4808 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_3);
4812 test_mb_AES_GCM_auth_encryption_test_case_256_4(void)
4814 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_4);
4818 test_mb_AES_GCM_auth_encryption_test_case_256_5(void)
4820 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_5);
4824 test_mb_AES_GCM_auth_encryption_test_case_256_6(void)
4826 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_6);
4830 test_mb_AES_GCM_auth_encryption_test_case_256_7(void)
4832 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_256_7);
4836 test_mb_AES_GCM_auth_encryption_test_case_aad_1(void)
4838 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_aad_1);
4842 test_mb_AES_GCM_auth_encryption_test_case_aad_2(void)
4844 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_aad_2);
4848 test_mb_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
4850 struct crypto_testsuite_params *ts_params = &testsuite_params;
4851 struct crypto_unittest_params *ut_params = &unittest_params;
4857 /* Create GCM session */
4858 retval = create_gcm_session(ts_params->valid_devs[0],
4859 RTE_CRYPTO_CIPHER_OP_DECRYPT,
4860 tdata->key.data, tdata->key.len,
4861 tdata->aad.len, tdata->auth_tag.len,
4862 RTE_CRYPTO_AUTH_OP_VERIFY);
4866 /* alloc mbuf and set payload */
4867 if (tdata->aad.len > MBUF_SIZE) {
4868 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
4869 /* Populate full size of add data */
4870 for (i = 32; i < GCM_MAX_AAD_LENGTH; i += 32)
4871 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32);
4873 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4875 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4876 rte_pktmbuf_tailroom(ut_params->ibuf));
4878 /* Create GCM operation */
4879 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
4883 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4885 ut_params->op->sym->m_src = ut_params->ibuf;
4887 /* Process crypto operation */
4888 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4889 ut_params->op), "failed to process sym crypto op");
4891 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4892 "crypto op processing failed");
4894 if (ut_params->op->sym->m_dst)
4895 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4898 plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
4900 ut_params->op->sym->cipher.data.offset);
4902 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
4905 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4907 tdata->plaintext.data,
4908 tdata->plaintext.len,
4909 "GCM plaintext data not as expected");
4911 TEST_ASSERT_EQUAL(ut_params->op->status,
4912 RTE_CRYPTO_OP_STATUS_SUCCESS,
4913 "GCM authentication failed");
4918 test_mb_AES_GCM_authenticated_decryption_test_case_1(void)
4920 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_1);
4924 test_mb_AES_GCM_authenticated_decryption_test_case_2(void)
4926 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_2);
4930 test_mb_AES_GCM_authenticated_decryption_test_case_3(void)
4932 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_3);
4936 test_mb_AES_GCM_authenticated_decryption_test_case_4(void)
4938 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_4);
4942 test_mb_AES_GCM_authenticated_decryption_test_case_5(void)
4944 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_5);
4948 test_mb_AES_GCM_authenticated_decryption_test_case_6(void)
4950 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_6);
4954 test_mb_AES_GCM_authenticated_decryption_test_case_7(void)
4956 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_7);
4960 test_mb_AES_GCM_auth_decryption_test_case_256_1(void)
4962 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_1);
4966 test_mb_AES_GCM_auth_decryption_test_case_256_2(void)
4968 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_2);
4972 test_mb_AES_GCM_auth_decryption_test_case_256_3(void)
4974 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_3);
4978 test_mb_AES_GCM_auth_decryption_test_case_256_4(void)
4980 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_4);
4984 test_mb_AES_GCM_auth_decryption_test_case_256_5(void)
4986 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_5);
4990 test_mb_AES_GCM_auth_decryption_test_case_256_6(void)
4992 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_6);
4996 test_mb_AES_GCM_auth_decryption_test_case_256_7(void)
4998 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_256_7);
5002 test_mb_AES_GCM_auth_decryption_test_case_aad_1(void)
5004 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_aad_1);
5008 test_mb_AES_GCM_auth_decryption_test_case_aad_2(void)
5010 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_aad_2);
5014 test_AES_GCM_authenticated_encryption_oop(const struct gcm_test_data *tdata)
5016 struct crypto_testsuite_params *ts_params = &testsuite_params;
5017 struct crypto_unittest_params *ut_params = &unittest_params;
5020 uint8_t *ciphertext, *auth_tag;
5021 uint16_t plaintext_pad_len;
5023 /* Create GCM session */
5024 retval = create_gcm_session(ts_params->valid_devs[0],
5025 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5026 tdata->key.data, tdata->key.len,
5027 tdata->aad.len, tdata->auth_tag.len,
5028 RTE_CRYPTO_AUTH_OP_GENERATE);
5032 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5033 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5035 /* clear mbuf payload */
5036 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5037 rte_pktmbuf_tailroom(ut_params->ibuf));
5038 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5039 rte_pktmbuf_tailroom(ut_params->obuf));
5041 /* Create GCM operation */
5042 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
5046 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5048 ut_params->op->sym->m_src = ut_params->ibuf;
5049 ut_params->op->sym->m_dst = ut_params->obuf;
5051 /* Process crypto operation */
5052 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5053 ut_params->op), "failed to process sym crypto op");
5055 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5056 "crypto op processing failed");
5058 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5060 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5061 ut_params->op->sym->cipher.data.offset);
5062 auth_tag = ciphertext + plaintext_pad_len;
5064 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5065 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5068 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5070 tdata->ciphertext.data,
5071 tdata->ciphertext.len,
5072 "GCM Ciphertext data not as expected");
5074 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5076 tdata->auth_tag.data,
5077 tdata->auth_tag.len,
5078 "GCM Generated auth tag not as expected");
5085 test_mb_AES_GCM_authenticated_encryption_oop(void)
5087 return test_AES_GCM_authenticated_encryption_oop(&gcm_test_case_5);
5091 test_AES_GCM_authenticated_decryption_oop(const struct gcm_test_data *tdata)
5093 struct crypto_testsuite_params *ts_params = &testsuite_params;
5094 struct crypto_unittest_params *ut_params = &unittest_params;
5099 /* Create GCM session */
5100 retval = create_gcm_session(ts_params->valid_devs[0],
5101 RTE_CRYPTO_CIPHER_OP_DECRYPT,
5102 tdata->key.data, tdata->key.len,
5103 tdata->aad.len, tdata->auth_tag.len,
5104 RTE_CRYPTO_AUTH_OP_VERIFY);
5108 /* alloc mbuf and set payload */
5109 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5110 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5112 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5113 rte_pktmbuf_tailroom(ut_params->ibuf));
5114 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
5115 rte_pktmbuf_tailroom(ut_params->obuf));
5117 /* Create GCM operation */
5118 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
5122 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5124 ut_params->op->sym->m_src = ut_params->ibuf;
5125 ut_params->op->sym->m_dst = ut_params->obuf;
5127 /* Process crypto operation */
5128 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5129 ut_params->op), "failed to process sym crypto op");
5131 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5132 "crypto op processing failed");
5134 plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *,
5135 ut_params->op->sym->cipher.data.offset);
5137 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5140 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5142 tdata->plaintext.data,
5143 tdata->plaintext.len,
5144 "GCM plaintext data not as expected");
5146 TEST_ASSERT_EQUAL(ut_params->op->status,
5147 RTE_CRYPTO_OP_STATUS_SUCCESS,
5148 "GCM authentication failed");
5153 test_mb_AES_GCM_authenticated_decryption_oop(void)
5155 return test_AES_GCM_authenticated_decryption_oop(&gcm_test_case_5);
5159 test_AES_GCM_authenticated_encryption_sessionless(
5160 const struct gcm_test_data *tdata)
5162 struct crypto_testsuite_params *ts_params = &testsuite_params;
5163 struct crypto_unittest_params *ut_params = &unittest_params;
5166 uint8_t *ciphertext, *auth_tag;
5167 uint16_t plaintext_pad_len;
5168 uint8_t key[tdata->key.len + 1];
5170 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5172 /* clear mbuf payload */
5173 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5174 rte_pktmbuf_tailroom(ut_params->ibuf));
5176 /* Create GCM operation */
5177 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT, tdata);
5181 /* Create GCM xforms */
5182 memcpy(key, tdata->key.data, tdata->key.len);
5183 retval = create_gcm_xforms(ut_params->op,
5184 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5185 key, tdata->key.len,
5186 tdata->aad.len, tdata->auth_tag.len,
5187 RTE_CRYPTO_AUTH_OP_GENERATE);
5191 ut_params->op->sym->m_src = ut_params->ibuf;
5193 TEST_ASSERT_EQUAL(ut_params->op->sym->sess_type,
5194 RTE_CRYPTO_SYM_OP_SESSIONLESS,
5195 "crypto op session type not sessionless");
5197 /* Process crypto operation */
5198 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5199 ut_params->op), "failed to process sym crypto op");
5201 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5203 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5204 "crypto op status not success");
5206 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
5208 ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5209 ut_params->op->sym->cipher.data.offset);
5210 auth_tag = ciphertext + plaintext_pad_len;
5212 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
5213 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
5216 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5218 tdata->ciphertext.data,
5219 tdata->ciphertext.len,
5220 "GCM Ciphertext data not as expected");
5222 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5224 tdata->auth_tag.data,
5225 tdata->auth_tag.len,
5226 "GCM Generated auth tag not as expected");
5233 test_mb_AES_GCM_authenticated_encryption_sessionless(void)
5235 return test_AES_GCM_authenticated_encryption_sessionless(
5240 test_AES_GCM_authenticated_decryption_sessionless(
5241 const struct gcm_test_data *tdata)
5243 struct crypto_testsuite_params *ts_params = &testsuite_params;
5244 struct crypto_unittest_params *ut_params = &unittest_params;
5248 uint8_t key[tdata->key.len + 1];
5250 /* alloc mbuf and set payload */
5251 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5253 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5254 rte_pktmbuf_tailroom(ut_params->ibuf));
5256 /* Create GCM operation */
5257 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT, tdata);
5261 /* Create GCM xforms */
5262 memcpy(key, tdata->key.data, tdata->key.len);
5263 retval = create_gcm_xforms(ut_params->op,
5264 RTE_CRYPTO_CIPHER_OP_DECRYPT,
5265 key, tdata->key.len,
5266 tdata->aad.len, tdata->auth_tag.len,
5267 RTE_CRYPTO_AUTH_OP_VERIFY);
5271 ut_params->op->sym->m_src = ut_params->ibuf;
5273 TEST_ASSERT_EQUAL(ut_params->op->sym->sess_type,
5274 RTE_CRYPTO_SYM_OP_SESSIONLESS,
5275 "crypto op session type not sessionless");
5277 /* Process crypto operation */
5278 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5279 ut_params->op), "failed to process sym crypto op");
5281 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5283 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5284 "crypto op status not success");
5286 plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *,
5287 ut_params->op->sym->cipher.data.offset);
5289 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
5292 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5294 tdata->plaintext.data,
5295 tdata->plaintext.len,
5296 "GCM plaintext data not as expected");
5298 TEST_ASSERT_EQUAL(ut_params->op->status,
5299 RTE_CRYPTO_OP_STATUS_SUCCESS,
5300 "GCM authentication failed");
5305 test_mb_AES_GCM_authenticated_decryption_sessionless(void)
5307 return test_AES_GCM_authenticated_decryption_sessionless(
5314 struct crypto_testsuite_params *ts_params = &testsuite_params;
5315 struct rte_cryptodev_stats stats;
5316 struct rte_cryptodev *dev;
5317 cryptodev_stats_get_t temp_pfn;
5319 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5320 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
5321 &stats) == -ENODEV),
5322 "rte_cryptodev_stats_get invalid dev failed");
5323 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
5324 "rte_cryptodev_stats_get invalid Param failed");
5325 dev = &rte_cryptodevs[ts_params->valid_devs[0]];
5326 temp_pfn = dev->dev_ops->stats_get;
5327 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
5328 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
5330 "rte_cryptodev_stats_get invalid Param failed");
5331 dev->dev_ops->stats_get = temp_pfn;
5333 /* Test expected values */
5335 test_AES_CBC_HMAC_SHA1_encrypt_digest();
5337 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5339 "rte_cryptodev_stats_get failed");
5340 TEST_ASSERT((stats.enqueued_count == 1),
5341 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5342 TEST_ASSERT((stats.dequeued_count == 1),
5343 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5344 TEST_ASSERT((stats.enqueue_err_count == 0),
5345 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5346 TEST_ASSERT((stats.dequeue_err_count == 0),
5347 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5349 /* invalid device but should ignore and not reset device stats*/
5350 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
5351 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5353 "rte_cryptodev_stats_get failed");
5354 TEST_ASSERT((stats.enqueued_count == 1),
5355 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5357 /* check that a valid reset clears stats */
5358 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
5359 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
5361 "rte_cryptodev_stats_get failed");
5362 TEST_ASSERT((stats.enqueued_count == 0),
5363 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5364 TEST_ASSERT((stats.dequeued_count == 0),
5365 "rte_cryptodev_stats_get returned unexpected enqueued stat");
5367 return TEST_SUCCESS;
5370 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
5371 struct crypto_unittest_params *ut_params,
5372 enum rte_crypto_auth_operation op,
5373 const struct HMAC_MD5_vector *test_case)
5377 memcpy(key, test_case->key.data, test_case->key.len);
5379 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5380 ut_params->auth_xform.next = NULL;
5381 ut_params->auth_xform.auth.op = op;
5383 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
5385 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
5386 ut_params->auth_xform.auth.add_auth_data_length = 0;
5387 ut_params->auth_xform.auth.key.length = test_case->key.len;
5388 ut_params->auth_xform.auth.key.data = key;
5390 ut_params->sess = rte_cryptodev_sym_session_create(
5391 ts_params->valid_devs[0], &ut_params->auth_xform);
5393 if (ut_params->sess == NULL)
5396 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5398 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5399 rte_pktmbuf_tailroom(ut_params->ibuf));
5404 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
5405 const struct HMAC_MD5_vector *test_case,
5406 uint8_t **plaintext)
5408 uint16_t plaintext_pad_len;
5410 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5412 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5415 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5417 memcpy(*plaintext, test_case->plaintext.data,
5418 test_case->plaintext.len);
5420 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5421 ut_params->ibuf, MD5_DIGEST_LEN);
5422 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5423 "no room to append digest");
5424 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5425 ut_params->ibuf, plaintext_pad_len);
5426 sym_op->auth.digest.length = MD5_DIGEST_LEN;
5428 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
5429 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
5430 test_case->auth_tag.len);
5433 sym_op->auth.data.offset = 0;
5434 sym_op->auth.data.length = test_case->plaintext.len;
5436 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5437 ut_params->op->sym->m_src = ut_params->ibuf;
5443 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
5445 uint16_t plaintext_pad_len;
5446 uint8_t *plaintext, *auth_tag;
5448 struct crypto_testsuite_params *ts_params = &testsuite_params;
5449 struct crypto_unittest_params *ut_params = &unittest_params;
5451 if (MD5_HMAC_create_session(ts_params, ut_params,
5452 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
5455 /* Generate Crypto op data structure */
5456 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5457 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5458 TEST_ASSERT_NOT_NULL(ut_params->op,
5459 "Failed to allocate symmetric crypto operation struct");
5461 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
5464 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5467 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5468 ut_params->op), "failed to process sym crypto op");
5470 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5471 "crypto op processing failed");
5473 if (ut_params->op->sym->m_dst) {
5474 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
5475 uint8_t *, plaintext_pad_len);
5477 auth_tag = plaintext + plaintext_pad_len;
5480 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5482 test_case->auth_tag.data,
5483 test_case->auth_tag.len,
5484 "HMAC_MD5 generated tag not as expected");
5486 return TEST_SUCCESS;
5490 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
5494 struct crypto_testsuite_params *ts_params = &testsuite_params;
5495 struct crypto_unittest_params *ut_params = &unittest_params;
5497 if (MD5_HMAC_create_session(ts_params, ut_params,
5498 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
5502 /* Generate Crypto op data structure */
5503 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5504 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5505 TEST_ASSERT_NOT_NULL(ut_params->op,
5506 "Failed to allocate symmetric crypto operation struct");
5508 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
5511 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5512 ut_params->op), "failed to process sym crypto op");
5514 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5515 "HMAC_MD5 crypto op processing failed");
5517 return TEST_SUCCESS;
5521 test_MD5_HMAC_generate_case_1(void)
5523 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
5527 test_MD5_HMAC_verify_case_1(void)
5529 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
5533 test_MD5_HMAC_generate_case_2(void)
5535 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
5539 test_MD5_HMAC_verify_case_2(void)
5541 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
5545 test_multi_session(void)
5547 struct crypto_testsuite_params *ts_params = &testsuite_params;
5548 struct crypto_unittest_params *ut_params = &unittest_params;
5550 struct rte_cryptodev_info dev_info;
5551 struct rte_cryptodev_sym_session **sessions;
5555 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
5556 aes_cbc_key, hmac_sha512_key);
5559 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5561 sessions = rte_malloc(NULL,
5562 (sizeof(struct rte_cryptodev_sym_session *) *
5563 dev_info.sym.max_nb_sessions) + 1, 0);
5565 /* Create multiple crypto sessions*/
5566 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
5567 sessions[i] = rte_cryptodev_sym_session_create(
5568 ts_params->valid_devs[0],
5569 &ut_params->auth_xform);
5570 TEST_ASSERT_NOT_NULL(sessions[i],
5571 "Session creation failed at session number %u",
5574 /* Attempt to send a request on each session */
5575 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
5579 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
5580 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
5582 "Failed to perform decrypt on request number %u.", i);
5583 /* free crypto operation structure */
5585 rte_crypto_op_free(ut_params->op);
5588 * free mbuf - both obuf and ibuf are usually the same,
5589 * so check if they point at the same address is necessary,
5590 * to avoid freeing the mbuf twice.
5592 if (ut_params->obuf) {
5593 rte_pktmbuf_free(ut_params->obuf);
5594 if (ut_params->ibuf == ut_params->obuf)
5595 ut_params->ibuf = 0;
5596 ut_params->obuf = 0;
5598 if (ut_params->ibuf) {
5599 rte_pktmbuf_free(ut_params->ibuf);
5600 ut_params->ibuf = 0;
5604 /* Next session create should fail */
5605 sessions[i] = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
5606 &ut_params->auth_xform);
5607 TEST_ASSERT_NULL(sessions[i],
5608 "Session creation succeeded unexpectedly!");
5610 for (i = 0; i < dev_info.sym.max_nb_sessions; i++)
5611 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
5616 return TEST_SUCCESS;
5619 struct multi_session_params {
5620 struct crypto_unittest_params ut_params;
5621 uint8_t *cipher_key;
5623 const uint8_t *cipher;
5624 const uint8_t *digest;
5628 #define MB_SESSION_NUMBER 3
5631 test_multi_session_random_usage(void)
5633 struct crypto_testsuite_params *ts_params = &testsuite_params;
5634 struct rte_cryptodev_info dev_info;
5635 struct rte_cryptodev_sym_session **sessions;
5637 struct multi_session_params ut_paramz[] = {
5640 .cipher_key = ms_aes_cbc_key0,
5641 .hmac_key = ms_hmac_key0,
5642 .cipher = ms_aes_cbc_cipher0,
5643 .digest = ms_hmac_digest0,
5644 .iv = ms_aes_cbc_iv0
5647 .cipher_key = ms_aes_cbc_key1,
5648 .hmac_key = ms_hmac_key1,
5649 .cipher = ms_aes_cbc_cipher1,
5650 .digest = ms_hmac_digest1,
5651 .iv = ms_aes_cbc_iv1
5654 .cipher_key = ms_aes_cbc_key2,
5655 .hmac_key = ms_hmac_key2,
5656 .cipher = ms_aes_cbc_cipher2,
5657 .digest = ms_hmac_digest2,
5658 .iv = ms_aes_cbc_iv2
5663 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
5665 sessions = rte_malloc(NULL,
5666 (sizeof(struct rte_cryptodev_sym_session *)
5667 * dev_info.sym.max_nb_sessions) + 1, 0);
5669 for (i = 0; i < MB_SESSION_NUMBER; i++) {
5670 rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
5671 sizeof(struct crypto_unittest_params));
5673 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
5674 &ut_paramz[i].ut_params,
5675 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
5677 /* Create multiple crypto sessions*/
5678 sessions[i] = rte_cryptodev_sym_session_create(
5679 ts_params->valid_devs[0],
5680 &ut_paramz[i].ut_params.auth_xform);
5682 TEST_ASSERT_NOT_NULL(sessions[i],
5683 "Session creation failed at session number %u",
5689 for (i = 0; i < 40000; i++) {
5691 j = rand() % MB_SESSION_NUMBER;
5693 TEST_ASSERT_SUCCESS(
5694 test_AES_CBC_HMAC_SHA512_decrypt_perform(
5696 &ut_paramz[j].ut_params,
5697 ts_params, ut_paramz[j].cipher,
5698 ut_paramz[j].digest,
5700 "Failed to perform decrypt on request number %u.", i);
5702 if (ut_paramz[j].ut_params.op)
5703 rte_crypto_op_free(ut_paramz[j].ut_params.op);
5706 * free mbuf - both obuf and ibuf are usually the same,
5707 * so check if they point at the same address is necessary,
5708 * to avoid freeing the mbuf twice.
5710 if (ut_paramz[j].ut_params.obuf) {
5711 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
5712 if (ut_paramz[j].ut_params.ibuf
5713 == ut_paramz[j].ut_params.obuf)
5714 ut_paramz[j].ut_params.ibuf = 0;
5715 ut_paramz[j].ut_params.obuf = 0;
5717 if (ut_paramz[j].ut_params.ibuf) {
5718 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
5719 ut_paramz[j].ut_params.ibuf = 0;
5723 for (i = 0; i < MB_SESSION_NUMBER; i++)
5724 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
5729 return TEST_SUCCESS;
5733 test_null_cipher_only_operation(void)
5735 struct crypto_testsuite_params *ts_params = &testsuite_params;
5736 struct crypto_unittest_params *ut_params = &unittest_params;
5738 /* Generate test mbuf data and space for digest */
5739 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5740 catch_22_quote, QUOTE_512_BYTES, 0);
5742 /* Setup Cipher Parameters */
5743 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5744 ut_params->cipher_xform.next = NULL;
5746 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5747 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5749 /* Create Crypto session*/
5750 ut_params->sess = rte_cryptodev_sym_session_create(
5751 ts_params->valid_devs[0], &ut_params->cipher_xform);
5752 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5754 /* Generate Crypto op data structure */
5755 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5756 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5757 TEST_ASSERT_NOT_NULL(ut_params->op,
5758 "Failed to allocate symmetric crypto operation struct");
5760 /* Set crypto operation data parameters */
5761 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5763 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5765 /* set crypto operation source mbuf */
5766 sym_op->m_src = ut_params->ibuf;
5768 sym_op->cipher.data.offset = 0;
5769 sym_op->cipher.data.length = QUOTE_512_BYTES;
5771 /* Process crypto operation */
5772 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5774 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5776 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5777 "crypto operation processing failed");
5780 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5781 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5784 "Ciphertext data not as expected");
5786 return TEST_SUCCESS;
5790 test_null_auth_only_operation(void)
5792 struct crypto_testsuite_params *ts_params = &testsuite_params;
5793 struct crypto_unittest_params *ut_params = &unittest_params;
5795 /* Generate test mbuf data and space for digest */
5796 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5797 catch_22_quote, QUOTE_512_BYTES, 0);
5799 /* Setup HMAC Parameters */
5800 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5801 ut_params->auth_xform.next = NULL;
5803 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5804 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5806 /* Create Crypto session*/
5807 ut_params->sess = rte_cryptodev_sym_session_create(
5808 ts_params->valid_devs[0], &ut_params->auth_xform);
5809 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5811 /* Generate Crypto op data structure */
5812 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5813 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5814 TEST_ASSERT_NOT_NULL(ut_params->op,
5815 "Failed to allocate symmetric crypto operation struct");
5817 /* Set crypto operation data parameters */
5818 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5820 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5822 sym_op->m_src = ut_params->ibuf;
5824 sym_op->auth.data.offset = 0;
5825 sym_op->auth.data.length = QUOTE_512_BYTES;
5827 /* Process crypto operation */
5828 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5830 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5832 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5833 "crypto operation processing failed");
5835 return TEST_SUCCESS;
5839 test_null_cipher_auth_operation(void)
5841 struct crypto_testsuite_params *ts_params = &testsuite_params;
5842 struct crypto_unittest_params *ut_params = &unittest_params;
5844 /* Generate test mbuf data and space for digest */
5845 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5846 catch_22_quote, QUOTE_512_BYTES, 0);
5848 /* Setup Cipher Parameters */
5849 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5850 ut_params->cipher_xform.next = &ut_params->auth_xform;
5852 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5853 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5855 /* Setup HMAC Parameters */
5856 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5857 ut_params->auth_xform.next = NULL;
5859 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5860 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5862 /* Create Crypto session*/
5863 ut_params->sess = rte_cryptodev_sym_session_create(
5864 ts_params->valid_devs[0], &ut_params->cipher_xform);
5865 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5867 /* Generate Crypto op data structure */
5868 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5869 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5870 TEST_ASSERT_NOT_NULL(ut_params->op,
5871 "Failed to allocate symmetric crypto operation struct");
5873 /* Set crypto operation data parameters */
5874 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5876 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5878 sym_op->m_src = ut_params->ibuf;
5880 sym_op->cipher.data.offset = 0;
5881 sym_op->cipher.data.length = QUOTE_512_BYTES;
5883 sym_op->auth.data.offset = 0;
5884 sym_op->auth.data.length = QUOTE_512_BYTES;
5886 /* Process crypto operation */
5887 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5889 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5891 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5892 "crypto operation processing failed");
5895 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5896 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5899 "Ciphertext data not as expected");
5901 return TEST_SUCCESS;
5905 test_null_auth_cipher_operation(void)
5907 struct crypto_testsuite_params *ts_params = &testsuite_params;
5908 struct crypto_unittest_params *ut_params = &unittest_params;
5910 /* Generate test mbuf data and space for digest */
5911 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
5912 catch_22_quote, QUOTE_512_BYTES, 0);
5914 /* Setup Cipher Parameters */
5915 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5916 ut_params->cipher_xform.next = NULL;
5918 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
5919 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5921 /* Setup HMAC Parameters */
5922 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5923 ut_params->auth_xform.next = &ut_params->cipher_xform;
5925 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
5926 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5928 /* Create Crypto session*/
5929 ut_params->sess = rte_cryptodev_sym_session_create(
5930 ts_params->valid_devs[0], &ut_params->cipher_xform);
5931 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5933 /* Generate Crypto op data structure */
5934 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5935 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5936 TEST_ASSERT_NOT_NULL(ut_params->op,
5937 "Failed to allocate symmetric crypto operation struct");
5939 /* Set crypto operation data parameters */
5940 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5942 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5944 sym_op->m_src = ut_params->ibuf;
5946 sym_op->cipher.data.offset = 0;
5947 sym_op->cipher.data.length = QUOTE_512_BYTES;
5949 sym_op->auth.data.offset = 0;
5950 sym_op->auth.data.length = QUOTE_512_BYTES;
5952 /* Process crypto operation */
5953 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5955 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
5957 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5958 "crypto operation processing failed");
5961 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5962 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
5965 "Ciphertext data not as expected");
5967 return TEST_SUCCESS;
5972 test_null_invalid_operation(void)
5974 struct crypto_testsuite_params *ts_params = &testsuite_params;
5975 struct crypto_unittest_params *ut_params = &unittest_params;
5977 /* Setup Cipher Parameters */
5978 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5979 ut_params->cipher_xform.next = NULL;
5981 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
5982 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
5984 /* Create Crypto session*/
5985 ut_params->sess = rte_cryptodev_sym_session_create(
5986 ts_params->valid_devs[0], &ut_params->cipher_xform);
5987 TEST_ASSERT_NULL(ut_params->sess,
5988 "Session creation succeeded unexpectedly");
5991 /* Setup HMAC Parameters */
5992 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5993 ut_params->auth_xform.next = NULL;
5995 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
5996 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
5998 /* Create Crypto session*/
5999 ut_params->sess = rte_cryptodev_sym_session_create(
6000 ts_params->valid_devs[0], &ut_params->auth_xform);
6001 TEST_ASSERT_NULL(ut_params->sess,
6002 "Session creation succeeded unexpectedly");
6004 return TEST_SUCCESS;
6008 #define NULL_BURST_LENGTH (32)
6011 test_null_burst_operation(void)
6013 struct crypto_testsuite_params *ts_params = &testsuite_params;
6014 struct crypto_unittest_params *ut_params = &unittest_params;
6016 unsigned i, burst_len = NULL_BURST_LENGTH;
6018 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
6019 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
6021 /* Setup Cipher Parameters */
6022 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6023 ut_params->cipher_xform.next = &ut_params->auth_xform;
6025 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
6026 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
6028 /* Setup HMAC Parameters */
6029 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6030 ut_params->auth_xform.next = NULL;
6032 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
6033 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
6035 /* Create Crypto session*/
6036 ut_params->sess = rte_cryptodev_sym_session_create(
6037 ts_params->valid_devs[0], &ut_params->cipher_xform);
6038 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6040 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
6041 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
6042 burst_len, "failed to generate burst of crypto ops");
6044 /* Generate an operation for each mbuf in burst */
6045 for (i = 0; i < burst_len; i++) {
6046 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6048 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
6050 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
6054 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
6056 burst[i]->sym->m_src = m;
6059 /* Process crypto operation */
6060 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
6061 0, burst, burst_len),
6063 "Error enqueuing burst");
6065 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
6066 0, burst_dequeued, burst_len),
6068 "Error dequeuing burst");
6071 for (i = 0; i < burst_len; i++) {
6073 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
6074 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
6076 "data not as expected");
6078 rte_pktmbuf_free(burst[i]->sym->m_src);
6079 rte_crypto_op_free(burst[i]);
6082 return TEST_SUCCESS;
6086 generate_gmac_large_plaintext(uint8_t *data)
6090 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
6091 memcpy(&data[i], &data[0], 32);
6095 create_gmac_operation(enum rte_crypto_auth_operation op,
6096 const struct gmac_test_data *tdata)
6098 struct crypto_testsuite_params *ts_params = &testsuite_params;
6099 struct crypto_unittest_params *ut_params = &unittest_params;
6100 struct rte_crypto_sym_op *sym_op;
6102 unsigned iv_pad_len;
6103 unsigned aad_pad_len;
6105 iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
6106 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
6109 * Runtime generate the large plain text instead of use hard code
6110 * plain text vector. It is done to avoid create huge source file
6111 * with the test vector.
6113 if (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)
6114 generate_gmac_large_plaintext(tdata->aad.data);
6116 /* Generate Crypto op data structure */
6117 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6118 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6119 TEST_ASSERT_NOT_NULL(ut_params->op,
6120 "Failed to allocate symmetric crypto operation struct");
6122 sym_op = ut_params->op->sym;
6123 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6125 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
6126 "no room to append aad");
6128 sym_op->auth.aad.length = tdata->aad.len;
6129 sym_op->auth.aad.phys_addr =
6130 rte_pktmbuf_mtophys(ut_params->ibuf);
6131 memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
6133 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6134 ut_params->ibuf, tdata->gmac_tag.len);
6135 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6136 "no room to append digest");
6138 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6139 ut_params->ibuf, aad_pad_len);
6140 sym_op->auth.digest.length = tdata->gmac_tag.len;
6142 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
6143 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
6144 tdata->gmac_tag.len);
6145 TEST_HEXDUMP(stdout, "digest:",
6146 sym_op->auth.digest.data,
6147 sym_op->auth.digest.length);
6150 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6151 ut_params->ibuf, iv_pad_len);
6152 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6154 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
6155 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6156 sym_op->cipher.iv.length = tdata->iv.len;
6158 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
6160 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
6162 sym_op->cipher.data.length = 0;
6163 sym_op->cipher.data.offset = 0;
6165 sym_op->auth.data.offset = 0;
6166 sym_op->auth.data.length = 0;
6171 static int create_gmac_session(uint8_t dev_id,
6172 enum rte_crypto_cipher_operation op,
6173 const struct gmac_test_data *tdata,
6174 enum rte_crypto_auth_operation auth_op)
6176 uint8_t cipher_key[tdata->key.len];
6178 struct crypto_unittest_params *ut_params = &unittest_params;
6180 memcpy(cipher_key, tdata->key.data, tdata->key.len);
6182 /* For GMAC we setup cipher parameters */
6183 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6184 ut_params->cipher_xform.next = NULL;
6185 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
6186 ut_params->cipher_xform.cipher.op = op;
6187 ut_params->cipher_xform.cipher.key.data = cipher_key;
6188 ut_params->cipher_xform.cipher.key.length = tdata->key.len;
6190 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6191 ut_params->auth_xform.next = NULL;
6193 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
6194 ut_params->auth_xform.auth.op = auth_op;
6195 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
6196 ut_params->auth_xform.auth.add_auth_data_length = 0;
6197 ut_params->auth_xform.auth.key.length = 0;
6198 ut_params->auth_xform.auth.key.data = NULL;
6200 ut_params->cipher_xform.next = &ut_params->auth_xform;
6202 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6203 &ut_params->cipher_xform);
6205 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6211 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
6213 struct crypto_testsuite_params *ts_params = &testsuite_params;
6214 struct crypto_unittest_params *ut_params = &unittest_params;
6218 uint8_t *auth_tag, *p;
6219 uint16_t aad_pad_len;
6221 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6222 "No GMAC length in the source data");
6224 retval = create_gmac_session(ts_params->valid_devs[0],
6225 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
6226 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
6231 if (tdata->aad.len > MBUF_SIZE)
6232 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6234 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6235 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6236 "Failed to allocate input buffer in mempool");
6238 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6239 rte_pktmbuf_tailroom(ut_params->ibuf));
6241 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
6243 p = rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *);
6245 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
6251 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6253 ut_params->op->sym->m_src = ut_params->ibuf;
6255 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6256 ut_params->op), "failed to process sym crypto op");
6258 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6259 "crypto op processing failed");
6261 if (ut_params->op->sym->m_dst) {
6262 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
6263 uint8_t *, aad_pad_len);
6265 auth_tag = p + aad_pad_len;
6268 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
6270 TEST_ASSERT_BUFFERS_ARE_EQUAL(
6272 tdata->gmac_tag.data,
6273 tdata->gmac_tag.len,
6274 "GMAC Generated auth tag not as expected");
6280 test_AES_GMAC_authentication_test_case_1(void)
6282 return test_AES_GMAC_authentication(&gmac_test_case_1);
6286 test_AES_GMAC_authentication_test_case_2(void)
6288 return test_AES_GMAC_authentication(&gmac_test_case_2);
6292 test_AES_GMAC_authentication_test_case_3(void)
6294 return test_AES_GMAC_authentication(&gmac_test_case_3);
6298 test_AES_GMAC_authentication_test_case_4(void)
6300 return test_AES_GMAC_authentication(&gmac_test_case_4);
6304 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
6306 struct crypto_testsuite_params *ts_params = &testsuite_params;
6307 struct crypto_unittest_params *ut_params = &unittest_params;
6310 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
6311 "No GMAC length in the source data");
6313 retval = create_gmac_session(ts_params->valid_devs[0],
6314 RTE_CRYPTO_CIPHER_OP_DECRYPT,
6315 tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
6320 if (tdata->aad.len > MBUF_SIZE)
6321 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
6323 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6324 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6325 "Failed to allocate input buffer in mempool");
6327 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6328 rte_pktmbuf_tailroom(ut_params->ibuf));
6330 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
6336 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6338 ut_params->op->sym->m_src = ut_params->ibuf;
6340 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
6341 ut_params->op), "failed to process sym crypto op");
6343 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
6344 "crypto op processing failed");
6351 test_AES_GMAC_authentication_verify_test_case_1(void)
6353 return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
6357 test_AES_GMAC_authentication_verify_test_case_2(void)
6359 return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
6363 test_AES_GMAC_authentication_verify_test_case_3(void)
6365 return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
6369 test_AES_GMAC_authentication_verify_test_case_4(void)
6371 return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
6374 struct test_crypto_vector {
6375 enum rte_crypto_cipher_algorithm crypto_algo;
6388 const uint8_t *data;
6393 const uint8_t *data;
6397 enum rte_crypto_auth_algorithm auth_algo;
6405 const uint8_t *data;
6415 static const struct test_crypto_vector
6416 hmac_sha1_test_crypto_vector = {
6417 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6419 .data = plaintext_hash,
6424 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6425 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6426 0xDE, 0xF4, 0xDE, 0xAD
6432 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
6433 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
6434 0x3F, 0x91, 0x64, 0x59
6440 static const struct test_crypto_vector
6441 aes128_gmac_test_vector = {
6442 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
6443 .crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,
6445 .data = plaintext_hash,
6450 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6451 0x08, 0x09, 0x0A, 0x0B
6457 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6458 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
6464 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
6465 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
6471 static const struct test_crypto_vector
6472 aes128cbc_hmac_sha1_test_vector = {
6473 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
6476 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
6477 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
6483 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6484 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
6489 .data = plaintext_hash,
6493 .data = ciphertext512_aes128cbc,
6496 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
6499 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
6500 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
6501 0xDE, 0xF4, 0xDE, 0xAD
6507 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
6508 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
6509 0x18, 0x8C, 0x1D, 0x32
6516 data_corruption(uint8_t *data)
6522 tag_corruption(uint8_t *data, unsigned int tag_offset)
6524 data[tag_offset] += 1;
6528 create_auth_session(struct crypto_unittest_params *ut_params,
6530 const struct test_crypto_vector *reference,
6531 enum rte_crypto_auth_operation auth_op)
6533 uint8_t auth_key[reference->auth_key.len + 1];
6535 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6537 /* Setup Authentication Parameters */
6538 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6539 ut_params->auth_xform.auth.op = auth_op;
6540 ut_params->auth_xform.next = NULL;
6541 ut_params->auth_xform.auth.algo = reference->auth_algo;
6542 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6543 ut_params->auth_xform.auth.key.data = auth_key;
6544 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6545 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
6547 /* Create Crypto session*/
6548 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6549 &ut_params->auth_xform);
6551 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6557 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
6559 const struct test_crypto_vector *reference,
6560 enum rte_crypto_auth_operation auth_op,
6561 enum rte_crypto_cipher_operation cipher_op)
6563 uint8_t cipher_key[reference->cipher_key.len + 1];
6564 uint8_t auth_key[reference->auth_key.len + 1];
6566 memcpy(cipher_key, reference->cipher_key.data,
6567 reference->cipher_key.len);
6568 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
6570 /* Setup Authentication Parameters */
6571 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
6572 ut_params->auth_xform.auth.op = auth_op;
6573 ut_params->auth_xform.next = &ut_params->cipher_xform;
6574 ut_params->auth_xform.auth.algo = reference->auth_algo;
6575 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
6576 ut_params->auth_xform.auth.key.data = auth_key;
6577 ut_params->auth_xform.auth.digest_length = reference->digest.len;
6578 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
6580 /* Setup Cipher Parameters */
6581 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
6582 ut_params->cipher_xform.next = NULL;
6583 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
6584 ut_params->cipher_xform.cipher.op = cipher_op;
6585 ut_params->cipher_xform.cipher.key.data = cipher_key;
6586 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
6588 /* Create Crypto session*/
6589 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
6590 &ut_params->auth_xform);
6592 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
6598 create_auth_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.digest.data = (uint8_t *)rte_pktmbuf_append(
6619 ut_params->ibuf, reference->digest.len);
6621 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6622 "no room to append auth tag");
6624 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6625 ut_params->ibuf, reference->plaintext.len);
6626 sym_op->auth.digest.length = reference->digest.len;
6629 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6631 memcpy(sym_op->auth.digest.data,
6632 reference->digest.data,
6633 reference->digest.len);
6635 TEST_HEXDUMP(stdout, "digest:",
6636 sym_op->auth.digest.data,
6637 sym_op->auth.digest.length);
6639 sym_op->auth.data.length = reference->plaintext.len;
6640 sym_op->auth.data.offset = 0;
6646 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
6647 struct crypto_unittest_params *ut_params,
6648 const struct test_crypto_vector *reference,
6649 unsigned int auth_generate)
6651 /* Generate Crypto op data structure */
6652 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6653 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6654 TEST_ASSERT_NOT_NULL(ut_params->op,
6655 "Failed to allocate pktmbuf offload");
6657 /* Set crypto operation data parameters */
6658 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6660 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6662 /* set crypto operation source mbuf */
6663 sym_op->m_src = ut_params->ibuf;
6666 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6667 reference->aad.len);
6668 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, "no room to append AAD");
6669 memcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);
6671 TEST_HEXDUMP(stdout, "AAD:", sym_op->auth.aad.data, reference->aad.len);
6673 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6674 sym_op->auth.aad.length = reference->aad.len;
6677 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6678 ut_params->ibuf, reference->digest.len);
6680 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6681 "no room to append auth tag");
6683 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6684 ut_params->ibuf, reference->ciphertext.len);
6685 sym_op->auth.digest.length = reference->digest.len;
6688 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6690 memcpy(sym_op->auth.digest.data,
6691 reference->digest.data,
6692 reference->digest.len);
6694 TEST_HEXDUMP(stdout, "digest:",
6695 sym_op->auth.digest.data,
6696 sym_op->auth.digest.length);
6698 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6699 ut_params->ibuf, reference->iv.len);
6700 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6702 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6703 sym_op->cipher.iv.length = reference->iv.len;
6705 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
6707 sym_op->cipher.data.length = 0;
6708 sym_op->cipher.data.offset = 0;
6710 sym_op->auth.data.length = 0;
6711 sym_op->auth.data.offset = 0;
6717 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
6718 struct crypto_unittest_params *ut_params,
6719 const struct test_crypto_vector *reference,
6720 unsigned int auth_generate)
6722 /* Generate Crypto op data structure */
6723 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6724 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6725 TEST_ASSERT_NOT_NULL(ut_params->op,
6726 "Failed to allocate pktmbuf offload");
6728 /* Set crypto operation data parameters */
6729 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
6731 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6733 /* set crypto operation source mbuf */
6734 sym_op->m_src = ut_params->ibuf;
6737 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
6738 ut_params->ibuf, reference->digest.len);
6740 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6741 "no room to append auth tag");
6743 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
6744 ut_params->ibuf, reference->ciphertext.len);
6745 sym_op->auth.digest.length = reference->digest.len;
6748 memset(sym_op->auth.digest.data, 0, reference->digest.len);
6750 memcpy(sym_op->auth.digest.data,
6751 reference->digest.data,
6752 reference->digest.len);
6754 TEST_HEXDUMP(stdout, "digest:",
6755 sym_op->auth.digest.data,
6756 sym_op->auth.digest.length);
6758 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
6759 ut_params->ibuf, reference->iv.len);
6760 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
6762 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
6763 sym_op->cipher.iv.length = reference->iv.len;
6765 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
6767 sym_op->cipher.data.length = reference->ciphertext.len;
6768 sym_op->cipher.data.offset = reference->iv.len;
6770 sym_op->auth.data.length = reference->ciphertext.len;
6771 sym_op->auth.data.offset = reference->iv.len;
6777 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
6778 struct crypto_unittest_params *ut_params,
6779 const struct test_crypto_vector *reference)
6781 return create_auth_operation(ts_params, ut_params, reference, 0);
6785 create_auth_verify_GMAC_operation(
6786 struct crypto_testsuite_params *ts_params,
6787 struct crypto_unittest_params *ut_params,
6788 const struct test_crypto_vector *reference)
6790 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
6794 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
6795 struct crypto_unittest_params *ut_params,
6796 const struct test_crypto_vector *reference)
6798 return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
6802 test_authentication_verify_fail_when_data_corruption(
6803 struct crypto_testsuite_params *ts_params,
6804 struct crypto_unittest_params *ut_params,
6805 const struct test_crypto_vector *reference,
6806 unsigned int data_corrupted)
6812 /* Create session */
6813 retval = create_auth_session(ut_params,
6814 ts_params->valid_devs[0],
6816 RTE_CRYPTO_AUTH_OP_VERIFY);
6820 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6821 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6822 "Failed to allocate input buffer in mempool");
6824 /* clear mbuf payload */
6825 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6826 rte_pktmbuf_tailroom(ut_params->ibuf));
6828 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6829 reference->plaintext.len);
6830 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
6831 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
6833 TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
6835 /* Create operation */
6836 retval = create_auth_verify_operation(ts_params, ut_params, reference);
6842 data_corruption(plaintext);
6844 tag_corruption(plaintext, reference->plaintext.len);
6846 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6848 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6849 TEST_ASSERT_EQUAL(ut_params->op->status,
6850 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6851 "authentication not failed");
6853 ut_params->obuf = ut_params->op->sym->m_src;
6854 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6860 test_authentication_verify_GMAC_fail_when_corruption(
6861 struct crypto_testsuite_params *ts_params,
6862 struct crypto_unittest_params *ut_params,
6863 const struct test_crypto_vector *reference,
6864 unsigned int data_corrupted)
6868 /* Create session */
6869 retval = create_auth_cipher_session(ut_params,
6870 ts_params->valid_devs[0],
6872 RTE_CRYPTO_AUTH_OP_VERIFY,
6873 RTE_CRYPTO_CIPHER_OP_DECRYPT);
6877 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6878 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6879 "Failed to allocate input buffer in mempool");
6881 /* clear mbuf payload */
6882 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6883 rte_pktmbuf_tailroom(ut_params->ibuf));
6885 /* Create operation */
6886 retval = create_auth_verify_GMAC_operation(ts_params,
6894 data_corruption(ut_params->op->sym->auth.aad.data);
6896 tag_corruption(ut_params->op->sym->auth.aad.data,
6897 reference->aad.len);
6899 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6901 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6902 TEST_ASSERT_EQUAL(ut_params->op->status,
6903 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6904 "authentication not failed");
6906 ut_params->obuf = ut_params->op->sym->m_src;
6907 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6913 test_authenticated_decryption_fail_when_corruption(
6914 struct crypto_testsuite_params *ts_params,
6915 struct crypto_unittest_params *ut_params,
6916 const struct test_crypto_vector *reference,
6917 unsigned int data_corrupted)
6921 uint8_t *ciphertext;
6923 /* Create session */
6924 retval = create_auth_cipher_session(ut_params,
6925 ts_params->valid_devs[0],
6927 RTE_CRYPTO_AUTH_OP_VERIFY,
6928 RTE_CRYPTO_CIPHER_OP_DECRYPT);
6932 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
6933 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
6934 "Failed to allocate input buffer in mempool");
6936 /* clear mbuf payload */
6937 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
6938 rte_pktmbuf_tailroom(ut_params->ibuf));
6940 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
6941 reference->ciphertext.len);
6942 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
6943 memcpy(ciphertext, reference->ciphertext.data,
6944 reference->ciphertext.len);
6946 /* Create operation */
6947 retval = create_cipher_auth_verify_operation(ts_params,
6955 data_corruption(ciphertext);
6957 tag_corruption(ciphertext, reference->ciphertext.len);
6959 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
6962 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
6963 TEST_ASSERT_EQUAL(ut_params->op->status,
6964 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
6965 "authentication not failed");
6967 ut_params->obuf = ut_params->op->sym->m_src;
6968 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
6974 create_gcm_operation_SGL(enum rte_crypto_cipher_operation op,
6975 const struct gcm_test_data *tdata,
6976 void *digest_mem, uint64_t digest_phys)
6978 struct crypto_testsuite_params *ts_params = &testsuite_params;
6979 struct crypto_unittest_params *ut_params = &unittest_params;
6981 const unsigned int auth_tag_len = tdata->auth_tag.len;
6982 const unsigned int iv_len = tdata->iv.len;
6983 const unsigned int aad_len = tdata->aad.len;
6985 unsigned int iv_pad_len = 0;
6987 /* Generate Crypto op data structure */
6988 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
6989 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
6990 TEST_ASSERT_NOT_NULL(ut_params->op,
6991 "Failed to allocate symmetric crypto operation struct");
6993 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
6995 sym_op->auth.digest.data = digest_mem;
6997 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
6998 "no room to append digest");
7000 sym_op->auth.digest.phys_addr = digest_phys;
7001 sym_op->auth.digest.length = auth_tag_len;
7003 if (op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
7004 rte_memcpy(sym_op->auth.digest.data, tdata->auth_tag.data,
7006 TEST_HEXDUMP(stdout, "digest:",
7007 sym_op->auth.digest.data,
7008 sym_op->auth.digest.length);
7011 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
7013 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
7014 ut_params->ibuf, iv_pad_len);
7016 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data,
7017 "no room to prepend iv");
7019 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
7020 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
7021 sym_op->cipher.iv.length = iv_len;
7023 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, iv_pad_len);
7025 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
7026 ut_params->ibuf, aad_len);
7027 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
7028 "no room to prepend aad");
7029 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
7031 sym_op->auth.aad.length = aad_len;
7033 memset(sym_op->auth.aad.data, 0, aad_len);
7034 rte_memcpy(sym_op->auth.aad.data, tdata->aad.data, aad_len);
7036 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
7037 TEST_HEXDUMP(stdout, "aad:",
7038 sym_op->auth.aad.data, aad_len);
7040 sym_op->cipher.data.length = tdata->plaintext.len;
7041 sym_op->cipher.data.offset = aad_len + iv_pad_len;
7043 sym_op->auth.data.offset = aad_len + iv_pad_len;
7044 sym_op->auth.data.length = tdata->plaintext.len;
7049 #define SGL_MAX_NO 16
7052 test_AES_GCM_authenticated_encryption_SGL(const struct gcm_test_data *tdata,
7053 const int oop, uint32_t fragsz, uint32_t fragsz_oop)
7055 struct crypto_testsuite_params *ts_params = &testsuite_params;
7056 struct crypto_unittest_params *ut_params = &unittest_params;
7057 struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL;
7060 int to_trn_tbl[SGL_MAX_NO];
7062 unsigned int trn_data = 0;
7063 uint8_t *plaintext, *ciphertext, *auth_tag;
7065 if (fragsz > tdata->plaintext.len)
7066 fragsz = tdata->plaintext.len;
7068 uint16_t plaintext_len = fragsz;
7069 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz;
7071 if (fragsz_oop > tdata->plaintext.len)
7072 frag_size_oop = tdata->plaintext.len;
7075 void *digest_mem = NULL;
7077 uint32_t prepend_len = ALIGN_POW2_ROUNDUP(tdata->iv.len, 16)
7080 if (tdata->plaintext.len % fragsz != 0) {
7081 if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO)
7084 if (tdata->plaintext.len / fragsz > SGL_MAX_NO)
7089 * For out-op-place we need to alloc another mbuf
7092 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7093 rte_pktmbuf_append(ut_params->obuf,
7094 frag_size_oop + prepend_len);
7095 buf_oop = ut_params->obuf;
7098 /* Create GCM session */
7099 retval = create_gcm_session(ts_params->valid_devs[0],
7100 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
7101 tdata->key.data, tdata->key.len,
7102 tdata->aad.len, tdata->auth_tag.len,
7103 RTE_CRYPTO_AUTH_OP_GENERATE);
7107 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7109 /* clear mbuf payload */
7110 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
7111 rte_pktmbuf_tailroom(ut_params->ibuf));
7113 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7116 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
7118 trn_data += plaintext_len;
7120 buf = ut_params->ibuf;
7123 * Loop until no more fragments
7126 while (trn_data < tdata->plaintext.len) {
7128 to_trn = (tdata->plaintext.len - trn_data < fragsz) ?
7129 (tdata->plaintext.len - trn_data) : fragsz;
7131 to_trn_tbl[ecx++] = to_trn;
7133 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool);
7136 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
7137 rte_pktmbuf_tailroom(buf));
7140 if (oop && !fragsz_oop) {
7141 buf_last_oop = buf_oop->next =
7142 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7143 buf_oop = buf_oop->next;
7144 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7145 0, rte_pktmbuf_tailroom(buf_oop));
7146 rte_pktmbuf_append(buf_oop, to_trn);
7149 plaintext = (uint8_t *)rte_pktmbuf_append(buf,
7152 memcpy(plaintext, tdata->plaintext.data + trn_data,
7155 if (trn_data == tdata->plaintext.len) {
7158 digest_mem = rte_pktmbuf_append(buf_oop,
7159 tdata->auth_tag.len);
7161 digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
7162 tdata->auth_tag.len);
7166 uint64_t digest_phys = 0;
7168 ut_params->ibuf->nb_segs = segs;
7171 if (fragsz_oop && oop) {
7175 if (frag_size_oop == tdata->plaintext.len) {
7176 digest_mem = rte_pktmbuf_append(ut_params->obuf,
7177 tdata->auth_tag.len);
7179 digest_phys = rte_pktmbuf_mtophys_offset(
7181 tdata->plaintext.len + prepend_len);
7184 trn_data = frag_size_oop;
7185 while (trn_data < tdata->plaintext.len) {
7188 (tdata->plaintext.len - trn_data <
7190 (tdata->plaintext.len - trn_data) :
7193 to_trn_tbl[ecx++] = to_trn;
7195 buf_last_oop = buf_oop->next =
7196 rte_pktmbuf_alloc(ts_params->mbuf_pool);
7197 buf_oop = buf_oop->next;
7198 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
7199 0, rte_pktmbuf_tailroom(buf_oop));
7200 rte_pktmbuf_append(buf_oop, to_trn);
7204 if (trn_data == tdata->plaintext.len) {
7205 digest_mem = rte_pktmbuf_append(buf_oop,
7206 tdata->auth_tag.len);
7210 ut_params->obuf->nb_segs = segs;
7214 * Place digest at the end of the last buffer
7217 digest_phys = rte_pktmbuf_mtophys(buf) + to_trn;
7218 if (oop && buf_last_oop)
7219 digest_phys = rte_pktmbuf_mtophys(buf_last_oop) + to_trn;
7221 if (!digest_mem && !oop) {
7222 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
7223 + tdata->auth_tag.len);
7224 digest_phys = rte_pktmbuf_mtophys_offset(ut_params->ibuf,
7225 tdata->plaintext.len);
7228 /* Create GCM opertaion */
7229 retval = create_gcm_operation_SGL(RTE_CRYPTO_CIPHER_OP_ENCRYPT,
7230 tdata, digest_mem, digest_phys);
7235 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
7237 ut_params->op->sym->m_src = ut_params->ibuf;
7239 ut_params->op->sym->m_dst = ut_params->obuf;
7241 /* Process crypto operation */
7242 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
7243 ut_params->op), "failed to process sym crypto op");
7245 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
7246 "crypto op processing failed");
7249 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
7250 uint8_t *, prepend_len);
7252 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
7253 uint8_t *, prepend_len);
7257 fragsz = fragsz_oop;
7259 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7261 tdata->ciphertext.data,
7263 "GCM Ciphertext data not as expected");
7265 buf = ut_params->op->sym->m_src->next;
7267 buf = ut_params->op->sym->m_dst->next;
7269 unsigned int off = fragsz;
7273 ciphertext = rte_pktmbuf_mtod(buf,
7276 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7278 tdata->ciphertext.data + off,
7280 "GCM Ciphertext data not as expected");
7282 off += to_trn_tbl[ecx++];
7286 auth_tag = digest_mem;
7287 TEST_ASSERT_BUFFERS_ARE_EQUAL(
7289 tdata->auth_tag.data,
7290 tdata->auth_tag.len,
7291 "GCM Generated auth tag not as expected");
7297 #define OUT_OF_PLACE 1
7300 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void)
7302 return test_AES_GCM_authenticated_encryption_SGL(
7303 &gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400);
7307 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void)
7309 return test_AES_GCM_authenticated_encryption_SGL(
7310 &gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000);
7314 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void)
7316 return test_AES_GCM_authenticated_encryption_SGL(
7317 &gcm_test_case_8, OUT_OF_PLACE, 400,
7318 gcm_test_case_8.plaintext.len);
7322 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void)
7325 return test_AES_GCM_authenticated_encryption_SGL(
7326 &gcm_test_case_SGL_1, IN_PLACE, 1500, 0);
7330 test_authentication_verify_fail_when_data_corrupted(
7331 struct crypto_testsuite_params *ts_params,
7332 struct crypto_unittest_params *ut_params,
7333 const struct test_crypto_vector *reference)
7335 return test_authentication_verify_fail_when_data_corruption(
7336 ts_params, ut_params, reference, 1);
7340 test_authentication_verify_fail_when_tag_corrupted(
7341 struct crypto_testsuite_params *ts_params,
7342 struct crypto_unittest_params *ut_params,
7343 const struct test_crypto_vector *reference)
7345 return test_authentication_verify_fail_when_data_corruption(
7346 ts_params, ut_params, reference, 0);
7350 test_authentication_verify_GMAC_fail_when_data_corrupted(
7351 struct crypto_testsuite_params *ts_params,
7352 struct crypto_unittest_params *ut_params,
7353 const struct test_crypto_vector *reference)
7355 return test_authentication_verify_GMAC_fail_when_corruption(
7356 ts_params, ut_params, reference, 1);
7360 test_authentication_verify_GMAC_fail_when_tag_corrupted(
7361 struct crypto_testsuite_params *ts_params,
7362 struct crypto_unittest_params *ut_params,
7363 const struct test_crypto_vector *reference)
7365 return test_authentication_verify_GMAC_fail_when_corruption(
7366 ts_params, ut_params, reference, 0);
7370 test_authenticated_decryption_fail_when_data_corrupted(
7371 struct crypto_testsuite_params *ts_params,
7372 struct crypto_unittest_params *ut_params,
7373 const struct test_crypto_vector *reference)
7375 return test_authenticated_decryption_fail_when_corruption(
7376 ts_params, ut_params, reference, 1);
7380 test_authenticated_decryption_fail_when_tag_corrupted(
7381 struct crypto_testsuite_params *ts_params,
7382 struct crypto_unittest_params *ut_params,
7383 const struct test_crypto_vector *reference)
7385 return test_authenticated_decryption_fail_when_corruption(
7386 ts_params, ut_params, reference, 0);
7390 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
7392 return test_authentication_verify_fail_when_data_corrupted(
7393 &testsuite_params, &unittest_params,
7394 &hmac_sha1_test_crypto_vector);
7398 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
7400 return test_authentication_verify_fail_when_tag_corrupted(
7401 &testsuite_params, &unittest_params,
7402 &hmac_sha1_test_crypto_vector);
7406 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
7408 return test_authentication_verify_GMAC_fail_when_data_corrupted(
7409 &testsuite_params, &unittest_params,
7410 &aes128_gmac_test_vector);
7414 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
7416 return test_authentication_verify_GMAC_fail_when_tag_corrupted(
7417 &testsuite_params, &unittest_params,
7418 &aes128_gmac_test_vector);
7422 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
7424 return test_authenticated_decryption_fail_when_data_corrupted(
7427 &aes128cbc_hmac_sha1_test_vector);
7431 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
7433 return test_authenticated_decryption_fail_when_tag_corrupted(
7436 &aes128cbc_hmac_sha1_test_vector);
7439 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
7441 /* global AESNI slave IDs for the scheduler test */
7442 uint8_t aesni_ids[2];
7445 test_scheduler_attach_slave_op(void)
7447 struct crypto_testsuite_params *ts_params = &testsuite_params;
7448 uint8_t sched_id = ts_params->valid_devs[0];
7449 uint32_t nb_devs, i, nb_devs_attached = 0;
7452 /* create 2 AESNI_MB if necessary */
7453 nb_devs = rte_cryptodev_count_devtype(
7454 RTE_CRYPTODEV_AESNI_MB_PMD);
7456 for (i = nb_devs; i < 2; i++) {
7457 ret = rte_eal_vdev_init(
7458 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
7460 TEST_ASSERT(ret == 0,
7461 "Failed to create instance %u of"
7463 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7467 /* attach 2 AESNI_MB cdevs */
7468 for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2;
7470 struct rte_cryptodev_info info;
7472 rte_cryptodev_info_get(i, &info);
7473 if (info.dev_type != RTE_CRYPTODEV_AESNI_MB_PMD)
7476 ret = rte_cryptodev_scheduler_slave_attach(sched_id,
7479 TEST_ASSERT(ret == 0,
7480 "Failed to attach device %u of pmd : %s", i,
7481 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
7483 aesni_ids[nb_devs_attached] = (uint8_t)i;
7492 test_scheduler_detach_slave_op(void)
7494 struct crypto_testsuite_params *ts_params = &testsuite_params;
7495 uint8_t sched_id = ts_params->valid_devs[0];
7499 for (i = 0; i < 2; i++) {
7500 ret = rte_cryptodev_scheduler_slave_detach(sched_id,
7502 TEST_ASSERT(ret == 0,
7503 "Failed to detach device %u", aesni_ids[i]);
7510 test_scheduler_mode_op(void)
7512 struct crypto_testsuite_params *ts_params = &testsuite_params;
7513 uint8_t sched_id = ts_params->valid_devs[0];
7514 struct rte_cryptodev_scheduler_ops op = {0};
7515 struct rte_cryptodev_scheduler dummy_scheduler = {
7516 .description = "dummy scheduler to test mode",
7517 .name = "dummy scheduler",
7518 .mode = CDEV_SCHED_MODE_USERDEFINED,
7523 /* set user defined mode */
7524 ret = rte_cryptodev_scheduler_load_user_scheduler(sched_id,
7526 TEST_ASSERT(ret == 0,
7527 "Failed to set cdev %u to user defined mode", sched_id);
7529 /* set round robin mode */
7530 ret = rte_crpytodev_scheduler_mode_set(sched_id,
7531 CDEV_SCHED_MODE_ROUNDROBIN);
7532 TEST_ASSERT(ret == 0,
7533 "Failed to set cdev %u to round-robin mode", sched_id);
7534 TEST_ASSERT(rte_crpytodev_scheduler_mode_get(sched_id) ==
7535 CDEV_SCHED_MODE_ROUNDROBIN, "Scheduling Mode "
7541 static struct unit_test_suite cryptodev_scheduler_testsuite = {
7542 .suite_name = "Crypto Device Scheduler Unit Test Suite",
7543 .setup = testsuite_setup,
7544 .teardown = testsuite_teardown,
7545 .unit_test_cases = {
7546 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op),
7547 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_op),
7548 TEST_CASE_ST(ut_setup, ut_teardown,
7549 test_AES_chain_scheduler_all),
7550 TEST_CASE_ST(ut_setup, ut_teardown,
7551 test_AES_cipheronly_scheduler_all),
7552 TEST_CASE_ST(ut_setup, ut_teardown,
7553 test_authonly_scheduler_all),
7554 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op),
7555 TEST_CASES_END() /**< NULL terminate unit test array */
7559 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */
7561 static struct unit_test_suite cryptodev_qat_testsuite = {
7562 .suite_name = "Crypto QAT Unit Test Suite",
7563 .setup = testsuite_setup,
7564 .teardown = testsuite_teardown,
7565 .unit_test_cases = {
7566 TEST_CASE_ST(ut_setup, ut_teardown,
7567 test_device_configure_invalid_dev_id),
7568 TEST_CASE_ST(ut_setup, ut_teardown,
7569 test_device_configure_invalid_queue_pair_ids),
7570 TEST_CASE_ST(ut_setup, ut_teardown,
7571 test_queue_pair_descriptor_setup),
7572 TEST_CASE_ST(ut_setup, ut_teardown,
7573 test_multi_session),
7575 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
7576 TEST_CASE_ST(ut_setup, ut_teardown,
7577 test_AES_cipheronly_qat_all),
7578 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
7579 TEST_CASE_ST(ut_setup, ut_teardown,
7580 test_3DES_cipheronly_qat_all),
7581 TEST_CASE_ST(ut_setup, ut_teardown,
7582 test_DES_cipheronly_qat_all),
7583 TEST_CASE_ST(ut_setup, ut_teardown,
7584 test_AES_docsis_qat_all),
7585 TEST_CASE_ST(ut_setup, ut_teardown,
7586 test_DES_docsis_qat_all),
7587 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
7589 /** AES GCM Authenticated Encryption */
7590 TEST_CASE_ST(ut_setup, ut_teardown,
7591 test_AES_GCM_auth_encrypt_SGL_in_place_1500B),
7592 TEST_CASE_ST(ut_setup, ut_teardown,
7593 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B),
7594 TEST_CASE_ST(ut_setup, ut_teardown,
7595 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B),
7596 TEST_CASE_ST(ut_setup, ut_teardown,
7597 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7598 TEST_CASE_ST(ut_setup, ut_teardown,
7599 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7600 TEST_CASE_ST(ut_setup, ut_teardown,
7601 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7602 TEST_CASE_ST(ut_setup, ut_teardown,
7603 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7604 TEST_CASE_ST(ut_setup, ut_teardown,
7605 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7606 TEST_CASE_ST(ut_setup, ut_teardown,
7607 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7608 TEST_CASE_ST(ut_setup, ut_teardown,
7609 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7611 /** AES GCM Authenticated Decryption */
7612 TEST_CASE_ST(ut_setup, ut_teardown,
7613 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7614 TEST_CASE_ST(ut_setup, ut_teardown,
7615 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7616 TEST_CASE_ST(ut_setup, ut_teardown,
7617 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7618 TEST_CASE_ST(ut_setup, ut_teardown,
7619 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7620 TEST_CASE_ST(ut_setup, ut_teardown,
7621 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7622 TEST_CASE_ST(ut_setup, ut_teardown,
7623 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7624 TEST_CASE_ST(ut_setup, ut_teardown,
7625 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7627 /** AES GMAC Authentication */
7628 TEST_CASE_ST(ut_setup, ut_teardown,
7629 test_AES_GMAC_authentication_test_case_1),
7630 TEST_CASE_ST(ut_setup, ut_teardown,
7631 test_AES_GMAC_authentication_verify_test_case_1),
7632 TEST_CASE_ST(ut_setup, ut_teardown,
7633 test_AES_GMAC_authentication_test_case_2),
7634 TEST_CASE_ST(ut_setup, ut_teardown,
7635 test_AES_GMAC_authentication_verify_test_case_2),
7636 TEST_CASE_ST(ut_setup, ut_teardown,
7637 test_AES_GMAC_authentication_test_case_3),
7638 TEST_CASE_ST(ut_setup, ut_teardown,
7639 test_AES_GMAC_authentication_verify_test_case_3),
7641 /** SNOW 3G encrypt only (UEA2) */
7642 TEST_CASE_ST(ut_setup, ut_teardown,
7643 test_snow3g_encryption_test_case_1),
7644 TEST_CASE_ST(ut_setup, ut_teardown,
7645 test_snow3g_encryption_test_case_2),
7646 TEST_CASE_ST(ut_setup, ut_teardown,
7647 test_snow3g_encryption_test_case_3),
7648 TEST_CASE_ST(ut_setup, ut_teardown,
7649 test_snow3g_encryption_test_case_4),
7650 TEST_CASE_ST(ut_setup, ut_teardown,
7651 test_snow3g_encryption_test_case_5),
7653 TEST_CASE_ST(ut_setup, ut_teardown,
7654 test_snow3g_encryption_test_case_1_oop),
7655 TEST_CASE_ST(ut_setup, ut_teardown,
7656 test_snow3g_decryption_test_case_1_oop),
7658 /** SNOW 3G decrypt only (UEA2) */
7659 TEST_CASE_ST(ut_setup, ut_teardown,
7660 test_snow3g_decryption_test_case_1),
7661 TEST_CASE_ST(ut_setup, ut_teardown,
7662 test_snow3g_decryption_test_case_2),
7663 TEST_CASE_ST(ut_setup, ut_teardown,
7664 test_snow3g_decryption_test_case_3),
7665 TEST_CASE_ST(ut_setup, ut_teardown,
7666 test_snow3g_decryption_test_case_4),
7667 TEST_CASE_ST(ut_setup, ut_teardown,
7668 test_snow3g_decryption_test_case_5),
7669 TEST_CASE_ST(ut_setup, ut_teardown,
7670 test_snow3g_hash_generate_test_case_1),
7671 TEST_CASE_ST(ut_setup, ut_teardown,
7672 test_snow3g_hash_generate_test_case_2),
7673 TEST_CASE_ST(ut_setup, ut_teardown,
7674 test_snow3g_hash_generate_test_case_3),
7675 TEST_CASE_ST(ut_setup, ut_teardown,
7676 test_snow3g_hash_verify_test_case_1),
7677 TEST_CASE_ST(ut_setup, ut_teardown,
7678 test_snow3g_hash_verify_test_case_2),
7679 TEST_CASE_ST(ut_setup, ut_teardown,
7680 test_snow3g_hash_verify_test_case_3),
7681 TEST_CASE_ST(ut_setup, ut_teardown,
7682 test_snow3g_cipher_auth_test_case_1),
7683 TEST_CASE_ST(ut_setup, ut_teardown,
7684 test_snow3g_auth_cipher_test_case_1),
7686 /** HMAC_MD5 Authentication */
7687 TEST_CASE_ST(ut_setup, ut_teardown,
7688 test_MD5_HMAC_generate_case_1),
7689 TEST_CASE_ST(ut_setup, ut_teardown,
7690 test_MD5_HMAC_verify_case_1),
7691 TEST_CASE_ST(ut_setup, ut_teardown,
7692 test_MD5_HMAC_generate_case_2),
7693 TEST_CASE_ST(ut_setup, ut_teardown,
7694 test_MD5_HMAC_verify_case_2),
7697 TEST_CASE_ST(ut_setup, ut_teardown,
7698 test_null_auth_only_operation),
7699 TEST_CASE_ST(ut_setup, ut_teardown,
7700 test_null_cipher_only_operation),
7701 TEST_CASE_ST(ut_setup, ut_teardown,
7702 test_null_cipher_auth_operation),
7703 TEST_CASE_ST(ut_setup, ut_teardown,
7704 test_null_auth_cipher_operation),
7706 TEST_CASE_ST(ut_setup, ut_teardown,
7707 test_kasumi_hash_generate_test_case_6),
7710 TEST_CASE_ST(ut_setup, ut_teardown,
7711 test_kasumi_encryption_test_case_1),
7712 TEST_CASE_ST(ut_setup, ut_teardown,
7713 test_kasumi_encryption_test_case_3),
7714 TEST_CASE_ST(ut_setup, ut_teardown,
7715 test_kasumi_auth_cipher_test_case_1),
7716 TEST_CASE_ST(ut_setup, ut_teardown,
7717 test_kasumi_cipher_auth_test_case_1),
7719 /** Negative tests */
7720 TEST_CASE_ST(ut_setup, ut_teardown,
7721 authentication_verify_HMAC_SHA1_fail_data_corrupt),
7722 TEST_CASE_ST(ut_setup, ut_teardown,
7723 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
7724 TEST_CASE_ST(ut_setup, ut_teardown,
7725 authentication_verify_AES128_GMAC_fail_data_corrupt),
7726 TEST_CASE_ST(ut_setup, ut_teardown,
7727 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7728 TEST_CASE_ST(ut_setup, ut_teardown,
7729 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
7730 TEST_CASE_ST(ut_setup, ut_teardown,
7731 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
7733 TEST_CASES_END() /**< NULL terminate unit test array */
7737 static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
7738 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
7739 .setup = testsuite_setup,
7740 .teardown = testsuite_teardown,
7741 .unit_test_cases = {
7742 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
7743 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_mb_all),
7744 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_mb_all),
7745 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_mb_all),
7747 TEST_CASES_END() /**< NULL terminate unit test array */
7751 static struct unit_test_suite cryptodev_openssl_testsuite = {
7752 .suite_name = "Crypto Device OPENSSL Unit Test Suite",
7753 .setup = testsuite_setup,
7754 .teardown = testsuite_teardown,
7755 .unit_test_cases = {
7756 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
7757 TEST_CASE_ST(ut_setup, ut_teardown,
7758 test_multi_session_random_usage),
7759 TEST_CASE_ST(ut_setup, ut_teardown,
7760 test_AES_chain_openssl_all),
7761 TEST_CASE_ST(ut_setup, ut_teardown,
7762 test_AES_cipheronly_openssl_all),
7763 TEST_CASE_ST(ut_setup, ut_teardown,
7764 test_3DES_chain_openssl_all),
7765 TEST_CASE_ST(ut_setup, ut_teardown,
7766 test_3DES_cipheronly_openssl_all),
7767 TEST_CASE_ST(ut_setup, ut_teardown,
7768 test_DES_docsis_openssl_all),
7769 TEST_CASE_ST(ut_setup, ut_teardown,
7770 test_authonly_openssl_all),
7772 /** AES GCM Authenticated Encryption */
7773 TEST_CASE_ST(ut_setup, ut_teardown,
7774 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7775 TEST_CASE_ST(ut_setup, ut_teardown,
7776 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7777 TEST_CASE_ST(ut_setup, ut_teardown,
7778 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7779 TEST_CASE_ST(ut_setup, ut_teardown,
7780 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7781 TEST_CASE_ST(ut_setup, ut_teardown,
7782 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7783 TEST_CASE_ST(ut_setup, ut_teardown,
7784 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7785 TEST_CASE_ST(ut_setup, ut_teardown,
7786 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7788 /** AES GCM Authenticated Decryption */
7789 TEST_CASE_ST(ut_setup, ut_teardown,
7790 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7791 TEST_CASE_ST(ut_setup, ut_teardown,
7792 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7793 TEST_CASE_ST(ut_setup, ut_teardown,
7794 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7795 TEST_CASE_ST(ut_setup, ut_teardown,
7796 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7797 TEST_CASE_ST(ut_setup, ut_teardown,
7798 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7799 TEST_CASE_ST(ut_setup, ut_teardown,
7800 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7801 TEST_CASE_ST(ut_setup, ut_teardown,
7802 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7804 /** AES GMAC Authentication */
7805 TEST_CASE_ST(ut_setup, ut_teardown,
7806 test_AES_GMAC_authentication_test_case_1),
7807 TEST_CASE_ST(ut_setup, ut_teardown,
7808 test_AES_GMAC_authentication_verify_test_case_1),
7809 TEST_CASE_ST(ut_setup, ut_teardown,
7810 test_AES_GMAC_authentication_test_case_2),
7811 TEST_CASE_ST(ut_setup, ut_teardown,
7812 test_AES_GMAC_authentication_verify_test_case_2),
7813 TEST_CASE_ST(ut_setup, ut_teardown,
7814 test_AES_GMAC_authentication_test_case_3),
7815 TEST_CASE_ST(ut_setup, ut_teardown,
7816 test_AES_GMAC_authentication_verify_test_case_3),
7817 TEST_CASE_ST(ut_setup, ut_teardown,
7818 test_AES_GMAC_authentication_test_case_4),
7819 TEST_CASE_ST(ut_setup, ut_teardown,
7820 test_AES_GMAC_authentication_verify_test_case_4),
7822 /** Scatter-Gather */
7823 TEST_CASE_ST(ut_setup, ut_teardown,
7824 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
7826 /** Negative tests */
7827 TEST_CASE_ST(ut_setup, ut_teardown,
7828 authentication_verify_HMAC_SHA1_fail_data_corrupt),
7829 TEST_CASE_ST(ut_setup, ut_teardown,
7830 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
7831 TEST_CASE_ST(ut_setup, ut_teardown,
7832 authentication_verify_AES128_GMAC_fail_data_corrupt),
7833 TEST_CASE_ST(ut_setup, ut_teardown,
7834 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7835 TEST_CASE_ST(ut_setup, ut_teardown,
7836 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
7837 TEST_CASE_ST(ut_setup, ut_teardown,
7838 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
7840 TEST_CASES_END() /**< NULL terminate unit test array */
7844 static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
7845 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
7846 .setup = testsuite_setup,
7847 .teardown = testsuite_teardown,
7848 .unit_test_cases = {
7849 /** AES GCM Authenticated Encryption */
7850 TEST_CASE_ST(ut_setup, ut_teardown,
7851 test_mb_AES_GCM_authenticated_encryption_test_case_1),
7852 TEST_CASE_ST(ut_setup, ut_teardown,
7853 test_mb_AES_GCM_authenticated_encryption_test_case_2),
7854 TEST_CASE_ST(ut_setup, ut_teardown,
7855 test_mb_AES_GCM_authenticated_encryption_test_case_3),
7856 TEST_CASE_ST(ut_setup, ut_teardown,
7857 test_mb_AES_GCM_authenticated_encryption_test_case_4),
7858 TEST_CASE_ST(ut_setup, ut_teardown,
7859 test_mb_AES_GCM_authenticated_encryption_test_case_5),
7860 TEST_CASE_ST(ut_setup, ut_teardown,
7861 test_mb_AES_GCM_authenticated_encryption_test_case_6),
7862 TEST_CASE_ST(ut_setup, ut_teardown,
7863 test_mb_AES_GCM_authenticated_encryption_test_case_7),
7865 /** AES GCM Authenticated Decryption */
7866 TEST_CASE_ST(ut_setup, ut_teardown,
7867 test_mb_AES_GCM_authenticated_decryption_test_case_1),
7868 TEST_CASE_ST(ut_setup, ut_teardown,
7869 test_mb_AES_GCM_authenticated_decryption_test_case_2),
7870 TEST_CASE_ST(ut_setup, ut_teardown,
7871 test_mb_AES_GCM_authenticated_decryption_test_case_3),
7872 TEST_CASE_ST(ut_setup, ut_teardown,
7873 test_mb_AES_GCM_authenticated_decryption_test_case_4),
7874 TEST_CASE_ST(ut_setup, ut_teardown,
7875 test_mb_AES_GCM_authenticated_decryption_test_case_5),
7876 TEST_CASE_ST(ut_setup, ut_teardown,
7877 test_mb_AES_GCM_authenticated_decryption_test_case_6),
7878 TEST_CASE_ST(ut_setup, ut_teardown,
7879 test_mb_AES_GCM_authenticated_decryption_test_case_7),
7881 /** AES GCM Authenticated Encryption 256 bits key */
7882 TEST_CASE_ST(ut_setup, ut_teardown,
7883 test_mb_AES_GCM_auth_encryption_test_case_256_1),
7884 TEST_CASE_ST(ut_setup, ut_teardown,
7885 test_mb_AES_GCM_auth_encryption_test_case_256_2),
7886 TEST_CASE_ST(ut_setup, ut_teardown,
7887 test_mb_AES_GCM_auth_encryption_test_case_256_3),
7888 TEST_CASE_ST(ut_setup, ut_teardown,
7889 test_mb_AES_GCM_auth_encryption_test_case_256_4),
7890 TEST_CASE_ST(ut_setup, ut_teardown,
7891 test_mb_AES_GCM_auth_encryption_test_case_256_5),
7892 TEST_CASE_ST(ut_setup, ut_teardown,
7893 test_mb_AES_GCM_auth_encryption_test_case_256_6),
7894 TEST_CASE_ST(ut_setup, ut_teardown,
7895 test_mb_AES_GCM_auth_encryption_test_case_256_7),
7897 /** AES GCM Authenticated Decryption 256 bits key */
7898 TEST_CASE_ST(ut_setup, ut_teardown,
7899 test_mb_AES_GCM_auth_decryption_test_case_256_1),
7900 TEST_CASE_ST(ut_setup, ut_teardown,
7901 test_mb_AES_GCM_auth_decryption_test_case_256_2),
7902 TEST_CASE_ST(ut_setup, ut_teardown,
7903 test_mb_AES_GCM_auth_decryption_test_case_256_3),
7904 TEST_CASE_ST(ut_setup, ut_teardown,
7905 test_mb_AES_GCM_auth_decryption_test_case_256_4),
7906 TEST_CASE_ST(ut_setup, ut_teardown,
7907 test_mb_AES_GCM_auth_decryption_test_case_256_5),
7908 TEST_CASE_ST(ut_setup, ut_teardown,
7909 test_mb_AES_GCM_auth_decryption_test_case_256_6),
7910 TEST_CASE_ST(ut_setup, ut_teardown,
7911 test_mb_AES_GCM_auth_decryption_test_case_256_7),
7913 /** AES GCM Authenticated Encryption big aad size */
7914 TEST_CASE_ST(ut_setup, ut_teardown,
7915 test_mb_AES_GCM_auth_encryption_test_case_aad_1),
7916 TEST_CASE_ST(ut_setup, ut_teardown,
7917 test_mb_AES_GCM_auth_encryption_test_case_aad_2),
7919 /** AES GCM Authenticated Decryption big aad size */
7920 TEST_CASE_ST(ut_setup, ut_teardown,
7921 test_mb_AES_GCM_auth_decryption_test_case_aad_1),
7922 TEST_CASE_ST(ut_setup, ut_teardown,
7923 test_mb_AES_GCM_auth_decryption_test_case_aad_2),
7925 /** AES GMAC Authentication */
7926 TEST_CASE_ST(ut_setup, ut_teardown,
7927 test_AES_GMAC_authentication_test_case_1),
7928 TEST_CASE_ST(ut_setup, ut_teardown,
7929 test_AES_GMAC_authentication_verify_test_case_1),
7930 TEST_CASE_ST(ut_setup, ut_teardown,
7931 test_AES_GMAC_authentication_test_case_3),
7932 TEST_CASE_ST(ut_setup, ut_teardown,
7933 test_AES_GMAC_authentication_verify_test_case_3),
7934 TEST_CASE_ST(ut_setup, ut_teardown,
7935 test_AES_GMAC_authentication_test_case_4),
7936 TEST_CASE_ST(ut_setup, ut_teardown,
7937 test_AES_GMAC_authentication_verify_test_case_4),
7939 /** Negative tests */
7940 TEST_CASE_ST(ut_setup, ut_teardown,
7941 authentication_verify_AES128_GMAC_fail_data_corrupt),
7942 TEST_CASE_ST(ut_setup, ut_teardown,
7943 authentication_verify_AES128_GMAC_fail_tag_corrupt),
7945 /** Out of place tests */
7946 TEST_CASE_ST(ut_setup, ut_teardown,
7947 test_mb_AES_GCM_authenticated_encryption_oop),
7948 TEST_CASE_ST(ut_setup, ut_teardown,
7949 test_mb_AES_GCM_authenticated_decryption_oop),
7951 /** Session-less tests */
7952 TEST_CASE_ST(ut_setup, ut_teardown,
7953 test_mb_AES_GCM_authenticated_encryption_sessionless),
7954 TEST_CASE_ST(ut_setup, ut_teardown,
7955 test_mb_AES_GCM_authenticated_decryption_sessionless),
7957 /** Scatter-Gather */
7958 TEST_CASE_ST(ut_setup, ut_teardown,
7959 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg),
7961 TEST_CASES_END() /**< NULL terminate unit test array */
7965 static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
7966 .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
7967 .setup = testsuite_setup,
7968 .teardown = testsuite_teardown,
7969 .unit_test_cases = {
7970 /** KASUMI encrypt only (UEA1) */
7971 TEST_CASE_ST(ut_setup, ut_teardown,
7972 test_kasumi_encryption_test_case_1),
7973 TEST_CASE_ST(ut_setup, ut_teardown,
7974 test_kasumi_encryption_test_case_1_sgl),
7975 TEST_CASE_ST(ut_setup, ut_teardown,
7976 test_kasumi_encryption_test_case_2),
7977 TEST_CASE_ST(ut_setup, ut_teardown,
7978 test_kasumi_encryption_test_case_3),
7979 TEST_CASE_ST(ut_setup, ut_teardown,
7980 test_kasumi_encryption_test_case_4),
7981 TEST_CASE_ST(ut_setup, ut_teardown,
7982 test_kasumi_encryption_test_case_5),
7983 /** KASUMI decrypt only (UEA1) */
7984 TEST_CASE_ST(ut_setup, ut_teardown,
7985 test_kasumi_decryption_test_case_1),
7986 TEST_CASE_ST(ut_setup, ut_teardown,
7987 test_kasumi_decryption_test_case_2),
7988 TEST_CASE_ST(ut_setup, ut_teardown,
7989 test_kasumi_decryption_test_case_3),
7990 TEST_CASE_ST(ut_setup, ut_teardown,
7991 test_kasumi_decryption_test_case_4),
7992 TEST_CASE_ST(ut_setup, ut_teardown,
7993 test_kasumi_decryption_test_case_5),
7995 TEST_CASE_ST(ut_setup, ut_teardown,
7996 test_kasumi_encryption_test_case_1_oop),
7997 TEST_CASE_ST(ut_setup, ut_teardown,
7998 test_kasumi_encryption_test_case_1_oop_sgl),
8001 TEST_CASE_ST(ut_setup, ut_teardown,
8002 test_kasumi_decryption_test_case_1_oop),
8004 /** KASUMI hash only (UIA1) */
8005 TEST_CASE_ST(ut_setup, ut_teardown,
8006 test_kasumi_hash_generate_test_case_1),
8007 TEST_CASE_ST(ut_setup, ut_teardown,
8008 test_kasumi_hash_generate_test_case_2),
8009 TEST_CASE_ST(ut_setup, ut_teardown,
8010 test_kasumi_hash_generate_test_case_3),
8011 TEST_CASE_ST(ut_setup, ut_teardown,
8012 test_kasumi_hash_generate_test_case_4),
8013 TEST_CASE_ST(ut_setup, ut_teardown,
8014 test_kasumi_hash_generate_test_case_5),
8015 TEST_CASE_ST(ut_setup, ut_teardown,
8016 test_kasumi_hash_generate_test_case_6),
8017 TEST_CASE_ST(ut_setup, ut_teardown,
8018 test_kasumi_hash_verify_test_case_1),
8019 TEST_CASE_ST(ut_setup, ut_teardown,
8020 test_kasumi_hash_verify_test_case_2),
8021 TEST_CASE_ST(ut_setup, ut_teardown,
8022 test_kasumi_hash_verify_test_case_3),
8023 TEST_CASE_ST(ut_setup, ut_teardown,
8024 test_kasumi_hash_verify_test_case_4),
8025 TEST_CASE_ST(ut_setup, ut_teardown,
8026 test_kasumi_hash_verify_test_case_5),
8027 TEST_CASE_ST(ut_setup, ut_teardown,
8028 test_kasumi_auth_cipher_test_case_1),
8029 TEST_CASE_ST(ut_setup, ut_teardown,
8030 test_kasumi_cipher_auth_test_case_1),
8031 TEST_CASES_END() /**< NULL terminate unit test array */
8034 static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
8035 .suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
8036 .setup = testsuite_setup,
8037 .teardown = testsuite_teardown,
8038 .unit_test_cases = {
8039 /** SNOW 3G encrypt only (UEA2) */
8040 TEST_CASE_ST(ut_setup, ut_teardown,
8041 test_snow3g_encryption_test_case_1),
8042 TEST_CASE_ST(ut_setup, ut_teardown,
8043 test_snow3g_encryption_test_case_2),
8044 TEST_CASE_ST(ut_setup, ut_teardown,
8045 test_snow3g_encryption_test_case_3),
8046 TEST_CASE_ST(ut_setup, ut_teardown,
8047 test_snow3g_encryption_test_case_4),
8048 TEST_CASE_ST(ut_setup, ut_teardown,
8049 test_snow3g_encryption_test_case_5),
8051 TEST_CASE_ST(ut_setup, ut_teardown,
8052 test_snow3g_encryption_test_case_1_oop),
8053 TEST_CASE_ST(ut_setup, ut_teardown,
8054 test_snow3g_encryption_test_case_1_oop_sgl),
8055 TEST_CASE_ST(ut_setup, ut_teardown,
8056 test_snow3g_decryption_test_case_1_oop),
8058 TEST_CASE_ST(ut_setup, ut_teardown,
8059 test_snow3g_encryption_test_case_1_offset_oop),
8061 /** SNOW 3G decrypt only (UEA2) */
8062 TEST_CASE_ST(ut_setup, ut_teardown,
8063 test_snow3g_decryption_test_case_1),
8064 TEST_CASE_ST(ut_setup, ut_teardown,
8065 test_snow3g_decryption_test_case_2),
8066 TEST_CASE_ST(ut_setup, ut_teardown,
8067 test_snow3g_decryption_test_case_3),
8068 TEST_CASE_ST(ut_setup, ut_teardown,
8069 test_snow3g_decryption_test_case_4),
8070 TEST_CASE_ST(ut_setup, ut_teardown,
8071 test_snow3g_decryption_test_case_5),
8072 TEST_CASE_ST(ut_setup, ut_teardown,
8073 test_snow3g_hash_generate_test_case_1),
8074 TEST_CASE_ST(ut_setup, ut_teardown,
8075 test_snow3g_hash_generate_test_case_2),
8076 TEST_CASE_ST(ut_setup, ut_teardown,
8077 test_snow3g_hash_generate_test_case_3),
8078 /* Tests with buffers which length is not byte-aligned */
8079 TEST_CASE_ST(ut_setup, ut_teardown,
8080 test_snow3g_hash_generate_test_case_4),
8081 TEST_CASE_ST(ut_setup, ut_teardown,
8082 test_snow3g_hash_generate_test_case_5),
8083 TEST_CASE_ST(ut_setup, ut_teardown,
8084 test_snow3g_hash_generate_test_case_6),
8085 TEST_CASE_ST(ut_setup, ut_teardown,
8086 test_snow3g_hash_verify_test_case_1),
8087 TEST_CASE_ST(ut_setup, ut_teardown,
8088 test_snow3g_hash_verify_test_case_2),
8089 TEST_CASE_ST(ut_setup, ut_teardown,
8090 test_snow3g_hash_verify_test_case_3),
8091 /* Tests with buffers which length is not byte-aligned */
8092 TEST_CASE_ST(ut_setup, ut_teardown,
8093 test_snow3g_hash_verify_test_case_4),
8094 TEST_CASE_ST(ut_setup, ut_teardown,
8095 test_snow3g_hash_verify_test_case_5),
8096 TEST_CASE_ST(ut_setup, ut_teardown,
8097 test_snow3g_hash_verify_test_case_6),
8098 TEST_CASE_ST(ut_setup, ut_teardown,
8099 test_snow3g_cipher_auth_test_case_1),
8100 TEST_CASE_ST(ut_setup, ut_teardown,
8101 test_snow3g_auth_cipher_test_case_1),
8103 TEST_CASES_END() /**< NULL terminate unit test array */
8107 static struct unit_test_suite cryptodev_sw_zuc_testsuite = {
8108 .suite_name = "Crypto Device SW ZUC Unit Test Suite",
8109 .setup = testsuite_setup,
8110 .teardown = testsuite_teardown,
8111 .unit_test_cases = {
8112 /** ZUC encrypt only (EEA3) */
8113 TEST_CASE_ST(ut_setup, ut_teardown,
8114 test_zuc_encryption_test_case_1),
8115 TEST_CASE_ST(ut_setup, ut_teardown,
8116 test_zuc_encryption_test_case_2),
8117 TEST_CASE_ST(ut_setup, ut_teardown,
8118 test_zuc_encryption_test_case_3),
8119 TEST_CASE_ST(ut_setup, ut_teardown,
8120 test_zuc_encryption_test_case_4),
8121 TEST_CASE_ST(ut_setup, ut_teardown,
8122 test_zuc_encryption_test_case_5),
8123 TEST_CASE_ST(ut_setup, ut_teardown,
8124 test_zuc_hash_generate_test_case_1),
8125 TEST_CASE_ST(ut_setup, ut_teardown,
8126 test_zuc_hash_generate_test_case_2),
8127 TEST_CASE_ST(ut_setup, ut_teardown,
8128 test_zuc_hash_generate_test_case_3),
8129 TEST_CASE_ST(ut_setup, ut_teardown,
8130 test_zuc_hash_generate_test_case_4),
8131 TEST_CASE_ST(ut_setup, ut_teardown,
8132 test_zuc_hash_generate_test_case_5),
8133 TEST_CASE_ST(ut_setup, ut_teardown,
8134 test_zuc_encryption_test_case_6_sgl),
8135 TEST_CASES_END() /**< NULL terminate unit test array */
8139 static struct unit_test_suite cryptodev_null_testsuite = {
8140 .suite_name = "Crypto Device NULL Unit Test Suite",
8141 .setup = testsuite_setup,
8142 .teardown = testsuite_teardown,
8143 .unit_test_cases = {
8144 TEST_CASE_ST(ut_setup, ut_teardown,
8145 test_null_auth_only_operation),
8146 TEST_CASE_ST(ut_setup, ut_teardown,
8147 test_null_cipher_only_operation),
8148 TEST_CASE_ST(ut_setup, ut_teardown,
8149 test_null_cipher_auth_operation),
8150 TEST_CASE_ST(ut_setup, ut_teardown,
8151 test_null_auth_cipher_operation),
8152 TEST_CASE_ST(ut_setup, ut_teardown,
8153 test_null_invalid_operation),
8154 TEST_CASE_ST(ut_setup, ut_teardown,
8155 test_null_burst_operation),
8157 TEST_CASES_END() /**< NULL terminate unit test array */
8161 static struct unit_test_suite cryptodev_armv8_testsuite = {
8162 .suite_name = "Crypto Device ARMv8 Unit Test Suite",
8163 .setup = testsuite_setup,
8164 .teardown = testsuite_teardown,
8165 .unit_test_cases = {
8166 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
8168 /** Negative tests */
8169 TEST_CASE_ST(ut_setup, ut_teardown,
8170 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
8171 TEST_CASE_ST(ut_setup, ut_teardown,
8172 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
8174 TEST_CASES_END() /**< NULL terminate unit test array */
8179 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
8181 gbl_cryptodev_type = RTE_CRYPTODEV_QAT_SYM_PMD;
8182 return unit_test_suite_runner(&cryptodev_qat_testsuite);
8186 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
8188 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
8190 return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
8194 test_cryptodev_openssl(void)
8196 gbl_cryptodev_type = RTE_CRYPTODEV_OPENSSL_PMD;
8198 return unit_test_suite_runner(&cryptodev_openssl_testsuite);
8202 test_cryptodev_aesni_gcm(void)
8204 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;
8206 return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
8210 test_cryptodev_null(void)
8212 gbl_cryptodev_type = RTE_CRYPTODEV_NULL_PMD;
8214 return unit_test_suite_runner(&cryptodev_null_testsuite);
8218 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
8220 gbl_cryptodev_type = RTE_CRYPTODEV_SNOW3G_PMD;
8222 return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
8226 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
8228 gbl_cryptodev_type = RTE_CRYPTODEV_KASUMI_PMD;
8230 return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
8234 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
8236 gbl_cryptodev_type = RTE_CRYPTODEV_ZUC_PMD;
8238 return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
8242 test_cryptodev_armv8(void)
8244 gbl_cryptodev_type = RTE_CRYPTODEV_ARMV8_PMD;
8246 return unit_test_suite_runner(&cryptodev_armv8_testsuite);
8249 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
8252 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
8254 gbl_cryptodev_type = RTE_CRYPTODEV_SCHEDULER_PMD;
8255 return unit_test_suite_runner(&cryptodev_scheduler_testsuite);
8258 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
8262 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
8263 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
8264 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
8265 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
8266 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
8267 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
8268 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
8269 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
8270 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);