4 * Copyright(c) 2015-2016 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>
44 #include "test_cryptodev.h"
46 #include "test_cryptodev_blockcipher.h"
47 #include "test_cryptodev_aes_test_vectors.h"
48 #include "test_cryptodev_des_test_vectors.h"
49 #include "test_cryptodev_hash_test_vectors.h"
50 #include "test_cryptodev_kasumi_test_vectors.h"
51 #include "test_cryptodev_kasumi_hash_test_vectors.h"
52 #include "test_cryptodev_snow3g_test_vectors.h"
53 #include "test_cryptodev_snow3g_hash_test_vectors.h"
54 #include "test_cryptodev_zuc_test_vectors.h"
55 #include "test_cryptodev_zuc_hash_test_vectors.h"
56 #include "test_cryptodev_gcm_test_vectors.h"
57 #include "test_cryptodev_hmac_test_vectors.h"
59 static enum rte_cryptodev_type gbl_cryptodev_type;
61 struct crypto_testsuite_params {
62 struct rte_mempool *mbuf_pool;
63 struct rte_mempool *large_mbuf_pool;
64 struct rte_mempool *op_mpool;
65 struct rte_cryptodev_config conf;
66 struct rte_cryptodev_qp_conf qp_conf;
68 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
69 uint8_t valid_dev_count;
72 struct crypto_unittest_params {
73 struct rte_crypto_sym_xform cipher_xform;
74 struct rte_crypto_sym_xform auth_xform;
76 struct rte_cryptodev_sym_session *sess;
78 struct rte_crypto_op *op;
80 struct rte_mbuf *obuf, *ibuf;
85 #define ALIGN_POW2_ROUNDUP(num, align) \
86 (((num) + (align) - 1) & ~((align) - 1))
89 * Forward declarations.
92 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
93 struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
97 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
98 struct crypto_unittest_params *ut_params,
99 struct crypto_testsuite_params *ts_param,
100 const uint8_t *cipher,
101 const uint8_t *digest,
104 static struct rte_mbuf *
105 setup_test_string(struct rte_mempool *mpool,
106 const char *string, size_t len, uint8_t blocksize)
108 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
109 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
111 memset(m->buf_addr, 0, m->buf_len);
113 char *dst = rte_pktmbuf_append(m, t_len);
120 rte_memcpy(dst, string, t_len);
122 memset(dst, 0, t_len);
128 /* Get number of bytes in X bits (rounding up) */
130 ceil_byte_length(uint32_t num_bits)
133 return ((num_bits >> 3) + 1);
135 return (num_bits >> 3);
138 static struct rte_crypto_op *
139 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
141 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
142 printf("Error sending packet for encryption");
148 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
154 static struct crypto_testsuite_params testsuite_params = { NULL };
155 static struct crypto_unittest_params unittest_params;
158 testsuite_setup(void)
160 struct crypto_testsuite_params *ts_params = &testsuite_params;
161 struct rte_cryptodev_info info;
162 unsigned i, nb_devs, dev_id;
166 memset(ts_params, 0, sizeof(*ts_params));
168 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
169 if (ts_params->mbuf_pool == NULL) {
170 /* Not already created so create */
171 ts_params->mbuf_pool = rte_pktmbuf_pool_create(
173 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
175 if (ts_params->mbuf_pool == NULL) {
176 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
181 ts_params->large_mbuf_pool = rte_mempool_lookup(
182 "CRYPTO_LARGE_MBUFPOOL");
183 if (ts_params->large_mbuf_pool == NULL) {
184 /* Not already created so create */
185 ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
186 "CRYPTO_LARGE_MBUFPOOL",
189 if (ts_params->large_mbuf_pool == NULL) {
191 "Can't create CRYPTO_LARGE_MBUFPOOL\n");
196 ts_params->op_mpool = rte_crypto_op_pool_create(
197 "MBUF_CRYPTO_SYM_OP_POOL",
198 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
199 NUM_MBUFS, MBUF_CACHE_SIZE,
201 sizeof(struct rte_crypto_sym_xform),
203 if (ts_params->op_mpool == NULL) {
204 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
208 /* Create 2 AESNI MB devices if required */
209 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {
210 #ifndef RTE_LIBRTE_PMD_AESNI_MB
211 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
212 " enabled in config file to run this testsuite.\n");
215 nb_devs = rte_cryptodev_count_devtype(
216 RTE_CRYPTODEV_AESNI_MB_PMD);
218 for (i = nb_devs; i < 2; i++) {
219 ret = rte_eal_vdev_init(
220 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
222 TEST_ASSERT(ret == 0,
223 "Failed to create instance %u of"
225 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
230 /* Create 2 AESNI GCM devices if required */
231 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_GCM_PMD) {
232 #ifndef RTE_LIBRTE_PMD_AESNI_GCM
233 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
234 " enabled in config file to run this testsuite.\n");
237 nb_devs = rte_cryptodev_count_devtype(
238 RTE_CRYPTODEV_AESNI_GCM_PMD);
240 for (i = nb_devs; i < 2; i++) {
241 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
242 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
243 "Failed to create instance %u of"
245 i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
250 /* Create 2 SNOW 3G devices if required */
251 if (gbl_cryptodev_type == RTE_CRYPTODEV_SNOW3G_PMD) {
252 #ifndef RTE_LIBRTE_PMD_SNOW3G
253 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
254 " enabled in config file to run this testsuite.\n");
257 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
259 for (i = nb_devs; i < 2; i++) {
260 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
261 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
262 "Failed to create instance %u of"
264 i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
269 /* Create 2 KASUMI devices if required */
270 if (gbl_cryptodev_type == RTE_CRYPTODEV_KASUMI_PMD) {
271 #ifndef RTE_LIBRTE_PMD_KASUMI
272 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_KASUMI must be"
273 " enabled in config file to run this testsuite.\n");
276 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_KASUMI_PMD);
278 for (i = nb_devs; i < 2; i++) {
279 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
280 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
281 "Failed to create instance %u of"
283 i, RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
288 /* Create 2 ZUC devices if required */
289 if (gbl_cryptodev_type == RTE_CRYPTODEV_ZUC_PMD) {
290 #ifndef RTE_LIBRTE_PMD_ZUC
291 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ZUC must be"
292 " enabled in config file to run this testsuite.\n");
295 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_ZUC_PMD);
297 for (i = nb_devs; i < 2; i++) {
298 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
299 RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
300 "Failed to create instance %u of"
302 i, RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
307 /* Create 2 NULL devices if required */
308 if (gbl_cryptodev_type == RTE_CRYPTODEV_NULL_PMD) {
309 #ifndef RTE_LIBRTE_PMD_NULL_CRYPTO
310 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO must be"
311 " enabled in config file to run this testsuite.\n");
314 nb_devs = rte_cryptodev_count_devtype(
315 RTE_CRYPTODEV_NULL_PMD);
317 for (i = nb_devs; i < 2; i++) {
318 int dev_id = rte_eal_vdev_init(
319 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
321 TEST_ASSERT(dev_id >= 0,
322 "Failed to create instance %u of"
324 i, RTE_STR(CRYPTODEV_NAME_NULL_PMD));
329 /* Create 2 OPENSSL devices if required */
330 if (gbl_cryptodev_type == RTE_CRYPTODEV_OPENSSL_PMD) {
331 #ifndef RTE_LIBRTE_PMD_OPENSSL
332 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_OPENSSL must be"
333 " enabled in config file to run this testsuite.\n");
336 nb_devs = rte_cryptodev_count_devtype(
337 RTE_CRYPTODEV_OPENSSL_PMD);
339 for (i = nb_devs; i < 2; i++) {
340 ret = rte_eal_vdev_init(
341 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
344 TEST_ASSERT(ret == 0, "Failed to create "
345 "instance %u of pmd : %s", i,
346 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
351 #ifndef RTE_LIBRTE_PMD_QAT
352 if (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {
353 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
354 "in config file to run this testsuite.\n");
359 nb_devs = rte_cryptodev_count();
361 RTE_LOG(ERR, USER1, "No crypto devices found?\n");
365 /* Create list of valid crypto devs */
366 for (i = 0; i < nb_devs; i++) {
367 rte_cryptodev_info_get(i, &info);
368 if (info.dev_type == gbl_cryptodev_type)
369 ts_params->valid_devs[ts_params->valid_dev_count++] = i;
372 if (ts_params->valid_dev_count < 1)
375 /* Set up all the qps on the first of the valid devices found */
377 dev_id = ts_params->valid_devs[0];
379 rte_cryptodev_info_get(dev_id, &info);
381 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
382 ts_params->conf.socket_id = SOCKET_ID_ANY;
383 ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
385 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
387 "Failed to configure cryptodev %u with %u qps",
388 dev_id, ts_params->conf.nb_queue_pairs);
390 ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
392 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
393 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
394 dev_id, qp_id, &ts_params->qp_conf,
395 rte_cryptodev_socket_id(dev_id)),
396 "Failed to setup queue pair %u on cryptodev %u",
404 testsuite_teardown(void)
406 struct crypto_testsuite_params *ts_params = &testsuite_params;
408 if (ts_params->mbuf_pool != NULL) {
409 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
410 rte_mempool_avail_count(ts_params->mbuf_pool));
413 if (ts_params->op_mpool != NULL) {
414 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
415 rte_mempool_avail_count(ts_params->op_mpool));
423 struct crypto_testsuite_params *ts_params = &testsuite_params;
424 struct crypto_unittest_params *ut_params = &unittest_params;
428 /* Clear unit test parameters before running test */
429 memset(ut_params, 0, sizeof(*ut_params));
431 /* Reconfigure device to default parameters */
432 ts_params->conf.socket_id = SOCKET_ID_ANY;
433 ts_params->conf.session_mp.nb_objs = DEFAULT_NUM_OPS_INFLIGHT;
435 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
437 "Failed to configure cryptodev %u",
438 ts_params->valid_devs[0]);
440 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
441 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
442 ts_params->valid_devs[0], qp_id,
444 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
445 "Failed to setup queue pair %u on cryptodev %u",
446 qp_id, ts_params->valid_devs[0]);
450 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
452 /* Start the device */
453 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
454 "Failed to start cryptodev %u",
455 ts_params->valid_devs[0]);
463 struct crypto_testsuite_params *ts_params = &testsuite_params;
464 struct crypto_unittest_params *ut_params = &unittest_params;
465 struct rte_cryptodev_stats stats;
467 /* free crypto session structure */
468 if (ut_params->sess) {
469 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
471 ut_params->sess = NULL;
474 /* free crypto operation structure */
476 rte_crypto_op_free(ut_params->op);
479 * free mbuf - both obuf and ibuf are usually the same,
480 * so check if they point at the same address is necessary,
481 * to avoid freeing the mbuf twice.
483 if (ut_params->obuf) {
484 rte_pktmbuf_free(ut_params->obuf);
485 if (ut_params->ibuf == ut_params->obuf)
489 if (ut_params->ibuf) {
490 rte_pktmbuf_free(ut_params->ibuf);
494 if (ts_params->mbuf_pool != NULL)
495 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
496 rte_mempool_avail_count(ts_params->mbuf_pool));
498 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
500 /* Stop the device */
501 rte_cryptodev_stop(ts_params->valid_devs[0]);
505 test_device_configure_invalid_dev_id(void)
507 struct crypto_testsuite_params *ts_params = &testsuite_params;
508 uint16_t dev_id, num_devs = 0;
510 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
511 "Need at least %d devices for test", 1);
513 /* valid dev_id values */
514 dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
516 /* Stop the device in case it's started so it can be configured */
517 rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
519 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
520 "Failed test for rte_cryptodev_configure: "
521 "invalid dev_num %u", dev_id);
523 /* invalid dev_id values */
526 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
527 "Failed test for rte_cryptodev_configure: "
528 "invalid dev_num %u", dev_id);
532 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
533 "Failed test for rte_cryptodev_configure:"
534 "invalid dev_num %u", dev_id);
540 test_device_configure_invalid_queue_pair_ids(void)
542 struct crypto_testsuite_params *ts_params = &testsuite_params;
543 uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
545 /* Stop the device in case it's started so it can be configured */
546 rte_cryptodev_stop(ts_params->valid_devs[0]);
548 /* valid - one queue pairs */
549 ts_params->conf.nb_queue_pairs = 1;
551 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
553 "Failed to configure cryptodev: dev_id %u, qp_id %u",
554 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
557 /* valid - max value queue pairs */
558 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
560 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
562 "Failed to configure cryptodev: dev_id %u, qp_id %u",
563 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
566 /* invalid - zero queue pairs */
567 ts_params->conf.nb_queue_pairs = 0;
569 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
571 "Failed test for rte_cryptodev_configure, dev_id %u,"
573 ts_params->valid_devs[0],
574 ts_params->conf.nb_queue_pairs);
577 /* invalid - max value supported by field queue pairs */
578 ts_params->conf.nb_queue_pairs = UINT16_MAX;
580 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
582 "Failed test for rte_cryptodev_configure, dev_id %u,"
584 ts_params->valid_devs[0],
585 ts_params->conf.nb_queue_pairs);
588 /* invalid - max value + 1 queue pairs */
589 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
591 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
593 "Failed test for rte_cryptodev_configure, dev_id %u,"
595 ts_params->valid_devs[0],
596 ts_params->conf.nb_queue_pairs);
598 /* revert to original testsuite value */
599 ts_params->conf.nb_queue_pairs = orig_nb_qps;
605 test_queue_pair_descriptor_setup(void)
607 struct crypto_testsuite_params *ts_params = &testsuite_params;
608 struct rte_cryptodev_info dev_info;
609 struct rte_cryptodev_qp_conf qp_conf = {
610 .nb_descriptors = MAX_NUM_OPS_INFLIGHT
615 /* Stop the device in case it's started so it can be configured */
616 rte_cryptodev_stop(ts_params->valid_devs[0]);
619 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
621 ts_params->conf.session_mp.nb_objs = dev_info.sym.max_nb_sessions;
623 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
624 &ts_params->conf), "Failed to configure cryptodev %u",
625 ts_params->valid_devs[0]);
629 * Test various ring sizes on this device. memzones can't be
630 * freed so are re-used if ring is released and re-created.
632 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
634 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
635 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
636 ts_params->valid_devs[0], qp_id, &qp_conf,
637 rte_cryptodev_socket_id(
638 ts_params->valid_devs[0])),
640 "rte_cryptodev_queue_pair_setup: num_inflights "
641 "%u on qp %u on cryptodev %u",
642 qp_conf.nb_descriptors, qp_id,
643 ts_params->valid_devs[0]);
646 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
648 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
649 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
650 ts_params->valid_devs[0], qp_id, &qp_conf,
651 rte_cryptodev_socket_id(
652 ts_params->valid_devs[0])),
654 " rte_cryptodev_queue_pair_setup: num_inflights"
655 " %u on qp %u on cryptodev %u",
656 qp_conf.nb_descriptors, qp_id,
657 ts_params->valid_devs[0]);
660 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
662 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
663 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
664 ts_params->valid_devs[0], qp_id, &qp_conf,
665 rte_cryptodev_socket_id(
666 ts_params->valid_devs[0])),
668 "rte_cryptodev_queue_pair_setup: num_inflights"
669 " %u on qp %u on cryptodev %u",
670 qp_conf.nb_descriptors, qp_id,
671 ts_params->valid_devs[0]);
674 /* invalid number of descriptors - max supported + 2 */
675 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
677 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
678 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
679 ts_params->valid_devs[0], qp_id, &qp_conf,
680 rte_cryptodev_socket_id(
681 ts_params->valid_devs[0])),
682 "Unexpectedly passed test for "
683 "rte_cryptodev_queue_pair_setup:"
684 "num_inflights %u on qp %u on cryptodev %u",
685 qp_conf.nb_descriptors, qp_id,
686 ts_params->valid_devs[0]);
689 /* invalid number of descriptors - max value of parameter */
690 qp_conf.nb_descriptors = UINT32_MAX-1;
692 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
693 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
694 ts_params->valid_devs[0], qp_id, &qp_conf,
695 rte_cryptodev_socket_id(
696 ts_params->valid_devs[0])),
697 "Unexpectedly passed test for "
698 "rte_cryptodev_queue_pair_setup:"
699 "num_inflights %u on qp %u on cryptodev %u",
700 qp_conf.nb_descriptors, qp_id,
701 ts_params->valid_devs[0]);
704 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
706 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
707 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
708 ts_params->valid_devs[0], qp_id, &qp_conf,
709 rte_cryptodev_socket_id(
710 ts_params->valid_devs[0])),
712 " rte_cryptodev_queue_pair_setup:"
713 "num_inflights %u on qp %u on cryptodev %u",
714 qp_conf.nb_descriptors, qp_id,
715 ts_params->valid_devs[0]);
718 /* invalid number of descriptors - max supported + 1 */
719 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
721 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
722 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
723 ts_params->valid_devs[0], qp_id, &qp_conf,
724 rte_cryptodev_socket_id(
725 ts_params->valid_devs[0])),
726 "Unexpectedly passed test for "
727 "rte_cryptodev_queue_pair_setup:"
728 "num_inflights %u on qp %u on cryptodev %u",
729 qp_conf.nb_descriptors, qp_id,
730 ts_params->valid_devs[0]);
733 /* test invalid queue pair id */
734 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
736 qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; /*invalid */
738 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
739 ts_params->valid_devs[0],
741 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
742 "Failed test for rte_cryptodev_queue_pair_setup:"
743 "invalid qp %u on cryptodev %u",
744 qp_id, ts_params->valid_devs[0]);
746 qp_id = 0xffff; /*invalid*/
748 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
749 ts_params->valid_devs[0],
751 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
752 "Failed test for rte_cryptodev_queue_pair_setup:"
753 "invalid qp %u on cryptodev %u",
754 qp_id, ts_params->valid_devs[0]);
759 /* ***** Plaintext data for tests ***** */
761 const char catch_22_quote_1[] =
762 "There was only one catch and that was Catch-22, which "
763 "specified that a concern for one's safety in the face of "
764 "dangers that were real and immediate was the process of a "
765 "rational mind. Orr was crazy and could be grounded. All he "
766 "had to do was ask; and as soon as he did, he would no longer "
767 "be crazy and would have to fly more missions. Orr would be "
768 "crazy to fly more missions and sane if he didn't, but if he "
769 "was sane he had to fly them. If he flew them he was crazy "
770 "and didn't have to; but if he didn't want to he was sane and "
771 "had to. Yossarian was moved very deeply by the absolute "
772 "simplicity of this clause of Catch-22 and let out a "
773 "respectful whistle. \"That's some catch, that Catch-22\", he "
774 "observed. \"It's the best there is,\" Doc Daneeka agreed.";
776 const char catch_22_quote[] =
777 "What a lousy earth! He wondered how many people were "
778 "destitute that same night even in his own prosperous country, "
779 "how many homes were shanties, how many husbands were drunk "
780 "and wives socked, and how many children were bullied, abused, "
781 "or abandoned. How many families hungered for food they could "
782 "not afford to buy? How many hearts were broken? How many "
783 "suicides would take place that same night, how many people "
784 "would go insane? How many cockroaches and landlords would "
785 "triumph? How many winners were losers, successes failures, "
786 "and rich men poor men? How many wise guys were stupid? How "
787 "many happy endings were unhappy endings? How many honest men "
788 "were liars, brave men cowards, loyal men traitors, how many "
789 "sainted men were corrupt, how many people in positions of "
790 "trust had sold their souls to bodyguards, how many had never "
791 "had souls? How many straight-and-narrow paths were crooked "
792 "paths? How many best families were worst families and how "
793 "many good people were bad people? When you added them all up "
794 "and then subtracted, you might be left with only the children, "
795 "and perhaps with Albert Einstein and an old violinist or "
796 "sculptor somewhere.";
798 #define QUOTE_480_BYTES (480)
799 #define QUOTE_512_BYTES (512)
800 #define QUOTE_768_BYTES (768)
801 #define QUOTE_1024_BYTES (1024)
805 /* ***** SHA1 Hash Tests ***** */
807 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
809 static uint8_t hmac_sha1_key[] = {
810 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
811 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
812 0xDE, 0xF4, 0xDE, 0xAD };
814 /* ***** SHA224 Hash Tests ***** */
816 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
819 /* ***** AES-CBC Cipher Tests ***** */
821 #define CIPHER_KEY_LENGTH_AES_CBC (16)
822 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
824 static uint8_t aes_cbc_key[] = {
825 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
826 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
828 static uint8_t aes_cbc_iv[] = {
829 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
830 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
833 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
835 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
836 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
837 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
838 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
839 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
840 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
841 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
842 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
843 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
844 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
845 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
846 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
847 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
848 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
849 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
850 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
851 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
852 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
853 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
854 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
855 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
856 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
857 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
858 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
859 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
860 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
861 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
862 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
863 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
864 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
865 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
866 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
867 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
868 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
869 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
870 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
871 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
872 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
873 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
874 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
875 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
876 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
877 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
878 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
879 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
880 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
881 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
882 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
883 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
884 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
885 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
886 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
887 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
888 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
889 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
890 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
891 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
892 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
893 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
894 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
895 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
896 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
897 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
898 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
899 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
902 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
903 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
904 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
905 0x18, 0x8c, 0x1d, 0x32
909 /* Multisession Vector context Test */
911 static uint8_t ms_aes_cbc_key0[] = {
912 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
913 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
916 static uint8_t ms_aes_cbc_iv0[] = {
917 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
918 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
921 static const uint8_t ms_aes_cbc_cipher0[] = {
922 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
923 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
924 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
925 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
926 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
927 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
928 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
929 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
930 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
931 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
932 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
933 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
934 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
935 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
936 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
937 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
938 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
939 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
940 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
941 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
942 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
943 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
944 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
945 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
946 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
947 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
948 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
949 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
950 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
951 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
952 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
953 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
954 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
955 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
956 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
957 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
958 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
959 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
960 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
961 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
962 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
963 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
964 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
965 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
966 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
967 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
968 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
969 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
970 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
971 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
972 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
973 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
974 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
975 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
976 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
977 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
978 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
979 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
980 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
981 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
982 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
983 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
984 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
985 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
989 static uint8_t ms_hmac_key0[] = {
990 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
991 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
992 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
993 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
994 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
995 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
996 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
997 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1000 static const uint8_t ms_hmac_digest0[] = {
1001 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
1002 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
1003 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
1004 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
1005 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
1006 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
1007 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
1008 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
1012 /* Begin session 1 */
1014 static uint8_t ms_aes_cbc_key1[] = {
1015 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1016 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1019 static uint8_t ms_aes_cbc_iv1[] = {
1020 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1021 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1024 static const uint8_t ms_aes_cbc_cipher1[] = {
1025 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
1026 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
1027 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
1028 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
1029 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
1030 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
1031 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
1032 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
1033 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
1034 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
1035 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
1036 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
1037 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
1038 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
1039 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
1040 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
1041 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
1042 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
1043 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
1044 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
1045 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
1046 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
1047 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
1048 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
1049 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
1050 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
1051 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
1052 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
1053 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
1054 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
1055 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
1056 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
1057 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
1058 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
1059 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
1060 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
1061 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
1062 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
1063 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
1064 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
1065 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
1066 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
1067 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
1068 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
1069 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
1070 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
1071 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
1072 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
1073 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
1074 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
1075 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
1076 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
1077 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
1078 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
1079 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
1080 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
1081 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
1082 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
1083 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
1084 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
1085 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
1086 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
1087 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
1088 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
1092 static uint8_t ms_hmac_key1[] = {
1093 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1094 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1095 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1096 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1097 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1098 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1099 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1100 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1103 static const uint8_t ms_hmac_digest1[] = {
1104 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
1105 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
1106 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
1107 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
1108 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
1109 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
1110 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
1111 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
1114 /* Begin Session 2 */
1115 static uint8_t ms_aes_cbc_key2[] = {
1116 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1117 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1120 static uint8_t ms_aes_cbc_iv2[] = {
1121 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1122 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
1125 static const uint8_t ms_aes_cbc_cipher2[] = {
1126 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
1127 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
1128 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
1129 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
1130 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
1131 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
1132 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
1133 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
1134 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
1135 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
1136 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
1137 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
1138 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
1139 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
1140 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
1141 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
1142 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
1143 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
1144 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
1145 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
1146 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
1147 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
1148 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
1149 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
1150 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
1151 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
1152 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
1153 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
1154 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
1155 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
1156 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
1157 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
1158 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
1159 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
1160 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
1161 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
1162 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
1163 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
1164 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
1165 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
1166 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
1167 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
1168 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
1169 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
1170 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
1171 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
1172 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
1173 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
1174 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
1175 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
1176 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
1177 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
1178 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
1179 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
1180 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
1181 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
1182 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
1183 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
1184 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
1185 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
1186 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
1187 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
1188 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
1189 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
1192 static uint8_t ms_hmac_key2[] = {
1193 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
1194 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1195 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1196 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
1197 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
1198 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1199 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
1200 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
1203 static const uint8_t ms_hmac_digest2[] = {
1204 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
1205 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
1206 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
1207 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
1208 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
1209 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
1210 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
1211 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
1218 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
1220 struct crypto_testsuite_params *ts_params = &testsuite_params;
1221 struct crypto_unittest_params *ut_params = &unittest_params;
1223 /* Generate test mbuf data and space for digest */
1224 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1225 catch_22_quote, QUOTE_512_BYTES, 0);
1227 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1228 DIGEST_BYTE_LENGTH_SHA1);
1229 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1231 /* Setup Cipher Parameters */
1232 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1233 ut_params->cipher_xform.next = &ut_params->auth_xform;
1235 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1236 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
1237 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
1238 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1240 /* Setup HMAC Parameters */
1241 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1243 ut_params->auth_xform.next = NULL;
1245 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
1246 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
1247 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
1248 ut_params->auth_xform.auth.key.data = hmac_sha1_key;
1249 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
1251 /* Create crypto session*/
1252 ut_params->sess = rte_cryptodev_sym_session_create(
1253 ts_params->valid_devs[0],
1254 &ut_params->cipher_xform);
1255 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1257 /* Generate crypto op data structure */
1258 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1259 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1260 TEST_ASSERT_NOT_NULL(ut_params->op,
1261 "Failed to allocate symmetric crypto operation struct");
1263 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1265 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1267 /* set crypto operation source mbuf */
1268 sym_op->m_src = ut_params->ibuf;
1270 /* Set crypto operation authentication parameters */
1271 sym_op->auth.digest.data = ut_params->digest;
1272 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1273 ut_params->ibuf, QUOTE_512_BYTES);
1274 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA1;
1276 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1277 sym_op->auth.data.length = QUOTE_512_BYTES;
1279 /* Set crypto operation cipher parameters */
1280 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1281 CIPHER_IV_LENGTH_AES_CBC);
1282 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1283 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1285 rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
1286 CIPHER_IV_LENGTH_AES_CBC);
1288 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1289 sym_op->cipher.data.length = QUOTE_512_BYTES;
1291 /* Process crypto operation */
1292 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1293 ut_params->op), "failed to process sym crypto op");
1295 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1296 "crypto op processing failed");
1299 uint8_t *ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
1300 uint8_t *, CIPHER_IV_LENGTH_AES_CBC);
1302 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
1303 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1305 "ciphertext data not as expected");
1307 uint8_t *digest = ciphertext + QUOTE_512_BYTES;
1309 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
1310 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
1311 gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
1312 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
1313 DIGEST_BYTE_LENGTH_SHA1,
1314 "Generated digest data not as expected");
1316 return TEST_SUCCESS;
1319 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
1321 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
1323 static uint8_t hmac_sha512_key[] = {
1324 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
1325 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
1326 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
1327 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
1328 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
1329 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
1330 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
1331 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
1333 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
1334 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
1335 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
1336 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
1337 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
1338 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
1339 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
1340 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
1341 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
1346 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1347 struct crypto_unittest_params *ut_params,
1348 uint8_t *cipher_key,
1352 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1353 struct crypto_unittest_params *ut_params,
1354 struct crypto_testsuite_params *ts_params,
1355 const uint8_t *cipher,
1356 const uint8_t *digest,
1361 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
1362 struct crypto_unittest_params *ut_params,
1363 uint8_t *cipher_key,
1367 /* Setup Cipher Parameters */
1368 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1369 ut_params->cipher_xform.next = NULL;
1371 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1372 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1373 ut_params->cipher_xform.cipher.key.data = cipher_key;
1374 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
1376 /* Setup HMAC Parameters */
1377 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1378 ut_params->auth_xform.next = &ut_params->cipher_xform;
1380 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1381 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
1382 ut_params->auth_xform.auth.key.data = hmac_key;
1383 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
1384 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
1386 return TEST_SUCCESS;
1391 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
1392 struct crypto_unittest_params *ut_params,
1393 struct crypto_testsuite_params *ts_params,
1394 const uint8_t *cipher,
1395 const uint8_t *digest,
1398 /* Generate test mbuf data and digest */
1399 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
1402 QUOTE_512_BYTES, 0);
1404 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1405 DIGEST_BYTE_LENGTH_SHA512);
1406 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1408 rte_memcpy(ut_params->digest,
1410 DIGEST_BYTE_LENGTH_SHA512);
1412 /* Generate Crypto op data structure */
1413 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1414 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1415 TEST_ASSERT_NOT_NULL(ut_params->op,
1416 "Failed to allocate symmetric crypto operation struct");
1418 rte_crypto_op_attach_sym_session(ut_params->op, sess);
1420 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1422 /* set crypto operation source mbuf */
1423 sym_op->m_src = ut_params->ibuf;
1425 sym_op->auth.digest.data = ut_params->digest;
1426 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1427 ut_params->ibuf, QUOTE_512_BYTES);
1428 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA512;
1430 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1431 sym_op->auth.data.length = QUOTE_512_BYTES;
1433 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1434 ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
1435 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys_offset(
1436 ut_params->ibuf, 0);
1437 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1439 rte_memcpy(sym_op->cipher.iv.data, iv,
1440 CIPHER_IV_LENGTH_AES_CBC);
1442 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1443 sym_op->cipher.data.length = QUOTE_512_BYTES;
1445 /* Process crypto operation */
1446 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1447 ut_params->op), "failed to process sym crypto op");
1449 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1450 "crypto op processing failed");
1452 ut_params->obuf = ut_params->op->sym->m_src;
1455 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1456 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
1457 CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
1459 "Plaintext data not as expected");
1462 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1463 "Digest verification failed");
1465 return TEST_SUCCESS;
1469 test_AES_chain_mb_all(void)
1471 struct crypto_testsuite_params *ts_params = &testsuite_params;
1474 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1475 ts_params->op_mpool, ts_params->valid_devs[0],
1476 RTE_CRYPTODEV_AESNI_MB_PMD,
1477 BLKCIPHER_AES_CHAIN_TYPE);
1479 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1481 return TEST_SUCCESS;
1485 test_AES_chain_openssl_all(void)
1487 struct crypto_testsuite_params *ts_params = &testsuite_params;
1490 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1491 ts_params->op_mpool, ts_params->valid_devs[0],
1492 RTE_CRYPTODEV_OPENSSL_PMD,
1493 BLKCIPHER_AES_CHAIN_TYPE);
1495 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1497 return TEST_SUCCESS;
1501 test_AES_cipheronly_openssl_all(void)
1503 struct crypto_testsuite_params *ts_params = &testsuite_params;
1506 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1507 ts_params->op_mpool, ts_params->valid_devs[0],
1508 RTE_CRYPTODEV_OPENSSL_PMD,
1509 BLKCIPHER_AES_CIPHERONLY_TYPE);
1511 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1513 return TEST_SUCCESS;
1517 test_AES_chain_qat_all(void)
1519 struct crypto_testsuite_params *ts_params = &testsuite_params;
1522 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1523 ts_params->op_mpool, ts_params->valid_devs[0],
1524 RTE_CRYPTODEV_QAT_SYM_PMD,
1525 BLKCIPHER_AES_CHAIN_TYPE);
1527 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1529 return TEST_SUCCESS;
1533 test_AES_cipheronly_qat_all(void)
1535 struct crypto_testsuite_params *ts_params = &testsuite_params;
1538 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1539 ts_params->op_mpool, ts_params->valid_devs[0],
1540 RTE_CRYPTODEV_QAT_SYM_PMD,
1541 BLKCIPHER_AES_CIPHERONLY_TYPE);
1543 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1545 return TEST_SUCCESS;
1549 test_authonly_openssl_all(void)
1551 struct crypto_testsuite_params *ts_params = &testsuite_params;
1554 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
1555 ts_params->op_mpool, ts_params->valid_devs[0],
1556 RTE_CRYPTODEV_OPENSSL_PMD,
1557 BLKCIPHER_AUTHONLY_TYPE);
1559 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1561 return TEST_SUCCESS;
1564 /* ***** SNOW 3G Tests ***** */
1566 create_wireless_algo_hash_session(uint8_t dev_id,
1567 const uint8_t *key, const uint8_t key_len,
1568 const uint8_t aad_len, const uint8_t auth_len,
1569 enum rte_crypto_auth_operation op,
1570 enum rte_crypto_auth_algorithm algo)
1572 uint8_t hash_key[key_len];
1574 struct crypto_unittest_params *ut_params = &unittest_params;
1576 memcpy(hash_key, key, key_len);
1578 TEST_HEXDUMP(stdout, "key:", key, key_len);
1580 /* Setup Authentication Parameters */
1581 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1582 ut_params->auth_xform.next = NULL;
1584 ut_params->auth_xform.auth.op = op;
1585 ut_params->auth_xform.auth.algo = algo;
1586 ut_params->auth_xform.auth.key.length = key_len;
1587 ut_params->auth_xform.auth.key.data = hash_key;
1588 ut_params->auth_xform.auth.digest_length = auth_len;
1589 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1590 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1591 &ut_params->auth_xform);
1592 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1597 create_wireless_algo_cipher_session(uint8_t dev_id,
1598 enum rte_crypto_cipher_operation op,
1599 enum rte_crypto_cipher_algorithm algo,
1600 const uint8_t *key, const uint8_t key_len)
1602 uint8_t cipher_key[key_len];
1604 struct crypto_unittest_params *ut_params = &unittest_params;
1606 memcpy(cipher_key, key, key_len);
1608 /* Setup Cipher Parameters */
1609 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1610 ut_params->cipher_xform.next = NULL;
1612 ut_params->cipher_xform.cipher.algo = algo;
1613 ut_params->cipher_xform.cipher.op = op;
1614 ut_params->cipher_xform.cipher.key.data = cipher_key;
1615 ut_params->cipher_xform.cipher.key.length = key_len;
1617 TEST_HEXDUMP(stdout, "key:", key, key_len);
1619 /* Create Crypto session */
1620 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1623 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1628 create_wireless_algo_cipher_operation(const uint8_t *iv, const unsigned iv_len,
1629 const unsigned cipher_len,
1630 const unsigned cipher_offset,
1631 enum rte_crypto_cipher_algorithm algo)
1633 struct crypto_testsuite_params *ts_params = &testsuite_params;
1634 struct crypto_unittest_params *ut_params = &unittest_params;
1635 unsigned iv_pad_len = 0;
1637 /* Generate Crypto op data structure */
1638 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1639 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1640 TEST_ASSERT_NOT_NULL(ut_params->op,
1641 "Failed to allocate pktmbuf offload");
1643 /* Set crypto operation data parameters */
1644 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1646 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1648 /* set crypto operation source mbuf */
1649 sym_op->m_src = ut_params->ibuf;
1652 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1653 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1655 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1657 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf
1660 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1662 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1663 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1664 sym_op->cipher.iv.length = iv_pad_len;
1666 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1667 sym_op->cipher.data.length = cipher_len;
1668 sym_op->cipher.data.offset = cipher_offset;
1673 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, const uint8_t iv_len,
1674 const unsigned cipher_len,
1675 const unsigned cipher_offset,
1676 enum rte_crypto_cipher_algorithm algo)
1678 struct crypto_testsuite_params *ts_params = &testsuite_params;
1679 struct crypto_unittest_params *ut_params = &unittest_params;
1680 unsigned iv_pad_len = 0;
1682 /* Generate Crypto op data structure */
1683 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1684 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1685 TEST_ASSERT_NOT_NULL(ut_params->op,
1686 "Failed to allocate pktmbuf offload");
1688 /* Set crypto operation data parameters */
1689 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1691 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1693 /* set crypto operation source mbuf */
1694 sym_op->m_src = ut_params->ibuf;
1695 sym_op->m_dst = ut_params->obuf;
1698 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1699 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1701 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1702 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1705 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1707 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1708 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1709 sym_op->cipher.iv.length = iv_pad_len;
1711 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1712 sym_op->cipher.data.length = cipher_len;
1713 sym_op->cipher.data.offset = cipher_offset;
1718 create_wireless_algo_cipher_auth_session(uint8_t dev_id,
1719 enum rte_crypto_cipher_operation cipher_op,
1720 enum rte_crypto_auth_operation auth_op,
1721 enum rte_crypto_auth_algorithm auth_algo,
1722 enum rte_crypto_cipher_algorithm cipher_algo,
1723 const uint8_t *key, const uint8_t key_len,
1724 const uint8_t aad_len, const uint8_t auth_len)
1727 uint8_t cipher_auth_key[key_len];
1729 struct crypto_unittest_params *ut_params = &unittest_params;
1731 memcpy(cipher_auth_key, key, key_len);
1733 /* Setup Authentication Parameters */
1734 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1735 ut_params->auth_xform.next = NULL;
1737 ut_params->auth_xform.auth.op = auth_op;
1738 ut_params->auth_xform.auth.algo = auth_algo;
1739 ut_params->auth_xform.auth.key.length = key_len;
1740 /* Hash key = cipher key */
1741 ut_params->auth_xform.auth.key.data = cipher_auth_key;
1742 ut_params->auth_xform.auth.digest_length = auth_len;
1743 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1745 /* Setup Cipher Parameters */
1746 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1747 ut_params->cipher_xform.next = &ut_params->auth_xform;
1749 ut_params->cipher_xform.cipher.algo = cipher_algo;
1750 ut_params->cipher_xform.cipher.op = cipher_op;
1751 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
1752 ut_params->cipher_xform.cipher.key.length = key_len;
1754 TEST_HEXDUMP(stdout, "key:", key, key_len);
1756 /* Create Crypto session*/
1757 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1758 &ut_params->cipher_xform);
1760 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1765 create_wireless_algo_auth_cipher_session(uint8_t dev_id,
1766 enum rte_crypto_cipher_operation cipher_op,
1767 enum rte_crypto_auth_operation auth_op,
1768 enum rte_crypto_auth_algorithm auth_algo,
1769 enum rte_crypto_cipher_algorithm cipher_algo,
1770 const uint8_t *key, const uint8_t key_len,
1771 const uint8_t aad_len, const uint8_t auth_len)
1773 uint8_t auth_cipher_key[key_len];
1775 struct crypto_unittest_params *ut_params = &unittest_params;
1777 memcpy(auth_cipher_key, key, key_len);
1779 /* Setup Authentication Parameters */
1780 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1781 ut_params->auth_xform.auth.op = auth_op;
1782 ut_params->auth_xform.next = &ut_params->cipher_xform;
1783 ut_params->auth_xform.auth.algo = auth_algo;
1784 ut_params->auth_xform.auth.key.length = key_len;
1785 ut_params->auth_xform.auth.key.data = auth_cipher_key;
1786 ut_params->auth_xform.auth.digest_length = auth_len;
1787 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1789 /* Setup Cipher Parameters */
1790 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1791 ut_params->cipher_xform.next = NULL;
1792 ut_params->cipher_xform.cipher.algo = cipher_algo;
1793 ut_params->cipher_xform.cipher.op = cipher_op;
1794 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
1795 ut_params->cipher_xform.cipher.key.length = key_len;
1797 TEST_HEXDUMP(stdout, "key:", key, key_len);
1799 /* Create Crypto session*/
1800 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1801 &ut_params->auth_xform);
1803 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1809 create_wireless_algo_hash_operation(const uint8_t *auth_tag,
1810 const unsigned auth_tag_len,
1811 const uint8_t *aad, const unsigned aad_len,
1812 unsigned data_pad_len,
1813 enum rte_crypto_auth_operation op,
1814 enum rte_crypto_auth_algorithm algo,
1815 const unsigned auth_len, const unsigned auth_offset)
1817 struct crypto_testsuite_params *ts_params = &testsuite_params;
1819 struct crypto_unittest_params *ut_params = &unittest_params;
1821 unsigned aad_buffer_len;
1823 /* Generate Crypto op data structure */
1824 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1825 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1826 TEST_ASSERT_NOT_NULL(ut_params->op,
1827 "Failed to allocate pktmbuf offload");
1829 /* Set crypto operation data parameters */
1830 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1832 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1834 /* set crypto operation source mbuf */
1835 sym_op->m_src = ut_params->ibuf;
1839 * Always allocate the aad up to the block size.
1840 * The cryptodev API calls out -
1841 * - the array must be big enough to hold the AAD, plus any
1842 * space to round this up to the nearest multiple of the
1843 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
1845 if (algo == RTE_CRYPTO_AUTH_KASUMI_F9)
1846 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
1848 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
1849 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
1850 ut_params->ibuf, aad_buffer_len);
1851 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
1852 "no room to prepend aad");
1853 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
1855 sym_op->auth.aad.length = aad_len;
1857 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
1858 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
1860 TEST_HEXDUMP(stdout, "aad:",
1861 sym_op->auth.aad.data, aad_len);
1864 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
1865 ut_params->ibuf, auth_tag_len);
1867 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
1868 "no room to append auth tag");
1869 ut_params->digest = sym_op->auth.digest.data;
1870 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1871 ut_params->ibuf, data_pad_len + aad_len);
1872 sym_op->auth.digest.length = auth_tag_len;
1873 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
1874 memset(sym_op->auth.digest.data, 0, auth_tag_len);
1876 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
1878 TEST_HEXDUMP(stdout, "digest:",
1879 sym_op->auth.digest.data,
1880 sym_op->auth.digest.length);
1882 sym_op->auth.data.length = auth_len;
1883 sym_op->auth.data.offset = auth_offset;
1889 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
1890 const unsigned auth_tag_len,
1891 const uint8_t *aad, const uint8_t aad_len,
1892 unsigned data_pad_len,
1893 enum rte_crypto_auth_operation op,
1894 enum rte_crypto_auth_algorithm auth_algo,
1895 enum rte_crypto_cipher_algorithm cipher_algo,
1896 const uint8_t *iv, const uint8_t iv_len,
1897 const unsigned cipher_len, const unsigned cipher_offset,
1898 const unsigned auth_len, const unsigned auth_offset)
1900 struct crypto_testsuite_params *ts_params = &testsuite_params;
1901 struct crypto_unittest_params *ut_params = &unittest_params;
1903 unsigned iv_pad_len = 0;
1904 unsigned aad_buffer_len;
1906 /* Generate Crypto op data structure */
1907 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1908 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1909 TEST_ASSERT_NOT_NULL(ut_params->op,
1910 "Failed to allocate pktmbuf offload");
1911 /* Set crypto operation data parameters */
1912 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1914 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1916 /* set crypto operation source mbuf */
1917 sym_op->m_src = ut_params->ibuf;
1920 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
1921 ut_params->ibuf, auth_tag_len);
1923 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
1924 "no room to append auth tag");
1925 ut_params->digest = sym_op->auth.digest.data;
1926 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1927 ut_params->ibuf, data_pad_len);
1928 sym_op->auth.digest.length = auth_tag_len;
1929 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
1930 memset(sym_op->auth.digest.data, 0, auth_tag_len);
1932 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
1934 TEST_HEXDUMP(stdout, "digest:",
1935 sym_op->auth.digest.data,
1936 sym_op->auth.digest.length);
1940 * Always allocate the aad up to the block size.
1941 * The cryptodev API calls out -
1942 * - the array must be big enough to hold the AAD, plus any
1943 * space to round this up to the nearest multiple of the
1944 * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
1946 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
1947 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
1949 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
1950 sym_op->auth.aad.data =
1951 (uint8_t *)rte_pktmbuf_prepend(
1952 ut_params->ibuf, aad_buffer_len);
1953 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
1954 "no room to prepend aad");
1955 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
1957 sym_op->auth.aad.length = aad_len;
1958 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
1959 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
1960 TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data, aad_len);
1963 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1964 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1966 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1967 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1968 ut_params->ibuf, iv_pad_len);
1970 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1971 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1972 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1973 sym_op->cipher.iv.length = iv_pad_len;
1974 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1975 sym_op->cipher.data.length = cipher_len;
1976 sym_op->cipher.data.offset = cipher_offset + auth_offset;
1977 sym_op->auth.data.length = auth_len;
1978 sym_op->auth.data.offset = auth_offset + cipher_offset;
1984 create_wireless_algo_auth_cipher_operation(const unsigned auth_tag_len,
1985 const uint8_t *iv, const uint8_t iv_len,
1986 const uint8_t *aad, const uint8_t aad_len,
1987 unsigned data_pad_len,
1988 const unsigned cipher_len, const unsigned cipher_offset,
1989 const unsigned auth_len, const unsigned auth_offset,
1990 enum rte_crypto_auth_algorithm auth_algo,
1991 enum rte_crypto_cipher_algorithm cipher_algo)
1993 struct crypto_testsuite_params *ts_params = &testsuite_params;
1994 struct crypto_unittest_params *ut_params = &unittest_params;
1996 unsigned iv_pad_len = 0;
1997 unsigned aad_buffer_len = 0;
1999 /* Generate Crypto op data structure */
2000 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
2001 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2002 TEST_ASSERT_NOT_NULL(ut_params->op,
2003 "Failed to allocate pktmbuf offload");
2005 /* Set crypto operation data parameters */
2006 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
2008 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
2010 /* set crypto operation source mbuf */
2011 sym_op->m_src = ut_params->ibuf;
2014 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
2015 ut_params->ibuf, auth_tag_len);
2017 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
2018 "no room to append auth tag");
2020 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
2021 ut_params->ibuf, data_pad_len);
2022 sym_op->auth.digest.length = auth_tag_len;
2024 memset(sym_op->auth.digest.data, 0, auth_tag_len);
2026 TEST_HEXDUMP(stdout, "digest:",
2027 sym_op->auth.digest.data,
2028 sym_op->auth.digest.length);
2032 * Always allocate the aad up to the block size.
2033 * The cryptodev API calls out -
2034 * - the array must be big enough to hold the AAD, plus any
2035 * space to round this up to the nearest multiple of the
2036 * block size (8 bytes for KASUMI 16 bytes).
2038 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
2039 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
2041 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
2042 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
2043 ut_params->ibuf, aad_buffer_len);
2044 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
2045 "no room to prepend aad");
2046 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
2048 sym_op->auth.aad.length = aad_len;
2049 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
2050 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
2051 TEST_HEXDUMP(stdout, "aad:",
2052 sym_op->auth.aad.data, aad_len);
2055 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
2056 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
2058 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
2060 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
2061 ut_params->ibuf, iv_pad_len);
2062 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
2064 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
2065 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
2066 sym_op->cipher.iv.length = iv_pad_len;
2068 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
2070 sym_op->cipher.data.length = cipher_len;
2071 sym_op->cipher.data.offset = auth_offset + cipher_offset;
2073 sym_op->auth.data.length = auth_len;
2074 sym_op->auth.data.offset = auth_offset + cipher_offset;
2080 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
2082 struct crypto_testsuite_params *ts_params = &testsuite_params;
2083 struct crypto_unittest_params *ut_params = &unittest_params;
2086 unsigned plaintext_pad_len;
2087 unsigned plaintext_len;
2090 /* Create SNOW 3G session */
2091 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2092 tdata->key.data, tdata->key.len,
2093 tdata->aad.len, tdata->digest.len,
2094 RTE_CRYPTO_AUTH_OP_GENERATE,
2095 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2099 /* alloc mbuf and set payload */
2100 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2102 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2103 rte_pktmbuf_tailroom(ut_params->ibuf));
2105 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2106 /* Append data which is padded to a multiple of */
2107 /* the algorithms block size */
2108 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2109 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2111 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2113 /* Create SNOW 3G operation */
2114 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2115 tdata->aad.data, tdata->aad.len,
2116 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2117 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2118 tdata->validAuthLenInBits.len,
2119 tdata->validAuthOffsetLenInBits.len);
2123 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2125 ut_params->obuf = ut_params->op->sym->m_src;
2126 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2127 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2128 + plaintext_pad_len + tdata->aad.len;
2131 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2134 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2135 "SNOW 3G Generated auth tag not as expected");
2141 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
2143 struct crypto_testsuite_params *ts_params = &testsuite_params;
2144 struct crypto_unittest_params *ut_params = &unittest_params;
2147 unsigned plaintext_pad_len;
2148 unsigned plaintext_len;
2151 /* Create SNOW 3G session */
2152 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2153 tdata->key.data, tdata->key.len,
2154 tdata->aad.len, tdata->digest.len,
2155 RTE_CRYPTO_AUTH_OP_VERIFY,
2156 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
2159 /* alloc mbuf and set payload */
2160 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2162 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2163 rte_pktmbuf_tailroom(ut_params->ibuf));
2165 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2166 /* Append data which is padded to a multiple of */
2167 /* the algorithms block size */
2168 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2169 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2171 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2173 /* Create SNOW 3G operation */
2174 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2176 tdata->aad.data, tdata->aad.len,
2178 RTE_CRYPTO_AUTH_OP_VERIFY,
2179 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2180 tdata->validAuthLenInBits.len,
2181 tdata->validAuthOffsetLenInBits.len);
2185 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2187 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2188 ut_params->obuf = ut_params->op->sym->m_src;
2189 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2190 + plaintext_pad_len + tdata->aad.len;
2193 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2202 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
2204 struct crypto_testsuite_params *ts_params = &testsuite_params;
2205 struct crypto_unittest_params *ut_params = &unittest_params;
2208 unsigned plaintext_pad_len;
2209 unsigned plaintext_len;
2212 /* Create KASUMI session */
2213 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2214 tdata->key.data, tdata->key.len,
2215 tdata->aad.len, tdata->digest.len,
2216 RTE_CRYPTO_AUTH_OP_GENERATE,
2217 RTE_CRYPTO_AUTH_KASUMI_F9);
2221 /* alloc mbuf and set payload */
2222 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2224 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2225 rte_pktmbuf_tailroom(ut_params->ibuf));
2227 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2228 /* Append data which is padded to a multiple of */
2229 /* the algorithms block size */
2230 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2231 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2233 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2235 /* Create KASUMI operation */
2236 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
2237 tdata->aad.data, tdata->aad.len,
2238 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2239 RTE_CRYPTO_AUTH_KASUMI_F9,
2240 tdata->validAuthLenInBits.len,
2241 tdata->validAuthOffsetLenInBits.len);
2245 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2247 ut_params->obuf = ut_params->op->sym->m_src;
2248 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2249 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2250 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
2253 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2256 DIGEST_BYTE_LENGTH_KASUMI_F9,
2257 "KASUMI Generated auth tag not as expected");
2263 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
2265 struct crypto_testsuite_params *ts_params = &testsuite_params;
2266 struct crypto_unittest_params *ut_params = &unittest_params;
2269 unsigned plaintext_pad_len;
2270 unsigned plaintext_len;
2273 /* Create KASUMI session */
2274 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
2275 tdata->key.data, tdata->key.len,
2276 tdata->aad.len, tdata->digest.len,
2277 RTE_CRYPTO_AUTH_OP_VERIFY,
2278 RTE_CRYPTO_AUTH_KASUMI_F9);
2281 /* alloc mbuf and set payload */
2282 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2284 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2285 rte_pktmbuf_tailroom(ut_params->ibuf));
2287 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2288 /* Append data which is padded to a multiple */
2289 /* of the algorithms block size */
2290 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2291 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2293 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2295 /* Create KASUMI operation */
2296 retval = create_wireless_algo_hash_operation(tdata->digest.data,
2298 tdata->aad.data, tdata->aad.len,
2300 RTE_CRYPTO_AUTH_OP_VERIFY,
2301 RTE_CRYPTO_AUTH_KASUMI_F9,
2302 tdata->validAuthLenInBits.len,
2303 tdata->validAuthOffsetLenInBits.len);
2307 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2309 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2310 ut_params->obuf = ut_params->op->sym->m_src;
2311 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2312 + plaintext_pad_len + tdata->aad.len;
2315 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
2324 test_snow3g_hash_generate_test_case_1(void)
2326 return test_snow3g_authentication(&snow3g_hash_test_case_1);
2330 test_snow3g_hash_generate_test_case_2(void)
2332 return test_snow3g_authentication(&snow3g_hash_test_case_2);
2336 test_snow3g_hash_generate_test_case_3(void)
2338 return test_snow3g_authentication(&snow3g_hash_test_case_3);
2342 test_snow3g_hash_generate_test_case_4(void)
2344 return test_snow3g_authentication(&snow3g_hash_test_case_4);
2348 test_snow3g_hash_generate_test_case_5(void)
2350 return test_snow3g_authentication(&snow3g_hash_test_case_5);
2354 test_snow3g_hash_generate_test_case_6(void)
2356 return test_snow3g_authentication(&snow3g_hash_test_case_6);
2360 test_snow3g_hash_verify_test_case_1(void)
2362 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
2367 test_snow3g_hash_verify_test_case_2(void)
2369 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
2373 test_snow3g_hash_verify_test_case_3(void)
2375 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
2379 test_snow3g_hash_verify_test_case_4(void)
2381 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
2385 test_snow3g_hash_verify_test_case_5(void)
2387 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
2391 test_snow3g_hash_verify_test_case_6(void)
2393 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
2397 test_kasumi_hash_generate_test_case_1(void)
2399 return test_kasumi_authentication(&kasumi_hash_test_case_1);
2403 test_kasumi_hash_generate_test_case_2(void)
2405 return test_kasumi_authentication(&kasumi_hash_test_case_2);
2409 test_kasumi_hash_generate_test_case_3(void)
2411 return test_kasumi_authentication(&kasumi_hash_test_case_3);
2415 test_kasumi_hash_generate_test_case_4(void)
2417 return test_kasumi_authentication(&kasumi_hash_test_case_4);
2421 test_kasumi_hash_generate_test_case_5(void)
2423 return test_kasumi_authentication(&kasumi_hash_test_case_5);
2427 test_kasumi_hash_generate_test_case_6(void)
2429 return test_kasumi_authentication(&kasumi_hash_test_case_6);
2433 test_kasumi_hash_verify_test_case_1(void)
2435 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
2439 test_kasumi_hash_verify_test_case_2(void)
2441 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
2445 test_kasumi_hash_verify_test_case_3(void)
2447 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
2451 test_kasumi_hash_verify_test_case_4(void)
2453 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
2457 test_kasumi_hash_verify_test_case_5(void)
2459 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
2463 test_kasumi_encryption(const struct kasumi_test_data *tdata)
2465 struct crypto_testsuite_params *ts_params = &testsuite_params;
2466 struct crypto_unittest_params *ut_params = &unittest_params;
2469 uint8_t *plaintext, *ciphertext;
2470 unsigned plaintext_pad_len;
2471 unsigned plaintext_len;
2473 /* Create KASUMI session */
2474 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2475 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2476 RTE_CRYPTO_CIPHER_KASUMI_F8,
2477 tdata->key.data, tdata->key.len);
2481 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2483 /* Clear mbuf payload */
2484 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2485 rte_pktmbuf_tailroom(ut_params->ibuf));
2487 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2488 /* Append data which is padded to a multiple */
2489 /* of the algorithms block size */
2490 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2491 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2493 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2495 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2497 /* Create KASUMI operation */
2498 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
2499 tdata->plaintext.len,
2500 tdata->validCipherOffsetLenInBits.len,
2501 RTE_CRYPTO_CIPHER_KASUMI_F8);
2505 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2507 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2509 ut_params->obuf = ut_params->op->sym->m_dst;
2510 if (ut_params->obuf)
2511 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2514 ciphertext = plaintext;
2516 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2519 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2521 tdata->ciphertext.data,
2522 tdata->validCipherLenInBits.len,
2523 "KASUMI Ciphertext data not as expected");
2528 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
2530 struct crypto_testsuite_params *ts_params = &testsuite_params;
2531 struct crypto_unittest_params *ut_params = &unittest_params;
2534 uint8_t *plaintext, *ciphertext;
2535 unsigned plaintext_pad_len;
2536 unsigned plaintext_len;
2538 /* Create KASUMI session */
2539 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2540 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2541 RTE_CRYPTO_CIPHER_KASUMI_F8,
2542 tdata->key.data, tdata->key.len);
2546 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2547 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2549 /* Clear mbuf payload */
2550 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2551 rte_pktmbuf_tailroom(ut_params->ibuf));
2553 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2554 /* Append data which is padded to a multiple */
2555 /* of the algorithms block size */
2556 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2557 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2559 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2560 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2562 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2564 /* Create KASUMI operation */
2565 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2567 tdata->plaintext.len,
2568 tdata->validCipherOffsetLenInBits.len,
2569 RTE_CRYPTO_CIPHER_KASUMI_F8);
2573 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2575 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2577 ut_params->obuf = ut_params->op->sym->m_dst;
2578 if (ut_params->obuf)
2579 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2582 ciphertext = plaintext;
2584 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2587 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2589 tdata->ciphertext.data,
2590 tdata->validCipherLenInBits.len,
2591 "KASUMI Ciphertext data not as expected");
2596 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
2598 struct crypto_testsuite_params *ts_params = &testsuite_params;
2599 struct crypto_unittest_params *ut_params = &unittest_params;
2602 uint8_t *ciphertext, *plaintext;
2603 unsigned ciphertext_pad_len;
2604 unsigned ciphertext_len;
2606 /* Create KASUMI session */
2607 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2608 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2609 RTE_CRYPTO_CIPHER_KASUMI_F8,
2610 tdata->key.data, tdata->key.len);
2614 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2615 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2617 /* Clear mbuf payload */
2618 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2619 rte_pktmbuf_tailroom(ut_params->ibuf));
2621 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2622 /* Append data which is padded to a multiple */
2623 /* of the algorithms block size */
2624 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2625 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2626 ciphertext_pad_len);
2627 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
2628 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2630 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2632 /* Create KASUMI operation */
2633 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2635 tdata->ciphertext.len,
2636 tdata->validCipherOffsetLenInBits.len,
2637 RTE_CRYPTO_CIPHER_KASUMI_F8);
2641 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2643 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2645 ut_params->obuf = ut_params->op->sym->m_dst;
2646 if (ut_params->obuf)
2647 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2650 plaintext = ciphertext;
2652 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2655 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2657 tdata->plaintext.data,
2658 tdata->validCipherLenInBits.len,
2659 "KASUMI Plaintext data not as expected");
2664 test_kasumi_decryption(const struct kasumi_test_data *tdata)
2666 struct crypto_testsuite_params *ts_params = &testsuite_params;
2667 struct crypto_unittest_params *ut_params = &unittest_params;
2670 uint8_t *ciphertext, *plaintext;
2671 unsigned ciphertext_pad_len;
2672 unsigned ciphertext_len;
2674 /* Create KASUMI session */
2675 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2676 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2677 RTE_CRYPTO_CIPHER_KASUMI_F8,
2678 tdata->key.data, tdata->key.len);
2682 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2684 /* Clear mbuf payload */
2685 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2686 rte_pktmbuf_tailroom(ut_params->ibuf));
2688 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2689 /* Append data which is padded to a multiple */
2690 /* of the algorithms block size */
2691 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2692 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2693 ciphertext_pad_len);
2694 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2696 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2698 /* Create KASUMI operation */
2699 retval = create_wireless_algo_cipher_operation(tdata->iv.data,
2701 tdata->ciphertext.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 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2716 plaintext = ciphertext;
2718 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2721 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2723 tdata->plaintext.data,
2724 tdata->validCipherLenInBits.len,
2725 "KASUMI Plaintext data not as expected");
2730 test_snow3g_encryption(const struct snow3g_test_data *tdata)
2732 struct crypto_testsuite_params *ts_params = &testsuite_params;
2733 struct crypto_unittest_params *ut_params = &unittest_params;
2736 uint8_t *plaintext, *ciphertext;
2737 unsigned plaintext_pad_len;
2738 unsigned plaintext_len;
2740 /* Create SNOW 3G session */
2741 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2742 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2743 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2744 tdata->key.data, tdata->key.len);
2748 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2750 /* Clear mbuf payload */
2751 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2752 rte_pktmbuf_tailroom(ut_params->ibuf));
2754 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2755 /* Append data which is padded to a multiple of */
2756 /* the algorithms block size */
2757 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2758 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2760 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2762 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2764 /* Create SNOW 3G operation */
2765 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
2766 tdata->validCipherLenInBits.len,
2767 tdata->validCipherOffsetLenInBits.len,
2768 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2772 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2774 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2776 ut_params->obuf = ut_params->op->sym->m_dst;
2777 if (ut_params->obuf)
2778 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2781 ciphertext = plaintext;
2783 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2786 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2788 tdata->ciphertext.data,
2789 tdata->validDataLenInBits.len,
2790 "SNOW 3G Ciphertext data not as expected");
2796 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
2798 struct crypto_testsuite_params *ts_params = &testsuite_params;
2799 struct crypto_unittest_params *ut_params = &unittest_params;
2800 uint8_t *plaintext, *ciphertext;
2803 unsigned plaintext_pad_len;
2804 unsigned plaintext_len;
2806 /* Create SNOW 3G session */
2807 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2808 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2809 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2810 tdata->key.data, tdata->key.len);
2814 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2815 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2817 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
2818 "Failed to allocate input buffer in mempool");
2819 TEST_ASSERT_NOT_NULL(ut_params->obuf,
2820 "Failed to allocate output buffer in mempool");
2822 /* Clear mbuf payload */
2823 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2824 rte_pktmbuf_tailroom(ut_params->ibuf));
2826 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2827 /* Append data which is padded to a multiple of */
2828 /* the algorithms block size */
2829 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2830 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2832 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2833 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2835 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2837 /* Create SNOW 3G operation */
2838 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2840 tdata->validCipherLenInBits.len,
2841 tdata->validCipherOffsetLenInBits.len,
2842 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2846 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2848 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2850 ut_params->obuf = ut_params->op->sym->m_dst;
2851 if (ut_params->obuf)
2852 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2855 ciphertext = plaintext;
2857 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2860 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2862 tdata->ciphertext.data,
2863 tdata->validDataLenInBits.len,
2864 "SNOW 3G Ciphertext data not as expected");
2868 /* Shift right a buffer by "offset" bits, "offset" < 8 */
2870 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
2872 uint8_t curr_byte, prev_byte;
2873 uint32_t length_in_bytes = ceil_byte_length(length + offset);
2874 uint8_t lower_byte_mask = (1 << offset) - 1;
2877 prev_byte = buffer[0];
2878 buffer[0] >>= offset;
2880 for (i = 1; i < length_in_bytes; i++) {
2881 curr_byte = buffer[i];
2882 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
2883 (curr_byte >> offset);
2884 prev_byte = curr_byte;
2889 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
2891 struct crypto_testsuite_params *ts_params = &testsuite_params;
2892 struct crypto_unittest_params *ut_params = &unittest_params;
2893 uint8_t *plaintext, *ciphertext;
2895 uint32_t plaintext_len;
2896 uint32_t plaintext_pad_len;
2897 uint8_t extra_offset = 4;
2898 uint8_t *expected_ciphertext_shifted;
2900 /* Create SNOW 3G session */
2901 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2902 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2903 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2904 tdata->key.data, tdata->key.len);
2908 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2909 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2911 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
2912 "Failed to allocate input buffer in mempool");
2913 TEST_ASSERT_NOT_NULL(ut_params->obuf,
2914 "Failed to allocate output buffer in mempool");
2916 /* Clear mbuf payload */
2917 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2918 rte_pktmbuf_tailroom(ut_params->ibuf));
2920 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
2922 * Append data which is padded to a
2923 * multiple of the algorithms block size
2925 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2927 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
2930 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2932 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
2933 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
2935 #ifdef RTE_APP_TEST_DEBUG
2936 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
2938 /* Create SNOW 3G operation */
2939 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
2941 tdata->validCipherLenInBits.len,
2942 tdata->validCipherOffsetLenInBits.len +
2944 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2948 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2950 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2952 ut_params->obuf = ut_params->op->sym->m_dst;
2953 if (ut_params->obuf)
2954 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2957 ciphertext = plaintext;
2959 #ifdef RTE_APP_TEST_DEBUG
2960 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
2963 expected_ciphertext_shifted = rte_malloc(NULL,
2964 ceil_byte_length(plaintext_len + extra_offset), 0);
2966 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
2967 "failed to reserve memory for ciphertext shifted\n");
2969 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
2970 ceil_byte_length(tdata->ciphertext.len));
2971 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
2974 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2976 expected_ciphertext_shifted,
2977 tdata->validDataLenInBits.len,
2979 "SNOW 3G Ciphertext data not as expected");
2983 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
2985 struct crypto_testsuite_params *ts_params = &testsuite_params;
2986 struct crypto_unittest_params *ut_params = &unittest_params;
2990 uint8_t *plaintext, *ciphertext;
2991 unsigned ciphertext_pad_len;
2992 unsigned ciphertext_len;
2994 /* Create SNOW 3G session */
2995 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
2996 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2997 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2998 tdata->key.data, tdata->key.len);
3002 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3004 /* Clear mbuf payload */
3005 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3006 rte_pktmbuf_tailroom(ut_params->ibuf));
3008 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3009 /* Append data which is padded to a multiple of */
3010 /* the algorithms block size */
3011 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3012 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3013 ciphertext_pad_len);
3014 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3016 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3018 /* Create SNOW 3G operation */
3019 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3020 tdata->validCipherLenInBits.len,
3021 tdata->validCipherOffsetLenInBits.len,
3022 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3026 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3028 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3029 ut_params->obuf = ut_params->op->sym->m_dst;
3030 if (ut_params->obuf)
3031 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3034 plaintext = ciphertext;
3036 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3039 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3040 tdata->plaintext.data,
3041 tdata->validDataLenInBits.len,
3042 "SNOW 3G Plaintext data not as expected");
3046 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
3048 struct crypto_testsuite_params *ts_params = &testsuite_params;
3049 struct crypto_unittest_params *ut_params = &unittest_params;
3053 uint8_t *plaintext, *ciphertext;
3054 unsigned ciphertext_pad_len;
3055 unsigned ciphertext_len;
3057 /* Create SNOW 3G session */
3058 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3059 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3060 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3061 tdata->key.data, tdata->key.len);
3065 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3066 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3068 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
3069 "Failed to allocate input buffer");
3070 TEST_ASSERT_NOT_NULL(ut_params->obuf,
3071 "Failed to allocate output buffer");
3073 /* Clear mbuf payload */
3074 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3075 rte_pktmbuf_tailroom(ut_params->ibuf));
3077 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
3078 rte_pktmbuf_tailroom(ut_params->obuf));
3080 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
3081 /* Append data which is padded to a multiple of */
3082 /* the algorithms block size */
3083 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
3084 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3085 ciphertext_pad_len);
3086 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
3087 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
3089 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
3091 /* Create SNOW 3G operation */
3092 retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
3094 tdata->validCipherLenInBits.len,
3095 tdata->validCipherOffsetLenInBits.len,
3096 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
3100 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3102 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3103 ut_params->obuf = ut_params->op->sym->m_dst;
3104 if (ut_params->obuf)
3105 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3108 plaintext = ciphertext;
3110 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
3113 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
3114 tdata->plaintext.data,
3115 tdata->validDataLenInBits.len,
3116 "SNOW 3G Plaintext data not as expected");
3121 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
3123 struct crypto_testsuite_params *ts_params = &testsuite_params;
3124 struct crypto_unittest_params *ut_params = &unittest_params;
3128 uint8_t *plaintext, *ciphertext;
3129 unsigned plaintext_pad_len;
3130 unsigned plaintext_len;
3132 /* Create SNOW 3G session */
3133 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
3134 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3135 RTE_CRYPTO_AUTH_OP_GENERATE,
3136 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3137 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3138 tdata->key.data, tdata->key.len,
3139 tdata->aad.len, tdata->digest.len);
3142 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3144 /* clear mbuf payload */
3145 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3146 rte_pktmbuf_tailroom(ut_params->ibuf));
3148 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3149 /* Append data which is padded to a multiple of */
3150 /* the algorithms block size */
3151 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3152 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3154 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3156 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3158 /* Create SNOW 3G operation */
3159 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3160 tdata->digest.len, tdata->aad.data,
3161 tdata->aad.len, /*tdata->plaintext.len,*/
3162 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3163 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3164 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3165 tdata->iv.data, tdata->iv.len,
3166 tdata->validCipherLenInBits.len,
3167 tdata->validCipherOffsetLenInBits.len,
3168 tdata->validAuthLenInBits.len,
3169 tdata->validAuthOffsetLenInBits.len
3174 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3176 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3177 ut_params->obuf = ut_params->op->sym->m_src;
3178 if (ut_params->obuf)
3179 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3180 + tdata->iv.len + tdata->aad.len;
3182 ciphertext = plaintext;
3184 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3186 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3188 tdata->ciphertext.data,
3189 tdata->validDataLenInBits.len,
3190 "SNOW 3G Ciphertext data not as expected");
3192 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3193 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3196 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3199 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3200 "SNOW 3G Generated auth tag not as expected");
3204 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
3206 struct crypto_testsuite_params *ts_params = &testsuite_params;
3207 struct crypto_unittest_params *ut_params = &unittest_params;
3211 uint8_t *plaintext, *ciphertext;
3212 unsigned plaintext_pad_len;
3213 unsigned plaintext_len;
3215 /* Create SNOW 3G session */
3216 retval = create_wireless_algo_auth_cipher_session(ts_params->valid_devs[0],
3217 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3218 RTE_CRYPTO_AUTH_OP_GENERATE,
3219 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3220 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3221 tdata->key.data, tdata->key.len,
3222 tdata->aad.len, tdata->digest.len);
3226 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3228 /* clear mbuf payload */
3229 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3230 rte_pktmbuf_tailroom(ut_params->ibuf));
3232 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3233 /* Append data which is padded to a multiple of */
3234 /* the algorithms block size */
3235 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3236 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3238 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3240 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3242 /* Create SNOW 3G operation */
3243 retval = create_wireless_algo_auth_cipher_operation(
3245 tdata->iv.data, tdata->iv.len,
3246 tdata->aad.data, tdata->aad.len,
3248 tdata->validCipherLenInBits.len,
3249 tdata->validCipherOffsetLenInBits.len,
3250 tdata->validAuthLenInBits.len,
3251 tdata->validAuthOffsetLenInBits.len,
3252 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3253 RTE_CRYPTO_CIPHER_SNOW3G_UEA2
3259 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3261 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3262 ut_params->obuf = ut_params->op->sym->m_src;
3263 if (ut_params->obuf)
3264 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3265 + tdata->aad.len + tdata->iv.len;
3267 ciphertext = plaintext;
3269 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3270 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3271 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3274 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3276 tdata->ciphertext.data,
3277 tdata->validDataLenInBits.len,
3278 "SNOW 3G Ciphertext data not as expected");
3281 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3284 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3285 "SNOW 3G Generated auth tag not as expected");
3290 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata)
3292 struct crypto_testsuite_params *ts_params = &testsuite_params;
3293 struct crypto_unittest_params *ut_params = &unittest_params;
3297 uint8_t *plaintext, *ciphertext;
3298 unsigned plaintext_pad_len;
3299 unsigned plaintext_len;
3301 /* Create KASUMI session */
3302 retval = create_wireless_algo_auth_cipher_session(
3303 ts_params->valid_devs[0],
3304 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3305 RTE_CRYPTO_AUTH_OP_GENERATE,
3306 RTE_CRYPTO_AUTH_KASUMI_F9,
3307 RTE_CRYPTO_CIPHER_KASUMI_F8,
3308 tdata->key.data, tdata->key.len,
3309 tdata->aad.len, tdata->digest.len);
3312 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3314 /* clear mbuf payload */
3315 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3316 rte_pktmbuf_tailroom(ut_params->ibuf));
3318 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3319 /* Append data which is padded to a multiple of */
3320 /* the algorithms block size */
3321 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3322 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3324 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3326 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3328 /* Create KASUMI operation */
3329 retval = create_wireless_algo_auth_cipher_operation(tdata->digest.len,
3330 tdata->iv.data, tdata->iv.len,
3331 tdata->aad.data, tdata->aad.len,
3333 tdata->validCipherLenInBits.len,
3334 tdata->validCipherOffsetLenInBits.len,
3335 tdata->validAuthLenInBits.len,
3336 tdata->validAuthOffsetLenInBits.len,
3337 RTE_CRYPTO_AUTH_KASUMI_F9,
3338 RTE_CRYPTO_CIPHER_KASUMI_F8
3344 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3346 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3347 ut_params->obuf = ut_params->op->sym->m_src;
3348 if (ut_params->obuf)
3349 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3350 + tdata->iv.len + tdata->aad.len;
3352 ciphertext = plaintext;
3355 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3357 tdata->ciphertext.data,
3358 tdata->validCipherLenInBits.len,
3359 "KASUMI Ciphertext data not as expected");
3360 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3361 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3364 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3367 DIGEST_BYTE_LENGTH_KASUMI_F9,
3368 "KASUMI Generated auth tag not as expected");
3373 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
3375 struct crypto_testsuite_params *ts_params = &testsuite_params;
3376 struct crypto_unittest_params *ut_params = &unittest_params;
3380 uint8_t *plaintext, *ciphertext;
3381 unsigned plaintext_pad_len;
3382 unsigned plaintext_len;
3384 /* Create KASUMI session */
3385 retval = create_wireless_algo_cipher_auth_session(
3386 ts_params->valid_devs[0],
3387 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3388 RTE_CRYPTO_AUTH_OP_GENERATE,
3389 RTE_CRYPTO_AUTH_KASUMI_F9,
3390 RTE_CRYPTO_CIPHER_KASUMI_F8,
3391 tdata->key.data, tdata->key.len,
3392 tdata->aad.len, tdata->digest.len);
3396 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3398 /* clear mbuf payload */
3399 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3400 rte_pktmbuf_tailroom(ut_params->ibuf));
3402 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3403 /* Append data which is padded to a multiple of */
3404 /* the algorithms block size */
3405 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
3406 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3408 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3410 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3412 /* Create KASUMI operation */
3413 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
3414 tdata->digest.len, tdata->aad.data,
3416 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3417 RTE_CRYPTO_AUTH_KASUMI_F9,
3418 RTE_CRYPTO_CIPHER_KASUMI_F8,
3419 tdata->iv.data, tdata->iv.len,
3420 tdata->validCipherLenInBits.len,
3421 tdata->validCipherOffsetLenInBits.len,
3422 tdata->validAuthLenInBits.len,
3423 tdata->validAuthOffsetLenInBits.len
3428 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3430 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3431 ut_params->obuf = ut_params->op->sym->m_src;
3432 if (ut_params->obuf)
3433 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3434 + tdata->aad.len + tdata->iv.len;
3436 ciphertext = plaintext;
3438 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3439 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
3442 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3444 tdata->ciphertext.data,
3445 tdata->validCipherLenInBits.len,
3446 "KASUMI Ciphertext data not as expected");
3449 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3452 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
3453 "KASUMI Generated auth tag not as expected");
3458 test_zuc_encryption(const struct zuc_test_data *tdata)
3460 struct crypto_testsuite_params *ts_params = &testsuite_params;
3461 struct crypto_unittest_params *ut_params = &unittest_params;
3464 uint8_t *plaintext, *ciphertext;
3465 unsigned plaintext_pad_len;
3466 unsigned plaintext_len;
3468 /* Create ZUC session */
3469 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
3470 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3471 RTE_CRYPTO_CIPHER_ZUC_EEA3,
3472 tdata->key.data, tdata->key.len);
3476 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3478 /* Clear mbuf payload */
3479 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3480 rte_pktmbuf_tailroom(ut_params->ibuf));
3482 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3483 /* Append data which is padded to a multiple */
3484 /* of the algorithms block size */
3485 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3486 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3488 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3490 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
3492 /* Create ZUC operation */
3493 retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
3494 tdata->plaintext.len,
3495 tdata->validCipherOffsetLenInBits.len,
3496 RTE_CRYPTO_CIPHER_ZUC_EEA3);
3500 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3502 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3504 ut_params->obuf = ut_params->op->sym->m_dst;
3505 if (ut_params->obuf)
3506 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3509 ciphertext = plaintext;
3511 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
3514 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
3516 tdata->ciphertext.data,
3517 tdata->validCipherLenInBits.len,
3518 "ZUC Ciphertext data not as expected");
3523 test_zuc_authentication(const struct zuc_hash_test_data *tdata)
3525 struct crypto_testsuite_params *ts_params = &testsuite_params;
3526 struct crypto_unittest_params *ut_params = &unittest_params;
3529 unsigned plaintext_pad_len;
3530 unsigned plaintext_len;
3533 /* Create ZUC session */
3534 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
3535 tdata->key.data, tdata->key.len,
3536 tdata->aad.len, tdata->digest.len,
3537 RTE_CRYPTO_AUTH_OP_GENERATE,
3538 RTE_CRYPTO_AUTH_ZUC_EIA3);
3542 /* alloc mbuf and set payload */
3543 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3545 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3546 rte_pktmbuf_tailroom(ut_params->ibuf));
3548 plaintext_len = ceil_byte_length(tdata->plaintext.len);
3549 /* Append data which is padded to a multiple of */
3550 /* the algorithms block size */
3551 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
3552 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3554 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
3556 /* Create ZUC operation */
3557 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
3558 tdata->aad.data, tdata->aad.len,
3559 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
3560 RTE_CRYPTO_AUTH_ZUC_EIA3,
3561 tdata->validAuthLenInBits.len,
3562 tdata->validAuthOffsetLenInBits.len);
3566 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3568 ut_params->obuf = ut_params->op->sym->m_src;
3569 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
3570 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
3571 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
3574 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3577 DIGEST_BYTE_LENGTH_KASUMI_F9,
3578 "ZUC Generated auth tag not as expected");
3584 test_kasumi_encryption_test_case_1(void)
3586 return test_kasumi_encryption(&kasumi_test_case_1);
3590 test_kasumi_encryption_test_case_1_oop(void)
3592 return test_kasumi_encryption_oop(&kasumi_test_case_1);
3596 test_kasumi_encryption_test_case_2(void)
3598 return test_kasumi_encryption(&kasumi_test_case_2);
3602 test_kasumi_encryption_test_case_3(void)
3604 return test_kasumi_encryption(&kasumi_test_case_3);
3608 test_kasumi_encryption_test_case_4(void)
3610 return test_kasumi_encryption(&kasumi_test_case_4);
3614 test_kasumi_encryption_test_case_5(void)
3616 return test_kasumi_encryption(&kasumi_test_case_5);
3620 test_kasumi_decryption_test_case_1(void)
3622 return test_kasumi_decryption(&kasumi_test_case_1);
3626 test_kasumi_decryption_test_case_1_oop(void)
3628 return test_kasumi_decryption_oop(&kasumi_test_case_1);
3632 test_kasumi_decryption_test_case_2(void)
3634 return test_kasumi_decryption(&kasumi_test_case_2);
3638 test_kasumi_decryption_test_case_3(void)
3640 return test_kasumi_decryption(&kasumi_test_case_3);
3644 test_kasumi_decryption_test_case_4(void)
3646 return test_kasumi_decryption(&kasumi_test_case_4);
3650 test_kasumi_decryption_test_case_5(void)
3652 return test_kasumi_decryption(&kasumi_test_case_5);
3655 test_snow3g_encryption_test_case_1(void)
3657 return test_snow3g_encryption(&snow3g_test_case_1);
3661 test_snow3g_encryption_test_case_1_oop(void)
3663 return test_snow3g_encryption_oop(&snow3g_test_case_1);
3667 test_snow3g_encryption_test_case_1_offset_oop(void)
3669 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
3673 test_snow3g_encryption_test_case_2(void)
3675 return test_snow3g_encryption(&snow3g_test_case_2);
3679 test_snow3g_encryption_test_case_3(void)
3681 return test_snow3g_encryption(&snow3g_test_case_3);
3685 test_snow3g_encryption_test_case_4(void)
3687 return test_snow3g_encryption(&snow3g_test_case_4);
3691 test_snow3g_encryption_test_case_5(void)
3693 return test_snow3g_encryption(&snow3g_test_case_5);
3697 test_snow3g_decryption_test_case_1(void)
3699 return test_snow3g_decryption(&snow3g_test_case_1);
3703 test_snow3g_decryption_test_case_1_oop(void)
3705 return test_snow3g_decryption_oop(&snow3g_test_case_1);
3709 test_snow3g_decryption_test_case_2(void)
3711 return test_snow3g_decryption(&snow3g_test_case_2);
3715 test_snow3g_decryption_test_case_3(void)
3717 return test_snow3g_decryption(&snow3g_test_case_3);
3721 test_snow3g_decryption_test_case_4(void)
3723 return test_snow3g_decryption(&snow3g_test_case_4);
3727 test_snow3g_decryption_test_case_5(void)
3729 return test_snow3g_decryption(&snow3g_test_case_5);
3732 test_snow3g_cipher_auth_test_case_1(void)
3734 return test_snow3g_cipher_auth(&snow3g_test_case_3);
3738 test_snow3g_auth_cipher_test_case_1(void)
3740 return test_snow3g_auth_cipher(&snow3g_test_case_6);
3744 test_kasumi_auth_cipher_test_case_1(void)
3746 return test_kasumi_auth_cipher(&kasumi_test_case_3);
3750 test_kasumi_cipher_auth_test_case_1(void)
3752 return test_kasumi_cipher_auth(&kasumi_test_case_6);
3756 test_zuc_encryption_test_case_1(void)
3758 return test_zuc_encryption(&zuc_test_case_1);
3762 test_zuc_encryption_test_case_2(void)
3764 return test_zuc_encryption(&zuc_test_case_2);
3768 test_zuc_encryption_test_case_3(void)
3770 return test_zuc_encryption(&zuc_test_case_3);
3774 test_zuc_encryption_test_case_4(void)
3776 return test_zuc_encryption(&zuc_test_case_4);
3780 test_zuc_encryption_test_case_5(void)
3782 return test_zuc_encryption(&zuc_test_case_5);
3786 test_zuc_hash_generate_test_case_1(void)
3788 return test_zuc_authentication(&zuc_hash_test_case_1);
3792 test_zuc_hash_generate_test_case_2(void)
3794 return test_zuc_authentication(&zuc_hash_test_case_2);
3798 test_zuc_hash_generate_test_case_3(void)
3800 return test_zuc_authentication(&zuc_hash_test_case_3);
3804 test_zuc_hash_generate_test_case_4(void)
3806 return test_zuc_authentication(&zuc_hash_test_case_4);
3810 test_zuc_hash_generate_test_case_5(void)
3812 return test_zuc_authentication(&zuc_hash_test_case_5);
3816 test_3DES_chain_qat_all(void)
3818 struct crypto_testsuite_params *ts_params = &testsuite_params;
3821 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
3822 ts_params->op_mpool, ts_params->valid_devs[0],
3823 RTE_CRYPTODEV_QAT_SYM_PMD,
3824 BLKCIPHER_3DES_CHAIN_TYPE);
3826 TEST_ASSERT_EQUAL(status, 0, "Test failed");
3828 return TEST_SUCCESS;
3832 test_3DES_cipheronly_qat_all(void)
3834 struct crypto_testsuite_params *ts_params = &testsuite_params;
3837 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
3838 ts_params->op_mpool, ts_params->valid_devs[0],
3839 RTE_CRYPTODEV_QAT_SYM_PMD,
3840 BLKCIPHER_3DES_CIPHERONLY_TYPE);
3842 TEST_ASSERT_EQUAL(status, 0, "Test failed");
3844 return TEST_SUCCESS;
3848 test_3DES_chain_openssl_all(void)
3850 struct crypto_testsuite_params *ts_params = &testsuite_params;
3853 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
3854 ts_params->op_mpool, ts_params->valid_devs[0],
3855 RTE_CRYPTODEV_OPENSSL_PMD,
3856 BLKCIPHER_3DES_CHAIN_TYPE);
3858 TEST_ASSERT_EQUAL(status, 0, "Test failed");
3860 return TEST_SUCCESS;
3864 test_3DES_cipheronly_openssl_all(void)
3866 struct crypto_testsuite_params *ts_params = &testsuite_params;
3869 status = test_blockcipher_all_tests(ts_params->mbuf_pool,
3870 ts_params->op_mpool, ts_params->valid_devs[0],
3871 RTE_CRYPTODEV_OPENSSL_PMD,
3872 BLKCIPHER_3DES_CIPHERONLY_TYPE);
3874 TEST_ASSERT_EQUAL(status, 0, "Test failed");
3876 return TEST_SUCCESS;
3879 /* ***** AES-GCM Tests ***** */
3882 create_gcm_session(uint8_t dev_id, enum rte_crypto_cipher_operation op,
3883 const uint8_t *key, const uint8_t key_len,
3884 const uint8_t aad_len, const uint8_t auth_len,
3885 enum rte_crypto_auth_operation auth_op)
3887 uint8_t cipher_key[key_len];
3889 struct crypto_unittest_params *ut_params = &unittest_params;
3891 memcpy(cipher_key, key, key_len);
3893 /* Setup Cipher Parameters */
3894 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3895 ut_params->cipher_xform.next = NULL;
3897 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
3898 ut_params->auth_xform.auth.op = auth_op;
3899 ut_params->cipher_xform.cipher.op = op;
3900 ut_params->cipher_xform.cipher.key.data = cipher_key;
3901 ut_params->cipher_xform.cipher.key.length = key_len;
3903 TEST_HEXDUMP(stdout, "key:", key, key_len);
3905 /* Setup Authentication Parameters */
3906 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3907 ut_params->auth_xform.next = NULL;
3909 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
3911 ut_params->auth_xform.auth.digest_length = auth_len;
3912 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
3913 ut_params->auth_xform.auth.key.length = 0;
3914 ut_params->auth_xform.auth.key.data = NULL;
3916 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
3917 ut_params->cipher_xform.next = &ut_params->auth_xform;
3919 /* Create Crypto session*/
3920 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
3921 &ut_params->cipher_xform);
3922 } else {/* Create Crypto session*/
3923 ut_params->auth_xform.next = &ut_params->cipher_xform;
3924 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
3925 &ut_params->auth_xform);
3928 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3934 create_gcm_operation(enum rte_crypto_cipher_operation op,
3935 const uint8_t *auth_tag, const unsigned auth_tag_len,
3936 const uint8_t *iv, const unsigned iv_len,
3937 const uint8_t *aad, const unsigned aad_len,
3938 const unsigned data_len, unsigned data_pad_len)
3940 struct crypto_testsuite_params *ts_params = &testsuite_params;
3941 struct crypto_unittest_params *ut_params = &unittest_params;
3943 unsigned iv_pad_len = 0, aad_buffer_len;
3945 /* Generate Crypto op data structure */
3946 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3947 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3948 TEST_ASSERT_NOT_NULL(ut_params->op,
3949 "Failed to allocate symmetric crypto operation struct");
3951 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3953 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
3954 ut_params->ibuf, auth_tag_len);
3955 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
3956 "no room to append digest");
3957 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
3958 ut_params->ibuf, data_pad_len);
3959 sym_op->auth.digest.length = auth_tag_len;
3961 if (op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
3962 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
3963 TEST_HEXDUMP(stdout, "digest:",
3964 sym_op->auth.digest.data,
3965 sym_op->auth.digest.length);
3969 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
3971 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
3972 ut_params->ibuf, iv_pad_len);
3973 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
3975 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
3976 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
3977 sym_op->cipher.iv.length = iv_len;
3979 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
3982 * Always allocate the aad up to the block size.
3983 * The cryptodev API calls out -
3984 * - the array must be big enough to hold the AAD, plus any
3985 * space to round this up to the nearest multiple of the
3986 * block size (16 bytes).
3988 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
3990 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
3991 ut_params->ibuf, aad_buffer_len);
3992 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
3993 "no room to prepend aad");
3994 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
3996 sym_op->auth.aad.length = aad_len;
3998 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
3999 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
4001 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
4002 TEST_HEXDUMP(stdout, "aad:",
4003 sym_op->auth.aad.data, aad_len);
4005 sym_op->cipher.data.length = data_len;
4006 sym_op->cipher.data.offset = aad_buffer_len + iv_pad_len;
4008 sym_op->auth.data.offset = aad_buffer_len + iv_pad_len;
4009 sym_op->auth.data.length = data_len;
4015 test_mb_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
4017 struct crypto_testsuite_params *ts_params = &testsuite_params;
4018 struct crypto_unittest_params *ut_params = &unittest_params;
4022 uint8_t *plaintext, *ciphertext, *auth_tag;
4023 uint16_t plaintext_pad_len;
4025 /* Create GCM session */
4026 retval = create_gcm_session(ts_params->valid_devs[0],
4027 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4028 tdata->key.data, tdata->key.len,
4029 tdata->aad.len, tdata->auth_tag.len,
4030 RTE_CRYPTO_AUTH_OP_GENERATE);
4035 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4037 /* clear mbuf payload */
4038 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4039 rte_pktmbuf_tailroom(ut_params->ibuf));
4042 * Append data which is padded to a multiple
4043 * of the algorithms block size
4045 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
4047 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4049 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
4051 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->plaintext.len);
4053 /* Create GCM opertaion */
4054 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT,
4055 tdata->auth_tag.data, tdata->auth_tag.len,
4056 tdata->iv.data, tdata->iv.len,
4057 tdata->aad.data, tdata->aad.len,
4058 tdata->plaintext.len, plaintext_pad_len);
4062 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4064 ut_params->op->sym->m_src = ut_params->ibuf;
4066 /* Process crypto operation */
4067 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4068 ut_params->op), "failed to process sym crypto op");
4070 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4071 "crypto op processing failed");
4073 if (ut_params->op->sym->m_dst) {
4074 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4076 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
4077 uint8_t *, plaintext_pad_len);
4079 ciphertext = plaintext;
4080 auth_tag = plaintext + plaintext_pad_len;
4083 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
4084 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
4087 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4089 tdata->ciphertext.data,
4090 tdata->ciphertext.len,
4091 "GCM Ciphertext data not as expected");
4093 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4095 tdata->auth_tag.data,
4096 tdata->auth_tag.len,
4097 "GCM Generated auth tag not as expected");
4104 test_mb_AES_GCM_authenticated_encryption_test_case_1(void)
4106 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_1);
4110 test_mb_AES_GCM_authenticated_encryption_test_case_2(void)
4112 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_2);
4116 test_mb_AES_GCM_authenticated_encryption_test_case_3(void)
4118 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_3);
4122 test_mb_AES_GCM_authenticated_encryption_test_case_4(void)
4124 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_4);
4128 test_mb_AES_GCM_authenticated_encryption_test_case_5(void)
4130 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_5);
4134 test_mb_AES_GCM_authenticated_encryption_test_case_6(void)
4136 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_6);
4140 test_mb_AES_GCM_authenticated_encryption_test_case_7(void)
4142 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_7);
4146 test_mb_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
4148 struct crypto_testsuite_params *ts_params = &testsuite_params;
4149 struct crypto_unittest_params *ut_params = &unittest_params;
4153 uint8_t *plaintext, *ciphertext;
4154 uint16_t ciphertext_pad_len;
4156 /* Create GCM session */
4157 retval = create_gcm_session(ts_params->valid_devs[0],
4158 RTE_CRYPTO_CIPHER_OP_DECRYPT,
4159 tdata->key.data, tdata->key.len,
4160 tdata->aad.len, tdata->auth_tag.len,
4161 RTE_CRYPTO_AUTH_OP_VERIFY);
4166 /* alloc mbuf and set payload */
4167 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4169 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4170 rte_pktmbuf_tailroom(ut_params->ibuf));
4172 ciphertext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
4174 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4175 ciphertext_pad_len);
4176 memcpy(ciphertext, tdata->ciphertext.data, tdata->ciphertext.len);
4178 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
4180 /* Create GCM opertaion */
4181 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT,
4182 tdata->auth_tag.data, tdata->auth_tag.len,
4183 tdata->iv.data, tdata->iv.len,
4184 tdata->aad.data, tdata->aad.len,
4185 tdata->ciphertext.len, ciphertext_pad_len);
4190 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4192 ut_params->op->sym->m_src = ut_params->ibuf;
4194 /* Process crypto operation */
4195 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4196 ut_params->op), "failed to process sym crypto op");
4198 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4199 "crypto op processing failed");
4201 if (ut_params->op->sym->m_dst)
4202 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
4205 plaintext = ciphertext;
4207 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
4210 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4212 tdata->plaintext.data,
4213 tdata->plaintext.len,
4214 "GCM plaintext data not as expected");
4216 TEST_ASSERT_EQUAL(ut_params->op->status,
4217 RTE_CRYPTO_OP_STATUS_SUCCESS,
4218 "GCM authentication failed");
4223 test_mb_AES_GCM_authenticated_decryption_test_case_1(void)
4225 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_1);
4229 test_mb_AES_GCM_authenticated_decryption_test_case_2(void)
4231 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_2);
4235 test_mb_AES_GCM_authenticated_decryption_test_case_3(void)
4237 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_3);
4241 test_mb_AES_GCM_authenticated_decryption_test_case_4(void)
4243 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_4);
4247 test_mb_AES_GCM_authenticated_decryption_test_case_5(void)
4249 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_5);
4253 test_mb_AES_GCM_authenticated_decryption_test_case_6(void)
4255 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_6);
4259 test_mb_AES_GCM_authenticated_decryption_test_case_7(void)
4261 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_7);
4267 struct crypto_testsuite_params *ts_params = &testsuite_params;
4268 struct rte_cryptodev_stats stats;
4269 struct rte_cryptodev *dev;
4270 cryptodev_stats_get_t temp_pfn;
4272 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
4273 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
4274 &stats) == -ENODEV),
4275 "rte_cryptodev_stats_get invalid dev failed");
4276 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
4277 "rte_cryptodev_stats_get invalid Param failed");
4278 dev = &rte_cryptodevs[ts_params->valid_devs[0]];
4279 temp_pfn = dev->dev_ops->stats_get;
4280 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
4281 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
4283 "rte_cryptodev_stats_get invalid Param failed");
4284 dev->dev_ops->stats_get = temp_pfn;
4286 /* Test expected values */
4288 test_AES_CBC_HMAC_SHA1_encrypt_digest();
4290 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
4292 "rte_cryptodev_stats_get failed");
4293 TEST_ASSERT((stats.enqueued_count == 1),
4294 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4295 TEST_ASSERT((stats.dequeued_count == 1),
4296 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4297 TEST_ASSERT((stats.enqueue_err_count == 0),
4298 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4299 TEST_ASSERT((stats.dequeue_err_count == 0),
4300 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4302 /* invalid device but should ignore and not reset device stats*/
4303 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
4304 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
4306 "rte_cryptodev_stats_get failed");
4307 TEST_ASSERT((stats.enqueued_count == 1),
4308 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4310 /* check that a valid reset clears stats */
4311 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
4312 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
4314 "rte_cryptodev_stats_get failed");
4315 TEST_ASSERT((stats.enqueued_count == 0),
4316 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4317 TEST_ASSERT((stats.dequeued_count == 0),
4318 "rte_cryptodev_stats_get returned unexpected enqueued stat");
4320 return TEST_SUCCESS;
4323 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
4324 struct crypto_unittest_params *ut_params,
4325 enum rte_crypto_auth_operation op,
4326 const struct HMAC_MD5_vector *test_case)
4330 memcpy(key, test_case->key.data, test_case->key.len);
4332 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4333 ut_params->auth_xform.next = NULL;
4334 ut_params->auth_xform.auth.op = op;
4336 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
4338 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
4339 ut_params->auth_xform.auth.add_auth_data_length = 0;
4340 ut_params->auth_xform.auth.key.length = test_case->key.len;
4341 ut_params->auth_xform.auth.key.data = key;
4343 ut_params->sess = rte_cryptodev_sym_session_create(
4344 ts_params->valid_devs[0], &ut_params->auth_xform);
4346 if (ut_params->sess == NULL)
4349 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
4351 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
4352 rte_pktmbuf_tailroom(ut_params->ibuf));
4357 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
4358 const struct HMAC_MD5_vector *test_case,
4359 uint8_t **plaintext)
4361 uint16_t plaintext_pad_len;
4363 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4365 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
4368 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
4370 memcpy(*plaintext, test_case->plaintext.data,
4371 test_case->plaintext.len);
4373 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
4374 ut_params->ibuf, MD5_DIGEST_LEN);
4375 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
4376 "no room to append digest");
4377 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4378 ut_params->ibuf, plaintext_pad_len);
4379 sym_op->auth.digest.length = MD5_DIGEST_LEN;
4381 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
4382 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
4383 test_case->auth_tag.len);
4386 sym_op->auth.data.offset = 0;
4387 sym_op->auth.data.length = test_case->plaintext.len;
4389 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4390 ut_params->op->sym->m_src = ut_params->ibuf;
4396 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
4398 uint16_t plaintext_pad_len;
4399 uint8_t *plaintext, *auth_tag;
4401 struct crypto_testsuite_params *ts_params = &testsuite_params;
4402 struct crypto_unittest_params *ut_params = &unittest_params;
4404 if (MD5_HMAC_create_session(ts_params, ut_params,
4405 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
4408 /* Generate Crypto op data structure */
4409 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4410 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4411 TEST_ASSERT_NOT_NULL(ut_params->op,
4412 "Failed to allocate symmetric crypto operation struct");
4414 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
4417 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
4420 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4421 ut_params->op), "failed to process sym crypto op");
4423 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4424 "crypto op processing failed");
4426 if (ut_params->op->sym->m_dst) {
4427 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
4428 uint8_t *, plaintext_pad_len);
4430 auth_tag = plaintext + plaintext_pad_len;
4433 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4435 test_case->auth_tag.data,
4436 test_case->auth_tag.len,
4437 "HMAC_MD5 generated tag not as expected");
4439 return TEST_SUCCESS;
4443 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
4447 struct crypto_testsuite_params *ts_params = &testsuite_params;
4448 struct crypto_unittest_params *ut_params = &unittest_params;
4450 if (MD5_HMAC_create_session(ts_params, ut_params,
4451 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
4455 /* Generate Crypto op data structure */
4456 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4457 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4458 TEST_ASSERT_NOT_NULL(ut_params->op,
4459 "Failed to allocate symmetric crypto operation struct");
4461 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
4464 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
4465 ut_params->op), "failed to process sym crypto op");
4467 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4468 "HMAC_MD5 crypto op processing failed");
4470 return TEST_SUCCESS;
4474 test_MD5_HMAC_generate_case_1(void)
4476 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
4480 test_MD5_HMAC_verify_case_1(void)
4482 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
4486 test_MD5_HMAC_generate_case_2(void)
4488 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
4492 test_MD5_HMAC_verify_case_2(void)
4494 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
4498 test_multi_session(void)
4500 struct crypto_testsuite_params *ts_params = &testsuite_params;
4501 struct crypto_unittest_params *ut_params = &unittest_params;
4503 struct rte_cryptodev_info dev_info;
4504 struct rte_cryptodev_sym_session **sessions;
4508 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
4509 aes_cbc_key, hmac_sha512_key);
4512 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4514 sessions = rte_malloc(NULL,
4515 (sizeof(struct rte_cryptodev_sym_session *) *
4516 dev_info.sym.max_nb_sessions) + 1, 0);
4518 /* Create multiple crypto sessions*/
4519 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
4520 sessions[i] = rte_cryptodev_sym_session_create(
4521 ts_params->valid_devs[0],
4522 &ut_params->auth_xform);
4523 TEST_ASSERT_NOT_NULL(sessions[i],
4524 "Session creation failed at session number %u",
4527 /* Attempt to send a request on each session */
4528 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
4532 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
4533 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
4535 "Failed to perform decrypt on request number %u.", i);
4536 /* free crypto operation structure */
4538 rte_crypto_op_free(ut_params->op);
4541 * free mbuf - both obuf and ibuf are usually the same,
4542 * so check if they point at the same address is necessary,
4543 * to avoid freeing the mbuf twice.
4545 if (ut_params->obuf) {
4546 rte_pktmbuf_free(ut_params->obuf);
4547 if (ut_params->ibuf == ut_params->obuf)
4548 ut_params->ibuf = 0;
4549 ut_params->obuf = 0;
4551 if (ut_params->ibuf) {
4552 rte_pktmbuf_free(ut_params->ibuf);
4553 ut_params->ibuf = 0;
4557 /* Next session create should fail */
4558 sessions[i] = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
4559 &ut_params->auth_xform);
4560 TEST_ASSERT_NULL(sessions[i],
4561 "Session creation succeeded unexpectedly!");
4563 for (i = 0; i < dev_info.sym.max_nb_sessions; i++)
4564 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
4569 return TEST_SUCCESS;
4572 struct multi_session_params {
4573 struct crypto_unittest_params ut_params;
4574 uint8_t *cipher_key;
4576 const uint8_t *cipher;
4577 const uint8_t *digest;
4581 #define MB_SESSION_NUMBER 3
4584 test_multi_session_random_usage(void)
4586 struct crypto_testsuite_params *ts_params = &testsuite_params;
4587 struct rte_cryptodev_info dev_info;
4588 struct rte_cryptodev_sym_session **sessions;
4590 struct multi_session_params ut_paramz[] = {
4593 .cipher_key = ms_aes_cbc_key0,
4594 .hmac_key = ms_hmac_key0,
4595 .cipher = ms_aes_cbc_cipher0,
4596 .digest = ms_hmac_digest0,
4597 .iv = ms_aes_cbc_iv0
4600 .cipher_key = ms_aes_cbc_key1,
4601 .hmac_key = ms_hmac_key1,
4602 .cipher = ms_aes_cbc_cipher1,
4603 .digest = ms_hmac_digest1,
4604 .iv = ms_aes_cbc_iv1
4607 .cipher_key = ms_aes_cbc_key2,
4608 .hmac_key = ms_hmac_key2,
4609 .cipher = ms_aes_cbc_cipher2,
4610 .digest = ms_hmac_digest2,
4611 .iv = ms_aes_cbc_iv2
4616 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
4618 sessions = rte_malloc(NULL,
4619 (sizeof(struct rte_cryptodev_sym_session *)
4620 * dev_info.sym.max_nb_sessions) + 1, 0);
4622 for (i = 0; i < MB_SESSION_NUMBER; i++) {
4623 rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
4624 sizeof(struct crypto_unittest_params));
4626 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
4627 &ut_paramz[i].ut_params,
4628 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
4630 /* Create multiple crypto sessions*/
4631 sessions[i] = rte_cryptodev_sym_session_create(
4632 ts_params->valid_devs[0],
4633 &ut_paramz[i].ut_params.auth_xform);
4635 TEST_ASSERT_NOT_NULL(sessions[i],
4636 "Session creation failed at session number %u",
4642 for (i = 0; i < 40000; i++) {
4644 j = rand() % MB_SESSION_NUMBER;
4646 TEST_ASSERT_SUCCESS(
4647 test_AES_CBC_HMAC_SHA512_decrypt_perform(
4649 &ut_paramz[j].ut_params,
4650 ts_params, ut_paramz[j].cipher,
4651 ut_paramz[j].digest,
4653 "Failed to perform decrypt on request number %u.", i);
4655 if (ut_paramz[j].ut_params.op)
4656 rte_crypto_op_free(ut_paramz[j].ut_params.op);
4659 * free mbuf - both obuf and ibuf are usually the same,
4660 * so check if they point at the same address is necessary,
4661 * to avoid freeing the mbuf twice.
4663 if (ut_paramz[j].ut_params.obuf) {
4664 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
4665 if (ut_paramz[j].ut_params.ibuf
4666 == ut_paramz[j].ut_params.obuf)
4667 ut_paramz[j].ut_params.ibuf = 0;
4668 ut_paramz[j].ut_params.obuf = 0;
4670 if (ut_paramz[j].ut_params.ibuf) {
4671 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
4672 ut_paramz[j].ut_params.ibuf = 0;
4676 for (i = 0; i < MB_SESSION_NUMBER; i++)
4677 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
4682 return TEST_SUCCESS;
4686 test_null_cipher_only_operation(void)
4688 struct crypto_testsuite_params *ts_params = &testsuite_params;
4689 struct crypto_unittest_params *ut_params = &unittest_params;
4691 /* Generate test mbuf data and space for digest */
4692 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
4693 catch_22_quote, QUOTE_512_BYTES, 0);
4695 /* Setup Cipher Parameters */
4696 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4697 ut_params->cipher_xform.next = NULL;
4699 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
4700 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4702 /* Create Crypto session*/
4703 ut_params->sess = rte_cryptodev_sym_session_create(
4704 ts_params->valid_devs[0], &ut_params->cipher_xform);
4705 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4707 /* Generate Crypto op data structure */
4708 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4709 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4710 TEST_ASSERT_NOT_NULL(ut_params->op,
4711 "Failed to allocate symmetric crypto operation struct");
4713 /* Set crypto operation data parameters */
4714 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4716 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4718 /* set crypto operation source mbuf */
4719 sym_op->m_src = ut_params->ibuf;
4721 sym_op->cipher.data.offset = 0;
4722 sym_op->cipher.data.length = QUOTE_512_BYTES;
4724 /* Process crypto operation */
4725 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4727 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
4729 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4730 "crypto operation processing failed");
4733 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4734 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
4737 "Ciphertext data not as expected");
4739 return TEST_SUCCESS;
4743 test_null_auth_only_operation(void)
4745 struct crypto_testsuite_params *ts_params = &testsuite_params;
4746 struct crypto_unittest_params *ut_params = &unittest_params;
4748 /* Generate test mbuf data and space for digest */
4749 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
4750 catch_22_quote, QUOTE_512_BYTES, 0);
4752 /* Setup HMAC Parameters */
4753 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4754 ut_params->auth_xform.next = NULL;
4756 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
4757 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
4759 /* Create Crypto session*/
4760 ut_params->sess = rte_cryptodev_sym_session_create(
4761 ts_params->valid_devs[0], &ut_params->auth_xform);
4762 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4764 /* Generate Crypto op data structure */
4765 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4766 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4767 TEST_ASSERT_NOT_NULL(ut_params->op,
4768 "Failed to allocate symmetric crypto operation struct");
4770 /* Set crypto operation data parameters */
4771 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4773 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4775 sym_op->m_src = ut_params->ibuf;
4777 sym_op->auth.data.offset = 0;
4778 sym_op->auth.data.length = QUOTE_512_BYTES;
4780 /* Process crypto operation */
4781 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4783 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
4785 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4786 "crypto operation processing failed");
4788 return TEST_SUCCESS;
4792 test_null_cipher_auth_operation(void)
4794 struct crypto_testsuite_params *ts_params = &testsuite_params;
4795 struct crypto_unittest_params *ut_params = &unittest_params;
4797 /* Generate test mbuf data and space for digest */
4798 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
4799 catch_22_quote, QUOTE_512_BYTES, 0);
4801 /* Setup Cipher Parameters */
4802 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4803 ut_params->cipher_xform.next = &ut_params->auth_xform;
4805 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
4806 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4808 /* Setup HMAC Parameters */
4809 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4810 ut_params->auth_xform.next = NULL;
4812 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
4813 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
4815 /* Create Crypto session*/
4816 ut_params->sess = rte_cryptodev_sym_session_create(
4817 ts_params->valid_devs[0], &ut_params->cipher_xform);
4818 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4820 /* Generate Crypto op data structure */
4821 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4822 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4823 TEST_ASSERT_NOT_NULL(ut_params->op,
4824 "Failed to allocate symmetric crypto operation struct");
4826 /* Set crypto operation data parameters */
4827 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4829 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4831 sym_op->m_src = ut_params->ibuf;
4833 sym_op->cipher.data.offset = 0;
4834 sym_op->cipher.data.length = QUOTE_512_BYTES;
4836 sym_op->auth.data.offset = 0;
4837 sym_op->auth.data.length = QUOTE_512_BYTES;
4839 /* Process crypto operation */
4840 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4842 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
4844 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4845 "crypto operation processing failed");
4848 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4849 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
4852 "Ciphertext data not as expected");
4854 return TEST_SUCCESS;
4858 test_null_auth_cipher_operation(void)
4860 struct crypto_testsuite_params *ts_params = &testsuite_params;
4861 struct crypto_unittest_params *ut_params = &unittest_params;
4863 /* Generate test mbuf data and space for digest */
4864 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
4865 catch_22_quote, QUOTE_512_BYTES, 0);
4867 /* Setup Cipher Parameters */
4868 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4869 ut_params->cipher_xform.next = NULL;
4871 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
4872 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4874 /* Setup HMAC Parameters */
4875 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4876 ut_params->auth_xform.next = &ut_params->cipher_xform;
4878 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
4879 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
4881 /* Create Crypto session*/
4882 ut_params->sess = rte_cryptodev_sym_session_create(
4883 ts_params->valid_devs[0], &ut_params->cipher_xform);
4884 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4886 /* Generate Crypto op data structure */
4887 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
4888 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
4889 TEST_ASSERT_NOT_NULL(ut_params->op,
4890 "Failed to allocate symmetric crypto operation struct");
4892 /* Set crypto operation data parameters */
4893 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
4895 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
4897 sym_op->m_src = ut_params->ibuf;
4899 sym_op->cipher.data.offset = 0;
4900 sym_op->cipher.data.length = QUOTE_512_BYTES;
4902 sym_op->auth.data.offset = 0;
4903 sym_op->auth.data.length = QUOTE_512_BYTES;
4905 /* Process crypto operation */
4906 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
4908 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
4910 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
4911 "crypto operation processing failed");
4914 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4915 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
4918 "Ciphertext data not as expected");
4920 return TEST_SUCCESS;
4925 test_null_invalid_operation(void)
4927 struct crypto_testsuite_params *ts_params = &testsuite_params;
4928 struct crypto_unittest_params *ut_params = &unittest_params;
4930 /* Setup Cipher Parameters */
4931 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4932 ut_params->cipher_xform.next = NULL;
4934 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
4935 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4937 /* Create Crypto session*/
4938 ut_params->sess = rte_cryptodev_sym_session_create(
4939 ts_params->valid_devs[0], &ut_params->cipher_xform);
4940 TEST_ASSERT_NULL(ut_params->sess,
4941 "Session creation succeeded unexpectedly");
4944 /* Setup HMAC Parameters */
4945 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4946 ut_params->auth_xform.next = NULL;
4948 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
4949 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
4951 /* Create Crypto session*/
4952 ut_params->sess = rte_cryptodev_sym_session_create(
4953 ts_params->valid_devs[0], &ut_params->auth_xform);
4954 TEST_ASSERT_NULL(ut_params->sess,
4955 "Session creation succeeded unexpectedly");
4957 return TEST_SUCCESS;
4961 #define NULL_BURST_LENGTH (32)
4964 test_null_burst_operation(void)
4966 struct crypto_testsuite_params *ts_params = &testsuite_params;
4967 struct crypto_unittest_params *ut_params = &unittest_params;
4969 unsigned i, burst_len = NULL_BURST_LENGTH;
4971 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
4972 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
4974 /* Setup Cipher Parameters */
4975 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4976 ut_params->cipher_xform.next = &ut_params->auth_xform;
4978 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
4979 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4981 /* Setup HMAC Parameters */
4982 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4983 ut_params->auth_xform.next = NULL;
4985 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
4986 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
4988 /* Create Crypto session*/
4989 ut_params->sess = rte_cryptodev_sym_session_create(
4990 ts_params->valid_devs[0], &ut_params->cipher_xform);
4991 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
4993 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
4994 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
4995 burst_len, "failed to generate burst of crypto ops");
4997 /* Generate an operation for each mbuf in burst */
4998 for (i = 0; i < burst_len; i++) {
4999 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5001 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
5003 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
5007 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
5009 burst[i]->sym->m_src = m;
5012 /* Process crypto operation */
5013 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
5014 0, burst, burst_len),
5016 "Error enqueuing burst");
5018 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
5019 0, burst_dequeued, burst_len),
5021 "Error dequeuing burst");
5024 for (i = 0; i < burst_len; i++) {
5026 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
5027 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
5029 "data not as expected");
5031 rte_pktmbuf_free(burst[i]->sym->m_src);
5032 rte_crypto_op_free(burst[i]);
5035 return TEST_SUCCESS;
5039 generate_gmac_large_plaintext(uint8_t *data)
5043 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
5044 memcpy(&data[i], &data[0], 32);
5048 create_gmac_operation(enum rte_crypto_auth_operation op,
5049 const struct gmac_test_data *tdata)
5051 struct crypto_testsuite_params *ts_params = &testsuite_params;
5052 struct crypto_unittest_params *ut_params = &unittest_params;
5053 struct rte_crypto_sym_op *sym_op;
5055 unsigned iv_pad_len;
5056 unsigned aad_pad_len;
5058 iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
5059 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
5062 * Runtime generate the large plain text instead of use hard code
5063 * plain text vector. It is done to avoid create huge source file
5064 * with the test vector.
5066 if (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)
5067 generate_gmac_large_plaintext(tdata->aad.data);
5069 /* Generate Crypto op data structure */
5070 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5071 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5072 TEST_ASSERT_NOT_NULL(ut_params->op,
5073 "Failed to allocate symmetric crypto operation struct");
5075 sym_op = ut_params->op->sym;
5076 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5078 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
5079 "no room to append aad");
5081 sym_op->auth.aad.length = tdata->aad.len;
5082 sym_op->auth.aad.phys_addr =
5083 rte_pktmbuf_mtophys(ut_params->ibuf);
5084 memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
5086 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5087 ut_params->ibuf, tdata->gmac_tag.len);
5088 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5089 "no room to append digest");
5091 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5092 ut_params->ibuf, aad_pad_len);
5093 sym_op->auth.digest.length = tdata->gmac_tag.len;
5095 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
5096 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
5097 tdata->gmac_tag.len);
5098 TEST_HEXDUMP(stdout, "digest:",
5099 sym_op->auth.digest.data,
5100 sym_op->auth.digest.length);
5103 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
5104 ut_params->ibuf, iv_pad_len);
5105 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
5107 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
5108 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
5109 sym_op->cipher.iv.length = tdata->iv.len;
5111 rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
5113 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
5115 sym_op->cipher.data.length = 0;
5116 sym_op->cipher.data.offset = 0;
5118 sym_op->auth.data.offset = 0;
5119 sym_op->auth.data.length = 0;
5124 static int create_gmac_session(uint8_t dev_id,
5125 enum rte_crypto_cipher_operation op,
5126 const struct gmac_test_data *tdata,
5127 enum rte_crypto_auth_operation auth_op)
5129 uint8_t cipher_key[tdata->key.len];
5131 struct crypto_unittest_params *ut_params = &unittest_params;
5133 memcpy(cipher_key, tdata->key.data, tdata->key.len);
5135 /* For GMAC we setup cipher parameters */
5136 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5137 ut_params->cipher_xform.next = NULL;
5138 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
5139 ut_params->cipher_xform.cipher.op = op;
5140 ut_params->cipher_xform.cipher.key.data = cipher_key;
5141 ut_params->cipher_xform.cipher.key.length = tdata->key.len;
5143 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5144 ut_params->auth_xform.next = NULL;
5146 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
5147 ut_params->auth_xform.auth.op = auth_op;
5148 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
5149 ut_params->auth_xform.auth.add_auth_data_length = 0;
5150 ut_params->auth_xform.auth.key.length = 0;
5151 ut_params->auth_xform.auth.key.data = NULL;
5153 ut_params->cipher_xform.next = &ut_params->auth_xform;
5155 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
5156 &ut_params->cipher_xform);
5158 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5164 test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
5166 struct crypto_testsuite_params *ts_params = &testsuite_params;
5167 struct crypto_unittest_params *ut_params = &unittest_params;
5171 uint8_t *auth_tag, *p;
5172 uint16_t aad_pad_len;
5174 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
5175 "No GMAC length in the source data");
5177 retval = create_gmac_session(ts_params->valid_devs[0],
5178 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
5179 tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
5184 if (tdata->aad.len > MBUF_SIZE)
5185 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
5187 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5188 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5189 "Failed to allocate input buffer in mempool");
5191 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5192 rte_pktmbuf_tailroom(ut_params->ibuf));
5194 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
5196 p = rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *);
5198 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
5204 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5206 ut_params->op->sym->m_src = ut_params->ibuf;
5208 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5209 ut_params->op), "failed to process sym crypto op");
5211 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5212 "crypto op processing failed");
5214 if (ut_params->op->sym->m_dst) {
5215 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
5216 uint8_t *, aad_pad_len);
5218 auth_tag = p + aad_pad_len;
5221 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
5223 TEST_ASSERT_BUFFERS_ARE_EQUAL(
5225 tdata->gmac_tag.data,
5226 tdata->gmac_tag.len,
5227 "GMAC Generated auth tag not as expected");
5233 test_AES_GMAC_authentication_test_case_1(void)
5235 return test_AES_GMAC_authentication(&gmac_test_case_1);
5239 test_AES_GMAC_authentication_test_case_2(void)
5241 return test_AES_GMAC_authentication(&gmac_test_case_2);
5245 test_AES_GMAC_authentication_test_case_3(void)
5247 return test_AES_GMAC_authentication(&gmac_test_case_3);
5251 test_AES_GMAC_authentication_test_case_4(void)
5253 return test_AES_GMAC_authentication(&gmac_test_case_4);
5257 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
5259 struct crypto_testsuite_params *ts_params = &testsuite_params;
5260 struct crypto_unittest_params *ut_params = &unittest_params;
5263 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
5264 "No GMAC length in the source data");
5266 retval = create_gmac_session(ts_params->valid_devs[0],
5267 RTE_CRYPTO_CIPHER_OP_DECRYPT,
5268 tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
5273 if (tdata->aad.len > MBUF_SIZE)
5274 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
5276 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5277 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5278 "Failed to allocate input buffer in mempool");
5280 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5281 rte_pktmbuf_tailroom(ut_params->ibuf));
5283 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
5289 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5291 ut_params->op->sym->m_src = ut_params->ibuf;
5293 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
5294 ut_params->op), "failed to process sym crypto op");
5296 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
5297 "crypto op processing failed");
5304 test_AES_GMAC_authentication_verify_test_case_1(void)
5306 return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
5310 test_AES_GMAC_authentication_verify_test_case_2(void)
5312 return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
5316 test_AES_GMAC_authentication_verify_test_case_3(void)
5318 return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
5322 test_AES_GMAC_authentication_verify_test_case_4(void)
5324 return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
5327 struct test_crypto_vector {
5328 enum rte_crypto_cipher_algorithm crypto_algo;
5341 const uint8_t *data;
5346 const uint8_t *data;
5350 enum rte_crypto_auth_algorithm auth_algo;
5358 const uint8_t *data;
5368 static const struct test_crypto_vector
5369 hmac_sha1_test_crypto_vector = {
5370 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
5372 .data = plaintext_hash,
5377 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
5378 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
5379 0xDE, 0xF4, 0xDE, 0xAD
5385 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
5386 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
5387 0x3F, 0x91, 0x64, 0x59
5393 static const struct test_crypto_vector
5394 aes128_gmac_test_vector = {
5395 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
5396 .crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,
5398 .data = plaintext_hash,
5403 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5404 0x08, 0x09, 0x0A, 0x0B
5410 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
5411 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
5417 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
5418 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
5424 static const struct test_crypto_vector
5425 aes128cbc_hmac_sha1_test_vector = {
5426 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
5429 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
5430 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
5436 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5437 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
5442 .data = plaintext_hash,
5446 .data = ciphertext512_aes128cbc,
5449 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
5452 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
5453 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
5454 0xDE, 0xF4, 0xDE, 0xAD
5460 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
5461 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
5462 0x18, 0x8C, 0x1D, 0x32
5469 data_corruption(uint8_t *data)
5475 tag_corruption(uint8_t *data, unsigned int tag_offset)
5477 data[tag_offset] += 1;
5481 create_auth_session(struct crypto_unittest_params *ut_params,
5483 const struct test_crypto_vector *reference,
5484 enum rte_crypto_auth_operation auth_op)
5486 uint8_t auth_key[reference->auth_key.len + 1];
5488 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
5490 /* Setup Authentication Parameters */
5491 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5492 ut_params->auth_xform.auth.op = auth_op;
5493 ut_params->auth_xform.next = NULL;
5494 ut_params->auth_xform.auth.algo = reference->auth_algo;
5495 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
5496 ut_params->auth_xform.auth.key.data = auth_key;
5497 ut_params->auth_xform.auth.digest_length = reference->digest.len;
5498 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
5500 /* Create Crypto session*/
5501 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
5502 &ut_params->auth_xform);
5504 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5510 create_auth_cipher_session(struct crypto_unittest_params *ut_params,
5512 const struct test_crypto_vector *reference,
5513 enum rte_crypto_auth_operation auth_op,
5514 enum rte_crypto_cipher_operation cipher_op)
5516 uint8_t cipher_key[reference->cipher_key.len + 1];
5517 uint8_t auth_key[reference->auth_key.len + 1];
5519 memcpy(cipher_key, reference->cipher_key.data,
5520 reference->cipher_key.len);
5521 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
5523 /* Setup Authentication Parameters */
5524 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
5525 ut_params->auth_xform.auth.op = auth_op;
5526 ut_params->auth_xform.next = &ut_params->cipher_xform;
5527 ut_params->auth_xform.auth.algo = reference->auth_algo;
5528 ut_params->auth_xform.auth.key.length = reference->auth_key.len;
5529 ut_params->auth_xform.auth.key.data = auth_key;
5530 ut_params->auth_xform.auth.digest_length = reference->digest.len;
5531 ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
5533 /* Setup Cipher Parameters */
5534 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
5535 ut_params->cipher_xform.next = NULL;
5536 ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
5537 ut_params->cipher_xform.cipher.op = cipher_op;
5538 ut_params->cipher_xform.cipher.key.data = cipher_key;
5539 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
5541 /* Create Crypto session*/
5542 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
5543 &ut_params->auth_xform);
5545 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
5551 create_auth_operation(struct crypto_testsuite_params *ts_params,
5552 struct crypto_unittest_params *ut_params,
5553 const struct test_crypto_vector *reference,
5554 unsigned int auth_generate)
5556 /* Generate Crypto op data structure */
5557 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5558 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5559 TEST_ASSERT_NOT_NULL(ut_params->op,
5560 "Failed to allocate pktmbuf offload");
5562 /* Set crypto operation data parameters */
5563 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5565 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5567 /* set crypto operation source mbuf */
5568 sym_op->m_src = ut_params->ibuf;
5571 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5572 ut_params->ibuf, reference->digest.len);
5574 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5575 "no room to append auth tag");
5577 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5578 ut_params->ibuf, reference->plaintext.len);
5579 sym_op->auth.digest.length = reference->digest.len;
5582 memset(sym_op->auth.digest.data, 0, reference->digest.len);
5584 memcpy(sym_op->auth.digest.data,
5585 reference->digest.data,
5586 reference->digest.len);
5588 TEST_HEXDUMP(stdout, "digest:",
5589 sym_op->auth.digest.data,
5590 sym_op->auth.digest.length);
5592 sym_op->auth.data.length = reference->plaintext.len;
5593 sym_op->auth.data.offset = 0;
5599 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
5600 struct crypto_unittest_params *ut_params,
5601 const struct test_crypto_vector *reference,
5602 unsigned int auth_generate)
5604 /* Generate Crypto op data structure */
5605 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5606 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5607 TEST_ASSERT_NOT_NULL(ut_params->op,
5608 "Failed to allocate pktmbuf offload");
5610 /* Set crypto operation data parameters */
5611 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5613 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5615 /* set crypto operation source mbuf */
5616 sym_op->m_src = ut_params->ibuf;
5619 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5620 reference->aad.len);
5621 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, "no room to append AAD");
5622 memcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);
5624 TEST_HEXDUMP(stdout, "AAD:", sym_op->auth.aad.data, reference->aad.len);
5626 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
5627 sym_op->auth.aad.length = reference->aad.len;
5630 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5631 ut_params->ibuf, reference->digest.len);
5633 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5634 "no room to append auth tag");
5636 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5637 ut_params->ibuf, reference->ciphertext.len);
5638 sym_op->auth.digest.length = reference->digest.len;
5641 memset(sym_op->auth.digest.data, 0, reference->digest.len);
5643 memcpy(sym_op->auth.digest.data,
5644 reference->digest.data,
5645 reference->digest.len);
5647 TEST_HEXDUMP(stdout, "digest:",
5648 sym_op->auth.digest.data,
5649 sym_op->auth.digest.length);
5651 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
5652 ut_params->ibuf, reference->iv.len);
5653 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
5655 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
5656 sym_op->cipher.iv.length = reference->iv.len;
5658 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
5660 sym_op->cipher.data.length = 0;
5661 sym_op->cipher.data.offset = 0;
5663 sym_op->auth.data.length = 0;
5664 sym_op->auth.data.offset = 0;
5670 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
5671 struct crypto_unittest_params *ut_params,
5672 const struct test_crypto_vector *reference,
5673 unsigned int auth_generate)
5675 /* Generate Crypto op data structure */
5676 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
5677 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
5678 TEST_ASSERT_NOT_NULL(ut_params->op,
5679 "Failed to allocate pktmbuf offload");
5681 /* Set crypto operation data parameters */
5682 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
5684 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
5686 /* set crypto operation source mbuf */
5687 sym_op->m_src = ut_params->ibuf;
5690 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
5691 ut_params->ibuf, reference->digest.len);
5693 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
5694 "no room to append auth tag");
5696 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
5697 ut_params->ibuf, reference->ciphertext.len);
5698 sym_op->auth.digest.length = reference->digest.len;
5701 memset(sym_op->auth.digest.data, 0, reference->digest.len);
5703 memcpy(sym_op->auth.digest.data,
5704 reference->digest.data,
5705 reference->digest.len);
5707 TEST_HEXDUMP(stdout, "digest:",
5708 sym_op->auth.digest.data,
5709 sym_op->auth.digest.length);
5711 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
5712 ut_params->ibuf, reference->iv.len);
5713 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
5715 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
5716 sym_op->cipher.iv.length = reference->iv.len;
5718 memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
5720 sym_op->cipher.data.length = reference->ciphertext.len;
5721 sym_op->cipher.data.offset = reference->iv.len;
5723 sym_op->auth.data.length = reference->ciphertext.len;
5724 sym_op->auth.data.offset = reference->iv.len;
5730 create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
5731 struct crypto_unittest_params *ut_params,
5732 const struct test_crypto_vector *reference)
5734 return create_auth_operation(ts_params, ut_params, reference, 0);
5738 create_auth_verify_GMAC_operation(
5739 struct crypto_testsuite_params *ts_params,
5740 struct crypto_unittest_params *ut_params,
5741 const struct test_crypto_vector *reference)
5743 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
5747 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
5748 struct crypto_unittest_params *ut_params,
5749 const struct test_crypto_vector *reference)
5751 return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
5755 test_authentication_verify_fail_when_data_corruption(
5756 struct crypto_testsuite_params *ts_params,
5757 struct crypto_unittest_params *ut_params,
5758 const struct test_crypto_vector *reference,
5759 unsigned int data_corrupted)
5765 /* Create session */
5766 retval = create_auth_session(ut_params,
5767 ts_params->valid_devs[0],
5769 RTE_CRYPTO_AUTH_OP_VERIFY);
5773 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5774 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5775 "Failed to allocate input buffer in mempool");
5777 /* clear mbuf payload */
5778 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5779 rte_pktmbuf_tailroom(ut_params->ibuf));
5781 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5782 reference->plaintext.len);
5783 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
5784 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
5786 TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
5788 /* Create operation */
5789 retval = create_auth_verify_operation(ts_params, ut_params, reference);
5795 data_corruption(plaintext);
5797 tag_corruption(plaintext, reference->plaintext.len);
5799 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5801 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5802 TEST_ASSERT_EQUAL(ut_params->op->status,
5803 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
5804 "authentication not failed");
5806 ut_params->obuf = ut_params->op->sym->m_src;
5807 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
5813 test_authentication_verify_GMAC_fail_when_corruption(
5814 struct crypto_testsuite_params *ts_params,
5815 struct crypto_unittest_params *ut_params,
5816 const struct test_crypto_vector *reference,
5817 unsigned int data_corrupted)
5821 /* Create session */
5822 retval = create_auth_cipher_session(ut_params,
5823 ts_params->valid_devs[0],
5825 RTE_CRYPTO_AUTH_OP_VERIFY,
5826 RTE_CRYPTO_CIPHER_OP_DECRYPT);
5830 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5831 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5832 "Failed to allocate input buffer in mempool");
5834 /* clear mbuf payload */
5835 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5836 rte_pktmbuf_tailroom(ut_params->ibuf));
5838 /* Create operation */
5839 retval = create_auth_verify_GMAC_operation(ts_params,
5847 data_corruption(ut_params->op->sym->auth.aad.data);
5849 tag_corruption(ut_params->op->sym->auth.aad.data,
5850 reference->aad.len);
5852 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5854 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5855 TEST_ASSERT_EQUAL(ut_params->op->status,
5856 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
5857 "authentication not failed");
5859 ut_params->obuf = ut_params->op->sym->m_src;
5860 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
5866 test_authenticated_decryption_fail_when_corruption(
5867 struct crypto_testsuite_params *ts_params,
5868 struct crypto_unittest_params *ut_params,
5869 const struct test_crypto_vector *reference,
5870 unsigned int data_corrupted)
5874 uint8_t *ciphertext;
5876 /* Create session */
5877 retval = create_auth_cipher_session(ut_params,
5878 ts_params->valid_devs[0],
5880 RTE_CRYPTO_AUTH_OP_VERIFY,
5881 RTE_CRYPTO_CIPHER_OP_DECRYPT);
5885 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
5886 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
5887 "Failed to allocate input buffer in mempool");
5889 /* clear mbuf payload */
5890 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
5891 rte_pktmbuf_tailroom(ut_params->ibuf));
5893 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
5894 reference->ciphertext.len);
5895 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
5896 memcpy(ciphertext, reference->ciphertext.data,
5897 reference->ciphertext.len);
5899 /* Create operation */
5900 retval = create_cipher_auth_verify_operation(ts_params,
5908 data_corruption(ciphertext);
5910 tag_corruption(ciphertext, reference->ciphertext.len);
5912 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
5915 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
5916 TEST_ASSERT_EQUAL(ut_params->op->status,
5917 RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
5918 "authentication not failed");
5920 ut_params->obuf = ut_params->op->sym->m_src;
5921 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
5927 test_authentication_verify_fail_when_data_corrupted(
5928 struct crypto_testsuite_params *ts_params,
5929 struct crypto_unittest_params *ut_params,
5930 const struct test_crypto_vector *reference)
5932 return test_authentication_verify_fail_when_data_corruption(
5933 ts_params, ut_params, reference, 1);
5937 test_authentication_verify_fail_when_tag_corrupted(
5938 struct crypto_testsuite_params *ts_params,
5939 struct crypto_unittest_params *ut_params,
5940 const struct test_crypto_vector *reference)
5942 return test_authentication_verify_fail_when_data_corruption(
5943 ts_params, ut_params, reference, 0);
5947 test_authentication_verify_GMAC_fail_when_data_corrupted(
5948 struct crypto_testsuite_params *ts_params,
5949 struct crypto_unittest_params *ut_params,
5950 const struct test_crypto_vector *reference)
5952 return test_authentication_verify_GMAC_fail_when_corruption(
5953 ts_params, ut_params, reference, 1);
5957 test_authentication_verify_GMAC_fail_when_tag_corrupted(
5958 struct crypto_testsuite_params *ts_params,
5959 struct crypto_unittest_params *ut_params,
5960 const struct test_crypto_vector *reference)
5962 return test_authentication_verify_GMAC_fail_when_corruption(
5963 ts_params, ut_params, reference, 0);
5967 test_authenticated_decryption_fail_when_data_corrupted(
5968 struct crypto_testsuite_params *ts_params,
5969 struct crypto_unittest_params *ut_params,
5970 const struct test_crypto_vector *reference)
5972 return test_authenticated_decryption_fail_when_corruption(
5973 ts_params, ut_params, reference, 1);
5977 test_authenticated_decryption_fail_when_tag_corrupted(
5978 struct crypto_testsuite_params *ts_params,
5979 struct crypto_unittest_params *ut_params,
5980 const struct test_crypto_vector *reference)
5982 return test_authenticated_decryption_fail_when_corruption(
5983 ts_params, ut_params, reference, 0);
5987 authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
5989 return test_authentication_verify_fail_when_data_corrupted(
5990 &testsuite_params, &unittest_params,
5991 &hmac_sha1_test_crypto_vector);
5995 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
5997 return test_authentication_verify_fail_when_tag_corrupted(
5998 &testsuite_params, &unittest_params,
5999 &hmac_sha1_test_crypto_vector);
6003 authentication_verify_AES128_GMAC_fail_data_corrupt(void)
6005 return test_authentication_verify_GMAC_fail_when_data_corrupted(
6006 &testsuite_params, &unittest_params,
6007 &aes128_gmac_test_vector);
6011 authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
6013 return test_authentication_verify_GMAC_fail_when_tag_corrupted(
6014 &testsuite_params, &unittest_params,
6015 &aes128_gmac_test_vector);
6019 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
6021 return test_authenticated_decryption_fail_when_data_corrupted(
6024 &aes128cbc_hmac_sha1_test_vector);
6028 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
6030 return test_authenticated_decryption_fail_when_tag_corrupted(
6033 &aes128cbc_hmac_sha1_test_vector);
6036 static struct unit_test_suite cryptodev_qat_testsuite = {
6037 .suite_name = "Crypto QAT Unit Test Suite",
6038 .setup = testsuite_setup,
6039 .teardown = testsuite_teardown,
6040 .unit_test_cases = {
6041 TEST_CASE_ST(ut_setup, ut_teardown,
6042 test_device_configure_invalid_dev_id),
6043 TEST_CASE_ST(ut_setup, ut_teardown,
6044 test_device_configure_invalid_queue_pair_ids),
6045 TEST_CASE_ST(ut_setup, ut_teardown,
6046 test_queue_pair_descriptor_setup),
6047 TEST_CASE_ST(ut_setup, ut_teardown,
6048 test_multi_session),
6050 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
6051 TEST_CASE_ST(ut_setup, ut_teardown,
6052 test_AES_cipheronly_qat_all),
6053 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
6054 TEST_CASE_ST(ut_setup, ut_teardown,
6055 test_3DES_cipheronly_qat_all),
6056 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
6058 /** AES GCM Authenticated Encryption */
6059 TEST_CASE_ST(ut_setup, ut_teardown,
6060 test_mb_AES_GCM_authenticated_encryption_test_case_1),
6061 TEST_CASE_ST(ut_setup, ut_teardown,
6062 test_mb_AES_GCM_authenticated_encryption_test_case_2),
6063 TEST_CASE_ST(ut_setup, ut_teardown,
6064 test_mb_AES_GCM_authenticated_encryption_test_case_3),
6065 TEST_CASE_ST(ut_setup, ut_teardown,
6066 test_mb_AES_GCM_authenticated_encryption_test_case_4),
6067 TEST_CASE_ST(ut_setup, ut_teardown,
6068 test_mb_AES_GCM_authenticated_encryption_test_case_5),
6069 TEST_CASE_ST(ut_setup, ut_teardown,
6070 test_mb_AES_GCM_authenticated_encryption_test_case_6),
6071 TEST_CASE_ST(ut_setup, ut_teardown,
6072 test_mb_AES_GCM_authenticated_encryption_test_case_7),
6074 /** AES GCM Authenticated Decryption */
6075 TEST_CASE_ST(ut_setup, ut_teardown,
6076 test_mb_AES_GCM_authenticated_decryption_test_case_1),
6077 TEST_CASE_ST(ut_setup, ut_teardown,
6078 test_mb_AES_GCM_authenticated_decryption_test_case_2),
6079 TEST_CASE_ST(ut_setup, ut_teardown,
6080 test_mb_AES_GCM_authenticated_decryption_test_case_3),
6081 TEST_CASE_ST(ut_setup, ut_teardown,
6082 test_mb_AES_GCM_authenticated_decryption_test_case_4),
6083 TEST_CASE_ST(ut_setup, ut_teardown,
6084 test_mb_AES_GCM_authenticated_decryption_test_case_5),
6085 TEST_CASE_ST(ut_setup, ut_teardown,
6086 test_mb_AES_GCM_authenticated_decryption_test_case_6),
6087 TEST_CASE_ST(ut_setup, ut_teardown,
6088 test_mb_AES_GCM_authenticated_decryption_test_case_7),
6090 /** AES GMAC Authentication */
6091 TEST_CASE_ST(ut_setup, ut_teardown,
6092 test_AES_GMAC_authentication_test_case_1),
6093 TEST_CASE_ST(ut_setup, ut_teardown,
6094 test_AES_GMAC_authentication_verify_test_case_1),
6095 TEST_CASE_ST(ut_setup, ut_teardown,
6096 test_AES_GMAC_authentication_test_case_2),
6097 TEST_CASE_ST(ut_setup, ut_teardown,
6098 test_AES_GMAC_authentication_verify_test_case_2),
6099 TEST_CASE_ST(ut_setup, ut_teardown,
6100 test_AES_GMAC_authentication_test_case_3),
6101 TEST_CASE_ST(ut_setup, ut_teardown,
6102 test_AES_GMAC_authentication_verify_test_case_3),
6104 /** SNOW 3G encrypt only (UEA2) */
6105 TEST_CASE_ST(ut_setup, ut_teardown,
6106 test_snow3g_encryption_test_case_1),
6107 TEST_CASE_ST(ut_setup, ut_teardown,
6108 test_snow3g_encryption_test_case_2),
6109 TEST_CASE_ST(ut_setup, ut_teardown,
6110 test_snow3g_encryption_test_case_3),
6111 TEST_CASE_ST(ut_setup, ut_teardown,
6112 test_snow3g_encryption_test_case_4),
6113 TEST_CASE_ST(ut_setup, ut_teardown,
6114 test_snow3g_encryption_test_case_5),
6116 TEST_CASE_ST(ut_setup, ut_teardown,
6117 test_snow3g_encryption_test_case_1_oop),
6118 TEST_CASE_ST(ut_setup, ut_teardown,
6119 test_snow3g_decryption_test_case_1_oop),
6121 /** SNOW 3G decrypt only (UEA2) */
6122 TEST_CASE_ST(ut_setup, ut_teardown,
6123 test_snow3g_decryption_test_case_1),
6124 TEST_CASE_ST(ut_setup, ut_teardown,
6125 test_snow3g_decryption_test_case_2),
6126 TEST_CASE_ST(ut_setup, ut_teardown,
6127 test_snow3g_decryption_test_case_3),
6128 TEST_CASE_ST(ut_setup, ut_teardown,
6129 test_snow3g_decryption_test_case_4),
6130 TEST_CASE_ST(ut_setup, ut_teardown,
6131 test_snow3g_decryption_test_case_5),
6132 TEST_CASE_ST(ut_setup, ut_teardown,
6133 test_snow3g_hash_generate_test_case_1),
6134 TEST_CASE_ST(ut_setup, ut_teardown,
6135 test_snow3g_hash_generate_test_case_2),
6136 TEST_CASE_ST(ut_setup, ut_teardown,
6137 test_snow3g_hash_generate_test_case_3),
6138 TEST_CASE_ST(ut_setup, ut_teardown,
6139 test_snow3g_hash_verify_test_case_1),
6140 TEST_CASE_ST(ut_setup, ut_teardown,
6141 test_snow3g_hash_verify_test_case_2),
6142 TEST_CASE_ST(ut_setup, ut_teardown,
6143 test_snow3g_hash_verify_test_case_3),
6144 TEST_CASE_ST(ut_setup, ut_teardown,
6145 test_snow3g_cipher_auth_test_case_1),
6146 TEST_CASE_ST(ut_setup, ut_teardown,
6147 test_snow3g_auth_cipher_test_case_1),
6149 /** HMAC_MD5 Authentication */
6150 TEST_CASE_ST(ut_setup, ut_teardown,
6151 test_MD5_HMAC_generate_case_1),
6152 TEST_CASE_ST(ut_setup, ut_teardown,
6153 test_MD5_HMAC_verify_case_1),
6154 TEST_CASE_ST(ut_setup, ut_teardown,
6155 test_MD5_HMAC_generate_case_2),
6156 TEST_CASE_ST(ut_setup, ut_teardown,
6157 test_MD5_HMAC_verify_case_2),
6160 TEST_CASE_ST(ut_setup, ut_teardown,
6161 test_null_auth_only_operation),
6162 TEST_CASE_ST(ut_setup, ut_teardown,
6163 test_null_cipher_only_operation),
6164 TEST_CASE_ST(ut_setup, ut_teardown,
6165 test_null_cipher_auth_operation),
6166 TEST_CASE_ST(ut_setup, ut_teardown,
6167 test_null_auth_cipher_operation),
6169 TEST_CASE_ST(ut_setup, ut_teardown,
6170 test_kasumi_hash_generate_test_case_6),
6173 TEST_CASE_ST(ut_setup, ut_teardown,
6174 test_kasumi_encryption_test_case_1),
6175 TEST_CASE_ST(ut_setup, ut_teardown,
6176 test_kasumi_encryption_test_case_3),
6177 TEST_CASE_ST(ut_setup, ut_teardown,
6178 test_kasumi_auth_cipher_test_case_1),
6179 TEST_CASE_ST(ut_setup, ut_teardown,
6180 test_kasumi_cipher_auth_test_case_1),
6182 /** Negative tests */
6183 TEST_CASE_ST(ut_setup, ut_teardown,
6184 authentication_verify_HMAC_SHA1_fail_data_corrupt),
6185 TEST_CASE_ST(ut_setup, ut_teardown,
6186 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
6187 TEST_CASE_ST(ut_setup, ut_teardown,
6188 authentication_verify_AES128_GMAC_fail_data_corrupt),
6189 TEST_CASE_ST(ut_setup, ut_teardown,
6190 authentication_verify_AES128_GMAC_fail_tag_corrupt),
6191 TEST_CASE_ST(ut_setup, ut_teardown,
6192 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
6193 TEST_CASE_ST(ut_setup, ut_teardown,
6194 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
6196 TEST_CASES_END() /**< NULL terminate unit test array */
6200 static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
6201 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
6202 .setup = testsuite_setup,
6203 .teardown = testsuite_teardown,
6204 .unit_test_cases = {
6205 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
6207 TEST_CASES_END() /**< NULL terminate unit test array */
6211 static struct unit_test_suite cryptodev_openssl_testsuite = {
6212 .suite_name = "Crypto Device OPENSSL Unit Test Suite",
6213 .setup = testsuite_setup,
6214 .teardown = testsuite_teardown,
6215 .unit_test_cases = {
6216 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
6217 TEST_CASE_ST(ut_setup, ut_teardown,
6218 test_multi_session_random_usage),
6219 TEST_CASE_ST(ut_setup, ut_teardown,
6220 test_AES_chain_openssl_all),
6221 TEST_CASE_ST(ut_setup, ut_teardown,
6222 test_AES_cipheronly_openssl_all),
6223 TEST_CASE_ST(ut_setup, ut_teardown,
6224 test_3DES_chain_openssl_all),
6225 TEST_CASE_ST(ut_setup, ut_teardown,
6226 test_3DES_cipheronly_openssl_all),
6227 TEST_CASE_ST(ut_setup, ut_teardown,
6228 test_authonly_openssl_all),
6230 /** AES GCM Authenticated Encryption */
6231 TEST_CASE_ST(ut_setup, ut_teardown,
6232 test_mb_AES_GCM_authenticated_encryption_test_case_1),
6233 TEST_CASE_ST(ut_setup, ut_teardown,
6234 test_mb_AES_GCM_authenticated_encryption_test_case_2),
6235 TEST_CASE_ST(ut_setup, ut_teardown,
6236 test_mb_AES_GCM_authenticated_encryption_test_case_3),
6237 TEST_CASE_ST(ut_setup, ut_teardown,
6238 test_mb_AES_GCM_authenticated_encryption_test_case_4),
6239 TEST_CASE_ST(ut_setup, ut_teardown,
6240 test_mb_AES_GCM_authenticated_encryption_test_case_5),
6241 TEST_CASE_ST(ut_setup, ut_teardown,
6242 test_mb_AES_GCM_authenticated_encryption_test_case_6),
6243 TEST_CASE_ST(ut_setup, ut_teardown,
6244 test_mb_AES_GCM_authenticated_encryption_test_case_7),
6246 /** AES GCM Authenticated Decryption */
6247 TEST_CASE_ST(ut_setup, ut_teardown,
6248 test_mb_AES_GCM_authenticated_decryption_test_case_1),
6249 TEST_CASE_ST(ut_setup, ut_teardown,
6250 test_mb_AES_GCM_authenticated_decryption_test_case_2),
6251 TEST_CASE_ST(ut_setup, ut_teardown,
6252 test_mb_AES_GCM_authenticated_decryption_test_case_3),
6253 TEST_CASE_ST(ut_setup, ut_teardown,
6254 test_mb_AES_GCM_authenticated_decryption_test_case_4),
6255 TEST_CASE_ST(ut_setup, ut_teardown,
6256 test_mb_AES_GCM_authenticated_decryption_test_case_5),
6257 TEST_CASE_ST(ut_setup, ut_teardown,
6258 test_mb_AES_GCM_authenticated_decryption_test_case_6),
6259 TEST_CASE_ST(ut_setup, ut_teardown,
6260 test_mb_AES_GCM_authenticated_decryption_test_case_7),
6262 /** AES GMAC Authentication */
6263 TEST_CASE_ST(ut_setup, ut_teardown,
6264 test_AES_GMAC_authentication_test_case_1),
6265 TEST_CASE_ST(ut_setup, ut_teardown,
6266 test_AES_GMAC_authentication_verify_test_case_1),
6267 TEST_CASE_ST(ut_setup, ut_teardown,
6268 test_AES_GMAC_authentication_test_case_2),
6269 TEST_CASE_ST(ut_setup, ut_teardown,
6270 test_AES_GMAC_authentication_verify_test_case_2),
6271 TEST_CASE_ST(ut_setup, ut_teardown,
6272 test_AES_GMAC_authentication_test_case_3),
6273 TEST_CASE_ST(ut_setup, ut_teardown,
6274 test_AES_GMAC_authentication_verify_test_case_3),
6275 TEST_CASE_ST(ut_setup, ut_teardown,
6276 test_AES_GMAC_authentication_test_case_4),
6277 TEST_CASE_ST(ut_setup, ut_teardown,
6278 test_AES_GMAC_authentication_verify_test_case_4),
6280 /** Negative tests */
6281 TEST_CASE_ST(ut_setup, ut_teardown,
6282 authentication_verify_HMAC_SHA1_fail_data_corrupt),
6283 TEST_CASE_ST(ut_setup, ut_teardown,
6284 authentication_verify_HMAC_SHA1_fail_tag_corrupt),
6285 TEST_CASE_ST(ut_setup, ut_teardown,
6286 authentication_verify_AES128_GMAC_fail_data_corrupt),
6287 TEST_CASE_ST(ut_setup, ut_teardown,
6288 authentication_verify_AES128_GMAC_fail_tag_corrupt),
6289 TEST_CASE_ST(ut_setup, ut_teardown,
6290 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
6291 TEST_CASE_ST(ut_setup, ut_teardown,
6292 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
6294 TEST_CASES_END() /**< NULL terminate unit test array */
6298 static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
6299 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
6300 .setup = testsuite_setup,
6301 .teardown = testsuite_teardown,
6302 .unit_test_cases = {
6303 /** AES GCM Authenticated Encryption */
6304 TEST_CASE_ST(ut_setup, ut_teardown,
6305 test_mb_AES_GCM_authenticated_encryption_test_case_1),
6306 TEST_CASE_ST(ut_setup, ut_teardown,
6307 test_mb_AES_GCM_authenticated_encryption_test_case_2),
6308 TEST_CASE_ST(ut_setup, ut_teardown,
6309 test_mb_AES_GCM_authenticated_encryption_test_case_3),
6310 TEST_CASE_ST(ut_setup, ut_teardown,
6311 test_mb_AES_GCM_authenticated_encryption_test_case_4),
6312 TEST_CASE_ST(ut_setup, ut_teardown,
6313 test_mb_AES_GCM_authenticated_encryption_test_case_5),
6314 TEST_CASE_ST(ut_setup, ut_teardown,
6315 test_mb_AES_GCM_authenticated_encryption_test_case_6),
6316 TEST_CASE_ST(ut_setup, ut_teardown,
6317 test_mb_AES_GCM_authenticated_encryption_test_case_7),
6319 /** AES GCM Authenticated Decryption */
6320 TEST_CASE_ST(ut_setup, ut_teardown,
6321 test_mb_AES_GCM_authenticated_decryption_test_case_1),
6322 TEST_CASE_ST(ut_setup, ut_teardown,
6323 test_mb_AES_GCM_authenticated_decryption_test_case_2),
6324 TEST_CASE_ST(ut_setup, ut_teardown,
6325 test_mb_AES_GCM_authenticated_decryption_test_case_3),
6326 TEST_CASE_ST(ut_setup, ut_teardown,
6327 test_mb_AES_GCM_authenticated_decryption_test_case_4),
6328 TEST_CASE_ST(ut_setup, ut_teardown,
6329 test_mb_AES_GCM_authenticated_decryption_test_case_5),
6330 TEST_CASE_ST(ut_setup, ut_teardown,
6331 test_mb_AES_GCM_authenticated_decryption_test_case_6),
6332 TEST_CASE_ST(ut_setup, ut_teardown,
6333 test_mb_AES_GCM_authenticated_decryption_test_case_7),
6335 TEST_CASES_END() /**< NULL terminate unit test array */
6339 static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
6340 .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
6341 .setup = testsuite_setup,
6342 .teardown = testsuite_teardown,
6343 .unit_test_cases = {
6344 /** KASUMI encrypt only (UEA1) */
6345 TEST_CASE_ST(ut_setup, ut_teardown,
6346 test_kasumi_encryption_test_case_1),
6347 TEST_CASE_ST(ut_setup, ut_teardown,
6348 test_kasumi_encryption_test_case_2),
6349 TEST_CASE_ST(ut_setup, ut_teardown,
6350 test_kasumi_encryption_test_case_3),
6351 TEST_CASE_ST(ut_setup, ut_teardown,
6352 test_kasumi_encryption_test_case_4),
6353 TEST_CASE_ST(ut_setup, ut_teardown,
6354 test_kasumi_encryption_test_case_5),
6355 /** KASUMI decrypt only (UEA1) */
6356 TEST_CASE_ST(ut_setup, ut_teardown,
6357 test_kasumi_decryption_test_case_1),
6358 TEST_CASE_ST(ut_setup, ut_teardown,
6359 test_kasumi_decryption_test_case_2),
6360 TEST_CASE_ST(ut_setup, ut_teardown,
6361 test_kasumi_decryption_test_case_3),
6362 TEST_CASE_ST(ut_setup, ut_teardown,
6363 test_kasumi_decryption_test_case_4),
6364 TEST_CASE_ST(ut_setup, ut_teardown,
6365 test_kasumi_decryption_test_case_5),
6367 TEST_CASE_ST(ut_setup, ut_teardown,
6368 test_kasumi_encryption_test_case_1_oop),
6369 TEST_CASE_ST(ut_setup, ut_teardown,
6370 test_kasumi_decryption_test_case_1_oop),
6372 /** KASUMI hash only (UIA1) */
6373 TEST_CASE_ST(ut_setup, ut_teardown,
6374 test_kasumi_hash_generate_test_case_1),
6375 TEST_CASE_ST(ut_setup, ut_teardown,
6376 test_kasumi_hash_generate_test_case_2),
6377 TEST_CASE_ST(ut_setup, ut_teardown,
6378 test_kasumi_hash_generate_test_case_3),
6379 TEST_CASE_ST(ut_setup, ut_teardown,
6380 test_kasumi_hash_generate_test_case_4),
6381 TEST_CASE_ST(ut_setup, ut_teardown,
6382 test_kasumi_hash_generate_test_case_5),
6383 TEST_CASE_ST(ut_setup, ut_teardown,
6384 test_kasumi_hash_generate_test_case_6),
6385 TEST_CASE_ST(ut_setup, ut_teardown,
6386 test_kasumi_hash_verify_test_case_1),
6387 TEST_CASE_ST(ut_setup, ut_teardown,
6388 test_kasumi_hash_verify_test_case_2),
6389 TEST_CASE_ST(ut_setup, ut_teardown,
6390 test_kasumi_hash_verify_test_case_3),
6391 TEST_CASE_ST(ut_setup, ut_teardown,
6392 test_kasumi_hash_verify_test_case_4),
6393 TEST_CASE_ST(ut_setup, ut_teardown,
6394 test_kasumi_hash_verify_test_case_5),
6395 TEST_CASE_ST(ut_setup, ut_teardown,
6396 test_kasumi_auth_cipher_test_case_1),
6397 TEST_CASE_ST(ut_setup, ut_teardown,
6398 test_kasumi_cipher_auth_test_case_1),
6399 TEST_CASES_END() /**< NULL terminate unit test array */
6402 static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
6403 .suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
6404 .setup = testsuite_setup,
6405 .teardown = testsuite_teardown,
6406 .unit_test_cases = {
6407 /** SNOW 3G encrypt only (UEA2) */
6408 TEST_CASE_ST(ut_setup, ut_teardown,
6409 test_snow3g_encryption_test_case_1),
6410 TEST_CASE_ST(ut_setup, ut_teardown,
6411 test_snow3g_encryption_test_case_2),
6412 TEST_CASE_ST(ut_setup, ut_teardown,
6413 test_snow3g_encryption_test_case_3),
6414 TEST_CASE_ST(ut_setup, ut_teardown,
6415 test_snow3g_encryption_test_case_4),
6416 TEST_CASE_ST(ut_setup, ut_teardown,
6417 test_snow3g_encryption_test_case_5),
6419 TEST_CASE_ST(ut_setup, ut_teardown,
6420 test_snow3g_encryption_test_case_1_oop),
6421 TEST_CASE_ST(ut_setup, ut_teardown,
6422 test_snow3g_decryption_test_case_1_oop),
6424 TEST_CASE_ST(ut_setup, ut_teardown,
6425 test_snow3g_encryption_test_case_1_offset_oop),
6427 /** SNOW 3G decrypt only (UEA2) */
6428 TEST_CASE_ST(ut_setup, ut_teardown,
6429 test_snow3g_decryption_test_case_1),
6430 TEST_CASE_ST(ut_setup, ut_teardown,
6431 test_snow3g_decryption_test_case_2),
6432 TEST_CASE_ST(ut_setup, ut_teardown,
6433 test_snow3g_decryption_test_case_3),
6434 TEST_CASE_ST(ut_setup, ut_teardown,
6435 test_snow3g_decryption_test_case_4),
6436 TEST_CASE_ST(ut_setup, ut_teardown,
6437 test_snow3g_decryption_test_case_5),
6438 TEST_CASE_ST(ut_setup, ut_teardown,
6439 test_snow3g_hash_generate_test_case_1),
6440 TEST_CASE_ST(ut_setup, ut_teardown,
6441 test_snow3g_hash_generate_test_case_2),
6442 TEST_CASE_ST(ut_setup, ut_teardown,
6443 test_snow3g_hash_generate_test_case_3),
6444 /* Tests with buffers which length is not byte-aligned */
6445 TEST_CASE_ST(ut_setup, ut_teardown,
6446 test_snow3g_hash_generate_test_case_4),
6447 TEST_CASE_ST(ut_setup, ut_teardown,
6448 test_snow3g_hash_generate_test_case_5),
6449 TEST_CASE_ST(ut_setup, ut_teardown,
6450 test_snow3g_hash_generate_test_case_6),
6451 TEST_CASE_ST(ut_setup, ut_teardown,
6452 test_snow3g_hash_verify_test_case_1),
6453 TEST_CASE_ST(ut_setup, ut_teardown,
6454 test_snow3g_hash_verify_test_case_2),
6455 TEST_CASE_ST(ut_setup, ut_teardown,
6456 test_snow3g_hash_verify_test_case_3),
6457 /* Tests with buffers which length is not byte-aligned */
6458 TEST_CASE_ST(ut_setup, ut_teardown,
6459 test_snow3g_hash_verify_test_case_4),
6460 TEST_CASE_ST(ut_setup, ut_teardown,
6461 test_snow3g_hash_verify_test_case_5),
6462 TEST_CASE_ST(ut_setup, ut_teardown,
6463 test_snow3g_hash_verify_test_case_6),
6464 TEST_CASE_ST(ut_setup, ut_teardown,
6465 test_snow3g_cipher_auth_test_case_1),
6466 TEST_CASE_ST(ut_setup, ut_teardown,
6467 test_snow3g_auth_cipher_test_case_1),
6469 TEST_CASES_END() /**< NULL terminate unit test array */
6473 static struct unit_test_suite cryptodev_sw_zuc_testsuite = {
6474 .suite_name = "Crypto Device SW ZUC Unit Test Suite",
6475 .setup = testsuite_setup,
6476 .teardown = testsuite_teardown,
6477 .unit_test_cases = {
6478 /** ZUC encrypt only (EEA3) */
6479 TEST_CASE_ST(ut_setup, ut_teardown,
6480 test_zuc_encryption_test_case_1),
6481 TEST_CASE_ST(ut_setup, ut_teardown,
6482 test_zuc_encryption_test_case_2),
6483 TEST_CASE_ST(ut_setup, ut_teardown,
6484 test_zuc_encryption_test_case_3),
6485 TEST_CASE_ST(ut_setup, ut_teardown,
6486 test_zuc_encryption_test_case_4),
6487 TEST_CASE_ST(ut_setup, ut_teardown,
6488 test_zuc_encryption_test_case_5),
6489 TEST_CASE_ST(ut_setup, ut_teardown,
6490 test_zuc_hash_generate_test_case_1),
6491 TEST_CASE_ST(ut_setup, ut_teardown,
6492 test_zuc_hash_generate_test_case_2),
6493 TEST_CASE_ST(ut_setup, ut_teardown,
6494 test_zuc_hash_generate_test_case_3),
6495 TEST_CASE_ST(ut_setup, ut_teardown,
6496 test_zuc_hash_generate_test_case_4),
6497 TEST_CASE_ST(ut_setup, ut_teardown,
6498 test_zuc_hash_generate_test_case_5),
6499 TEST_CASES_END() /**< NULL terminate unit test array */
6503 static struct unit_test_suite cryptodev_null_testsuite = {
6504 .suite_name = "Crypto Device NULL Unit Test Suite",
6505 .setup = testsuite_setup,
6506 .teardown = testsuite_teardown,
6507 .unit_test_cases = {
6508 TEST_CASE_ST(ut_setup, ut_teardown,
6509 test_null_auth_only_operation),
6510 TEST_CASE_ST(ut_setup, ut_teardown,
6511 test_null_cipher_only_operation),
6512 TEST_CASE_ST(ut_setup, ut_teardown,
6513 test_null_cipher_auth_operation),
6514 TEST_CASE_ST(ut_setup, ut_teardown,
6515 test_null_auth_cipher_operation),
6516 TEST_CASE_ST(ut_setup, ut_teardown,
6517 test_null_invalid_operation),
6518 TEST_CASE_ST(ut_setup, ut_teardown,
6519 test_null_burst_operation),
6521 TEST_CASES_END() /**< NULL terminate unit test array */
6526 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
6528 gbl_cryptodev_type = RTE_CRYPTODEV_QAT_SYM_PMD;
6529 return unit_test_suite_runner(&cryptodev_qat_testsuite);
6533 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
6535 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
6537 return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
6541 test_cryptodev_openssl(void)
6543 gbl_cryptodev_type = RTE_CRYPTODEV_OPENSSL_PMD;
6545 return unit_test_suite_runner(&cryptodev_openssl_testsuite);
6549 test_cryptodev_aesni_gcm(void)
6551 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;
6553 return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
6557 test_cryptodev_null(void)
6559 gbl_cryptodev_type = RTE_CRYPTODEV_NULL_PMD;
6561 return unit_test_suite_runner(&cryptodev_null_testsuite);
6565 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
6567 gbl_cryptodev_type = RTE_CRYPTODEV_SNOW3G_PMD;
6569 return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
6573 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
6575 gbl_cryptodev_type = RTE_CRYPTODEV_KASUMI_PMD;
6577 return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
6581 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
6583 gbl_cryptodev_type = RTE_CRYPTODEV_ZUC_PMD;
6585 return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
6588 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
6589 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
6590 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
6591 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
6592 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
6593 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
6594 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
6595 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);