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_aes.h"
47 #include "test_cryptodev_kasumi_test_vectors.h"
48 #include "test_cryptodev_kasumi_hash_test_vectors.h"
49 #include "test_cryptodev_snow3g_test_vectors.h"
50 #include "test_cryptodev_snow3g_hash_test_vectors.h"
51 #include "test_cryptodev_gcm_test_vectors.h"
52 #include "test_cryptodev_hmac_test_vectors.h"
54 static enum rte_cryptodev_type gbl_cryptodev_type;
56 struct crypto_testsuite_params {
57 struct rte_mempool *mbuf_pool;
58 struct rte_mempool *op_mpool;
59 struct rte_cryptodev_config conf;
60 struct rte_cryptodev_qp_conf qp_conf;
62 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
63 uint8_t valid_dev_count;
66 struct crypto_unittest_params {
67 struct rte_crypto_sym_xform cipher_xform;
68 struct rte_crypto_sym_xform auth_xform;
70 struct rte_cryptodev_sym_session *sess;
72 struct rte_crypto_op *op;
74 struct rte_mbuf *obuf, *ibuf;
79 #define ALIGN_POW2_ROUNDUP(num, align) \
80 (((num) + (align) - 1) & ~((align) - 1))
83 * Forward declarations.
86 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
87 struct crypto_unittest_params *ut_params);
90 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
91 struct crypto_unittest_params *ut_params,
92 struct crypto_testsuite_params *ts_param);
94 static struct rte_mbuf *
95 setup_test_string(struct rte_mempool *mpool,
96 const char *string, size_t len, uint8_t blocksize)
98 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
99 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
101 memset(m->buf_addr, 0, m->buf_len);
103 char *dst = rte_pktmbuf_append(m, t_len);
110 rte_memcpy(dst, string, t_len);
112 memset(dst, 0, t_len);
118 /* Get number of bytes in X bits (rounding up) */
120 ceil_byte_length(uint32_t num_bits)
123 return ((num_bits >> 3) + 1);
125 return (num_bits >> 3);
128 static struct rte_crypto_op *
129 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
131 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
132 printf("Error sending packet for encryption");
138 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
144 static struct crypto_testsuite_params testsuite_params = { NULL };
145 static struct crypto_unittest_params unittest_params;
148 testsuite_setup(void)
150 struct crypto_testsuite_params *ts_params = &testsuite_params;
151 struct rte_cryptodev_info info;
152 unsigned i, nb_devs, dev_id;
156 memset(ts_params, 0, sizeof(*ts_params));
158 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
159 if (ts_params->mbuf_pool == NULL) {
160 /* Not already created so create */
161 ts_params->mbuf_pool = rte_pktmbuf_pool_create(
163 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
165 if (ts_params->mbuf_pool == NULL) {
166 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
171 ts_params->op_mpool = rte_crypto_op_pool_create(
172 "MBUF_CRYPTO_SYM_OP_POOL",
173 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
174 NUM_MBUFS, MBUF_CACHE_SIZE,
176 sizeof(struct rte_crypto_sym_xform),
178 if (ts_params->op_mpool == NULL) {
179 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
183 /* Create 2 AESNI MB devices if required */
184 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {
185 nb_devs = rte_cryptodev_count_devtype(
186 RTE_CRYPTODEV_AESNI_MB_PMD);
188 for (i = nb_devs; i < 2; i++) {
189 ret = rte_eal_vdev_init(
190 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
192 TEST_ASSERT(ret == 0,
193 "Failed to create instance %u of"
195 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
200 /* Create 2 AESNI GCM devices if required */
201 if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_GCM_PMD) {
202 nb_devs = rte_cryptodev_count_devtype(
203 RTE_CRYPTODEV_AESNI_GCM_PMD);
205 for (i = nb_devs; i < 2; i++) {
206 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
207 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
208 "Failed to create instance %u of"
210 i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
215 /* Create 2 Snow3G devices if required */
216 if (gbl_cryptodev_type == RTE_CRYPTODEV_SNOW3G_PMD) {
217 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
219 for (i = nb_devs; i < 2; i++) {
220 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
221 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
222 "Failed to create instance %u of"
224 i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
229 /* Create 2 KASUMI devices if required */
230 if (gbl_cryptodev_type == RTE_CRYPTODEV_KASUMI_PMD) {
231 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_KASUMI_PMD);
233 for (i = nb_devs; i < 2; i++) {
234 TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
235 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
236 "Failed to create instance %u of"
238 i, RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
243 /* Create 2 NULL devices if required */
244 if (gbl_cryptodev_type == RTE_CRYPTODEV_NULL_PMD) {
245 nb_devs = rte_cryptodev_count_devtype(
246 RTE_CRYPTODEV_NULL_PMD);
248 for (i = nb_devs; i < 2; i++) {
249 int dev_id = rte_eal_vdev_init(
250 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
252 TEST_ASSERT(dev_id >= 0,
253 "Failed to create instance %u of"
255 i, RTE_STR(CRYPTODEV_NAME_NULL_PMD));
260 nb_devs = rte_cryptodev_count();
262 RTE_LOG(ERR, USER1, "No crypto devices found?");
266 /* Create list of valid crypto devs */
267 for (i = 0; i < nb_devs; i++) {
268 rte_cryptodev_info_get(i, &info);
269 if (info.dev_type == gbl_cryptodev_type)
270 ts_params->valid_devs[ts_params->valid_dev_count++] = i;
273 if (ts_params->valid_dev_count < 1)
276 /* Set up all the qps on the first of the valid devices found */
277 for (i = 0; i < 1; i++) {
278 dev_id = ts_params->valid_devs[i];
280 rte_cryptodev_info_get(dev_id, &info);
283 * Since we can't free and re-allocate queue memory always set
284 * the queues on this device up to max size first so enough
285 * memory is allocated for any later re-configures needed by
289 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
290 ts_params->conf.socket_id = SOCKET_ID_ANY;
291 ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
293 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
295 "Failed to configure cryptodev %u with %u qps",
296 dev_id, ts_params->conf.nb_queue_pairs);
298 ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
300 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
301 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
302 dev_id, qp_id, &ts_params->qp_conf,
303 rte_cryptodev_socket_id(dev_id)),
304 "Failed to setup queue pair %u on "
314 testsuite_teardown(void)
316 struct crypto_testsuite_params *ts_params = &testsuite_params;
318 if (ts_params->mbuf_pool != NULL) {
319 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
320 rte_mempool_avail_count(ts_params->mbuf_pool));
323 if (ts_params->op_mpool != NULL) {
324 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
325 rte_mempool_avail_count(ts_params->op_mpool));
333 struct crypto_testsuite_params *ts_params = &testsuite_params;
334 struct crypto_unittest_params *ut_params = &unittest_params;
338 /* Clear unit test parameters before running test */
339 memset(ut_params, 0, sizeof(*ut_params));
341 /* Reconfigure device to default parameters */
342 ts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;
343 ts_params->conf.socket_id = SOCKET_ID_ANY;
344 ts_params->conf.session_mp.nb_objs =
345 (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) ?
346 DEFAULT_NUM_OPS_INFLIGHT :
347 DEFAULT_NUM_OPS_INFLIGHT;
349 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
351 "Failed to configure cryptodev %u",
352 ts_params->valid_devs[0]);
355 * Now reconfigure queues to size we actually want to use in this
358 ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
360 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
361 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
362 ts_params->valid_devs[0], qp_id,
364 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
365 "Failed to setup queue pair %u on cryptodev %u",
366 qp_id, ts_params->valid_devs[0]);
370 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
372 /* Start the device */
373 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
374 "Failed to start cryptodev %u",
375 ts_params->valid_devs[0]);
383 struct crypto_testsuite_params *ts_params = &testsuite_params;
384 struct crypto_unittest_params *ut_params = &unittest_params;
385 struct rte_cryptodev_stats stats;
387 /* free crypto session structure */
388 if (ut_params->sess) {
389 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
391 ut_params->sess = NULL;
394 /* free crypto operation structure */
396 rte_crypto_op_free(ut_params->op);
399 * free mbuf - both obuf and ibuf are usually the same,
400 * so check if they point at the same address is necessary,
401 * to avoid freeing the mbuf twice.
403 if (ut_params->obuf) {
404 rte_pktmbuf_free(ut_params->obuf);
405 if (ut_params->ibuf == ut_params->obuf)
409 if (ut_params->ibuf) {
410 rte_pktmbuf_free(ut_params->ibuf);
414 if (ts_params->mbuf_pool != NULL)
415 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
416 rte_mempool_avail_count(ts_params->mbuf_pool));
418 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
420 /* Stop the device */
421 rte_cryptodev_stop(ts_params->valid_devs[0]);
425 test_device_configure_invalid_dev_id(void)
427 struct crypto_testsuite_params *ts_params = &testsuite_params;
428 uint16_t dev_id, num_devs = 0;
430 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
431 "Need at least %d devices for test", 1);
433 /* valid dev_id values */
434 dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
436 /* Stop the device in case it's started so it can be configured */
437 rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
439 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
440 "Failed test for rte_cryptodev_configure: "
441 "invalid dev_num %u", dev_id);
443 /* invalid dev_id values */
446 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
447 "Failed test for rte_cryptodev_configure: "
448 "invalid dev_num %u", dev_id);
452 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
453 "Failed test for rte_cryptodev_configure:"
454 "invalid dev_num %u", dev_id);
460 test_device_configure_invalid_queue_pair_ids(void)
462 struct crypto_testsuite_params *ts_params = &testsuite_params;
464 /* Stop the device in case it's started so it can be configured */
465 rte_cryptodev_stop(ts_params->valid_devs[0]);
467 /* valid - one queue pairs */
468 ts_params->conf.nb_queue_pairs = 1;
470 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
472 "Failed to configure cryptodev: dev_id %u, qp_id %u",
473 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
476 /* valid - max value queue pairs */
477 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
479 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
481 "Failed to configure cryptodev: dev_id %u, qp_id %u",
482 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
485 /* invalid - zero queue pairs */
486 ts_params->conf.nb_queue_pairs = 0;
488 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
490 "Failed test for rte_cryptodev_configure, dev_id %u,"
492 ts_params->valid_devs[0],
493 ts_params->conf.nb_queue_pairs);
496 /* invalid - max value supported by field queue pairs */
497 ts_params->conf.nb_queue_pairs = UINT16_MAX;
499 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
501 "Failed test for rte_cryptodev_configure, dev_id %u,"
503 ts_params->valid_devs[0],
504 ts_params->conf.nb_queue_pairs);
507 /* invalid - max value + 1 queue pairs */
508 ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
510 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
512 "Failed test for rte_cryptodev_configure, dev_id %u,"
514 ts_params->valid_devs[0],
515 ts_params->conf.nb_queue_pairs);
521 test_queue_pair_descriptor_setup(void)
523 struct crypto_testsuite_params *ts_params = &testsuite_params;
524 struct rte_cryptodev_info dev_info;
525 struct rte_cryptodev_qp_conf qp_conf = {
526 .nb_descriptors = MAX_NUM_OPS_INFLIGHT
531 /* Stop the device in case it's started so it can be configured */
532 rte_cryptodev_stop(ts_params->valid_devs[0]);
535 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
537 ts_params->conf.session_mp.nb_objs = dev_info.sym.max_nb_sessions;
539 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
540 &ts_params->conf), "Failed to configure cryptodev %u",
541 ts_params->valid_devs[0]);
545 * Test various ring sizes on this device. memzones can't be
546 * freed so are re-used if ring is released and re-created.
548 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
550 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
551 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
552 ts_params->valid_devs[0], qp_id, &qp_conf,
553 rte_cryptodev_socket_id(
554 ts_params->valid_devs[0])),
556 "rte_cryptodev_queue_pair_setup: num_inflights "
557 "%u on qp %u on cryptodev %u",
558 qp_conf.nb_descriptors, qp_id,
559 ts_params->valid_devs[0]);
562 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
564 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
565 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
566 ts_params->valid_devs[0], qp_id, &qp_conf,
567 rte_cryptodev_socket_id(
568 ts_params->valid_devs[0])),
570 " rte_cryptodev_queue_pair_setup: num_inflights"
571 " %u on qp %u on cryptodev %u",
572 qp_conf.nb_descriptors, qp_id,
573 ts_params->valid_devs[0]);
576 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
578 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
579 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
580 ts_params->valid_devs[0], qp_id, &qp_conf,
581 rte_cryptodev_socket_id(
582 ts_params->valid_devs[0])),
584 "rte_cryptodev_queue_pair_setup: num_inflights"
585 " %u on qp %u on cryptodev %u",
586 qp_conf.nb_descriptors, qp_id,
587 ts_params->valid_devs[0]);
590 /* invalid number of descriptors - max supported + 2 */
591 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
593 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
594 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
595 ts_params->valid_devs[0], qp_id, &qp_conf,
596 rte_cryptodev_socket_id(
597 ts_params->valid_devs[0])),
598 "Unexpectedly passed test for "
599 "rte_cryptodev_queue_pair_setup:"
600 "num_inflights %u on qp %u on cryptodev %u",
601 qp_conf.nb_descriptors, qp_id,
602 ts_params->valid_devs[0]);
605 /* invalid number of descriptors - max value of parameter */
606 qp_conf.nb_descriptors = UINT32_MAX-1;
608 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
609 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
610 ts_params->valid_devs[0], qp_id, &qp_conf,
611 rte_cryptodev_socket_id(
612 ts_params->valid_devs[0])),
613 "Unexpectedly passed test for "
614 "rte_cryptodev_queue_pair_setup:"
615 "num_inflights %u on qp %u on cryptodev %u",
616 qp_conf.nb_descriptors, qp_id,
617 ts_params->valid_devs[0]);
620 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
622 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
623 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
624 ts_params->valid_devs[0], qp_id, &qp_conf,
625 rte_cryptodev_socket_id(
626 ts_params->valid_devs[0])),
628 " rte_cryptodev_queue_pair_setup:"
629 "num_inflights %u on qp %u on cryptodev %u",
630 qp_conf.nb_descriptors, qp_id,
631 ts_params->valid_devs[0]);
634 /* invalid number of descriptors - max supported + 1 */
635 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
637 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
638 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
639 ts_params->valid_devs[0], qp_id, &qp_conf,
640 rte_cryptodev_socket_id(
641 ts_params->valid_devs[0])),
642 "Unexpectedly passed test for "
643 "rte_cryptodev_queue_pair_setup:"
644 "num_inflights %u on qp %u on cryptodev %u",
645 qp_conf.nb_descriptors, qp_id,
646 ts_params->valid_devs[0]);
649 /* test invalid queue pair id */
650 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
652 qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; /*invalid */
654 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
655 ts_params->valid_devs[0],
657 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
658 "Failed test for rte_cryptodev_queue_pair_setup:"
659 "invalid qp %u on cryptodev %u",
660 qp_id, ts_params->valid_devs[0]);
662 qp_id = 0xffff; /*invalid*/
664 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
665 ts_params->valid_devs[0],
667 rte_cryptodev_socket_id(ts_params->valid_devs[0])),
668 "Failed test for rte_cryptodev_queue_pair_setup:"
669 "invalid qp %u on cryptodev %u",
670 qp_id, ts_params->valid_devs[0]);
675 /* ***** Plaintext data for tests ***** */
677 const char catch_22_quote_1[] =
678 "There was only one catch and that was Catch-22, which "
679 "specified that a concern for one's safety in the face of "
680 "dangers that were real and immediate was the process of a "
681 "rational mind. Orr was crazy and could be grounded. All he "
682 "had to do was ask; and as soon as he did, he would no longer "
683 "be crazy and would have to fly more missions. Orr would be "
684 "crazy to fly more missions and sane if he didn't, but if he "
685 "was sane he had to fly them. If he flew them he was crazy "
686 "and didn't have to; but if he didn't want to he was sane and "
687 "had to. Yossarian was moved very deeply by the absolute "
688 "simplicity of this clause of Catch-22 and let out a "
689 "respectful whistle. \"That's some catch, that Catch-22\", he "
690 "observed. \"It's the best there is,\" Doc Daneeka agreed.";
692 const char catch_22_quote[] =
693 "What a lousy earth! He wondered how many people were "
694 "destitute that same night even in his own prosperous country, "
695 "how many homes were shanties, how many husbands were drunk "
696 "and wives socked, and how many children were bullied, abused, "
697 "or abandoned. How many families hungered for food they could "
698 "not afford to buy? How many hearts were broken? How many "
699 "suicides would take place that same night, how many people "
700 "would go insane? How many cockroaches and landlords would "
701 "triumph? How many winners were losers, successes failures, "
702 "and rich men poor men? How many wise guys were stupid? How "
703 "many happy endings were unhappy endings? How many honest men "
704 "were liars, brave men cowards, loyal men traitors, how many "
705 "sainted men were corrupt, how many people in positions of "
706 "trust had sold their souls to bodyguards, how many had never "
707 "had souls? How many straight-and-narrow paths were crooked "
708 "paths? How many best families were worst families and how "
709 "many good people were bad people? When you added them all up "
710 "and then subtracted, you might be left with only the children, "
711 "and perhaps with Albert Einstein and an old violinist or "
712 "sculptor somewhere.";
714 #define QUOTE_480_BYTES (480)
715 #define QUOTE_512_BYTES (512)
716 #define QUOTE_768_BYTES (768)
717 #define QUOTE_1024_BYTES (1024)
721 /* ***** SHA1 Hash Tests ***** */
723 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
725 static uint8_t hmac_sha1_key[] = {
726 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
727 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
728 0xDE, 0xF4, 0xDE, 0xAD };
730 /* ***** SHA224 Hash Tests ***** */
732 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
735 /* ***** AES-CBC Cipher Tests ***** */
737 #define CIPHER_KEY_LENGTH_AES_CBC (16)
738 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
740 static uint8_t aes_cbc_key[] = {
741 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
742 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
744 static uint8_t aes_cbc_iv[] = {
745 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
746 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
749 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
751 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
752 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
753 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
754 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
755 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
756 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
757 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
758 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
759 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
760 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
761 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
762 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
763 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
764 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
765 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
766 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
767 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
768 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
769 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
770 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
771 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
772 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
773 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
774 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
775 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
776 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
777 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
778 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
779 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
780 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
781 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
782 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
783 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
784 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
785 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
786 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
787 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
788 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
789 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
790 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
791 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
792 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
793 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
794 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
795 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
796 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
797 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
798 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
799 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
800 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
801 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
802 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
803 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
804 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
805 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
806 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
807 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
808 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
809 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
810 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
811 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
812 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
813 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
814 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
815 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
818 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
819 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
820 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
821 0x18, 0x8c, 0x1d, 0x32
826 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
828 struct crypto_testsuite_params *ts_params = &testsuite_params;
829 struct crypto_unittest_params *ut_params = &unittest_params;
831 /* Generate test mbuf data and space for digest */
832 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
833 catch_22_quote, QUOTE_512_BYTES, 0);
835 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
836 DIGEST_BYTE_LENGTH_SHA1);
837 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
839 /* Setup Cipher Parameters */
840 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
841 ut_params->cipher_xform.next = &ut_params->auth_xform;
843 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
844 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
845 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
846 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
848 /* Setup HMAC Parameters */
849 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
851 ut_params->auth_xform.next = NULL;
853 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
854 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
855 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
856 ut_params->auth_xform.auth.key.data = hmac_sha1_key;
857 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
859 /* Create crypto session*/
860 ut_params->sess = rte_cryptodev_sym_session_create(
861 ts_params->valid_devs[0],
862 &ut_params->cipher_xform);
863 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
865 /* Generate crypto op data structure */
866 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
867 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
868 TEST_ASSERT_NOT_NULL(ut_params->op,
869 "Failed to allocate symmetric crypto operation struct");
871 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
873 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
875 /* set crypto operation source mbuf */
876 sym_op->m_src = ut_params->ibuf;
878 /* Set crypto operation authentication parameters */
879 sym_op->auth.digest.data = ut_params->digest;
880 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
881 ut_params->ibuf, QUOTE_512_BYTES);
882 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA1;
884 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
885 sym_op->auth.data.length = QUOTE_512_BYTES;
887 /* Set crypto operation cipher parameters */
888 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
889 CIPHER_IV_LENGTH_AES_CBC);
890 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
891 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
893 rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
894 CIPHER_IV_LENGTH_AES_CBC);
896 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
897 sym_op->cipher.data.length = QUOTE_512_BYTES;
899 /* Process crypto operation */
900 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
901 ut_params->op), "failed to process sym crypto op");
903 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
904 "crypto op processing failed");
907 uint8_t *ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
908 uint8_t *, CIPHER_IV_LENGTH_AES_CBC);
910 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
911 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
913 "ciphertext data not as expected");
915 uint8_t *digest = ciphertext + QUOTE_512_BYTES;
917 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
918 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
919 gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
920 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
921 DIGEST_BYTE_LENGTH_SHA1,
922 "Generated digest data not as expected");
927 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
929 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
931 static uint8_t hmac_sha512_key[] = {
932 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
933 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
934 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
935 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
936 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
937 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
938 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
939 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
941 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
942 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
943 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
944 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
945 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
946 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
947 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
948 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
949 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
954 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
955 struct crypto_unittest_params *ut_params);
958 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
959 struct crypto_unittest_params *ut_params,
960 struct crypto_testsuite_params *ts_params);
964 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
965 struct crypto_unittest_params *ut_params)
968 /* Setup Cipher Parameters */
969 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
970 ut_params->cipher_xform.next = NULL;
972 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
973 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
974 ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
975 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
977 /* Setup HMAC Parameters */
978 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
979 ut_params->auth_xform.next = &ut_params->cipher_xform;
981 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
982 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
983 ut_params->auth_xform.auth.key.data = hmac_sha512_key;
984 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
985 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
992 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
993 struct crypto_unittest_params *ut_params,
994 struct crypto_testsuite_params *ts_params)
996 /* Generate test mbuf data and digest */
997 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
999 catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
1000 QUOTE_512_BYTES, 0);
1002 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1003 DIGEST_BYTE_LENGTH_SHA512);
1004 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
1006 rte_memcpy(ut_params->digest,
1007 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
1008 DIGEST_BYTE_LENGTH_SHA512);
1010 /* Generate Crypto op data structure */
1011 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1012 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1013 TEST_ASSERT_NOT_NULL(ut_params->op,
1014 "Failed to allocate symmetric crypto operation struct");
1016 rte_crypto_op_attach_sym_session(ut_params->op, sess);
1018 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1020 /* set crypto operation source mbuf */
1021 sym_op->m_src = ut_params->ibuf;
1023 sym_op->auth.digest.data = ut_params->digest;
1024 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1025 ut_params->ibuf, QUOTE_512_BYTES);
1026 sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA512;
1028 sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1029 sym_op->auth.data.length = QUOTE_512_BYTES;
1031 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1032 ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
1033 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys_offset(
1034 ut_params->ibuf, 0);
1035 sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1037 rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
1038 CIPHER_IV_LENGTH_AES_CBC);
1040 sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1041 sym_op->cipher.data.length = QUOTE_512_BYTES;
1043 /* Process crypto operation */
1044 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
1045 ut_params->op), "failed to process sym crypto op");
1047 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1048 "crypto op processing failed");
1050 ut_params->obuf = ut_params->op->sym->m_src;
1053 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1054 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
1055 CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
1057 "Plaintext data not as expected");
1060 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
1061 "Digest verification failed");
1063 return TEST_SUCCESS;
1067 test_AES_mb_all(void)
1069 struct crypto_testsuite_params *ts_params = &testsuite_params;
1072 status = test_AES_all_tests(ts_params->mbuf_pool,
1073 ts_params->op_mpool, ts_params->valid_devs[0],
1074 RTE_CRYPTODEV_AESNI_MB_PMD);
1076 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1078 return TEST_SUCCESS;
1082 test_AES_qat_all(void)
1084 struct crypto_testsuite_params *ts_params = &testsuite_params;
1087 status = test_AES_all_tests(ts_params->mbuf_pool,
1088 ts_params->op_mpool, ts_params->valid_devs[0],
1089 RTE_CRYPTODEV_QAT_SYM_PMD);
1091 TEST_ASSERT_EQUAL(status, 0, "Test failed");
1093 return TEST_SUCCESS;
1096 /* ***** Snow3G Tests ***** */
1098 create_snow3g_kasumi_hash_session(uint8_t dev_id,
1099 const uint8_t *key, const uint8_t key_len,
1100 const uint8_t aad_len, const uint8_t auth_len,
1101 enum rte_crypto_auth_operation op,
1102 enum rte_crypto_auth_algorithm algo)
1104 uint8_t hash_key[key_len];
1106 struct crypto_unittest_params *ut_params = &unittest_params;
1108 memcpy(hash_key, key, key_len);
1110 TEST_HEXDUMP(stdout, "key:", key, key_len);
1112 /* Setup Authentication Parameters */
1113 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1114 ut_params->auth_xform.next = NULL;
1116 ut_params->auth_xform.auth.op = op;
1117 ut_params->auth_xform.auth.algo = algo;
1118 ut_params->auth_xform.auth.key.length = key_len;
1119 ut_params->auth_xform.auth.key.data = hash_key;
1120 ut_params->auth_xform.auth.digest_length = auth_len;
1121 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1122 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1123 &ut_params->auth_xform);
1124 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1129 create_snow3g_kasumi_cipher_session(uint8_t dev_id,
1130 enum rte_crypto_cipher_operation op,
1131 enum rte_crypto_cipher_algorithm algo,
1132 const uint8_t *key, const uint8_t key_len)
1134 uint8_t cipher_key[key_len];
1136 struct crypto_unittest_params *ut_params = &unittest_params;
1138 memcpy(cipher_key, key, key_len);
1140 /* Setup Cipher Parameters */
1141 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1142 ut_params->cipher_xform.next = NULL;
1144 ut_params->cipher_xform.cipher.algo = algo;
1145 ut_params->cipher_xform.cipher.op = op;
1146 ut_params->cipher_xform.cipher.key.data = cipher_key;
1147 ut_params->cipher_xform.cipher.key.length = key_len;
1149 TEST_HEXDUMP(stdout, "key:", key, key_len);
1151 /* Create Crypto session */
1152 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1155 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1160 create_snow3g_kasumi_cipher_operation(const uint8_t *iv, const unsigned iv_len,
1161 const unsigned cipher_len,
1162 const unsigned cipher_offset,
1163 enum rte_crypto_cipher_algorithm algo)
1165 struct crypto_testsuite_params *ts_params = &testsuite_params;
1166 struct crypto_unittest_params *ut_params = &unittest_params;
1167 unsigned iv_pad_len = 0;
1169 /* Generate Crypto op data structure */
1170 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1171 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1172 TEST_ASSERT_NOT_NULL(ut_params->op,
1173 "Failed to allocate pktmbuf offload");
1175 /* Set crypto operation data parameters */
1176 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1178 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1180 /* set crypto operation source mbuf */
1181 sym_op->m_src = ut_params->ibuf;
1184 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1185 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1187 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1189 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf
1192 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1194 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1195 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1196 sym_op->cipher.iv.length = iv_pad_len;
1198 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1199 sym_op->cipher.data.length = cipher_len;
1200 sym_op->cipher.data.offset = cipher_offset;
1205 create_snow3g_kasumi_cipher_operation_oop(const uint8_t *iv, const uint8_t iv_len,
1206 const unsigned cipher_len,
1207 const unsigned cipher_offset,
1208 enum rte_crypto_cipher_algorithm algo)
1210 struct crypto_testsuite_params *ts_params = &testsuite_params;
1211 struct crypto_unittest_params *ut_params = &unittest_params;
1212 unsigned iv_pad_len = 0;
1214 /* Generate Crypto op data structure */
1215 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1216 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1217 TEST_ASSERT_NOT_NULL(ut_params->op,
1218 "Failed to allocate pktmbuf offload");
1220 /* Set crypto operation data parameters */
1221 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1223 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1225 /* set crypto operation source mbuf */
1226 sym_op->m_src = ut_params->ibuf;
1227 sym_op->m_dst = ut_params->obuf;
1230 if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1231 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1233 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1234 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
1237 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1239 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1240 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1241 sym_op->cipher.iv.length = iv_pad_len;
1243 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1244 sym_op->cipher.data.length = cipher_len;
1245 sym_op->cipher.data.offset = cipher_offset;
1250 create_snow3g_kasumi_cipher_auth_session(uint8_t dev_id,
1251 enum rte_crypto_cipher_operation cipher_op,
1252 enum rte_crypto_auth_operation auth_op,
1253 enum rte_crypto_auth_algorithm auth_algo,
1254 enum rte_crypto_cipher_algorithm cipher_algo,
1255 const uint8_t *key, const uint8_t key_len,
1256 const uint8_t aad_len, const uint8_t auth_len)
1259 uint8_t cipher_auth_key[key_len];
1261 struct crypto_unittest_params *ut_params = &unittest_params;
1263 memcpy(cipher_auth_key, key, key_len);
1265 /* Setup Authentication Parameters */
1266 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1267 ut_params->auth_xform.next = NULL;
1269 ut_params->auth_xform.auth.op = auth_op;
1270 ut_params->auth_xform.auth.algo = auth_algo;
1271 ut_params->auth_xform.auth.key.length = key_len;
1272 /* Hash key = cipher key */
1273 ut_params->auth_xform.auth.key.data = cipher_auth_key;
1274 ut_params->auth_xform.auth.digest_length = auth_len;
1275 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1277 /* Setup Cipher Parameters */
1278 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1279 ut_params->cipher_xform.next = &ut_params->auth_xform;
1281 ut_params->cipher_xform.cipher.algo = cipher_algo;
1282 ut_params->cipher_xform.cipher.op = cipher_op;
1283 ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
1284 ut_params->cipher_xform.cipher.key.length = key_len;
1286 TEST_HEXDUMP(stdout, "key:", key, key_len);
1288 /* Create Crypto session*/
1289 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1290 &ut_params->cipher_xform);
1292 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1297 create_snow3g_kasumi_auth_cipher_session(uint8_t dev_id,
1298 enum rte_crypto_cipher_operation cipher_op,
1299 enum rte_crypto_auth_operation auth_op,
1300 enum rte_crypto_auth_algorithm auth_algo,
1301 enum rte_crypto_cipher_algorithm cipher_algo,
1302 const uint8_t *key, const uint8_t key_len,
1303 const uint8_t aad_len, const uint8_t auth_len)
1305 uint8_t auth_cipher_key[key_len];
1307 struct crypto_unittest_params *ut_params = &unittest_params;
1309 memcpy(auth_cipher_key, key, key_len);
1311 /* Setup Authentication Parameters */
1312 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1313 ut_params->auth_xform.auth.op = auth_op;
1314 ut_params->auth_xform.next = &ut_params->cipher_xform;
1315 ut_params->auth_xform.auth.algo = auth_algo;
1316 ut_params->auth_xform.auth.key.length = key_len;
1317 ut_params->auth_xform.auth.key.data = auth_cipher_key;
1318 ut_params->auth_xform.auth.digest_length = auth_len;
1319 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
1321 /* Setup Cipher Parameters */
1322 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1323 ut_params->cipher_xform.next = NULL;
1324 ut_params->cipher_xform.cipher.algo = cipher_algo;
1325 ut_params->cipher_xform.cipher.op = cipher_op;
1326 ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
1327 ut_params->cipher_xform.cipher.key.length = key_len;
1329 TEST_HEXDUMP(stdout, "key:", key, key_len);
1331 /* Create Crypto session*/
1332 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
1333 &ut_params->auth_xform);
1335 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1341 create_snow3g_kasumi_hash_operation(const uint8_t *auth_tag,
1342 const unsigned auth_tag_len,
1343 const uint8_t *aad, const unsigned aad_len,
1344 unsigned data_pad_len,
1345 enum rte_crypto_auth_operation op,
1346 enum rte_crypto_auth_algorithm algo,
1347 const unsigned auth_len, const unsigned auth_offset)
1349 struct crypto_testsuite_params *ts_params = &testsuite_params;
1351 struct crypto_unittest_params *ut_params = &unittest_params;
1353 unsigned aad_buffer_len;
1355 /* Generate Crypto op data structure */
1356 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1357 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1358 TEST_ASSERT_NOT_NULL(ut_params->op,
1359 "Failed to allocate pktmbuf offload");
1361 /* Set crypto operation data parameters */
1362 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1364 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1366 /* set crypto operation source mbuf */
1367 sym_op->m_src = ut_params->ibuf;
1371 * Always allocate the aad up to the block size.
1372 * The cryptodev API calls out -
1373 * - the array must be big enough to hold the AAD, plus any
1374 * space to round this up to the nearest multiple of the
1375 * block size (8 bytes for KASUMI and 16 bytes for SNOW3G).
1377 if (algo == RTE_CRYPTO_AUTH_KASUMI_F9)
1378 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
1380 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
1381 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
1382 ut_params->ibuf, aad_buffer_len);
1383 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
1384 "no room to prepend aad");
1385 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
1387 sym_op->auth.aad.length = aad_len;
1389 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
1390 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
1392 TEST_HEXDUMP(stdout, "aad:",
1393 sym_op->auth.aad.data, aad_len);
1396 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
1397 ut_params->ibuf, auth_tag_len);
1399 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
1400 "no room to append auth tag");
1401 ut_params->digest = sym_op->auth.digest.data;
1402 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1403 ut_params->ibuf, data_pad_len + aad_len);
1404 sym_op->auth.digest.length = auth_tag_len;
1405 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
1406 memset(sym_op->auth.digest.data, 0, auth_tag_len);
1408 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
1410 TEST_HEXDUMP(stdout, "digest:",
1411 sym_op->auth.digest.data,
1412 sym_op->auth.digest.length);
1414 sym_op->auth.data.length = auth_len;
1415 sym_op->auth.data.offset = auth_offset;
1421 create_snow3g_kasumi_cipher_hash_operation(const uint8_t *auth_tag,
1422 const unsigned auth_tag_len,
1423 const uint8_t *aad, const uint8_t aad_len,
1424 unsigned data_pad_len,
1425 enum rte_crypto_auth_operation op,
1426 enum rte_crypto_auth_algorithm auth_algo,
1427 enum rte_crypto_cipher_algorithm cipher_algo,
1428 const uint8_t *iv, const uint8_t iv_len,
1429 const unsigned cipher_len, const unsigned cipher_offset,
1430 const unsigned auth_len, const unsigned auth_offset)
1432 struct crypto_testsuite_params *ts_params = &testsuite_params;
1433 struct crypto_unittest_params *ut_params = &unittest_params;
1435 unsigned iv_pad_len = 0;
1436 unsigned aad_buffer_len;
1438 /* Generate Crypto op data structure */
1439 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1440 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1441 TEST_ASSERT_NOT_NULL(ut_params->op,
1442 "Failed to allocate pktmbuf offload");
1443 /* Set crypto operation data parameters */
1444 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1446 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1448 /* set crypto operation source mbuf */
1449 sym_op->m_src = ut_params->ibuf;
1453 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1454 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1456 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1458 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1459 ut_params->ibuf, iv_pad_len);
1460 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1462 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1463 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1464 sym_op->cipher.iv.length = iv_pad_len;
1466 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1468 sym_op->cipher.data.length = cipher_len;
1469 sym_op->cipher.data.offset = cipher_offset;
1473 * Always allocate the aad up to the block size.
1474 * The cryptodev API calls out -
1475 * - the array must be big enough to hold the AAD, plus any
1476 * space to round this up to the nearest multiple of the
1477 * block size (8 bytes for KASUMI and 16 bytes for SNOW3G).
1479 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
1480 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
1482 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
1484 sym_op->auth.aad.data =
1485 (uint8_t *)rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *);
1486 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
1487 "no room to prepend aad");
1488 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
1490 sym_op->auth.aad.length = aad_len;
1492 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
1493 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
1495 TEST_HEXDUMP(stdout, "aad:",
1496 sym_op->auth.aad.data, aad_len);
1499 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
1500 ut_params->ibuf, auth_tag_len);
1502 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
1503 "no room to append auth tag");
1504 ut_params->digest = sym_op->auth.digest.data;
1505 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1506 ut_params->ibuf, data_pad_len + aad_len);
1507 sym_op->auth.digest.length = auth_tag_len;
1508 if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
1509 memset(sym_op->auth.digest.data, 0, auth_tag_len);
1511 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
1513 TEST_HEXDUMP(stdout, "digest:",
1514 sym_op->auth.digest.data,
1515 sym_op->auth.digest.length);
1517 sym_op->auth.data.length = auth_len;
1518 sym_op->auth.data.offset = auth_offset;
1524 create_snow3g_kasumi_auth_cipher_operation(const unsigned auth_tag_len,
1525 const uint8_t *iv, const uint8_t iv_len,
1526 const uint8_t *aad, const uint8_t aad_len,
1527 unsigned data_pad_len,
1528 const unsigned cipher_len, const unsigned cipher_offset,
1529 const unsigned auth_len, const unsigned auth_offset,
1530 enum rte_crypto_auth_algorithm auth_algo,
1531 enum rte_crypto_cipher_algorithm cipher_algo)
1533 struct crypto_testsuite_params *ts_params = &testsuite_params;
1534 struct crypto_unittest_params *ut_params = &unittest_params;
1536 unsigned iv_pad_len = 0;
1537 unsigned aad_buffer_len = 0;
1539 /* Generate Crypto op data structure */
1540 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
1541 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1542 TEST_ASSERT_NOT_NULL(ut_params->op,
1543 "Failed to allocate pktmbuf offload");
1545 /* Set crypto operation data parameters */
1546 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
1548 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
1550 /* set crypto operation source mbuf */
1551 sym_op->m_src = ut_params->ibuf;
1554 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
1555 ut_params->ibuf, auth_tag_len);
1557 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
1558 "no room to append auth tag");
1560 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
1561 ut_params->ibuf, data_pad_len);
1562 sym_op->auth.digest.length = auth_tag_len;
1564 memset(sym_op->auth.digest.data, 0, auth_tag_len);
1566 TEST_HEXDUMP(stdout, "digest:",
1567 sym_op->auth.digest.data,
1568 sym_op->auth.digest.length);
1571 if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
1572 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
1574 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
1576 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
1577 ut_params->ibuf, iv_pad_len);
1578 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
1580 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
1581 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
1582 sym_op->cipher.iv.length = iv_pad_len;
1584 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
1588 * Always allocate the aad up to the block size.
1589 * The cryptodev API calls out -
1590 * - the array must be big enough to hold the AAD, plus any
1591 * space to round this up to the nearest multiple of the
1592 * block size (8 bytes for KASUMI 16 bytes).
1594 if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
1595 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
1597 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
1599 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
1600 ut_params->ibuf, aad_buffer_len);
1601 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
1602 "no room to prepend aad");
1603 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
1605 sym_op->auth.aad.length = aad_len;
1607 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
1608 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
1610 TEST_HEXDUMP(stdout, "aad:",
1611 sym_op->auth.aad.data, aad_len);
1613 sym_op->cipher.data.length = cipher_len;
1614 sym_op->cipher.data.offset = auth_offset + cipher_offset;
1616 sym_op->auth.data.length = auth_len;
1617 sym_op->auth.data.offset = auth_offset + cipher_offset;
1623 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
1625 struct crypto_testsuite_params *ts_params = &testsuite_params;
1626 struct crypto_unittest_params *ut_params = &unittest_params;
1629 unsigned plaintext_pad_len;
1630 unsigned plaintext_len;
1633 /* Create SNOW3G session */
1634 retval = create_snow3g_kasumi_hash_session(ts_params->valid_devs[0],
1635 tdata->key.data, tdata->key.len,
1636 tdata->aad.len, tdata->digest.len,
1637 RTE_CRYPTO_AUTH_OP_GENERATE,
1638 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
1642 /* alloc mbuf and set payload */
1643 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1645 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
1646 rte_pktmbuf_tailroom(ut_params->ibuf));
1648 plaintext_len = ceil_byte_length(tdata->plaintext.len);
1649 /* Append data which is padded to a multiple of */
1650 /* the algorithms block size */
1651 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
1652 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1654 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
1656 /* Create SNOW3G operation */
1657 retval = create_snow3g_kasumi_hash_operation(NULL, tdata->digest.len,
1658 tdata->aad.data, tdata->aad.len,
1659 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
1660 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
1661 tdata->validAuthLenInBits.len,
1662 tdata->validAuthOffsetLenInBits.len);
1666 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
1668 ut_params->obuf = ut_params->op->sym->m_src;
1669 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
1670 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
1671 + plaintext_pad_len + tdata->aad.len;
1674 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1677 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
1678 "Snow3G Generated auth tag not as expected");
1684 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
1686 struct crypto_testsuite_params *ts_params = &testsuite_params;
1687 struct crypto_unittest_params *ut_params = &unittest_params;
1690 unsigned plaintext_pad_len;
1691 unsigned plaintext_len;
1694 /* Create SNOW3G session */
1695 retval = create_snow3g_kasumi_hash_session(ts_params->valid_devs[0],
1696 tdata->key.data, tdata->key.len,
1697 tdata->aad.len, tdata->digest.len,
1698 RTE_CRYPTO_AUTH_OP_VERIFY,
1699 RTE_CRYPTO_AUTH_SNOW3G_UIA2);
1702 /* alloc mbuf and set payload */
1703 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1705 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
1706 rte_pktmbuf_tailroom(ut_params->ibuf));
1708 plaintext_len = ceil_byte_length(tdata->plaintext.len);
1709 /* Append data which is padded to a multiple of */
1710 /* the algorithms block size */
1711 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
1712 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1714 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
1716 /* Create SNOW3G operation */
1717 retval = create_snow3g_kasumi_hash_operation(tdata->digest.data,
1719 tdata->aad.data, tdata->aad.len,
1721 RTE_CRYPTO_AUTH_OP_VERIFY,
1722 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
1723 tdata->validAuthLenInBits.len,
1724 tdata->validAuthOffsetLenInBits.len);
1728 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
1730 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
1731 ut_params->obuf = ut_params->op->sym->m_src;
1732 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
1733 + plaintext_pad_len + tdata->aad.len;
1736 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
1745 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
1747 struct crypto_testsuite_params *ts_params = &testsuite_params;
1748 struct crypto_unittest_params *ut_params = &unittest_params;
1751 unsigned plaintext_pad_len;
1752 unsigned plaintext_len;
1755 /* Create KASUMI session */
1756 retval = create_snow3g_kasumi_hash_session(ts_params->valid_devs[0],
1757 tdata->key.data, tdata->key.len,
1758 tdata->aad.len, tdata->digest.len,
1759 RTE_CRYPTO_AUTH_OP_GENERATE,
1760 RTE_CRYPTO_AUTH_KASUMI_F9);
1764 /* alloc mbuf and set payload */
1765 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1767 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
1768 rte_pktmbuf_tailroom(ut_params->ibuf));
1770 plaintext_len = ceil_byte_length(tdata->plaintext.len);
1771 /* Append data which is padded to a multiple of */
1772 /* the algorithms block size */
1773 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
1774 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1776 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
1778 /* Create KASUMI operation */
1779 retval = create_snow3g_kasumi_hash_operation(NULL, tdata->digest.len,
1780 tdata->aad.data, tdata->aad.len,
1781 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
1782 RTE_CRYPTO_AUTH_KASUMI_F9,
1783 tdata->validAuthLenInBits.len,
1784 tdata->validAuthOffsetLenInBits.len);
1788 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
1790 ut_params->obuf = ut_params->op->sym->m_src;
1791 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
1792 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
1793 + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
1796 TEST_ASSERT_BUFFERS_ARE_EQUAL(
1799 DIGEST_BYTE_LENGTH_KASUMI_F9,
1800 "KASUMI Generated auth tag not as expected");
1806 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
1808 struct crypto_testsuite_params *ts_params = &testsuite_params;
1809 struct crypto_unittest_params *ut_params = &unittest_params;
1812 unsigned plaintext_pad_len;
1813 unsigned plaintext_len;
1816 /* Create KASUMI session */
1817 retval = create_snow3g_kasumi_hash_session(ts_params->valid_devs[0],
1818 tdata->key.data, tdata->key.len,
1819 tdata->aad.len, tdata->digest.len,
1820 RTE_CRYPTO_AUTH_OP_VERIFY,
1821 RTE_CRYPTO_AUTH_KASUMI_F9);
1824 /* alloc mbuf and set payload */
1825 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1827 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
1828 rte_pktmbuf_tailroom(ut_params->ibuf));
1830 plaintext_len = ceil_byte_length(tdata->plaintext.len);
1831 /* Append data which is padded to a multiple */
1832 /* of the algorithms block size */
1833 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
1834 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
1836 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
1838 /* Create KASUMI operation */
1839 retval = create_snow3g_kasumi_hash_operation(tdata->digest.data,
1841 tdata->aad.data, tdata->aad.len,
1843 RTE_CRYPTO_AUTH_OP_VERIFY,
1844 RTE_CRYPTO_AUTH_KASUMI_F9,
1845 tdata->validAuthLenInBits.len,
1846 tdata->validAuthOffsetLenInBits.len);
1850 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
1852 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
1853 ut_params->obuf = ut_params->op->sym->m_src;
1854 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
1855 + plaintext_pad_len + tdata->aad.len;
1858 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
1867 test_snow3g_hash_generate_test_case_1(void)
1869 return test_snow3g_authentication(&snow3g_hash_test_case_1);
1873 test_snow3g_hash_generate_test_case_2(void)
1875 return test_snow3g_authentication(&snow3g_hash_test_case_2);
1879 test_snow3g_hash_generate_test_case_3(void)
1881 return test_snow3g_authentication(&snow3g_hash_test_case_3);
1885 test_snow3g_hash_generate_test_case_4(void)
1887 return test_snow3g_authentication(&snow3g_hash_test_case_4);
1891 test_snow3g_hash_generate_test_case_5(void)
1893 return test_snow3g_authentication(&snow3g_hash_test_case_5);
1897 test_snow3g_hash_generate_test_case_6(void)
1899 return test_snow3g_authentication(&snow3g_hash_test_case_6);
1903 test_snow3g_hash_verify_test_case_1(void)
1905 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
1910 test_snow3g_hash_verify_test_case_2(void)
1912 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
1916 test_snow3g_hash_verify_test_case_3(void)
1918 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
1922 test_snow3g_hash_verify_test_case_4(void)
1924 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
1928 test_snow3g_hash_verify_test_case_5(void)
1930 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
1934 test_snow3g_hash_verify_test_case_6(void)
1936 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
1940 test_kasumi_hash_generate_test_case_1(void)
1942 return test_kasumi_authentication(&kasumi_hash_test_case_1);
1946 test_kasumi_hash_generate_test_case_2(void)
1948 return test_kasumi_authentication(&kasumi_hash_test_case_2);
1952 test_kasumi_hash_generate_test_case_3(void)
1954 return test_kasumi_authentication(&kasumi_hash_test_case_3);
1958 test_kasumi_hash_generate_test_case_4(void)
1960 return test_kasumi_authentication(&kasumi_hash_test_case_4);
1964 test_kasumi_hash_generate_test_case_5(void)
1966 return test_kasumi_authentication(&kasumi_hash_test_case_5);
1970 test_kasumi_hash_verify_test_case_1(void)
1972 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
1976 test_kasumi_hash_verify_test_case_2(void)
1978 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
1982 test_kasumi_hash_verify_test_case_3(void)
1984 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
1988 test_kasumi_hash_verify_test_case_4(void)
1990 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
1994 test_kasumi_hash_verify_test_case_5(void)
1996 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
2000 test_kasumi_encryption(const struct kasumi_test_data *tdata)
2002 struct crypto_testsuite_params *ts_params = &testsuite_params;
2003 struct crypto_unittest_params *ut_params = &unittest_params;
2006 uint8_t *plaintext, *ciphertext;
2007 unsigned plaintext_pad_len;
2008 unsigned plaintext_len;
2010 /* Create KASUMI session */
2011 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2012 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2013 RTE_CRYPTO_CIPHER_KASUMI_F8,
2014 tdata->key.data, tdata->key.len);
2018 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2020 /* Clear mbuf payload */
2021 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2022 rte_pktmbuf_tailroom(ut_params->ibuf));
2024 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2025 /* Append data which is padded to a multiple */
2026 /* of the algorithms block size */
2027 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2028 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2030 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2032 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2034 /* Create KASUMI operation */
2035 retval = create_snow3g_kasumi_cipher_operation(tdata->iv.data, tdata->iv.len,
2036 tdata->plaintext.len,
2037 tdata->validCipherOffsetLenInBits.len,
2038 RTE_CRYPTO_CIPHER_KASUMI_F8);
2042 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2044 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2046 ut_params->obuf = ut_params->op->sym->m_dst;
2047 if (ut_params->obuf)
2048 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2051 ciphertext = plaintext;
2053 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2056 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2058 tdata->ciphertext.data,
2059 tdata->validCipherLenInBits.len,
2060 "KASUMI Ciphertext data not as expected");
2065 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
2067 struct crypto_testsuite_params *ts_params = &testsuite_params;
2068 struct crypto_unittest_params *ut_params = &unittest_params;
2071 uint8_t *plaintext, *ciphertext;
2072 unsigned plaintext_pad_len;
2073 unsigned plaintext_len;
2075 /* Create KASUMI session */
2076 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2077 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2078 RTE_CRYPTO_CIPHER_KASUMI_F8,
2079 tdata->key.data, tdata->key.len);
2083 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2084 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2086 /* Clear mbuf payload */
2087 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2088 rte_pktmbuf_tailroom(ut_params->ibuf));
2090 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2091 /* Append data which is padded to a multiple */
2092 /* of the algorithms block size */
2093 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
2094 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2096 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2097 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2099 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2101 /* Create KASUMI operation */
2102 retval = create_snow3g_kasumi_cipher_operation_oop(tdata->iv.data,
2104 tdata->plaintext.len,
2105 tdata->validCipherOffsetLenInBits.len,
2106 RTE_CRYPTO_CIPHER_KASUMI_F8);
2110 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2112 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2114 ut_params->obuf = ut_params->op->sym->m_dst;
2115 if (ut_params->obuf)
2116 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2119 ciphertext = plaintext;
2121 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2124 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2126 tdata->ciphertext.data,
2127 tdata->validCipherLenInBits.len,
2128 "KASUMI Ciphertext data not as expected");
2133 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
2135 struct crypto_testsuite_params *ts_params = &testsuite_params;
2136 struct crypto_unittest_params *ut_params = &unittest_params;
2139 uint8_t *ciphertext, *plaintext;
2140 unsigned ciphertext_pad_len;
2141 unsigned ciphertext_len;
2143 /* Create KASUMI session */
2144 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2145 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2146 RTE_CRYPTO_CIPHER_KASUMI_F8,
2147 tdata->key.data, tdata->key.len);
2151 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2152 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2154 /* Clear mbuf payload */
2155 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2156 rte_pktmbuf_tailroom(ut_params->ibuf));
2158 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2159 /* Append data which is padded to a multiple */
2160 /* of the algorithms block size */
2161 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2162 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2163 ciphertext_pad_len);
2164 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
2165 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2167 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2169 /* Create KASUMI operation */
2170 retval = create_snow3g_kasumi_cipher_operation_oop(tdata->iv.data,
2172 tdata->ciphertext.len,
2173 tdata->validCipherOffsetLenInBits.len,
2174 RTE_CRYPTO_CIPHER_KASUMI_F8);
2178 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2180 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2182 ut_params->obuf = ut_params->op->sym->m_dst;
2183 if (ut_params->obuf)
2184 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2187 plaintext = ciphertext;
2189 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2192 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2194 tdata->plaintext.data,
2195 tdata->validCipherLenInBits.len,
2196 "KASUMI Plaintext data not as expected");
2201 test_kasumi_decryption(const struct kasumi_test_data *tdata)
2203 struct crypto_testsuite_params *ts_params = &testsuite_params;
2204 struct crypto_unittest_params *ut_params = &unittest_params;
2207 uint8_t *ciphertext, *plaintext;
2208 unsigned ciphertext_pad_len;
2209 unsigned ciphertext_len;
2211 /* Create KASUMI session */
2212 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2213 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2214 RTE_CRYPTO_CIPHER_KASUMI_F8,
2215 tdata->key.data, tdata->key.len);
2219 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2221 /* Clear mbuf payload */
2222 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2223 rte_pktmbuf_tailroom(ut_params->ibuf));
2225 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2226 /* Append data which is padded to a multiple */
2227 /* of the algorithms block size */
2228 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
2229 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2230 ciphertext_pad_len);
2231 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2233 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2235 /* Create KASUMI operation */
2236 retval = create_snow3g_kasumi_cipher_operation(tdata->iv.data,
2238 tdata->ciphertext.len,
2239 tdata->validCipherOffsetLenInBits.len,
2240 RTE_CRYPTO_CIPHER_KASUMI_F8);
2244 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2246 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2248 ut_params->obuf = ut_params->op->sym->m_dst;
2249 if (ut_params->obuf)
2250 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2253 plaintext = ciphertext;
2255 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2258 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2260 tdata->plaintext.data,
2261 tdata->validCipherLenInBits.len,
2262 "KASUMI Plaintext data not as expected");
2267 test_snow3g_encryption(const struct snow3g_test_data *tdata)
2269 struct crypto_testsuite_params *ts_params = &testsuite_params;
2270 struct crypto_unittest_params *ut_params = &unittest_params;
2273 uint8_t *plaintext, *ciphertext;
2274 unsigned plaintext_pad_len;
2275 unsigned plaintext_len;
2277 /* Create SNOW3G session */
2278 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2279 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2280 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2281 tdata->key.data, tdata->key.len);
2285 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2287 /* Clear mbuf payload */
2288 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2289 rte_pktmbuf_tailroom(ut_params->ibuf));
2291 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2292 /* Append data which is padded to a multiple of */
2293 /* the algorithms block size */
2294 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2295 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2297 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2299 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2301 /* Create SNOW3G operation */
2302 retval = create_snow3g_kasumi_cipher_operation(tdata->iv.data, tdata->iv.len,
2303 tdata->validCipherLenInBits.len,
2304 tdata->validCipherOffsetLenInBits.len,
2305 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2309 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2311 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2313 ut_params->obuf = ut_params->op->sym->m_dst;
2314 if (ut_params->obuf)
2315 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2318 ciphertext = plaintext;
2320 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2323 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2325 tdata->ciphertext.data,
2326 tdata->validDataLenInBits.len,
2327 "Snow3G Ciphertext data not as expected");
2333 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
2335 struct crypto_testsuite_params *ts_params = &testsuite_params;
2336 struct crypto_unittest_params *ut_params = &unittest_params;
2337 uint8_t *plaintext, *ciphertext;
2340 unsigned plaintext_pad_len;
2341 unsigned plaintext_len;
2343 /* Create SNOW3G session */
2344 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2345 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2346 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2347 tdata->key.data, tdata->key.len);
2351 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2352 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2354 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
2355 "Failed to allocate input buffer in mempool");
2356 TEST_ASSERT_NOT_NULL(ut_params->obuf,
2357 "Failed to allocate output buffer in mempool");
2359 /* Clear mbuf payload */
2360 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2361 rte_pktmbuf_tailroom(ut_params->ibuf));
2363 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2364 /* Append data which is padded to a multiple of */
2365 /* the algorithms block size */
2366 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2367 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2369 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2370 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2372 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2374 /* Create SNOW3G operation */
2375 retval = create_snow3g_kasumi_cipher_operation_oop(tdata->iv.data,
2377 tdata->validCipherLenInBits.len,
2378 tdata->validCipherOffsetLenInBits.len,
2379 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2383 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2385 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2387 ut_params->obuf = ut_params->op->sym->m_dst;
2388 if (ut_params->obuf)
2389 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2392 ciphertext = plaintext;
2394 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2397 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2399 tdata->ciphertext.data,
2400 tdata->validDataLenInBits.len,
2401 "Snow3G Ciphertext data not as expected");
2405 /* Shift right a buffer by "offset" bits, "offset" < 8 */
2407 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
2409 uint8_t curr_byte, prev_byte;
2410 uint32_t length_in_bytes = ceil_byte_length(length + offset);
2411 uint8_t lower_byte_mask = (1 << offset) - 1;
2414 prev_byte = buffer[0];
2415 buffer[0] >>= offset;
2417 for (i = 1; i < length_in_bytes; i++) {
2418 curr_byte = buffer[i];
2419 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
2420 (curr_byte >> offset);
2421 prev_byte = curr_byte;
2426 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
2428 struct crypto_testsuite_params *ts_params = &testsuite_params;
2429 struct crypto_unittest_params *ut_params = &unittest_params;
2430 uint8_t *plaintext, *ciphertext;
2432 uint32_t plaintext_len;
2433 uint32_t plaintext_pad_len;
2434 uint8_t extra_offset = 4;
2435 uint8_t *expected_ciphertext_shifted;
2437 /* Create SNOW3G session */
2438 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2439 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2440 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2441 tdata->key.data, tdata->key.len);
2445 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2446 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2448 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
2449 "Failed to allocate input buffer in mempool");
2450 TEST_ASSERT_NOT_NULL(ut_params->obuf,
2451 "Failed to allocate output buffer in mempool");
2453 /* Clear mbuf payload */
2454 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2455 rte_pktmbuf_tailroom(ut_params->ibuf));
2457 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
2459 * Append data which is padded to a
2460 * multiple of the algorithms block size
2462 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2464 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
2467 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
2469 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
2470 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
2472 #ifdef RTE_APP_TEST_DEBUG
2473 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
2475 /* Create SNOW3G operation */
2476 retval = create_snow3g_kasumi_cipher_operation_oop(tdata->iv.data,
2478 tdata->validCipherLenInBits.len,
2479 tdata->validCipherOffsetLenInBits.len +
2481 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2485 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2487 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2489 ut_params->obuf = ut_params->op->sym->m_dst;
2490 if (ut_params->obuf)
2491 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2494 ciphertext = plaintext;
2496 #ifdef RTE_APP_TEST_DEBUG
2497 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
2500 expected_ciphertext_shifted = rte_malloc(NULL,
2501 ceil_byte_length(plaintext_len + extra_offset), 0);
2503 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
2504 "failed to reserve memory for ciphertext shifted\n");
2506 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
2507 ceil_byte_length(tdata->ciphertext.len));
2508 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
2511 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2513 expected_ciphertext_shifted,
2514 tdata->validDataLenInBits.len,
2516 "Snow3G Ciphertext data not as expected");
2520 static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
2522 struct crypto_testsuite_params *ts_params = &testsuite_params;
2523 struct crypto_unittest_params *ut_params = &unittest_params;
2527 uint8_t *plaintext, *ciphertext;
2528 unsigned ciphertext_pad_len;
2529 unsigned ciphertext_len;
2531 /* Create SNOW3G session */
2532 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2533 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2534 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2535 tdata->key.data, tdata->key.len);
2539 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2541 /* Clear mbuf payload */
2542 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2543 rte_pktmbuf_tailroom(ut_params->ibuf));
2545 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2546 /* Append data which is padded to a multiple of */
2547 /* the algorithms block size */
2548 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
2549 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2550 ciphertext_pad_len);
2551 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2553 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2555 /* Create SNOW3G operation */
2556 retval = create_snow3g_kasumi_cipher_operation(tdata->iv.data, tdata->iv.len,
2557 tdata->validCipherLenInBits.len,
2558 tdata->validCipherOffsetLenInBits.len,
2559 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2563 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2565 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2566 ut_params->obuf = ut_params->op->sym->m_dst;
2567 if (ut_params->obuf)
2568 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2571 plaintext = ciphertext;
2573 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2576 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
2577 tdata->plaintext.data,
2578 tdata->validDataLenInBits.len,
2579 "Snow3G Plaintext data not as expected");
2583 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
2585 struct crypto_testsuite_params *ts_params = &testsuite_params;
2586 struct crypto_unittest_params *ut_params = &unittest_params;
2590 uint8_t *plaintext, *ciphertext;
2591 unsigned ciphertext_pad_len;
2592 unsigned ciphertext_len;
2594 /* Create SNOW3G session */
2595 retval = create_snow3g_kasumi_cipher_session(ts_params->valid_devs[0],
2596 RTE_CRYPTO_CIPHER_OP_DECRYPT,
2597 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2598 tdata->key.data, tdata->key.len);
2602 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2603 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2605 TEST_ASSERT_NOT_NULL(ut_params->ibuf,
2606 "Failed to allocate input buffer");
2607 TEST_ASSERT_NOT_NULL(ut_params->obuf,
2608 "Failed to allocate output buffer");
2610 /* Clear mbuf payload */
2611 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2612 rte_pktmbuf_tailroom(ut_params->ibuf));
2614 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
2615 rte_pktmbuf_tailroom(ut_params->obuf));
2617 ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
2618 /* Append data which is padded to a multiple of */
2619 /* the algorithms block size */
2620 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
2621 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2622 ciphertext_pad_len);
2623 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
2624 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
2626 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
2628 /* Create SNOW3G operation */
2629 retval = create_snow3g_kasumi_cipher_operation_oop(tdata->iv.data,
2631 tdata->validCipherLenInBits.len,
2632 tdata->validCipherOffsetLenInBits.len,
2633 RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
2637 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2639 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2640 ut_params->obuf = ut_params->op->sym->m_dst;
2641 if (ut_params->obuf)
2642 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2645 plaintext = ciphertext;
2647 TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
2650 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
2651 tdata->plaintext.data,
2652 tdata->validDataLenInBits.len,
2653 "Snow3G Plaintext data not as expected");
2658 test_snow3g_authenticated_encryption(const struct snow3g_test_data *tdata)
2660 struct crypto_testsuite_params *ts_params = &testsuite_params;
2661 struct crypto_unittest_params *ut_params = &unittest_params;
2665 uint8_t *plaintext, *ciphertext;
2666 unsigned plaintext_pad_len;
2667 unsigned plaintext_len;
2669 /* Create SNOW3G session */
2670 retval = create_snow3g_kasumi_cipher_auth_session(ts_params->valid_devs[0],
2671 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2672 RTE_CRYPTO_AUTH_OP_GENERATE,
2673 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2674 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2675 tdata->key.data, tdata->key.len,
2676 tdata->aad.len, tdata->digest.len);
2679 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2681 /* clear mbuf payload */
2682 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2683 rte_pktmbuf_tailroom(ut_params->ibuf));
2685 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2686 /* Append data which is padded to a multiple of */
2687 /* the algorithms block size */
2688 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2689 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2691 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2693 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2695 /* Create SNOW3G operation */
2696 retval = create_snow3g_kasumi_cipher_hash_operation(tdata->digest.data,
2697 tdata->digest.len, tdata->aad.data,
2698 tdata->aad.len, /*tdata->plaintext.len,*/
2699 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
2700 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2701 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2702 tdata->iv.data, tdata->iv.len,
2703 tdata->validCipherLenInBits.len,
2704 tdata->validCipherOffsetLenInBits.len,
2705 tdata->validAuthLenInBits.len,
2706 tdata->validAuthOffsetLenInBits.len
2711 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2713 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2714 ut_params->obuf = ut_params->op->sym->m_src;
2715 if (ut_params->obuf)
2716 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2719 ciphertext = plaintext;
2721 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2724 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2726 tdata->ciphertext.data,
2727 tdata->validDataLenInBits.len,
2728 "Snow3G Ciphertext data not as expected");
2730 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2731 + plaintext_pad_len + tdata->aad.len;
2734 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2737 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2738 "Snow3G Generated auth tag not as expected");
2742 test_snow3g_encrypted_authentication(const struct snow3g_test_data *tdata)
2744 struct crypto_testsuite_params *ts_params = &testsuite_params;
2745 struct crypto_unittest_params *ut_params = &unittest_params;
2749 uint8_t *plaintext, *ciphertext;
2750 unsigned plaintext_pad_len;
2751 unsigned plaintext_len;
2753 /* Create SNOW3G session */
2754 retval = create_snow3g_kasumi_auth_cipher_session(ts_params->valid_devs[0],
2755 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
2756 RTE_CRYPTO_AUTH_OP_GENERATE,
2757 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2758 RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2759 tdata->key.data, tdata->key.len,
2760 tdata->aad.len, tdata->digest.len);
2764 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
2766 /* clear mbuf payload */
2767 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
2768 rte_pktmbuf_tailroom(ut_params->ibuf));
2770 plaintext_len = ceil_byte_length(tdata->plaintext.len);
2771 /* Append data which is padded to a multiple of */
2772 /* the algorithms block size */
2773 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
2774 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
2776 memcpy(plaintext, tdata->plaintext.data, plaintext_len);
2778 TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
2780 /* Create SNOW3G operation */
2781 retval = create_snow3g_kasumi_auth_cipher_operation(
2783 tdata->iv.data, tdata->iv.len,
2784 tdata->aad.data, tdata->aad.len,
2786 tdata->validCipherLenInBits.len,
2787 tdata->validCipherOffsetLenInBits.len,
2788 tdata->validAuthLenInBits.len,
2789 tdata->validAuthOffsetLenInBits.len,
2790 RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2791 RTE_CRYPTO_CIPHER_SNOW3G_UEA2
2797 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
2799 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
2800 ut_params->obuf = ut_params->op->sym->m_src;
2801 if (ut_params->obuf)
2802 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2803 + tdata->aad.len + tdata->iv.len;
2805 ciphertext = plaintext;
2807 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
2808 + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
2809 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
2812 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2814 tdata->ciphertext.data,
2815 tdata->validDataLenInBits.len,
2816 "Snow3G Ciphertext data not as expected");
2819 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2822 DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
2823 "Snow3G Generated auth tag not as expected");
2828 test_kasumi_encryption_test_case_1(void)
2830 return test_kasumi_encryption(&kasumi_test_case_1);
2834 test_kasumi_encryption_test_case_1_oop(void)
2836 return test_kasumi_encryption_oop(&kasumi_test_case_1);
2840 test_kasumi_encryption_test_case_2(void)
2842 return test_kasumi_encryption(&kasumi_test_case_2);
2846 test_kasumi_encryption_test_case_3(void)
2848 return test_kasumi_encryption(&kasumi_test_case_3);
2852 test_kasumi_encryption_test_case_4(void)
2854 return test_kasumi_encryption(&kasumi_test_case_4);
2858 test_kasumi_encryption_test_case_5(void)
2860 return test_kasumi_encryption(&kasumi_test_case_5);
2864 test_kasumi_decryption_test_case_1(void)
2866 return test_kasumi_decryption(&kasumi_test_case_1);
2870 test_kasumi_decryption_test_case_1_oop(void)
2872 return test_kasumi_decryption_oop(&kasumi_test_case_1);
2876 test_kasumi_decryption_test_case_2(void)
2878 return test_kasumi_decryption(&kasumi_test_case_2);
2882 test_kasumi_decryption_test_case_3(void)
2884 return test_kasumi_decryption(&kasumi_test_case_3);
2888 test_kasumi_decryption_test_case_4(void)
2890 return test_kasumi_decryption(&kasumi_test_case_4);
2894 test_kasumi_decryption_test_case_5(void)
2896 return test_kasumi_decryption(&kasumi_test_case_5);
2899 test_snow3g_encryption_test_case_1(void)
2901 return test_snow3g_encryption(&snow3g_test_case_1);
2905 test_snow3g_encryption_test_case_1_oop(void)
2907 return test_snow3g_encryption_oop(&snow3g_test_case_1);
2911 test_snow3g_encryption_test_case_1_offset_oop(void)
2913 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
2917 test_snow3g_encryption_test_case_2(void)
2919 return test_snow3g_encryption(&snow3g_test_case_2);
2923 test_snow3g_encryption_test_case_3(void)
2925 return test_snow3g_encryption(&snow3g_test_case_3);
2929 test_snow3g_encryption_test_case_4(void)
2931 return test_snow3g_encryption(&snow3g_test_case_4);
2935 test_snow3g_encryption_test_case_5(void)
2937 return test_snow3g_encryption(&snow3g_test_case_5);
2941 test_snow3g_decryption_test_case_1(void)
2943 return test_snow3g_decryption(&snow3g_test_case_1);
2947 test_snow3g_decryption_test_case_1_oop(void)
2949 return test_snow3g_decryption_oop(&snow3g_test_case_1);
2953 test_snow3g_decryption_test_case_2(void)
2955 return test_snow3g_decryption(&snow3g_test_case_2);
2959 test_snow3g_decryption_test_case_3(void)
2961 return test_snow3g_decryption(&snow3g_test_case_3);
2965 test_snow3g_decryption_test_case_4(void)
2967 return test_snow3g_decryption(&snow3g_test_case_4);
2971 test_snow3g_decryption_test_case_5(void)
2973 return test_snow3g_decryption(&snow3g_test_case_5);
2976 test_snow3g_authenticated_encryption_test_case_1(void)
2978 return test_snow3g_authenticated_encryption(&snow3g_test_case_3);
2982 test_snow3g_encrypted_authentication_test_case_1(void)
2984 return test_snow3g_encrypted_authentication(&snow3g_test_case_6);
2987 /* ***** AES-GCM Tests ***** */
2990 create_gcm_session(uint8_t dev_id, enum rte_crypto_cipher_operation op,
2991 const uint8_t *key, const uint8_t key_len,
2992 const uint8_t aad_len, const uint8_t auth_len)
2994 uint8_t cipher_key[key_len];
2996 struct crypto_unittest_params *ut_params = &unittest_params;
2999 memcpy(cipher_key, key, key_len);
3001 /* Setup Cipher Parameters */
3002 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3003 ut_params->cipher_xform.next = NULL;
3005 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
3006 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3007 ut_params->cipher_xform.cipher.op = op;
3008 ut_params->cipher_xform.cipher.key.data = cipher_key;
3009 ut_params->cipher_xform.cipher.key.length = key_len;
3011 TEST_HEXDUMP(stdout, "key:", key, key_len);
3013 /* Setup Authentication Parameters */
3014 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3015 ut_params->auth_xform.next = NULL;
3017 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
3019 ut_params->auth_xform.auth.digest_length = auth_len;
3020 ut_params->auth_xform.auth.add_auth_data_length = aad_len;
3021 ut_params->auth_xform.auth.key.length = 0;
3022 ut_params->auth_xform.auth.key.data = NULL;
3024 if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
3025 ut_params->cipher_xform.next = &ut_params->auth_xform;
3027 /* Create Crypto session*/
3028 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
3029 &ut_params->cipher_xform);
3030 } else {/* Create Crypto session*/
3031 ut_params->auth_xform.next = &ut_params->cipher_xform;
3032 ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
3033 &ut_params->auth_xform);
3036 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3042 create_gcm_operation(enum rte_crypto_cipher_operation op,
3043 const uint8_t *auth_tag, const unsigned auth_tag_len,
3044 const uint8_t *iv, const unsigned iv_len,
3045 const uint8_t *aad, const unsigned aad_len,
3046 const unsigned data_len, unsigned data_pad_len)
3048 struct crypto_testsuite_params *ts_params = &testsuite_params;
3049 struct crypto_unittest_params *ut_params = &unittest_params;
3051 unsigned iv_pad_len = 0, aad_buffer_len;
3053 /* Generate Crypto op data structure */
3054 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3055 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3056 TEST_ASSERT_NOT_NULL(ut_params->op,
3057 "Failed to allocate symmetric crypto operation struct");
3059 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3063 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
3064 ut_params->ibuf, auth_tag_len);
3065 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
3066 "no room to append digest");
3067 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
3068 ut_params->ibuf, data_pad_len);
3069 sym_op->auth.digest.length = auth_tag_len;
3071 if (op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
3072 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
3073 TEST_HEXDUMP(stdout, "digest:",
3074 sym_op->auth.digest.data,
3075 sym_op->auth.digest.length);
3079 iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
3081 sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
3082 ut_params->ibuf, iv_pad_len);
3083 TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
3085 memset(sym_op->cipher.iv.data, 0, iv_pad_len);
3086 sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
3087 sym_op->cipher.iv.length = iv_pad_len;
3089 rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
3093 sym_op->cipher.iv.data[15] = 1;
3096 * Always allocate the aad up to the block size.
3097 * The cryptodev API calls out -
3098 * - the array must be big enough to hold the AAD, plus any
3099 * space to round this up to the nearest multiple of the
3100 * block size (16 bytes).
3102 aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
3104 sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
3105 ut_params->ibuf, aad_buffer_len);
3106 TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
3107 "no room to prepend aad");
3108 sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
3110 sym_op->auth.aad.length = aad_len;
3112 memset(sym_op->auth.aad.data, 0, aad_buffer_len);
3113 rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
3115 TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
3116 TEST_HEXDUMP(stdout, "aad:",
3117 sym_op->auth.aad.data, aad_len);
3119 sym_op->cipher.data.length = data_len;
3120 sym_op->cipher.data.offset = aad_buffer_len + iv_pad_len;
3122 sym_op->auth.data.offset = aad_buffer_len + iv_pad_len;
3123 sym_op->auth.data.length = data_len;
3129 test_mb_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
3131 struct crypto_testsuite_params *ts_params = &testsuite_params;
3132 struct crypto_unittest_params *ut_params = &unittest_params;
3136 uint8_t *plaintext, *ciphertext, *auth_tag;
3137 uint16_t plaintext_pad_len;
3139 /* Create GCM session */
3140 retval = create_gcm_session(ts_params->valid_devs[0],
3141 RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3142 tdata->key.data, tdata->key.len,
3143 tdata->aad.len, tdata->auth_tag.len);
3148 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3150 /* clear mbuf payload */
3151 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3152 rte_pktmbuf_tailroom(ut_params->ibuf));
3155 * Append data which is padded to a multiple
3156 * of the algorithms block size
3158 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
3160 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3162 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
3164 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->plaintext.len);
3166 /* Create GCM opertaion */
3167 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT,
3168 tdata->auth_tag.data, tdata->auth_tag.len,
3169 tdata->iv.data, tdata->iv.len,
3170 tdata->aad.data, tdata->aad.len,
3171 tdata->plaintext.len, plaintext_pad_len);
3175 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3177 ut_params->op->sym->m_src = ut_params->ibuf;
3179 /* Process crypto operation */
3180 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
3181 ut_params->op), "failed to process sym crypto op");
3183 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3184 "crypto op processing failed");
3186 if (ut_params->op->sym->m_dst) {
3187 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
3189 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
3190 uint8_t *, plaintext_pad_len);
3192 ciphertext = plaintext;
3193 auth_tag = plaintext + plaintext_pad_len;
3196 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
3197 TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
3200 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3202 tdata->ciphertext.data,
3203 tdata->ciphertext.len,
3204 "GCM Ciphertext data not as expected");
3206 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3208 tdata->auth_tag.data,
3209 tdata->auth_tag.len,
3210 "GCM Generated auth tag not as expected");
3217 test_mb_AES_GCM_authenticated_encryption_test_case_1(void)
3219 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_1);
3223 test_mb_AES_GCM_authenticated_encryption_test_case_2(void)
3225 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_2);
3229 test_mb_AES_GCM_authenticated_encryption_test_case_3(void)
3231 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_3);
3235 test_mb_AES_GCM_authenticated_encryption_test_case_4(void)
3237 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_4);
3241 test_mb_AES_GCM_authenticated_encryption_test_case_5(void)
3243 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_5);
3247 test_mb_AES_GCM_authenticated_encryption_test_case_6(void)
3249 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_6);
3253 test_mb_AES_GCM_authenticated_encryption_test_case_7(void)
3255 return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_7);
3259 test_mb_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
3261 struct crypto_testsuite_params *ts_params = &testsuite_params;
3262 struct crypto_unittest_params *ut_params = &unittest_params;
3266 uint8_t *plaintext, *ciphertext;
3267 uint16_t ciphertext_pad_len;
3269 /* Create GCM session */
3270 retval = create_gcm_session(ts_params->valid_devs[0],
3271 RTE_CRYPTO_CIPHER_OP_DECRYPT,
3272 tdata->key.data, tdata->key.len,
3273 tdata->aad.len, tdata->auth_tag.len);
3278 /* alloc mbuf and set payload */
3279 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3281 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3282 rte_pktmbuf_tailroom(ut_params->ibuf));
3284 ciphertext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
3286 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3287 ciphertext_pad_len);
3288 memcpy(ciphertext, tdata->ciphertext.data, tdata->ciphertext.len);
3290 TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
3292 /* Create GCM opertaion */
3293 retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT,
3294 tdata->auth_tag.data, tdata->auth_tag.len,
3295 tdata->iv.data, tdata->iv.len,
3296 tdata->aad.data, tdata->aad.len,
3297 tdata->ciphertext.len, ciphertext_pad_len);
3302 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3304 ut_params->op->sym->m_src = ut_params->ibuf;
3306 /* Process crypto operation */
3307 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
3308 ut_params->op), "failed to process sym crypto op");
3310 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3311 "crypto op processing failed");
3313 if (ut_params->op->sym->m_dst)
3314 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
3317 plaintext = ciphertext;
3319 TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
3322 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3324 tdata->plaintext.data,
3325 tdata->plaintext.len,
3326 "GCM plaintext data not as expected");
3328 TEST_ASSERT_EQUAL(ut_params->op->status,
3329 RTE_CRYPTO_OP_STATUS_SUCCESS,
3330 "GCM authentication failed");
3335 test_mb_AES_GCM_authenticated_decryption_test_case_1(void)
3337 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_1);
3341 test_mb_AES_GCM_authenticated_decryption_test_case_2(void)
3343 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_2);
3347 test_mb_AES_GCM_authenticated_decryption_test_case_3(void)
3349 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_3);
3353 test_mb_AES_GCM_authenticated_decryption_test_case_4(void)
3355 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_4);
3359 test_mb_AES_GCM_authenticated_decryption_test_case_5(void)
3361 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_5);
3365 test_mb_AES_GCM_authenticated_decryption_test_case_6(void)
3367 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_6);
3371 test_mb_AES_GCM_authenticated_decryption_test_case_7(void)
3373 return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_7);
3379 struct crypto_testsuite_params *ts_params = &testsuite_params;
3380 struct rte_cryptodev_stats stats;
3381 struct rte_cryptodev *dev;
3382 cryptodev_stats_get_t temp_pfn;
3384 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
3385 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
3386 &stats) == -ENODEV),
3387 "rte_cryptodev_stats_get invalid dev failed");
3388 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
3389 "rte_cryptodev_stats_get invalid Param failed");
3390 dev = &rte_cryptodevs[ts_params->valid_devs[0]];
3391 temp_pfn = dev->dev_ops->stats_get;
3392 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
3393 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
3395 "rte_cryptodev_stats_get invalid Param failed");
3396 dev->dev_ops->stats_get = temp_pfn;
3398 /* Test expected values */
3400 test_AES_CBC_HMAC_SHA1_encrypt_digest();
3402 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
3404 "rte_cryptodev_stats_get failed");
3405 TEST_ASSERT((stats.enqueued_count == 1),
3406 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3407 TEST_ASSERT((stats.dequeued_count == 1),
3408 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3409 TEST_ASSERT((stats.enqueue_err_count == 0),
3410 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3411 TEST_ASSERT((stats.dequeue_err_count == 0),
3412 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3414 /* invalid device but should ignore and not reset device stats*/
3415 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
3416 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
3418 "rte_cryptodev_stats_get failed");
3419 TEST_ASSERT((stats.enqueued_count == 1),
3420 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3422 /* check that a valid reset clears stats */
3423 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
3424 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
3426 "rte_cryptodev_stats_get failed");
3427 TEST_ASSERT((stats.enqueued_count == 0),
3428 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3429 TEST_ASSERT((stats.dequeued_count == 0),
3430 "rte_cryptodev_stats_get returned unexpected enqueued stat");
3432 return TEST_SUCCESS;
3435 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
3436 struct crypto_unittest_params *ut_params,
3437 enum rte_crypto_auth_operation op,
3438 const struct HMAC_MD5_vector *test_case)
3442 memcpy(key, test_case->key.data, test_case->key.len);
3444 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3445 ut_params->auth_xform.next = NULL;
3446 ut_params->auth_xform.auth.op = op;
3448 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
3450 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
3451 ut_params->auth_xform.auth.add_auth_data_length = 0;
3452 ut_params->auth_xform.auth.key.length = test_case->key.len;
3453 ut_params->auth_xform.auth.key.data = key;
3455 ut_params->sess = rte_cryptodev_sym_session_create(
3456 ts_params->valid_devs[0], &ut_params->auth_xform);
3458 if (ut_params->sess == NULL)
3461 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3463 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
3464 rte_pktmbuf_tailroom(ut_params->ibuf));
3469 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
3470 const struct HMAC_MD5_vector *test_case,
3471 uint8_t **plaintext)
3473 uint16_t plaintext_pad_len;
3475 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3477 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
3480 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
3482 memcpy(*plaintext, test_case->plaintext.data,
3483 test_case->plaintext.len);
3485 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
3486 ut_params->ibuf, MD5_DIGEST_LEN);
3487 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
3488 "no room to append digest");
3489 sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
3490 ut_params->ibuf, plaintext_pad_len);
3491 sym_op->auth.digest.length = MD5_DIGEST_LEN;
3493 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
3494 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
3495 test_case->auth_tag.len);
3498 sym_op->auth.data.offset = 0;
3499 sym_op->auth.data.length = test_case->plaintext.len;
3501 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3502 ut_params->op->sym->m_src = ut_params->ibuf;
3508 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
3510 uint16_t plaintext_pad_len;
3511 uint8_t *plaintext, *auth_tag;
3513 struct crypto_testsuite_params *ts_params = &testsuite_params;
3514 struct crypto_unittest_params *ut_params = &unittest_params;
3516 if (MD5_HMAC_create_session(ts_params, ut_params,
3517 RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
3520 /* Generate Crypto op data structure */
3521 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3522 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3523 TEST_ASSERT_NOT_NULL(ut_params->op,
3524 "Failed to allocate symmetric crypto operation struct");
3526 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
3529 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
3532 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
3533 ut_params->op), "failed to process sym crypto op");
3535 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3536 "crypto op processing failed");
3538 if (ut_params->op->sym->m_dst) {
3539 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
3540 uint8_t *, plaintext_pad_len);
3542 auth_tag = plaintext + plaintext_pad_len;
3545 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3547 test_case->auth_tag.data,
3548 test_case->auth_tag.len,
3549 "HMAC_MD5 generated tag not as expected");
3551 return TEST_SUCCESS;
3555 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
3559 struct crypto_testsuite_params *ts_params = &testsuite_params;
3560 struct crypto_unittest_params *ut_params = &unittest_params;
3562 if (MD5_HMAC_create_session(ts_params, ut_params,
3563 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
3567 /* Generate Crypto op data structure */
3568 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3569 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3570 TEST_ASSERT_NOT_NULL(ut_params->op,
3571 "Failed to allocate symmetric crypto operation struct");
3573 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
3576 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
3577 ut_params->op), "failed to process sym crypto op");
3579 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3580 "HMAC_MD5 crypto op processing failed");
3582 return TEST_SUCCESS;
3586 test_MD5_HMAC_generate_case_1(void)
3588 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
3592 test_MD5_HMAC_verify_case_1(void)
3594 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
3598 test_MD5_HMAC_generate_case_2(void)
3600 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
3604 test_MD5_HMAC_verify_case_2(void)
3606 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
3610 test_multi_session(void)
3612 struct crypto_testsuite_params *ts_params = &testsuite_params;
3613 struct crypto_unittest_params *ut_params = &unittest_params;
3615 struct rte_cryptodev_info dev_info;
3616 struct rte_cryptodev_sym_session **sessions;
3620 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params);
3623 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
3625 sessions = rte_malloc(NULL,
3626 (sizeof(struct rte_cryptodev_sym_session *) *
3627 dev_info.sym.max_nb_sessions) + 1, 0);
3629 /* Create multiple crypto sessions*/
3630 for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
3631 sessions[i] = rte_cryptodev_sym_session_create(
3632 ts_params->valid_devs[0],
3633 &ut_params->auth_xform);
3634 TEST_ASSERT_NOT_NULL(sessions[i],
3635 "Session creation failed at session number %u",
3638 /* Attempt to send a request on each session */
3639 TEST_ASSERT_SUCCESS(test_AES_CBC_HMAC_SHA512_decrypt_perform(
3640 sessions[i], ut_params, ts_params),
3641 "Failed to perform decrypt on request "
3643 /* free crypto operation structure */
3645 rte_crypto_op_free(ut_params->op);
3648 * free mbuf - both obuf and ibuf are usually the same,
3649 * so check if they point at the same address is necessary,
3650 * to avoid freeing the mbuf twice.
3652 if (ut_params->obuf) {
3653 rte_pktmbuf_free(ut_params->obuf);
3654 if (ut_params->ibuf == ut_params->obuf)
3655 ut_params->ibuf = 0;
3656 ut_params->obuf = 0;
3658 if (ut_params->ibuf) {
3659 rte_pktmbuf_free(ut_params->ibuf);
3660 ut_params->ibuf = 0;
3664 /* Next session create should fail */
3665 sessions[i] = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
3666 &ut_params->auth_xform);
3667 TEST_ASSERT_NULL(sessions[i],
3668 "Session creation succeeded unexpectedly!");
3670 for (i = 0; i < dev_info.sym.max_nb_sessions; i++)
3671 rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
3676 return TEST_SUCCESS;
3680 test_null_cipher_only_operation(void)
3682 struct crypto_testsuite_params *ts_params = &testsuite_params;
3683 struct crypto_unittest_params *ut_params = &unittest_params;
3685 /* Generate test mbuf data and space for digest */
3686 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
3687 catch_22_quote, QUOTE_512_BYTES, 0);
3689 /* Setup Cipher Parameters */
3690 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3691 ut_params->cipher_xform.next = NULL;
3693 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
3694 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3696 /* Create Crypto session*/
3697 ut_params->sess = rte_cryptodev_sym_session_create(
3698 ts_params->valid_devs[0], &ut_params->cipher_xform);
3699 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3701 /* Generate Crypto op data structure */
3702 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3703 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3704 TEST_ASSERT_NOT_NULL(ut_params->op,
3705 "Failed to allocate symmetric crypto operation struct");
3707 /* Set crypto operation data parameters */
3708 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3710 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3712 /* set crypto operation source mbuf */
3713 sym_op->m_src = ut_params->ibuf;
3715 sym_op->cipher.data.offset = 0;
3716 sym_op->cipher.data.length = QUOTE_512_BYTES;
3718 /* Process crypto operation */
3719 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3721 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
3723 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3724 "crypto operation processing failed");
3727 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3728 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
3731 "Ciphertext data not as expected");
3733 return TEST_SUCCESS;
3737 test_null_auth_only_operation(void)
3739 struct crypto_testsuite_params *ts_params = &testsuite_params;
3740 struct crypto_unittest_params *ut_params = &unittest_params;
3742 /* Generate test mbuf data and space for digest */
3743 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
3744 catch_22_quote, QUOTE_512_BYTES, 0);
3746 /* Setup HMAC Parameters */
3747 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3748 ut_params->auth_xform.next = NULL;
3750 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
3751 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3753 /* Create Crypto session*/
3754 ut_params->sess = rte_cryptodev_sym_session_create(
3755 ts_params->valid_devs[0], &ut_params->auth_xform);
3756 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3758 /* Generate Crypto op data structure */
3759 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3760 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3761 TEST_ASSERT_NOT_NULL(ut_params->op,
3762 "Failed to allocate symmetric crypto operation struct");
3764 /* Set crypto operation data parameters */
3765 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3767 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3769 sym_op->m_src = ut_params->ibuf;
3771 sym_op->auth.data.offset = 0;
3772 sym_op->auth.data.length = QUOTE_512_BYTES;
3774 /* Process crypto operation */
3775 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3777 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
3779 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3780 "crypto operation processing failed");
3782 return TEST_SUCCESS;
3786 test_null_cipher_auth_operation(void)
3788 struct crypto_testsuite_params *ts_params = &testsuite_params;
3789 struct crypto_unittest_params *ut_params = &unittest_params;
3791 /* Generate test mbuf data and space for digest */
3792 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
3793 catch_22_quote, QUOTE_512_BYTES, 0);
3795 /* Setup Cipher Parameters */
3796 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3797 ut_params->cipher_xform.next = &ut_params->auth_xform;
3799 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
3800 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3802 /* Setup HMAC Parameters */
3803 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3804 ut_params->auth_xform.next = NULL;
3806 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
3807 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3809 /* Create Crypto session*/
3810 ut_params->sess = rte_cryptodev_sym_session_create(
3811 ts_params->valid_devs[0], &ut_params->cipher_xform);
3812 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3814 /* Generate Crypto op data structure */
3815 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3816 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3817 TEST_ASSERT_NOT_NULL(ut_params->op,
3818 "Failed to allocate symmetric crypto operation struct");
3820 /* Set crypto operation data parameters */
3821 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3823 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3825 sym_op->m_src = ut_params->ibuf;
3827 sym_op->cipher.data.offset = 0;
3828 sym_op->cipher.data.length = QUOTE_512_BYTES;
3830 sym_op->auth.data.offset = 0;
3831 sym_op->auth.data.length = QUOTE_512_BYTES;
3833 /* Process crypto operation */
3834 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3836 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
3838 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3839 "crypto operation processing failed");
3842 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3843 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
3846 "Ciphertext data not as expected");
3848 return TEST_SUCCESS;
3852 test_null_auth_cipher_operation(void)
3854 struct crypto_testsuite_params *ts_params = &testsuite_params;
3855 struct crypto_unittest_params *ut_params = &unittest_params;
3857 /* Generate test mbuf data and space for digest */
3858 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
3859 catch_22_quote, QUOTE_512_BYTES, 0);
3861 /* Setup Cipher Parameters */
3862 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3863 ut_params->cipher_xform.next = NULL;
3865 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
3866 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3868 /* Setup HMAC Parameters */
3869 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3870 ut_params->auth_xform.next = &ut_params->cipher_xform;
3872 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
3873 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3875 /* Create Crypto session*/
3876 ut_params->sess = rte_cryptodev_sym_session_create(
3877 ts_params->valid_devs[0], &ut_params->cipher_xform);
3878 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3880 /* Generate Crypto op data structure */
3881 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
3882 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
3883 TEST_ASSERT_NOT_NULL(ut_params->op,
3884 "Failed to allocate symmetric crypto operation struct");
3886 /* Set crypto operation data parameters */
3887 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
3889 struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
3891 sym_op->m_src = ut_params->ibuf;
3893 sym_op->cipher.data.offset = 0;
3894 sym_op->cipher.data.length = QUOTE_512_BYTES;
3896 sym_op->auth.data.offset = 0;
3897 sym_op->auth.data.length = QUOTE_512_BYTES;
3899 /* Process crypto operation */
3900 ut_params->op = process_crypto_request(ts_params->valid_devs[0],
3902 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
3904 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
3905 "crypto operation processing failed");
3908 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3909 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
3912 "Ciphertext data not as expected");
3914 return TEST_SUCCESS;
3919 test_null_invalid_operation(void)
3921 struct crypto_testsuite_params *ts_params = &testsuite_params;
3922 struct crypto_unittest_params *ut_params = &unittest_params;
3924 /* Setup Cipher Parameters */
3925 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3926 ut_params->cipher_xform.next = NULL;
3928 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
3929 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3931 /* Create Crypto session*/
3932 ut_params->sess = rte_cryptodev_sym_session_create(
3933 ts_params->valid_devs[0], &ut_params->cipher_xform);
3934 TEST_ASSERT_NULL(ut_params->sess,
3935 "Session creation succeeded unexpectedly");
3938 /* Setup HMAC Parameters */
3939 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3940 ut_params->auth_xform.next = NULL;
3942 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
3943 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3945 /* Create Crypto session*/
3946 ut_params->sess = rte_cryptodev_sym_session_create(
3947 ts_params->valid_devs[0], &ut_params->auth_xform);
3948 TEST_ASSERT_NULL(ut_params->sess,
3949 "Session creation succeeded unexpectedly");
3951 return TEST_SUCCESS;
3955 #define NULL_BURST_LENGTH (32)
3958 test_null_burst_operation(void)
3960 struct crypto_testsuite_params *ts_params = &testsuite_params;
3961 struct crypto_unittest_params *ut_params = &unittest_params;
3963 unsigned i, burst_len = NULL_BURST_LENGTH;
3965 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
3966 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
3968 /* Setup Cipher Parameters */
3969 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
3970 ut_params->cipher_xform.next = &ut_params->auth_xform;
3972 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
3973 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3975 /* Setup HMAC Parameters */
3976 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
3977 ut_params->auth_xform.next = NULL;
3979 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
3980 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
3982 /* Create Crypto session*/
3983 ut_params->sess = rte_cryptodev_sym_session_create(
3984 ts_params->valid_devs[0], &ut_params->cipher_xform);
3985 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
3987 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3988 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
3989 burst_len, "failed to generate burst of crypto ops");
3991 /* Generate an operation for each mbuf in burst */
3992 for (i = 0; i < burst_len; i++) {
3993 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
3995 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
3997 unsigned *data = (unsigned *)rte_pktmbuf_append(m,
4001 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
4003 burst[i]->sym->m_src = m;
4006 /* Process crypto operation */
4007 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
4008 0, burst, burst_len),
4010 "Error enqueuing burst");
4012 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
4013 0, burst_dequeued, burst_len),
4015 "Error dequeuing burst");
4018 for (i = 0; i < burst_len; i++) {
4020 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
4021 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
4023 "data not as expected");
4025 rte_pktmbuf_free(burst[i]->sym->m_src);
4026 rte_crypto_op_free(burst[i]);
4029 return TEST_SUCCESS;
4035 static struct unit_test_suite cryptodev_qat_testsuite = {
4036 .suite_name = "Crypto QAT Unit Test Suite",
4037 .setup = testsuite_setup,
4038 .teardown = testsuite_teardown,
4039 .unit_test_cases = {
4040 TEST_CASE_ST(ut_setup, ut_teardown,
4041 test_device_configure_invalid_dev_id),
4042 TEST_CASE_ST(ut_setup, ut_teardown,
4043 test_device_configure_invalid_queue_pair_ids),
4044 TEST_CASE_ST(ut_setup, ut_teardown,
4045 test_queue_pair_descriptor_setup),
4046 TEST_CASE_ST(ut_setup, ut_teardown,
4047 test_multi_session),
4049 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_qat_all),
4050 TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
4052 /** AES GCM Authenticated Encryption */
4053 TEST_CASE_ST(ut_setup, ut_teardown,
4054 test_mb_AES_GCM_authenticated_encryption_test_case_1),
4055 TEST_CASE_ST(ut_setup, ut_teardown,
4056 test_mb_AES_GCM_authenticated_encryption_test_case_2),
4057 TEST_CASE_ST(ut_setup, ut_teardown,
4058 test_mb_AES_GCM_authenticated_encryption_test_case_3),
4059 TEST_CASE_ST(ut_setup, ut_teardown,
4060 test_mb_AES_GCM_authenticated_encryption_test_case_4),
4061 TEST_CASE_ST(ut_setup, ut_teardown,
4062 test_mb_AES_GCM_authenticated_encryption_test_case_5),
4063 TEST_CASE_ST(ut_setup, ut_teardown,
4064 test_mb_AES_GCM_authenticated_encryption_test_case_6),
4065 TEST_CASE_ST(ut_setup, ut_teardown,
4066 test_mb_AES_GCM_authenticated_encryption_test_case_7),
4068 /** AES GCM Authenticated Decryption */
4069 TEST_CASE_ST(ut_setup, ut_teardown,
4070 test_mb_AES_GCM_authenticated_decryption_test_case_1),
4071 TEST_CASE_ST(ut_setup, ut_teardown,
4072 test_mb_AES_GCM_authenticated_decryption_test_case_2),
4073 TEST_CASE_ST(ut_setup, ut_teardown,
4074 test_mb_AES_GCM_authenticated_decryption_test_case_3),
4075 TEST_CASE_ST(ut_setup, ut_teardown,
4076 test_mb_AES_GCM_authenticated_decryption_test_case_4),
4077 TEST_CASE_ST(ut_setup, ut_teardown,
4078 test_mb_AES_GCM_authenticated_decryption_test_case_5),
4079 TEST_CASE_ST(ut_setup, ut_teardown,
4080 test_mb_AES_GCM_authenticated_decryption_test_case_6),
4081 TEST_CASE_ST(ut_setup, ut_teardown,
4082 test_mb_AES_GCM_authenticated_decryption_test_case_7),
4084 /** Snow3G encrypt only (UEA2) */
4085 TEST_CASE_ST(ut_setup, ut_teardown,
4086 test_snow3g_encryption_test_case_1),
4087 TEST_CASE_ST(ut_setup, ut_teardown,
4088 test_snow3g_encryption_test_case_2),
4089 TEST_CASE_ST(ut_setup, ut_teardown,
4090 test_snow3g_encryption_test_case_3),
4091 TEST_CASE_ST(ut_setup, ut_teardown,
4092 test_snow3g_encryption_test_case_4),
4093 TEST_CASE_ST(ut_setup, ut_teardown,
4094 test_snow3g_encryption_test_case_5),
4096 TEST_CASE_ST(ut_setup, ut_teardown,
4097 test_snow3g_encryption_test_case_1_oop),
4098 TEST_CASE_ST(ut_setup, ut_teardown,
4099 test_snow3g_decryption_test_case_1_oop),
4101 /** Snow3G decrypt only (UEA2) */
4102 TEST_CASE_ST(ut_setup, ut_teardown,
4103 test_snow3g_decryption_test_case_1),
4104 TEST_CASE_ST(ut_setup, ut_teardown,
4105 test_snow3g_decryption_test_case_2),
4106 TEST_CASE_ST(ut_setup, ut_teardown,
4107 test_snow3g_decryption_test_case_3),
4108 TEST_CASE_ST(ut_setup, ut_teardown,
4109 test_snow3g_decryption_test_case_4),
4110 TEST_CASE_ST(ut_setup, ut_teardown,
4111 test_snow3g_decryption_test_case_5),
4112 TEST_CASE_ST(ut_setup, ut_teardown,
4113 test_snow3g_hash_generate_test_case_1),
4114 TEST_CASE_ST(ut_setup, ut_teardown,
4115 test_snow3g_hash_generate_test_case_2),
4116 TEST_CASE_ST(ut_setup, ut_teardown,
4117 test_snow3g_hash_generate_test_case_3),
4118 TEST_CASE_ST(ut_setup, ut_teardown,
4119 test_snow3g_hash_verify_test_case_1),
4120 TEST_CASE_ST(ut_setup, ut_teardown,
4121 test_snow3g_hash_verify_test_case_2),
4122 TEST_CASE_ST(ut_setup, ut_teardown,
4123 test_snow3g_hash_verify_test_case_3),
4124 TEST_CASE_ST(ut_setup, ut_teardown,
4125 test_snow3g_authenticated_encryption_test_case_1),
4126 TEST_CASE_ST(ut_setup, ut_teardown,
4127 test_snow3g_encrypted_authentication_test_case_1),
4129 /** HMAC_MD5 Authentication */
4130 TEST_CASE_ST(ut_setup, ut_teardown,
4131 test_MD5_HMAC_generate_case_1),
4132 TEST_CASE_ST(ut_setup, ut_teardown,
4133 test_MD5_HMAC_verify_case_1),
4134 TEST_CASE_ST(ut_setup, ut_teardown,
4135 test_MD5_HMAC_generate_case_2),
4136 TEST_CASE_ST(ut_setup, ut_teardown,
4137 test_MD5_HMAC_verify_case_2),
4139 TEST_CASES_END() /**< NULL terminate unit test array */
4143 static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
4144 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
4145 .setup = testsuite_setup,
4146 .teardown = testsuite_teardown,
4147 .unit_test_cases = {
4148 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_mb_all),
4150 TEST_CASES_END() /**< NULL terminate unit test array */
4154 static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
4155 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
4156 .setup = testsuite_setup,
4157 .teardown = testsuite_teardown,
4158 .unit_test_cases = {
4159 /** AES GCM Authenticated Encryption */
4160 TEST_CASE_ST(ut_setup, ut_teardown,
4161 test_mb_AES_GCM_authenticated_encryption_test_case_1),
4162 TEST_CASE_ST(ut_setup, ut_teardown,
4163 test_mb_AES_GCM_authenticated_encryption_test_case_2),
4164 TEST_CASE_ST(ut_setup, ut_teardown,
4165 test_mb_AES_GCM_authenticated_encryption_test_case_3),
4166 TEST_CASE_ST(ut_setup, ut_teardown,
4167 test_mb_AES_GCM_authenticated_encryption_test_case_4),
4168 TEST_CASE_ST(ut_setup, ut_teardown,
4169 test_mb_AES_GCM_authenticated_encryption_test_case_5),
4170 TEST_CASE_ST(ut_setup, ut_teardown,
4171 test_mb_AES_GCM_authenticated_encryption_test_case_6),
4172 TEST_CASE_ST(ut_setup, ut_teardown,
4173 test_mb_AES_GCM_authenticated_encryption_test_case_7),
4175 /** AES GCM Authenticated Decryption */
4176 TEST_CASE_ST(ut_setup, ut_teardown,
4177 test_mb_AES_GCM_authenticated_decryption_test_case_1),
4178 TEST_CASE_ST(ut_setup, ut_teardown,
4179 test_mb_AES_GCM_authenticated_decryption_test_case_2),
4180 TEST_CASE_ST(ut_setup, ut_teardown,
4181 test_mb_AES_GCM_authenticated_decryption_test_case_3),
4182 TEST_CASE_ST(ut_setup, ut_teardown,
4183 test_mb_AES_GCM_authenticated_decryption_test_case_4),
4184 TEST_CASE_ST(ut_setup, ut_teardown,
4185 test_mb_AES_GCM_authenticated_decryption_test_case_5),
4186 TEST_CASE_ST(ut_setup, ut_teardown,
4187 test_mb_AES_GCM_authenticated_decryption_test_case_6),
4188 TEST_CASE_ST(ut_setup, ut_teardown,
4189 test_mb_AES_GCM_authenticated_decryption_test_case_7),
4191 TEST_CASES_END() /**< NULL terminate unit test array */
4195 static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
4196 .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
4197 .setup = testsuite_setup,
4198 .teardown = testsuite_teardown,
4199 .unit_test_cases = {
4200 /** KASUMI encrypt only (UEA1) */
4201 TEST_CASE_ST(ut_setup, ut_teardown,
4202 test_kasumi_encryption_test_case_1),
4203 TEST_CASE_ST(ut_setup, ut_teardown,
4204 test_kasumi_encryption_test_case_2),
4205 TEST_CASE_ST(ut_setup, ut_teardown,
4206 test_kasumi_encryption_test_case_3),
4207 TEST_CASE_ST(ut_setup, ut_teardown,
4208 test_kasumi_encryption_test_case_4),
4209 TEST_CASE_ST(ut_setup, ut_teardown,
4210 test_kasumi_encryption_test_case_5),
4211 /** KASUMI decrypt only (UEA1) */
4212 TEST_CASE_ST(ut_setup, ut_teardown,
4213 test_kasumi_decryption_test_case_1),
4214 TEST_CASE_ST(ut_setup, ut_teardown,
4215 test_kasumi_decryption_test_case_2),
4216 TEST_CASE_ST(ut_setup, ut_teardown,
4217 test_kasumi_decryption_test_case_3),
4218 TEST_CASE_ST(ut_setup, ut_teardown,
4219 test_kasumi_decryption_test_case_4),
4220 TEST_CASE_ST(ut_setup, ut_teardown,
4221 test_kasumi_decryption_test_case_5),
4223 TEST_CASE_ST(ut_setup, ut_teardown,
4224 test_kasumi_encryption_test_case_1_oop),
4225 TEST_CASE_ST(ut_setup, ut_teardown,
4226 test_kasumi_decryption_test_case_1_oop),
4228 /** KASUMI hash only (UIA1) */
4229 TEST_CASE_ST(ut_setup, ut_teardown,
4230 test_kasumi_hash_generate_test_case_1),
4231 TEST_CASE_ST(ut_setup, ut_teardown,
4232 test_kasumi_hash_generate_test_case_2),
4233 TEST_CASE_ST(ut_setup, ut_teardown,
4234 test_kasumi_hash_generate_test_case_3),
4235 TEST_CASE_ST(ut_setup, ut_teardown,
4236 test_kasumi_hash_generate_test_case_4),
4237 TEST_CASE_ST(ut_setup, ut_teardown,
4238 test_kasumi_hash_generate_test_case_5),
4239 TEST_CASE_ST(ut_setup, ut_teardown,
4240 test_kasumi_hash_verify_test_case_1),
4241 TEST_CASE_ST(ut_setup, ut_teardown,
4242 test_kasumi_hash_verify_test_case_2),
4243 TEST_CASE_ST(ut_setup, ut_teardown,
4244 test_kasumi_hash_verify_test_case_3),
4245 TEST_CASE_ST(ut_setup, ut_teardown,
4246 test_kasumi_hash_verify_test_case_4),
4247 TEST_CASE_ST(ut_setup, ut_teardown,
4248 test_kasumi_hash_verify_test_case_5),
4250 TEST_CASES_END() /**< NULL terminate unit test array */
4253 static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
4254 .suite_name = "Crypto Device SW Snow3G Unit Test Suite",
4255 .setup = testsuite_setup,
4256 .teardown = testsuite_teardown,
4257 .unit_test_cases = {
4258 /** Snow3G encrypt only (UEA2) */
4259 TEST_CASE_ST(ut_setup, ut_teardown,
4260 test_snow3g_encryption_test_case_1),
4261 TEST_CASE_ST(ut_setup, ut_teardown,
4262 test_snow3g_encryption_test_case_2),
4263 TEST_CASE_ST(ut_setup, ut_teardown,
4264 test_snow3g_encryption_test_case_3),
4265 TEST_CASE_ST(ut_setup, ut_teardown,
4266 test_snow3g_encryption_test_case_4),
4267 TEST_CASE_ST(ut_setup, ut_teardown,
4268 test_snow3g_encryption_test_case_5),
4270 TEST_CASE_ST(ut_setup, ut_teardown,
4271 test_snow3g_encryption_test_case_1_oop),
4272 TEST_CASE_ST(ut_setup, ut_teardown,
4273 test_snow3g_decryption_test_case_1_oop),
4275 TEST_CASE_ST(ut_setup, ut_teardown,
4276 test_snow3g_encryption_test_case_1_offset_oop),
4278 /** Snow3G decrypt only (UEA2) */
4279 TEST_CASE_ST(ut_setup, ut_teardown,
4280 test_snow3g_decryption_test_case_1),
4281 TEST_CASE_ST(ut_setup, ut_teardown,
4282 test_snow3g_decryption_test_case_2),
4283 TEST_CASE_ST(ut_setup, ut_teardown,
4284 test_snow3g_decryption_test_case_3),
4285 TEST_CASE_ST(ut_setup, ut_teardown,
4286 test_snow3g_decryption_test_case_4),
4287 TEST_CASE_ST(ut_setup, ut_teardown,
4288 test_snow3g_decryption_test_case_5),
4289 TEST_CASE_ST(ut_setup, ut_teardown,
4290 test_snow3g_hash_generate_test_case_1),
4291 TEST_CASE_ST(ut_setup, ut_teardown,
4292 test_snow3g_hash_generate_test_case_2),
4293 TEST_CASE_ST(ut_setup, ut_teardown,
4294 test_snow3g_hash_generate_test_case_3),
4295 /* Tests with buffers which length is not byte-aligned */
4296 TEST_CASE_ST(ut_setup, ut_teardown,
4297 test_snow3g_hash_generate_test_case_4),
4298 TEST_CASE_ST(ut_setup, ut_teardown,
4299 test_snow3g_hash_generate_test_case_5),
4300 TEST_CASE_ST(ut_setup, ut_teardown,
4301 test_snow3g_hash_generate_test_case_6),
4302 TEST_CASE_ST(ut_setup, ut_teardown,
4303 test_snow3g_hash_verify_test_case_1),
4304 TEST_CASE_ST(ut_setup, ut_teardown,
4305 test_snow3g_hash_verify_test_case_2),
4306 TEST_CASE_ST(ut_setup, ut_teardown,
4307 test_snow3g_hash_verify_test_case_3),
4308 /* Tests with buffers which length is not byte-aligned */
4309 TEST_CASE_ST(ut_setup, ut_teardown,
4310 test_snow3g_hash_verify_test_case_4),
4311 TEST_CASE_ST(ut_setup, ut_teardown,
4312 test_snow3g_hash_verify_test_case_5),
4313 TEST_CASE_ST(ut_setup, ut_teardown,
4314 test_snow3g_hash_verify_test_case_6),
4315 TEST_CASE_ST(ut_setup, ut_teardown,
4316 test_snow3g_authenticated_encryption_test_case_1),
4317 TEST_CASE_ST(ut_setup, ut_teardown,
4318 test_snow3g_encrypted_authentication_test_case_1),
4320 TEST_CASES_END() /**< NULL terminate unit test array */
4324 static struct unit_test_suite cryptodev_null_testsuite = {
4325 .suite_name = "Crypto Device NULL Unit Test Suite",
4326 .setup = testsuite_setup,
4327 .teardown = testsuite_teardown,
4328 .unit_test_cases = {
4329 TEST_CASE_ST(ut_setup, ut_teardown,
4330 test_null_auth_only_operation),
4331 TEST_CASE_ST(ut_setup, ut_teardown,
4332 test_null_cipher_only_operation),
4333 TEST_CASE_ST(ut_setup, ut_teardown,
4334 test_null_cipher_auth_operation),
4335 TEST_CASE_ST(ut_setup, ut_teardown,
4336 test_null_auth_cipher_operation),
4337 TEST_CASE_ST(ut_setup, ut_teardown,
4338 test_null_invalid_operation),
4339 TEST_CASE_ST(ut_setup, ut_teardown,
4340 test_null_burst_operation),
4342 TEST_CASES_END() /**< NULL terminate unit test array */
4347 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
4349 gbl_cryptodev_type = RTE_CRYPTODEV_QAT_SYM_PMD;
4350 return unit_test_suite_runner(&cryptodev_qat_testsuite);
4354 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
4356 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
4358 return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
4362 test_cryptodev_aesni_gcm(void)
4364 gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;
4366 return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
4370 test_cryptodev_null(void)
4372 gbl_cryptodev_type = RTE_CRYPTODEV_NULL_PMD;
4374 return unit_test_suite_runner(&cryptodev_null_testsuite);
4378 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
4380 gbl_cryptodev_type = RTE_CRYPTODEV_SNOW3G_PMD;
4382 return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
4386 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
4388 gbl_cryptodev_type = RTE_CRYPTODEV_KASUMI_PMD;
4390 return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
4393 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
4394 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
4395 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
4396 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
4397 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
4398 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);