1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2015-2019 Intel Corporation 3 */ 4 5 #include <time.h> 6 7 #include <rte_common.h> 8 #include <rte_hexdump.h> 9 #include <rte_mbuf.h> 10 #include <rte_malloc.h> 11 #include <rte_memcpy.h> 12 #include <rte_pause.h> 13 #include <rte_bus_vdev.h> 14 15 #include <rte_crypto.h> 16 #include <rte_cryptodev.h> 17 #include <rte_cryptodev_pmd.h> 18 #include <rte_string_fns.h> 19 20 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER 21 #include <rte_cryptodev_scheduler.h> 22 #include <rte_cryptodev_scheduler_operations.h> 23 #endif 24 25 #include <rte_lcore.h> 26 27 #include "test.h" 28 #include "test_cryptodev.h" 29 30 #include "test_cryptodev_blockcipher.h" 31 #include "test_cryptodev_aes_test_vectors.h" 32 #include "test_cryptodev_des_test_vectors.h" 33 #include "test_cryptodev_hash_test_vectors.h" 34 #include "test_cryptodev_kasumi_test_vectors.h" 35 #include "test_cryptodev_kasumi_hash_test_vectors.h" 36 #include "test_cryptodev_snow3g_test_vectors.h" 37 #include "test_cryptodev_snow3g_hash_test_vectors.h" 38 #include "test_cryptodev_zuc_test_vectors.h" 39 #include "test_cryptodev_aead_test_vectors.h" 40 #include "test_cryptodev_hmac_test_vectors.h" 41 #include "test_cryptodev_mixed_test_vectors.h" 42 #ifdef RTE_LIBRTE_SECURITY 43 #include "test_cryptodev_security_pdcp_test_vectors.h" 44 #include "test_cryptodev_security_pdcp_test_func.h" 45 #endif 46 47 #define VDEV_ARGS_SIZE 100 48 #define MAX_NB_SESSIONS 4 49 50 #define IN_PLACE 0 51 #define OUT_OF_PLACE 1 52 53 static int gbl_driver_id; 54 55 struct crypto_testsuite_params { 56 struct rte_mempool *mbuf_pool; 57 struct rte_mempool *large_mbuf_pool; 58 struct rte_mempool *op_mpool; 59 struct rte_mempool *session_mpool; 60 struct rte_mempool *session_priv_mpool; 61 struct rte_cryptodev_config conf; 62 struct rte_cryptodev_qp_conf qp_conf; 63 64 uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; 65 uint8_t valid_dev_count; 66 }; 67 68 struct crypto_unittest_params { 69 struct rte_crypto_sym_xform cipher_xform; 70 struct rte_crypto_sym_xform auth_xform; 71 struct rte_crypto_sym_xform aead_xform; 72 73 union { 74 struct rte_cryptodev_sym_session *sess; 75 #ifdef RTE_LIBRTE_SECURITY 76 struct rte_security_session *sec_session; 77 #endif 78 }; 79 #ifdef RTE_LIBRTE_SECURITY 80 enum rte_security_session_action_type type; 81 #endif 82 struct rte_crypto_op *op; 83 84 struct rte_mbuf *obuf, *ibuf; 85 86 uint8_t *digest; 87 }; 88 89 #define ALIGN_POW2_ROUNDUP(num, align) \ 90 (((num) + (align) - 1) & ~((align) - 1)) 91 92 /* 93 * Forward declarations. 94 */ 95 static int 96 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params( 97 struct crypto_unittest_params *ut_params, uint8_t *cipher_key, 98 uint8_t *hmac_key); 99 100 static int 101 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess, 102 struct crypto_unittest_params *ut_params, 103 struct crypto_testsuite_params *ts_param, 104 const uint8_t *cipher, 105 const uint8_t *digest, 106 const uint8_t *iv); 107 108 static struct rte_mbuf * 109 setup_test_string(struct rte_mempool *mpool, 110 const char *string, size_t len, uint8_t blocksize) 111 { 112 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool); 113 size_t t_len = len - (blocksize ? (len % blocksize) : 0); 114 115 memset(m->buf_addr, 0, m->buf_len); 116 if (m) { 117 char *dst = rte_pktmbuf_append(m, t_len); 118 119 if (!dst) { 120 rte_pktmbuf_free(m); 121 return NULL; 122 } 123 if (string != NULL) 124 rte_memcpy(dst, string, t_len); 125 else 126 memset(dst, 0, t_len); 127 } 128 129 return m; 130 } 131 132 /* Get number of bytes in X bits (rounding up) */ 133 static uint32_t 134 ceil_byte_length(uint32_t num_bits) 135 { 136 if (num_bits % 8) 137 return ((num_bits >> 3) + 1); 138 else 139 return (num_bits >> 3); 140 } 141 142 static struct rte_crypto_op * 143 process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op) 144 { 145 if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) { 146 RTE_LOG(ERR, USER1, "Error sending packet for encryption\n"); 147 return NULL; 148 } 149 150 op = NULL; 151 152 while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0) 153 rte_pause(); 154 155 if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) { 156 RTE_LOG(DEBUG, USER1, "Operation status %d\n", op->status); 157 return NULL; 158 } 159 160 return op; 161 } 162 163 static struct crypto_testsuite_params testsuite_params = { NULL }; 164 static struct crypto_unittest_params unittest_params; 165 166 static int 167 testsuite_setup(void) 168 { 169 struct crypto_testsuite_params *ts_params = &testsuite_params; 170 struct rte_cryptodev_info info; 171 uint32_t i = 0, nb_devs, dev_id; 172 int ret; 173 uint16_t qp_id; 174 175 memset(ts_params, 0, sizeof(*ts_params)); 176 177 ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL"); 178 if (ts_params->mbuf_pool == NULL) { 179 /* Not already created so create */ 180 ts_params->mbuf_pool = rte_pktmbuf_pool_create( 181 "CRYPTO_MBUFPOOL", 182 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE, 183 rte_socket_id()); 184 if (ts_params->mbuf_pool == NULL) { 185 RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n"); 186 return TEST_FAILED; 187 } 188 } 189 190 ts_params->large_mbuf_pool = rte_mempool_lookup( 191 "CRYPTO_LARGE_MBUFPOOL"); 192 if (ts_params->large_mbuf_pool == NULL) { 193 /* Not already created so create */ 194 ts_params->large_mbuf_pool = rte_pktmbuf_pool_create( 195 "CRYPTO_LARGE_MBUFPOOL", 196 1, 0, 0, UINT16_MAX, 197 rte_socket_id()); 198 if (ts_params->large_mbuf_pool == NULL) { 199 RTE_LOG(ERR, USER1, 200 "Can't create CRYPTO_LARGE_MBUFPOOL\n"); 201 return TEST_FAILED; 202 } 203 } 204 205 ts_params->op_mpool = rte_crypto_op_pool_create( 206 "MBUF_CRYPTO_SYM_OP_POOL", 207 RTE_CRYPTO_OP_TYPE_SYMMETRIC, 208 NUM_MBUFS, MBUF_CACHE_SIZE, 209 DEFAULT_NUM_XFORMS * 210 sizeof(struct rte_crypto_sym_xform) + 211 MAXIMUM_IV_LENGTH, 212 rte_socket_id()); 213 if (ts_params->op_mpool == NULL) { 214 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n"); 215 return TEST_FAILED; 216 } 217 218 /* Create an AESNI MB device if required */ 219 if (gbl_driver_id == rte_cryptodev_driver_id_get( 220 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) { 221 nb_devs = rte_cryptodev_device_count_by_driver( 222 rte_cryptodev_driver_id_get( 223 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))); 224 if (nb_devs < 1) { 225 ret = rte_vdev_init( 226 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL); 227 228 TEST_ASSERT(ret == 0, 229 "Failed to create instance of" 230 " pmd : %s", 231 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)); 232 } 233 } 234 235 /* Create an AESNI GCM device if required */ 236 if (gbl_driver_id == rte_cryptodev_driver_id_get( 237 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))) { 238 nb_devs = rte_cryptodev_device_count_by_driver( 239 rte_cryptodev_driver_id_get( 240 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD))); 241 if (nb_devs < 1) { 242 TEST_ASSERT_SUCCESS(rte_vdev_init( 243 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL), 244 "Failed to create instance of" 245 " pmd : %s", 246 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)); 247 } 248 } 249 250 /* Create a SNOW 3G device if required */ 251 if (gbl_driver_id == rte_cryptodev_driver_id_get( 252 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))) { 253 nb_devs = rte_cryptodev_device_count_by_driver( 254 rte_cryptodev_driver_id_get( 255 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD))); 256 if (nb_devs < 1) { 257 TEST_ASSERT_SUCCESS(rte_vdev_init( 258 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL), 259 "Failed to create instance of" 260 " pmd : %s", 261 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)); 262 } 263 } 264 265 /* Create a KASUMI device if required */ 266 if (gbl_driver_id == rte_cryptodev_driver_id_get( 267 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))) { 268 nb_devs = rte_cryptodev_device_count_by_driver( 269 rte_cryptodev_driver_id_get( 270 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD))); 271 if (nb_devs < 1) { 272 TEST_ASSERT_SUCCESS(rte_vdev_init( 273 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL), 274 "Failed to create instance of" 275 " pmd : %s", 276 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)); 277 } 278 } 279 280 /* Create a ZUC device if required */ 281 if (gbl_driver_id == rte_cryptodev_driver_id_get( 282 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) { 283 nb_devs = rte_cryptodev_device_count_by_driver( 284 rte_cryptodev_driver_id_get( 285 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))); 286 if (nb_devs < 1) { 287 TEST_ASSERT_SUCCESS(rte_vdev_init( 288 RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL), 289 "Failed to create instance of" 290 " pmd : %s", 291 RTE_STR(CRYPTODEV_NAME_ZUC_PMD)); 292 } 293 } 294 295 /* Create a NULL device if required */ 296 if (gbl_driver_id == rte_cryptodev_driver_id_get( 297 RTE_STR(CRYPTODEV_NAME_NULL_PMD))) { 298 nb_devs = rte_cryptodev_device_count_by_driver( 299 rte_cryptodev_driver_id_get( 300 RTE_STR(CRYPTODEV_NAME_NULL_PMD))); 301 if (nb_devs < 1) { 302 ret = rte_vdev_init( 303 RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL); 304 305 TEST_ASSERT(ret == 0, 306 "Failed to create instance of" 307 " pmd : %s", 308 RTE_STR(CRYPTODEV_NAME_NULL_PMD)); 309 } 310 } 311 312 /* Create an OPENSSL device if required */ 313 if (gbl_driver_id == rte_cryptodev_driver_id_get( 314 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) { 315 nb_devs = rte_cryptodev_device_count_by_driver( 316 rte_cryptodev_driver_id_get( 317 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))); 318 if (nb_devs < 1) { 319 ret = rte_vdev_init( 320 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD), 321 NULL); 322 323 TEST_ASSERT(ret == 0, "Failed to create " 324 "instance of pmd : %s", 325 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)); 326 } 327 } 328 329 /* Create a ARMv8 device if required */ 330 if (gbl_driver_id == rte_cryptodev_driver_id_get( 331 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))) { 332 nb_devs = rte_cryptodev_device_count_by_driver( 333 rte_cryptodev_driver_id_get( 334 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD))); 335 if (nb_devs < 1) { 336 ret = rte_vdev_init( 337 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD), 338 NULL); 339 340 TEST_ASSERT(ret == 0, "Failed to create " 341 "instance of pmd : %s", 342 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)); 343 } 344 } 345 346 /* Create a MVSAM device if required */ 347 if (gbl_driver_id == rte_cryptodev_driver_id_get( 348 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD))) { 349 nb_devs = rte_cryptodev_device_count_by_driver( 350 rte_cryptodev_driver_id_get( 351 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD))); 352 if (nb_devs < 1) { 353 ret = rte_vdev_init( 354 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD), 355 NULL); 356 357 TEST_ASSERT(ret == 0, "Failed to create " 358 "instance of pmd : %s", 359 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)); 360 } 361 } 362 363 /* Create an CCP device if required */ 364 if (gbl_driver_id == rte_cryptodev_driver_id_get( 365 RTE_STR(CRYPTODEV_NAME_CCP_PMD))) { 366 nb_devs = rte_cryptodev_device_count_by_driver( 367 rte_cryptodev_driver_id_get( 368 RTE_STR(CRYPTODEV_NAME_CCP_PMD))); 369 if (nb_devs < 1) { 370 ret = rte_vdev_init( 371 RTE_STR(CRYPTODEV_NAME_CCP_PMD), 372 NULL); 373 374 TEST_ASSERT(ret == 0, "Failed to create " 375 "instance of pmd : %s", 376 RTE_STR(CRYPTODEV_NAME_CCP_PMD)); 377 } 378 } 379 380 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER 381 char vdev_args[VDEV_ARGS_SIZE] = {""}; 382 char temp_str[VDEV_ARGS_SIZE] = {"mode=multi-core," 383 "ordering=enable,name=cryptodev_test_scheduler,corelist="}; 384 uint16_t slave_core_count = 0; 385 uint16_t socket_id = 0; 386 387 if (gbl_driver_id == rte_cryptodev_driver_id_get( 388 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) { 389 390 /* Identify the Slave Cores 391 * Use 2 slave cores for the device args 392 */ 393 RTE_LCORE_FOREACH_SLAVE(i) { 394 if (slave_core_count > 1) 395 break; 396 snprintf(vdev_args, sizeof(vdev_args), 397 "%s%d", temp_str, i); 398 strcpy(temp_str, vdev_args); 399 strlcat(temp_str, ";", sizeof(temp_str)); 400 slave_core_count++; 401 socket_id = rte_lcore_to_socket_id(i); 402 } 403 if (slave_core_count != 2) { 404 RTE_LOG(ERR, USER1, 405 "Cryptodev scheduler test require at least " 406 "two slave cores to run. " 407 "Please use the correct coremask.\n"); 408 return TEST_FAILED; 409 } 410 strcpy(temp_str, vdev_args); 411 snprintf(vdev_args, sizeof(vdev_args), "%s,socket_id=%d", 412 temp_str, socket_id); 413 RTE_LOG(DEBUG, USER1, "vdev_args: %s\n", vdev_args); 414 nb_devs = rte_cryptodev_device_count_by_driver( 415 rte_cryptodev_driver_id_get( 416 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))); 417 if (nb_devs < 1) { 418 ret = rte_vdev_init( 419 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD), 420 vdev_args); 421 TEST_ASSERT(ret == 0, 422 "Failed to create instance %u of" 423 " pmd : %s", 424 i, RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)); 425 } 426 } 427 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */ 428 429 nb_devs = rte_cryptodev_count(); 430 if (nb_devs < 1) { 431 RTE_LOG(WARNING, USER1, "No crypto devices found?\n"); 432 return TEST_SKIPPED; 433 } 434 435 /* Create list of valid crypto devs */ 436 for (i = 0; i < nb_devs; i++) { 437 rte_cryptodev_info_get(i, &info); 438 if (info.driver_id == gbl_driver_id) 439 ts_params->valid_devs[ts_params->valid_dev_count++] = i; 440 } 441 442 if (ts_params->valid_dev_count < 1) 443 return TEST_FAILED; 444 445 /* Set up all the qps on the first of the valid devices found */ 446 447 dev_id = ts_params->valid_devs[0]; 448 449 rte_cryptodev_info_get(dev_id, &info); 450 451 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs; 452 ts_params->conf.socket_id = SOCKET_ID_ANY; 453 ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; 454 455 unsigned int session_size = 456 rte_cryptodev_sym_get_private_session_size(dev_id); 457 458 /* 459 * Create mempool with maximum number of sessions * 2, 460 * to include the session headers 461 */ 462 if (info.sym.max_nb_sessions != 0 && 463 info.sym.max_nb_sessions < MAX_NB_SESSIONS) { 464 RTE_LOG(ERR, USER1, "Device does not support " 465 "at least %u sessions\n", 466 MAX_NB_SESSIONS); 467 return TEST_FAILED; 468 } 469 470 ts_params->session_mpool = rte_cryptodev_sym_session_pool_create( 471 "test_sess_mp", MAX_NB_SESSIONS, 0, 0, 0, 472 SOCKET_ID_ANY); 473 TEST_ASSERT_NOT_NULL(ts_params->session_mpool, 474 "session mempool allocation failed"); 475 476 ts_params->session_priv_mpool = rte_mempool_create( 477 "test_sess_mp_priv", 478 MAX_NB_SESSIONS, 479 session_size, 480 0, 0, NULL, NULL, NULL, 481 NULL, SOCKET_ID_ANY, 482 0); 483 TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool, 484 "session mempool allocation failed"); 485 486 487 488 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, 489 &ts_params->conf), 490 "Failed to configure cryptodev %u with %u qps", 491 dev_id, ts_params->conf.nb_queue_pairs); 492 493 ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; 494 ts_params->qp_conf.mp_session = ts_params->session_mpool; 495 ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool; 496 497 for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) { 498 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 499 dev_id, qp_id, &ts_params->qp_conf, 500 rte_cryptodev_socket_id(dev_id)), 501 "Failed to setup queue pair %u on cryptodev %u", 502 qp_id, dev_id); 503 } 504 505 return TEST_SUCCESS; 506 } 507 508 static void 509 testsuite_teardown(void) 510 { 511 struct crypto_testsuite_params *ts_params = &testsuite_params; 512 513 if (ts_params->mbuf_pool != NULL) { 514 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n", 515 rte_mempool_avail_count(ts_params->mbuf_pool)); 516 } 517 518 if (ts_params->op_mpool != NULL) { 519 RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n", 520 rte_mempool_avail_count(ts_params->op_mpool)); 521 } 522 523 /* Free session mempools */ 524 if (ts_params->session_priv_mpool != NULL) { 525 rte_mempool_free(ts_params->session_priv_mpool); 526 ts_params->session_priv_mpool = NULL; 527 } 528 529 if (ts_params->session_mpool != NULL) { 530 rte_mempool_free(ts_params->session_mpool); 531 ts_params->session_mpool = NULL; 532 } 533 } 534 535 static int 536 ut_setup(void) 537 { 538 struct crypto_testsuite_params *ts_params = &testsuite_params; 539 struct crypto_unittest_params *ut_params = &unittest_params; 540 541 uint16_t qp_id; 542 543 /* Clear unit test parameters before running test */ 544 memset(ut_params, 0, sizeof(*ut_params)); 545 546 /* Reconfigure device to default parameters */ 547 ts_params->conf.socket_id = SOCKET_ID_ANY; 548 ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; 549 ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; 550 ts_params->qp_conf.mp_session = ts_params->session_mpool; 551 ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool; 552 553 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], 554 &ts_params->conf), 555 "Failed to configure cryptodev %u", 556 ts_params->valid_devs[0]); 557 558 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) { 559 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 560 ts_params->valid_devs[0], qp_id, 561 &ts_params->qp_conf, 562 rte_cryptodev_socket_id(ts_params->valid_devs[0])), 563 "Failed to setup queue pair %u on cryptodev %u", 564 qp_id, ts_params->valid_devs[0]); 565 } 566 567 568 rte_cryptodev_stats_reset(ts_params->valid_devs[0]); 569 570 /* Start the device */ 571 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]), 572 "Failed to start cryptodev %u", 573 ts_params->valid_devs[0]); 574 575 return TEST_SUCCESS; 576 } 577 578 static void 579 ut_teardown(void) 580 { 581 struct crypto_testsuite_params *ts_params = &testsuite_params; 582 struct crypto_unittest_params *ut_params = &unittest_params; 583 struct rte_cryptodev_stats stats; 584 585 /* free crypto session structure */ 586 #ifdef RTE_LIBRTE_SECURITY 587 if (ut_params->type == RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL) { 588 if (ut_params->sec_session) { 589 rte_security_session_destroy(rte_cryptodev_get_sec_ctx 590 (ts_params->valid_devs[0]), 591 ut_params->sec_session); 592 ut_params->sec_session = NULL; 593 } 594 } else 595 #endif 596 { 597 if (ut_params->sess) { 598 rte_cryptodev_sym_session_clear( 599 ts_params->valid_devs[0], 600 ut_params->sess); 601 rte_cryptodev_sym_session_free(ut_params->sess); 602 ut_params->sess = NULL; 603 } 604 } 605 606 /* free crypto operation structure */ 607 if (ut_params->op) 608 rte_crypto_op_free(ut_params->op); 609 610 /* 611 * free mbuf - both obuf and ibuf are usually the same, 612 * so check if they point at the same address is necessary, 613 * to avoid freeing the mbuf twice. 614 */ 615 if (ut_params->obuf) { 616 rte_pktmbuf_free(ut_params->obuf); 617 if (ut_params->ibuf == ut_params->obuf) 618 ut_params->ibuf = 0; 619 ut_params->obuf = 0; 620 } 621 if (ut_params->ibuf) { 622 rte_pktmbuf_free(ut_params->ibuf); 623 ut_params->ibuf = 0; 624 } 625 626 if (ts_params->mbuf_pool != NULL) 627 RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n", 628 rte_mempool_avail_count(ts_params->mbuf_pool)); 629 630 rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats); 631 632 /* Stop the device */ 633 rte_cryptodev_stop(ts_params->valid_devs[0]); 634 } 635 636 static int 637 test_device_configure_invalid_dev_id(void) 638 { 639 struct crypto_testsuite_params *ts_params = &testsuite_params; 640 uint16_t dev_id, num_devs = 0; 641 642 TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1, 643 "Need at least %d devices for test", 1); 644 645 /* valid dev_id values */ 646 dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1]; 647 648 /* Stop the device in case it's started so it can be configured */ 649 rte_cryptodev_stop(dev_id); 650 651 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf), 652 "Failed test for rte_cryptodev_configure: " 653 "invalid dev_num %u", dev_id); 654 655 /* invalid dev_id values */ 656 dev_id = num_devs; 657 658 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf), 659 "Failed test for rte_cryptodev_configure: " 660 "invalid dev_num %u", dev_id); 661 662 dev_id = 0xff; 663 664 TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf), 665 "Failed test for rte_cryptodev_configure:" 666 "invalid dev_num %u", dev_id); 667 668 return TEST_SUCCESS; 669 } 670 671 static int 672 test_device_configure_invalid_queue_pair_ids(void) 673 { 674 struct crypto_testsuite_params *ts_params = &testsuite_params; 675 uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs; 676 677 /* This test is for QAT and NITROX PMDs only */ 678 if (gbl_driver_id != rte_cryptodev_driver_id_get( 679 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)) && 680 gbl_driver_id != rte_cryptodev_driver_id_get( 681 RTE_STR(CRYPTODEV_NAME_NITROX_PMD))) 682 return -ENOTSUP; 683 684 /* Stop the device in case it's started so it can be configured */ 685 rte_cryptodev_stop(ts_params->valid_devs[0]); 686 687 /* valid - one queue pairs */ 688 ts_params->conf.nb_queue_pairs = 1; 689 690 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], 691 &ts_params->conf), 692 "Failed to configure cryptodev: dev_id %u, qp_id %u", 693 ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs); 694 695 696 /* valid - max value queue pairs */ 697 ts_params->conf.nb_queue_pairs = orig_nb_qps; 698 699 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], 700 &ts_params->conf), 701 "Failed to configure cryptodev: dev_id %u, qp_id %u", 702 ts_params->valid_devs[0], 703 ts_params->conf.nb_queue_pairs); 704 705 706 /* invalid - zero queue pairs */ 707 ts_params->conf.nb_queue_pairs = 0; 708 709 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], 710 &ts_params->conf), 711 "Failed test for rte_cryptodev_configure, dev_id %u," 712 " invalid qps: %u", 713 ts_params->valid_devs[0], 714 ts_params->conf.nb_queue_pairs); 715 716 717 /* invalid - max value supported by field queue pairs */ 718 ts_params->conf.nb_queue_pairs = UINT16_MAX; 719 720 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], 721 &ts_params->conf), 722 "Failed test for rte_cryptodev_configure, dev_id %u," 723 " invalid qps: %u", 724 ts_params->valid_devs[0], 725 ts_params->conf.nb_queue_pairs); 726 727 728 /* invalid - max value + 1 queue pairs */ 729 ts_params->conf.nb_queue_pairs = orig_nb_qps + 1; 730 731 TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], 732 &ts_params->conf), 733 "Failed test for rte_cryptodev_configure, dev_id %u," 734 " invalid qps: %u", 735 ts_params->valid_devs[0], 736 ts_params->conf.nb_queue_pairs); 737 738 /* revert to original testsuite value */ 739 ts_params->conf.nb_queue_pairs = orig_nb_qps; 740 741 return TEST_SUCCESS; 742 } 743 744 static int 745 test_queue_pair_descriptor_setup(void) 746 { 747 struct crypto_testsuite_params *ts_params = &testsuite_params; 748 struct rte_cryptodev_info dev_info; 749 struct rte_cryptodev_qp_conf qp_conf = { 750 .nb_descriptors = MAX_NUM_OPS_INFLIGHT 751 }; 752 753 uint16_t qp_id; 754 755 /* This test is for QAT PMD only */ 756 if (gbl_driver_id != rte_cryptodev_driver_id_get( 757 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD))) 758 return -ENOTSUP; 759 760 /* Stop the device in case it's started so it can be configured */ 761 rte_cryptodev_stop(ts_params->valid_devs[0]); 762 763 764 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 765 766 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], 767 &ts_params->conf), 768 "Failed to configure cryptodev %u", 769 ts_params->valid_devs[0]); 770 771 /* 772 * Test various ring sizes on this device. memzones can't be 773 * freed so are re-used if ring is released and re-created. 774 */ 775 qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/ 776 qp_conf.mp_session = ts_params->session_mpool; 777 qp_conf.mp_session_private = ts_params->session_priv_mpool; 778 779 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 780 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 781 ts_params->valid_devs[0], qp_id, &qp_conf, 782 rte_cryptodev_socket_id( 783 ts_params->valid_devs[0])), 784 "Failed test for " 785 "rte_cryptodev_queue_pair_setup: num_inflights " 786 "%u on qp %u on cryptodev %u", 787 qp_conf.nb_descriptors, qp_id, 788 ts_params->valid_devs[0]); 789 } 790 791 qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2); 792 793 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 794 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 795 ts_params->valid_devs[0], qp_id, &qp_conf, 796 rte_cryptodev_socket_id( 797 ts_params->valid_devs[0])), 798 "Failed test for" 799 " rte_cryptodev_queue_pair_setup: num_inflights" 800 " %u on qp %u on cryptodev %u", 801 qp_conf.nb_descriptors, qp_id, 802 ts_params->valid_devs[0]); 803 } 804 805 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */ 806 807 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 808 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 809 ts_params->valid_devs[0], qp_id, &qp_conf, 810 rte_cryptodev_socket_id( 811 ts_params->valid_devs[0])), 812 "Failed test for " 813 "rte_cryptodev_queue_pair_setup: num_inflights" 814 " %u on qp %u on cryptodev %u", 815 qp_conf.nb_descriptors, qp_id, 816 ts_params->valid_devs[0]); 817 } 818 819 /* invalid number of descriptors - max supported + 2 */ 820 qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2; 821 822 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 823 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup( 824 ts_params->valid_devs[0], qp_id, &qp_conf, 825 rte_cryptodev_socket_id( 826 ts_params->valid_devs[0])), 827 "Unexpectedly passed test for " 828 "rte_cryptodev_queue_pair_setup:" 829 "num_inflights %u on qp %u on cryptodev %u", 830 qp_conf.nb_descriptors, qp_id, 831 ts_params->valid_devs[0]); 832 } 833 834 /* invalid number of descriptors - max value of parameter */ 835 qp_conf.nb_descriptors = UINT32_MAX-1; 836 837 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 838 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup( 839 ts_params->valid_devs[0], qp_id, &qp_conf, 840 rte_cryptodev_socket_id( 841 ts_params->valid_devs[0])), 842 "Unexpectedly passed test for " 843 "rte_cryptodev_queue_pair_setup:" 844 "num_inflights %u on qp %u on cryptodev %u", 845 qp_conf.nb_descriptors, qp_id, 846 ts_params->valid_devs[0]); 847 } 848 849 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; 850 851 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 852 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 853 ts_params->valid_devs[0], qp_id, &qp_conf, 854 rte_cryptodev_socket_id( 855 ts_params->valid_devs[0])), 856 "Failed test for" 857 " rte_cryptodev_queue_pair_setup:" 858 "num_inflights %u on qp %u on cryptodev %u", 859 qp_conf.nb_descriptors, qp_id, 860 ts_params->valid_devs[0]); 861 } 862 863 /* invalid number of descriptors - max supported + 1 */ 864 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1; 865 866 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) { 867 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup( 868 ts_params->valid_devs[0], qp_id, &qp_conf, 869 rte_cryptodev_socket_id( 870 ts_params->valid_devs[0])), 871 "Unexpectedly passed test for " 872 "rte_cryptodev_queue_pair_setup:" 873 "num_inflights %u on qp %u on cryptodev %u", 874 qp_conf.nb_descriptors, qp_id, 875 ts_params->valid_devs[0]); 876 } 877 878 /* test invalid queue pair id */ 879 qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */ 880 881 qp_id = ts_params->conf.nb_queue_pairs; /*invalid */ 882 883 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup( 884 ts_params->valid_devs[0], 885 qp_id, &qp_conf, 886 rte_cryptodev_socket_id(ts_params->valid_devs[0])), 887 "Failed test for rte_cryptodev_queue_pair_setup:" 888 "invalid qp %u on cryptodev %u", 889 qp_id, ts_params->valid_devs[0]); 890 891 qp_id = 0xffff; /*invalid*/ 892 893 TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup( 894 ts_params->valid_devs[0], 895 qp_id, &qp_conf, 896 rte_cryptodev_socket_id(ts_params->valid_devs[0])), 897 "Failed test for rte_cryptodev_queue_pair_setup:" 898 "invalid qp %u on cryptodev %u", 899 qp_id, ts_params->valid_devs[0]); 900 901 return TEST_SUCCESS; 902 } 903 904 /* ***** Plaintext data for tests ***** */ 905 906 const char catch_22_quote_1[] = 907 "There was only one catch and that was Catch-22, which " 908 "specified that a concern for one's safety in the face of " 909 "dangers that were real and immediate was the process of a " 910 "rational mind. Orr was crazy and could be grounded. All he " 911 "had to do was ask; and as soon as he did, he would no longer " 912 "be crazy and would have to fly more missions. Orr would be " 913 "crazy to fly more missions and sane if he didn't, but if he " 914 "was sane he had to fly them. If he flew them he was crazy " 915 "and didn't have to; but if he didn't want to he was sane and " 916 "had to. Yossarian was moved very deeply by the absolute " 917 "simplicity of this clause of Catch-22 and let out a " 918 "respectful whistle. \"That's some catch, that Catch-22\", he " 919 "observed. \"It's the best there is,\" Doc Daneeka agreed."; 920 921 const char catch_22_quote[] = 922 "What a lousy earth! He wondered how many people were " 923 "destitute that same night even in his own prosperous country, " 924 "how many homes were shanties, how many husbands were drunk " 925 "and wives socked, and how many children were bullied, abused, " 926 "or abandoned. How many families hungered for food they could " 927 "not afford to buy? How many hearts were broken? How many " 928 "suicides would take place that same night, how many people " 929 "would go insane? How many cockroaches and landlords would " 930 "triumph? How many winners were losers, successes failures, " 931 "and rich men poor men? How many wise guys were stupid? How " 932 "many happy endings were unhappy endings? How many honest men " 933 "were liars, brave men cowards, loyal men traitors, how many " 934 "sainted men were corrupt, how many people in positions of " 935 "trust had sold their souls to bodyguards, how many had never " 936 "had souls? How many straight-and-narrow paths were crooked " 937 "paths? How many best families were worst families and how " 938 "many good people were bad people? When you added them all up " 939 "and then subtracted, you might be left with only the children, " 940 "and perhaps with Albert Einstein and an old violinist or " 941 "sculptor somewhere."; 942 943 #define QUOTE_480_BYTES (480) 944 #define QUOTE_512_BYTES (512) 945 #define QUOTE_768_BYTES (768) 946 #define QUOTE_1024_BYTES (1024) 947 948 949 950 /* ***** SHA1 Hash Tests ***** */ 951 952 #define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1) 953 954 static uint8_t hmac_sha1_key[] = { 955 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, 956 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, 957 0xDE, 0xF4, 0xDE, 0xAD }; 958 959 /* ***** SHA224 Hash Tests ***** */ 960 961 #define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224) 962 963 964 /* ***** AES-CBC Cipher Tests ***** */ 965 966 #define CIPHER_KEY_LENGTH_AES_CBC (16) 967 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC) 968 969 static uint8_t aes_cbc_key[] = { 970 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 971 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A }; 972 973 static uint8_t aes_cbc_iv[] = { 974 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 975 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; 976 977 978 /* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */ 979 980 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = { 981 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31, 982 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76, 983 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E, 984 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A, 985 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E, 986 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08, 987 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0, 988 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01, 989 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57, 990 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE, 991 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9, 992 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9, 993 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D, 994 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3, 995 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46, 996 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3, 997 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80, 998 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92, 999 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5, 1000 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5, 1001 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2, 1002 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5, 1003 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA, 1004 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76, 1005 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4, 1006 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62, 1007 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4, 1008 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4, 1009 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54, 1010 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61, 1011 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91, 1012 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A, 1013 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF, 1014 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F, 1015 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28, 1016 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E, 1017 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7, 1018 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76, 1019 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6, 1020 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03, 1021 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C, 1022 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2, 1023 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6, 1024 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96, 1025 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6, 1026 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA, 1027 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87, 1028 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55, 1029 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B, 1030 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98, 1031 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53, 1032 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A, 1033 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26, 1034 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36, 1035 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36, 1036 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D, 1037 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E, 1038 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E, 1039 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A, 1040 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6, 1041 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4, 1042 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7, 1043 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1, 1044 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C 1045 }; 1046 1047 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = { 1048 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60, 1049 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1, 1050 0x18, 0x8c, 0x1d, 0x32 1051 }; 1052 1053 1054 /* Multisession Vector context Test */ 1055 /*Begin Session 0 */ 1056 static uint8_t ms_aes_cbc_key0[] = { 1057 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1058 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1059 }; 1060 1061 static uint8_t ms_aes_cbc_iv0[] = { 1062 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1063 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1064 }; 1065 1066 static const uint8_t ms_aes_cbc_cipher0[] = { 1067 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38, 1068 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC, 1069 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB, 1070 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9, 1071 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D, 1072 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4, 1073 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34, 1074 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F, 1075 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99, 1076 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED, 1077 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D, 1078 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24, 1079 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71, 1080 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72, 1081 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E, 1082 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD, 1083 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18, 1084 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6, 1085 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29, 1086 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C, 1087 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96, 1088 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26, 1089 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55, 1090 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46, 1091 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B, 1092 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4, 1093 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7, 1094 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5, 1095 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0, 1096 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E, 1097 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D, 1098 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44, 1099 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76, 1100 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3, 1101 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83, 1102 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85, 1103 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45, 1104 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25, 1105 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A, 1106 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1, 1107 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA, 1108 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3, 1109 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4, 1110 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60, 1111 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A, 1112 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A, 1113 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9, 1114 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55, 1115 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13, 1116 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B, 1117 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1, 1118 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0, 1119 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3, 1120 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23, 1121 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B, 1122 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07, 1123 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB, 1124 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1, 1125 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F, 1126 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F, 1127 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84, 1128 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B, 1129 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17, 1130 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF 1131 }; 1132 1133 1134 static uint8_t ms_hmac_key0[] = { 1135 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1, 1136 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA, 1137 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76, 1138 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60, 1139 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1, 1140 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0, 1141 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76, 1142 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60 1143 }; 1144 1145 static const uint8_t ms_hmac_digest0[] = { 1146 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51, 1147 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F, 1148 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C, 1149 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4, 1150 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56, 1151 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4, 1152 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23, 1153 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90 1154 }; 1155 1156 /* End Session 0 */ 1157 /* Begin session 1 */ 1158 1159 static uint8_t ms_aes_cbc_key1[] = { 1160 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1161 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1162 }; 1163 1164 static uint8_t ms_aes_cbc_iv1[] = { 1165 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1166 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1167 }; 1168 1169 static const uint8_t ms_aes_cbc_cipher1[] = { 1170 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71, 1171 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23, 1172 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09, 1173 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A, 1174 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C, 1175 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F, 1176 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9, 1177 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66, 1178 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43, 1179 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB, 1180 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23, 1181 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29, 1182 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26, 1183 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F, 1184 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68, 1185 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77, 1186 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8, 1187 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97, 1188 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3, 1189 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90, 1190 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5, 1191 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E, 1192 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45, 1193 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B, 1194 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5, 1195 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D, 1196 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E, 1197 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD, 1198 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE, 1199 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1, 1200 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F, 1201 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25, 1202 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1, 1203 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3, 1204 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE, 1205 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6, 1206 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52, 1207 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA, 1208 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63, 1209 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E, 1210 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA, 1211 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB, 1212 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71, 1213 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF, 1214 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A, 1215 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95, 1216 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73, 1217 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49, 1218 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB, 1219 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B, 1220 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC, 1221 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED, 1222 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02, 1223 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4, 1224 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF, 1225 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82, 1226 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D, 1227 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6, 1228 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9, 1229 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35, 1230 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0, 1231 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53, 1232 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5, 1233 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3 1234 1235 }; 1236 1237 static uint8_t ms_hmac_key1[] = { 1238 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1, 1239 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA, 1240 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76, 1241 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60, 1242 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1, 1243 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0, 1244 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76, 1245 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60 1246 }; 1247 1248 static const uint8_t ms_hmac_digest1[] = { 1249 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69, 1250 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50, 1251 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20, 1252 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD, 1253 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9, 1254 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4, 1255 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA, 1256 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F 1257 }; 1258 /* End Session 1 */ 1259 /* Begin Session 2 */ 1260 static uint8_t ms_aes_cbc_key2[] = { 1261 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1262 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1263 }; 1264 1265 static uint8_t ms_aes_cbc_iv2[] = { 1266 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1267 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1268 }; 1269 1270 static const uint8_t ms_aes_cbc_cipher2[] = { 1271 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91, 1272 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97, 1273 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8, 1274 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5, 1275 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98, 1276 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69, 1277 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09, 1278 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF, 1279 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44, 1280 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B, 1281 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9, 1282 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34, 1283 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99, 1284 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF, 1285 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC, 1286 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26, 1287 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3, 1288 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF, 1289 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3, 1290 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3, 1291 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA, 1292 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13, 1293 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38, 1294 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71, 1295 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC, 1296 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1, 1297 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E, 1298 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22, 1299 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62, 1300 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72, 1301 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6, 1302 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6, 1303 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44, 1304 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24, 1305 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5, 1306 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E, 1307 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17, 1308 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9, 1309 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D, 1310 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D, 1311 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22, 1312 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9, 1313 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49, 1314 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E, 1315 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B, 1316 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2, 1317 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95, 1318 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07, 1319 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3, 1320 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A, 1321 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57, 1322 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84, 1323 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61, 1324 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF, 1325 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17, 1326 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A, 1327 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1, 1328 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53, 1329 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7, 1330 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2, 1331 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A, 1332 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8, 1333 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70, 1334 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92 1335 }; 1336 1337 static uint8_t ms_hmac_key2[] = { 1338 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1, 1339 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA, 1340 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76, 1341 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60, 1342 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1, 1343 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0, 1344 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76, 1345 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60 1346 }; 1347 1348 static const uint8_t ms_hmac_digest2[] = { 1349 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF, 1350 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6, 1351 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77, 1352 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27, 1353 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82, 1354 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24, 1355 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E, 1356 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59 1357 }; 1358 1359 /* End Session 2 */ 1360 1361 1362 static int 1363 test_AES_CBC_HMAC_SHA1_encrypt_digest(void) 1364 { 1365 struct crypto_testsuite_params *ts_params = &testsuite_params; 1366 struct crypto_unittest_params *ut_params = &unittest_params; 1367 1368 /* Verify the capabilities */ 1369 struct rte_cryptodev_sym_capability_idx cap_idx; 1370 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1371 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC; 1372 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 1373 &cap_idx) == NULL) 1374 return -ENOTSUP; 1375 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1376 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC; 1377 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 1378 &cap_idx) == NULL) 1379 return -ENOTSUP; 1380 1381 /* Generate test mbuf data and space for digest */ 1382 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 1383 catch_22_quote, QUOTE_512_BYTES, 0); 1384 1385 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 1386 DIGEST_BYTE_LENGTH_SHA1); 1387 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest"); 1388 1389 /* Setup Cipher Parameters */ 1390 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1391 ut_params->cipher_xform.next = &ut_params->auth_xform; 1392 1393 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC; 1394 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 1395 ut_params->cipher_xform.cipher.key.data = aes_cbc_key; 1396 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC; 1397 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 1398 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC; 1399 1400 /* Setup HMAC Parameters */ 1401 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1402 1403 ut_params->auth_xform.next = NULL; 1404 1405 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 1406 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC; 1407 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1; 1408 ut_params->auth_xform.auth.key.data = hmac_sha1_key; 1409 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1; 1410 1411 ut_params->sess = rte_cryptodev_sym_session_create( 1412 ts_params->session_mpool); 1413 1414 /* Create crypto session*/ 1415 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 1416 ut_params->sess, &ut_params->cipher_xform, 1417 ts_params->session_priv_mpool); 1418 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 1419 1420 /* Generate crypto op data structure */ 1421 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 1422 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1423 TEST_ASSERT_NOT_NULL(ut_params->op, 1424 "Failed to allocate symmetric crypto operation struct"); 1425 1426 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 1427 1428 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 1429 1430 /* set crypto operation source mbuf */ 1431 sym_op->m_src = ut_params->ibuf; 1432 1433 /* Set crypto operation authentication parameters */ 1434 sym_op->auth.digest.data = ut_params->digest; 1435 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 1436 ut_params->ibuf, QUOTE_512_BYTES); 1437 1438 sym_op->auth.data.offset = 0; 1439 sym_op->auth.data.length = QUOTE_512_BYTES; 1440 1441 /* Copy IV at the end of the crypto operation */ 1442 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 1443 aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC); 1444 1445 /* Set crypto operation cipher parameters */ 1446 sym_op->cipher.data.offset = 0; 1447 sym_op->cipher.data.length = QUOTE_512_BYTES; 1448 1449 /* Process crypto operation */ 1450 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 1451 ut_params->op), "failed to process sym crypto op"); 1452 1453 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 1454 "crypto op processing failed"); 1455 1456 /* Validate obuf */ 1457 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src, 1458 uint8_t *); 1459 1460 TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext, 1461 catch_22_quote_2_512_bytes_AES_CBC_ciphertext, 1462 QUOTE_512_BYTES, 1463 "ciphertext data not as expected"); 1464 1465 uint8_t *digest = ciphertext + QUOTE_512_BYTES; 1466 1467 TEST_ASSERT_BUFFERS_ARE_EQUAL(digest, 1468 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest, 1469 gbl_driver_id == rte_cryptodev_driver_id_get( 1470 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) ? 1471 TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 : 1472 DIGEST_BYTE_LENGTH_SHA1, 1473 "Generated digest data not as expected"); 1474 1475 return TEST_SUCCESS; 1476 } 1477 1478 /* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */ 1479 1480 #define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512) 1481 1482 static uint8_t hmac_sha512_key[] = { 1483 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1, 1484 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA, 1485 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76, 1486 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60, 1487 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1, 1488 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0, 1489 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76, 1490 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 }; 1491 1492 static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = { 1493 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8, 1494 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48, 1495 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8, 1496 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70, 1497 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8, 1498 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E, 1499 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D, 1500 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A }; 1501 1502 1503 1504 static int 1505 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params( 1506 struct crypto_unittest_params *ut_params, 1507 uint8_t *cipher_key, 1508 uint8_t *hmac_key); 1509 1510 static int 1511 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess, 1512 struct crypto_unittest_params *ut_params, 1513 struct crypto_testsuite_params *ts_params, 1514 const uint8_t *cipher, 1515 const uint8_t *digest, 1516 const uint8_t *iv); 1517 1518 1519 static int 1520 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params( 1521 struct crypto_unittest_params *ut_params, 1522 uint8_t *cipher_key, 1523 uint8_t *hmac_key) 1524 { 1525 1526 /* Setup Cipher Parameters */ 1527 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1528 ut_params->cipher_xform.next = NULL; 1529 1530 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC; 1531 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT; 1532 ut_params->cipher_xform.cipher.key.data = cipher_key; 1533 ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC; 1534 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 1535 ut_params->cipher_xform.cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC; 1536 1537 /* Setup HMAC Parameters */ 1538 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1539 ut_params->auth_xform.next = &ut_params->cipher_xform; 1540 1541 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY; 1542 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC; 1543 ut_params->auth_xform.auth.key.data = hmac_key; 1544 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512; 1545 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512; 1546 1547 return TEST_SUCCESS; 1548 } 1549 1550 1551 static int 1552 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess, 1553 struct crypto_unittest_params *ut_params, 1554 struct crypto_testsuite_params *ts_params, 1555 const uint8_t *cipher, 1556 const uint8_t *digest, 1557 const uint8_t *iv) 1558 { 1559 /* Generate test mbuf data and digest */ 1560 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 1561 (const char *) 1562 cipher, 1563 QUOTE_512_BYTES, 0); 1564 1565 ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 1566 DIGEST_BYTE_LENGTH_SHA512); 1567 TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest"); 1568 1569 rte_memcpy(ut_params->digest, 1570 digest, 1571 DIGEST_BYTE_LENGTH_SHA512); 1572 1573 /* Generate Crypto op data structure */ 1574 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 1575 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1576 TEST_ASSERT_NOT_NULL(ut_params->op, 1577 "Failed to allocate symmetric crypto operation struct"); 1578 1579 rte_crypto_op_attach_sym_session(ut_params->op, sess); 1580 1581 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 1582 1583 /* set crypto operation source mbuf */ 1584 sym_op->m_src = ut_params->ibuf; 1585 1586 sym_op->auth.digest.data = ut_params->digest; 1587 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 1588 ut_params->ibuf, QUOTE_512_BYTES); 1589 1590 sym_op->auth.data.offset = 0; 1591 sym_op->auth.data.length = QUOTE_512_BYTES; 1592 1593 /* Copy IV at the end of the crypto operation */ 1594 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 1595 iv, CIPHER_IV_LENGTH_AES_CBC); 1596 1597 sym_op->cipher.data.offset = 0; 1598 sym_op->cipher.data.length = QUOTE_512_BYTES; 1599 1600 /* Process crypto operation */ 1601 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 1602 ut_params->op), "failed to process sym crypto op"); 1603 1604 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 1605 "crypto op processing failed"); 1606 1607 ut_params->obuf = ut_params->op->sym->m_src; 1608 1609 /* Validate obuf */ 1610 TEST_ASSERT_BUFFERS_ARE_EQUAL( 1611 rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 1612 catch_22_quote, 1613 QUOTE_512_BYTES, 1614 "Plaintext data not as expected"); 1615 1616 /* Validate obuf */ 1617 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 1618 "Digest verification failed"); 1619 1620 return TEST_SUCCESS; 1621 } 1622 1623 static int 1624 test_blockcipher(enum blockcipher_test_type test_type) 1625 { 1626 struct crypto_testsuite_params *ts_params = &testsuite_params; 1627 int status; 1628 1629 status = test_blockcipher_all_tests(ts_params->mbuf_pool, 1630 ts_params->op_mpool, 1631 ts_params->session_mpool, ts_params->session_priv_mpool, 1632 ts_params->valid_devs[0], 1633 gbl_driver_id, 1634 test_type); 1635 1636 if (status == -ENOTSUP) 1637 return status; 1638 1639 TEST_ASSERT_EQUAL(status, 0, "Test failed"); 1640 1641 return TEST_SUCCESS; 1642 } 1643 1644 static int 1645 test_AES_cipheronly_all(void) 1646 { 1647 return test_blockcipher(BLKCIPHER_AES_CIPHERONLY_TYPE); 1648 } 1649 1650 static int 1651 test_AES_docsis_all(void) 1652 { 1653 return test_blockcipher(BLKCIPHER_AES_DOCSIS_TYPE); 1654 } 1655 1656 static int 1657 test_DES_docsis_all(void) 1658 { 1659 return test_blockcipher(BLKCIPHER_DES_DOCSIS_TYPE); 1660 } 1661 1662 static int 1663 test_DES_cipheronly_all(void) 1664 { 1665 return test_blockcipher(BLKCIPHER_DES_CIPHERONLY_TYPE); 1666 } 1667 1668 static int 1669 test_authonly_all(void) 1670 { 1671 return test_blockcipher(BLKCIPHER_AUTHONLY_TYPE); 1672 } 1673 1674 static int 1675 test_AES_chain_all(void) 1676 { 1677 return test_blockcipher(BLKCIPHER_AES_CHAIN_TYPE); 1678 } 1679 1680 static int 1681 test_3DES_chain_all(void) 1682 { 1683 return test_blockcipher(BLKCIPHER_3DES_CHAIN_TYPE); 1684 } 1685 1686 static int 1687 test_3DES_cipheronly_all(void) 1688 { 1689 return test_blockcipher(BLKCIPHER_3DES_CIPHERONLY_TYPE); 1690 } 1691 1692 /* ***** SNOW 3G Tests ***** */ 1693 static int 1694 create_wireless_algo_hash_session(uint8_t dev_id, 1695 const uint8_t *key, const uint8_t key_len, 1696 const uint8_t iv_len, const uint8_t auth_len, 1697 enum rte_crypto_auth_operation op, 1698 enum rte_crypto_auth_algorithm algo) 1699 { 1700 uint8_t hash_key[key_len]; 1701 int status; 1702 1703 struct crypto_testsuite_params *ts_params = &testsuite_params; 1704 struct crypto_unittest_params *ut_params = &unittest_params; 1705 1706 memcpy(hash_key, key, key_len); 1707 1708 debug_hexdump(stdout, "key:", key, key_len); 1709 1710 /* Setup Authentication Parameters */ 1711 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1712 ut_params->auth_xform.next = NULL; 1713 1714 ut_params->auth_xform.auth.op = op; 1715 ut_params->auth_xform.auth.algo = algo; 1716 ut_params->auth_xform.auth.key.length = key_len; 1717 ut_params->auth_xform.auth.key.data = hash_key; 1718 ut_params->auth_xform.auth.digest_length = auth_len; 1719 ut_params->auth_xform.auth.iv.offset = IV_OFFSET; 1720 ut_params->auth_xform.auth.iv.length = iv_len; 1721 ut_params->sess = rte_cryptodev_sym_session_create( 1722 ts_params->session_mpool); 1723 1724 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 1725 &ut_params->auth_xform, 1726 ts_params->session_priv_mpool); 1727 TEST_ASSERT_EQUAL(status, 0, "session init failed"); 1728 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 1729 return 0; 1730 } 1731 1732 static int 1733 create_wireless_algo_cipher_session(uint8_t dev_id, 1734 enum rte_crypto_cipher_operation op, 1735 enum rte_crypto_cipher_algorithm algo, 1736 const uint8_t *key, const uint8_t key_len, 1737 uint8_t iv_len) 1738 { 1739 uint8_t cipher_key[key_len]; 1740 int status; 1741 struct crypto_testsuite_params *ts_params = &testsuite_params; 1742 struct crypto_unittest_params *ut_params = &unittest_params; 1743 1744 memcpy(cipher_key, key, key_len); 1745 1746 /* Setup Cipher Parameters */ 1747 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1748 ut_params->cipher_xform.next = NULL; 1749 1750 ut_params->cipher_xform.cipher.algo = algo; 1751 ut_params->cipher_xform.cipher.op = op; 1752 ut_params->cipher_xform.cipher.key.data = cipher_key; 1753 ut_params->cipher_xform.cipher.key.length = key_len; 1754 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 1755 ut_params->cipher_xform.cipher.iv.length = iv_len; 1756 1757 debug_hexdump(stdout, "key:", key, key_len); 1758 1759 /* Create Crypto session */ 1760 ut_params->sess = rte_cryptodev_sym_session_create( 1761 ts_params->session_mpool); 1762 1763 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 1764 &ut_params->cipher_xform, 1765 ts_params->session_priv_mpool); 1766 TEST_ASSERT_EQUAL(status, 0, "session init failed"); 1767 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 1768 return 0; 1769 } 1770 1771 static int 1772 create_wireless_algo_cipher_operation(const uint8_t *iv, uint8_t iv_len, 1773 unsigned int cipher_len, 1774 unsigned int cipher_offset) 1775 { 1776 struct crypto_testsuite_params *ts_params = &testsuite_params; 1777 struct crypto_unittest_params *ut_params = &unittest_params; 1778 1779 /* Generate Crypto op data structure */ 1780 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 1781 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1782 TEST_ASSERT_NOT_NULL(ut_params->op, 1783 "Failed to allocate pktmbuf offload"); 1784 1785 /* Set crypto operation data parameters */ 1786 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 1787 1788 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 1789 1790 /* set crypto operation source mbuf */ 1791 sym_op->m_src = ut_params->ibuf; 1792 1793 /* iv */ 1794 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 1795 iv, iv_len); 1796 sym_op->cipher.data.length = cipher_len; 1797 sym_op->cipher.data.offset = cipher_offset; 1798 return 0; 1799 } 1800 1801 static int 1802 create_wireless_algo_cipher_operation_oop(const uint8_t *iv, uint8_t iv_len, 1803 unsigned int cipher_len, 1804 unsigned int cipher_offset) 1805 { 1806 struct crypto_testsuite_params *ts_params = &testsuite_params; 1807 struct crypto_unittest_params *ut_params = &unittest_params; 1808 1809 /* Generate Crypto op data structure */ 1810 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 1811 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1812 TEST_ASSERT_NOT_NULL(ut_params->op, 1813 "Failed to allocate pktmbuf offload"); 1814 1815 /* Set crypto operation data parameters */ 1816 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 1817 1818 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 1819 1820 /* set crypto operation source mbuf */ 1821 sym_op->m_src = ut_params->ibuf; 1822 sym_op->m_dst = ut_params->obuf; 1823 1824 /* iv */ 1825 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 1826 iv, iv_len); 1827 sym_op->cipher.data.length = cipher_len; 1828 sym_op->cipher.data.offset = cipher_offset; 1829 return 0; 1830 } 1831 1832 static int 1833 create_wireless_algo_cipher_auth_session(uint8_t dev_id, 1834 enum rte_crypto_cipher_operation cipher_op, 1835 enum rte_crypto_auth_operation auth_op, 1836 enum rte_crypto_auth_algorithm auth_algo, 1837 enum rte_crypto_cipher_algorithm cipher_algo, 1838 const uint8_t *key, uint8_t key_len, 1839 uint8_t auth_iv_len, uint8_t auth_len, 1840 uint8_t cipher_iv_len) 1841 1842 { 1843 uint8_t cipher_auth_key[key_len]; 1844 int status; 1845 1846 struct crypto_testsuite_params *ts_params = &testsuite_params; 1847 struct crypto_unittest_params *ut_params = &unittest_params; 1848 1849 memcpy(cipher_auth_key, key, key_len); 1850 1851 /* Setup Authentication Parameters */ 1852 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1853 ut_params->auth_xform.next = NULL; 1854 1855 ut_params->auth_xform.auth.op = auth_op; 1856 ut_params->auth_xform.auth.algo = auth_algo; 1857 ut_params->auth_xform.auth.key.length = key_len; 1858 /* Hash key = cipher key */ 1859 ut_params->auth_xform.auth.key.data = cipher_auth_key; 1860 ut_params->auth_xform.auth.digest_length = auth_len; 1861 /* Auth IV will be after cipher IV */ 1862 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len; 1863 ut_params->auth_xform.auth.iv.length = auth_iv_len; 1864 1865 /* Setup Cipher Parameters */ 1866 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1867 ut_params->cipher_xform.next = &ut_params->auth_xform; 1868 1869 ut_params->cipher_xform.cipher.algo = cipher_algo; 1870 ut_params->cipher_xform.cipher.op = cipher_op; 1871 ut_params->cipher_xform.cipher.key.data = cipher_auth_key; 1872 ut_params->cipher_xform.cipher.key.length = key_len; 1873 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 1874 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len; 1875 1876 debug_hexdump(stdout, "key:", key, key_len); 1877 1878 /* Create Crypto session*/ 1879 ut_params->sess = rte_cryptodev_sym_session_create( 1880 ts_params->session_mpool); 1881 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 1882 1883 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 1884 &ut_params->cipher_xform, 1885 ts_params->session_priv_mpool); 1886 if (status == -ENOTSUP) 1887 return status; 1888 1889 TEST_ASSERT_EQUAL(status, 0, "session init failed"); 1890 return 0; 1891 } 1892 1893 static int 1894 create_wireless_cipher_auth_session(uint8_t dev_id, 1895 enum rte_crypto_cipher_operation cipher_op, 1896 enum rte_crypto_auth_operation auth_op, 1897 enum rte_crypto_auth_algorithm auth_algo, 1898 enum rte_crypto_cipher_algorithm cipher_algo, 1899 const struct wireless_test_data *tdata) 1900 { 1901 const uint8_t key_len = tdata->key.len; 1902 uint8_t cipher_auth_key[key_len]; 1903 int status; 1904 1905 struct crypto_testsuite_params *ts_params = &testsuite_params; 1906 struct crypto_unittest_params *ut_params = &unittest_params; 1907 const uint8_t *key = tdata->key.data; 1908 const uint8_t auth_len = tdata->digest.len; 1909 uint8_t cipher_iv_len = tdata->cipher_iv.len; 1910 uint8_t auth_iv_len = tdata->auth_iv.len; 1911 1912 memcpy(cipher_auth_key, key, key_len); 1913 1914 /* Setup Authentication Parameters */ 1915 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1916 ut_params->auth_xform.next = NULL; 1917 1918 ut_params->auth_xform.auth.op = auth_op; 1919 ut_params->auth_xform.auth.algo = auth_algo; 1920 ut_params->auth_xform.auth.key.length = key_len; 1921 /* Hash key = cipher key */ 1922 ut_params->auth_xform.auth.key.data = cipher_auth_key; 1923 ut_params->auth_xform.auth.digest_length = auth_len; 1924 /* Auth IV will be after cipher IV */ 1925 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len; 1926 ut_params->auth_xform.auth.iv.length = auth_iv_len; 1927 1928 /* Setup Cipher Parameters */ 1929 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1930 ut_params->cipher_xform.next = &ut_params->auth_xform; 1931 1932 ut_params->cipher_xform.cipher.algo = cipher_algo; 1933 ut_params->cipher_xform.cipher.op = cipher_op; 1934 ut_params->cipher_xform.cipher.key.data = cipher_auth_key; 1935 ut_params->cipher_xform.cipher.key.length = key_len; 1936 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 1937 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len; 1938 1939 1940 debug_hexdump(stdout, "key:", key, key_len); 1941 1942 /* Create Crypto session*/ 1943 ut_params->sess = rte_cryptodev_sym_session_create( 1944 ts_params->session_mpool); 1945 1946 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 1947 &ut_params->cipher_xform, 1948 ts_params->session_priv_mpool); 1949 1950 TEST_ASSERT_EQUAL(status, 0, "session init failed"); 1951 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 1952 return 0; 1953 } 1954 1955 static int 1956 create_zuc_cipher_auth_encrypt_generate_session(uint8_t dev_id, 1957 const struct wireless_test_data *tdata) 1958 { 1959 return create_wireless_cipher_auth_session(dev_id, 1960 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 1961 RTE_CRYPTO_AUTH_OP_GENERATE, RTE_CRYPTO_AUTH_ZUC_EIA3, 1962 RTE_CRYPTO_CIPHER_ZUC_EEA3, tdata); 1963 } 1964 1965 static int 1966 create_wireless_algo_auth_cipher_session(uint8_t dev_id, 1967 enum rte_crypto_cipher_operation cipher_op, 1968 enum rte_crypto_auth_operation auth_op, 1969 enum rte_crypto_auth_algorithm auth_algo, 1970 enum rte_crypto_cipher_algorithm cipher_algo, 1971 const uint8_t *key, const uint8_t key_len, 1972 uint8_t auth_iv_len, uint8_t auth_len, 1973 uint8_t cipher_iv_len) 1974 { 1975 uint8_t auth_cipher_key[key_len]; 1976 int status; 1977 struct crypto_testsuite_params *ts_params = &testsuite_params; 1978 struct crypto_unittest_params *ut_params = &unittest_params; 1979 1980 memcpy(auth_cipher_key, key, key_len); 1981 1982 /* Setup Authentication Parameters */ 1983 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1984 ut_params->auth_xform.auth.op = auth_op; 1985 ut_params->auth_xform.next = &ut_params->cipher_xform; 1986 ut_params->auth_xform.auth.algo = auth_algo; 1987 ut_params->auth_xform.auth.key.length = key_len; 1988 ut_params->auth_xform.auth.key.data = auth_cipher_key; 1989 ut_params->auth_xform.auth.digest_length = auth_len; 1990 /* Auth IV will be after cipher IV */ 1991 ut_params->auth_xform.auth.iv.offset = IV_OFFSET + cipher_iv_len; 1992 ut_params->auth_xform.auth.iv.length = auth_iv_len; 1993 1994 /* Setup Cipher Parameters */ 1995 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1996 ut_params->cipher_xform.next = NULL; 1997 ut_params->cipher_xform.cipher.algo = cipher_algo; 1998 ut_params->cipher_xform.cipher.op = cipher_op; 1999 ut_params->cipher_xform.cipher.key.data = auth_cipher_key; 2000 ut_params->cipher_xform.cipher.key.length = key_len; 2001 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 2002 ut_params->cipher_xform.cipher.iv.length = cipher_iv_len; 2003 2004 debug_hexdump(stdout, "key:", key, key_len); 2005 2006 /* Create Crypto session*/ 2007 ut_params->sess = rte_cryptodev_sym_session_create( 2008 ts_params->session_mpool); 2009 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 2010 2011 if (cipher_op == RTE_CRYPTO_CIPHER_OP_DECRYPT) { 2012 ut_params->auth_xform.next = NULL; 2013 ut_params->cipher_xform.next = &ut_params->auth_xform; 2014 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 2015 &ut_params->cipher_xform, 2016 ts_params->session_priv_mpool); 2017 2018 } else 2019 status = rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 2020 &ut_params->auth_xform, 2021 ts_params->session_priv_mpool); 2022 2023 if (status == -ENOTSUP) 2024 return status; 2025 2026 TEST_ASSERT_EQUAL(status, 0, "session init failed"); 2027 2028 return 0; 2029 } 2030 2031 static int 2032 create_wireless_algo_hash_operation(const uint8_t *auth_tag, 2033 unsigned int auth_tag_len, 2034 const uint8_t *iv, unsigned int iv_len, 2035 unsigned int data_pad_len, 2036 enum rte_crypto_auth_operation op, 2037 unsigned int auth_len, unsigned int auth_offset) 2038 { 2039 struct crypto_testsuite_params *ts_params = &testsuite_params; 2040 2041 struct crypto_unittest_params *ut_params = &unittest_params; 2042 2043 /* Generate Crypto op data structure */ 2044 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 2045 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 2046 TEST_ASSERT_NOT_NULL(ut_params->op, 2047 "Failed to allocate pktmbuf offload"); 2048 2049 /* Set crypto operation data parameters */ 2050 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 2051 2052 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 2053 2054 /* set crypto operation source mbuf */ 2055 sym_op->m_src = ut_params->ibuf; 2056 2057 /* iv */ 2058 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 2059 iv, iv_len); 2060 /* digest */ 2061 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 2062 ut_params->ibuf, auth_tag_len); 2063 2064 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 2065 "no room to append auth tag"); 2066 ut_params->digest = sym_op->auth.digest.data; 2067 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 2068 ut_params->ibuf, data_pad_len); 2069 if (op == RTE_CRYPTO_AUTH_OP_GENERATE) 2070 memset(sym_op->auth.digest.data, 0, auth_tag_len); 2071 else 2072 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len); 2073 2074 debug_hexdump(stdout, "digest:", 2075 sym_op->auth.digest.data, 2076 auth_tag_len); 2077 2078 sym_op->auth.data.length = auth_len; 2079 sym_op->auth.data.offset = auth_offset; 2080 2081 return 0; 2082 } 2083 2084 static int 2085 create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata, 2086 enum rte_crypto_auth_operation op) 2087 { 2088 struct crypto_testsuite_params *ts_params = &testsuite_params; 2089 struct crypto_unittest_params *ut_params = &unittest_params; 2090 2091 const uint8_t *auth_tag = tdata->digest.data; 2092 const unsigned int auth_tag_len = tdata->digest.len; 2093 unsigned int plaintext_len = ceil_byte_length(tdata->plaintext.len); 2094 unsigned int data_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 2095 2096 const uint8_t *cipher_iv = tdata->cipher_iv.data; 2097 const uint8_t cipher_iv_len = tdata->cipher_iv.len; 2098 const uint8_t *auth_iv = tdata->auth_iv.data; 2099 const uint8_t auth_iv_len = tdata->auth_iv.len; 2100 const unsigned int cipher_len = tdata->validCipherLenInBits.len; 2101 const unsigned int auth_len = tdata->validAuthLenInBits.len; 2102 2103 /* Generate Crypto op data structure */ 2104 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 2105 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 2106 TEST_ASSERT_NOT_NULL(ut_params->op, 2107 "Failed to allocate pktmbuf offload"); 2108 /* Set crypto operation data parameters */ 2109 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 2110 2111 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 2112 2113 /* set crypto operation source mbuf */ 2114 sym_op->m_src = ut_params->ibuf; 2115 2116 /* digest */ 2117 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 2118 ut_params->ibuf, auth_tag_len); 2119 2120 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 2121 "no room to append auth tag"); 2122 ut_params->digest = sym_op->auth.digest.data; 2123 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 2124 ut_params->ibuf, data_pad_len); 2125 if (op == RTE_CRYPTO_AUTH_OP_GENERATE) 2126 memset(sym_op->auth.digest.data, 0, auth_tag_len); 2127 else 2128 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len); 2129 2130 debug_hexdump(stdout, "digest:", 2131 sym_op->auth.digest.data, 2132 auth_tag_len); 2133 2134 /* Copy cipher and auth IVs at the end of the crypto operation */ 2135 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, 2136 IV_OFFSET); 2137 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len); 2138 iv_ptr += cipher_iv_len; 2139 rte_memcpy(iv_ptr, auth_iv, auth_iv_len); 2140 2141 sym_op->cipher.data.length = cipher_len; 2142 sym_op->cipher.data.offset = 0; 2143 sym_op->auth.data.length = auth_len; 2144 sym_op->auth.data.offset = 0; 2145 2146 return 0; 2147 } 2148 2149 static int 2150 create_zuc_cipher_hash_generate_operation( 2151 const struct wireless_test_data *tdata) 2152 { 2153 return create_wireless_cipher_hash_operation(tdata, 2154 RTE_CRYPTO_AUTH_OP_GENERATE); 2155 } 2156 2157 static int 2158 create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag, 2159 const unsigned auth_tag_len, 2160 const uint8_t *auth_iv, uint8_t auth_iv_len, 2161 unsigned data_pad_len, 2162 enum rte_crypto_auth_operation op, 2163 const uint8_t *cipher_iv, uint8_t cipher_iv_len, 2164 const unsigned cipher_len, const unsigned cipher_offset, 2165 const unsigned auth_len, const unsigned auth_offset) 2166 { 2167 struct crypto_testsuite_params *ts_params = &testsuite_params; 2168 struct crypto_unittest_params *ut_params = &unittest_params; 2169 2170 enum rte_crypto_cipher_algorithm cipher_algo = 2171 ut_params->cipher_xform.cipher.algo; 2172 enum rte_crypto_auth_algorithm auth_algo = 2173 ut_params->auth_xform.auth.algo; 2174 2175 /* Generate Crypto op data structure */ 2176 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 2177 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 2178 TEST_ASSERT_NOT_NULL(ut_params->op, 2179 "Failed to allocate pktmbuf offload"); 2180 /* Set crypto operation data parameters */ 2181 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 2182 2183 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 2184 2185 /* set crypto operation source mbuf */ 2186 sym_op->m_src = ut_params->ibuf; 2187 2188 /* digest */ 2189 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 2190 ut_params->ibuf, auth_tag_len); 2191 2192 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 2193 "no room to append auth tag"); 2194 ut_params->digest = sym_op->auth.digest.data; 2195 2196 if (rte_pktmbuf_is_contiguous(ut_params->ibuf)) { 2197 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 2198 ut_params->ibuf, data_pad_len); 2199 } else { 2200 struct rte_mbuf *m = ut_params->ibuf; 2201 unsigned int offset = data_pad_len; 2202 2203 while (offset > m->data_len && m->next != NULL) { 2204 offset -= m->data_len; 2205 m = m->next; 2206 } 2207 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 2208 m, offset); 2209 } 2210 2211 if (op == RTE_CRYPTO_AUTH_OP_GENERATE) 2212 memset(sym_op->auth.digest.data, 0, auth_tag_len); 2213 else 2214 rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len); 2215 2216 debug_hexdump(stdout, "digest:", 2217 sym_op->auth.digest.data, 2218 auth_tag_len); 2219 2220 /* Copy cipher and auth IVs at the end of the crypto operation */ 2221 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, 2222 IV_OFFSET); 2223 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len); 2224 iv_ptr += cipher_iv_len; 2225 rte_memcpy(iv_ptr, auth_iv, auth_iv_len); 2226 2227 if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 || 2228 cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 || 2229 cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) { 2230 sym_op->cipher.data.length = cipher_len; 2231 sym_op->cipher.data.offset = cipher_offset; 2232 } else { 2233 sym_op->cipher.data.length = cipher_len >> 3; 2234 sym_op->cipher.data.offset = cipher_offset >> 3; 2235 } 2236 2237 if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 || 2238 auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 || 2239 auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) { 2240 sym_op->auth.data.length = auth_len; 2241 sym_op->auth.data.offset = auth_offset; 2242 } else { 2243 sym_op->auth.data.length = auth_len >> 3; 2244 sym_op->auth.data.offset = auth_offset >> 3; 2245 } 2246 2247 return 0; 2248 } 2249 2250 static int 2251 create_wireless_algo_auth_cipher_operation( 2252 const uint8_t *auth_tag, unsigned int auth_tag_len, 2253 const uint8_t *cipher_iv, uint8_t cipher_iv_len, 2254 const uint8_t *auth_iv, uint8_t auth_iv_len, 2255 unsigned int data_pad_len, 2256 unsigned int cipher_len, unsigned int cipher_offset, 2257 unsigned int auth_len, unsigned int auth_offset, 2258 uint8_t op_mode, uint8_t do_sgl, uint8_t verify) 2259 { 2260 struct crypto_testsuite_params *ts_params = &testsuite_params; 2261 struct crypto_unittest_params *ut_params = &unittest_params; 2262 2263 enum rte_crypto_cipher_algorithm cipher_algo = 2264 ut_params->cipher_xform.cipher.algo; 2265 enum rte_crypto_auth_algorithm auth_algo = 2266 ut_params->auth_xform.auth.algo; 2267 2268 /* Generate Crypto op data structure */ 2269 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 2270 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 2271 TEST_ASSERT_NOT_NULL(ut_params->op, 2272 "Failed to allocate pktmbuf offload"); 2273 2274 /* Set crypto operation data parameters */ 2275 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 2276 2277 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 2278 2279 /* set crypto operation mbufs */ 2280 sym_op->m_src = ut_params->ibuf; 2281 if (op_mode == OUT_OF_PLACE) 2282 sym_op->m_dst = ut_params->obuf; 2283 2284 /* digest */ 2285 if (!do_sgl) { 2286 sym_op->auth.digest.data = rte_pktmbuf_mtod_offset( 2287 (op_mode == IN_PLACE ? 2288 ut_params->ibuf : ut_params->obuf), 2289 uint8_t *, data_pad_len); 2290 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 2291 (op_mode == IN_PLACE ? 2292 ut_params->ibuf : ut_params->obuf), 2293 data_pad_len); 2294 memset(sym_op->auth.digest.data, 0, auth_tag_len); 2295 } else { 2296 uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3); 2297 struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ? 2298 sym_op->m_src : sym_op->m_dst); 2299 while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) { 2300 remaining_off -= rte_pktmbuf_data_len(sgl_buf); 2301 sgl_buf = sgl_buf->next; 2302 } 2303 sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf, 2304 uint8_t *, remaining_off); 2305 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(sgl_buf, 2306 remaining_off); 2307 memset(sym_op->auth.digest.data, 0, remaining_off); 2308 while (sgl_buf->next != NULL) { 2309 memset(rte_pktmbuf_mtod(sgl_buf, uint8_t *), 2310 0, rte_pktmbuf_data_len(sgl_buf)); 2311 sgl_buf = sgl_buf->next; 2312 } 2313 } 2314 2315 /* Copy digest for the verification */ 2316 if (verify) 2317 memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len); 2318 2319 /* Copy cipher and auth IVs at the end of the crypto operation */ 2320 uint8_t *iv_ptr = rte_crypto_op_ctod_offset( 2321 ut_params->op, uint8_t *, IV_OFFSET); 2322 2323 rte_memcpy(iv_ptr, cipher_iv, cipher_iv_len); 2324 iv_ptr += cipher_iv_len; 2325 rte_memcpy(iv_ptr, auth_iv, auth_iv_len); 2326 2327 if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 || 2328 cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 || 2329 cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) { 2330 sym_op->cipher.data.length = cipher_len; 2331 sym_op->cipher.data.offset = cipher_offset; 2332 } else { 2333 sym_op->cipher.data.length = cipher_len >> 3; 2334 sym_op->cipher.data.offset = cipher_offset >> 3; 2335 } 2336 2337 if (auth_algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2 || 2338 auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9 || 2339 auth_algo == RTE_CRYPTO_AUTH_ZUC_EIA3) { 2340 sym_op->auth.data.length = auth_len; 2341 sym_op->auth.data.offset = auth_offset; 2342 } else { 2343 sym_op->auth.data.length = auth_len >> 3; 2344 sym_op->auth.data.offset = auth_offset >> 3; 2345 } 2346 2347 return 0; 2348 } 2349 2350 static int 2351 test_snow3g_authentication(const struct snow3g_hash_test_data *tdata) 2352 { 2353 struct crypto_testsuite_params *ts_params = &testsuite_params; 2354 struct crypto_unittest_params *ut_params = &unittest_params; 2355 2356 int retval; 2357 unsigned plaintext_pad_len; 2358 unsigned plaintext_len; 2359 uint8_t *plaintext; 2360 2361 /* QAT PMD supports byte-aligned data only */ 2362 if ((tdata->validAuthLenInBits.len % 8 != 0) && 2363 (gbl_driver_id == rte_cryptodev_driver_id_get( 2364 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)))) 2365 return -ENOTSUP; 2366 2367 /* Verify the capabilities */ 2368 struct rte_cryptodev_sym_capability_idx cap_idx; 2369 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 2370 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2; 2371 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2372 &cap_idx) == NULL) 2373 return -ENOTSUP; 2374 2375 /* Create SNOW 3G session */ 2376 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0], 2377 tdata->key.data, tdata->key.len, 2378 tdata->auth_iv.len, tdata->digest.len, 2379 RTE_CRYPTO_AUTH_OP_GENERATE, 2380 RTE_CRYPTO_AUTH_SNOW3G_UIA2); 2381 if (retval < 0) 2382 return retval; 2383 2384 /* alloc mbuf and set payload */ 2385 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2386 2387 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2388 rte_pktmbuf_tailroom(ut_params->ibuf)); 2389 2390 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2391 /* Append data which is padded to a multiple of */ 2392 /* the algorithms block size */ 2393 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 2394 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2395 plaintext_pad_len); 2396 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2397 2398 /* Create SNOW 3G operation */ 2399 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len, 2400 tdata->auth_iv.data, tdata->auth_iv.len, 2401 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE, 2402 tdata->validAuthLenInBits.len, 2403 0); 2404 if (retval < 0) 2405 return retval; 2406 2407 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2408 ut_params->op); 2409 ut_params->obuf = ut_params->op->sym->m_src; 2410 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2411 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 2412 + plaintext_pad_len; 2413 2414 /* Validate obuf */ 2415 TEST_ASSERT_BUFFERS_ARE_EQUAL( 2416 ut_params->digest, 2417 tdata->digest.data, 2418 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 2419 "SNOW 3G Generated auth tag not as expected"); 2420 2421 return 0; 2422 } 2423 2424 static int 2425 test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata) 2426 { 2427 struct crypto_testsuite_params *ts_params = &testsuite_params; 2428 struct crypto_unittest_params *ut_params = &unittest_params; 2429 2430 int retval; 2431 unsigned plaintext_pad_len; 2432 unsigned plaintext_len; 2433 uint8_t *plaintext; 2434 2435 /* QAT PMD supports byte-aligned data only */ 2436 if ((tdata->validAuthLenInBits.len % 8 != 0) && 2437 (gbl_driver_id == rte_cryptodev_driver_id_get( 2438 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)))) 2439 return -ENOTSUP; 2440 2441 /* Verify the capabilities */ 2442 struct rte_cryptodev_sym_capability_idx cap_idx; 2443 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 2444 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2; 2445 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2446 &cap_idx) == NULL) 2447 return -ENOTSUP; 2448 2449 /* Create SNOW 3G session */ 2450 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0], 2451 tdata->key.data, tdata->key.len, 2452 tdata->auth_iv.len, tdata->digest.len, 2453 RTE_CRYPTO_AUTH_OP_VERIFY, 2454 RTE_CRYPTO_AUTH_SNOW3G_UIA2); 2455 if (retval < 0) 2456 return retval; 2457 /* alloc mbuf and set payload */ 2458 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2459 2460 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2461 rte_pktmbuf_tailroom(ut_params->ibuf)); 2462 2463 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2464 /* Append data which is padded to a multiple of */ 2465 /* the algorithms block size */ 2466 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 2467 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2468 plaintext_pad_len); 2469 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2470 2471 /* Create SNOW 3G operation */ 2472 retval = create_wireless_algo_hash_operation(tdata->digest.data, 2473 tdata->digest.len, 2474 tdata->auth_iv.data, tdata->auth_iv.len, 2475 plaintext_pad_len, 2476 RTE_CRYPTO_AUTH_OP_VERIFY, 2477 tdata->validAuthLenInBits.len, 2478 0); 2479 if (retval < 0) 2480 return retval; 2481 2482 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2483 ut_params->op); 2484 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2485 ut_params->obuf = ut_params->op->sym->m_src; 2486 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 2487 + plaintext_pad_len; 2488 2489 /* Validate obuf */ 2490 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS) 2491 return 0; 2492 else 2493 return -1; 2494 2495 return 0; 2496 } 2497 2498 static int 2499 test_kasumi_authentication(const struct kasumi_hash_test_data *tdata) 2500 { 2501 struct crypto_testsuite_params *ts_params = &testsuite_params; 2502 struct crypto_unittest_params *ut_params = &unittest_params; 2503 2504 int retval; 2505 unsigned plaintext_pad_len; 2506 unsigned plaintext_len; 2507 uint8_t *plaintext; 2508 2509 /* Verify the capabilities */ 2510 struct rte_cryptodev_sym_capability_idx cap_idx; 2511 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 2512 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9; 2513 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2514 &cap_idx) == NULL) 2515 return -ENOTSUP; 2516 2517 /* Create KASUMI session */ 2518 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0], 2519 tdata->key.data, tdata->key.len, 2520 0, tdata->digest.len, 2521 RTE_CRYPTO_AUTH_OP_GENERATE, 2522 RTE_CRYPTO_AUTH_KASUMI_F9); 2523 if (retval < 0) 2524 return retval; 2525 2526 /* alloc mbuf and set payload */ 2527 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2528 2529 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2530 rte_pktmbuf_tailroom(ut_params->ibuf)); 2531 2532 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2533 /* Append data which is padded to a multiple of */ 2534 /* the algorithms block size */ 2535 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 2536 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2537 plaintext_pad_len); 2538 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2539 2540 /* Create KASUMI operation */ 2541 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len, 2542 NULL, 0, 2543 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE, 2544 tdata->plaintext.len, 2545 0); 2546 if (retval < 0) 2547 return retval; 2548 2549 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2550 ut_params->op); 2551 ut_params->obuf = ut_params->op->sym->m_src; 2552 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2553 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 2554 + plaintext_pad_len; 2555 2556 /* Validate obuf */ 2557 TEST_ASSERT_BUFFERS_ARE_EQUAL( 2558 ut_params->digest, 2559 tdata->digest.data, 2560 DIGEST_BYTE_LENGTH_KASUMI_F9, 2561 "KASUMI Generated auth tag not as expected"); 2562 2563 return 0; 2564 } 2565 2566 static int 2567 test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata) 2568 { 2569 struct crypto_testsuite_params *ts_params = &testsuite_params; 2570 struct crypto_unittest_params *ut_params = &unittest_params; 2571 2572 int retval; 2573 unsigned plaintext_pad_len; 2574 unsigned plaintext_len; 2575 uint8_t *plaintext; 2576 2577 /* Verify the capabilities */ 2578 struct rte_cryptodev_sym_capability_idx cap_idx; 2579 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 2580 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9; 2581 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2582 &cap_idx) == NULL) 2583 return -ENOTSUP; 2584 2585 /* Create KASUMI session */ 2586 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0], 2587 tdata->key.data, tdata->key.len, 2588 0, tdata->digest.len, 2589 RTE_CRYPTO_AUTH_OP_VERIFY, 2590 RTE_CRYPTO_AUTH_KASUMI_F9); 2591 if (retval < 0) 2592 return retval; 2593 /* alloc mbuf and set payload */ 2594 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2595 2596 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2597 rte_pktmbuf_tailroom(ut_params->ibuf)); 2598 2599 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2600 /* Append data which is padded to a multiple */ 2601 /* of the algorithms block size */ 2602 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 2603 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2604 plaintext_pad_len); 2605 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2606 2607 /* Create KASUMI operation */ 2608 retval = create_wireless_algo_hash_operation(tdata->digest.data, 2609 tdata->digest.len, 2610 NULL, 0, 2611 plaintext_pad_len, 2612 RTE_CRYPTO_AUTH_OP_VERIFY, 2613 tdata->plaintext.len, 2614 0); 2615 if (retval < 0) 2616 return retval; 2617 2618 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2619 ut_params->op); 2620 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2621 ut_params->obuf = ut_params->op->sym->m_src; 2622 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 2623 + plaintext_pad_len; 2624 2625 /* Validate obuf */ 2626 if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS) 2627 return 0; 2628 else 2629 return -1; 2630 2631 return 0; 2632 } 2633 2634 static int 2635 test_snow3g_hash_generate_test_case_1(void) 2636 { 2637 return test_snow3g_authentication(&snow3g_hash_test_case_1); 2638 } 2639 2640 static int 2641 test_snow3g_hash_generate_test_case_2(void) 2642 { 2643 return test_snow3g_authentication(&snow3g_hash_test_case_2); 2644 } 2645 2646 static int 2647 test_snow3g_hash_generate_test_case_3(void) 2648 { 2649 return test_snow3g_authentication(&snow3g_hash_test_case_3); 2650 } 2651 2652 static int 2653 test_snow3g_hash_generate_test_case_4(void) 2654 { 2655 return test_snow3g_authentication(&snow3g_hash_test_case_4); 2656 } 2657 2658 static int 2659 test_snow3g_hash_generate_test_case_5(void) 2660 { 2661 return test_snow3g_authentication(&snow3g_hash_test_case_5); 2662 } 2663 2664 static int 2665 test_snow3g_hash_generate_test_case_6(void) 2666 { 2667 return test_snow3g_authentication(&snow3g_hash_test_case_6); 2668 } 2669 2670 static int 2671 test_snow3g_hash_verify_test_case_1(void) 2672 { 2673 return test_snow3g_authentication_verify(&snow3g_hash_test_case_1); 2674 2675 } 2676 2677 static int 2678 test_snow3g_hash_verify_test_case_2(void) 2679 { 2680 return test_snow3g_authentication_verify(&snow3g_hash_test_case_2); 2681 } 2682 2683 static int 2684 test_snow3g_hash_verify_test_case_3(void) 2685 { 2686 return test_snow3g_authentication_verify(&snow3g_hash_test_case_3); 2687 } 2688 2689 static int 2690 test_snow3g_hash_verify_test_case_4(void) 2691 { 2692 return test_snow3g_authentication_verify(&snow3g_hash_test_case_4); 2693 } 2694 2695 static int 2696 test_snow3g_hash_verify_test_case_5(void) 2697 { 2698 return test_snow3g_authentication_verify(&snow3g_hash_test_case_5); 2699 } 2700 2701 static int 2702 test_snow3g_hash_verify_test_case_6(void) 2703 { 2704 return test_snow3g_authentication_verify(&snow3g_hash_test_case_6); 2705 } 2706 2707 static int 2708 test_kasumi_hash_generate_test_case_1(void) 2709 { 2710 return test_kasumi_authentication(&kasumi_hash_test_case_1); 2711 } 2712 2713 static int 2714 test_kasumi_hash_generate_test_case_2(void) 2715 { 2716 return test_kasumi_authentication(&kasumi_hash_test_case_2); 2717 } 2718 2719 static int 2720 test_kasumi_hash_generate_test_case_3(void) 2721 { 2722 return test_kasumi_authentication(&kasumi_hash_test_case_3); 2723 } 2724 2725 static int 2726 test_kasumi_hash_generate_test_case_4(void) 2727 { 2728 return test_kasumi_authentication(&kasumi_hash_test_case_4); 2729 } 2730 2731 static int 2732 test_kasumi_hash_generate_test_case_5(void) 2733 { 2734 return test_kasumi_authentication(&kasumi_hash_test_case_5); 2735 } 2736 2737 static int 2738 test_kasumi_hash_generate_test_case_6(void) 2739 { 2740 return test_kasumi_authentication(&kasumi_hash_test_case_6); 2741 } 2742 2743 static int 2744 test_kasumi_hash_verify_test_case_1(void) 2745 { 2746 return test_kasumi_authentication_verify(&kasumi_hash_test_case_1); 2747 } 2748 2749 static int 2750 test_kasumi_hash_verify_test_case_2(void) 2751 { 2752 return test_kasumi_authentication_verify(&kasumi_hash_test_case_2); 2753 } 2754 2755 static int 2756 test_kasumi_hash_verify_test_case_3(void) 2757 { 2758 return test_kasumi_authentication_verify(&kasumi_hash_test_case_3); 2759 } 2760 2761 static int 2762 test_kasumi_hash_verify_test_case_4(void) 2763 { 2764 return test_kasumi_authentication_verify(&kasumi_hash_test_case_4); 2765 } 2766 2767 static int 2768 test_kasumi_hash_verify_test_case_5(void) 2769 { 2770 return test_kasumi_authentication_verify(&kasumi_hash_test_case_5); 2771 } 2772 2773 static int 2774 test_kasumi_encryption(const struct kasumi_test_data *tdata) 2775 { 2776 struct crypto_testsuite_params *ts_params = &testsuite_params; 2777 struct crypto_unittest_params *ut_params = &unittest_params; 2778 2779 int retval; 2780 uint8_t *plaintext, *ciphertext; 2781 unsigned plaintext_pad_len; 2782 unsigned plaintext_len; 2783 2784 /* Verify the capabilities */ 2785 struct rte_cryptodev_sym_capability_idx cap_idx; 2786 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 2787 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 2788 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2789 &cap_idx) == NULL) 2790 return -ENOTSUP; 2791 2792 /* Create KASUMI session */ 2793 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 2794 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 2795 RTE_CRYPTO_CIPHER_KASUMI_F8, 2796 tdata->key.data, tdata->key.len, 2797 tdata->cipher_iv.len); 2798 if (retval < 0) 2799 return retval; 2800 2801 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2802 2803 /* Clear mbuf payload */ 2804 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2805 rte_pktmbuf_tailroom(ut_params->ibuf)); 2806 2807 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2808 /* Append data which is padded to a multiple */ 2809 /* of the algorithms block size */ 2810 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 2811 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2812 plaintext_pad_len); 2813 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2814 2815 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 2816 2817 /* Create KASUMI operation */ 2818 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 2819 tdata->cipher_iv.len, 2820 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 2821 tdata->validCipherOffsetInBits.len); 2822 if (retval < 0) 2823 return retval; 2824 2825 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2826 ut_params->op); 2827 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2828 2829 ut_params->obuf = ut_params->op->sym->m_dst; 2830 if (ut_params->obuf) 2831 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 2832 else 2833 ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3); 2834 2835 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 2836 2837 const uint8_t *reference_ciphertext = tdata->ciphertext.data + 2838 (tdata->validCipherOffsetInBits.len >> 3); 2839 /* Validate obuf */ 2840 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 2841 ciphertext, 2842 reference_ciphertext, 2843 tdata->validCipherLenInBits.len, 2844 "KASUMI Ciphertext data not as expected"); 2845 return 0; 2846 } 2847 2848 static int 2849 test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata) 2850 { 2851 struct crypto_testsuite_params *ts_params = &testsuite_params; 2852 struct crypto_unittest_params *ut_params = &unittest_params; 2853 2854 int retval; 2855 2856 unsigned int plaintext_pad_len; 2857 unsigned int plaintext_len; 2858 2859 uint8_t buffer[10000]; 2860 const uint8_t *ciphertext; 2861 2862 struct rte_cryptodev_info dev_info; 2863 2864 /* Verify the capabilities */ 2865 struct rte_cryptodev_sym_capability_idx cap_idx; 2866 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 2867 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 2868 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2869 &cap_idx) == NULL) 2870 return -ENOTSUP; 2871 2872 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 2873 2874 uint64_t feat_flags = dev_info.feature_flags; 2875 2876 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 2877 printf("Device doesn't support in-place scatter-gather. " 2878 "Test Skipped.\n"); 2879 return -ENOTSUP; 2880 } 2881 2882 /* Create KASUMI session */ 2883 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 2884 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 2885 RTE_CRYPTO_CIPHER_KASUMI_F8, 2886 tdata->key.data, tdata->key.len, 2887 tdata->cipher_iv.len); 2888 if (retval < 0) 2889 return retval; 2890 2891 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2892 2893 2894 /* Append data which is padded to a multiple */ 2895 /* of the algorithms block size */ 2896 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 2897 2898 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 2899 plaintext_pad_len, 10, 0); 2900 2901 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data); 2902 2903 /* Create KASUMI operation */ 2904 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 2905 tdata->cipher_iv.len, 2906 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 2907 tdata->validCipherOffsetInBits.len); 2908 if (retval < 0) 2909 return retval; 2910 2911 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2912 ut_params->op); 2913 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2914 2915 ut_params->obuf = ut_params->op->sym->m_dst; 2916 2917 if (ut_params->obuf) 2918 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 2919 plaintext_len, buffer); 2920 else 2921 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 2922 tdata->validCipherOffsetInBits.len >> 3, 2923 plaintext_len, buffer); 2924 2925 /* Validate obuf */ 2926 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 2927 2928 const uint8_t *reference_ciphertext = tdata->ciphertext.data + 2929 (tdata->validCipherOffsetInBits.len >> 3); 2930 /* Validate obuf */ 2931 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 2932 ciphertext, 2933 reference_ciphertext, 2934 tdata->validCipherLenInBits.len, 2935 "KASUMI Ciphertext data not as expected"); 2936 return 0; 2937 } 2938 2939 static int 2940 test_kasumi_encryption_oop(const struct kasumi_test_data *tdata) 2941 { 2942 struct crypto_testsuite_params *ts_params = &testsuite_params; 2943 struct crypto_unittest_params *ut_params = &unittest_params; 2944 2945 int retval; 2946 uint8_t *plaintext, *ciphertext; 2947 unsigned plaintext_pad_len; 2948 unsigned plaintext_len; 2949 2950 /* Verify the capabilities */ 2951 struct rte_cryptodev_sym_capability_idx cap_idx; 2952 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 2953 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 2954 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 2955 &cap_idx) == NULL) 2956 return -ENOTSUP; 2957 2958 /* Create KASUMI session */ 2959 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 2960 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 2961 RTE_CRYPTO_CIPHER_KASUMI_F8, 2962 tdata->key.data, tdata->key.len, 2963 tdata->cipher_iv.len); 2964 if (retval < 0) 2965 return retval; 2966 2967 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2968 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 2969 2970 /* Clear mbuf payload */ 2971 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 2972 rte_pktmbuf_tailroom(ut_params->ibuf)); 2973 2974 plaintext_len = ceil_byte_length(tdata->plaintext.len); 2975 /* Append data which is padded to a multiple */ 2976 /* of the algorithms block size */ 2977 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 2978 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 2979 plaintext_pad_len); 2980 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 2981 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 2982 2983 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 2984 2985 /* Create KASUMI operation */ 2986 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 2987 tdata->cipher_iv.len, 2988 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 2989 tdata->validCipherOffsetInBits.len); 2990 if (retval < 0) 2991 return retval; 2992 2993 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 2994 ut_params->op); 2995 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 2996 2997 ut_params->obuf = ut_params->op->sym->m_dst; 2998 if (ut_params->obuf) 2999 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3000 else 3001 ciphertext = plaintext + (tdata->validCipherOffsetInBits.len >> 3); 3002 3003 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3004 3005 const uint8_t *reference_ciphertext = tdata->ciphertext.data + 3006 (tdata->validCipherOffsetInBits.len >> 3); 3007 /* Validate obuf */ 3008 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3009 ciphertext, 3010 reference_ciphertext, 3011 tdata->validCipherLenInBits.len, 3012 "KASUMI Ciphertext data not as expected"); 3013 return 0; 3014 } 3015 3016 static int 3017 test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata) 3018 { 3019 struct crypto_testsuite_params *ts_params = &testsuite_params; 3020 struct crypto_unittest_params *ut_params = &unittest_params; 3021 3022 int retval; 3023 unsigned int plaintext_pad_len; 3024 unsigned int plaintext_len; 3025 3026 const uint8_t *ciphertext; 3027 uint8_t buffer[2048]; 3028 3029 struct rte_cryptodev_info dev_info; 3030 3031 /* Verify the capabilities */ 3032 struct rte_cryptodev_sym_capability_idx cap_idx; 3033 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3034 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 3035 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3036 &cap_idx) == NULL) 3037 return -ENOTSUP; 3038 3039 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 3040 3041 uint64_t feat_flags = dev_info.feature_flags; 3042 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 3043 printf("Device doesn't support out-of-place scatter-gather " 3044 "in both input and output mbufs. " 3045 "Test Skipped.\n"); 3046 return -ENOTSUP; 3047 } 3048 3049 /* Create KASUMI session */ 3050 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3051 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3052 RTE_CRYPTO_CIPHER_KASUMI_F8, 3053 tdata->key.data, tdata->key.len, 3054 tdata->cipher_iv.len); 3055 if (retval < 0) 3056 return retval; 3057 3058 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3059 /* Append data which is padded to a multiple */ 3060 /* of the algorithms block size */ 3061 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 3062 3063 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 3064 plaintext_pad_len, 10, 0); 3065 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 3066 plaintext_pad_len, 3, 0); 3067 3068 /* Append data which is padded to a multiple */ 3069 /* of the algorithms block size */ 3070 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data); 3071 3072 /* Create KASUMI operation */ 3073 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3074 tdata->cipher_iv.len, 3075 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 3076 tdata->validCipherOffsetInBits.len); 3077 if (retval < 0) 3078 return retval; 3079 3080 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3081 ut_params->op); 3082 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3083 3084 ut_params->obuf = ut_params->op->sym->m_dst; 3085 if (ut_params->obuf) 3086 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 3087 plaintext_pad_len, buffer); 3088 else 3089 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 3090 tdata->validCipherOffsetInBits.len >> 3, 3091 plaintext_pad_len, buffer); 3092 3093 const uint8_t *reference_ciphertext = tdata->ciphertext.data + 3094 (tdata->validCipherOffsetInBits.len >> 3); 3095 /* Validate obuf */ 3096 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3097 ciphertext, 3098 reference_ciphertext, 3099 tdata->validCipherLenInBits.len, 3100 "KASUMI Ciphertext data not as expected"); 3101 return 0; 3102 } 3103 3104 3105 static int 3106 test_kasumi_decryption_oop(const struct kasumi_test_data *tdata) 3107 { 3108 struct crypto_testsuite_params *ts_params = &testsuite_params; 3109 struct crypto_unittest_params *ut_params = &unittest_params; 3110 3111 int retval; 3112 uint8_t *ciphertext, *plaintext; 3113 unsigned ciphertext_pad_len; 3114 unsigned ciphertext_len; 3115 3116 /* Verify the capabilities */ 3117 struct rte_cryptodev_sym_capability_idx cap_idx; 3118 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3119 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 3120 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3121 &cap_idx) == NULL) 3122 return -ENOTSUP; 3123 3124 /* Create KASUMI session */ 3125 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3126 RTE_CRYPTO_CIPHER_OP_DECRYPT, 3127 RTE_CRYPTO_CIPHER_KASUMI_F8, 3128 tdata->key.data, tdata->key.len, 3129 tdata->cipher_iv.len); 3130 if (retval < 0) 3131 return retval; 3132 3133 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3134 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3135 3136 /* Clear mbuf payload */ 3137 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3138 rte_pktmbuf_tailroom(ut_params->ibuf)); 3139 3140 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 3141 /* Append data which is padded to a multiple */ 3142 /* of the algorithms block size */ 3143 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8); 3144 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3145 ciphertext_pad_len); 3146 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 3147 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 3148 3149 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len); 3150 3151 /* Create KASUMI operation */ 3152 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3153 tdata->cipher_iv.len, 3154 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 3155 tdata->validCipherOffsetInBits.len); 3156 if (retval < 0) 3157 return retval; 3158 3159 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3160 ut_params->op); 3161 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3162 3163 ut_params->obuf = ut_params->op->sym->m_dst; 3164 if (ut_params->obuf) 3165 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3166 else 3167 plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3); 3168 3169 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len); 3170 3171 const uint8_t *reference_plaintext = tdata->plaintext.data + 3172 (tdata->validCipherOffsetInBits.len >> 3); 3173 /* Validate obuf */ 3174 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3175 plaintext, 3176 reference_plaintext, 3177 tdata->validCipherLenInBits.len, 3178 "KASUMI Plaintext data not as expected"); 3179 return 0; 3180 } 3181 3182 static int 3183 test_kasumi_decryption(const struct kasumi_test_data *tdata) 3184 { 3185 struct crypto_testsuite_params *ts_params = &testsuite_params; 3186 struct crypto_unittest_params *ut_params = &unittest_params; 3187 3188 int retval; 3189 uint8_t *ciphertext, *plaintext; 3190 unsigned ciphertext_pad_len; 3191 unsigned ciphertext_len; 3192 3193 /* Verify the capabilities */ 3194 struct rte_cryptodev_sym_capability_idx cap_idx; 3195 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3196 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 3197 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3198 &cap_idx) == NULL) 3199 return -ENOTSUP; 3200 3201 /* Create KASUMI session */ 3202 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3203 RTE_CRYPTO_CIPHER_OP_DECRYPT, 3204 RTE_CRYPTO_CIPHER_KASUMI_F8, 3205 tdata->key.data, tdata->key.len, 3206 tdata->cipher_iv.len); 3207 if (retval < 0) 3208 return retval; 3209 3210 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3211 3212 /* Clear mbuf payload */ 3213 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3214 rte_pktmbuf_tailroom(ut_params->ibuf)); 3215 3216 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 3217 /* Append data which is padded to a multiple */ 3218 /* of the algorithms block size */ 3219 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8); 3220 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3221 ciphertext_pad_len); 3222 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 3223 3224 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len); 3225 3226 /* Create KASUMI operation */ 3227 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 3228 tdata->cipher_iv.len, 3229 tdata->ciphertext.len, 3230 tdata->validCipherOffsetInBits.len); 3231 if (retval < 0) 3232 return retval; 3233 3234 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3235 ut_params->op); 3236 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3237 3238 ut_params->obuf = ut_params->op->sym->m_dst; 3239 if (ut_params->obuf) 3240 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3241 else 3242 plaintext = ciphertext + (tdata->validCipherOffsetInBits.len >> 3); 3243 3244 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len); 3245 3246 const uint8_t *reference_plaintext = tdata->plaintext.data + 3247 (tdata->validCipherOffsetInBits.len >> 3); 3248 /* Validate obuf */ 3249 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3250 plaintext, 3251 reference_plaintext, 3252 tdata->validCipherLenInBits.len, 3253 "KASUMI Plaintext data not as expected"); 3254 return 0; 3255 } 3256 3257 static int 3258 test_snow3g_encryption(const struct snow3g_test_data *tdata) 3259 { 3260 struct crypto_testsuite_params *ts_params = &testsuite_params; 3261 struct crypto_unittest_params *ut_params = &unittest_params; 3262 3263 int retval; 3264 uint8_t *plaintext, *ciphertext; 3265 unsigned plaintext_pad_len; 3266 unsigned plaintext_len; 3267 3268 /* Verify the capabilities */ 3269 struct rte_cryptodev_sym_capability_idx cap_idx; 3270 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3271 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3272 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3273 &cap_idx) == NULL) 3274 return -ENOTSUP; 3275 3276 /* Create SNOW 3G session */ 3277 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3278 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3279 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3280 tdata->key.data, tdata->key.len, 3281 tdata->cipher_iv.len); 3282 if (retval < 0) 3283 return retval; 3284 3285 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3286 3287 /* Clear mbuf payload */ 3288 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3289 rte_pktmbuf_tailroom(ut_params->ibuf)); 3290 3291 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3292 /* Append data which is padded to a multiple of */ 3293 /* the algorithms block size */ 3294 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3295 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3296 plaintext_pad_len); 3297 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 3298 3299 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 3300 3301 /* Create SNOW 3G operation */ 3302 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 3303 tdata->cipher_iv.len, 3304 tdata->validCipherLenInBits.len, 3305 0); 3306 if (retval < 0) 3307 return retval; 3308 3309 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3310 ut_params->op); 3311 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3312 3313 ut_params->obuf = ut_params->op->sym->m_dst; 3314 if (ut_params->obuf) 3315 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3316 else 3317 ciphertext = plaintext; 3318 3319 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3320 3321 /* Validate obuf */ 3322 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3323 ciphertext, 3324 tdata->ciphertext.data, 3325 tdata->validDataLenInBits.len, 3326 "SNOW 3G Ciphertext data not as expected"); 3327 return 0; 3328 } 3329 3330 3331 static int 3332 test_snow3g_encryption_oop(const struct snow3g_test_data *tdata) 3333 { 3334 struct crypto_testsuite_params *ts_params = &testsuite_params; 3335 struct crypto_unittest_params *ut_params = &unittest_params; 3336 uint8_t *plaintext, *ciphertext; 3337 3338 int retval; 3339 unsigned plaintext_pad_len; 3340 unsigned plaintext_len; 3341 3342 /* Verify the capabilities */ 3343 struct rte_cryptodev_sym_capability_idx cap_idx; 3344 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3345 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3346 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3347 &cap_idx) == NULL) 3348 return -ENOTSUP; 3349 3350 /* Create SNOW 3G session */ 3351 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3352 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3353 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3354 tdata->key.data, tdata->key.len, 3355 tdata->cipher_iv.len); 3356 if (retval < 0) 3357 return retval; 3358 3359 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3360 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3361 3362 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 3363 "Failed to allocate input buffer in mempool"); 3364 TEST_ASSERT_NOT_NULL(ut_params->obuf, 3365 "Failed to allocate output buffer in mempool"); 3366 3367 /* Clear mbuf payload */ 3368 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3369 rte_pktmbuf_tailroom(ut_params->ibuf)); 3370 3371 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3372 /* Append data which is padded to a multiple of */ 3373 /* the algorithms block size */ 3374 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3375 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3376 plaintext_pad_len); 3377 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 3378 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 3379 3380 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 3381 3382 /* Create SNOW 3G operation */ 3383 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3384 tdata->cipher_iv.len, 3385 tdata->validCipherLenInBits.len, 3386 0); 3387 if (retval < 0) 3388 return retval; 3389 3390 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3391 ut_params->op); 3392 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3393 3394 ut_params->obuf = ut_params->op->sym->m_dst; 3395 if (ut_params->obuf) 3396 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3397 else 3398 ciphertext = plaintext; 3399 3400 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3401 3402 /* Validate obuf */ 3403 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3404 ciphertext, 3405 tdata->ciphertext.data, 3406 tdata->validDataLenInBits.len, 3407 "SNOW 3G Ciphertext data not as expected"); 3408 return 0; 3409 } 3410 3411 static int 3412 test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata) 3413 { 3414 struct crypto_testsuite_params *ts_params = &testsuite_params; 3415 struct crypto_unittest_params *ut_params = &unittest_params; 3416 3417 int retval; 3418 unsigned int plaintext_pad_len; 3419 unsigned int plaintext_len; 3420 uint8_t buffer[10000]; 3421 const uint8_t *ciphertext; 3422 3423 struct rte_cryptodev_info dev_info; 3424 3425 /* Verify the capabilities */ 3426 struct rte_cryptodev_sym_capability_idx cap_idx; 3427 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3428 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3429 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3430 &cap_idx) == NULL) 3431 return -ENOTSUP; 3432 3433 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 3434 3435 uint64_t feat_flags = dev_info.feature_flags; 3436 3437 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 3438 printf("Device doesn't support out-of-place scatter-gather " 3439 "in both input and output mbufs. " 3440 "Test Skipped.\n"); 3441 return -ENOTSUP; 3442 } 3443 3444 /* Create SNOW 3G session */ 3445 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3446 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3447 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3448 tdata->key.data, tdata->key.len, 3449 tdata->cipher_iv.len); 3450 if (retval < 0) 3451 return retval; 3452 3453 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3454 /* Append data which is padded to a multiple of */ 3455 /* the algorithms block size */ 3456 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3457 3458 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 3459 plaintext_pad_len, 10, 0); 3460 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 3461 plaintext_pad_len, 3, 0); 3462 3463 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 3464 "Failed to allocate input buffer in mempool"); 3465 TEST_ASSERT_NOT_NULL(ut_params->obuf, 3466 "Failed to allocate output buffer in mempool"); 3467 3468 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data); 3469 3470 /* Create SNOW 3G operation */ 3471 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3472 tdata->cipher_iv.len, 3473 tdata->validCipherLenInBits.len, 3474 0); 3475 if (retval < 0) 3476 return retval; 3477 3478 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3479 ut_params->op); 3480 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3481 3482 ut_params->obuf = ut_params->op->sym->m_dst; 3483 if (ut_params->obuf) 3484 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 3485 plaintext_len, buffer); 3486 else 3487 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 3488 plaintext_len, buffer); 3489 3490 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3491 3492 /* Validate obuf */ 3493 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3494 ciphertext, 3495 tdata->ciphertext.data, 3496 tdata->validDataLenInBits.len, 3497 "SNOW 3G Ciphertext data not as expected"); 3498 3499 return 0; 3500 } 3501 3502 /* Shift right a buffer by "offset" bits, "offset" < 8 */ 3503 static void 3504 buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset) 3505 { 3506 uint8_t curr_byte, prev_byte; 3507 uint32_t length_in_bytes = ceil_byte_length(length + offset); 3508 uint8_t lower_byte_mask = (1 << offset) - 1; 3509 unsigned i; 3510 3511 prev_byte = buffer[0]; 3512 buffer[0] >>= offset; 3513 3514 for (i = 1; i < length_in_bytes; i++) { 3515 curr_byte = buffer[i]; 3516 buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) | 3517 (curr_byte >> offset); 3518 prev_byte = curr_byte; 3519 } 3520 } 3521 3522 static int 3523 test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata) 3524 { 3525 struct crypto_testsuite_params *ts_params = &testsuite_params; 3526 struct crypto_unittest_params *ut_params = &unittest_params; 3527 uint8_t *plaintext, *ciphertext; 3528 int retval; 3529 uint32_t plaintext_len; 3530 uint32_t plaintext_pad_len; 3531 uint8_t extra_offset = 4; 3532 uint8_t *expected_ciphertext_shifted; 3533 3534 /* QAT PMD supports byte-aligned data only */ 3535 if (gbl_driver_id == rte_cryptodev_driver_id_get( 3536 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD))) 3537 return -ENOTSUP; 3538 3539 /* Verify the capabilities */ 3540 struct rte_cryptodev_sym_capability_idx cap_idx; 3541 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3542 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3543 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3544 &cap_idx) == NULL) 3545 return -ENOTSUP; 3546 3547 /* Create SNOW 3G session */ 3548 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3549 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3550 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3551 tdata->key.data, tdata->key.len, 3552 tdata->cipher_iv.len); 3553 if (retval < 0) 3554 return retval; 3555 3556 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3557 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3558 3559 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 3560 "Failed to allocate input buffer in mempool"); 3561 TEST_ASSERT_NOT_NULL(ut_params->obuf, 3562 "Failed to allocate output buffer in mempool"); 3563 3564 /* Clear mbuf payload */ 3565 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3566 rte_pktmbuf_tailroom(ut_params->ibuf)); 3567 3568 plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset); 3569 /* 3570 * Append data which is padded to a 3571 * multiple of the algorithms block size 3572 */ 3573 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3574 3575 plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf, 3576 plaintext_pad_len); 3577 3578 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 3579 3580 memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3)); 3581 buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset); 3582 3583 #ifdef RTE_APP_TEST_DEBUG 3584 rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len); 3585 #endif 3586 /* Create SNOW 3G operation */ 3587 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3588 tdata->cipher_iv.len, 3589 tdata->validCipherLenInBits.len, 3590 extra_offset); 3591 if (retval < 0) 3592 return retval; 3593 3594 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3595 ut_params->op); 3596 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3597 3598 ut_params->obuf = ut_params->op->sym->m_dst; 3599 if (ut_params->obuf) 3600 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3601 else 3602 ciphertext = plaintext; 3603 3604 #ifdef RTE_APP_TEST_DEBUG 3605 rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3606 #endif 3607 3608 expected_ciphertext_shifted = rte_malloc(NULL, plaintext_len, 8); 3609 3610 TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted, 3611 "failed to reserve memory for ciphertext shifted\n"); 3612 3613 memcpy(expected_ciphertext_shifted, tdata->ciphertext.data, 3614 ceil_byte_length(tdata->ciphertext.len)); 3615 buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len, 3616 extra_offset); 3617 /* Validate obuf */ 3618 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET( 3619 ciphertext, 3620 expected_ciphertext_shifted, 3621 tdata->validDataLenInBits.len, 3622 extra_offset, 3623 "SNOW 3G Ciphertext data not as expected"); 3624 return 0; 3625 } 3626 3627 static int test_snow3g_decryption(const struct snow3g_test_data *tdata) 3628 { 3629 struct crypto_testsuite_params *ts_params = &testsuite_params; 3630 struct crypto_unittest_params *ut_params = &unittest_params; 3631 3632 int retval; 3633 3634 uint8_t *plaintext, *ciphertext; 3635 unsigned ciphertext_pad_len; 3636 unsigned ciphertext_len; 3637 3638 /* Verify the capabilities */ 3639 struct rte_cryptodev_sym_capability_idx cap_idx; 3640 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3641 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3642 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3643 &cap_idx) == NULL) 3644 return -ENOTSUP; 3645 3646 /* Create SNOW 3G session */ 3647 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3648 RTE_CRYPTO_CIPHER_OP_DECRYPT, 3649 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3650 tdata->key.data, tdata->key.len, 3651 tdata->cipher_iv.len); 3652 if (retval < 0) 3653 return retval; 3654 3655 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3656 3657 /* Clear mbuf payload */ 3658 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3659 rte_pktmbuf_tailroom(ut_params->ibuf)); 3660 3661 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 3662 /* Append data which is padded to a multiple of */ 3663 /* the algorithms block size */ 3664 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 3665 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3666 ciphertext_pad_len); 3667 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 3668 3669 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len); 3670 3671 /* Create SNOW 3G operation */ 3672 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 3673 tdata->cipher_iv.len, 3674 tdata->validCipherLenInBits.len, 3675 tdata->cipher.offset_bits); 3676 if (retval < 0) 3677 return retval; 3678 3679 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3680 ut_params->op); 3681 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3682 ut_params->obuf = ut_params->op->sym->m_dst; 3683 if (ut_params->obuf) 3684 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3685 else 3686 plaintext = ciphertext; 3687 3688 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len); 3689 3690 /* Validate obuf */ 3691 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext, 3692 tdata->plaintext.data, 3693 tdata->validDataLenInBits.len, 3694 "SNOW 3G Plaintext data not as expected"); 3695 return 0; 3696 } 3697 3698 static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata) 3699 { 3700 struct crypto_testsuite_params *ts_params = &testsuite_params; 3701 struct crypto_unittest_params *ut_params = &unittest_params; 3702 3703 int retval; 3704 3705 uint8_t *plaintext, *ciphertext; 3706 unsigned ciphertext_pad_len; 3707 unsigned ciphertext_len; 3708 3709 /* Verify the capabilities */ 3710 struct rte_cryptodev_sym_capability_idx cap_idx; 3711 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3712 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3713 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3714 &cap_idx) == NULL) 3715 return -ENOTSUP; 3716 3717 /* Create SNOW 3G session */ 3718 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 3719 RTE_CRYPTO_CIPHER_OP_DECRYPT, 3720 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3721 tdata->key.data, tdata->key.len, 3722 tdata->cipher_iv.len); 3723 if (retval < 0) 3724 return retval; 3725 3726 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3727 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3728 3729 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 3730 "Failed to allocate input buffer"); 3731 TEST_ASSERT_NOT_NULL(ut_params->obuf, 3732 "Failed to allocate output buffer"); 3733 3734 /* Clear mbuf payload */ 3735 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3736 rte_pktmbuf_tailroom(ut_params->ibuf)); 3737 3738 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 3739 rte_pktmbuf_tailroom(ut_params->obuf)); 3740 3741 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 3742 /* Append data which is padded to a multiple of */ 3743 /* the algorithms block size */ 3744 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 3745 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3746 ciphertext_pad_len); 3747 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 3748 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 3749 3750 debug_hexdump(stdout, "ciphertext:", ciphertext, ciphertext_len); 3751 3752 /* Create SNOW 3G operation */ 3753 retval = create_wireless_algo_cipher_operation_oop(tdata->cipher_iv.data, 3754 tdata->cipher_iv.len, 3755 tdata->validCipherLenInBits.len, 3756 0); 3757 if (retval < 0) 3758 return retval; 3759 3760 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3761 ut_params->op); 3762 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3763 ut_params->obuf = ut_params->op->sym->m_dst; 3764 if (ut_params->obuf) 3765 plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3766 else 3767 plaintext = ciphertext; 3768 3769 debug_hexdump(stdout, "plaintext:", plaintext, ciphertext_len); 3770 3771 /* Validate obuf */ 3772 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext, 3773 tdata->plaintext.data, 3774 tdata->validDataLenInBits.len, 3775 "SNOW 3G Plaintext data not as expected"); 3776 return 0; 3777 } 3778 3779 static int 3780 test_zuc_cipher_auth(const struct wireless_test_data *tdata) 3781 { 3782 struct crypto_testsuite_params *ts_params = &testsuite_params; 3783 struct crypto_unittest_params *ut_params = &unittest_params; 3784 3785 int retval; 3786 3787 uint8_t *plaintext, *ciphertext; 3788 unsigned int plaintext_pad_len; 3789 unsigned int plaintext_len; 3790 3791 struct rte_cryptodev_sym_capability_idx cap_idx; 3792 3793 /* Check if device supports ZUC EEA3 */ 3794 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3795 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3; 3796 3797 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3798 &cap_idx) == NULL) 3799 return -ENOTSUP; 3800 3801 /* Check if device supports ZUC EIA3 */ 3802 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 3803 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3; 3804 3805 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3806 &cap_idx) == NULL) 3807 return -ENOTSUP; 3808 3809 /* Create ZUC session */ 3810 retval = create_zuc_cipher_auth_encrypt_generate_session( 3811 ts_params->valid_devs[0], 3812 tdata); 3813 if (retval < 0) 3814 return retval; 3815 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3816 3817 /* clear mbuf payload */ 3818 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3819 rte_pktmbuf_tailroom(ut_params->ibuf)); 3820 3821 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3822 /* Append data which is padded to a multiple of */ 3823 /* the algorithms block size */ 3824 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3825 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3826 plaintext_pad_len); 3827 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 3828 3829 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 3830 3831 /* Create ZUC operation */ 3832 retval = create_zuc_cipher_hash_generate_operation(tdata); 3833 if (retval < 0) 3834 return retval; 3835 3836 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3837 ut_params->op); 3838 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3839 ut_params->obuf = ut_params->op->sym->m_src; 3840 if (ut_params->obuf) 3841 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3842 else 3843 ciphertext = plaintext; 3844 3845 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3846 /* Validate obuf */ 3847 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3848 ciphertext, 3849 tdata->ciphertext.data, 3850 tdata->validDataLenInBits.len, 3851 "ZUC Ciphertext data not as expected"); 3852 3853 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 3854 + plaintext_pad_len; 3855 3856 /* Validate obuf */ 3857 TEST_ASSERT_BUFFERS_ARE_EQUAL( 3858 ut_params->digest, 3859 tdata->digest.data, 3860 4, 3861 "ZUC Generated auth tag not as expected"); 3862 return 0; 3863 } 3864 3865 static int 3866 test_snow3g_cipher_auth(const struct snow3g_test_data *tdata) 3867 { 3868 struct crypto_testsuite_params *ts_params = &testsuite_params; 3869 struct crypto_unittest_params *ut_params = &unittest_params; 3870 3871 int retval; 3872 3873 uint8_t *plaintext, *ciphertext; 3874 unsigned plaintext_pad_len; 3875 unsigned plaintext_len; 3876 3877 /* Verify the capabilities */ 3878 struct rte_cryptodev_sym_capability_idx cap_idx; 3879 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 3880 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2; 3881 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3882 &cap_idx) == NULL) 3883 return -ENOTSUP; 3884 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3885 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3886 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3887 &cap_idx) == NULL) 3888 return -ENOTSUP; 3889 3890 /* Create SNOW 3G session */ 3891 retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0], 3892 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 3893 RTE_CRYPTO_AUTH_OP_GENERATE, 3894 RTE_CRYPTO_AUTH_SNOW3G_UIA2, 3895 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 3896 tdata->key.data, tdata->key.len, 3897 tdata->auth_iv.len, tdata->digest.len, 3898 tdata->cipher_iv.len); 3899 if (retval < 0) 3900 return retval; 3901 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 3902 3903 /* clear mbuf payload */ 3904 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 3905 rte_pktmbuf_tailroom(ut_params->ibuf)); 3906 3907 plaintext_len = ceil_byte_length(tdata->plaintext.len); 3908 /* Append data which is padded to a multiple of */ 3909 /* the algorithms block size */ 3910 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 3911 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 3912 plaintext_pad_len); 3913 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 3914 3915 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 3916 3917 /* Create SNOW 3G operation */ 3918 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data, 3919 tdata->digest.len, tdata->auth_iv.data, 3920 tdata->auth_iv.len, 3921 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE, 3922 tdata->cipher_iv.data, tdata->cipher_iv.len, 3923 tdata->validCipherLenInBits.len, 3924 0, 3925 tdata->validAuthLenInBits.len, 3926 0 3927 ); 3928 if (retval < 0) 3929 return retval; 3930 3931 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 3932 ut_params->op); 3933 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 3934 ut_params->obuf = ut_params->op->sym->m_src; 3935 if (ut_params->obuf) 3936 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 3937 else 3938 ciphertext = plaintext; 3939 3940 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 3941 /* Validate obuf */ 3942 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 3943 ciphertext, 3944 tdata->ciphertext.data, 3945 tdata->validDataLenInBits.len, 3946 "SNOW 3G Ciphertext data not as expected"); 3947 3948 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 3949 + plaintext_pad_len; 3950 3951 /* Validate obuf */ 3952 TEST_ASSERT_BUFFERS_ARE_EQUAL( 3953 ut_params->digest, 3954 tdata->digest.data, 3955 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 3956 "SNOW 3G Generated auth tag not as expected"); 3957 return 0; 3958 } 3959 3960 static int 3961 test_snow3g_auth_cipher(const struct snow3g_test_data *tdata, 3962 uint8_t op_mode, uint8_t verify) 3963 { 3964 struct crypto_testsuite_params *ts_params = &testsuite_params; 3965 struct crypto_unittest_params *ut_params = &unittest_params; 3966 3967 int retval; 3968 3969 uint8_t *plaintext = NULL, *ciphertext = NULL; 3970 unsigned int plaintext_pad_len; 3971 unsigned int plaintext_len; 3972 unsigned int ciphertext_pad_len; 3973 unsigned int ciphertext_len; 3974 3975 struct rte_cryptodev_info dev_info; 3976 3977 /* Verify the capabilities */ 3978 struct rte_cryptodev_sym_capability_idx cap_idx; 3979 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 3980 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2; 3981 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3982 &cap_idx) == NULL) 3983 return -ENOTSUP; 3984 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 3985 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 3986 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 3987 &cap_idx) == NULL) 3988 return -ENOTSUP; 3989 3990 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 3991 3992 uint64_t feat_flags = dev_info.feature_flags; 3993 3994 if (op_mode == OUT_OF_PLACE) { 3995 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 3996 printf("Device doesn't support digest encrypted.\n"); 3997 return -ENOTSUP; 3998 } 3999 } 4000 4001 /* Create SNOW 3G session */ 4002 retval = create_wireless_algo_auth_cipher_session( 4003 ts_params->valid_devs[0], 4004 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 4005 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 4006 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 4007 : RTE_CRYPTO_AUTH_OP_GENERATE), 4008 RTE_CRYPTO_AUTH_SNOW3G_UIA2, 4009 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 4010 tdata->key.data, tdata->key.len, 4011 tdata->auth_iv.len, tdata->digest.len, 4012 tdata->cipher_iv.len); 4013 4014 if (retval < 0) 4015 return retval; 4016 4017 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4018 if (op_mode == OUT_OF_PLACE) 4019 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4020 4021 /* clear mbuf payload */ 4022 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 4023 rte_pktmbuf_tailroom(ut_params->ibuf)); 4024 if (op_mode == OUT_OF_PLACE) 4025 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 4026 rte_pktmbuf_tailroom(ut_params->obuf)); 4027 4028 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 4029 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4030 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 4031 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 4032 4033 if (verify) { 4034 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4035 ciphertext_pad_len); 4036 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 4037 if (op_mode == OUT_OF_PLACE) 4038 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 4039 debug_hexdump(stdout, "ciphertext:", ciphertext, 4040 ciphertext_len); 4041 } else { 4042 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4043 plaintext_pad_len); 4044 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 4045 if (op_mode == OUT_OF_PLACE) 4046 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 4047 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 4048 } 4049 4050 /* Create SNOW 3G operation */ 4051 retval = create_wireless_algo_auth_cipher_operation( 4052 tdata->digest.data, tdata->digest.len, 4053 tdata->cipher_iv.data, tdata->cipher_iv.len, 4054 tdata->auth_iv.data, tdata->auth_iv.len, 4055 (tdata->digest.offset_bytes == 0 ? 4056 (verify ? ciphertext_pad_len : plaintext_pad_len) 4057 : tdata->digest.offset_bytes), 4058 tdata->validCipherLenInBits.len, 4059 tdata->cipher.offset_bits, 4060 tdata->validAuthLenInBits.len, 4061 tdata->auth.offset_bits, 4062 op_mode, 0, verify); 4063 4064 if (retval < 0) 4065 return retval; 4066 4067 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4068 ut_params->op); 4069 4070 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4071 4072 ut_params->obuf = (op_mode == IN_PLACE ? 4073 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 4074 4075 if (verify) { 4076 if (ut_params->obuf) 4077 plaintext = rte_pktmbuf_mtod(ut_params->obuf, 4078 uint8_t *); 4079 else 4080 plaintext = ciphertext + 4081 (tdata->cipher.offset_bits >> 3); 4082 4083 debug_hexdump(stdout, "plaintext:", plaintext, 4084 (tdata->plaintext.len >> 3) - tdata->digest.len); 4085 debug_hexdump(stdout, "plaintext expected:", 4086 tdata->plaintext.data, 4087 (tdata->plaintext.len >> 3) - tdata->digest.len); 4088 } else { 4089 if (ut_params->obuf) 4090 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, 4091 uint8_t *); 4092 else 4093 ciphertext = plaintext; 4094 4095 debug_hexdump(stdout, "ciphertext:", ciphertext, 4096 ciphertext_len); 4097 debug_hexdump(stdout, "ciphertext expected:", 4098 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 4099 4100 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 4101 + (tdata->digest.offset_bytes == 0 ? 4102 plaintext_pad_len : tdata->digest.offset_bytes); 4103 4104 debug_hexdump(stdout, "digest:", ut_params->digest, 4105 tdata->digest.len); 4106 debug_hexdump(stdout, "digest expected:", tdata->digest.data, 4107 tdata->digest.len); 4108 } 4109 4110 /* Validate obuf */ 4111 if (verify) { 4112 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4113 plaintext, 4114 tdata->plaintext.data, 4115 tdata->plaintext.len >> 3, 4116 "SNOW 3G Plaintext data not as expected"); 4117 } else { 4118 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4119 ciphertext, 4120 tdata->ciphertext.data, 4121 tdata->validDataLenInBits.len, 4122 "SNOW 3G Ciphertext data not as expected"); 4123 4124 TEST_ASSERT_BUFFERS_ARE_EQUAL( 4125 ut_params->digest, 4126 tdata->digest.data, 4127 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 4128 "SNOW 3G Generated auth tag not as expected"); 4129 } 4130 return 0; 4131 } 4132 4133 static int 4134 test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata, 4135 uint8_t op_mode, uint8_t verify) 4136 { 4137 struct crypto_testsuite_params *ts_params = &testsuite_params; 4138 struct crypto_unittest_params *ut_params = &unittest_params; 4139 4140 int retval; 4141 4142 const uint8_t *plaintext = NULL; 4143 const uint8_t *ciphertext = NULL; 4144 const uint8_t *digest = NULL; 4145 unsigned int plaintext_pad_len; 4146 unsigned int plaintext_len; 4147 unsigned int ciphertext_pad_len; 4148 unsigned int ciphertext_len; 4149 uint8_t buffer[10000]; 4150 uint8_t digest_buffer[10000]; 4151 4152 struct rte_cryptodev_info dev_info; 4153 4154 /* Verify the capabilities */ 4155 struct rte_cryptodev_sym_capability_idx cap_idx; 4156 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 4157 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SNOW3G_UIA2; 4158 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4159 &cap_idx) == NULL) 4160 return -ENOTSUP; 4161 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4162 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; 4163 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4164 &cap_idx) == NULL) 4165 return -ENOTSUP; 4166 4167 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 4168 4169 uint64_t feat_flags = dev_info.feature_flags; 4170 4171 if (op_mode == IN_PLACE) { 4172 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 4173 printf("Device doesn't support in-place scatter-gather " 4174 "in both input and output mbufs.\n"); 4175 return -ENOTSUP; 4176 } 4177 } else { 4178 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 4179 printf("Device doesn't support out-of-place scatter-gather " 4180 "in both input and output mbufs.\n"); 4181 return -ENOTSUP; 4182 } 4183 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 4184 printf("Device doesn't support digest encrypted.\n"); 4185 return -ENOTSUP; 4186 } 4187 } 4188 4189 /* Create SNOW 3G session */ 4190 retval = create_wireless_algo_auth_cipher_session( 4191 ts_params->valid_devs[0], 4192 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 4193 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 4194 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 4195 : RTE_CRYPTO_AUTH_OP_GENERATE), 4196 RTE_CRYPTO_AUTH_SNOW3G_UIA2, 4197 RTE_CRYPTO_CIPHER_SNOW3G_UEA2, 4198 tdata->key.data, tdata->key.len, 4199 tdata->auth_iv.len, tdata->digest.len, 4200 tdata->cipher_iv.len); 4201 4202 if (retval < 0) 4203 return retval; 4204 4205 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 4206 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4207 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 4208 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 4209 4210 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 4211 plaintext_pad_len, 15, 0); 4212 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 4213 "Failed to allocate input buffer in mempool"); 4214 4215 if (op_mode == OUT_OF_PLACE) { 4216 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 4217 plaintext_pad_len, 15, 0); 4218 TEST_ASSERT_NOT_NULL(ut_params->obuf, 4219 "Failed to allocate output buffer in mempool"); 4220 } 4221 4222 if (verify) { 4223 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len, 4224 tdata->ciphertext.data); 4225 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 4226 ciphertext_len, buffer); 4227 debug_hexdump(stdout, "ciphertext:", ciphertext, 4228 ciphertext_len); 4229 } else { 4230 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, 4231 tdata->plaintext.data); 4232 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 4233 plaintext_len, buffer); 4234 debug_hexdump(stdout, "plaintext:", plaintext, 4235 plaintext_len); 4236 } 4237 memset(buffer, 0, sizeof(buffer)); 4238 4239 /* Create SNOW 3G operation */ 4240 retval = create_wireless_algo_auth_cipher_operation( 4241 tdata->digest.data, tdata->digest.len, 4242 tdata->cipher_iv.data, tdata->cipher_iv.len, 4243 tdata->auth_iv.data, tdata->auth_iv.len, 4244 (tdata->digest.offset_bytes == 0 ? 4245 (verify ? ciphertext_pad_len : plaintext_pad_len) 4246 : tdata->digest.offset_bytes), 4247 tdata->validCipherLenInBits.len, 4248 tdata->cipher.offset_bits, 4249 tdata->validAuthLenInBits.len, 4250 tdata->auth.offset_bits, 4251 op_mode, 1, verify); 4252 4253 if (retval < 0) 4254 return retval; 4255 4256 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4257 ut_params->op); 4258 4259 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4260 4261 ut_params->obuf = (op_mode == IN_PLACE ? 4262 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 4263 4264 if (verify) { 4265 if (ut_params->obuf) 4266 plaintext = rte_pktmbuf_read(ut_params->obuf, 0, 4267 plaintext_len, buffer); 4268 else 4269 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 4270 plaintext_len, buffer); 4271 4272 debug_hexdump(stdout, "plaintext:", plaintext, 4273 (tdata->plaintext.len >> 3) - tdata->digest.len); 4274 debug_hexdump(stdout, "plaintext expected:", 4275 tdata->plaintext.data, 4276 (tdata->plaintext.len >> 3) - tdata->digest.len); 4277 } else { 4278 if (ut_params->obuf) 4279 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 4280 ciphertext_len, buffer); 4281 else 4282 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 4283 ciphertext_len, buffer); 4284 4285 debug_hexdump(stdout, "ciphertext:", ciphertext, 4286 ciphertext_len); 4287 debug_hexdump(stdout, "ciphertext expected:", 4288 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 4289 4290 if (ut_params->obuf) 4291 digest = rte_pktmbuf_read(ut_params->obuf, 4292 (tdata->digest.offset_bytes == 0 ? 4293 plaintext_pad_len : tdata->digest.offset_bytes), 4294 tdata->digest.len, digest_buffer); 4295 else 4296 digest = rte_pktmbuf_read(ut_params->ibuf, 4297 (tdata->digest.offset_bytes == 0 ? 4298 plaintext_pad_len : tdata->digest.offset_bytes), 4299 tdata->digest.len, digest_buffer); 4300 4301 debug_hexdump(stdout, "digest:", digest, 4302 tdata->digest.len); 4303 debug_hexdump(stdout, "digest expected:", 4304 tdata->digest.data, tdata->digest.len); 4305 } 4306 4307 /* Validate obuf */ 4308 if (verify) { 4309 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4310 plaintext, 4311 tdata->plaintext.data, 4312 tdata->plaintext.len >> 3, 4313 "SNOW 3G Plaintext data not as expected"); 4314 } else { 4315 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4316 ciphertext, 4317 tdata->ciphertext.data, 4318 tdata->validDataLenInBits.len, 4319 "SNOW 3G Ciphertext data not as expected"); 4320 4321 TEST_ASSERT_BUFFERS_ARE_EQUAL( 4322 digest, 4323 tdata->digest.data, 4324 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 4325 "SNOW 3G Generated auth tag not as expected"); 4326 } 4327 return 0; 4328 } 4329 4330 static int 4331 test_kasumi_auth_cipher(const struct kasumi_test_data *tdata, 4332 uint8_t op_mode, uint8_t verify) 4333 { 4334 struct crypto_testsuite_params *ts_params = &testsuite_params; 4335 struct crypto_unittest_params *ut_params = &unittest_params; 4336 4337 int retval; 4338 4339 uint8_t *plaintext = NULL, *ciphertext = NULL; 4340 unsigned int plaintext_pad_len; 4341 unsigned int plaintext_len; 4342 unsigned int ciphertext_pad_len; 4343 unsigned int ciphertext_len; 4344 4345 struct rte_cryptodev_info dev_info; 4346 4347 /* Verify the capabilities */ 4348 struct rte_cryptodev_sym_capability_idx cap_idx; 4349 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 4350 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9; 4351 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4352 &cap_idx) == NULL) 4353 return -ENOTSUP; 4354 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4355 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 4356 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4357 &cap_idx) == NULL) 4358 return -ENOTSUP; 4359 4360 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 4361 4362 uint64_t feat_flags = dev_info.feature_flags; 4363 4364 if (op_mode == OUT_OF_PLACE) { 4365 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 4366 printf("Device doesn't support digest encrypted.\n"); 4367 return -ENOTSUP; 4368 } 4369 } 4370 4371 /* Create KASUMI session */ 4372 retval = create_wireless_algo_auth_cipher_session( 4373 ts_params->valid_devs[0], 4374 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 4375 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 4376 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 4377 : RTE_CRYPTO_AUTH_OP_GENERATE), 4378 RTE_CRYPTO_AUTH_KASUMI_F9, 4379 RTE_CRYPTO_CIPHER_KASUMI_F8, 4380 tdata->key.data, tdata->key.len, 4381 0, tdata->digest.len, 4382 tdata->cipher_iv.len); 4383 4384 if (retval < 0) 4385 return retval; 4386 4387 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4388 if (op_mode == OUT_OF_PLACE) 4389 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4390 4391 /* clear mbuf payload */ 4392 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 4393 rte_pktmbuf_tailroom(ut_params->ibuf)); 4394 if (op_mode == OUT_OF_PLACE) 4395 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 4396 rte_pktmbuf_tailroom(ut_params->obuf)); 4397 4398 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 4399 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4400 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 4401 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 4402 4403 if (verify) { 4404 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4405 ciphertext_pad_len); 4406 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 4407 if (op_mode == OUT_OF_PLACE) 4408 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 4409 debug_hexdump(stdout, "ciphertext:", ciphertext, 4410 ciphertext_len); 4411 } else { 4412 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4413 plaintext_pad_len); 4414 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 4415 if (op_mode == OUT_OF_PLACE) 4416 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 4417 debug_hexdump(stdout, "plaintext:", plaintext, 4418 plaintext_len); 4419 } 4420 4421 /* Create KASUMI operation */ 4422 retval = create_wireless_algo_auth_cipher_operation( 4423 tdata->digest.data, tdata->digest.len, 4424 tdata->cipher_iv.data, tdata->cipher_iv.len, 4425 NULL, 0, 4426 (tdata->digest.offset_bytes == 0 ? 4427 (verify ? ciphertext_pad_len : plaintext_pad_len) 4428 : tdata->digest.offset_bytes), 4429 tdata->validCipherLenInBits.len, 4430 tdata->validCipherOffsetInBits.len, 4431 tdata->validAuthLenInBits.len, 4432 0, 4433 op_mode, 0, verify); 4434 4435 if (retval < 0) 4436 return retval; 4437 4438 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4439 ut_params->op); 4440 4441 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4442 4443 ut_params->obuf = (op_mode == IN_PLACE ? 4444 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 4445 4446 4447 if (verify) { 4448 if (ut_params->obuf) 4449 plaintext = rte_pktmbuf_mtod(ut_params->obuf, 4450 uint8_t *); 4451 else 4452 plaintext = ciphertext; 4453 4454 debug_hexdump(stdout, "plaintext:", plaintext, 4455 (tdata->plaintext.len >> 3) - tdata->digest.len); 4456 debug_hexdump(stdout, "plaintext expected:", 4457 tdata->plaintext.data, 4458 (tdata->plaintext.len >> 3) - tdata->digest.len); 4459 } else { 4460 if (ut_params->obuf) 4461 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, 4462 uint8_t *); 4463 else 4464 ciphertext = plaintext; 4465 4466 debug_hexdump(stdout, "ciphertext:", ciphertext, 4467 ciphertext_len); 4468 debug_hexdump(stdout, "ciphertext expected:", 4469 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 4470 4471 ut_params->digest = rte_pktmbuf_mtod( 4472 ut_params->obuf, uint8_t *) + 4473 (tdata->digest.offset_bytes == 0 ? 4474 plaintext_pad_len : tdata->digest.offset_bytes); 4475 4476 debug_hexdump(stdout, "digest:", ut_params->digest, 4477 tdata->digest.len); 4478 debug_hexdump(stdout, "digest expected:", 4479 tdata->digest.data, tdata->digest.len); 4480 } 4481 4482 /* Validate obuf */ 4483 if (verify) { 4484 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4485 plaintext, 4486 tdata->plaintext.data, 4487 tdata->plaintext.len >> 3, 4488 "KASUMI Plaintext data not as expected"); 4489 } else { 4490 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4491 ciphertext, 4492 tdata->ciphertext.data, 4493 tdata->ciphertext.len >> 3, 4494 "KASUMI Ciphertext data not as expected"); 4495 4496 TEST_ASSERT_BUFFERS_ARE_EQUAL( 4497 ut_params->digest, 4498 tdata->digest.data, 4499 DIGEST_BYTE_LENGTH_KASUMI_F9, 4500 "KASUMI Generated auth tag not as expected"); 4501 } 4502 return 0; 4503 } 4504 4505 static int 4506 test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata, 4507 uint8_t op_mode, uint8_t verify) 4508 { 4509 struct crypto_testsuite_params *ts_params = &testsuite_params; 4510 struct crypto_unittest_params *ut_params = &unittest_params; 4511 4512 int retval; 4513 4514 const uint8_t *plaintext = NULL; 4515 const uint8_t *ciphertext = NULL; 4516 const uint8_t *digest = NULL; 4517 unsigned int plaintext_pad_len; 4518 unsigned int plaintext_len; 4519 unsigned int ciphertext_pad_len; 4520 unsigned int ciphertext_len; 4521 uint8_t buffer[10000]; 4522 uint8_t digest_buffer[10000]; 4523 4524 struct rte_cryptodev_info dev_info; 4525 4526 /* Verify the capabilities */ 4527 struct rte_cryptodev_sym_capability_idx cap_idx; 4528 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 4529 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9; 4530 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4531 &cap_idx) == NULL) 4532 return -ENOTSUP; 4533 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4534 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 4535 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4536 &cap_idx) == NULL) 4537 return -ENOTSUP; 4538 4539 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 4540 4541 uint64_t feat_flags = dev_info.feature_flags; 4542 4543 if (op_mode == IN_PLACE) { 4544 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 4545 printf("Device doesn't support in-place scatter-gather " 4546 "in both input and output mbufs.\n"); 4547 return -ENOTSUP; 4548 } 4549 } else { 4550 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 4551 printf("Device doesn't support out-of-place scatter-gather " 4552 "in both input and output mbufs.\n"); 4553 return -ENOTSUP; 4554 } 4555 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 4556 printf("Device doesn't support digest encrypted.\n"); 4557 return -ENOTSUP; 4558 } 4559 } 4560 4561 /* Create KASUMI session */ 4562 retval = create_wireless_algo_auth_cipher_session( 4563 ts_params->valid_devs[0], 4564 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 4565 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 4566 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 4567 : RTE_CRYPTO_AUTH_OP_GENERATE), 4568 RTE_CRYPTO_AUTH_KASUMI_F9, 4569 RTE_CRYPTO_CIPHER_KASUMI_F8, 4570 tdata->key.data, tdata->key.len, 4571 0, tdata->digest.len, 4572 tdata->cipher_iv.len); 4573 4574 if (retval < 0) 4575 return retval; 4576 4577 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 4578 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4579 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 4580 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 4581 4582 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 4583 plaintext_pad_len, 15, 0); 4584 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 4585 "Failed to allocate input buffer in mempool"); 4586 4587 if (op_mode == OUT_OF_PLACE) { 4588 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 4589 plaintext_pad_len, 15, 0); 4590 TEST_ASSERT_NOT_NULL(ut_params->obuf, 4591 "Failed to allocate output buffer in mempool"); 4592 } 4593 4594 if (verify) { 4595 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len, 4596 tdata->ciphertext.data); 4597 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 4598 ciphertext_len, buffer); 4599 debug_hexdump(stdout, "ciphertext:", ciphertext, 4600 ciphertext_len); 4601 } else { 4602 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, 4603 tdata->plaintext.data); 4604 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 4605 plaintext_len, buffer); 4606 debug_hexdump(stdout, "plaintext:", plaintext, 4607 plaintext_len); 4608 } 4609 memset(buffer, 0, sizeof(buffer)); 4610 4611 /* Create KASUMI operation */ 4612 retval = create_wireless_algo_auth_cipher_operation( 4613 tdata->digest.data, tdata->digest.len, 4614 tdata->cipher_iv.data, tdata->cipher_iv.len, 4615 NULL, 0, 4616 (tdata->digest.offset_bytes == 0 ? 4617 (verify ? ciphertext_pad_len : plaintext_pad_len) 4618 : tdata->digest.offset_bytes), 4619 tdata->validCipherLenInBits.len, 4620 tdata->validCipherOffsetInBits.len, 4621 tdata->validAuthLenInBits.len, 4622 0, 4623 op_mode, 1, verify); 4624 4625 if (retval < 0) 4626 return retval; 4627 4628 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4629 ut_params->op); 4630 4631 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4632 4633 ut_params->obuf = (op_mode == IN_PLACE ? 4634 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 4635 4636 if (verify) { 4637 if (ut_params->obuf) 4638 plaintext = rte_pktmbuf_read(ut_params->obuf, 0, 4639 plaintext_len, buffer); 4640 else 4641 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 4642 plaintext_len, buffer); 4643 4644 debug_hexdump(stdout, "plaintext:", plaintext, 4645 (tdata->plaintext.len >> 3) - tdata->digest.len); 4646 debug_hexdump(stdout, "plaintext expected:", 4647 tdata->plaintext.data, 4648 (tdata->plaintext.len >> 3) - tdata->digest.len); 4649 } else { 4650 if (ut_params->obuf) 4651 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 4652 ciphertext_len, buffer); 4653 else 4654 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 4655 ciphertext_len, buffer); 4656 4657 debug_hexdump(stdout, "ciphertext:", ciphertext, 4658 ciphertext_len); 4659 debug_hexdump(stdout, "ciphertext expected:", 4660 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 4661 4662 if (ut_params->obuf) 4663 digest = rte_pktmbuf_read(ut_params->obuf, 4664 (tdata->digest.offset_bytes == 0 ? 4665 plaintext_pad_len : tdata->digest.offset_bytes), 4666 tdata->digest.len, digest_buffer); 4667 else 4668 digest = rte_pktmbuf_read(ut_params->ibuf, 4669 (tdata->digest.offset_bytes == 0 ? 4670 plaintext_pad_len : tdata->digest.offset_bytes), 4671 tdata->digest.len, digest_buffer); 4672 4673 debug_hexdump(stdout, "digest:", digest, 4674 tdata->digest.len); 4675 debug_hexdump(stdout, "digest expected:", 4676 tdata->digest.data, tdata->digest.len); 4677 } 4678 4679 /* Validate obuf */ 4680 if (verify) { 4681 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4682 plaintext, 4683 tdata->plaintext.data, 4684 tdata->plaintext.len >> 3, 4685 "KASUMI Plaintext data not as expected"); 4686 } else { 4687 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4688 ciphertext, 4689 tdata->ciphertext.data, 4690 tdata->validDataLenInBits.len, 4691 "KASUMI Ciphertext data not as expected"); 4692 4693 TEST_ASSERT_BUFFERS_ARE_EQUAL( 4694 digest, 4695 tdata->digest.data, 4696 DIGEST_BYTE_LENGTH_KASUMI_F9, 4697 "KASUMI Generated auth tag not as expected"); 4698 } 4699 return 0; 4700 } 4701 4702 static int 4703 test_kasumi_cipher_auth(const struct kasumi_test_data *tdata) 4704 { 4705 struct crypto_testsuite_params *ts_params = &testsuite_params; 4706 struct crypto_unittest_params *ut_params = &unittest_params; 4707 4708 int retval; 4709 4710 uint8_t *plaintext, *ciphertext; 4711 unsigned plaintext_pad_len; 4712 unsigned plaintext_len; 4713 4714 /* Verify the capabilities */ 4715 struct rte_cryptodev_sym_capability_idx cap_idx; 4716 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 4717 cap_idx.algo.auth = RTE_CRYPTO_AUTH_KASUMI_F9; 4718 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4719 &cap_idx) == NULL) 4720 return -ENOTSUP; 4721 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4722 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; 4723 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4724 &cap_idx) == NULL) 4725 return -ENOTSUP; 4726 4727 /* Create KASUMI session */ 4728 retval = create_wireless_algo_cipher_auth_session( 4729 ts_params->valid_devs[0], 4730 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 4731 RTE_CRYPTO_AUTH_OP_GENERATE, 4732 RTE_CRYPTO_AUTH_KASUMI_F9, 4733 RTE_CRYPTO_CIPHER_KASUMI_F8, 4734 tdata->key.data, tdata->key.len, 4735 0, tdata->digest.len, 4736 tdata->cipher_iv.len); 4737 if (retval < 0) 4738 return retval; 4739 4740 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4741 4742 /* clear mbuf payload */ 4743 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 4744 rte_pktmbuf_tailroom(ut_params->ibuf)); 4745 4746 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4747 /* Append data which is padded to a multiple of */ 4748 /* the algorithms block size */ 4749 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 4750 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4751 plaintext_pad_len); 4752 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 4753 4754 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 4755 4756 /* Create KASUMI operation */ 4757 retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data, 4758 tdata->digest.len, NULL, 0, 4759 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE, 4760 tdata->cipher_iv.data, tdata->cipher_iv.len, 4761 RTE_ALIGN_CEIL(tdata->validCipherLenInBits.len, 8), 4762 tdata->validCipherOffsetInBits.len, 4763 tdata->validAuthLenInBits.len, 4764 0 4765 ); 4766 if (retval < 0) 4767 return retval; 4768 4769 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4770 ut_params->op); 4771 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4772 4773 if (ut_params->op->sym->m_dst) 4774 ut_params->obuf = ut_params->op->sym->m_dst; 4775 else 4776 ut_params->obuf = ut_params->op->sym->m_src; 4777 4778 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *, 4779 tdata->validCipherOffsetInBits.len >> 3); 4780 4781 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 4782 + plaintext_pad_len; 4783 4784 const uint8_t *reference_ciphertext = tdata->ciphertext.data + 4785 (tdata->validCipherOffsetInBits.len >> 3); 4786 /* Validate obuf */ 4787 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4788 ciphertext, 4789 reference_ciphertext, 4790 tdata->validCipherLenInBits.len, 4791 "KASUMI Ciphertext data not as expected"); 4792 4793 /* Validate obuf */ 4794 TEST_ASSERT_BUFFERS_ARE_EQUAL( 4795 ut_params->digest, 4796 tdata->digest.data, 4797 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 4798 "KASUMI Generated auth tag not as expected"); 4799 return 0; 4800 } 4801 4802 static int 4803 test_zuc_encryption(const struct wireless_test_data *tdata) 4804 { 4805 struct crypto_testsuite_params *ts_params = &testsuite_params; 4806 struct crypto_unittest_params *ut_params = &unittest_params; 4807 4808 int retval; 4809 uint8_t *plaintext, *ciphertext; 4810 unsigned plaintext_pad_len; 4811 unsigned plaintext_len; 4812 4813 struct rte_cryptodev_sym_capability_idx cap_idx; 4814 4815 /* Check if device supports ZUC EEA3 */ 4816 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4817 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3; 4818 4819 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4820 &cap_idx) == NULL) 4821 return -ENOTSUP; 4822 4823 /* Create ZUC session */ 4824 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 4825 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 4826 RTE_CRYPTO_CIPHER_ZUC_EEA3, 4827 tdata->key.data, tdata->key.len, 4828 tdata->cipher_iv.len); 4829 if (retval < 0) 4830 return retval; 4831 4832 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 4833 4834 /* Clear mbuf payload */ 4835 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 4836 rte_pktmbuf_tailroom(ut_params->ibuf)); 4837 4838 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4839 /* Append data which is padded to a multiple */ 4840 /* of the algorithms block size */ 4841 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 4842 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 4843 plaintext_pad_len); 4844 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 4845 4846 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 4847 4848 /* Create ZUC operation */ 4849 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 4850 tdata->cipher_iv.len, 4851 tdata->plaintext.len, 4852 0); 4853 if (retval < 0) 4854 return retval; 4855 4856 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4857 ut_params->op); 4858 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4859 4860 ut_params->obuf = ut_params->op->sym->m_dst; 4861 if (ut_params->obuf) 4862 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); 4863 else 4864 ciphertext = plaintext; 4865 4866 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 4867 4868 /* Validate obuf */ 4869 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4870 ciphertext, 4871 tdata->ciphertext.data, 4872 tdata->validCipherLenInBits.len, 4873 "ZUC Ciphertext data not as expected"); 4874 return 0; 4875 } 4876 4877 static int 4878 test_zuc_encryption_sgl(const struct wireless_test_data *tdata) 4879 { 4880 struct crypto_testsuite_params *ts_params = &testsuite_params; 4881 struct crypto_unittest_params *ut_params = &unittest_params; 4882 4883 int retval; 4884 4885 unsigned int plaintext_pad_len; 4886 unsigned int plaintext_len; 4887 const uint8_t *ciphertext; 4888 uint8_t ciphertext_buffer[2048]; 4889 struct rte_cryptodev_info dev_info; 4890 4891 struct rte_cryptodev_sym_capability_idx cap_idx; 4892 4893 /* Check if device supports ZUC EEA3 */ 4894 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 4895 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_ZUC_EEA3; 4896 4897 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4898 &cap_idx) == NULL) 4899 return -ENOTSUP; 4900 4901 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 4902 4903 uint64_t feat_flags = dev_info.feature_flags; 4904 4905 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 4906 printf("Device doesn't support in-place scatter-gather. " 4907 "Test Skipped.\n"); 4908 return -ENOTSUP; 4909 } 4910 4911 plaintext_len = ceil_byte_length(tdata->plaintext.len); 4912 4913 /* Append data which is padded to a multiple */ 4914 /* of the algorithms block size */ 4915 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 4916 4917 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 4918 plaintext_pad_len, 10, 0); 4919 4920 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, 4921 tdata->plaintext.data); 4922 4923 /* Create ZUC session */ 4924 retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0], 4925 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 4926 RTE_CRYPTO_CIPHER_ZUC_EEA3, 4927 tdata->key.data, tdata->key.len, 4928 tdata->cipher_iv.len); 4929 if (retval < 0) 4930 return retval; 4931 4932 /* Clear mbuf payload */ 4933 4934 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, tdata->plaintext.data); 4935 4936 /* Create ZUC operation */ 4937 retval = create_wireless_algo_cipher_operation(tdata->cipher_iv.data, 4938 tdata->cipher_iv.len, tdata->plaintext.len, 4939 0); 4940 if (retval < 0) 4941 return retval; 4942 4943 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 4944 ut_params->op); 4945 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 4946 4947 ut_params->obuf = ut_params->op->sym->m_dst; 4948 if (ut_params->obuf) 4949 ciphertext = rte_pktmbuf_read(ut_params->obuf, 4950 0, plaintext_len, ciphertext_buffer); 4951 else 4952 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 4953 0, plaintext_len, ciphertext_buffer); 4954 4955 /* Validate obuf */ 4956 debug_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len); 4957 4958 /* Validate obuf */ 4959 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 4960 ciphertext, 4961 tdata->ciphertext.data, 4962 tdata->validCipherLenInBits.len, 4963 "ZUC Ciphertext data not as expected"); 4964 4965 return 0; 4966 } 4967 4968 static int 4969 test_zuc_authentication(const struct wireless_test_data *tdata) 4970 { 4971 struct crypto_testsuite_params *ts_params = &testsuite_params; 4972 struct crypto_unittest_params *ut_params = &unittest_params; 4973 4974 int retval; 4975 unsigned plaintext_pad_len; 4976 unsigned plaintext_len; 4977 uint8_t *plaintext; 4978 4979 struct rte_cryptodev_sym_capability_idx cap_idx; 4980 4981 /* QAT PMD supports byte-aligned data only */ 4982 if ((tdata->validAuthLenInBits.len % 8 != 0) && 4983 (gbl_driver_id == rte_cryptodev_driver_id_get( 4984 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)))) 4985 return -ENOTSUP; 4986 4987 /* Check if device supports ZUC EIA3 */ 4988 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 4989 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3; 4990 4991 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 4992 &cap_idx) == NULL) 4993 return -ENOTSUP; 4994 4995 /* Create ZUC session */ 4996 retval = create_wireless_algo_hash_session(ts_params->valid_devs[0], 4997 tdata->key.data, tdata->key.len, 4998 tdata->auth_iv.len, tdata->digest.len, 4999 RTE_CRYPTO_AUTH_OP_GENERATE, 5000 RTE_CRYPTO_AUTH_ZUC_EIA3); 5001 if (retval < 0) 5002 return retval; 5003 5004 /* alloc mbuf and set payload */ 5005 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 5006 5007 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 5008 rte_pktmbuf_tailroom(ut_params->ibuf)); 5009 5010 plaintext_len = ceil_byte_length(tdata->plaintext.len); 5011 /* Append data which is padded to a multiple of */ 5012 /* the algorithms block size */ 5013 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8); 5014 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 5015 plaintext_pad_len); 5016 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 5017 5018 /* Create ZUC operation */ 5019 retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len, 5020 tdata->auth_iv.data, tdata->auth_iv.len, 5021 plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE, 5022 tdata->validAuthLenInBits.len, 5023 0); 5024 if (retval < 0) 5025 return retval; 5026 5027 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 5028 ut_params->op); 5029 ut_params->obuf = ut_params->op->sym->m_src; 5030 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 5031 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 5032 + plaintext_pad_len; 5033 5034 /* Validate obuf */ 5035 TEST_ASSERT_BUFFERS_ARE_EQUAL( 5036 ut_params->digest, 5037 tdata->digest.data, 5038 tdata->digest.len, 5039 "ZUC Generated auth tag not as expected"); 5040 5041 return 0; 5042 } 5043 5044 static int 5045 test_zuc_auth_cipher(const struct wireless_test_data *tdata, 5046 uint8_t op_mode, uint8_t verify) 5047 { 5048 struct crypto_testsuite_params *ts_params = &testsuite_params; 5049 struct crypto_unittest_params *ut_params = &unittest_params; 5050 5051 int retval; 5052 5053 uint8_t *plaintext = NULL, *ciphertext = NULL; 5054 unsigned int plaintext_pad_len; 5055 unsigned int plaintext_len; 5056 unsigned int ciphertext_pad_len; 5057 unsigned int ciphertext_len; 5058 5059 struct rte_cryptodev_info dev_info; 5060 struct rte_cryptodev_sym_capability_idx cap_idx; 5061 5062 /* Check if device supports ZUC EIA3 */ 5063 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 5064 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3; 5065 5066 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 5067 &cap_idx) == NULL) 5068 return -ENOTSUP; 5069 5070 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 5071 5072 uint64_t feat_flags = dev_info.feature_flags; 5073 5074 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 5075 printf("Device doesn't support digest encrypted.\n"); 5076 return -ENOTSUP; 5077 } 5078 5079 /* Create ZUC session */ 5080 retval = create_wireless_algo_auth_cipher_session( 5081 ts_params->valid_devs[0], 5082 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 5083 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 5084 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 5085 : RTE_CRYPTO_AUTH_OP_GENERATE), 5086 RTE_CRYPTO_AUTH_ZUC_EIA3, 5087 RTE_CRYPTO_CIPHER_ZUC_EEA3, 5088 tdata->key.data, tdata->key.len, 5089 tdata->auth_iv.len, tdata->digest.len, 5090 tdata->cipher_iv.len); 5091 5092 if (retval < 0) 5093 return retval; 5094 5095 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 5096 if (op_mode == OUT_OF_PLACE) 5097 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 5098 5099 /* clear mbuf payload */ 5100 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 5101 rte_pktmbuf_tailroom(ut_params->ibuf)); 5102 if (op_mode == OUT_OF_PLACE) 5103 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 5104 rte_pktmbuf_tailroom(ut_params->obuf)); 5105 5106 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 5107 plaintext_len = ceil_byte_length(tdata->plaintext.len); 5108 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 5109 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 5110 5111 if (verify) { 5112 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 5113 ciphertext_pad_len); 5114 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 5115 if (op_mode == OUT_OF_PLACE) 5116 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 5117 debug_hexdump(stdout, "ciphertext:", ciphertext, 5118 ciphertext_len); 5119 } else { 5120 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 5121 plaintext_pad_len); 5122 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 5123 if (op_mode == OUT_OF_PLACE) 5124 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 5125 debug_hexdump(stdout, "plaintext:", plaintext, 5126 plaintext_len); 5127 } 5128 5129 /* Create ZUC operation */ 5130 retval = create_wireless_algo_auth_cipher_operation( 5131 tdata->digest.data, tdata->digest.len, 5132 tdata->cipher_iv.data, tdata->cipher_iv.len, 5133 tdata->auth_iv.data, tdata->auth_iv.len, 5134 (tdata->digest.offset_bytes == 0 ? 5135 (verify ? ciphertext_pad_len : plaintext_pad_len) 5136 : tdata->digest.offset_bytes), 5137 tdata->validCipherLenInBits.len, 5138 tdata->validCipherOffsetInBits.len, 5139 tdata->validAuthLenInBits.len, 5140 0, 5141 op_mode, 0, verify); 5142 5143 if (retval < 0) 5144 return retval; 5145 5146 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 5147 ut_params->op); 5148 5149 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 5150 5151 ut_params->obuf = (op_mode == IN_PLACE ? 5152 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 5153 5154 5155 if (verify) { 5156 if (ut_params->obuf) 5157 plaintext = rte_pktmbuf_mtod(ut_params->obuf, 5158 uint8_t *); 5159 else 5160 plaintext = ciphertext; 5161 5162 debug_hexdump(stdout, "plaintext:", plaintext, 5163 (tdata->plaintext.len >> 3) - tdata->digest.len); 5164 debug_hexdump(stdout, "plaintext expected:", 5165 tdata->plaintext.data, 5166 (tdata->plaintext.len >> 3) - tdata->digest.len); 5167 } else { 5168 if (ut_params->obuf) 5169 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, 5170 uint8_t *); 5171 else 5172 ciphertext = plaintext; 5173 5174 debug_hexdump(stdout, "ciphertext:", ciphertext, 5175 ciphertext_len); 5176 debug_hexdump(stdout, "ciphertext expected:", 5177 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 5178 5179 ut_params->digest = rte_pktmbuf_mtod( 5180 ut_params->obuf, uint8_t *) + 5181 (tdata->digest.offset_bytes == 0 ? 5182 plaintext_pad_len : tdata->digest.offset_bytes); 5183 5184 debug_hexdump(stdout, "digest:", ut_params->digest, 5185 tdata->digest.len); 5186 debug_hexdump(stdout, "digest expected:", 5187 tdata->digest.data, tdata->digest.len); 5188 } 5189 5190 /* Validate obuf */ 5191 if (verify) { 5192 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 5193 plaintext, 5194 tdata->plaintext.data, 5195 tdata->plaintext.len >> 3, 5196 "ZUC Plaintext data not as expected"); 5197 } else { 5198 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 5199 ciphertext, 5200 tdata->ciphertext.data, 5201 tdata->ciphertext.len >> 3, 5202 "ZUC Ciphertext data not as expected"); 5203 5204 TEST_ASSERT_BUFFERS_ARE_EQUAL( 5205 ut_params->digest, 5206 tdata->digest.data, 5207 DIGEST_BYTE_LENGTH_KASUMI_F9, 5208 "ZUC Generated auth tag not as expected"); 5209 } 5210 return 0; 5211 } 5212 5213 static int 5214 test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata, 5215 uint8_t op_mode, uint8_t verify) 5216 { 5217 struct crypto_testsuite_params *ts_params = &testsuite_params; 5218 struct crypto_unittest_params *ut_params = &unittest_params; 5219 5220 int retval; 5221 5222 const uint8_t *plaintext = NULL; 5223 const uint8_t *ciphertext = NULL; 5224 const uint8_t *digest = NULL; 5225 unsigned int plaintext_pad_len; 5226 unsigned int plaintext_len; 5227 unsigned int ciphertext_pad_len; 5228 unsigned int ciphertext_len; 5229 uint8_t buffer[10000]; 5230 uint8_t digest_buffer[10000]; 5231 5232 struct rte_cryptodev_info dev_info; 5233 struct rte_cryptodev_sym_capability_idx cap_idx; 5234 5235 /* Check if device supports ZUC EIA3 */ 5236 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 5237 cap_idx.algo.auth = RTE_CRYPTO_AUTH_ZUC_EIA3; 5238 5239 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 5240 &cap_idx) == NULL) 5241 return -ENOTSUP; 5242 5243 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 5244 5245 uint64_t feat_flags = dev_info.feature_flags; 5246 5247 if (op_mode == IN_PLACE) { 5248 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 5249 printf("Device doesn't support in-place scatter-gather " 5250 "in both input and output mbufs.\n"); 5251 return -ENOTSUP; 5252 } 5253 } else { 5254 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 5255 printf("Device doesn't support out-of-place scatter-gather " 5256 "in both input and output mbufs.\n"); 5257 return -ENOTSUP; 5258 } 5259 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 5260 printf("Device doesn't support digest encrypted.\n"); 5261 return -ENOTSUP; 5262 } 5263 } 5264 5265 /* Create ZUC session */ 5266 retval = create_wireless_algo_auth_cipher_session( 5267 ts_params->valid_devs[0], 5268 (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT 5269 : RTE_CRYPTO_CIPHER_OP_ENCRYPT), 5270 (verify ? RTE_CRYPTO_AUTH_OP_VERIFY 5271 : RTE_CRYPTO_AUTH_OP_GENERATE), 5272 RTE_CRYPTO_AUTH_ZUC_EIA3, 5273 RTE_CRYPTO_CIPHER_ZUC_EEA3, 5274 tdata->key.data, tdata->key.len, 5275 tdata->auth_iv.len, tdata->digest.len, 5276 tdata->cipher_iv.len); 5277 5278 if (retval < 0) 5279 return retval; 5280 5281 ciphertext_len = ceil_byte_length(tdata->ciphertext.len); 5282 plaintext_len = ceil_byte_length(tdata->plaintext.len); 5283 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 5284 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 5285 5286 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 5287 plaintext_pad_len, 15, 0); 5288 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 5289 "Failed to allocate input buffer in mempool"); 5290 5291 if (op_mode == OUT_OF_PLACE) { 5292 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 5293 plaintext_pad_len, 15, 0); 5294 TEST_ASSERT_NOT_NULL(ut_params->obuf, 5295 "Failed to allocate output buffer in mempool"); 5296 } 5297 5298 if (verify) { 5299 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len, 5300 tdata->ciphertext.data); 5301 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 5302 ciphertext_len, buffer); 5303 debug_hexdump(stdout, "ciphertext:", ciphertext, 5304 ciphertext_len); 5305 } else { 5306 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, 5307 tdata->plaintext.data); 5308 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 5309 plaintext_len, buffer); 5310 debug_hexdump(stdout, "plaintext:", plaintext, 5311 plaintext_len); 5312 } 5313 memset(buffer, 0, sizeof(buffer)); 5314 5315 /* Create ZUC operation */ 5316 retval = create_wireless_algo_auth_cipher_operation( 5317 tdata->digest.data, tdata->digest.len, 5318 tdata->cipher_iv.data, tdata->cipher_iv.len, 5319 NULL, 0, 5320 (tdata->digest.offset_bytes == 0 ? 5321 (verify ? ciphertext_pad_len : plaintext_pad_len) 5322 : tdata->digest.offset_bytes), 5323 tdata->validCipherLenInBits.len, 5324 tdata->validCipherOffsetInBits.len, 5325 tdata->validAuthLenInBits.len, 5326 0, 5327 op_mode, 1, verify); 5328 5329 if (retval < 0) 5330 return retval; 5331 5332 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 5333 ut_params->op); 5334 5335 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 5336 5337 ut_params->obuf = (op_mode == IN_PLACE ? 5338 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 5339 5340 if (verify) { 5341 if (ut_params->obuf) 5342 plaintext = rte_pktmbuf_read(ut_params->obuf, 0, 5343 plaintext_len, buffer); 5344 else 5345 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 5346 plaintext_len, buffer); 5347 5348 debug_hexdump(stdout, "plaintext:", plaintext, 5349 (tdata->plaintext.len >> 3) - tdata->digest.len); 5350 debug_hexdump(stdout, "plaintext expected:", 5351 tdata->plaintext.data, 5352 (tdata->plaintext.len >> 3) - tdata->digest.len); 5353 } else { 5354 if (ut_params->obuf) 5355 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 5356 ciphertext_len, buffer); 5357 else 5358 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 5359 ciphertext_len, buffer); 5360 5361 debug_hexdump(stdout, "ciphertext:", ciphertext, 5362 ciphertext_len); 5363 debug_hexdump(stdout, "ciphertext expected:", 5364 tdata->ciphertext.data, tdata->ciphertext.len >> 3); 5365 5366 if (ut_params->obuf) 5367 digest = rte_pktmbuf_read(ut_params->obuf, 5368 (tdata->digest.offset_bytes == 0 ? 5369 plaintext_pad_len : tdata->digest.offset_bytes), 5370 tdata->digest.len, digest_buffer); 5371 else 5372 digest = rte_pktmbuf_read(ut_params->ibuf, 5373 (tdata->digest.offset_bytes == 0 ? 5374 plaintext_pad_len : tdata->digest.offset_bytes), 5375 tdata->digest.len, digest_buffer); 5376 5377 debug_hexdump(stdout, "digest:", digest, 5378 tdata->digest.len); 5379 debug_hexdump(stdout, "digest expected:", 5380 tdata->digest.data, tdata->digest.len); 5381 } 5382 5383 /* Validate obuf */ 5384 if (verify) { 5385 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 5386 plaintext, 5387 tdata->plaintext.data, 5388 tdata->plaintext.len >> 3, 5389 "ZUC Plaintext data not as expected"); 5390 } else { 5391 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 5392 ciphertext, 5393 tdata->ciphertext.data, 5394 tdata->validDataLenInBits.len, 5395 "ZUC Ciphertext data not as expected"); 5396 5397 TEST_ASSERT_BUFFERS_ARE_EQUAL( 5398 digest, 5399 tdata->digest.data, 5400 DIGEST_BYTE_LENGTH_KASUMI_F9, 5401 "ZUC Generated auth tag not as expected"); 5402 } 5403 return 0; 5404 } 5405 5406 static int 5407 test_kasumi_encryption_test_case_1(void) 5408 { 5409 return test_kasumi_encryption(&kasumi_test_case_1); 5410 } 5411 5412 static int 5413 test_kasumi_encryption_test_case_1_sgl(void) 5414 { 5415 return test_kasumi_encryption_sgl(&kasumi_test_case_1); 5416 } 5417 5418 static int 5419 test_kasumi_encryption_test_case_1_oop(void) 5420 { 5421 return test_kasumi_encryption_oop(&kasumi_test_case_1); 5422 } 5423 5424 static int 5425 test_kasumi_encryption_test_case_1_oop_sgl(void) 5426 { 5427 return test_kasumi_encryption_oop_sgl(&kasumi_test_case_1); 5428 } 5429 5430 static int 5431 test_kasumi_encryption_test_case_2(void) 5432 { 5433 return test_kasumi_encryption(&kasumi_test_case_2); 5434 } 5435 5436 static int 5437 test_kasumi_encryption_test_case_3(void) 5438 { 5439 return test_kasumi_encryption(&kasumi_test_case_3); 5440 } 5441 5442 static int 5443 test_kasumi_encryption_test_case_4(void) 5444 { 5445 return test_kasumi_encryption(&kasumi_test_case_4); 5446 } 5447 5448 static int 5449 test_kasumi_encryption_test_case_5(void) 5450 { 5451 return test_kasumi_encryption(&kasumi_test_case_5); 5452 } 5453 5454 static int 5455 test_kasumi_decryption_test_case_1(void) 5456 { 5457 return test_kasumi_decryption(&kasumi_test_case_1); 5458 } 5459 5460 static int 5461 test_kasumi_decryption_test_case_1_oop(void) 5462 { 5463 return test_kasumi_decryption_oop(&kasumi_test_case_1); 5464 } 5465 5466 static int 5467 test_kasumi_decryption_test_case_2(void) 5468 { 5469 return test_kasumi_decryption(&kasumi_test_case_2); 5470 } 5471 5472 static int 5473 test_kasumi_decryption_test_case_3(void) 5474 { 5475 return test_kasumi_decryption(&kasumi_test_case_3); 5476 } 5477 5478 static int 5479 test_kasumi_decryption_test_case_4(void) 5480 { 5481 return test_kasumi_decryption(&kasumi_test_case_4); 5482 } 5483 5484 static int 5485 test_kasumi_decryption_test_case_5(void) 5486 { 5487 return test_kasumi_decryption(&kasumi_test_case_5); 5488 } 5489 static int 5490 test_snow3g_encryption_test_case_1(void) 5491 { 5492 return test_snow3g_encryption(&snow3g_test_case_1); 5493 } 5494 5495 static int 5496 test_snow3g_encryption_test_case_1_oop(void) 5497 { 5498 return test_snow3g_encryption_oop(&snow3g_test_case_1); 5499 } 5500 5501 static int 5502 test_snow3g_encryption_test_case_1_oop_sgl(void) 5503 { 5504 return test_snow3g_encryption_oop_sgl(&snow3g_test_case_1); 5505 } 5506 5507 5508 static int 5509 test_snow3g_encryption_test_case_1_offset_oop(void) 5510 { 5511 return test_snow3g_encryption_offset_oop(&snow3g_test_case_1); 5512 } 5513 5514 static int 5515 test_snow3g_encryption_test_case_2(void) 5516 { 5517 return test_snow3g_encryption(&snow3g_test_case_2); 5518 } 5519 5520 static int 5521 test_snow3g_encryption_test_case_3(void) 5522 { 5523 return test_snow3g_encryption(&snow3g_test_case_3); 5524 } 5525 5526 static int 5527 test_snow3g_encryption_test_case_4(void) 5528 { 5529 return test_snow3g_encryption(&snow3g_test_case_4); 5530 } 5531 5532 static int 5533 test_snow3g_encryption_test_case_5(void) 5534 { 5535 return test_snow3g_encryption(&snow3g_test_case_5); 5536 } 5537 5538 static int 5539 test_snow3g_decryption_test_case_1(void) 5540 { 5541 return test_snow3g_decryption(&snow3g_test_case_1); 5542 } 5543 5544 static int 5545 test_snow3g_decryption_test_case_1_oop(void) 5546 { 5547 return test_snow3g_decryption_oop(&snow3g_test_case_1); 5548 } 5549 5550 static int 5551 test_snow3g_decryption_test_case_2(void) 5552 { 5553 return test_snow3g_decryption(&snow3g_test_case_2); 5554 } 5555 5556 static int 5557 test_snow3g_decryption_test_case_3(void) 5558 { 5559 return test_snow3g_decryption(&snow3g_test_case_3); 5560 } 5561 5562 static int 5563 test_snow3g_decryption_test_case_4(void) 5564 { 5565 return test_snow3g_decryption(&snow3g_test_case_4); 5566 } 5567 5568 static int 5569 test_snow3g_decryption_test_case_5(void) 5570 { 5571 return test_snow3g_decryption(&snow3g_test_case_5); 5572 } 5573 5574 /* 5575 * Function prepares snow3g_hash_test_data from snow3g_test_data. 5576 * Pattern digest from snow3g_test_data must be allocated as 5577 * 4 last bytes in plaintext. 5578 */ 5579 static void 5580 snow3g_hash_test_vector_setup(const struct snow3g_test_data *pattern, 5581 struct snow3g_hash_test_data *output) 5582 { 5583 if ((pattern != NULL) && (output != NULL)) { 5584 output->key.len = pattern->key.len; 5585 5586 memcpy(output->key.data, 5587 pattern->key.data, pattern->key.len); 5588 5589 output->auth_iv.len = pattern->auth_iv.len; 5590 5591 memcpy(output->auth_iv.data, 5592 pattern->auth_iv.data, pattern->auth_iv.len); 5593 5594 output->plaintext.len = pattern->plaintext.len; 5595 5596 memcpy(output->plaintext.data, 5597 pattern->plaintext.data, pattern->plaintext.len >> 3); 5598 5599 output->digest.len = pattern->digest.len; 5600 5601 memcpy(output->digest.data, 5602 &pattern->plaintext.data[pattern->digest.offset_bytes], 5603 pattern->digest.len); 5604 5605 output->validAuthLenInBits.len = 5606 pattern->validAuthLenInBits.len; 5607 } 5608 } 5609 5610 /* 5611 * Test case verify computed cipher and digest from snow3g_test_case_7 data. 5612 */ 5613 static int 5614 test_snow3g_decryption_with_digest_test_case_1(void) 5615 { 5616 struct snow3g_hash_test_data snow3g_hash_data; 5617 5618 /* 5619 * Function prepare data for hash veryfication test case. 5620 * Digest is allocated in 4 last bytes in plaintext, pattern. 5621 */ 5622 snow3g_hash_test_vector_setup(&snow3g_test_case_7, &snow3g_hash_data); 5623 5624 return test_snow3g_decryption(&snow3g_test_case_7) & 5625 test_snow3g_authentication_verify(&snow3g_hash_data); 5626 } 5627 5628 static int 5629 test_snow3g_cipher_auth_test_case_1(void) 5630 { 5631 return test_snow3g_cipher_auth(&snow3g_test_case_3); 5632 } 5633 5634 static int 5635 test_snow3g_auth_cipher_test_case_1(void) 5636 { 5637 return test_snow3g_auth_cipher( 5638 &snow3g_auth_cipher_test_case_1, IN_PLACE, 0); 5639 } 5640 5641 static int 5642 test_snow3g_auth_cipher_test_case_2(void) 5643 { 5644 return test_snow3g_auth_cipher( 5645 &snow3g_auth_cipher_test_case_2, IN_PLACE, 0); 5646 } 5647 5648 static int 5649 test_snow3g_auth_cipher_test_case_2_oop(void) 5650 { 5651 return test_snow3g_auth_cipher( 5652 &snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 0); 5653 } 5654 5655 static int 5656 test_snow3g_auth_cipher_part_digest_enc(void) 5657 { 5658 return test_snow3g_auth_cipher( 5659 &snow3g_auth_cipher_partial_digest_encryption, 5660 IN_PLACE, 0); 5661 } 5662 5663 static int 5664 test_snow3g_auth_cipher_part_digest_enc_oop(void) 5665 { 5666 return test_snow3g_auth_cipher( 5667 &snow3g_auth_cipher_partial_digest_encryption, 5668 OUT_OF_PLACE, 0); 5669 } 5670 5671 static int 5672 test_snow3g_auth_cipher_test_case_3_sgl(void) 5673 { 5674 return test_snow3g_auth_cipher_sgl( 5675 &snow3g_auth_cipher_test_case_3, IN_PLACE, 0); 5676 } 5677 5678 static int 5679 test_snow3g_auth_cipher_test_case_3_oop_sgl(void) 5680 { 5681 return test_snow3g_auth_cipher_sgl( 5682 &snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 0); 5683 } 5684 5685 static int 5686 test_snow3g_auth_cipher_part_digest_enc_sgl(void) 5687 { 5688 return test_snow3g_auth_cipher_sgl( 5689 &snow3g_auth_cipher_partial_digest_encryption, 5690 IN_PLACE, 0); 5691 } 5692 5693 static int 5694 test_snow3g_auth_cipher_part_digest_enc_oop_sgl(void) 5695 { 5696 return test_snow3g_auth_cipher_sgl( 5697 &snow3g_auth_cipher_partial_digest_encryption, 5698 OUT_OF_PLACE, 0); 5699 } 5700 5701 static int 5702 test_snow3g_auth_cipher_verify_test_case_1(void) 5703 { 5704 return test_snow3g_auth_cipher( 5705 &snow3g_auth_cipher_test_case_1, IN_PLACE, 1); 5706 } 5707 5708 static int 5709 test_snow3g_auth_cipher_verify_test_case_2(void) 5710 { 5711 return test_snow3g_auth_cipher( 5712 &snow3g_auth_cipher_test_case_2, IN_PLACE, 1); 5713 } 5714 5715 static int 5716 test_snow3g_auth_cipher_verify_test_case_2_oop(void) 5717 { 5718 return test_snow3g_auth_cipher( 5719 &snow3g_auth_cipher_test_case_2, OUT_OF_PLACE, 1); 5720 } 5721 5722 static int 5723 test_snow3g_auth_cipher_verify_part_digest_enc(void) 5724 { 5725 return test_snow3g_auth_cipher( 5726 &snow3g_auth_cipher_partial_digest_encryption, 5727 IN_PLACE, 1); 5728 } 5729 5730 static int 5731 test_snow3g_auth_cipher_verify_part_digest_enc_oop(void) 5732 { 5733 return test_snow3g_auth_cipher( 5734 &snow3g_auth_cipher_partial_digest_encryption, 5735 OUT_OF_PLACE, 1); 5736 } 5737 5738 static int 5739 test_snow3g_auth_cipher_verify_test_case_3_sgl(void) 5740 { 5741 return test_snow3g_auth_cipher_sgl( 5742 &snow3g_auth_cipher_test_case_3, IN_PLACE, 1); 5743 } 5744 5745 static int 5746 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl(void) 5747 { 5748 return test_snow3g_auth_cipher_sgl( 5749 &snow3g_auth_cipher_test_case_3, OUT_OF_PLACE, 1); 5750 } 5751 5752 static int 5753 test_snow3g_auth_cipher_verify_part_digest_enc_sgl(void) 5754 { 5755 return test_snow3g_auth_cipher_sgl( 5756 &snow3g_auth_cipher_partial_digest_encryption, 5757 IN_PLACE, 1); 5758 } 5759 5760 static int 5761 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl(void) 5762 { 5763 return test_snow3g_auth_cipher_sgl( 5764 &snow3g_auth_cipher_partial_digest_encryption, 5765 OUT_OF_PLACE, 1); 5766 } 5767 5768 static int 5769 test_snow3g_auth_cipher_with_digest_test_case_1(void) 5770 { 5771 return test_snow3g_auth_cipher( 5772 &snow3g_test_case_7, IN_PLACE, 0); 5773 } 5774 5775 static int 5776 test_kasumi_auth_cipher_test_case_1(void) 5777 { 5778 return test_kasumi_auth_cipher( 5779 &kasumi_test_case_3, IN_PLACE, 0); 5780 } 5781 5782 static int 5783 test_kasumi_auth_cipher_test_case_2(void) 5784 { 5785 return test_kasumi_auth_cipher( 5786 &kasumi_auth_cipher_test_case_2, IN_PLACE, 0); 5787 } 5788 5789 static int 5790 test_kasumi_auth_cipher_test_case_2_oop(void) 5791 { 5792 return test_kasumi_auth_cipher( 5793 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0); 5794 } 5795 5796 static int 5797 test_kasumi_auth_cipher_test_case_2_sgl(void) 5798 { 5799 return test_kasumi_auth_cipher_sgl( 5800 &kasumi_auth_cipher_test_case_2, IN_PLACE, 0); 5801 } 5802 5803 static int 5804 test_kasumi_auth_cipher_test_case_2_oop_sgl(void) 5805 { 5806 return test_kasumi_auth_cipher_sgl( 5807 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 0); 5808 } 5809 5810 static int 5811 test_kasumi_auth_cipher_verify_test_case_1(void) 5812 { 5813 return test_kasumi_auth_cipher( 5814 &kasumi_test_case_3, IN_PLACE, 1); 5815 } 5816 5817 static int 5818 test_kasumi_auth_cipher_verify_test_case_2(void) 5819 { 5820 return test_kasumi_auth_cipher( 5821 &kasumi_auth_cipher_test_case_2, IN_PLACE, 1); 5822 } 5823 5824 static int 5825 test_kasumi_auth_cipher_verify_test_case_2_oop(void) 5826 { 5827 return test_kasumi_auth_cipher( 5828 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1); 5829 } 5830 5831 static int 5832 test_kasumi_auth_cipher_verify_test_case_2_sgl(void) 5833 { 5834 return test_kasumi_auth_cipher_sgl( 5835 &kasumi_auth_cipher_test_case_2, IN_PLACE, 1); 5836 } 5837 5838 static int 5839 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl(void) 5840 { 5841 return test_kasumi_auth_cipher_sgl( 5842 &kasumi_auth_cipher_test_case_2, OUT_OF_PLACE, 1); 5843 } 5844 5845 static int 5846 test_kasumi_cipher_auth_test_case_1(void) 5847 { 5848 return test_kasumi_cipher_auth(&kasumi_test_case_6); 5849 } 5850 5851 static int 5852 test_zuc_encryption_test_case_1(void) 5853 { 5854 return test_zuc_encryption(&zuc_test_case_cipher_193b); 5855 } 5856 5857 static int 5858 test_zuc_encryption_test_case_2(void) 5859 { 5860 return test_zuc_encryption(&zuc_test_case_cipher_800b); 5861 } 5862 5863 static int 5864 test_zuc_encryption_test_case_3(void) 5865 { 5866 return test_zuc_encryption(&zuc_test_case_cipher_1570b); 5867 } 5868 5869 static int 5870 test_zuc_encryption_test_case_4(void) 5871 { 5872 return test_zuc_encryption(&zuc_test_case_cipher_2798b); 5873 } 5874 5875 static int 5876 test_zuc_encryption_test_case_5(void) 5877 { 5878 return test_zuc_encryption(&zuc_test_case_cipher_4019b); 5879 } 5880 5881 static int 5882 test_zuc_encryption_test_case_6_sgl(void) 5883 { 5884 return test_zuc_encryption_sgl(&zuc_test_case_cipher_193b); 5885 } 5886 5887 static int 5888 test_zuc_hash_generate_test_case_1(void) 5889 { 5890 return test_zuc_authentication(&zuc_test_case_auth_1b); 5891 } 5892 5893 static int 5894 test_zuc_hash_generate_test_case_2(void) 5895 { 5896 return test_zuc_authentication(&zuc_test_case_auth_90b); 5897 } 5898 5899 static int 5900 test_zuc_hash_generate_test_case_3(void) 5901 { 5902 return test_zuc_authentication(&zuc_test_case_auth_577b); 5903 } 5904 5905 static int 5906 test_zuc_hash_generate_test_case_4(void) 5907 { 5908 return test_zuc_authentication(&zuc_test_case_auth_2079b); 5909 } 5910 5911 static int 5912 test_zuc_hash_generate_test_case_5(void) 5913 { 5914 return test_zuc_authentication(&zuc_test_auth_5670b); 5915 } 5916 5917 static int 5918 test_zuc_hash_generate_test_case_6(void) 5919 { 5920 return test_zuc_authentication(&zuc_test_case_auth_128b); 5921 } 5922 5923 static int 5924 test_zuc_hash_generate_test_case_7(void) 5925 { 5926 /* This test is not for SW ZUC PMD */ 5927 if (gbl_driver_id == rte_cryptodev_driver_id_get( 5928 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) 5929 return -ENOTSUP; 5930 5931 return test_zuc_authentication(&zuc_test_case_auth_2080b); 5932 } 5933 5934 static int 5935 test_zuc_hash_generate_test_case_8(void) 5936 { 5937 return test_zuc_authentication(&zuc_test_case_auth_584b); 5938 } 5939 5940 static int 5941 test_zuc_cipher_auth_test_case_1(void) 5942 { 5943 return test_zuc_cipher_auth(&zuc_test_case_cipher_200b_auth_200b); 5944 } 5945 5946 static int 5947 test_zuc_cipher_auth_test_case_2(void) 5948 { 5949 return test_zuc_cipher_auth(&zuc_test_case_cipher_800b_auth_120b); 5950 } 5951 5952 static int 5953 test_zuc_auth_cipher_test_case_1(void) 5954 { 5955 /* This test is not for SW ZUC PMD */ 5956 if (gbl_driver_id == rte_cryptodev_driver_id_get( 5957 RTE_STR(CRYPTODEV_NAME_ZUC_PMD))) 5958 return -ENOTSUP; 5959 5960 return test_zuc_auth_cipher( 5961 &zuc_auth_cipher_test_case_1, IN_PLACE, 0); 5962 } 5963 5964 static int 5965 test_zuc_auth_cipher_test_case_1_oop(void) 5966 { 5967 return test_zuc_auth_cipher( 5968 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0); 5969 } 5970 5971 static int 5972 test_zuc_auth_cipher_test_case_1_sgl(void) 5973 { 5974 return test_zuc_auth_cipher_sgl( 5975 &zuc_auth_cipher_test_case_1, IN_PLACE, 0); 5976 } 5977 5978 static int 5979 test_zuc_auth_cipher_test_case_1_oop_sgl(void) 5980 { 5981 return test_zuc_auth_cipher_sgl( 5982 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 0); 5983 } 5984 5985 static int 5986 test_zuc_auth_cipher_verify_test_case_1(void) 5987 { 5988 return test_zuc_auth_cipher( 5989 &zuc_auth_cipher_test_case_1, IN_PLACE, 1); 5990 } 5991 5992 static int 5993 test_zuc_auth_cipher_verify_test_case_1_oop(void) 5994 { 5995 return test_zuc_auth_cipher( 5996 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1); 5997 } 5998 5999 static int 6000 test_zuc_auth_cipher_verify_test_case_1_sgl(void) 6001 { 6002 return test_zuc_auth_cipher_sgl( 6003 &zuc_auth_cipher_test_case_1, IN_PLACE, 1); 6004 } 6005 6006 static int 6007 test_zuc_auth_cipher_verify_test_case_1_oop_sgl(void) 6008 { 6009 return test_zuc_auth_cipher_sgl( 6010 &zuc_auth_cipher_test_case_1, OUT_OF_PLACE, 1); 6011 } 6012 6013 static int 6014 test_mixed_check_if_unsupported(const struct mixed_cipher_auth_test_data *tdata) 6015 { 6016 uint8_t dev_id = testsuite_params.valid_devs[0]; 6017 6018 struct rte_cryptodev_sym_capability_idx cap_idx; 6019 6020 /* Check if device supports particular cipher algorithm */ 6021 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 6022 cap_idx.algo.cipher = tdata->cipher_algo; 6023 if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL) 6024 return -ENOTSUP; 6025 6026 /* Check if device supports particular hash algorithm */ 6027 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 6028 cap_idx.algo.auth = tdata->auth_algo; 6029 if (rte_cryptodev_sym_capability_get(dev_id, &cap_idx) == NULL) 6030 return -ENOTSUP; 6031 6032 return 0; 6033 } 6034 6035 static int 6036 test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata, 6037 uint8_t op_mode, uint8_t verify) 6038 { 6039 struct crypto_testsuite_params *ts_params = &testsuite_params; 6040 struct crypto_unittest_params *ut_params = &unittest_params; 6041 6042 int retval; 6043 6044 uint8_t *plaintext = NULL, *ciphertext = NULL; 6045 unsigned int plaintext_pad_len; 6046 unsigned int plaintext_len; 6047 unsigned int ciphertext_pad_len; 6048 unsigned int ciphertext_len; 6049 6050 struct rte_cryptodev_info dev_info; 6051 struct rte_crypto_op *op; 6052 6053 /* Check if device supports particular algorithms separately */ 6054 if (test_mixed_check_if_unsupported(tdata)) 6055 return -ENOTSUP; 6056 6057 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 6058 6059 uint64_t feat_flags = dev_info.feature_flags; 6060 6061 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 6062 printf("Device doesn't support digest encrypted.\n"); 6063 return -ENOTSUP; 6064 } 6065 6066 /* Create the session */ 6067 if (verify) 6068 retval = create_wireless_algo_cipher_auth_session( 6069 ts_params->valid_devs[0], 6070 RTE_CRYPTO_CIPHER_OP_DECRYPT, 6071 RTE_CRYPTO_AUTH_OP_VERIFY, 6072 tdata->auth_algo, 6073 tdata->cipher_algo, 6074 tdata->auth_key.data, tdata->auth_key.len, 6075 tdata->auth_iv.len, tdata->digest_enc.len, 6076 tdata->cipher_iv.len); 6077 else 6078 retval = create_wireless_algo_auth_cipher_session( 6079 ts_params->valid_devs[0], 6080 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 6081 RTE_CRYPTO_AUTH_OP_GENERATE, 6082 tdata->auth_algo, 6083 tdata->cipher_algo, 6084 tdata->auth_key.data, tdata->auth_key.len, 6085 tdata->auth_iv.len, tdata->digest_enc.len, 6086 tdata->cipher_iv.len); 6087 if (retval < 0) 6088 return retval; 6089 6090 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 6091 if (op_mode == OUT_OF_PLACE) 6092 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 6093 6094 /* clear mbuf payload */ 6095 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 6096 rte_pktmbuf_tailroom(ut_params->ibuf)); 6097 if (op_mode == OUT_OF_PLACE) 6098 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 6099 rte_pktmbuf_tailroom(ut_params->obuf)); 6100 6101 ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits); 6102 plaintext_len = ceil_byte_length(tdata->plaintext.len_bits); 6103 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 6104 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 6105 6106 if (verify) { 6107 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6108 ciphertext_pad_len); 6109 memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len); 6110 if (op_mode == OUT_OF_PLACE) 6111 rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len); 6112 debug_hexdump(stdout, "ciphertext:", ciphertext, 6113 ciphertext_len); 6114 } else { 6115 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6116 plaintext_pad_len); 6117 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 6118 if (op_mode == OUT_OF_PLACE) 6119 rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len); 6120 debug_hexdump(stdout, "plaintext:", plaintext, plaintext_len); 6121 } 6122 6123 /* Create the operation */ 6124 retval = create_wireless_algo_auth_cipher_operation( 6125 tdata->digest_enc.data, tdata->digest_enc.len, 6126 tdata->cipher_iv.data, tdata->cipher_iv.len, 6127 tdata->auth_iv.data, tdata->auth_iv.len, 6128 (tdata->digest_enc.offset == 0 ? 6129 plaintext_pad_len 6130 : tdata->digest_enc.offset), 6131 tdata->validCipherLen.len_bits, 6132 tdata->cipher.offset_bits, 6133 tdata->validAuthLen.len_bits, 6134 tdata->auth.offset_bits, 6135 op_mode, 0, verify); 6136 6137 if (retval < 0) 6138 return retval; 6139 6140 op = process_crypto_request(ts_params->valid_devs[0], 6141 ut_params->op); 6142 6143 /* Check if the op failed because the device doesn't */ 6144 /* support this particular combination of algorithms */ 6145 if (op == NULL && ut_params->op->status == 6146 RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { 6147 printf("Device doesn't support this mixed combination. " 6148 "Test Skipped.\n"); 6149 return -ENOTSUP; 6150 } 6151 ut_params->op = op; 6152 6153 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 6154 6155 ut_params->obuf = (op_mode == IN_PLACE ? 6156 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 6157 6158 if (verify) { 6159 if (ut_params->obuf) 6160 plaintext = rte_pktmbuf_mtod(ut_params->obuf, 6161 uint8_t *); 6162 else 6163 plaintext = ciphertext + 6164 (tdata->cipher.offset_bits >> 3); 6165 6166 debug_hexdump(stdout, "plaintext:", plaintext, 6167 tdata->plaintext.len_bits >> 3); 6168 debug_hexdump(stdout, "plaintext expected:", 6169 tdata->plaintext.data, 6170 tdata->plaintext.len_bits >> 3); 6171 } else { 6172 if (ut_params->obuf) 6173 ciphertext = rte_pktmbuf_mtod(ut_params->obuf, 6174 uint8_t *); 6175 else 6176 ciphertext = plaintext; 6177 6178 debug_hexdump(stdout, "ciphertext:", ciphertext, 6179 ciphertext_len); 6180 debug_hexdump(stdout, "ciphertext expected:", 6181 tdata->ciphertext.data, 6182 tdata->ciphertext.len_bits >> 3); 6183 6184 ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) 6185 + (tdata->digest_enc.offset == 0 ? 6186 plaintext_pad_len : tdata->digest_enc.offset); 6187 6188 debug_hexdump(stdout, "digest:", ut_params->digest, 6189 tdata->digest_enc.len); 6190 debug_hexdump(stdout, "digest expected:", 6191 tdata->digest_enc.data, 6192 tdata->digest_enc.len); 6193 } 6194 6195 /* Validate obuf */ 6196 if (verify) { 6197 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 6198 plaintext, 6199 tdata->plaintext.data, 6200 tdata->plaintext.len_bits >> 3, 6201 "Plaintext data not as expected"); 6202 } else { 6203 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 6204 ciphertext, 6205 tdata->ciphertext.data, 6206 tdata->validDataLen.len_bits, 6207 "Ciphertext data not as expected"); 6208 6209 TEST_ASSERT_BUFFERS_ARE_EQUAL( 6210 ut_params->digest, 6211 tdata->digest_enc.data, 6212 DIGEST_BYTE_LENGTH_SNOW3G_UIA2, 6213 "Generated auth tag not as expected"); 6214 } 6215 6216 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 6217 "crypto op processing failed"); 6218 6219 return 0; 6220 } 6221 6222 static int 6223 test_mixed_auth_cipher_sgl(const struct mixed_cipher_auth_test_data *tdata, 6224 uint8_t op_mode, uint8_t verify) 6225 { 6226 struct crypto_testsuite_params *ts_params = &testsuite_params; 6227 struct crypto_unittest_params *ut_params = &unittest_params; 6228 6229 int retval; 6230 6231 const uint8_t *plaintext = NULL; 6232 const uint8_t *ciphertext = NULL; 6233 const uint8_t *digest = NULL; 6234 unsigned int plaintext_pad_len; 6235 unsigned int plaintext_len; 6236 unsigned int ciphertext_pad_len; 6237 unsigned int ciphertext_len; 6238 uint8_t buffer[10000]; 6239 uint8_t digest_buffer[10000]; 6240 6241 struct rte_cryptodev_info dev_info; 6242 struct rte_crypto_op *op; 6243 6244 /* Check if device supports particular algorithms */ 6245 if (test_mixed_check_if_unsupported(tdata)) 6246 return -ENOTSUP; 6247 6248 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 6249 6250 uint64_t feat_flags = dev_info.feature_flags; 6251 6252 if (op_mode == IN_PLACE) { 6253 if (!(feat_flags & RTE_CRYPTODEV_FF_IN_PLACE_SGL)) { 6254 printf("Device doesn't support in-place scatter-gather " 6255 "in both input and output mbufs.\n"); 6256 return -ENOTSUP; 6257 } 6258 } else { 6259 if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) { 6260 printf("Device doesn't support out-of-place scatter-gather " 6261 "in both input and output mbufs.\n"); 6262 return -ENOTSUP; 6263 } 6264 if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { 6265 printf("Device doesn't support digest encrypted.\n"); 6266 return -ENOTSUP; 6267 } 6268 } 6269 6270 /* Create the session */ 6271 if (verify) 6272 retval = create_wireless_algo_cipher_auth_session( 6273 ts_params->valid_devs[0], 6274 RTE_CRYPTO_CIPHER_OP_DECRYPT, 6275 RTE_CRYPTO_AUTH_OP_VERIFY, 6276 tdata->auth_algo, 6277 tdata->cipher_algo, 6278 tdata->auth_key.data, tdata->auth_key.len, 6279 tdata->auth_iv.len, tdata->digest_enc.len, 6280 tdata->cipher_iv.len); 6281 else 6282 retval = create_wireless_algo_auth_cipher_session( 6283 ts_params->valid_devs[0], 6284 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 6285 RTE_CRYPTO_AUTH_OP_GENERATE, 6286 tdata->auth_algo, 6287 tdata->cipher_algo, 6288 tdata->auth_key.data, tdata->auth_key.len, 6289 tdata->auth_iv.len, tdata->digest_enc.len, 6290 tdata->cipher_iv.len); 6291 if (retval < 0) 6292 return retval; 6293 6294 ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits); 6295 plaintext_len = ceil_byte_length(tdata->plaintext.len_bits); 6296 ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16); 6297 plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); 6298 6299 ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, 6300 ciphertext_pad_len, 15, 0); 6301 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 6302 "Failed to allocate input buffer in mempool"); 6303 6304 if (op_mode == OUT_OF_PLACE) { 6305 ut_params->obuf = create_segmented_mbuf(ts_params->mbuf_pool, 6306 plaintext_pad_len, 15, 0); 6307 TEST_ASSERT_NOT_NULL(ut_params->obuf, 6308 "Failed to allocate output buffer in mempool"); 6309 } 6310 6311 if (verify) { 6312 pktmbuf_write(ut_params->ibuf, 0, ciphertext_len, 6313 tdata->ciphertext.data); 6314 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 6315 ciphertext_len, buffer); 6316 debug_hexdump(stdout, "ciphertext:", ciphertext, 6317 ciphertext_len); 6318 } else { 6319 pktmbuf_write(ut_params->ibuf, 0, plaintext_len, 6320 tdata->plaintext.data); 6321 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 6322 plaintext_len, buffer); 6323 debug_hexdump(stdout, "plaintext:", plaintext, 6324 plaintext_len); 6325 } 6326 memset(buffer, 0, sizeof(buffer)); 6327 6328 /* Create the operation */ 6329 retval = create_wireless_algo_auth_cipher_operation( 6330 tdata->digest_enc.data, tdata->digest_enc.len, 6331 tdata->cipher_iv.data, tdata->cipher_iv.len, 6332 tdata->auth_iv.data, tdata->auth_iv.len, 6333 (tdata->digest_enc.offset == 0 ? 6334 plaintext_pad_len 6335 : tdata->digest_enc.offset), 6336 tdata->validCipherLen.len_bits, 6337 tdata->cipher.offset_bits, 6338 tdata->validAuthLen.len_bits, 6339 tdata->auth.offset_bits, 6340 op_mode, 1, verify); 6341 6342 if (retval < 0) 6343 return retval; 6344 6345 op = process_crypto_request(ts_params->valid_devs[0], 6346 ut_params->op); 6347 6348 /* Check if the op failed because the device doesn't */ 6349 /* support this particular combination of algorithms */ 6350 if (op == NULL && ut_params->op->status == 6351 RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { 6352 printf("Device doesn't support this mixed combination. " 6353 "Test Skipped.\n"); 6354 return -ENOTSUP; 6355 } 6356 6357 ut_params->op = op; 6358 6359 TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); 6360 6361 ut_params->obuf = (op_mode == IN_PLACE ? 6362 ut_params->op->sym->m_src : ut_params->op->sym->m_dst); 6363 6364 if (verify) { 6365 if (ut_params->obuf) 6366 plaintext = rte_pktmbuf_read(ut_params->obuf, 0, 6367 plaintext_len, buffer); 6368 else 6369 plaintext = rte_pktmbuf_read(ut_params->ibuf, 0, 6370 plaintext_len, buffer); 6371 6372 debug_hexdump(stdout, "plaintext:", plaintext, 6373 (tdata->plaintext.len_bits >> 3) - 6374 tdata->digest_enc.len); 6375 debug_hexdump(stdout, "plaintext expected:", 6376 tdata->plaintext.data, 6377 (tdata->plaintext.len_bits >> 3) - 6378 tdata->digest_enc.len); 6379 } else { 6380 if (ut_params->obuf) 6381 ciphertext = rte_pktmbuf_read(ut_params->obuf, 0, 6382 ciphertext_len, buffer); 6383 else 6384 ciphertext = rte_pktmbuf_read(ut_params->ibuf, 0, 6385 ciphertext_len, buffer); 6386 6387 debug_hexdump(stdout, "ciphertext:", ciphertext, 6388 ciphertext_len); 6389 debug_hexdump(stdout, "ciphertext expected:", 6390 tdata->ciphertext.data, 6391 tdata->ciphertext.len_bits >> 3); 6392 6393 if (ut_params->obuf) 6394 digest = rte_pktmbuf_read(ut_params->obuf, 6395 (tdata->digest_enc.offset == 0 ? 6396 plaintext_pad_len : 6397 tdata->digest_enc.offset), 6398 tdata->digest_enc.len, digest_buffer); 6399 else 6400 digest = rte_pktmbuf_read(ut_params->ibuf, 6401 (tdata->digest_enc.offset == 0 ? 6402 plaintext_pad_len : 6403 tdata->digest_enc.offset), 6404 tdata->digest_enc.len, digest_buffer); 6405 6406 debug_hexdump(stdout, "digest:", digest, 6407 tdata->digest_enc.len); 6408 debug_hexdump(stdout, "digest expected:", 6409 tdata->digest_enc.data, tdata->digest_enc.len); 6410 } 6411 6412 /* Validate obuf */ 6413 if (verify) { 6414 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 6415 plaintext, 6416 tdata->plaintext.data, 6417 tdata->plaintext.len_bits >> 3, 6418 "Plaintext data not as expected"); 6419 } else { 6420 TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT( 6421 ciphertext, 6422 tdata->ciphertext.data, 6423 tdata->validDataLen.len_bits, 6424 "Ciphertext data not as expected"); 6425 TEST_ASSERT_BUFFERS_ARE_EQUAL( 6426 digest, 6427 tdata->digest_enc.data, 6428 tdata->digest_enc.len, 6429 "Generated auth tag not as expected"); 6430 } 6431 6432 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 6433 "crypto op processing failed"); 6434 6435 return 0; 6436 } 6437 6438 /** AUTH AES CMAC + CIPHER AES CTR */ 6439 6440 static int 6441 test_aes_cmac_aes_ctr_digest_enc_test_case_1(void) 6442 { 6443 return test_mixed_auth_cipher( 6444 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0); 6445 } 6446 6447 static int 6448 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void) 6449 { 6450 return test_mixed_auth_cipher( 6451 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); 6452 } 6453 6454 static int 6455 test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void) 6456 { 6457 return test_mixed_auth_cipher_sgl( 6458 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 0); 6459 } 6460 6461 static int 6462 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void) 6463 { 6464 return test_mixed_auth_cipher_sgl( 6465 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); 6466 } 6467 6468 static int 6469 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1(void) 6470 { 6471 return test_mixed_auth_cipher( 6472 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1); 6473 } 6474 6475 static int 6476 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop(void) 6477 { 6478 return test_mixed_auth_cipher( 6479 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); 6480 } 6481 6482 static int 6483 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl(void) 6484 { 6485 return test_mixed_auth_cipher_sgl( 6486 &auth_aes_cmac_cipher_aes_ctr_test_case_1, IN_PLACE, 1); 6487 } 6488 6489 static int 6490 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void) 6491 { 6492 return test_mixed_auth_cipher_sgl( 6493 &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); 6494 } 6495 6496 /** MIXED AUTH + CIPHER */ 6497 6498 static int 6499 test_auth_zuc_cipher_snow_test_case_1(void) 6500 { 6501 return test_mixed_auth_cipher( 6502 &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 0); 6503 } 6504 6505 static int 6506 test_verify_auth_zuc_cipher_snow_test_case_1(void) 6507 { 6508 return test_mixed_auth_cipher( 6509 &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 1); 6510 } 6511 6512 static int 6513 test_auth_aes_cmac_cipher_snow_test_case_1(void) 6514 { 6515 return test_mixed_auth_cipher( 6516 &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 0); 6517 } 6518 6519 static int 6520 test_verify_auth_aes_cmac_cipher_snow_test_case_1(void) 6521 { 6522 return test_mixed_auth_cipher( 6523 &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, 1); 6524 } 6525 6526 static int 6527 test_auth_zuc_cipher_aes_ctr_test_case_1(void) 6528 { 6529 return test_mixed_auth_cipher( 6530 &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); 6531 } 6532 6533 static int 6534 test_verify_auth_zuc_cipher_aes_ctr_test_case_1(void) 6535 { 6536 return test_mixed_auth_cipher( 6537 &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); 6538 } 6539 6540 static int 6541 test_auth_snow_cipher_aes_ctr_test_case_1(void) 6542 { 6543 return test_mixed_auth_cipher( 6544 &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); 6545 } 6546 6547 static int 6548 test_verify_auth_snow_cipher_aes_ctr_test_case_1(void) 6549 { 6550 return test_mixed_auth_cipher( 6551 &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); 6552 } 6553 6554 static int 6555 test_auth_snow_cipher_zuc_test_case_1(void) 6556 { 6557 return test_mixed_auth_cipher( 6558 &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); 6559 } 6560 6561 static int 6562 test_verify_auth_snow_cipher_zuc_test_case_1(void) 6563 { 6564 return test_mixed_auth_cipher( 6565 &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); 6566 } 6567 6568 static int 6569 test_auth_aes_cmac_cipher_zuc_test_case_1(void) 6570 { 6571 return test_mixed_auth_cipher( 6572 &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); 6573 } 6574 6575 static int 6576 test_verify_auth_aes_cmac_cipher_zuc_test_case_1(void) 6577 { 6578 return test_mixed_auth_cipher( 6579 &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); 6580 } 6581 6582 static int 6583 test_auth_null_cipher_snow_test_case_1(void) 6584 { 6585 return test_mixed_auth_cipher( 6586 &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 0); 6587 } 6588 6589 static int 6590 test_verify_auth_null_cipher_snow_test_case_1(void) 6591 { 6592 return test_mixed_auth_cipher( 6593 &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 1); 6594 } 6595 6596 static int 6597 test_auth_null_cipher_zuc_test_case_1(void) 6598 { 6599 return test_mixed_auth_cipher( 6600 &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); 6601 } 6602 6603 static int 6604 test_verify_auth_null_cipher_zuc_test_case_1(void) 6605 { 6606 return test_mixed_auth_cipher( 6607 &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); 6608 } 6609 6610 static int 6611 test_auth_snow_cipher_null_test_case_1(void) 6612 { 6613 return test_mixed_auth_cipher( 6614 &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 0); 6615 } 6616 6617 static int 6618 test_verify_auth_snow_cipher_null_test_case_1(void) 6619 { 6620 return test_mixed_auth_cipher( 6621 &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 1); 6622 } 6623 6624 static int 6625 test_auth_zuc_cipher_null_test_case_1(void) 6626 { 6627 return test_mixed_auth_cipher( 6628 &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 0); 6629 } 6630 6631 static int 6632 test_verify_auth_zuc_cipher_null_test_case_1(void) 6633 { 6634 return test_mixed_auth_cipher( 6635 &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 1); 6636 } 6637 6638 static int 6639 test_auth_null_cipher_aes_ctr_test_case_1(void) 6640 { 6641 return test_mixed_auth_cipher( 6642 &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); 6643 } 6644 6645 static int 6646 test_verify_auth_null_cipher_aes_ctr_test_case_1(void) 6647 { 6648 return test_mixed_auth_cipher( 6649 &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); 6650 } 6651 6652 static int 6653 test_auth_aes_cmac_cipher_null_test_case_1(void) 6654 { 6655 return test_mixed_auth_cipher( 6656 &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 0); 6657 } 6658 6659 static int 6660 test_verify_auth_aes_cmac_cipher_null_test_case_1(void) 6661 { 6662 return test_mixed_auth_cipher( 6663 &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 1); 6664 } 6665 6666 /* ***** AEAD algorithm Tests ***** */ 6667 6668 static int 6669 create_aead_session(uint8_t dev_id, enum rte_crypto_aead_algorithm algo, 6670 enum rte_crypto_aead_operation op, 6671 const uint8_t *key, const uint8_t key_len, 6672 const uint16_t aad_len, const uint8_t auth_len, 6673 uint8_t iv_len) 6674 { 6675 uint8_t aead_key[key_len]; 6676 6677 struct crypto_testsuite_params *ts_params = &testsuite_params; 6678 struct crypto_unittest_params *ut_params = &unittest_params; 6679 6680 memcpy(aead_key, key, key_len); 6681 6682 /* Setup AEAD Parameters */ 6683 ut_params->aead_xform.type = RTE_CRYPTO_SYM_XFORM_AEAD; 6684 ut_params->aead_xform.next = NULL; 6685 ut_params->aead_xform.aead.algo = algo; 6686 ut_params->aead_xform.aead.op = op; 6687 ut_params->aead_xform.aead.key.data = aead_key; 6688 ut_params->aead_xform.aead.key.length = key_len; 6689 ut_params->aead_xform.aead.iv.offset = IV_OFFSET; 6690 ut_params->aead_xform.aead.iv.length = iv_len; 6691 ut_params->aead_xform.aead.digest_length = auth_len; 6692 ut_params->aead_xform.aead.aad_length = aad_len; 6693 6694 debug_hexdump(stdout, "key:", key, key_len); 6695 6696 /* Create Crypto session*/ 6697 ut_params->sess = rte_cryptodev_sym_session_create( 6698 ts_params->session_mpool); 6699 6700 rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 6701 &ut_params->aead_xform, 6702 ts_params->session_priv_mpool); 6703 6704 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 6705 6706 return 0; 6707 } 6708 6709 static int 6710 create_aead_xform(struct rte_crypto_op *op, 6711 enum rte_crypto_aead_algorithm algo, 6712 enum rte_crypto_aead_operation aead_op, 6713 uint8_t *key, const uint8_t key_len, 6714 const uint8_t aad_len, const uint8_t auth_len, 6715 uint8_t iv_len) 6716 { 6717 TEST_ASSERT_NOT_NULL(rte_crypto_op_sym_xforms_alloc(op, 1), 6718 "failed to allocate space for crypto transform"); 6719 6720 struct rte_crypto_sym_op *sym_op = op->sym; 6721 6722 /* Setup AEAD Parameters */ 6723 sym_op->xform->type = RTE_CRYPTO_SYM_XFORM_AEAD; 6724 sym_op->xform->next = NULL; 6725 sym_op->xform->aead.algo = algo; 6726 sym_op->xform->aead.op = aead_op; 6727 sym_op->xform->aead.key.data = key; 6728 sym_op->xform->aead.key.length = key_len; 6729 sym_op->xform->aead.iv.offset = IV_OFFSET; 6730 sym_op->xform->aead.iv.length = iv_len; 6731 sym_op->xform->aead.digest_length = auth_len; 6732 sym_op->xform->aead.aad_length = aad_len; 6733 6734 debug_hexdump(stdout, "key:", key, key_len); 6735 6736 return 0; 6737 } 6738 6739 static int 6740 create_aead_operation(enum rte_crypto_aead_operation op, 6741 const struct aead_test_data *tdata) 6742 { 6743 struct crypto_testsuite_params *ts_params = &testsuite_params; 6744 struct crypto_unittest_params *ut_params = &unittest_params; 6745 6746 uint8_t *plaintext, *ciphertext; 6747 unsigned int aad_pad_len, plaintext_pad_len; 6748 6749 /* Generate Crypto op data structure */ 6750 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 6751 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 6752 TEST_ASSERT_NOT_NULL(ut_params->op, 6753 "Failed to allocate symmetric crypto operation struct"); 6754 6755 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 6756 6757 /* Append aad data */ 6758 if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) { 6759 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len + 18, 16); 6760 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6761 aad_pad_len); 6762 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data, 6763 "no room to append aad"); 6764 6765 sym_op->aead.aad.phys_addr = 6766 rte_pktmbuf_iova(ut_params->ibuf); 6767 /* Copy AAD 18 bytes after the AAD pointer, according to the API */ 6768 memcpy(sym_op->aead.aad.data + 18, tdata->aad.data, tdata->aad.len); 6769 debug_hexdump(stdout, "aad:", sym_op->aead.aad.data, 6770 tdata->aad.len); 6771 6772 /* Append IV at the end of the crypto operation*/ 6773 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, 6774 uint8_t *, IV_OFFSET); 6775 6776 /* Copy IV 1 byte after the IV pointer, according to the API */ 6777 rte_memcpy(iv_ptr + 1, tdata->iv.data, tdata->iv.len); 6778 debug_hexdump(stdout, "iv:", iv_ptr, 6779 tdata->iv.len); 6780 } else { 6781 aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16); 6782 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6783 aad_pad_len); 6784 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data, 6785 "no room to append aad"); 6786 6787 sym_op->aead.aad.phys_addr = 6788 rte_pktmbuf_iova(ut_params->ibuf); 6789 memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len); 6790 debug_hexdump(stdout, "aad:", sym_op->aead.aad.data, 6791 tdata->aad.len); 6792 6793 /* Append IV at the end of the crypto operation*/ 6794 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, 6795 uint8_t *, IV_OFFSET); 6796 6797 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len); 6798 debug_hexdump(stdout, "iv:", iv_ptr, 6799 tdata->iv.len); 6800 } 6801 6802 /* Append plaintext/ciphertext */ 6803 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) { 6804 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 6805 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6806 plaintext_pad_len); 6807 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 6808 6809 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len); 6810 debug_hexdump(stdout, "plaintext:", plaintext, 6811 tdata->plaintext.len); 6812 6813 if (ut_params->obuf) { 6814 ciphertext = (uint8_t *)rte_pktmbuf_append( 6815 ut_params->obuf, 6816 plaintext_pad_len + aad_pad_len); 6817 TEST_ASSERT_NOT_NULL(ciphertext, 6818 "no room to append ciphertext"); 6819 6820 memset(ciphertext + aad_pad_len, 0, 6821 tdata->ciphertext.len); 6822 } 6823 } else { 6824 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16); 6825 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 6826 plaintext_pad_len); 6827 TEST_ASSERT_NOT_NULL(ciphertext, 6828 "no room to append ciphertext"); 6829 6830 memcpy(ciphertext, tdata->ciphertext.data, 6831 tdata->ciphertext.len); 6832 debug_hexdump(stdout, "ciphertext:", ciphertext, 6833 tdata->ciphertext.len); 6834 6835 if (ut_params->obuf) { 6836 plaintext = (uint8_t *)rte_pktmbuf_append( 6837 ut_params->obuf, 6838 plaintext_pad_len + aad_pad_len); 6839 TEST_ASSERT_NOT_NULL(plaintext, 6840 "no room to append plaintext"); 6841 6842 memset(plaintext + aad_pad_len, 0, 6843 tdata->plaintext.len); 6844 } 6845 } 6846 6847 /* Append digest data */ 6848 if (op == RTE_CRYPTO_AEAD_OP_ENCRYPT) { 6849 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append( 6850 ut_params->obuf ? ut_params->obuf : 6851 ut_params->ibuf, 6852 tdata->auth_tag.len); 6853 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data, 6854 "no room to append digest"); 6855 memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len); 6856 sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset( 6857 ut_params->obuf ? ut_params->obuf : 6858 ut_params->ibuf, 6859 plaintext_pad_len + 6860 aad_pad_len); 6861 } else { 6862 sym_op->aead.digest.data = (uint8_t *)rte_pktmbuf_append( 6863 ut_params->ibuf, tdata->auth_tag.len); 6864 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data, 6865 "no room to append digest"); 6866 sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset( 6867 ut_params->ibuf, 6868 plaintext_pad_len + aad_pad_len); 6869 6870 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data, 6871 tdata->auth_tag.len); 6872 debug_hexdump(stdout, "digest:", 6873 sym_op->aead.digest.data, 6874 tdata->auth_tag.len); 6875 } 6876 6877 sym_op->aead.data.length = tdata->plaintext.len; 6878 sym_op->aead.data.offset = aad_pad_len; 6879 6880 return 0; 6881 } 6882 6883 static int 6884 test_authenticated_encryption(const struct aead_test_data *tdata) 6885 { 6886 struct crypto_testsuite_params *ts_params = &testsuite_params; 6887 struct crypto_unittest_params *ut_params = &unittest_params; 6888 6889 int retval; 6890 uint8_t *ciphertext, *auth_tag; 6891 uint16_t plaintext_pad_len; 6892 uint32_t i; 6893 6894 /* Verify the capabilities */ 6895 struct rte_cryptodev_sym_capability_idx cap_idx; 6896 const struct rte_cryptodev_symmetric_capability *capability; 6897 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 6898 cap_idx.algo.aead = tdata->algo; 6899 capability = rte_cryptodev_sym_capability_get( 6900 ts_params->valid_devs[0], &cap_idx); 6901 if (capability == NULL) 6902 return -ENOTSUP; 6903 if (rte_cryptodev_sym_capability_check_aead( 6904 capability, tdata->key.len, tdata->auth_tag.len, 6905 tdata->aad.len, tdata->iv.len)) 6906 return -ENOTSUP; 6907 6908 /* Create AEAD session */ 6909 retval = create_aead_session(ts_params->valid_devs[0], 6910 tdata->algo, 6911 RTE_CRYPTO_AEAD_OP_ENCRYPT, 6912 tdata->key.data, tdata->key.len, 6913 tdata->aad.len, tdata->auth_tag.len, 6914 tdata->iv.len); 6915 if (retval < 0) 6916 return retval; 6917 6918 if (tdata->aad.len > MBUF_SIZE) { 6919 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool); 6920 /* Populate full size of add data */ 6921 for (i = 32; i < MAX_AAD_LENGTH; i += 32) 6922 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32); 6923 } else 6924 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 6925 6926 /* clear mbuf payload */ 6927 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 6928 rte_pktmbuf_tailroom(ut_params->ibuf)); 6929 6930 /* Create AEAD operation */ 6931 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata); 6932 if (retval < 0) 6933 return retval; 6934 6935 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 6936 6937 ut_params->op->sym->m_src = ut_params->ibuf; 6938 6939 /* Process crypto operation */ 6940 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 6941 ut_params->op), "failed to process sym crypto op"); 6942 6943 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 6944 "crypto op processing failed"); 6945 6946 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 6947 6948 if (ut_params->op->sym->m_dst) { 6949 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst, 6950 uint8_t *); 6951 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst, 6952 uint8_t *, plaintext_pad_len); 6953 } else { 6954 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src, 6955 uint8_t *, 6956 ut_params->op->sym->cipher.data.offset); 6957 auth_tag = ciphertext + plaintext_pad_len; 6958 } 6959 6960 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len); 6961 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len); 6962 6963 /* Validate obuf */ 6964 TEST_ASSERT_BUFFERS_ARE_EQUAL( 6965 ciphertext, 6966 tdata->ciphertext.data, 6967 tdata->ciphertext.len, 6968 "Ciphertext data not as expected"); 6969 6970 TEST_ASSERT_BUFFERS_ARE_EQUAL( 6971 auth_tag, 6972 tdata->auth_tag.data, 6973 tdata->auth_tag.len, 6974 "Generated auth tag not as expected"); 6975 6976 return 0; 6977 6978 } 6979 6980 #ifdef RTE_LIBRTE_SECURITY 6981 /* Basic algorithm run function for async inplace mode. 6982 * Creates a session from input parameters and runs one operation 6983 * on input_vec. Checks the output of the crypto operation against 6984 * output_vec. 6985 */ 6986 static int 6987 test_pdcp_proto(int i, int oop, 6988 enum rte_crypto_cipher_operation opc, 6989 enum rte_crypto_auth_operation opa, 6990 uint8_t *input_vec, 6991 unsigned int input_vec_len, 6992 uint8_t *output_vec, 6993 unsigned int output_vec_len) 6994 { 6995 struct crypto_testsuite_params *ts_params = &testsuite_params; 6996 struct crypto_unittest_params *ut_params = &unittest_params; 6997 uint8_t *plaintext; 6998 int ret = TEST_SUCCESS; 6999 struct rte_security_ctx *ctx = (struct rte_security_ctx *) 7000 rte_cryptodev_get_sec_ctx( 7001 ts_params->valid_devs[0]); 7002 7003 /* Verify the capabilities */ 7004 struct rte_security_capability_idx sec_cap_idx; 7005 7006 sec_cap_idx.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL; 7007 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_PDCP; 7008 sec_cap_idx.pdcp.domain = pdcp_test_params[i].domain; 7009 if (rte_security_capability_get(ctx, &sec_cap_idx) == NULL) 7010 return -ENOTSUP; 7011 7012 /* Generate test mbuf data */ 7013 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7014 7015 /* clear mbuf payload */ 7016 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 7017 rte_pktmbuf_tailroom(ut_params->ibuf)); 7018 7019 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 7020 input_vec_len); 7021 memcpy(plaintext, input_vec, input_vec_len); 7022 7023 /* Out of place support */ 7024 if (oop) { 7025 /* 7026 * For out-op-place we need to alloc another mbuf 7027 */ 7028 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7029 rte_pktmbuf_append(ut_params->obuf, output_vec_len); 7030 } 7031 7032 /* Set crypto type as IPSEC */ 7033 ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL; 7034 7035 /* Setup Cipher Parameters */ 7036 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 7037 ut_params->cipher_xform.cipher.algo = pdcp_test_params[i].cipher_alg; 7038 ut_params->cipher_xform.cipher.op = opc; 7039 ut_params->cipher_xform.cipher.key.data = pdcp_test_crypto_key[i]; 7040 ut_params->cipher_xform.cipher.key.length = 7041 pdcp_test_params[i].cipher_key_len; 7042 ut_params->cipher_xform.cipher.iv.length = 0; 7043 7044 /* Setup HMAC Parameters if ICV header is required */ 7045 if (pdcp_test_params[i].auth_alg != 0) { 7046 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 7047 ut_params->auth_xform.next = NULL; 7048 ut_params->auth_xform.auth.algo = pdcp_test_params[i].auth_alg; 7049 ut_params->auth_xform.auth.op = opa; 7050 ut_params->auth_xform.auth.key.data = pdcp_test_auth_key[i]; 7051 ut_params->auth_xform.auth.key.length = 7052 pdcp_test_params[i].auth_key_len; 7053 7054 ut_params->cipher_xform.next = &ut_params->auth_xform; 7055 } else { 7056 ut_params->cipher_xform.next = NULL; 7057 } 7058 7059 struct rte_security_session_conf sess_conf = { 7060 .action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, 7061 .protocol = RTE_SECURITY_PROTOCOL_PDCP, 7062 {.pdcp = { 7063 .bearer = pdcp_test_bearer[i], 7064 .domain = pdcp_test_params[i].domain, 7065 .pkt_dir = pdcp_test_packet_direction[i], 7066 .sn_size = pdcp_test_data_sn_size[i], 7067 .hfn = pdcp_test_hfn[i], 7068 .hfn_threshold = pdcp_test_hfn_threshold[i], 7069 } }, 7070 .crypto_xform = &ut_params->cipher_xform 7071 }; 7072 7073 /* Create security session */ 7074 ut_params->sec_session = rte_security_session_create(ctx, 7075 &sess_conf, ts_params->session_priv_mpool); 7076 7077 if (!ut_params->sec_session) { 7078 printf("TestCase %s()-%d line %d failed %s: ", 7079 __func__, i, __LINE__, "Failed to allocate session"); 7080 ret = TEST_FAILED; 7081 goto on_err; 7082 } 7083 7084 /* Generate crypto op data structure */ 7085 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 7086 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 7087 if (!ut_params->op) { 7088 printf("TestCase %s()-%d line %d failed %s: ", 7089 __func__, i, __LINE__, 7090 "Failed to allocate symmetric crypto operation struct"); 7091 ret = TEST_FAILED; 7092 goto on_err; 7093 } 7094 7095 rte_security_attach_session(ut_params->op, ut_params->sec_session); 7096 7097 /* set crypto operation source mbuf */ 7098 ut_params->op->sym->m_src = ut_params->ibuf; 7099 if (oop) 7100 ut_params->op->sym->m_dst = ut_params->obuf; 7101 7102 /* Process crypto operation */ 7103 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op) 7104 == NULL) { 7105 printf("TestCase %s()-%d line %d failed %s: ", 7106 __func__, i, __LINE__, 7107 "failed to process sym crypto op"); 7108 ret = TEST_FAILED; 7109 goto on_err; 7110 } 7111 7112 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) { 7113 printf("TestCase %s()-%d line %d failed %s: ", 7114 __func__, i, __LINE__, "crypto op processing failed"); 7115 ret = TEST_FAILED; 7116 goto on_err; 7117 } 7118 7119 /* Validate obuf */ 7120 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src, 7121 uint8_t *); 7122 if (oop) { 7123 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst, 7124 uint8_t *); 7125 } 7126 7127 if (memcmp(ciphertext, output_vec, output_vec_len)) { 7128 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i); 7129 rte_hexdump(stdout, "encrypted", ciphertext, output_vec_len); 7130 rte_hexdump(stdout, "reference", output_vec, output_vec_len); 7131 ret = TEST_FAILED; 7132 goto on_err; 7133 } 7134 7135 on_err: 7136 rte_crypto_op_free(ut_params->op); 7137 ut_params->op = NULL; 7138 7139 if (ut_params->sec_session) 7140 rte_security_session_destroy(ctx, ut_params->sec_session); 7141 ut_params->sec_session = NULL; 7142 7143 rte_pktmbuf_free(ut_params->ibuf); 7144 ut_params->ibuf = NULL; 7145 if (oop) { 7146 rte_pktmbuf_free(ut_params->obuf); 7147 ut_params->obuf = NULL; 7148 } 7149 7150 return ret; 7151 } 7152 7153 static int 7154 test_pdcp_proto_SGL(int i, int oop, 7155 enum rte_crypto_cipher_operation opc, 7156 enum rte_crypto_auth_operation opa, 7157 uint8_t *input_vec, 7158 unsigned int input_vec_len, 7159 uint8_t *output_vec, 7160 unsigned int output_vec_len, 7161 uint32_t fragsz, 7162 uint32_t fragsz_oop) 7163 { 7164 struct crypto_testsuite_params *ts_params = &testsuite_params; 7165 struct crypto_unittest_params *ut_params = &unittest_params; 7166 uint8_t *plaintext; 7167 struct rte_mbuf *buf, *buf_oop = NULL; 7168 int ret = TEST_SUCCESS; 7169 int to_trn = 0; 7170 int to_trn_tbl[16]; 7171 int segs = 1; 7172 unsigned int trn_data = 0; 7173 struct rte_security_ctx *ctx = (struct rte_security_ctx *) 7174 rte_cryptodev_get_sec_ctx( 7175 ts_params->valid_devs[0]); 7176 7177 /* Verify the capabilities */ 7178 struct rte_security_capability_idx sec_cap_idx; 7179 7180 sec_cap_idx.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL; 7181 sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_PDCP; 7182 sec_cap_idx.pdcp.domain = pdcp_test_params[i].domain; 7183 if (rte_security_capability_get(ctx, &sec_cap_idx) == NULL) 7184 return -ENOTSUP; 7185 7186 if (fragsz > input_vec_len) 7187 fragsz = input_vec_len; 7188 7189 uint16_t plaintext_len = fragsz; 7190 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz; 7191 7192 if (fragsz_oop > output_vec_len) 7193 frag_size_oop = output_vec_len; 7194 7195 int ecx = 0; 7196 if (input_vec_len % fragsz != 0) { 7197 if (input_vec_len / fragsz + 1 > 16) 7198 return 1; 7199 } else if (input_vec_len / fragsz > 16) 7200 return 1; 7201 7202 /* Out of place support */ 7203 if (oop) { 7204 /* 7205 * For out-op-place we need to alloc another mbuf 7206 */ 7207 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7208 rte_pktmbuf_append(ut_params->obuf, frag_size_oop); 7209 buf_oop = ut_params->obuf; 7210 } 7211 7212 /* Generate test mbuf data */ 7213 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7214 7215 /* clear mbuf payload */ 7216 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 7217 rte_pktmbuf_tailroom(ut_params->ibuf)); 7218 7219 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 7220 plaintext_len); 7221 memcpy(plaintext, input_vec, plaintext_len); 7222 trn_data += plaintext_len; 7223 7224 buf = ut_params->ibuf; 7225 7226 /* 7227 * Loop until no more fragments 7228 */ 7229 7230 while (trn_data < input_vec_len) { 7231 ++segs; 7232 to_trn = (input_vec_len - trn_data < fragsz) ? 7233 (input_vec_len - trn_data) : fragsz; 7234 7235 to_trn_tbl[ecx++] = to_trn; 7236 7237 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7238 buf = buf->next; 7239 7240 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0, 7241 rte_pktmbuf_tailroom(buf)); 7242 7243 /* OOP */ 7244 if (oop && !fragsz_oop) { 7245 buf_oop->next = 7246 rte_pktmbuf_alloc(ts_params->mbuf_pool); 7247 buf_oop = buf_oop->next; 7248 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *), 7249 0, rte_pktmbuf_tailroom(buf_oop)); 7250 rte_pktmbuf_append(buf_oop, to_trn); 7251 } 7252 7253 plaintext = (uint8_t *)rte_pktmbuf_append(buf, 7254 to_trn); 7255 7256 memcpy(plaintext, input_vec + trn_data, to_trn); 7257 trn_data += to_trn; 7258 } 7259 7260 ut_params->ibuf->nb_segs = segs; 7261 7262 segs = 1; 7263 if (fragsz_oop && oop) { 7264 to_trn = 0; 7265 ecx = 0; 7266 7267 trn_data = frag_size_oop; 7268 while (trn_data < output_vec_len) { 7269 ++segs; 7270 to_trn = 7271 (output_vec_len - trn_data < 7272 frag_size_oop) ? 7273 (output_vec_len - trn_data) : 7274 frag_size_oop; 7275 7276 to_trn_tbl[ecx++] = to_trn; 7277 7278 buf_oop->next = 7279 rte_pktmbuf_alloc(ts_params->mbuf_pool); 7280 buf_oop = buf_oop->next; 7281 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *), 7282 0, rte_pktmbuf_tailroom(buf_oop)); 7283 rte_pktmbuf_append(buf_oop, to_trn); 7284 7285 trn_data += to_trn; 7286 } 7287 ut_params->obuf->nb_segs = segs; 7288 } 7289 7290 ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL; 7291 7292 /* Setup Cipher Parameters */ 7293 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 7294 ut_params->cipher_xform.cipher.algo = pdcp_test_params[i].cipher_alg; 7295 ut_params->cipher_xform.cipher.op = opc; 7296 ut_params->cipher_xform.cipher.key.data = pdcp_test_crypto_key[i]; 7297 ut_params->cipher_xform.cipher.key.length = 7298 pdcp_test_params[i].cipher_key_len; 7299 ut_params->cipher_xform.cipher.iv.length = 0; 7300 7301 /* Setup HMAC Parameters if ICV header is required */ 7302 if (pdcp_test_params[i].auth_alg != 0) { 7303 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 7304 ut_params->auth_xform.next = NULL; 7305 ut_params->auth_xform.auth.algo = pdcp_test_params[i].auth_alg; 7306 ut_params->auth_xform.auth.op = opa; 7307 ut_params->auth_xform.auth.key.data = pdcp_test_auth_key[i]; 7308 ut_params->auth_xform.auth.key.length = 7309 pdcp_test_params[i].auth_key_len; 7310 7311 ut_params->cipher_xform.next = &ut_params->auth_xform; 7312 } else { 7313 ut_params->cipher_xform.next = NULL; 7314 } 7315 7316 struct rte_security_session_conf sess_conf = { 7317 .action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, 7318 .protocol = RTE_SECURITY_PROTOCOL_PDCP, 7319 {.pdcp = { 7320 .bearer = pdcp_test_bearer[i], 7321 .domain = pdcp_test_params[i].domain, 7322 .pkt_dir = pdcp_test_packet_direction[i], 7323 .sn_size = pdcp_test_data_sn_size[i], 7324 .hfn = pdcp_test_hfn[i], 7325 .hfn_threshold = pdcp_test_hfn_threshold[i], 7326 } }, 7327 .crypto_xform = &ut_params->cipher_xform 7328 }; 7329 7330 /* Create security session */ 7331 ut_params->sec_session = rte_security_session_create(ctx, 7332 &sess_conf, ts_params->session_priv_mpool); 7333 7334 if (!ut_params->sec_session) { 7335 printf("TestCase %s()-%d line %d failed %s: ", 7336 __func__, i, __LINE__, "Failed to allocate session"); 7337 ret = TEST_FAILED; 7338 goto on_err; 7339 } 7340 7341 /* Generate crypto op data structure */ 7342 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 7343 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 7344 if (!ut_params->op) { 7345 printf("TestCase %s()-%d line %d failed %s: ", 7346 __func__, i, __LINE__, 7347 "Failed to allocate symmetric crypto operation struct"); 7348 ret = TEST_FAILED; 7349 goto on_err; 7350 } 7351 7352 rte_security_attach_session(ut_params->op, ut_params->sec_session); 7353 7354 /* set crypto operation source mbuf */ 7355 ut_params->op->sym->m_src = ut_params->ibuf; 7356 if (oop) 7357 ut_params->op->sym->m_dst = ut_params->obuf; 7358 7359 /* Process crypto operation */ 7360 if (process_crypto_request(ts_params->valid_devs[0], ut_params->op) 7361 == NULL) { 7362 printf("TestCase %s()-%d line %d failed %s: ", 7363 __func__, i, __LINE__, 7364 "failed to process sym crypto op"); 7365 ret = TEST_FAILED; 7366 goto on_err; 7367 } 7368 7369 if (ut_params->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) { 7370 printf("TestCase %s()-%d line %d failed %s: ", 7371 __func__, i, __LINE__, "crypto op processing failed"); 7372 ret = TEST_FAILED; 7373 goto on_err; 7374 } 7375 7376 /* Validate obuf */ 7377 uint8_t *ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_src, 7378 uint8_t *); 7379 if (oop) { 7380 ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst, 7381 uint8_t *); 7382 } 7383 if (fragsz_oop) 7384 fragsz = frag_size_oop; 7385 if (memcmp(ciphertext, output_vec, fragsz)) { 7386 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i); 7387 rte_hexdump(stdout, "encrypted", ciphertext, fragsz); 7388 rte_hexdump(stdout, "reference", output_vec, fragsz); 7389 ret = TEST_FAILED; 7390 goto on_err; 7391 } 7392 7393 buf = ut_params->op->sym->m_src->next; 7394 if (oop) 7395 buf = ut_params->op->sym->m_dst->next; 7396 7397 unsigned int off = fragsz; 7398 7399 ecx = 0; 7400 while (buf) { 7401 ciphertext = rte_pktmbuf_mtod(buf, 7402 uint8_t *); 7403 if (memcmp(ciphertext, output_vec + off, to_trn_tbl[ecx])) { 7404 printf("\n=======PDCP TestCase #%d failed: Data Mismatch ", i); 7405 rte_hexdump(stdout, "encrypted", ciphertext, to_trn_tbl[ecx]); 7406 rte_hexdump(stdout, "reference", output_vec + off, 7407 to_trn_tbl[ecx]); 7408 ret = TEST_FAILED; 7409 goto on_err; 7410 } 7411 off += to_trn_tbl[ecx++]; 7412 buf = buf->next; 7413 } 7414 on_err: 7415 rte_crypto_op_free(ut_params->op); 7416 ut_params->op = NULL; 7417 7418 if (ut_params->sec_session) 7419 rte_security_session_destroy(ctx, ut_params->sec_session); 7420 ut_params->sec_session = NULL; 7421 7422 rte_pktmbuf_free(ut_params->ibuf); 7423 ut_params->ibuf = NULL; 7424 if (oop) { 7425 rte_pktmbuf_free(ut_params->obuf); 7426 ut_params->obuf = NULL; 7427 } 7428 7429 return ret; 7430 } 7431 7432 int 7433 test_pdcp_proto_cplane_encap(int i) 7434 { 7435 return test_pdcp_proto(i, 0, 7436 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7437 RTE_CRYPTO_AUTH_OP_GENERATE, 7438 pdcp_test_data_in[i], 7439 pdcp_test_data_in_len[i], 7440 pdcp_test_data_out[i], 7441 pdcp_test_data_in_len[i]+4); 7442 } 7443 7444 int 7445 test_pdcp_proto_uplane_encap(int i) 7446 { 7447 return test_pdcp_proto(i, 0, 7448 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7449 RTE_CRYPTO_AUTH_OP_GENERATE, 7450 pdcp_test_data_in[i], 7451 pdcp_test_data_in_len[i], 7452 pdcp_test_data_out[i], 7453 pdcp_test_data_in_len[i]); 7454 7455 } 7456 7457 int 7458 test_pdcp_proto_uplane_encap_with_int(int i) 7459 { 7460 return test_pdcp_proto(i, 0, 7461 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7462 RTE_CRYPTO_AUTH_OP_GENERATE, 7463 pdcp_test_data_in[i], 7464 pdcp_test_data_in_len[i], 7465 pdcp_test_data_out[i], 7466 pdcp_test_data_in_len[i] + 4); 7467 } 7468 7469 int 7470 test_pdcp_proto_cplane_decap(int i) 7471 { 7472 return test_pdcp_proto(i, 0, 7473 RTE_CRYPTO_CIPHER_OP_DECRYPT, 7474 RTE_CRYPTO_AUTH_OP_VERIFY, 7475 pdcp_test_data_out[i], 7476 pdcp_test_data_in_len[i] + 4, 7477 pdcp_test_data_in[i], 7478 pdcp_test_data_in_len[i]); 7479 } 7480 7481 int 7482 test_pdcp_proto_uplane_decap(int i) 7483 { 7484 return test_pdcp_proto(i, 0, 7485 RTE_CRYPTO_CIPHER_OP_DECRYPT, 7486 RTE_CRYPTO_AUTH_OP_VERIFY, 7487 pdcp_test_data_out[i], 7488 pdcp_test_data_in_len[i], 7489 pdcp_test_data_in[i], 7490 pdcp_test_data_in_len[i]); 7491 } 7492 7493 int 7494 test_pdcp_proto_uplane_decap_with_int(int i) 7495 { 7496 return test_pdcp_proto(i, 0, 7497 RTE_CRYPTO_CIPHER_OP_DECRYPT, 7498 RTE_CRYPTO_AUTH_OP_VERIFY, 7499 pdcp_test_data_out[i], 7500 pdcp_test_data_in_len[i] + 4, 7501 pdcp_test_data_in[i], 7502 pdcp_test_data_in_len[i]); 7503 } 7504 7505 static int 7506 test_PDCP_PROTO_SGL_in_place_32B(void) 7507 { 7508 /* i can be used for running any PDCP case 7509 * In this case it is uplane 12-bit AES-SNOW DL encap 7510 */ 7511 int i = PDCP_UPLANE_12BIT_OFFSET + AES_ENC + SNOW_AUTH + DOWNLINK; 7512 return test_pdcp_proto_SGL(i, IN_PLACE, 7513 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7514 RTE_CRYPTO_AUTH_OP_GENERATE, 7515 pdcp_test_data_in[i], 7516 pdcp_test_data_in_len[i], 7517 pdcp_test_data_out[i], 7518 pdcp_test_data_in_len[i]+4, 7519 32, 0); 7520 } 7521 static int 7522 test_PDCP_PROTO_SGL_oop_32B_128B(void) 7523 { 7524 /* i can be used for running any PDCP case 7525 * In this case it is uplane 18-bit NULL-NULL DL encap 7526 */ 7527 int i = PDCP_UPLANE_18BIT_OFFSET + NULL_ENC + NULL_AUTH + DOWNLINK; 7528 return test_pdcp_proto_SGL(i, OUT_OF_PLACE, 7529 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7530 RTE_CRYPTO_AUTH_OP_GENERATE, 7531 pdcp_test_data_in[i], 7532 pdcp_test_data_in_len[i], 7533 pdcp_test_data_out[i], 7534 pdcp_test_data_in_len[i]+4, 7535 32, 128); 7536 } 7537 static int 7538 test_PDCP_PROTO_SGL_oop_32B_40B(void) 7539 { 7540 /* i can be used for running any PDCP case 7541 * In this case it is uplane 18-bit AES DL encap 7542 */ 7543 int i = PDCP_UPLANE_OFFSET + AES_ENC + EIGHTEEN_BIT_SEQ_NUM_OFFSET 7544 + DOWNLINK; 7545 return test_pdcp_proto_SGL(i, OUT_OF_PLACE, 7546 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7547 RTE_CRYPTO_AUTH_OP_GENERATE, 7548 pdcp_test_data_in[i], 7549 pdcp_test_data_in_len[i], 7550 pdcp_test_data_out[i], 7551 pdcp_test_data_in_len[i], 7552 32, 40); 7553 } 7554 static int 7555 test_PDCP_PROTO_SGL_oop_128B_32B(void) 7556 { 7557 /* i can be used for running any PDCP case 7558 * In this case it is cplane 12-bit AES-ZUC DL encap 7559 */ 7560 int i = PDCP_CPLANE_LONG_SN_OFFSET + AES_ENC + ZUC_AUTH + DOWNLINK; 7561 return test_pdcp_proto_SGL(i, OUT_OF_PLACE, 7562 RTE_CRYPTO_CIPHER_OP_ENCRYPT, 7563 RTE_CRYPTO_AUTH_OP_GENERATE, 7564 pdcp_test_data_in[i], 7565 pdcp_test_data_in_len[i], 7566 pdcp_test_data_out[i], 7567 pdcp_test_data_in_len[i]+4, 7568 128, 32); 7569 } 7570 #endif 7571 7572 static int 7573 test_AES_GCM_authenticated_encryption_test_case_1(void) 7574 { 7575 return test_authenticated_encryption(&gcm_test_case_1); 7576 } 7577 7578 static int 7579 test_AES_GCM_authenticated_encryption_test_case_2(void) 7580 { 7581 return test_authenticated_encryption(&gcm_test_case_2); 7582 } 7583 7584 static int 7585 test_AES_GCM_authenticated_encryption_test_case_3(void) 7586 { 7587 return test_authenticated_encryption(&gcm_test_case_3); 7588 } 7589 7590 static int 7591 test_AES_GCM_authenticated_encryption_test_case_4(void) 7592 { 7593 return test_authenticated_encryption(&gcm_test_case_4); 7594 } 7595 7596 static int 7597 test_AES_GCM_authenticated_encryption_test_case_5(void) 7598 { 7599 return test_authenticated_encryption(&gcm_test_case_5); 7600 } 7601 7602 static int 7603 test_AES_GCM_authenticated_encryption_test_case_6(void) 7604 { 7605 return test_authenticated_encryption(&gcm_test_case_6); 7606 } 7607 7608 static int 7609 test_AES_GCM_authenticated_encryption_test_case_7(void) 7610 { 7611 return test_authenticated_encryption(&gcm_test_case_7); 7612 } 7613 7614 static int 7615 test_AES_GCM_authenticated_encryption_test_case_8(void) 7616 { 7617 return test_authenticated_encryption(&gcm_test_case_8); 7618 } 7619 7620 static int 7621 test_AES_GCM_auth_encryption_test_case_192_1(void) 7622 { 7623 return test_authenticated_encryption(&gcm_test_case_192_1); 7624 } 7625 7626 static int 7627 test_AES_GCM_auth_encryption_test_case_192_2(void) 7628 { 7629 return test_authenticated_encryption(&gcm_test_case_192_2); 7630 } 7631 7632 static int 7633 test_AES_GCM_auth_encryption_test_case_192_3(void) 7634 { 7635 return test_authenticated_encryption(&gcm_test_case_192_3); 7636 } 7637 7638 static int 7639 test_AES_GCM_auth_encryption_test_case_192_4(void) 7640 { 7641 return test_authenticated_encryption(&gcm_test_case_192_4); 7642 } 7643 7644 static int 7645 test_AES_GCM_auth_encryption_test_case_192_5(void) 7646 { 7647 return test_authenticated_encryption(&gcm_test_case_192_5); 7648 } 7649 7650 static int 7651 test_AES_GCM_auth_encryption_test_case_192_6(void) 7652 { 7653 return test_authenticated_encryption(&gcm_test_case_192_6); 7654 } 7655 7656 static int 7657 test_AES_GCM_auth_encryption_test_case_192_7(void) 7658 { 7659 return test_authenticated_encryption(&gcm_test_case_192_7); 7660 } 7661 7662 static int 7663 test_AES_GCM_auth_encryption_test_case_256_1(void) 7664 { 7665 return test_authenticated_encryption(&gcm_test_case_256_1); 7666 } 7667 7668 static int 7669 test_AES_GCM_auth_encryption_test_case_256_2(void) 7670 { 7671 return test_authenticated_encryption(&gcm_test_case_256_2); 7672 } 7673 7674 static int 7675 test_AES_GCM_auth_encryption_test_case_256_3(void) 7676 { 7677 return test_authenticated_encryption(&gcm_test_case_256_3); 7678 } 7679 7680 static int 7681 test_AES_GCM_auth_encryption_test_case_256_4(void) 7682 { 7683 return test_authenticated_encryption(&gcm_test_case_256_4); 7684 } 7685 7686 static int 7687 test_AES_GCM_auth_encryption_test_case_256_5(void) 7688 { 7689 return test_authenticated_encryption(&gcm_test_case_256_5); 7690 } 7691 7692 static int 7693 test_AES_GCM_auth_encryption_test_case_256_6(void) 7694 { 7695 return test_authenticated_encryption(&gcm_test_case_256_6); 7696 } 7697 7698 static int 7699 test_AES_GCM_auth_encryption_test_case_256_7(void) 7700 { 7701 return test_authenticated_encryption(&gcm_test_case_256_7); 7702 } 7703 7704 static int 7705 test_AES_GCM_auth_encryption_test_case_aad_1(void) 7706 { 7707 return test_authenticated_encryption(&gcm_test_case_aad_1); 7708 } 7709 7710 static int 7711 test_AES_GCM_auth_encryption_test_case_aad_2(void) 7712 { 7713 return test_authenticated_encryption(&gcm_test_case_aad_2); 7714 } 7715 7716 static int 7717 test_AES_GCM_auth_encryption_fail_iv_corrupt(void) 7718 { 7719 struct aead_test_data tdata; 7720 int res; 7721 7722 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7723 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7724 tdata.iv.data[0] += 1; 7725 res = test_authenticated_encryption(&tdata); 7726 if (res == -ENOTSUP) 7727 return res; 7728 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7729 return TEST_SUCCESS; 7730 } 7731 7732 static int 7733 test_AES_GCM_auth_encryption_fail_in_data_corrupt(void) 7734 { 7735 struct aead_test_data tdata; 7736 int res; 7737 7738 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7739 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7740 tdata.plaintext.data[0] += 1; 7741 res = test_authenticated_encryption(&tdata); 7742 if (res == -ENOTSUP) 7743 return res; 7744 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7745 return TEST_SUCCESS; 7746 } 7747 7748 static int 7749 test_AES_GCM_auth_encryption_fail_out_data_corrupt(void) 7750 { 7751 struct aead_test_data tdata; 7752 int res; 7753 7754 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7755 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7756 tdata.ciphertext.data[0] += 1; 7757 res = test_authenticated_encryption(&tdata); 7758 if (res == -ENOTSUP) 7759 return res; 7760 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7761 return TEST_SUCCESS; 7762 } 7763 7764 static int 7765 test_AES_GCM_auth_encryption_fail_aad_len_corrupt(void) 7766 { 7767 struct aead_test_data tdata; 7768 int res; 7769 7770 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7771 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7772 tdata.aad.len += 1; 7773 res = test_authenticated_encryption(&tdata); 7774 if (res == -ENOTSUP) 7775 return res; 7776 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7777 return TEST_SUCCESS; 7778 } 7779 7780 static int 7781 test_AES_GCM_auth_encryption_fail_aad_corrupt(void) 7782 { 7783 struct aead_test_data tdata; 7784 uint8_t aad[gcm_test_case_7.aad.len]; 7785 int res; 7786 7787 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7788 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7789 memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len); 7790 aad[0] += 1; 7791 tdata.aad.data = aad; 7792 res = test_authenticated_encryption(&tdata); 7793 if (res == -ENOTSUP) 7794 return res; 7795 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7796 return TEST_SUCCESS; 7797 } 7798 7799 static int 7800 test_AES_GCM_auth_encryption_fail_tag_corrupt(void) 7801 { 7802 struct aead_test_data tdata; 7803 int res; 7804 7805 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 7806 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 7807 tdata.auth_tag.data[0] += 1; 7808 res = test_authenticated_encryption(&tdata); 7809 if (res == -ENOTSUP) 7810 return res; 7811 TEST_ASSERT_EQUAL(res, TEST_FAILED, "encryption not failed"); 7812 return TEST_SUCCESS; 7813 } 7814 7815 static int 7816 test_authenticated_decryption(const struct aead_test_data *tdata) 7817 { 7818 struct crypto_testsuite_params *ts_params = &testsuite_params; 7819 struct crypto_unittest_params *ut_params = &unittest_params; 7820 7821 int retval; 7822 uint8_t *plaintext; 7823 uint32_t i; 7824 7825 /* Verify the capabilities */ 7826 struct rte_cryptodev_sym_capability_idx cap_idx; 7827 const struct rte_cryptodev_symmetric_capability *capability; 7828 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 7829 cap_idx.algo.aead = tdata->algo; 7830 capability = rte_cryptodev_sym_capability_get( 7831 ts_params->valid_devs[0], &cap_idx); 7832 if (capability == NULL) 7833 return -ENOTSUP; 7834 if (rte_cryptodev_sym_capability_check_aead( 7835 capability, tdata->key.len, tdata->auth_tag.len, 7836 tdata->aad.len, tdata->iv.len)) 7837 return -ENOTSUP; 7838 7839 /* Create AEAD session */ 7840 retval = create_aead_session(ts_params->valid_devs[0], 7841 tdata->algo, 7842 RTE_CRYPTO_AEAD_OP_DECRYPT, 7843 tdata->key.data, tdata->key.len, 7844 tdata->aad.len, tdata->auth_tag.len, 7845 tdata->iv.len); 7846 if (retval < 0) 7847 return retval; 7848 7849 /* alloc mbuf and set payload */ 7850 if (tdata->aad.len > MBUF_SIZE) { 7851 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool); 7852 /* Populate full size of add data */ 7853 for (i = 32; i < MAX_AAD_LENGTH; i += 32) 7854 memcpy(&tdata->aad.data[i], &tdata->aad.data[0], 32); 7855 } else 7856 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 7857 7858 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 7859 rte_pktmbuf_tailroom(ut_params->ibuf)); 7860 7861 /* Create AEAD operation */ 7862 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata); 7863 if (retval < 0) 7864 return retval; 7865 7866 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 7867 7868 ut_params->op->sym->m_src = ut_params->ibuf; 7869 7870 /* Process crypto operation */ 7871 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 7872 ut_params->op), "failed to process sym crypto op"); 7873 7874 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 7875 "crypto op processing failed"); 7876 7877 if (ut_params->op->sym->m_dst) 7878 plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst, 7879 uint8_t *); 7880 else 7881 plaintext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src, 7882 uint8_t *, 7883 ut_params->op->sym->cipher.data.offset); 7884 7885 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len); 7886 7887 /* Validate obuf */ 7888 TEST_ASSERT_BUFFERS_ARE_EQUAL( 7889 plaintext, 7890 tdata->plaintext.data, 7891 tdata->plaintext.len, 7892 "Plaintext data not as expected"); 7893 7894 TEST_ASSERT_EQUAL(ut_params->op->status, 7895 RTE_CRYPTO_OP_STATUS_SUCCESS, 7896 "Authentication failed"); 7897 7898 return 0; 7899 } 7900 7901 static int 7902 test_AES_GCM_authenticated_decryption_test_case_1(void) 7903 { 7904 return test_authenticated_decryption(&gcm_test_case_1); 7905 } 7906 7907 static int 7908 test_AES_GCM_authenticated_decryption_test_case_2(void) 7909 { 7910 return test_authenticated_decryption(&gcm_test_case_2); 7911 } 7912 7913 static int 7914 test_AES_GCM_authenticated_decryption_test_case_3(void) 7915 { 7916 return test_authenticated_decryption(&gcm_test_case_3); 7917 } 7918 7919 static int 7920 test_AES_GCM_authenticated_decryption_test_case_4(void) 7921 { 7922 return test_authenticated_decryption(&gcm_test_case_4); 7923 } 7924 7925 static int 7926 test_AES_GCM_authenticated_decryption_test_case_5(void) 7927 { 7928 return test_authenticated_decryption(&gcm_test_case_5); 7929 } 7930 7931 static int 7932 test_AES_GCM_authenticated_decryption_test_case_6(void) 7933 { 7934 return test_authenticated_decryption(&gcm_test_case_6); 7935 } 7936 7937 static int 7938 test_AES_GCM_authenticated_decryption_test_case_7(void) 7939 { 7940 return test_authenticated_decryption(&gcm_test_case_7); 7941 } 7942 7943 static int 7944 test_AES_GCM_authenticated_decryption_test_case_8(void) 7945 { 7946 return test_authenticated_decryption(&gcm_test_case_8); 7947 } 7948 7949 static int 7950 test_AES_GCM_auth_decryption_test_case_192_1(void) 7951 { 7952 return test_authenticated_decryption(&gcm_test_case_192_1); 7953 } 7954 7955 static int 7956 test_AES_GCM_auth_decryption_test_case_192_2(void) 7957 { 7958 return test_authenticated_decryption(&gcm_test_case_192_2); 7959 } 7960 7961 static int 7962 test_AES_GCM_auth_decryption_test_case_192_3(void) 7963 { 7964 return test_authenticated_decryption(&gcm_test_case_192_3); 7965 } 7966 7967 static int 7968 test_AES_GCM_auth_decryption_test_case_192_4(void) 7969 { 7970 return test_authenticated_decryption(&gcm_test_case_192_4); 7971 } 7972 7973 static int 7974 test_AES_GCM_auth_decryption_test_case_192_5(void) 7975 { 7976 return test_authenticated_decryption(&gcm_test_case_192_5); 7977 } 7978 7979 static int 7980 test_AES_GCM_auth_decryption_test_case_192_6(void) 7981 { 7982 return test_authenticated_decryption(&gcm_test_case_192_6); 7983 } 7984 7985 static int 7986 test_AES_GCM_auth_decryption_test_case_192_7(void) 7987 { 7988 return test_authenticated_decryption(&gcm_test_case_192_7); 7989 } 7990 7991 static int 7992 test_AES_GCM_auth_decryption_test_case_256_1(void) 7993 { 7994 return test_authenticated_decryption(&gcm_test_case_256_1); 7995 } 7996 7997 static int 7998 test_AES_GCM_auth_decryption_test_case_256_2(void) 7999 { 8000 return test_authenticated_decryption(&gcm_test_case_256_2); 8001 } 8002 8003 static int 8004 test_AES_GCM_auth_decryption_test_case_256_3(void) 8005 { 8006 return test_authenticated_decryption(&gcm_test_case_256_3); 8007 } 8008 8009 static int 8010 test_AES_GCM_auth_decryption_test_case_256_4(void) 8011 { 8012 return test_authenticated_decryption(&gcm_test_case_256_4); 8013 } 8014 8015 static int 8016 test_AES_GCM_auth_decryption_test_case_256_5(void) 8017 { 8018 return test_authenticated_decryption(&gcm_test_case_256_5); 8019 } 8020 8021 static int 8022 test_AES_GCM_auth_decryption_test_case_256_6(void) 8023 { 8024 return test_authenticated_decryption(&gcm_test_case_256_6); 8025 } 8026 8027 static int 8028 test_AES_GCM_auth_decryption_test_case_256_7(void) 8029 { 8030 return test_authenticated_decryption(&gcm_test_case_256_7); 8031 } 8032 8033 static int 8034 test_AES_GCM_auth_decryption_test_case_aad_1(void) 8035 { 8036 return test_authenticated_decryption(&gcm_test_case_aad_1); 8037 } 8038 8039 static int 8040 test_AES_GCM_auth_decryption_test_case_aad_2(void) 8041 { 8042 return test_authenticated_decryption(&gcm_test_case_aad_2); 8043 } 8044 8045 static int 8046 test_AES_GCM_auth_decryption_fail_iv_corrupt(void) 8047 { 8048 struct aead_test_data tdata; 8049 int res; 8050 8051 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8052 tdata.iv.data[0] += 1; 8053 res = test_authenticated_decryption(&tdata); 8054 if (res == -ENOTSUP) 8055 return res; 8056 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed"); 8057 return TEST_SUCCESS; 8058 } 8059 8060 static int 8061 test_AES_GCM_auth_decryption_fail_in_data_corrupt(void) 8062 { 8063 struct aead_test_data tdata; 8064 int res; 8065 8066 RTE_LOG(INFO, USER1, "This is a negative test, errors are expected\n"); 8067 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8068 tdata.plaintext.data[0] += 1; 8069 res = test_authenticated_decryption(&tdata); 8070 if (res == -ENOTSUP) 8071 return res; 8072 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed"); 8073 return TEST_SUCCESS; 8074 } 8075 8076 static int 8077 test_AES_GCM_auth_decryption_fail_out_data_corrupt(void) 8078 { 8079 struct aead_test_data tdata; 8080 int res; 8081 8082 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8083 tdata.ciphertext.data[0] += 1; 8084 res = test_authenticated_decryption(&tdata); 8085 if (res == -ENOTSUP) 8086 return res; 8087 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed"); 8088 return TEST_SUCCESS; 8089 } 8090 8091 static int 8092 test_AES_GCM_auth_decryption_fail_aad_len_corrupt(void) 8093 { 8094 struct aead_test_data tdata; 8095 int res; 8096 8097 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8098 tdata.aad.len += 1; 8099 res = test_authenticated_decryption(&tdata); 8100 if (res == -ENOTSUP) 8101 return res; 8102 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed"); 8103 return TEST_SUCCESS; 8104 } 8105 8106 static int 8107 test_AES_GCM_auth_decryption_fail_aad_corrupt(void) 8108 { 8109 struct aead_test_data tdata; 8110 uint8_t aad[gcm_test_case_7.aad.len]; 8111 int res; 8112 8113 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8114 memcpy(aad, gcm_test_case_7.aad.data, gcm_test_case_7.aad.len); 8115 aad[0] += 1; 8116 tdata.aad.data = aad; 8117 res = test_authenticated_decryption(&tdata); 8118 if (res == -ENOTSUP) 8119 return res; 8120 TEST_ASSERT_EQUAL(res, TEST_FAILED, "decryption not failed"); 8121 return TEST_SUCCESS; 8122 } 8123 8124 static int 8125 test_AES_GCM_auth_decryption_fail_tag_corrupt(void) 8126 { 8127 struct aead_test_data tdata; 8128 int res; 8129 8130 memcpy(&tdata, &gcm_test_case_7, sizeof(struct aead_test_data)); 8131 tdata.auth_tag.data[0] += 1; 8132 res = test_authenticated_decryption(&tdata); 8133 if (res == -ENOTSUP) 8134 return res; 8135 TEST_ASSERT_EQUAL(res, TEST_FAILED, "authentication not failed"); 8136 return TEST_SUCCESS; 8137 } 8138 8139 static int 8140 test_authenticated_encryption_oop(const struct aead_test_data *tdata) 8141 { 8142 struct crypto_testsuite_params *ts_params = &testsuite_params; 8143 struct crypto_unittest_params *ut_params = &unittest_params; 8144 8145 int retval; 8146 uint8_t *ciphertext, *auth_tag; 8147 uint16_t plaintext_pad_len; 8148 8149 /* Verify the capabilities */ 8150 struct rte_cryptodev_sym_capability_idx cap_idx; 8151 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 8152 cap_idx.algo.aead = tdata->algo; 8153 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8154 &cap_idx) == NULL) 8155 return -ENOTSUP; 8156 8157 /* Create AEAD session */ 8158 retval = create_aead_session(ts_params->valid_devs[0], 8159 tdata->algo, 8160 RTE_CRYPTO_AEAD_OP_ENCRYPT, 8161 tdata->key.data, tdata->key.len, 8162 tdata->aad.len, tdata->auth_tag.len, 8163 tdata->iv.len); 8164 if (retval < 0) 8165 return retval; 8166 8167 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8168 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8169 8170 /* clear mbuf payload */ 8171 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 8172 rte_pktmbuf_tailroom(ut_params->ibuf)); 8173 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 8174 rte_pktmbuf_tailroom(ut_params->obuf)); 8175 8176 /* Create AEAD operation */ 8177 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata); 8178 if (retval < 0) 8179 return retval; 8180 8181 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 8182 8183 ut_params->op->sym->m_src = ut_params->ibuf; 8184 ut_params->op->sym->m_dst = ut_params->obuf; 8185 8186 /* Process crypto operation */ 8187 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8188 ut_params->op), "failed to process sym crypto op"); 8189 8190 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8191 "crypto op processing failed"); 8192 8193 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 8194 8195 ciphertext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *, 8196 ut_params->op->sym->cipher.data.offset); 8197 auth_tag = ciphertext + plaintext_pad_len; 8198 8199 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len); 8200 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len); 8201 8202 /* Validate obuf */ 8203 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8204 ciphertext, 8205 tdata->ciphertext.data, 8206 tdata->ciphertext.len, 8207 "Ciphertext data not as expected"); 8208 8209 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8210 auth_tag, 8211 tdata->auth_tag.data, 8212 tdata->auth_tag.len, 8213 "Generated auth tag not as expected"); 8214 8215 return 0; 8216 8217 } 8218 8219 static int 8220 test_AES_GCM_authenticated_encryption_oop_test_case_1(void) 8221 { 8222 return test_authenticated_encryption_oop(&gcm_test_case_5); 8223 } 8224 8225 static int 8226 test_authenticated_decryption_oop(const struct aead_test_data *tdata) 8227 { 8228 struct crypto_testsuite_params *ts_params = &testsuite_params; 8229 struct crypto_unittest_params *ut_params = &unittest_params; 8230 8231 int retval; 8232 uint8_t *plaintext; 8233 8234 /* Verify the capabilities */ 8235 struct rte_cryptodev_sym_capability_idx cap_idx; 8236 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 8237 cap_idx.algo.aead = tdata->algo; 8238 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8239 &cap_idx) == NULL) 8240 return -ENOTSUP; 8241 8242 /* Create AEAD session */ 8243 retval = create_aead_session(ts_params->valid_devs[0], 8244 tdata->algo, 8245 RTE_CRYPTO_AEAD_OP_DECRYPT, 8246 tdata->key.data, tdata->key.len, 8247 tdata->aad.len, tdata->auth_tag.len, 8248 tdata->iv.len); 8249 if (retval < 0) 8250 return retval; 8251 8252 /* alloc mbuf and set payload */ 8253 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8254 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8255 8256 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 8257 rte_pktmbuf_tailroom(ut_params->ibuf)); 8258 memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, 8259 rte_pktmbuf_tailroom(ut_params->obuf)); 8260 8261 /* Create AEAD operation */ 8262 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata); 8263 if (retval < 0) 8264 return retval; 8265 8266 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 8267 8268 ut_params->op->sym->m_src = ut_params->ibuf; 8269 ut_params->op->sym->m_dst = ut_params->obuf; 8270 8271 /* Process crypto operation */ 8272 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8273 ut_params->op), "failed to process sym crypto op"); 8274 8275 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8276 "crypto op processing failed"); 8277 8278 plaintext = rte_pktmbuf_mtod_offset(ut_params->obuf, uint8_t *, 8279 ut_params->op->sym->cipher.data.offset); 8280 8281 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len); 8282 8283 /* Validate obuf */ 8284 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8285 plaintext, 8286 tdata->plaintext.data, 8287 tdata->plaintext.len, 8288 "Plaintext data not as expected"); 8289 8290 TEST_ASSERT_EQUAL(ut_params->op->status, 8291 RTE_CRYPTO_OP_STATUS_SUCCESS, 8292 "Authentication failed"); 8293 return 0; 8294 } 8295 8296 static int 8297 test_AES_GCM_authenticated_decryption_oop_test_case_1(void) 8298 { 8299 return test_authenticated_decryption_oop(&gcm_test_case_5); 8300 } 8301 8302 static int 8303 test_authenticated_encryption_sessionless( 8304 const struct aead_test_data *tdata) 8305 { 8306 struct crypto_testsuite_params *ts_params = &testsuite_params; 8307 struct crypto_unittest_params *ut_params = &unittest_params; 8308 8309 int retval; 8310 uint8_t *ciphertext, *auth_tag; 8311 uint16_t plaintext_pad_len; 8312 uint8_t key[tdata->key.len + 1]; 8313 8314 /* This test is for AESNI MB and AESNI GCM PMDs only */ 8315 if ((gbl_driver_id != rte_cryptodev_driver_id_get( 8316 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) && 8317 (gbl_driver_id != rte_cryptodev_driver_id_get( 8318 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)))) 8319 return -ENOTSUP; 8320 8321 /* Verify the capabilities */ 8322 struct rte_cryptodev_sym_capability_idx cap_idx; 8323 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 8324 cap_idx.algo.aead = tdata->algo; 8325 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8326 &cap_idx) == NULL) 8327 return -ENOTSUP; 8328 8329 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8330 8331 /* clear mbuf payload */ 8332 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 8333 rte_pktmbuf_tailroom(ut_params->ibuf)); 8334 8335 /* Create AEAD operation */ 8336 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_ENCRYPT, tdata); 8337 if (retval < 0) 8338 return retval; 8339 8340 /* Create GCM xform */ 8341 memcpy(key, tdata->key.data, tdata->key.len); 8342 retval = create_aead_xform(ut_params->op, 8343 tdata->algo, 8344 RTE_CRYPTO_AEAD_OP_ENCRYPT, 8345 key, tdata->key.len, 8346 tdata->aad.len, tdata->auth_tag.len, 8347 tdata->iv.len); 8348 if (retval < 0) 8349 return retval; 8350 8351 ut_params->op->sym->m_src = ut_params->ibuf; 8352 8353 TEST_ASSERT_EQUAL(ut_params->op->sess_type, 8354 RTE_CRYPTO_OP_SESSIONLESS, 8355 "crypto op session type not sessionless"); 8356 8357 /* Process crypto operation */ 8358 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8359 ut_params->op), "failed to process sym crypto op"); 8360 8361 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process"); 8362 8363 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8364 "crypto op status not success"); 8365 8366 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 8367 8368 ciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 8369 ut_params->op->sym->cipher.data.offset); 8370 auth_tag = ciphertext + plaintext_pad_len; 8371 8372 debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len); 8373 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len); 8374 8375 /* Validate obuf */ 8376 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8377 ciphertext, 8378 tdata->ciphertext.data, 8379 tdata->ciphertext.len, 8380 "Ciphertext data not as expected"); 8381 8382 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8383 auth_tag, 8384 tdata->auth_tag.data, 8385 tdata->auth_tag.len, 8386 "Generated auth tag not as expected"); 8387 8388 return 0; 8389 8390 } 8391 8392 static int 8393 test_AES_GCM_authenticated_encryption_sessionless_test_case_1(void) 8394 { 8395 return test_authenticated_encryption_sessionless( 8396 &gcm_test_case_5); 8397 } 8398 8399 static int 8400 test_authenticated_decryption_sessionless( 8401 const struct aead_test_data *tdata) 8402 { 8403 struct crypto_testsuite_params *ts_params = &testsuite_params; 8404 struct crypto_unittest_params *ut_params = &unittest_params; 8405 8406 int retval; 8407 uint8_t *plaintext; 8408 uint8_t key[tdata->key.len + 1]; 8409 8410 /* This test is for AESNI MB and AESNI GCM PMDs only */ 8411 if ((gbl_driver_id != rte_cryptodev_driver_id_get( 8412 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) && 8413 (gbl_driver_id != rte_cryptodev_driver_id_get( 8414 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)))) 8415 return -ENOTSUP; 8416 8417 /* Verify the capabilities */ 8418 struct rte_cryptodev_sym_capability_idx cap_idx; 8419 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 8420 cap_idx.algo.aead = tdata->algo; 8421 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8422 &cap_idx) == NULL) 8423 return -ENOTSUP; 8424 8425 /* alloc mbuf and set payload */ 8426 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8427 8428 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 8429 rte_pktmbuf_tailroom(ut_params->ibuf)); 8430 8431 /* Create AEAD operation */ 8432 retval = create_aead_operation(RTE_CRYPTO_AEAD_OP_DECRYPT, tdata); 8433 if (retval < 0) 8434 return retval; 8435 8436 /* Create AEAD xform */ 8437 memcpy(key, tdata->key.data, tdata->key.len); 8438 retval = create_aead_xform(ut_params->op, 8439 tdata->algo, 8440 RTE_CRYPTO_AEAD_OP_DECRYPT, 8441 key, tdata->key.len, 8442 tdata->aad.len, tdata->auth_tag.len, 8443 tdata->iv.len); 8444 if (retval < 0) 8445 return retval; 8446 8447 ut_params->op->sym->m_src = ut_params->ibuf; 8448 8449 TEST_ASSERT_EQUAL(ut_params->op->sess_type, 8450 RTE_CRYPTO_OP_SESSIONLESS, 8451 "crypto op session type not sessionless"); 8452 8453 /* Process crypto operation */ 8454 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8455 ut_params->op), "failed to process sym crypto op"); 8456 8457 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process"); 8458 8459 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8460 "crypto op status not success"); 8461 8462 plaintext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 8463 ut_params->op->sym->cipher.data.offset); 8464 8465 debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len); 8466 8467 /* Validate obuf */ 8468 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8469 plaintext, 8470 tdata->plaintext.data, 8471 tdata->plaintext.len, 8472 "Plaintext data not as expected"); 8473 8474 TEST_ASSERT_EQUAL(ut_params->op->status, 8475 RTE_CRYPTO_OP_STATUS_SUCCESS, 8476 "Authentication failed"); 8477 return 0; 8478 } 8479 8480 static int 8481 test_AES_GCM_authenticated_decryption_sessionless_test_case_1(void) 8482 { 8483 return test_authenticated_decryption_sessionless( 8484 &gcm_test_case_5); 8485 } 8486 8487 static int 8488 test_AES_CCM_authenticated_encryption_test_case_128_1(void) 8489 { 8490 return test_authenticated_encryption(&ccm_test_case_128_1); 8491 } 8492 8493 static int 8494 test_AES_CCM_authenticated_encryption_test_case_128_2(void) 8495 { 8496 return test_authenticated_encryption(&ccm_test_case_128_2); 8497 } 8498 8499 static int 8500 test_AES_CCM_authenticated_encryption_test_case_128_3(void) 8501 { 8502 return test_authenticated_encryption(&ccm_test_case_128_3); 8503 } 8504 8505 static int 8506 test_AES_CCM_authenticated_decryption_test_case_128_1(void) 8507 { 8508 return test_authenticated_decryption(&ccm_test_case_128_1); 8509 } 8510 8511 static int 8512 test_AES_CCM_authenticated_decryption_test_case_128_2(void) 8513 { 8514 return test_authenticated_decryption(&ccm_test_case_128_2); 8515 } 8516 8517 static int 8518 test_AES_CCM_authenticated_decryption_test_case_128_3(void) 8519 { 8520 return test_authenticated_decryption(&ccm_test_case_128_3); 8521 } 8522 8523 static int 8524 test_AES_CCM_authenticated_encryption_test_case_192_1(void) 8525 { 8526 return test_authenticated_encryption(&ccm_test_case_192_1); 8527 } 8528 8529 static int 8530 test_AES_CCM_authenticated_encryption_test_case_192_2(void) 8531 { 8532 return test_authenticated_encryption(&ccm_test_case_192_2); 8533 } 8534 8535 static int 8536 test_AES_CCM_authenticated_encryption_test_case_192_3(void) 8537 { 8538 return test_authenticated_encryption(&ccm_test_case_192_3); 8539 } 8540 8541 static int 8542 test_AES_CCM_authenticated_decryption_test_case_192_1(void) 8543 { 8544 return test_authenticated_decryption(&ccm_test_case_192_1); 8545 } 8546 8547 static int 8548 test_AES_CCM_authenticated_decryption_test_case_192_2(void) 8549 { 8550 return test_authenticated_decryption(&ccm_test_case_192_2); 8551 } 8552 8553 static int 8554 test_AES_CCM_authenticated_decryption_test_case_192_3(void) 8555 { 8556 return test_authenticated_decryption(&ccm_test_case_192_3); 8557 } 8558 8559 static int 8560 test_AES_CCM_authenticated_encryption_test_case_256_1(void) 8561 { 8562 return test_authenticated_encryption(&ccm_test_case_256_1); 8563 } 8564 8565 static int 8566 test_AES_CCM_authenticated_encryption_test_case_256_2(void) 8567 { 8568 return test_authenticated_encryption(&ccm_test_case_256_2); 8569 } 8570 8571 static int 8572 test_AES_CCM_authenticated_encryption_test_case_256_3(void) 8573 { 8574 return test_authenticated_encryption(&ccm_test_case_256_3); 8575 } 8576 8577 static int 8578 test_AES_CCM_authenticated_decryption_test_case_256_1(void) 8579 { 8580 return test_authenticated_decryption(&ccm_test_case_256_1); 8581 } 8582 8583 static int 8584 test_AES_CCM_authenticated_decryption_test_case_256_2(void) 8585 { 8586 return test_authenticated_decryption(&ccm_test_case_256_2); 8587 } 8588 8589 static int 8590 test_AES_CCM_authenticated_decryption_test_case_256_3(void) 8591 { 8592 return test_authenticated_decryption(&ccm_test_case_256_3); 8593 } 8594 8595 static int 8596 test_stats(void) 8597 { 8598 struct crypto_testsuite_params *ts_params = &testsuite_params; 8599 struct rte_cryptodev_stats stats; 8600 struct rte_cryptodev *dev; 8601 cryptodev_stats_get_t temp_pfn; 8602 8603 /* Verify the capabilities */ 8604 struct rte_cryptodev_sym_capability_idx cap_idx; 8605 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 8606 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC; 8607 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8608 &cap_idx) == NULL) 8609 return -ENOTSUP; 8610 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 8611 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC; 8612 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8613 &cap_idx) == NULL) 8614 return -ENOTSUP; 8615 8616 rte_cryptodev_stats_reset(ts_params->valid_devs[0]); 8617 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600, 8618 &stats) == -ENODEV), 8619 "rte_cryptodev_stats_get invalid dev failed"); 8620 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0), 8621 "rte_cryptodev_stats_get invalid Param failed"); 8622 dev = &rte_cryptodevs[ts_params->valid_devs[0]]; 8623 temp_pfn = dev->dev_ops->stats_get; 8624 dev->dev_ops->stats_get = (cryptodev_stats_get_t)0; 8625 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats) 8626 == -ENOTSUP), 8627 "rte_cryptodev_stats_get invalid Param failed"); 8628 dev->dev_ops->stats_get = temp_pfn; 8629 8630 /* Test expected values */ 8631 ut_setup(); 8632 test_AES_CBC_HMAC_SHA1_encrypt_digest(); 8633 ut_teardown(); 8634 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], 8635 &stats), 8636 "rte_cryptodev_stats_get failed"); 8637 TEST_ASSERT((stats.enqueued_count == 1), 8638 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8639 TEST_ASSERT((stats.dequeued_count == 1), 8640 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8641 TEST_ASSERT((stats.enqueue_err_count == 0), 8642 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8643 TEST_ASSERT((stats.dequeue_err_count == 0), 8644 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8645 8646 /* invalid device but should ignore and not reset device stats*/ 8647 rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300); 8648 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], 8649 &stats), 8650 "rte_cryptodev_stats_get failed"); 8651 TEST_ASSERT((stats.enqueued_count == 1), 8652 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8653 8654 /* check that a valid reset clears stats */ 8655 rte_cryptodev_stats_reset(ts_params->valid_devs[0]); 8656 TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], 8657 &stats), 8658 "rte_cryptodev_stats_get failed"); 8659 TEST_ASSERT((stats.enqueued_count == 0), 8660 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8661 TEST_ASSERT((stats.dequeued_count == 0), 8662 "rte_cryptodev_stats_get returned unexpected enqueued stat"); 8663 8664 return TEST_SUCCESS; 8665 } 8666 8667 static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params, 8668 struct crypto_unittest_params *ut_params, 8669 enum rte_crypto_auth_operation op, 8670 const struct HMAC_MD5_vector *test_case) 8671 { 8672 uint8_t key[64]; 8673 8674 memcpy(key, test_case->key.data, test_case->key.len); 8675 8676 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 8677 ut_params->auth_xform.next = NULL; 8678 ut_params->auth_xform.auth.op = op; 8679 8680 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC; 8681 8682 ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN; 8683 ut_params->auth_xform.auth.key.length = test_case->key.len; 8684 ut_params->auth_xform.auth.key.data = key; 8685 8686 ut_params->sess = rte_cryptodev_sym_session_create( 8687 ts_params->session_mpool); 8688 8689 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 8690 ut_params->sess, &ut_params->auth_xform, 8691 ts_params->session_priv_mpool); 8692 8693 if (ut_params->sess == NULL) 8694 return TEST_FAILED; 8695 8696 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 8697 8698 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 8699 rte_pktmbuf_tailroom(ut_params->ibuf)); 8700 8701 return 0; 8702 } 8703 8704 static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params, 8705 const struct HMAC_MD5_vector *test_case, 8706 uint8_t **plaintext) 8707 { 8708 uint16_t plaintext_pad_len; 8709 8710 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 8711 8712 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len, 8713 16); 8714 8715 *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 8716 plaintext_pad_len); 8717 memcpy(*plaintext, test_case->plaintext.data, 8718 test_case->plaintext.len); 8719 8720 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 8721 ut_params->ibuf, MD5_DIGEST_LEN); 8722 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 8723 "no room to append digest"); 8724 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 8725 ut_params->ibuf, plaintext_pad_len); 8726 8727 if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) { 8728 rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data, 8729 test_case->auth_tag.len); 8730 } 8731 8732 sym_op->auth.data.offset = 0; 8733 sym_op->auth.data.length = test_case->plaintext.len; 8734 8735 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 8736 ut_params->op->sym->m_src = ut_params->ibuf; 8737 8738 return 0; 8739 } 8740 8741 static int 8742 test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case) 8743 { 8744 uint16_t plaintext_pad_len; 8745 uint8_t *plaintext, *auth_tag; 8746 8747 struct crypto_testsuite_params *ts_params = &testsuite_params; 8748 struct crypto_unittest_params *ut_params = &unittest_params; 8749 8750 /* Verify the capabilities */ 8751 struct rte_cryptodev_sym_capability_idx cap_idx; 8752 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 8753 cap_idx.algo.auth = RTE_CRYPTO_AUTH_MD5_HMAC; 8754 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8755 &cap_idx) == NULL) 8756 return -ENOTSUP; 8757 8758 if (MD5_HMAC_create_session(ts_params, ut_params, 8759 RTE_CRYPTO_AUTH_OP_GENERATE, test_case)) 8760 return TEST_FAILED; 8761 8762 /* Generate Crypto op data structure */ 8763 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 8764 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 8765 TEST_ASSERT_NOT_NULL(ut_params->op, 8766 "Failed to allocate symmetric crypto operation struct"); 8767 8768 plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len, 8769 16); 8770 8771 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext)) 8772 return TEST_FAILED; 8773 8774 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8775 ut_params->op), "failed to process sym crypto op"); 8776 8777 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8778 "crypto op processing failed"); 8779 8780 if (ut_params->op->sym->m_dst) { 8781 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst, 8782 uint8_t *, plaintext_pad_len); 8783 } else { 8784 auth_tag = plaintext + plaintext_pad_len; 8785 } 8786 8787 TEST_ASSERT_BUFFERS_ARE_EQUAL( 8788 auth_tag, 8789 test_case->auth_tag.data, 8790 test_case->auth_tag.len, 8791 "HMAC_MD5 generated tag not as expected"); 8792 8793 return TEST_SUCCESS; 8794 } 8795 8796 static int 8797 test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case) 8798 { 8799 uint8_t *plaintext; 8800 8801 struct crypto_testsuite_params *ts_params = &testsuite_params; 8802 struct crypto_unittest_params *ut_params = &unittest_params; 8803 8804 /* Verify the capabilities */ 8805 struct rte_cryptodev_sym_capability_idx cap_idx; 8806 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 8807 cap_idx.algo.auth = RTE_CRYPTO_AUTH_MD5_HMAC; 8808 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8809 &cap_idx) == NULL) 8810 return -ENOTSUP; 8811 8812 if (MD5_HMAC_create_session(ts_params, ut_params, 8813 RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) { 8814 return TEST_FAILED; 8815 } 8816 8817 /* Generate Crypto op data structure */ 8818 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 8819 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 8820 TEST_ASSERT_NOT_NULL(ut_params->op, 8821 "Failed to allocate symmetric crypto operation struct"); 8822 8823 if (MD5_HMAC_create_op(ut_params, test_case, &plaintext)) 8824 return TEST_FAILED; 8825 8826 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 8827 ut_params->op), "failed to process sym crypto op"); 8828 8829 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 8830 "HMAC_MD5 crypto op processing failed"); 8831 8832 return TEST_SUCCESS; 8833 } 8834 8835 static int 8836 test_MD5_HMAC_generate_case_1(void) 8837 { 8838 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1); 8839 } 8840 8841 static int 8842 test_MD5_HMAC_verify_case_1(void) 8843 { 8844 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1); 8845 } 8846 8847 static int 8848 test_MD5_HMAC_generate_case_2(void) 8849 { 8850 return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2); 8851 } 8852 8853 static int 8854 test_MD5_HMAC_verify_case_2(void) 8855 { 8856 return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2); 8857 } 8858 8859 static int 8860 test_multi_session(void) 8861 { 8862 struct crypto_testsuite_params *ts_params = &testsuite_params; 8863 struct crypto_unittest_params *ut_params = &unittest_params; 8864 8865 struct rte_cryptodev_info dev_info; 8866 struct rte_cryptodev_sym_session **sessions; 8867 8868 uint16_t i; 8869 8870 /* Verify the capabilities */ 8871 struct rte_cryptodev_sym_capability_idx cap_idx; 8872 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 8873 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA512_HMAC; 8874 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8875 &cap_idx) == NULL) 8876 return -ENOTSUP; 8877 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 8878 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC; 8879 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 8880 &cap_idx) == NULL) 8881 return -ENOTSUP; 8882 8883 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params, 8884 aes_cbc_key, hmac_sha512_key); 8885 8886 8887 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 8888 8889 sessions = rte_malloc(NULL, 8890 (sizeof(struct rte_cryptodev_sym_session *) * 8891 MAX_NB_SESSIONS) + 1, 0); 8892 8893 /* Create multiple crypto sessions*/ 8894 for (i = 0; i < MAX_NB_SESSIONS; i++) { 8895 8896 sessions[i] = rte_cryptodev_sym_session_create( 8897 ts_params->session_mpool); 8898 8899 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 8900 sessions[i], &ut_params->auth_xform, 8901 ts_params->session_priv_mpool); 8902 TEST_ASSERT_NOT_NULL(sessions[i], 8903 "Session creation failed at session number %u", 8904 i); 8905 8906 /* Attempt to send a request on each session */ 8907 TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform( 8908 sessions[i], 8909 ut_params, 8910 ts_params, 8911 catch_22_quote_2_512_bytes_AES_CBC_ciphertext, 8912 catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest, 8913 aes_cbc_iv), 8914 "Failed to perform decrypt on request number %u.", i); 8915 /* free crypto operation structure */ 8916 if (ut_params->op) 8917 rte_crypto_op_free(ut_params->op); 8918 8919 /* 8920 * free mbuf - both obuf and ibuf are usually the same, 8921 * so check if they point at the same address is necessary, 8922 * to avoid freeing the mbuf twice. 8923 */ 8924 if (ut_params->obuf) { 8925 rte_pktmbuf_free(ut_params->obuf); 8926 if (ut_params->ibuf == ut_params->obuf) 8927 ut_params->ibuf = 0; 8928 ut_params->obuf = 0; 8929 } 8930 if (ut_params->ibuf) { 8931 rte_pktmbuf_free(ut_params->ibuf); 8932 ut_params->ibuf = 0; 8933 } 8934 } 8935 8936 /* Next session create should fail */ 8937 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 8938 sessions[i], &ut_params->auth_xform, 8939 ts_params->session_priv_mpool); 8940 TEST_ASSERT_NULL(sessions[i], 8941 "Session creation succeeded unexpectedly!"); 8942 8943 for (i = 0; i < MAX_NB_SESSIONS; i++) { 8944 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0], 8945 sessions[i]); 8946 rte_cryptodev_sym_session_free(sessions[i]); 8947 } 8948 8949 rte_free(sessions); 8950 8951 return TEST_SUCCESS; 8952 } 8953 8954 struct multi_session_params { 8955 struct crypto_unittest_params ut_params; 8956 uint8_t *cipher_key; 8957 uint8_t *hmac_key; 8958 const uint8_t *cipher; 8959 const uint8_t *digest; 8960 uint8_t *iv; 8961 }; 8962 8963 #define MB_SESSION_NUMBER 3 8964 8965 static int 8966 test_multi_session_random_usage(void) 8967 { 8968 struct crypto_testsuite_params *ts_params = &testsuite_params; 8969 struct rte_cryptodev_info dev_info; 8970 struct rte_cryptodev_sym_session **sessions; 8971 uint32_t i, j; 8972 struct multi_session_params ut_paramz[] = { 8973 8974 { 8975 .cipher_key = ms_aes_cbc_key0, 8976 .hmac_key = ms_hmac_key0, 8977 .cipher = ms_aes_cbc_cipher0, 8978 .digest = ms_hmac_digest0, 8979 .iv = ms_aes_cbc_iv0 8980 }, 8981 { 8982 .cipher_key = ms_aes_cbc_key1, 8983 .hmac_key = ms_hmac_key1, 8984 .cipher = ms_aes_cbc_cipher1, 8985 .digest = ms_hmac_digest1, 8986 .iv = ms_aes_cbc_iv1 8987 }, 8988 { 8989 .cipher_key = ms_aes_cbc_key2, 8990 .hmac_key = ms_hmac_key2, 8991 .cipher = ms_aes_cbc_cipher2, 8992 .digest = ms_hmac_digest2, 8993 .iv = ms_aes_cbc_iv2 8994 }, 8995 8996 }; 8997 8998 /* Verify the capabilities */ 8999 struct rte_cryptodev_sym_capability_idx cap_idx; 9000 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9001 cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA512_HMAC; 9002 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9003 &cap_idx) == NULL) 9004 return -ENOTSUP; 9005 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9006 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC; 9007 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9008 &cap_idx) == NULL) 9009 return -ENOTSUP; 9010 9011 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 9012 9013 sessions = rte_malloc(NULL, 9014 (sizeof(struct rte_cryptodev_sym_session *) 9015 * MAX_NB_SESSIONS) + 1, 0); 9016 9017 for (i = 0; i < MB_SESSION_NUMBER; i++) { 9018 sessions[i] = rte_cryptodev_sym_session_create( 9019 ts_params->session_mpool); 9020 9021 rte_memcpy(&ut_paramz[i].ut_params, &unittest_params, 9022 sizeof(struct crypto_unittest_params)); 9023 9024 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params( 9025 &ut_paramz[i].ut_params, 9026 ut_paramz[i].cipher_key, ut_paramz[i].hmac_key); 9027 9028 /* Create multiple crypto sessions*/ 9029 rte_cryptodev_sym_session_init( 9030 ts_params->valid_devs[0], 9031 sessions[i], 9032 &ut_paramz[i].ut_params.auth_xform, 9033 ts_params->session_priv_mpool); 9034 9035 TEST_ASSERT_NOT_NULL(sessions[i], 9036 "Session creation failed at session number %u", 9037 i); 9038 9039 } 9040 9041 srand(time(NULL)); 9042 for (i = 0; i < 40000; i++) { 9043 9044 j = rand() % MB_SESSION_NUMBER; 9045 9046 TEST_ASSERT_SUCCESS( 9047 test_AES_CBC_HMAC_SHA512_decrypt_perform( 9048 sessions[j], 9049 &ut_paramz[j].ut_params, 9050 ts_params, ut_paramz[j].cipher, 9051 ut_paramz[j].digest, 9052 ut_paramz[j].iv), 9053 "Failed to perform decrypt on request number %u.", i); 9054 9055 if (ut_paramz[j].ut_params.op) 9056 rte_crypto_op_free(ut_paramz[j].ut_params.op); 9057 9058 /* 9059 * free mbuf - both obuf and ibuf are usually the same, 9060 * so check if they point at the same address is necessary, 9061 * to avoid freeing the mbuf twice. 9062 */ 9063 if (ut_paramz[j].ut_params.obuf) { 9064 rte_pktmbuf_free(ut_paramz[j].ut_params.obuf); 9065 if (ut_paramz[j].ut_params.ibuf 9066 == ut_paramz[j].ut_params.obuf) 9067 ut_paramz[j].ut_params.ibuf = 0; 9068 ut_paramz[j].ut_params.obuf = 0; 9069 } 9070 if (ut_paramz[j].ut_params.ibuf) { 9071 rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf); 9072 ut_paramz[j].ut_params.ibuf = 0; 9073 } 9074 } 9075 9076 for (i = 0; i < MB_SESSION_NUMBER; i++) { 9077 rte_cryptodev_sym_session_clear(ts_params->valid_devs[0], 9078 sessions[i]); 9079 rte_cryptodev_sym_session_free(sessions[i]); 9080 } 9081 9082 rte_free(sessions); 9083 9084 return TEST_SUCCESS; 9085 } 9086 9087 static int 9088 test_null_cipher_only_operation(void) 9089 { 9090 struct crypto_testsuite_params *ts_params = &testsuite_params; 9091 struct crypto_unittest_params *ut_params = &unittest_params; 9092 9093 /* Verify the capabilities */ 9094 struct rte_cryptodev_sym_capability_idx cap_idx; 9095 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9096 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL; 9097 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9098 &cap_idx) == NULL) 9099 return -ENOTSUP; 9100 9101 /* Generate test mbuf data and space for digest */ 9102 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 9103 catch_22_quote, QUOTE_512_BYTES, 0); 9104 9105 /* Setup Cipher Parameters */ 9106 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9107 ut_params->cipher_xform.next = NULL; 9108 9109 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 9110 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 9111 9112 ut_params->sess = rte_cryptodev_sym_session_create( 9113 ts_params->session_mpool); 9114 9115 /* Create Crypto session*/ 9116 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9117 ut_params->sess, 9118 &ut_params->cipher_xform, 9119 ts_params->session_priv_mpool); 9120 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9121 9122 /* Generate Crypto op data structure */ 9123 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 9124 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 9125 TEST_ASSERT_NOT_NULL(ut_params->op, 9126 "Failed to allocate symmetric crypto operation struct"); 9127 9128 /* Set crypto operation data parameters */ 9129 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9130 9131 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 9132 9133 /* set crypto operation source mbuf */ 9134 sym_op->m_src = ut_params->ibuf; 9135 9136 sym_op->cipher.data.offset = 0; 9137 sym_op->cipher.data.length = QUOTE_512_BYTES; 9138 9139 /* Process crypto operation */ 9140 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 9141 ut_params->op); 9142 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned"); 9143 9144 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9145 "crypto operation processing failed"); 9146 9147 /* Validate obuf */ 9148 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9149 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *), 9150 catch_22_quote, 9151 QUOTE_512_BYTES, 9152 "Ciphertext data not as expected"); 9153 9154 return TEST_SUCCESS; 9155 } 9156 uint8_t orig_data[] = {0xab, 0xab, 0xab, 0xab, 9157 0xab, 0xab, 0xab, 0xab, 9158 0xab, 0xab, 0xab, 0xab, 9159 0xab, 0xab, 0xab, 0xab}; 9160 static int 9161 test_null_auth_only_operation(void) 9162 { 9163 struct crypto_testsuite_params *ts_params = &testsuite_params; 9164 struct crypto_unittest_params *ut_params = &unittest_params; 9165 uint8_t *digest; 9166 9167 /* Verify the capabilities */ 9168 struct rte_cryptodev_sym_capability_idx cap_idx; 9169 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9170 cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL; 9171 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9172 &cap_idx) == NULL) 9173 return -ENOTSUP; 9174 9175 /* Generate test mbuf data and space for digest */ 9176 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 9177 catch_22_quote, QUOTE_512_BYTES, 0); 9178 9179 /* create a pointer for digest, but don't expect anything to be written 9180 * here in a NULL auth algo so no mbuf append done. 9181 */ 9182 digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 9183 QUOTE_512_BYTES); 9184 /* prefill the memory pointed to by digest */ 9185 memcpy(digest, orig_data, sizeof(orig_data)); 9186 9187 /* Setup HMAC Parameters */ 9188 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9189 ut_params->auth_xform.next = NULL; 9190 9191 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL; 9192 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 9193 9194 ut_params->sess = rte_cryptodev_sym_session_create( 9195 ts_params->session_mpool); 9196 9197 /* Create Crypto session*/ 9198 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9199 ut_params->sess, &ut_params->auth_xform, 9200 ts_params->session_priv_mpool); 9201 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9202 9203 /* Generate Crypto op data structure */ 9204 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 9205 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 9206 TEST_ASSERT_NOT_NULL(ut_params->op, 9207 "Failed to allocate symmetric crypto operation struct"); 9208 9209 /* Set crypto operation data parameters */ 9210 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9211 9212 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 9213 9214 sym_op->m_src = ut_params->ibuf; 9215 9216 sym_op->auth.data.offset = 0; 9217 sym_op->auth.data.length = QUOTE_512_BYTES; 9218 sym_op->auth.digest.data = digest; 9219 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf, 9220 QUOTE_512_BYTES); 9221 9222 /* Process crypto operation */ 9223 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 9224 ut_params->op); 9225 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned"); 9226 9227 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9228 "crypto operation processing failed"); 9229 /* Make sure memory pointed to by digest hasn't been overwritten */ 9230 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9231 orig_data, 9232 digest, 9233 sizeof(orig_data), 9234 "Memory at digest ptr overwritten unexpectedly"); 9235 9236 return TEST_SUCCESS; 9237 } 9238 9239 9240 static int 9241 test_null_cipher_auth_operation(void) 9242 { 9243 struct crypto_testsuite_params *ts_params = &testsuite_params; 9244 struct crypto_unittest_params *ut_params = &unittest_params; 9245 uint8_t *digest; 9246 9247 /* Verify the capabilities */ 9248 struct rte_cryptodev_sym_capability_idx cap_idx; 9249 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9250 cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL; 9251 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9252 &cap_idx) == NULL) 9253 return -ENOTSUP; 9254 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9255 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL; 9256 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9257 &cap_idx) == NULL) 9258 return -ENOTSUP; 9259 9260 /* Generate test mbuf data and space for digest */ 9261 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 9262 catch_22_quote, QUOTE_512_BYTES, 0); 9263 9264 /* create a pointer for digest, but don't expect anything to be written 9265 * here in a NULL auth algo so no mbuf append done. 9266 */ 9267 digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 9268 QUOTE_512_BYTES); 9269 /* prefill the memory pointed to by digest */ 9270 memcpy(digest, orig_data, sizeof(orig_data)); 9271 9272 /* Setup Cipher Parameters */ 9273 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9274 ut_params->cipher_xform.next = &ut_params->auth_xform; 9275 9276 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 9277 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 9278 9279 /* Setup HMAC Parameters */ 9280 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9281 ut_params->auth_xform.next = NULL; 9282 9283 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL; 9284 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 9285 9286 ut_params->sess = rte_cryptodev_sym_session_create( 9287 ts_params->session_mpool); 9288 9289 /* Create Crypto session*/ 9290 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9291 ut_params->sess, &ut_params->cipher_xform, 9292 ts_params->session_priv_mpool); 9293 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9294 9295 /* Generate Crypto op data structure */ 9296 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 9297 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 9298 TEST_ASSERT_NOT_NULL(ut_params->op, 9299 "Failed to allocate symmetric crypto operation struct"); 9300 9301 /* Set crypto operation data parameters */ 9302 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9303 9304 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 9305 9306 sym_op->m_src = ut_params->ibuf; 9307 9308 sym_op->cipher.data.offset = 0; 9309 sym_op->cipher.data.length = QUOTE_512_BYTES; 9310 9311 sym_op->auth.data.offset = 0; 9312 sym_op->auth.data.length = QUOTE_512_BYTES; 9313 sym_op->auth.digest.data = digest; 9314 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf, 9315 QUOTE_512_BYTES); 9316 9317 /* Process crypto operation */ 9318 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 9319 ut_params->op); 9320 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned"); 9321 9322 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9323 "crypto operation processing failed"); 9324 9325 /* Validate obuf */ 9326 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9327 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *), 9328 catch_22_quote, 9329 QUOTE_512_BYTES, 9330 "Ciphertext data not as expected"); 9331 /* Make sure memory pointed to by digest hasn't been overwritten */ 9332 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9333 orig_data, 9334 digest, 9335 sizeof(orig_data), 9336 "Memory at digest ptr overwritten unexpectedly"); 9337 9338 return TEST_SUCCESS; 9339 } 9340 9341 static int 9342 test_null_auth_cipher_operation(void) 9343 { 9344 struct crypto_testsuite_params *ts_params = &testsuite_params; 9345 struct crypto_unittest_params *ut_params = &unittest_params; 9346 uint8_t *digest; 9347 9348 /* Verify the capabilities */ 9349 struct rte_cryptodev_sym_capability_idx cap_idx; 9350 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9351 cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL; 9352 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9353 &cap_idx) == NULL) 9354 return -ENOTSUP; 9355 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9356 cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL; 9357 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9358 &cap_idx) == NULL) 9359 return -ENOTSUP; 9360 9361 /* Generate test mbuf data */ 9362 ut_params->ibuf = setup_test_string(ts_params->mbuf_pool, 9363 catch_22_quote, QUOTE_512_BYTES, 0); 9364 9365 /* create a pointer for digest, but don't expect anything to be written 9366 * here in a NULL auth algo so no mbuf append done. 9367 */ 9368 digest = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 9369 QUOTE_512_BYTES); 9370 /* prefill the memory pointed to by digest */ 9371 memcpy(digest, orig_data, sizeof(orig_data)); 9372 9373 /* Setup Cipher Parameters */ 9374 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9375 ut_params->cipher_xform.next = NULL; 9376 9377 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 9378 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 9379 9380 /* Setup HMAC Parameters */ 9381 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9382 ut_params->auth_xform.next = &ut_params->cipher_xform; 9383 9384 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL; 9385 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 9386 9387 ut_params->sess = rte_cryptodev_sym_session_create( 9388 ts_params->session_mpool); 9389 9390 /* Create Crypto session*/ 9391 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9392 ut_params->sess, &ut_params->cipher_xform, 9393 ts_params->session_priv_mpool); 9394 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9395 9396 /* Generate Crypto op data structure */ 9397 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 9398 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 9399 TEST_ASSERT_NOT_NULL(ut_params->op, 9400 "Failed to allocate symmetric crypto operation struct"); 9401 9402 /* Set crypto operation data parameters */ 9403 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9404 9405 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 9406 9407 sym_op->m_src = ut_params->ibuf; 9408 9409 sym_op->cipher.data.offset = 0; 9410 sym_op->cipher.data.length = QUOTE_512_BYTES; 9411 9412 sym_op->auth.data.offset = 0; 9413 sym_op->auth.data.length = QUOTE_512_BYTES; 9414 sym_op->auth.digest.data = digest; 9415 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(ut_params->ibuf, 9416 QUOTE_512_BYTES); 9417 9418 /* Process crypto operation */ 9419 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 9420 ut_params->op); 9421 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned"); 9422 9423 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9424 "crypto operation processing failed"); 9425 9426 /* Validate obuf */ 9427 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9428 rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *), 9429 catch_22_quote, 9430 QUOTE_512_BYTES, 9431 "Ciphertext data not as expected"); 9432 /* Make sure memory pointed to by digest hasn't been overwritten */ 9433 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9434 orig_data, 9435 digest, 9436 sizeof(orig_data), 9437 "Memory at digest ptr overwritten unexpectedly"); 9438 9439 return TEST_SUCCESS; 9440 } 9441 9442 9443 static int 9444 test_null_invalid_operation(void) 9445 { 9446 struct crypto_testsuite_params *ts_params = &testsuite_params; 9447 struct crypto_unittest_params *ut_params = &unittest_params; 9448 int ret; 9449 9450 /* This test is for NULL PMD only */ 9451 if (gbl_driver_id != rte_cryptodev_driver_id_get( 9452 RTE_STR(CRYPTODEV_NAME_NULL_PMD))) 9453 return -ENOTSUP; 9454 9455 /* Setup Cipher Parameters */ 9456 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9457 ut_params->cipher_xform.next = NULL; 9458 9459 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC; 9460 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 9461 9462 ut_params->sess = rte_cryptodev_sym_session_create( 9463 ts_params->session_mpool); 9464 9465 /* Create Crypto session*/ 9466 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9467 ut_params->sess, &ut_params->cipher_xform, 9468 ts_params->session_priv_mpool); 9469 TEST_ASSERT(ret < 0, 9470 "Session creation succeeded unexpectedly"); 9471 9472 9473 /* Setup HMAC Parameters */ 9474 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9475 ut_params->auth_xform.next = NULL; 9476 9477 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC; 9478 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 9479 9480 ut_params->sess = rte_cryptodev_sym_session_create( 9481 ts_params->session_mpool); 9482 9483 /* Create Crypto session*/ 9484 ret = rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9485 ut_params->sess, &ut_params->auth_xform, 9486 ts_params->session_priv_mpool); 9487 TEST_ASSERT(ret < 0, 9488 "Session creation succeeded unexpectedly"); 9489 9490 return TEST_SUCCESS; 9491 } 9492 9493 9494 #define NULL_BURST_LENGTH (32) 9495 9496 static int 9497 test_null_burst_operation(void) 9498 { 9499 struct crypto_testsuite_params *ts_params = &testsuite_params; 9500 struct crypto_unittest_params *ut_params = &unittest_params; 9501 9502 unsigned i, burst_len = NULL_BURST_LENGTH; 9503 9504 struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL }; 9505 struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL }; 9506 9507 /* This test is for NULL PMD only */ 9508 if (gbl_driver_id != rte_cryptodev_driver_id_get( 9509 RTE_STR(CRYPTODEV_NAME_NULL_PMD))) 9510 return -ENOTSUP; 9511 9512 /* Setup Cipher Parameters */ 9513 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 9514 ut_params->cipher_xform.next = &ut_params->auth_xform; 9515 9516 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 9517 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 9518 9519 /* Setup HMAC Parameters */ 9520 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9521 ut_params->auth_xform.next = NULL; 9522 9523 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL; 9524 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 9525 9526 ut_params->sess = rte_cryptodev_sym_session_create( 9527 ts_params->session_mpool); 9528 9529 /* Create Crypto session*/ 9530 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 9531 ut_params->sess, &ut_params->cipher_xform, 9532 ts_params->session_priv_mpool); 9533 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9534 9535 TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool, 9536 RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len), 9537 burst_len, "failed to generate burst of crypto ops"); 9538 9539 /* Generate an operation for each mbuf in burst */ 9540 for (i = 0; i < burst_len; i++) { 9541 struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool); 9542 9543 TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf"); 9544 9545 unsigned *data = (unsigned *)rte_pktmbuf_append(m, 9546 sizeof(unsigned)); 9547 *data = i; 9548 9549 rte_crypto_op_attach_sym_session(burst[i], ut_params->sess); 9550 9551 burst[i]->sym->m_src = m; 9552 } 9553 9554 /* Process crypto operation */ 9555 TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0], 9556 0, burst, burst_len), 9557 burst_len, 9558 "Error enqueuing burst"); 9559 9560 TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0], 9561 0, burst_dequeued, burst_len), 9562 burst_len, 9563 "Error dequeuing burst"); 9564 9565 9566 for (i = 0; i < burst_len; i++) { 9567 TEST_ASSERT_EQUAL( 9568 *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *), 9569 *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src, 9570 uint32_t *), 9571 "data not as expected"); 9572 9573 rte_pktmbuf_free(burst[i]->sym->m_src); 9574 rte_crypto_op_free(burst[i]); 9575 } 9576 9577 return TEST_SUCCESS; 9578 } 9579 9580 static void 9581 generate_gmac_large_plaintext(uint8_t *data) 9582 { 9583 uint16_t i; 9584 9585 for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32) 9586 memcpy(&data[i], &data[0], 32); 9587 } 9588 9589 static int 9590 create_gmac_operation(enum rte_crypto_auth_operation op, 9591 const struct gmac_test_data *tdata) 9592 { 9593 struct crypto_testsuite_params *ts_params = &testsuite_params; 9594 struct crypto_unittest_params *ut_params = &unittest_params; 9595 struct rte_crypto_sym_op *sym_op; 9596 9597 uint32_t plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 9598 9599 /* Generate Crypto op data structure */ 9600 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 9601 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 9602 TEST_ASSERT_NOT_NULL(ut_params->op, 9603 "Failed to allocate symmetric crypto operation struct"); 9604 9605 sym_op = ut_params->op->sym; 9606 9607 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 9608 ut_params->ibuf, tdata->gmac_tag.len); 9609 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 9610 "no room to append digest"); 9611 9612 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 9613 ut_params->ibuf, plaintext_pad_len); 9614 9615 if (op == RTE_CRYPTO_AUTH_OP_VERIFY) { 9616 rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data, 9617 tdata->gmac_tag.len); 9618 debug_hexdump(stdout, "digest:", 9619 sym_op->auth.digest.data, 9620 tdata->gmac_tag.len); 9621 } 9622 9623 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, 9624 uint8_t *, IV_OFFSET); 9625 9626 rte_memcpy(iv_ptr, tdata->iv.data, tdata->iv.len); 9627 9628 debug_hexdump(stdout, "iv:", iv_ptr, tdata->iv.len); 9629 9630 sym_op->cipher.data.length = 0; 9631 sym_op->cipher.data.offset = 0; 9632 9633 sym_op->auth.data.offset = 0; 9634 sym_op->auth.data.length = tdata->plaintext.len; 9635 9636 return 0; 9637 } 9638 9639 static int create_gmac_session(uint8_t dev_id, 9640 const struct gmac_test_data *tdata, 9641 enum rte_crypto_auth_operation auth_op) 9642 { 9643 uint8_t auth_key[tdata->key.len]; 9644 9645 struct crypto_testsuite_params *ts_params = &testsuite_params; 9646 struct crypto_unittest_params *ut_params = &unittest_params; 9647 9648 memcpy(auth_key, tdata->key.data, tdata->key.len); 9649 9650 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9651 ut_params->auth_xform.next = NULL; 9652 9653 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC; 9654 ut_params->auth_xform.auth.op = auth_op; 9655 ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len; 9656 ut_params->auth_xform.auth.key.length = tdata->key.len; 9657 ut_params->auth_xform.auth.key.data = auth_key; 9658 ut_params->auth_xform.auth.iv.offset = IV_OFFSET; 9659 ut_params->auth_xform.auth.iv.length = tdata->iv.len; 9660 9661 9662 ut_params->sess = rte_cryptodev_sym_session_create( 9663 ts_params->session_mpool); 9664 9665 rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 9666 &ut_params->auth_xform, 9667 ts_params->session_priv_mpool); 9668 9669 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 9670 9671 return 0; 9672 } 9673 9674 static int 9675 test_AES_GMAC_authentication(const struct gmac_test_data *tdata) 9676 { 9677 struct crypto_testsuite_params *ts_params = &testsuite_params; 9678 struct crypto_unittest_params *ut_params = &unittest_params; 9679 9680 int retval; 9681 9682 uint8_t *auth_tag, *plaintext; 9683 uint16_t plaintext_pad_len; 9684 9685 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0, 9686 "No GMAC length in the source data"); 9687 9688 /* Verify the capabilities */ 9689 struct rte_cryptodev_sym_capability_idx cap_idx; 9690 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9691 cap_idx.algo.auth = RTE_CRYPTO_AUTH_AES_GMAC; 9692 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9693 &cap_idx) == NULL) 9694 return -ENOTSUP; 9695 9696 retval = create_gmac_session(ts_params->valid_devs[0], 9697 tdata, RTE_CRYPTO_AUTH_OP_GENERATE); 9698 9699 if (retval < 0) 9700 return retval; 9701 9702 if (tdata->plaintext.len > MBUF_SIZE) 9703 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool); 9704 else 9705 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 9706 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 9707 "Failed to allocate input buffer in mempool"); 9708 9709 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 9710 rte_pktmbuf_tailroom(ut_params->ibuf)); 9711 9712 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 9713 /* 9714 * Runtime generate the large plain text instead of use hard code 9715 * plain text vector. It is done to avoid create huge source file 9716 * with the test vector. 9717 */ 9718 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH) 9719 generate_gmac_large_plaintext(tdata->plaintext.data); 9720 9721 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 9722 plaintext_pad_len); 9723 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 9724 9725 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len); 9726 debug_hexdump(stdout, "plaintext:", plaintext, 9727 tdata->plaintext.len); 9728 9729 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE, 9730 tdata); 9731 9732 if (retval < 0) 9733 return retval; 9734 9735 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9736 9737 ut_params->op->sym->m_src = ut_params->ibuf; 9738 9739 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 9740 ut_params->op), "failed to process sym crypto op"); 9741 9742 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9743 "crypto op processing failed"); 9744 9745 if (ut_params->op->sym->m_dst) { 9746 auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst, 9747 uint8_t *, plaintext_pad_len); 9748 } else { 9749 auth_tag = plaintext + plaintext_pad_len; 9750 } 9751 9752 debug_hexdump(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len); 9753 9754 TEST_ASSERT_BUFFERS_ARE_EQUAL( 9755 auth_tag, 9756 tdata->gmac_tag.data, 9757 tdata->gmac_tag.len, 9758 "GMAC Generated auth tag not as expected"); 9759 9760 return 0; 9761 } 9762 9763 static int 9764 test_AES_GMAC_authentication_test_case_1(void) 9765 { 9766 return test_AES_GMAC_authentication(&gmac_test_case_1); 9767 } 9768 9769 static int 9770 test_AES_GMAC_authentication_test_case_2(void) 9771 { 9772 return test_AES_GMAC_authentication(&gmac_test_case_2); 9773 } 9774 9775 static int 9776 test_AES_GMAC_authentication_test_case_3(void) 9777 { 9778 return test_AES_GMAC_authentication(&gmac_test_case_3); 9779 } 9780 9781 static int 9782 test_AES_GMAC_authentication_test_case_4(void) 9783 { 9784 return test_AES_GMAC_authentication(&gmac_test_case_4); 9785 } 9786 9787 static int 9788 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata) 9789 { 9790 struct crypto_testsuite_params *ts_params = &testsuite_params; 9791 struct crypto_unittest_params *ut_params = &unittest_params; 9792 int retval; 9793 uint32_t plaintext_pad_len; 9794 uint8_t *plaintext; 9795 9796 TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0, 9797 "No GMAC length in the source data"); 9798 9799 /* Verify the capabilities */ 9800 struct rte_cryptodev_sym_capability_idx cap_idx; 9801 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 9802 cap_idx.algo.auth = RTE_CRYPTO_AUTH_AES_GMAC; 9803 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 9804 &cap_idx) == NULL) 9805 return -ENOTSUP; 9806 9807 retval = create_gmac_session(ts_params->valid_devs[0], 9808 tdata, RTE_CRYPTO_AUTH_OP_VERIFY); 9809 9810 if (retval < 0) 9811 return retval; 9812 9813 if (tdata->plaintext.len > MBUF_SIZE) 9814 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool); 9815 else 9816 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 9817 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 9818 "Failed to allocate input buffer in mempool"); 9819 9820 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 9821 rte_pktmbuf_tailroom(ut_params->ibuf)); 9822 9823 plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16); 9824 9825 /* 9826 * Runtime generate the large plain text instead of use hard code 9827 * plain text vector. It is done to avoid create huge source file 9828 * with the test vector. 9829 */ 9830 if (tdata->plaintext.len == GMAC_LARGE_PLAINTEXT_LENGTH) 9831 generate_gmac_large_plaintext(tdata->plaintext.data); 9832 9833 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 9834 plaintext_pad_len); 9835 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 9836 9837 memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len); 9838 debug_hexdump(stdout, "plaintext:", plaintext, 9839 tdata->plaintext.len); 9840 9841 retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY, 9842 tdata); 9843 9844 if (retval < 0) 9845 return retval; 9846 9847 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 9848 9849 ut_params->op->sym->m_src = ut_params->ibuf; 9850 9851 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 9852 ut_params->op), "failed to process sym crypto op"); 9853 9854 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 9855 "crypto op processing failed"); 9856 9857 return 0; 9858 9859 } 9860 9861 static int 9862 test_AES_GMAC_authentication_verify_test_case_1(void) 9863 { 9864 return test_AES_GMAC_authentication_verify(&gmac_test_case_1); 9865 } 9866 9867 static int 9868 test_AES_GMAC_authentication_verify_test_case_2(void) 9869 { 9870 return test_AES_GMAC_authentication_verify(&gmac_test_case_2); 9871 } 9872 9873 static int 9874 test_AES_GMAC_authentication_verify_test_case_3(void) 9875 { 9876 return test_AES_GMAC_authentication_verify(&gmac_test_case_3); 9877 } 9878 9879 static int 9880 test_AES_GMAC_authentication_verify_test_case_4(void) 9881 { 9882 return test_AES_GMAC_authentication_verify(&gmac_test_case_4); 9883 } 9884 9885 struct test_crypto_vector { 9886 enum rte_crypto_cipher_algorithm crypto_algo; 9887 unsigned int cipher_offset; 9888 unsigned int cipher_len; 9889 9890 struct { 9891 uint8_t data[64]; 9892 unsigned int len; 9893 } cipher_key; 9894 9895 struct { 9896 uint8_t data[64]; 9897 unsigned int len; 9898 } iv; 9899 9900 struct { 9901 const uint8_t *data; 9902 unsigned int len; 9903 } plaintext; 9904 9905 struct { 9906 const uint8_t *data; 9907 unsigned int len; 9908 } ciphertext; 9909 9910 enum rte_crypto_auth_algorithm auth_algo; 9911 unsigned int auth_offset; 9912 9913 struct { 9914 uint8_t data[128]; 9915 unsigned int len; 9916 } auth_key; 9917 9918 struct { 9919 const uint8_t *data; 9920 unsigned int len; 9921 } aad; 9922 9923 struct { 9924 uint8_t data[128]; 9925 unsigned int len; 9926 } digest; 9927 }; 9928 9929 static const struct test_crypto_vector 9930 hmac_sha1_test_crypto_vector = { 9931 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 9932 .plaintext = { 9933 .data = plaintext_hash, 9934 .len = 512 9935 }, 9936 .auth_key = { 9937 .data = { 9938 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, 9939 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, 9940 0xDE, 0xF4, 0xDE, 0xAD 9941 }, 9942 .len = 20 9943 }, 9944 .digest = { 9945 .data = { 9946 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77, 9947 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17, 9948 0x3F, 0x91, 0x64, 0x59 9949 }, 9950 .len = 20 9951 } 9952 }; 9953 9954 static const struct test_crypto_vector 9955 aes128_gmac_test_vector = { 9956 .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC, 9957 .plaintext = { 9958 .data = plaintext_hash, 9959 .len = 512 9960 }, 9961 .iv = { 9962 .data = { 9963 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 9964 0x08, 0x09, 0x0A, 0x0B 9965 }, 9966 .len = 12 9967 }, 9968 .auth_key = { 9969 .data = { 9970 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1, 9971 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA 9972 }, 9973 .len = 16 9974 }, 9975 .digest = { 9976 .data = { 9977 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56, 9978 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A 9979 }, 9980 .len = 16 9981 } 9982 }; 9983 9984 static const struct test_crypto_vector 9985 aes128cbc_hmac_sha1_test_vector = { 9986 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC, 9987 .cipher_offset = 0, 9988 .cipher_len = 512, 9989 .cipher_key = { 9990 .data = { 9991 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 9992 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A 9993 }, 9994 .len = 16 9995 }, 9996 .iv = { 9997 .data = { 9998 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 9999 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 10000 }, 10001 .len = 16 10002 }, 10003 .plaintext = { 10004 .data = plaintext_hash, 10005 .len = 512 10006 }, 10007 .ciphertext = { 10008 .data = ciphertext512_aes128cbc, 10009 .len = 512 10010 }, 10011 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 10012 .auth_offset = 0, 10013 .auth_key = { 10014 .data = { 10015 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, 10016 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, 10017 0xDE, 0xF4, 0xDE, 0xAD 10018 }, 10019 .len = 20 10020 }, 10021 .digest = { 10022 .data = { 10023 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60, 10024 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1, 10025 0x18, 0x8C, 0x1D, 0x32 10026 }, 10027 .len = 20 10028 } 10029 }; 10030 10031 static const struct test_crypto_vector 10032 aes128cbc_hmac_sha1_aad_test_vector = { 10033 .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC, 10034 .cipher_offset = 12, 10035 .cipher_len = 496, 10036 .cipher_key = { 10037 .data = { 10038 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 10039 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A 10040 }, 10041 .len = 16 10042 }, 10043 .iv = { 10044 .data = { 10045 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 10046 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 10047 }, 10048 .len = 16 10049 }, 10050 .plaintext = { 10051 .data = plaintext_hash, 10052 .len = 512 10053 }, 10054 .ciphertext = { 10055 .data = ciphertext512_aes128cbc_aad, 10056 .len = 512 10057 }, 10058 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 10059 .auth_offset = 0, 10060 .auth_key = { 10061 .data = { 10062 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, 10063 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, 10064 0xDE, 0xF4, 0xDE, 0xAD 10065 }, 10066 .len = 20 10067 }, 10068 .digest = { 10069 .data = { 10070 0x1F, 0x6A, 0xD2, 0x8B, 0x4B, 0xB3, 0xC0, 0x9E, 10071 0x86, 0x9B, 0x3A, 0xF2, 0x00, 0x5B, 0x4F, 0x08, 10072 0x62, 0x8D, 0x62, 0x65 10073 }, 10074 .len = 20 10075 } 10076 }; 10077 10078 static void 10079 data_corruption(uint8_t *data) 10080 { 10081 data[0] += 1; 10082 } 10083 10084 static void 10085 tag_corruption(uint8_t *data, unsigned int tag_offset) 10086 { 10087 data[tag_offset] += 1; 10088 } 10089 10090 static int 10091 create_auth_session(struct crypto_unittest_params *ut_params, 10092 uint8_t dev_id, 10093 const struct test_crypto_vector *reference, 10094 enum rte_crypto_auth_operation auth_op) 10095 { 10096 struct crypto_testsuite_params *ts_params = &testsuite_params; 10097 uint8_t auth_key[reference->auth_key.len + 1]; 10098 10099 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len); 10100 10101 /* Setup Authentication Parameters */ 10102 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10103 ut_params->auth_xform.auth.op = auth_op; 10104 ut_params->auth_xform.next = NULL; 10105 ut_params->auth_xform.auth.algo = reference->auth_algo; 10106 ut_params->auth_xform.auth.key.length = reference->auth_key.len; 10107 ut_params->auth_xform.auth.key.data = auth_key; 10108 ut_params->auth_xform.auth.digest_length = reference->digest.len; 10109 10110 /* Create Crypto session*/ 10111 ut_params->sess = rte_cryptodev_sym_session_create( 10112 ts_params->session_mpool); 10113 10114 rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 10115 &ut_params->auth_xform, 10116 ts_params->session_priv_mpool); 10117 10118 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 10119 10120 return 0; 10121 } 10122 10123 static int 10124 create_auth_cipher_session(struct crypto_unittest_params *ut_params, 10125 uint8_t dev_id, 10126 const struct test_crypto_vector *reference, 10127 enum rte_crypto_auth_operation auth_op, 10128 enum rte_crypto_cipher_operation cipher_op) 10129 { 10130 struct crypto_testsuite_params *ts_params = &testsuite_params; 10131 uint8_t cipher_key[reference->cipher_key.len + 1]; 10132 uint8_t auth_key[reference->auth_key.len + 1]; 10133 10134 memcpy(cipher_key, reference->cipher_key.data, 10135 reference->cipher_key.len); 10136 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len); 10137 10138 /* Setup Authentication Parameters */ 10139 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10140 ut_params->auth_xform.auth.op = auth_op; 10141 ut_params->auth_xform.auth.algo = reference->auth_algo; 10142 ut_params->auth_xform.auth.key.length = reference->auth_key.len; 10143 ut_params->auth_xform.auth.key.data = auth_key; 10144 ut_params->auth_xform.auth.digest_length = reference->digest.len; 10145 10146 if (reference->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) { 10147 ut_params->auth_xform.auth.iv.offset = IV_OFFSET; 10148 ut_params->auth_xform.auth.iv.length = reference->iv.len; 10149 } else { 10150 ut_params->auth_xform.next = &ut_params->cipher_xform; 10151 10152 /* Setup Cipher Parameters */ 10153 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10154 ut_params->cipher_xform.next = NULL; 10155 ut_params->cipher_xform.cipher.algo = reference->crypto_algo; 10156 ut_params->cipher_xform.cipher.op = cipher_op; 10157 ut_params->cipher_xform.cipher.key.data = cipher_key; 10158 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len; 10159 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 10160 ut_params->cipher_xform.cipher.iv.length = reference->iv.len; 10161 } 10162 10163 /* Create Crypto session*/ 10164 ut_params->sess = rte_cryptodev_sym_session_create( 10165 ts_params->session_mpool); 10166 10167 rte_cryptodev_sym_session_init(dev_id, ut_params->sess, 10168 &ut_params->auth_xform, 10169 ts_params->session_priv_mpool); 10170 10171 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 10172 10173 return 0; 10174 } 10175 10176 static int 10177 create_auth_operation(struct crypto_testsuite_params *ts_params, 10178 struct crypto_unittest_params *ut_params, 10179 const struct test_crypto_vector *reference, 10180 unsigned int auth_generate) 10181 { 10182 /* Generate Crypto op data structure */ 10183 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 10184 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 10185 TEST_ASSERT_NOT_NULL(ut_params->op, 10186 "Failed to allocate pktmbuf offload"); 10187 10188 /* Set crypto operation data parameters */ 10189 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 10190 10191 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 10192 10193 /* set crypto operation source mbuf */ 10194 sym_op->m_src = ut_params->ibuf; 10195 10196 /* digest */ 10197 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 10198 ut_params->ibuf, reference->digest.len); 10199 10200 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 10201 "no room to append auth tag"); 10202 10203 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 10204 ut_params->ibuf, reference->plaintext.len); 10205 10206 if (auth_generate) 10207 memset(sym_op->auth.digest.data, 0, reference->digest.len); 10208 else 10209 memcpy(sym_op->auth.digest.data, 10210 reference->digest.data, 10211 reference->digest.len); 10212 10213 debug_hexdump(stdout, "digest:", 10214 sym_op->auth.digest.data, 10215 reference->digest.len); 10216 10217 sym_op->auth.data.length = reference->plaintext.len; 10218 sym_op->auth.data.offset = 0; 10219 10220 return 0; 10221 } 10222 10223 static int 10224 create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params, 10225 struct crypto_unittest_params *ut_params, 10226 const struct test_crypto_vector *reference, 10227 unsigned int auth_generate) 10228 { 10229 /* Generate Crypto op data structure */ 10230 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 10231 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 10232 TEST_ASSERT_NOT_NULL(ut_params->op, 10233 "Failed to allocate pktmbuf offload"); 10234 10235 /* Set crypto operation data parameters */ 10236 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 10237 10238 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 10239 10240 /* set crypto operation source mbuf */ 10241 sym_op->m_src = ut_params->ibuf; 10242 10243 /* digest */ 10244 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 10245 ut_params->ibuf, reference->digest.len); 10246 10247 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 10248 "no room to append auth tag"); 10249 10250 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 10251 ut_params->ibuf, reference->ciphertext.len); 10252 10253 if (auth_generate) 10254 memset(sym_op->auth.digest.data, 0, reference->digest.len); 10255 else 10256 memcpy(sym_op->auth.digest.data, 10257 reference->digest.data, 10258 reference->digest.len); 10259 10260 debug_hexdump(stdout, "digest:", 10261 sym_op->auth.digest.data, 10262 reference->digest.len); 10263 10264 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 10265 reference->iv.data, reference->iv.len); 10266 10267 sym_op->cipher.data.length = 0; 10268 sym_op->cipher.data.offset = 0; 10269 10270 sym_op->auth.data.length = reference->plaintext.len; 10271 sym_op->auth.data.offset = 0; 10272 10273 return 0; 10274 } 10275 10276 static int 10277 create_cipher_auth_operation(struct crypto_testsuite_params *ts_params, 10278 struct crypto_unittest_params *ut_params, 10279 const struct test_crypto_vector *reference, 10280 unsigned int auth_generate) 10281 { 10282 /* Generate Crypto op data structure */ 10283 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 10284 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 10285 TEST_ASSERT_NOT_NULL(ut_params->op, 10286 "Failed to allocate pktmbuf offload"); 10287 10288 /* Set crypto operation data parameters */ 10289 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 10290 10291 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 10292 10293 /* set crypto operation source mbuf */ 10294 sym_op->m_src = ut_params->ibuf; 10295 10296 /* digest */ 10297 sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append( 10298 ut_params->ibuf, reference->digest.len); 10299 10300 TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data, 10301 "no room to append auth tag"); 10302 10303 sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset( 10304 ut_params->ibuf, reference->ciphertext.len); 10305 10306 if (auth_generate) 10307 memset(sym_op->auth.digest.data, 0, reference->digest.len); 10308 else 10309 memcpy(sym_op->auth.digest.data, 10310 reference->digest.data, 10311 reference->digest.len); 10312 10313 debug_hexdump(stdout, "digest:", 10314 sym_op->auth.digest.data, 10315 reference->digest.len); 10316 10317 rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET), 10318 reference->iv.data, reference->iv.len); 10319 10320 sym_op->cipher.data.length = reference->cipher_len; 10321 sym_op->cipher.data.offset = reference->cipher_offset; 10322 10323 sym_op->auth.data.length = reference->plaintext.len; 10324 sym_op->auth.data.offset = reference->auth_offset; 10325 10326 return 0; 10327 } 10328 10329 static int 10330 create_auth_verify_operation(struct crypto_testsuite_params *ts_params, 10331 struct crypto_unittest_params *ut_params, 10332 const struct test_crypto_vector *reference) 10333 { 10334 return create_auth_operation(ts_params, ut_params, reference, 0); 10335 } 10336 10337 static int 10338 create_auth_verify_GMAC_operation( 10339 struct crypto_testsuite_params *ts_params, 10340 struct crypto_unittest_params *ut_params, 10341 const struct test_crypto_vector *reference) 10342 { 10343 return create_auth_GMAC_operation(ts_params, ut_params, reference, 0); 10344 } 10345 10346 static int 10347 create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params, 10348 struct crypto_unittest_params *ut_params, 10349 const struct test_crypto_vector *reference) 10350 { 10351 return create_cipher_auth_operation(ts_params, ut_params, reference, 0); 10352 } 10353 10354 static int 10355 test_authentication_verify_fail_when_data_corruption( 10356 struct crypto_testsuite_params *ts_params, 10357 struct crypto_unittest_params *ut_params, 10358 const struct test_crypto_vector *reference, 10359 unsigned int data_corrupted) 10360 { 10361 int retval; 10362 10363 uint8_t *plaintext; 10364 10365 /* Verify the capabilities */ 10366 struct rte_cryptodev_sym_capability_idx cap_idx; 10367 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10368 cap_idx.algo.auth = reference->auth_algo; 10369 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10370 &cap_idx) == NULL) 10371 return -ENOTSUP; 10372 10373 /* Create session */ 10374 retval = create_auth_session(ut_params, 10375 ts_params->valid_devs[0], 10376 reference, 10377 RTE_CRYPTO_AUTH_OP_VERIFY); 10378 if (retval < 0) 10379 return retval; 10380 10381 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10382 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 10383 "Failed to allocate input buffer in mempool"); 10384 10385 /* clear mbuf payload */ 10386 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10387 rte_pktmbuf_tailroom(ut_params->ibuf)); 10388 10389 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10390 reference->plaintext.len); 10391 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 10392 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len); 10393 10394 debug_hexdump(stdout, "plaintext:", plaintext, 10395 reference->plaintext.len); 10396 10397 /* Create operation */ 10398 retval = create_auth_verify_operation(ts_params, ut_params, reference); 10399 10400 if (retval < 0) 10401 return retval; 10402 10403 if (data_corrupted) 10404 data_corruption(plaintext); 10405 else 10406 tag_corruption(plaintext, reference->plaintext.len); 10407 10408 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 10409 ut_params->op); 10410 10411 TEST_ASSERT_NULL(ut_params->op, "authentication not failed"); 10412 10413 return 0; 10414 } 10415 10416 static int 10417 test_authentication_verify_GMAC_fail_when_corruption( 10418 struct crypto_testsuite_params *ts_params, 10419 struct crypto_unittest_params *ut_params, 10420 const struct test_crypto_vector *reference, 10421 unsigned int data_corrupted) 10422 { 10423 int retval; 10424 uint8_t *plaintext; 10425 10426 /* Verify the capabilities */ 10427 struct rte_cryptodev_sym_capability_idx cap_idx; 10428 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10429 cap_idx.algo.auth = reference->auth_algo; 10430 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10431 &cap_idx) == NULL) 10432 return -ENOTSUP; 10433 10434 /* Create session */ 10435 retval = create_auth_cipher_session(ut_params, 10436 ts_params->valid_devs[0], 10437 reference, 10438 RTE_CRYPTO_AUTH_OP_VERIFY, 10439 RTE_CRYPTO_CIPHER_OP_DECRYPT); 10440 if (retval < 0) 10441 return retval; 10442 10443 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10444 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 10445 "Failed to allocate input buffer in mempool"); 10446 10447 /* clear mbuf payload */ 10448 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10449 rte_pktmbuf_tailroom(ut_params->ibuf)); 10450 10451 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10452 reference->plaintext.len); 10453 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 10454 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len); 10455 10456 debug_hexdump(stdout, "plaintext:", plaintext, 10457 reference->plaintext.len); 10458 10459 /* Create operation */ 10460 retval = create_auth_verify_GMAC_operation(ts_params, 10461 ut_params, 10462 reference); 10463 10464 if (retval < 0) 10465 return retval; 10466 10467 if (data_corrupted) 10468 data_corruption(plaintext); 10469 else 10470 tag_corruption(plaintext, reference->aad.len); 10471 10472 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 10473 ut_params->op); 10474 10475 TEST_ASSERT_NULL(ut_params->op, "authentication not failed"); 10476 10477 return 0; 10478 } 10479 10480 static int 10481 test_authenticated_decryption_fail_when_corruption( 10482 struct crypto_testsuite_params *ts_params, 10483 struct crypto_unittest_params *ut_params, 10484 const struct test_crypto_vector *reference, 10485 unsigned int data_corrupted) 10486 { 10487 int retval; 10488 10489 uint8_t *ciphertext; 10490 10491 /* Verify the capabilities */ 10492 struct rte_cryptodev_sym_capability_idx cap_idx; 10493 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10494 cap_idx.algo.auth = reference->auth_algo; 10495 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10496 &cap_idx) == NULL) 10497 return -ENOTSUP; 10498 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10499 cap_idx.algo.cipher = reference->crypto_algo; 10500 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10501 &cap_idx) == NULL) 10502 return -ENOTSUP; 10503 10504 /* Create session */ 10505 retval = create_auth_cipher_session(ut_params, 10506 ts_params->valid_devs[0], 10507 reference, 10508 RTE_CRYPTO_AUTH_OP_VERIFY, 10509 RTE_CRYPTO_CIPHER_OP_DECRYPT); 10510 if (retval < 0) 10511 return retval; 10512 10513 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10514 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 10515 "Failed to allocate input buffer in mempool"); 10516 10517 /* clear mbuf payload */ 10518 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10519 rte_pktmbuf_tailroom(ut_params->ibuf)); 10520 10521 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10522 reference->ciphertext.len); 10523 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext"); 10524 memcpy(ciphertext, reference->ciphertext.data, 10525 reference->ciphertext.len); 10526 10527 /* Create operation */ 10528 retval = create_cipher_auth_verify_operation(ts_params, 10529 ut_params, 10530 reference); 10531 10532 if (retval < 0) 10533 return retval; 10534 10535 if (data_corrupted) 10536 data_corruption(ciphertext); 10537 else 10538 tag_corruption(ciphertext, reference->ciphertext.len); 10539 10540 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 10541 ut_params->op); 10542 10543 TEST_ASSERT_NULL(ut_params->op, "authentication not failed"); 10544 10545 return 0; 10546 } 10547 10548 static int 10549 test_authenticated_encryt_with_esn( 10550 struct crypto_testsuite_params *ts_params, 10551 struct crypto_unittest_params *ut_params, 10552 const struct test_crypto_vector *reference) 10553 { 10554 int retval; 10555 10556 uint8_t *authciphertext, *plaintext, *auth_tag; 10557 uint16_t plaintext_pad_len; 10558 uint8_t cipher_key[reference->cipher_key.len + 1]; 10559 uint8_t auth_key[reference->auth_key.len + 1]; 10560 10561 /* Verify the capabilities */ 10562 struct rte_cryptodev_sym_capability_idx cap_idx; 10563 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10564 cap_idx.algo.auth = reference->auth_algo; 10565 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10566 &cap_idx) == NULL) 10567 return -ENOTSUP; 10568 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10569 cap_idx.algo.cipher = reference->crypto_algo; 10570 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10571 &cap_idx) == NULL) 10572 return -ENOTSUP; 10573 10574 /* Create session */ 10575 memcpy(cipher_key, reference->cipher_key.data, 10576 reference->cipher_key.len); 10577 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len); 10578 10579 /* Setup Cipher Parameters */ 10580 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10581 ut_params->cipher_xform.cipher.algo = reference->crypto_algo; 10582 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 10583 ut_params->cipher_xform.cipher.key.data = cipher_key; 10584 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len; 10585 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 10586 ut_params->cipher_xform.cipher.iv.length = reference->iv.len; 10587 10588 ut_params->cipher_xform.next = &ut_params->auth_xform; 10589 10590 /* Setup Authentication Parameters */ 10591 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10592 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; 10593 ut_params->auth_xform.auth.algo = reference->auth_algo; 10594 ut_params->auth_xform.auth.key.length = reference->auth_key.len; 10595 ut_params->auth_xform.auth.key.data = auth_key; 10596 ut_params->auth_xform.auth.digest_length = reference->digest.len; 10597 ut_params->auth_xform.next = NULL; 10598 10599 /* Create Crypto session*/ 10600 ut_params->sess = rte_cryptodev_sym_session_create( 10601 ts_params->session_mpool); 10602 10603 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 10604 ut_params->sess, 10605 &ut_params->cipher_xform, 10606 ts_params->session_priv_mpool); 10607 10608 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 10609 10610 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10611 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 10612 "Failed to allocate input buffer in mempool"); 10613 10614 /* clear mbuf payload */ 10615 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10616 rte_pktmbuf_tailroom(ut_params->ibuf)); 10617 10618 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10619 reference->plaintext.len); 10620 TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext"); 10621 memcpy(plaintext, reference->plaintext.data, reference->plaintext.len); 10622 10623 /* Create operation */ 10624 retval = create_cipher_auth_operation(ts_params, 10625 ut_params, 10626 reference, 0); 10627 10628 if (retval < 0) 10629 return retval; 10630 10631 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 10632 ut_params->op); 10633 10634 TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned"); 10635 10636 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 10637 "crypto op processing failed"); 10638 10639 plaintext_pad_len = RTE_ALIGN_CEIL(reference->plaintext.len, 16); 10640 10641 authciphertext = rte_pktmbuf_mtod_offset(ut_params->ibuf, uint8_t *, 10642 ut_params->op->sym->auth.data.offset); 10643 auth_tag = authciphertext + plaintext_pad_len; 10644 debug_hexdump(stdout, "ciphertext:", authciphertext, 10645 reference->ciphertext.len); 10646 debug_hexdump(stdout, "auth tag:", auth_tag, reference->digest.len); 10647 10648 /* Validate obuf */ 10649 TEST_ASSERT_BUFFERS_ARE_EQUAL( 10650 authciphertext, 10651 reference->ciphertext.data, 10652 reference->ciphertext.len, 10653 "Ciphertext data not as expected"); 10654 10655 TEST_ASSERT_BUFFERS_ARE_EQUAL( 10656 auth_tag, 10657 reference->digest.data, 10658 reference->digest.len, 10659 "Generated digest not as expected"); 10660 10661 return TEST_SUCCESS; 10662 10663 } 10664 10665 static int 10666 test_authenticated_decrypt_with_esn( 10667 struct crypto_testsuite_params *ts_params, 10668 struct crypto_unittest_params *ut_params, 10669 const struct test_crypto_vector *reference) 10670 { 10671 int retval; 10672 10673 uint8_t *ciphertext; 10674 uint8_t cipher_key[reference->cipher_key.len + 1]; 10675 uint8_t auth_key[reference->auth_key.len + 1]; 10676 10677 /* Verify the capabilities */ 10678 struct rte_cryptodev_sym_capability_idx cap_idx; 10679 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10680 cap_idx.algo.auth = reference->auth_algo; 10681 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10682 &cap_idx) == NULL) 10683 return -ENOTSUP; 10684 cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10685 cap_idx.algo.cipher = reference->crypto_algo; 10686 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10687 &cap_idx) == NULL) 10688 return -ENOTSUP; 10689 10690 /* Create session */ 10691 memcpy(cipher_key, reference->cipher_key.data, 10692 reference->cipher_key.len); 10693 memcpy(auth_key, reference->auth_key.data, reference->auth_key.len); 10694 10695 /* Setup Authentication Parameters */ 10696 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; 10697 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY; 10698 ut_params->auth_xform.auth.algo = reference->auth_algo; 10699 ut_params->auth_xform.auth.key.length = reference->auth_key.len; 10700 ut_params->auth_xform.auth.key.data = auth_key; 10701 ut_params->auth_xform.auth.digest_length = reference->digest.len; 10702 ut_params->auth_xform.next = &ut_params->cipher_xform; 10703 10704 /* Setup Cipher Parameters */ 10705 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 10706 ut_params->cipher_xform.next = NULL; 10707 ut_params->cipher_xform.cipher.algo = reference->crypto_algo; 10708 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT; 10709 ut_params->cipher_xform.cipher.key.data = cipher_key; 10710 ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len; 10711 ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET; 10712 ut_params->cipher_xform.cipher.iv.length = reference->iv.len; 10713 10714 /* Create Crypto session*/ 10715 ut_params->sess = rte_cryptodev_sym_session_create( 10716 ts_params->session_mpool); 10717 10718 rte_cryptodev_sym_session_init(ts_params->valid_devs[0], 10719 ut_params->sess, 10720 &ut_params->auth_xform, 10721 ts_params->session_priv_mpool); 10722 10723 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed"); 10724 10725 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10726 TEST_ASSERT_NOT_NULL(ut_params->ibuf, 10727 "Failed to allocate input buffer in mempool"); 10728 10729 /* clear mbuf payload */ 10730 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10731 rte_pktmbuf_tailroom(ut_params->ibuf)); 10732 10733 ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10734 reference->ciphertext.len); 10735 TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext"); 10736 memcpy(ciphertext, reference->ciphertext.data, 10737 reference->ciphertext.len); 10738 10739 /* Create operation */ 10740 retval = create_cipher_auth_verify_operation(ts_params, 10741 ut_params, 10742 reference); 10743 10744 if (retval < 0) 10745 return retval; 10746 10747 ut_params->op = process_crypto_request(ts_params->valid_devs[0], 10748 ut_params->op); 10749 10750 TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process"); 10751 TEST_ASSERT_EQUAL(ut_params->op->status, 10752 RTE_CRYPTO_OP_STATUS_SUCCESS, 10753 "crypto op processing passed"); 10754 10755 ut_params->obuf = ut_params->op->sym->m_src; 10756 TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf"); 10757 10758 return 0; 10759 } 10760 10761 static int 10762 create_aead_operation_SGL(enum rte_crypto_aead_operation op, 10763 const struct aead_test_data *tdata, 10764 void *digest_mem, uint64_t digest_phys) 10765 { 10766 struct crypto_testsuite_params *ts_params = &testsuite_params; 10767 struct crypto_unittest_params *ut_params = &unittest_params; 10768 10769 const unsigned int auth_tag_len = tdata->auth_tag.len; 10770 const unsigned int iv_len = tdata->iv.len; 10771 unsigned int aad_len = tdata->aad.len; 10772 unsigned int aad_len_pad = 0; 10773 10774 /* Generate Crypto op data structure */ 10775 ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, 10776 RTE_CRYPTO_OP_TYPE_SYMMETRIC); 10777 TEST_ASSERT_NOT_NULL(ut_params->op, 10778 "Failed to allocate symmetric crypto operation struct"); 10779 10780 struct rte_crypto_sym_op *sym_op = ut_params->op->sym; 10781 10782 sym_op->aead.digest.data = digest_mem; 10783 10784 TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data, 10785 "no room to append digest"); 10786 10787 sym_op->aead.digest.phys_addr = digest_phys; 10788 10789 if (op == RTE_CRYPTO_AEAD_OP_DECRYPT) { 10790 rte_memcpy(sym_op->aead.digest.data, tdata->auth_tag.data, 10791 auth_tag_len); 10792 debug_hexdump(stdout, "digest:", 10793 sym_op->aead.digest.data, 10794 auth_tag_len); 10795 } 10796 10797 /* Append aad data */ 10798 if (tdata->algo == RTE_CRYPTO_AEAD_AES_CCM) { 10799 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, 10800 uint8_t *, IV_OFFSET); 10801 10802 /* Copy IV 1 byte after the IV pointer, according to the API */ 10803 rte_memcpy(iv_ptr + 1, tdata->iv.data, iv_len); 10804 10805 aad_len = RTE_ALIGN_CEIL(aad_len + 18, 16); 10806 10807 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend( 10808 ut_params->ibuf, aad_len); 10809 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data, 10810 "no room to prepend aad"); 10811 sym_op->aead.aad.phys_addr = rte_pktmbuf_iova( 10812 ut_params->ibuf); 10813 10814 memset(sym_op->aead.aad.data, 0, aad_len); 10815 /* Copy AAD 18 bytes after the AAD pointer, according to the API */ 10816 rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len); 10817 10818 debug_hexdump(stdout, "iv:", iv_ptr, iv_len); 10819 debug_hexdump(stdout, "aad:", 10820 sym_op->aead.aad.data, aad_len); 10821 } else { 10822 uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ut_params->op, 10823 uint8_t *, IV_OFFSET); 10824 10825 rte_memcpy(iv_ptr, tdata->iv.data, iv_len); 10826 10827 aad_len_pad = RTE_ALIGN_CEIL(aad_len, 16); 10828 10829 sym_op->aead.aad.data = (uint8_t *)rte_pktmbuf_prepend( 10830 ut_params->ibuf, aad_len_pad); 10831 TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data, 10832 "no room to prepend aad"); 10833 sym_op->aead.aad.phys_addr = rte_pktmbuf_iova( 10834 ut_params->ibuf); 10835 10836 memset(sym_op->aead.aad.data, 0, aad_len); 10837 rte_memcpy(sym_op->aead.aad.data, tdata->aad.data, aad_len); 10838 10839 debug_hexdump(stdout, "iv:", iv_ptr, iv_len); 10840 debug_hexdump(stdout, "aad:", 10841 sym_op->aead.aad.data, aad_len); 10842 } 10843 10844 sym_op->aead.data.length = tdata->plaintext.len; 10845 sym_op->aead.data.offset = aad_len_pad; 10846 10847 return 0; 10848 } 10849 10850 #define SGL_MAX_NO 16 10851 10852 static int 10853 test_authenticated_encryption_SGL(const struct aead_test_data *tdata, 10854 const int oop, uint32_t fragsz, uint32_t fragsz_oop) 10855 { 10856 struct crypto_testsuite_params *ts_params = &testsuite_params; 10857 struct crypto_unittest_params *ut_params = &unittest_params; 10858 struct rte_mbuf *buf, *buf_oop = NULL, *buf_last_oop = NULL; 10859 int retval; 10860 int to_trn = 0; 10861 int to_trn_tbl[SGL_MAX_NO]; 10862 int segs = 1; 10863 unsigned int trn_data = 0; 10864 uint8_t *plaintext, *ciphertext, *auth_tag; 10865 struct rte_cryptodev_info dev_info; 10866 10867 /* Verify the capabilities */ 10868 struct rte_cryptodev_sym_capability_idx cap_idx; 10869 cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 10870 cap_idx.algo.aead = tdata->algo; 10871 if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], 10872 &cap_idx) == NULL) 10873 return -ENOTSUP; 10874 10875 /* Detailed check for the particular SGL support flag */ 10876 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); 10877 if (!oop) { 10878 unsigned int sgl_in = fragsz < tdata->plaintext.len; 10879 if (sgl_in && (!(dev_info.feature_flags & 10880 RTE_CRYPTODEV_FF_IN_PLACE_SGL))) 10881 return -ENOTSUP; 10882 } else { 10883 unsigned int sgl_in = fragsz < tdata->plaintext.len; 10884 unsigned int sgl_out = (fragsz_oop ? fragsz_oop : fragsz) < 10885 tdata->plaintext.len; 10886 if (sgl_in && !sgl_out) { 10887 if (!(dev_info.feature_flags & 10888 RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)) 10889 return -ENOTSUP; 10890 } else if (!sgl_in && sgl_out) { 10891 if (!(dev_info.feature_flags & 10892 RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)) 10893 return -ENOTSUP; 10894 } else if (sgl_in && sgl_out) { 10895 if (!(dev_info.feature_flags & 10896 RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) 10897 return -ENOTSUP; 10898 } 10899 } 10900 10901 if (fragsz > tdata->plaintext.len) 10902 fragsz = tdata->plaintext.len; 10903 10904 uint16_t plaintext_len = fragsz; 10905 uint16_t frag_size_oop = fragsz_oop ? fragsz_oop : fragsz; 10906 10907 if (fragsz_oop > tdata->plaintext.len) 10908 frag_size_oop = tdata->plaintext.len; 10909 10910 int ecx = 0; 10911 void *digest_mem = NULL; 10912 10913 uint32_t prepend_len = RTE_ALIGN_CEIL(tdata->aad.len, 16); 10914 10915 if (tdata->plaintext.len % fragsz != 0) { 10916 if (tdata->plaintext.len / fragsz + 1 > SGL_MAX_NO) 10917 return 1; 10918 } else { 10919 if (tdata->plaintext.len / fragsz > SGL_MAX_NO) 10920 return 1; 10921 } 10922 10923 /* 10924 * For out-op-place we need to alloc another mbuf 10925 */ 10926 if (oop) { 10927 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10928 rte_pktmbuf_append(ut_params->obuf, 10929 frag_size_oop + prepend_len); 10930 buf_oop = ut_params->obuf; 10931 } 10932 10933 /* Create AEAD session */ 10934 retval = create_aead_session(ts_params->valid_devs[0], 10935 tdata->algo, 10936 RTE_CRYPTO_AEAD_OP_ENCRYPT, 10937 tdata->key.data, tdata->key.len, 10938 tdata->aad.len, tdata->auth_tag.len, 10939 tdata->iv.len); 10940 if (retval < 0) 10941 return retval; 10942 10943 ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10944 10945 /* clear mbuf payload */ 10946 memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, 10947 rte_pktmbuf_tailroom(ut_params->ibuf)); 10948 10949 plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 10950 plaintext_len); 10951 10952 memcpy(plaintext, tdata->plaintext.data, plaintext_len); 10953 10954 trn_data += plaintext_len; 10955 10956 buf = ut_params->ibuf; 10957 10958 /* 10959 * Loop until no more fragments 10960 */ 10961 10962 while (trn_data < tdata->plaintext.len) { 10963 ++segs; 10964 to_trn = (tdata->plaintext.len - trn_data < fragsz) ? 10965 (tdata->plaintext.len - trn_data) : fragsz; 10966 10967 to_trn_tbl[ecx++] = to_trn; 10968 10969 buf->next = rte_pktmbuf_alloc(ts_params->mbuf_pool); 10970 buf = buf->next; 10971 10972 memset(rte_pktmbuf_mtod(buf, uint8_t *), 0, 10973 rte_pktmbuf_tailroom(buf)); 10974 10975 /* OOP */ 10976 if (oop && !fragsz_oop) { 10977 buf_last_oop = buf_oop->next = 10978 rte_pktmbuf_alloc(ts_params->mbuf_pool); 10979 buf_oop = buf_oop->next; 10980 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *), 10981 0, rte_pktmbuf_tailroom(buf_oop)); 10982 rte_pktmbuf_append(buf_oop, to_trn); 10983 } 10984 10985 plaintext = (uint8_t *)rte_pktmbuf_append(buf, 10986 to_trn); 10987 10988 memcpy(plaintext, tdata->plaintext.data + trn_data, 10989 to_trn); 10990 trn_data += to_trn; 10991 if (trn_data == tdata->plaintext.len) { 10992 if (oop) { 10993 if (!fragsz_oop) 10994 digest_mem = rte_pktmbuf_append(buf_oop, 10995 tdata->auth_tag.len); 10996 } else 10997 digest_mem = (uint8_t *)rte_pktmbuf_append(buf, 10998 tdata->auth_tag.len); 10999 } 11000 } 11001 11002 uint64_t digest_phys = 0; 11003 11004 ut_params->ibuf->nb_segs = segs; 11005 11006 segs = 1; 11007 if (fragsz_oop && oop) { 11008 to_trn = 0; 11009 ecx = 0; 11010 11011 if (frag_size_oop == tdata->plaintext.len) { 11012 digest_mem = rte_pktmbuf_append(ut_params->obuf, 11013 tdata->auth_tag.len); 11014 11015 digest_phys = rte_pktmbuf_iova_offset( 11016 ut_params->obuf, 11017 tdata->plaintext.len + prepend_len); 11018 } 11019 11020 trn_data = frag_size_oop; 11021 while (trn_data < tdata->plaintext.len) { 11022 ++segs; 11023 to_trn = 11024 (tdata->plaintext.len - trn_data < 11025 frag_size_oop) ? 11026 (tdata->plaintext.len - trn_data) : 11027 frag_size_oop; 11028 11029 to_trn_tbl[ecx++] = to_trn; 11030 11031 buf_last_oop = buf_oop->next = 11032 rte_pktmbuf_alloc(ts_params->mbuf_pool); 11033 buf_oop = buf_oop->next; 11034 memset(rte_pktmbuf_mtod(buf_oop, uint8_t *), 11035 0, rte_pktmbuf_tailroom(buf_oop)); 11036 rte_pktmbuf_append(buf_oop, to_trn); 11037 11038 trn_data += to_trn; 11039 11040 if (trn_data == tdata->plaintext.len) { 11041 digest_mem = rte_pktmbuf_append(buf_oop, 11042 tdata->auth_tag.len); 11043 } 11044 } 11045 11046 ut_params->obuf->nb_segs = segs; 11047 } 11048 11049 /* 11050 * Place digest at the end of the last buffer 11051 */ 11052 if (!digest_phys) 11053 digest_phys = rte_pktmbuf_iova(buf) + to_trn; 11054 if (oop && buf_last_oop) 11055 digest_phys = rte_pktmbuf_iova(buf_last_oop) + to_trn; 11056 11057 if (!digest_mem && !oop) { 11058 digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf, 11059 + tdata->auth_tag.len); 11060 digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf, 11061 tdata->plaintext.len); 11062 } 11063 11064 /* Create AEAD operation */ 11065 retval = create_aead_operation_SGL(RTE_CRYPTO_AEAD_OP_ENCRYPT, 11066 tdata, digest_mem, digest_phys); 11067 11068 if (retval < 0) 11069 return retval; 11070 11071 rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess); 11072 11073 ut_params->op->sym->m_src = ut_params->ibuf; 11074 if (oop) 11075 ut_params->op->sym->m_dst = ut_params->obuf; 11076 11077 /* Process crypto operation */ 11078 TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], 11079 ut_params->op), "failed to process sym crypto op"); 11080 11081 TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS, 11082 "crypto op processing failed"); 11083 11084 11085 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src, 11086 uint8_t *, prepend_len); 11087 if (oop) { 11088 ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst, 11089 uint8_t *, prepend_len); 11090 } 11091 11092 if (fragsz_oop) 11093 fragsz = fragsz_oop; 11094 11095 TEST_ASSERT_BUFFERS_ARE_EQUAL( 11096 ciphertext, 11097 tdata->ciphertext.data, 11098 fragsz, 11099 "Ciphertext data not as expected"); 11100 11101 buf = ut_params->op->sym->m_src->next; 11102 if (oop) 11103 buf = ut_params->op->sym->m_dst->next; 11104 11105 unsigned int off = fragsz; 11106 11107 ecx = 0; 11108 while (buf) { 11109 ciphertext = rte_pktmbuf_mtod(buf, 11110 uint8_t *); 11111 11112 TEST_ASSERT_BUFFERS_ARE_EQUAL( 11113 ciphertext, 11114 tdata->ciphertext.data + off, 11115 to_trn_tbl[ecx], 11116 "Ciphertext data not as expected"); 11117 11118 off += to_trn_tbl[ecx++]; 11119 buf = buf->next; 11120 } 11121 11122 auth_tag = digest_mem; 11123 TEST_ASSERT_BUFFERS_ARE_EQUAL( 11124 auth_tag, 11125 tdata->auth_tag.data, 11126 tdata->auth_tag.len, 11127 "Generated auth tag not as expected"); 11128 11129 return 0; 11130 } 11131 11132 static int 11133 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B(void) 11134 { 11135 return test_authenticated_encryption_SGL( 11136 &gcm_test_case_SGL_1, OUT_OF_PLACE, 400, 400); 11137 } 11138 11139 static int 11140 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B(void) 11141 { 11142 return test_authenticated_encryption_SGL( 11143 &gcm_test_case_SGL_1, OUT_OF_PLACE, 1500, 2000); 11144 } 11145 11146 static int 11147 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg(void) 11148 { 11149 return test_authenticated_encryption_SGL( 11150 &gcm_test_case_8, OUT_OF_PLACE, 400, 11151 gcm_test_case_8.plaintext.len); 11152 } 11153 11154 static int 11155 test_AES_GCM_auth_encrypt_SGL_in_place_1500B(void) 11156 { 11157 /* This test is not for OPENSSL PMD */ 11158 if (gbl_driver_id == rte_cryptodev_driver_id_get( 11159 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD))) 11160 return -ENOTSUP; 11161 11162 return test_authenticated_encryption_SGL( 11163 &gcm_test_case_SGL_1, IN_PLACE, 1500, 0); 11164 } 11165 11166 static int 11167 test_authentication_verify_fail_when_data_corrupted( 11168 struct crypto_testsuite_params *ts_params, 11169 struct crypto_unittest_params *ut_params, 11170 const struct test_crypto_vector *reference) 11171 { 11172 return test_authentication_verify_fail_when_data_corruption( 11173 ts_params, ut_params, reference, 1); 11174 } 11175 11176 static int 11177 test_authentication_verify_fail_when_tag_corrupted( 11178 struct crypto_testsuite_params *ts_params, 11179 struct crypto_unittest_params *ut_params, 11180 const struct test_crypto_vector *reference) 11181 { 11182 return test_authentication_verify_fail_when_data_corruption( 11183 ts_params, ut_params, reference, 0); 11184 } 11185 11186 static int 11187 test_authentication_verify_GMAC_fail_when_data_corrupted( 11188 struct crypto_testsuite_params *ts_params, 11189 struct crypto_unittest_params *ut_params, 11190 const struct test_crypto_vector *reference) 11191 { 11192 return test_authentication_verify_GMAC_fail_when_corruption( 11193 ts_params, ut_params, reference, 1); 11194 } 11195 11196 static int 11197 test_authentication_verify_GMAC_fail_when_tag_corrupted( 11198 struct crypto_testsuite_params *ts_params, 11199 struct crypto_unittest_params *ut_params, 11200 const struct test_crypto_vector *reference) 11201 { 11202 return test_authentication_verify_GMAC_fail_when_corruption( 11203 ts_params, ut_params, reference, 0); 11204 } 11205 11206 static int 11207 test_authenticated_decryption_fail_when_data_corrupted( 11208 struct crypto_testsuite_params *ts_params, 11209 struct crypto_unittest_params *ut_params, 11210 const struct test_crypto_vector *reference) 11211 { 11212 return test_authenticated_decryption_fail_when_corruption( 11213 ts_params, ut_params, reference, 1); 11214 } 11215 11216 static int 11217 test_authenticated_decryption_fail_when_tag_corrupted( 11218 struct crypto_testsuite_params *ts_params, 11219 struct crypto_unittest_params *ut_params, 11220 const struct test_crypto_vector *reference) 11221 { 11222 return test_authenticated_decryption_fail_when_corruption( 11223 ts_params, ut_params, reference, 0); 11224 } 11225 11226 static int 11227 authentication_verify_HMAC_SHA1_fail_data_corrupt(void) 11228 { 11229 return test_authentication_verify_fail_when_data_corrupted( 11230 &testsuite_params, &unittest_params, 11231 &hmac_sha1_test_crypto_vector); 11232 } 11233 11234 static int 11235 authentication_verify_HMAC_SHA1_fail_tag_corrupt(void) 11236 { 11237 return test_authentication_verify_fail_when_tag_corrupted( 11238 &testsuite_params, &unittest_params, 11239 &hmac_sha1_test_crypto_vector); 11240 } 11241 11242 static int 11243 authentication_verify_AES128_GMAC_fail_data_corrupt(void) 11244 { 11245 return test_authentication_verify_GMAC_fail_when_data_corrupted( 11246 &testsuite_params, &unittest_params, 11247 &aes128_gmac_test_vector); 11248 } 11249 11250 static int 11251 authentication_verify_AES128_GMAC_fail_tag_corrupt(void) 11252 { 11253 return test_authentication_verify_GMAC_fail_when_tag_corrupted( 11254 &testsuite_params, &unittest_params, 11255 &aes128_gmac_test_vector); 11256 } 11257 11258 static int 11259 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void) 11260 { 11261 return test_authenticated_decryption_fail_when_data_corrupted( 11262 &testsuite_params, 11263 &unittest_params, 11264 &aes128cbc_hmac_sha1_test_vector); 11265 } 11266 11267 static int 11268 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void) 11269 { 11270 return test_authenticated_decryption_fail_when_tag_corrupted( 11271 &testsuite_params, 11272 &unittest_params, 11273 &aes128cbc_hmac_sha1_test_vector); 11274 } 11275 11276 static int 11277 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check(void) 11278 { 11279 return test_authenticated_encryt_with_esn( 11280 &testsuite_params, 11281 &unittest_params, 11282 &aes128cbc_hmac_sha1_aad_test_vector); 11283 } 11284 11285 static int 11286 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check(void) 11287 { 11288 return test_authenticated_decrypt_with_esn( 11289 &testsuite_params, 11290 &unittest_params, 11291 &aes128cbc_hmac_sha1_aad_test_vector); 11292 } 11293 11294 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER 11295 11296 /* global AESNI slave IDs for the scheduler test */ 11297 uint8_t aesni_ids[2]; 11298 11299 static int 11300 test_scheduler_attach_slave_op(void) 11301 { 11302 struct crypto_testsuite_params *ts_params = &testsuite_params; 11303 uint8_t sched_id = ts_params->valid_devs[0]; 11304 uint32_t nb_devs, i, nb_devs_attached = 0; 11305 int ret; 11306 char vdev_name[32]; 11307 11308 /* create 2 AESNI_MB if necessary */ 11309 nb_devs = rte_cryptodev_device_count_by_driver( 11310 rte_cryptodev_driver_id_get( 11311 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))); 11312 if (nb_devs < 2) { 11313 for (i = nb_devs; i < 2; i++) { 11314 snprintf(vdev_name, sizeof(vdev_name), "%s_%u", 11315 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), 11316 i); 11317 ret = rte_vdev_init(vdev_name, NULL); 11318 11319 TEST_ASSERT(ret == 0, 11320 "Failed to create instance %u of" 11321 " pmd : %s", 11322 i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)); 11323 } 11324 } 11325 11326 /* attach 2 AESNI_MB cdevs */ 11327 for (i = 0; i < rte_cryptodev_count() && nb_devs_attached < 2; 11328 i++) { 11329 struct rte_cryptodev_info info; 11330 unsigned int session_size; 11331 11332 rte_cryptodev_info_get(i, &info); 11333 if (info.driver_id != rte_cryptodev_driver_id_get( 11334 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD))) 11335 continue; 11336 11337 session_size = rte_cryptodev_sym_get_private_session_size(i); 11338 /* 11339 * Create the session mempool again, since now there are new devices 11340 * to use the mempool. 11341 */ 11342 if (ts_params->session_mpool) { 11343 rte_mempool_free(ts_params->session_mpool); 11344 ts_params->session_mpool = NULL; 11345 } 11346 if (ts_params->session_priv_mpool) { 11347 rte_mempool_free(ts_params->session_priv_mpool); 11348 ts_params->session_priv_mpool = NULL; 11349 } 11350 11351 if (info.sym.max_nb_sessions != 0 && 11352 info.sym.max_nb_sessions < MAX_NB_SESSIONS) { 11353 RTE_LOG(ERR, USER1, 11354 "Device does not support " 11355 "at least %u sessions\n", 11356 MAX_NB_SESSIONS); 11357 return TEST_FAILED; 11358 } 11359 /* 11360 * Create mempool with maximum number of sessions, 11361 * to include the session headers 11362 */ 11363 if (ts_params->session_mpool == NULL) { 11364 ts_params->session_mpool = 11365 rte_cryptodev_sym_session_pool_create( 11366 "test_sess_mp", 11367 MAX_NB_SESSIONS, 0, 0, 0, 11368 SOCKET_ID_ANY); 11369 TEST_ASSERT_NOT_NULL(ts_params->session_mpool, 11370 "session mempool allocation failed"); 11371 } 11372 11373 /* 11374 * Create mempool with maximum number of sessions, 11375 * to include device specific session private data 11376 */ 11377 if (ts_params->session_priv_mpool == NULL) { 11378 ts_params->session_priv_mpool = rte_mempool_create( 11379 "test_sess_mp_priv", 11380 MAX_NB_SESSIONS, 11381 session_size, 11382 0, 0, NULL, NULL, NULL, 11383 NULL, SOCKET_ID_ANY, 11384 0); 11385 11386 TEST_ASSERT_NOT_NULL(ts_params->session_priv_mpool, 11387 "session mempool allocation failed"); 11388 } 11389 11390 ts_params->qp_conf.mp_session = ts_params->session_mpool; 11391 ts_params->qp_conf.mp_session_private = 11392 ts_params->session_priv_mpool; 11393 11394 ret = rte_cryptodev_scheduler_slave_attach(sched_id, 11395 (uint8_t)i); 11396 11397 TEST_ASSERT(ret == 0, 11398 "Failed to attach device %u of pmd : %s", i, 11399 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)); 11400 11401 aesni_ids[nb_devs_attached] = (uint8_t)i; 11402 11403 nb_devs_attached++; 11404 } 11405 11406 return 0; 11407 } 11408 11409 static int 11410 test_scheduler_detach_slave_op(void) 11411 { 11412 struct crypto_testsuite_params *ts_params = &testsuite_params; 11413 uint8_t sched_id = ts_params->valid_devs[0]; 11414 uint32_t i; 11415 int ret; 11416 11417 for (i = 0; i < 2; i++) { 11418 ret = rte_cryptodev_scheduler_slave_detach(sched_id, 11419 aesni_ids[i]); 11420 TEST_ASSERT(ret == 0, 11421 "Failed to detach device %u", aesni_ids[i]); 11422 } 11423 11424 return 0; 11425 } 11426 11427 static int 11428 test_scheduler_mode_op(enum rte_cryptodev_scheduler_mode scheduler_mode) 11429 { 11430 struct crypto_testsuite_params *ts_params = &testsuite_params; 11431 uint8_t sched_id = ts_params->valid_devs[0]; 11432 /* set mode */ 11433 return rte_cryptodev_scheduler_mode_set(sched_id, 11434 scheduler_mode); 11435 } 11436 11437 static int 11438 test_scheduler_mode_roundrobin_op(void) 11439 { 11440 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_ROUNDROBIN) == 11441 0, "Failed to set roundrobin mode"); 11442 return 0; 11443 11444 } 11445 11446 static int 11447 test_scheduler_mode_multicore_op(void) 11448 { 11449 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_MULTICORE) == 11450 0, "Failed to set multicore mode"); 11451 11452 return 0; 11453 } 11454 11455 static int 11456 test_scheduler_mode_failover_op(void) 11457 { 11458 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_FAILOVER) == 11459 0, "Failed to set failover mode"); 11460 11461 return 0; 11462 } 11463 11464 static int 11465 test_scheduler_mode_pkt_size_distr_op(void) 11466 { 11467 TEST_ASSERT(test_scheduler_mode_op(CDEV_SCHED_MODE_PKT_SIZE_DISTR) == 11468 0, "Failed to set pktsize mode"); 11469 11470 return 0; 11471 } 11472 11473 static struct unit_test_suite cryptodev_scheduler_testsuite = { 11474 .suite_name = "Crypto Device Scheduler Unit Test Suite", 11475 .setup = testsuite_setup, 11476 .teardown = testsuite_teardown, 11477 .unit_test_cases = { 11478 /* Multi Core */ 11479 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op), 11480 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_multicore_op), 11481 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 11482 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 11483 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 11484 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op), 11485 11486 /* Round Robin */ 11487 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op), 11488 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_roundrobin_op), 11489 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 11490 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 11491 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 11492 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op), 11493 11494 /* Fail over */ 11495 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op), 11496 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_failover_op), 11497 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 11498 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 11499 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 11500 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op), 11501 11502 /* PKT SIZE */ 11503 TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op), 11504 TEST_CASE_ST(NULL, NULL, test_scheduler_mode_pkt_size_distr_op), 11505 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 11506 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 11507 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 11508 TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op), 11509 11510 TEST_CASES_END() /**< NULL terminate unit test array */ 11511 } 11512 }; 11513 11514 #endif /* RTE_LIBRTE_PMD_CRYPTO_SCHEDULER */ 11515 11516 static struct unit_test_suite cryptodev_testsuite = { 11517 .suite_name = "Crypto Unit Test Suite", 11518 .setup = testsuite_setup, 11519 .teardown = testsuite_teardown, 11520 .unit_test_cases = { 11521 TEST_CASE_ST(ut_setup, ut_teardown, 11522 test_device_configure_invalid_dev_id), 11523 TEST_CASE_ST(ut_setup, ut_teardown, 11524 test_device_configure_invalid_queue_pair_ids), 11525 TEST_CASE_ST(ut_setup, ut_teardown, 11526 test_queue_pair_descriptor_setup), 11527 11528 TEST_CASE_ST(ut_setup, ut_teardown, 11529 test_multi_session), 11530 TEST_CASE_ST(ut_setup, ut_teardown, 11531 test_multi_session_random_usage), 11532 11533 TEST_CASE_ST(ut_setup, ut_teardown, 11534 test_null_invalid_operation), 11535 TEST_CASE_ST(ut_setup, ut_teardown, test_null_burst_operation), 11536 11537 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 11538 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 11539 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 11540 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 11541 TEST_CASE_ST(ut_setup, ut_teardown, test_DES_cipheronly_all), 11542 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_docsis_all), 11543 TEST_CASE_ST(ut_setup, ut_teardown, test_DES_docsis_all), 11544 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 11545 TEST_CASE_ST(ut_setup, ut_teardown, test_stats), 11546 11547 /** AES CCM Authenticated Encryption 128 bits key */ 11548 TEST_CASE_ST(ut_setup, ut_teardown, 11549 test_AES_CCM_authenticated_encryption_test_case_128_1), 11550 TEST_CASE_ST(ut_setup, ut_teardown, 11551 test_AES_CCM_authenticated_encryption_test_case_128_2), 11552 TEST_CASE_ST(ut_setup, ut_teardown, 11553 test_AES_CCM_authenticated_encryption_test_case_128_3), 11554 11555 /** AES CCM Authenticated Decryption 128 bits key*/ 11556 TEST_CASE_ST(ut_setup, ut_teardown, 11557 test_AES_CCM_authenticated_decryption_test_case_128_1), 11558 TEST_CASE_ST(ut_setup, ut_teardown, 11559 test_AES_CCM_authenticated_decryption_test_case_128_2), 11560 TEST_CASE_ST(ut_setup, ut_teardown, 11561 test_AES_CCM_authenticated_decryption_test_case_128_3), 11562 11563 /** AES CCM Authenticated Encryption 192 bits key */ 11564 TEST_CASE_ST(ut_setup, ut_teardown, 11565 test_AES_CCM_authenticated_encryption_test_case_192_1), 11566 TEST_CASE_ST(ut_setup, ut_teardown, 11567 test_AES_CCM_authenticated_encryption_test_case_192_2), 11568 TEST_CASE_ST(ut_setup, ut_teardown, 11569 test_AES_CCM_authenticated_encryption_test_case_192_3), 11570 11571 /** AES CCM Authenticated Decryption 192 bits key*/ 11572 TEST_CASE_ST(ut_setup, ut_teardown, 11573 test_AES_CCM_authenticated_decryption_test_case_192_1), 11574 TEST_CASE_ST(ut_setup, ut_teardown, 11575 test_AES_CCM_authenticated_decryption_test_case_192_2), 11576 TEST_CASE_ST(ut_setup, ut_teardown, 11577 test_AES_CCM_authenticated_decryption_test_case_192_3), 11578 11579 /** AES CCM Authenticated Encryption 256 bits key */ 11580 TEST_CASE_ST(ut_setup, ut_teardown, 11581 test_AES_CCM_authenticated_encryption_test_case_256_1), 11582 TEST_CASE_ST(ut_setup, ut_teardown, 11583 test_AES_CCM_authenticated_encryption_test_case_256_2), 11584 TEST_CASE_ST(ut_setup, ut_teardown, 11585 test_AES_CCM_authenticated_encryption_test_case_256_3), 11586 11587 /** AES CCM Authenticated Decryption 256 bits key*/ 11588 TEST_CASE_ST(ut_setup, ut_teardown, 11589 test_AES_CCM_authenticated_decryption_test_case_256_1), 11590 TEST_CASE_ST(ut_setup, ut_teardown, 11591 test_AES_CCM_authenticated_decryption_test_case_256_2), 11592 TEST_CASE_ST(ut_setup, ut_teardown, 11593 test_AES_CCM_authenticated_decryption_test_case_256_3), 11594 11595 /** AES GCM Authenticated Encryption */ 11596 TEST_CASE_ST(ut_setup, ut_teardown, 11597 test_AES_GCM_auth_encrypt_SGL_in_place_1500B), 11598 TEST_CASE_ST(ut_setup, ut_teardown, 11599 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B), 11600 TEST_CASE_ST(ut_setup, ut_teardown, 11601 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B), 11602 TEST_CASE_ST(ut_setup, ut_teardown, 11603 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg), 11604 TEST_CASE_ST(ut_setup, ut_teardown, 11605 test_AES_GCM_authenticated_encryption_test_case_1), 11606 TEST_CASE_ST(ut_setup, ut_teardown, 11607 test_AES_GCM_authenticated_encryption_test_case_2), 11608 TEST_CASE_ST(ut_setup, ut_teardown, 11609 test_AES_GCM_authenticated_encryption_test_case_3), 11610 TEST_CASE_ST(ut_setup, ut_teardown, 11611 test_AES_GCM_authenticated_encryption_test_case_4), 11612 TEST_CASE_ST(ut_setup, ut_teardown, 11613 test_AES_GCM_authenticated_encryption_test_case_5), 11614 TEST_CASE_ST(ut_setup, ut_teardown, 11615 test_AES_GCM_authenticated_encryption_test_case_6), 11616 TEST_CASE_ST(ut_setup, ut_teardown, 11617 test_AES_GCM_authenticated_encryption_test_case_7), 11618 TEST_CASE_ST(ut_setup, ut_teardown, 11619 test_AES_GCM_authenticated_encryption_test_case_8), 11620 11621 /** AES GCM Authenticated Decryption */ 11622 TEST_CASE_ST(ut_setup, ut_teardown, 11623 test_AES_GCM_authenticated_decryption_test_case_1), 11624 TEST_CASE_ST(ut_setup, ut_teardown, 11625 test_AES_GCM_authenticated_decryption_test_case_2), 11626 TEST_CASE_ST(ut_setup, ut_teardown, 11627 test_AES_GCM_authenticated_decryption_test_case_3), 11628 TEST_CASE_ST(ut_setup, ut_teardown, 11629 test_AES_GCM_authenticated_decryption_test_case_4), 11630 TEST_CASE_ST(ut_setup, ut_teardown, 11631 test_AES_GCM_authenticated_decryption_test_case_5), 11632 TEST_CASE_ST(ut_setup, ut_teardown, 11633 test_AES_GCM_authenticated_decryption_test_case_6), 11634 TEST_CASE_ST(ut_setup, ut_teardown, 11635 test_AES_GCM_authenticated_decryption_test_case_7), 11636 TEST_CASE_ST(ut_setup, ut_teardown, 11637 test_AES_GCM_authenticated_decryption_test_case_8), 11638 11639 /** AES GCM Authenticated Encryption 192 bits key */ 11640 TEST_CASE_ST(ut_setup, ut_teardown, 11641 test_AES_GCM_auth_encryption_test_case_192_1), 11642 TEST_CASE_ST(ut_setup, ut_teardown, 11643 test_AES_GCM_auth_encryption_test_case_192_2), 11644 TEST_CASE_ST(ut_setup, ut_teardown, 11645 test_AES_GCM_auth_encryption_test_case_192_3), 11646 TEST_CASE_ST(ut_setup, ut_teardown, 11647 test_AES_GCM_auth_encryption_test_case_192_4), 11648 TEST_CASE_ST(ut_setup, ut_teardown, 11649 test_AES_GCM_auth_encryption_test_case_192_5), 11650 TEST_CASE_ST(ut_setup, ut_teardown, 11651 test_AES_GCM_auth_encryption_test_case_192_6), 11652 TEST_CASE_ST(ut_setup, ut_teardown, 11653 test_AES_GCM_auth_encryption_test_case_192_7), 11654 11655 /** AES GCM Authenticated Decryption 192 bits key */ 11656 TEST_CASE_ST(ut_setup, ut_teardown, 11657 test_AES_GCM_auth_decryption_test_case_192_1), 11658 TEST_CASE_ST(ut_setup, ut_teardown, 11659 test_AES_GCM_auth_decryption_test_case_192_2), 11660 TEST_CASE_ST(ut_setup, ut_teardown, 11661 test_AES_GCM_auth_decryption_test_case_192_3), 11662 TEST_CASE_ST(ut_setup, ut_teardown, 11663 test_AES_GCM_auth_decryption_test_case_192_4), 11664 TEST_CASE_ST(ut_setup, ut_teardown, 11665 test_AES_GCM_auth_decryption_test_case_192_5), 11666 TEST_CASE_ST(ut_setup, ut_teardown, 11667 test_AES_GCM_auth_decryption_test_case_192_6), 11668 TEST_CASE_ST(ut_setup, ut_teardown, 11669 test_AES_GCM_auth_decryption_test_case_192_7), 11670 11671 /** AES GCM Authenticated Encryption 256 bits key */ 11672 TEST_CASE_ST(ut_setup, ut_teardown, 11673 test_AES_GCM_auth_encryption_test_case_256_1), 11674 TEST_CASE_ST(ut_setup, ut_teardown, 11675 test_AES_GCM_auth_encryption_test_case_256_2), 11676 TEST_CASE_ST(ut_setup, ut_teardown, 11677 test_AES_GCM_auth_encryption_test_case_256_3), 11678 TEST_CASE_ST(ut_setup, ut_teardown, 11679 test_AES_GCM_auth_encryption_test_case_256_4), 11680 TEST_CASE_ST(ut_setup, ut_teardown, 11681 test_AES_GCM_auth_encryption_test_case_256_5), 11682 TEST_CASE_ST(ut_setup, ut_teardown, 11683 test_AES_GCM_auth_encryption_test_case_256_6), 11684 TEST_CASE_ST(ut_setup, ut_teardown, 11685 test_AES_GCM_auth_encryption_test_case_256_7), 11686 11687 /** AES GCM Authenticated Decryption 256 bits key */ 11688 TEST_CASE_ST(ut_setup, ut_teardown, 11689 test_AES_GCM_auth_decryption_test_case_256_1), 11690 TEST_CASE_ST(ut_setup, ut_teardown, 11691 test_AES_GCM_auth_decryption_test_case_256_2), 11692 TEST_CASE_ST(ut_setup, ut_teardown, 11693 test_AES_GCM_auth_decryption_test_case_256_3), 11694 TEST_CASE_ST(ut_setup, ut_teardown, 11695 test_AES_GCM_auth_decryption_test_case_256_4), 11696 TEST_CASE_ST(ut_setup, ut_teardown, 11697 test_AES_GCM_auth_decryption_test_case_256_5), 11698 TEST_CASE_ST(ut_setup, ut_teardown, 11699 test_AES_GCM_auth_decryption_test_case_256_6), 11700 TEST_CASE_ST(ut_setup, ut_teardown, 11701 test_AES_GCM_auth_decryption_test_case_256_7), 11702 11703 /** AES GCM Authenticated Encryption big aad size */ 11704 TEST_CASE_ST(ut_setup, ut_teardown, 11705 test_AES_GCM_auth_encryption_test_case_aad_1), 11706 TEST_CASE_ST(ut_setup, ut_teardown, 11707 test_AES_GCM_auth_encryption_test_case_aad_2), 11708 11709 /** AES GCM Authenticated Decryption big aad size */ 11710 TEST_CASE_ST(ut_setup, ut_teardown, 11711 test_AES_GCM_auth_decryption_test_case_aad_1), 11712 TEST_CASE_ST(ut_setup, ut_teardown, 11713 test_AES_GCM_auth_decryption_test_case_aad_2), 11714 11715 /** Out of place tests */ 11716 TEST_CASE_ST(ut_setup, ut_teardown, 11717 test_AES_GCM_authenticated_encryption_oop_test_case_1), 11718 TEST_CASE_ST(ut_setup, ut_teardown, 11719 test_AES_GCM_authenticated_decryption_oop_test_case_1), 11720 11721 /** Session-less tests */ 11722 TEST_CASE_ST(ut_setup, ut_teardown, 11723 test_AES_GCM_authenticated_encryption_sessionless_test_case_1), 11724 TEST_CASE_ST(ut_setup, ut_teardown, 11725 test_AES_GCM_authenticated_decryption_sessionless_test_case_1), 11726 11727 /** AES GMAC Authentication */ 11728 TEST_CASE_ST(ut_setup, ut_teardown, 11729 test_AES_GMAC_authentication_test_case_1), 11730 TEST_CASE_ST(ut_setup, ut_teardown, 11731 test_AES_GMAC_authentication_verify_test_case_1), 11732 TEST_CASE_ST(ut_setup, ut_teardown, 11733 test_AES_GMAC_authentication_test_case_2), 11734 TEST_CASE_ST(ut_setup, ut_teardown, 11735 test_AES_GMAC_authentication_verify_test_case_2), 11736 TEST_CASE_ST(ut_setup, ut_teardown, 11737 test_AES_GMAC_authentication_test_case_3), 11738 TEST_CASE_ST(ut_setup, ut_teardown, 11739 test_AES_GMAC_authentication_verify_test_case_3), 11740 TEST_CASE_ST(ut_setup, ut_teardown, 11741 test_AES_GMAC_authentication_test_case_4), 11742 TEST_CASE_ST(ut_setup, ut_teardown, 11743 test_AES_GMAC_authentication_verify_test_case_4), 11744 11745 /** SNOW 3G encrypt only (UEA2) */ 11746 TEST_CASE_ST(ut_setup, ut_teardown, 11747 test_snow3g_encryption_test_case_1), 11748 TEST_CASE_ST(ut_setup, ut_teardown, 11749 test_snow3g_encryption_test_case_2), 11750 TEST_CASE_ST(ut_setup, ut_teardown, 11751 test_snow3g_encryption_test_case_3), 11752 TEST_CASE_ST(ut_setup, ut_teardown, 11753 test_snow3g_encryption_test_case_4), 11754 TEST_CASE_ST(ut_setup, ut_teardown, 11755 test_snow3g_encryption_test_case_5), 11756 11757 TEST_CASE_ST(ut_setup, ut_teardown, 11758 test_snow3g_encryption_test_case_1_oop), 11759 TEST_CASE_ST(ut_setup, ut_teardown, 11760 test_snow3g_encryption_test_case_1_oop_sgl), 11761 TEST_CASE_ST(ut_setup, ut_teardown, 11762 test_snow3g_encryption_test_case_1_offset_oop), 11763 TEST_CASE_ST(ut_setup, ut_teardown, 11764 test_snow3g_decryption_test_case_1_oop), 11765 11766 /** SNOW 3G generate auth, then encrypt (UEA2) */ 11767 TEST_CASE_ST(ut_setup, ut_teardown, 11768 test_snow3g_auth_cipher_test_case_1), 11769 TEST_CASE_ST(ut_setup, ut_teardown, 11770 test_snow3g_auth_cipher_test_case_2), 11771 TEST_CASE_ST(ut_setup, ut_teardown, 11772 test_snow3g_auth_cipher_test_case_2_oop), 11773 TEST_CASE_ST(ut_setup, ut_teardown, 11774 test_snow3g_auth_cipher_part_digest_enc), 11775 TEST_CASE_ST(ut_setup, ut_teardown, 11776 test_snow3g_auth_cipher_part_digest_enc_oop), 11777 TEST_CASE_ST(ut_setup, ut_teardown, 11778 test_snow3g_auth_cipher_test_case_3_sgl), 11779 TEST_CASE_ST(ut_setup, ut_teardown, 11780 test_snow3g_auth_cipher_test_case_3_oop_sgl), 11781 TEST_CASE_ST(ut_setup, ut_teardown, 11782 test_snow3g_auth_cipher_part_digest_enc_sgl), 11783 TEST_CASE_ST(ut_setup, ut_teardown, 11784 test_snow3g_auth_cipher_part_digest_enc_oop_sgl), 11785 11786 /** SNOW 3G decrypt (UEA2), then verify auth */ 11787 TEST_CASE_ST(ut_setup, ut_teardown, 11788 test_snow3g_auth_cipher_verify_test_case_1), 11789 TEST_CASE_ST(ut_setup, ut_teardown, 11790 test_snow3g_auth_cipher_verify_test_case_2), 11791 TEST_CASE_ST(ut_setup, ut_teardown, 11792 test_snow3g_auth_cipher_verify_test_case_2_oop), 11793 TEST_CASE_ST(ut_setup, ut_teardown, 11794 test_snow3g_auth_cipher_verify_part_digest_enc), 11795 TEST_CASE_ST(ut_setup, ut_teardown, 11796 test_snow3g_auth_cipher_verify_part_digest_enc_oop), 11797 TEST_CASE_ST(ut_setup, ut_teardown, 11798 test_snow3g_auth_cipher_verify_test_case_3_sgl), 11799 TEST_CASE_ST(ut_setup, ut_teardown, 11800 test_snow3g_auth_cipher_verify_test_case_3_oop_sgl), 11801 TEST_CASE_ST(ut_setup, ut_teardown, 11802 test_snow3g_auth_cipher_verify_part_digest_enc_sgl), 11803 TEST_CASE_ST(ut_setup, ut_teardown, 11804 test_snow3g_auth_cipher_verify_part_digest_enc_oop_sgl), 11805 11806 /** SNOW 3G decrypt only (UEA2) */ 11807 TEST_CASE_ST(ut_setup, ut_teardown, 11808 test_snow3g_decryption_test_case_1), 11809 TEST_CASE_ST(ut_setup, ut_teardown, 11810 test_snow3g_decryption_test_case_2), 11811 TEST_CASE_ST(ut_setup, ut_teardown, 11812 test_snow3g_decryption_test_case_3), 11813 TEST_CASE_ST(ut_setup, ut_teardown, 11814 test_snow3g_decryption_test_case_4), 11815 TEST_CASE_ST(ut_setup, ut_teardown, 11816 test_snow3g_decryption_test_case_5), 11817 TEST_CASE_ST(ut_setup, ut_teardown, 11818 test_snow3g_decryption_with_digest_test_case_1), 11819 TEST_CASE_ST(ut_setup, ut_teardown, 11820 test_snow3g_hash_generate_test_case_1), 11821 TEST_CASE_ST(ut_setup, ut_teardown, 11822 test_snow3g_hash_generate_test_case_2), 11823 TEST_CASE_ST(ut_setup, ut_teardown, 11824 test_snow3g_hash_generate_test_case_3), 11825 /* Tests with buffers which length is not byte-aligned */ 11826 TEST_CASE_ST(ut_setup, ut_teardown, 11827 test_snow3g_hash_generate_test_case_4), 11828 TEST_CASE_ST(ut_setup, ut_teardown, 11829 test_snow3g_hash_generate_test_case_5), 11830 TEST_CASE_ST(ut_setup, ut_teardown, 11831 test_snow3g_hash_generate_test_case_6), 11832 TEST_CASE_ST(ut_setup, ut_teardown, 11833 test_snow3g_hash_verify_test_case_1), 11834 TEST_CASE_ST(ut_setup, ut_teardown, 11835 test_snow3g_hash_verify_test_case_2), 11836 TEST_CASE_ST(ut_setup, ut_teardown, 11837 test_snow3g_hash_verify_test_case_3), 11838 /* Tests with buffers which length is not byte-aligned */ 11839 TEST_CASE_ST(ut_setup, ut_teardown, 11840 test_snow3g_hash_verify_test_case_4), 11841 TEST_CASE_ST(ut_setup, ut_teardown, 11842 test_snow3g_hash_verify_test_case_5), 11843 TEST_CASE_ST(ut_setup, ut_teardown, 11844 test_snow3g_hash_verify_test_case_6), 11845 TEST_CASE_ST(ut_setup, ut_teardown, 11846 test_snow3g_cipher_auth_test_case_1), 11847 TEST_CASE_ST(ut_setup, ut_teardown, 11848 test_snow3g_auth_cipher_with_digest_test_case_1), 11849 11850 /** ZUC encrypt only (EEA3) */ 11851 TEST_CASE_ST(ut_setup, ut_teardown, 11852 test_zuc_encryption_test_case_1), 11853 TEST_CASE_ST(ut_setup, ut_teardown, 11854 test_zuc_encryption_test_case_2), 11855 TEST_CASE_ST(ut_setup, ut_teardown, 11856 test_zuc_encryption_test_case_3), 11857 TEST_CASE_ST(ut_setup, ut_teardown, 11858 test_zuc_encryption_test_case_4), 11859 TEST_CASE_ST(ut_setup, ut_teardown, 11860 test_zuc_encryption_test_case_5), 11861 TEST_CASE_ST(ut_setup, ut_teardown, 11862 test_zuc_encryption_test_case_6_sgl), 11863 11864 /** ZUC authenticate (EIA3) */ 11865 TEST_CASE_ST(ut_setup, ut_teardown, 11866 test_zuc_hash_generate_test_case_1), 11867 TEST_CASE_ST(ut_setup, ut_teardown, 11868 test_zuc_hash_generate_test_case_2), 11869 TEST_CASE_ST(ut_setup, ut_teardown, 11870 test_zuc_hash_generate_test_case_3), 11871 TEST_CASE_ST(ut_setup, ut_teardown, 11872 test_zuc_hash_generate_test_case_4), 11873 TEST_CASE_ST(ut_setup, ut_teardown, 11874 test_zuc_hash_generate_test_case_5), 11875 TEST_CASE_ST(ut_setup, ut_teardown, 11876 test_zuc_hash_generate_test_case_6), 11877 TEST_CASE_ST(ut_setup, ut_teardown, 11878 test_zuc_hash_generate_test_case_7), 11879 TEST_CASE_ST(ut_setup, ut_teardown, 11880 test_zuc_hash_generate_test_case_8), 11881 11882 /** ZUC alg-chain (EEA3/EIA3) */ 11883 TEST_CASE_ST(ut_setup, ut_teardown, 11884 test_zuc_cipher_auth_test_case_1), 11885 TEST_CASE_ST(ut_setup, ut_teardown, 11886 test_zuc_cipher_auth_test_case_2), 11887 11888 /** ZUC generate auth, then encrypt (EEA3) */ 11889 TEST_CASE_ST(ut_setup, ut_teardown, 11890 test_zuc_auth_cipher_test_case_1), 11891 TEST_CASE_ST(ut_setup, ut_teardown, 11892 test_zuc_auth_cipher_test_case_1_oop), 11893 TEST_CASE_ST(ut_setup, ut_teardown, 11894 test_zuc_auth_cipher_test_case_1_sgl), 11895 TEST_CASE_ST(ut_setup, ut_teardown, 11896 test_zuc_auth_cipher_test_case_1_oop_sgl), 11897 11898 /** ZUC decrypt (EEA3), then verify auth */ 11899 TEST_CASE_ST(ut_setup, ut_teardown, 11900 test_zuc_auth_cipher_verify_test_case_1), 11901 TEST_CASE_ST(ut_setup, ut_teardown, 11902 test_zuc_auth_cipher_verify_test_case_1_oop), 11903 TEST_CASE_ST(ut_setup, ut_teardown, 11904 test_zuc_auth_cipher_verify_test_case_1_sgl), 11905 TEST_CASE_ST(ut_setup, ut_teardown, 11906 test_zuc_auth_cipher_verify_test_case_1_oop_sgl), 11907 11908 /** HMAC_MD5 Authentication */ 11909 TEST_CASE_ST(ut_setup, ut_teardown, 11910 test_MD5_HMAC_generate_case_1), 11911 TEST_CASE_ST(ut_setup, ut_teardown, 11912 test_MD5_HMAC_verify_case_1), 11913 TEST_CASE_ST(ut_setup, ut_teardown, 11914 test_MD5_HMAC_generate_case_2), 11915 TEST_CASE_ST(ut_setup, ut_teardown, 11916 test_MD5_HMAC_verify_case_2), 11917 11918 /** KASUMI hash only (UIA1) */ 11919 TEST_CASE_ST(ut_setup, ut_teardown, 11920 test_kasumi_hash_generate_test_case_1), 11921 TEST_CASE_ST(ut_setup, ut_teardown, 11922 test_kasumi_hash_generate_test_case_2), 11923 TEST_CASE_ST(ut_setup, ut_teardown, 11924 test_kasumi_hash_generate_test_case_3), 11925 TEST_CASE_ST(ut_setup, ut_teardown, 11926 test_kasumi_hash_generate_test_case_4), 11927 TEST_CASE_ST(ut_setup, ut_teardown, 11928 test_kasumi_hash_generate_test_case_5), 11929 TEST_CASE_ST(ut_setup, ut_teardown, 11930 test_kasumi_hash_generate_test_case_6), 11931 11932 TEST_CASE_ST(ut_setup, ut_teardown, 11933 test_kasumi_hash_verify_test_case_1), 11934 TEST_CASE_ST(ut_setup, ut_teardown, 11935 test_kasumi_hash_verify_test_case_2), 11936 TEST_CASE_ST(ut_setup, ut_teardown, 11937 test_kasumi_hash_verify_test_case_3), 11938 TEST_CASE_ST(ut_setup, ut_teardown, 11939 test_kasumi_hash_verify_test_case_4), 11940 TEST_CASE_ST(ut_setup, ut_teardown, 11941 test_kasumi_hash_verify_test_case_5), 11942 11943 /** KASUMI encrypt only (UEA1) */ 11944 TEST_CASE_ST(ut_setup, ut_teardown, 11945 test_kasumi_encryption_test_case_1), 11946 TEST_CASE_ST(ut_setup, ut_teardown, 11947 test_kasumi_encryption_test_case_1_sgl), 11948 TEST_CASE_ST(ut_setup, ut_teardown, 11949 test_kasumi_encryption_test_case_1_oop), 11950 TEST_CASE_ST(ut_setup, ut_teardown, 11951 test_kasumi_encryption_test_case_1_oop_sgl), 11952 TEST_CASE_ST(ut_setup, ut_teardown, 11953 test_kasumi_encryption_test_case_2), 11954 TEST_CASE_ST(ut_setup, ut_teardown, 11955 test_kasumi_encryption_test_case_3), 11956 TEST_CASE_ST(ut_setup, ut_teardown, 11957 test_kasumi_encryption_test_case_4), 11958 TEST_CASE_ST(ut_setup, ut_teardown, 11959 test_kasumi_encryption_test_case_5), 11960 11961 /** KASUMI decrypt only (UEA1) */ 11962 TEST_CASE_ST(ut_setup, ut_teardown, 11963 test_kasumi_decryption_test_case_1), 11964 TEST_CASE_ST(ut_setup, ut_teardown, 11965 test_kasumi_decryption_test_case_2), 11966 TEST_CASE_ST(ut_setup, ut_teardown, 11967 test_kasumi_decryption_test_case_3), 11968 TEST_CASE_ST(ut_setup, ut_teardown, 11969 test_kasumi_decryption_test_case_4), 11970 TEST_CASE_ST(ut_setup, ut_teardown, 11971 test_kasumi_decryption_test_case_5), 11972 TEST_CASE_ST(ut_setup, ut_teardown, 11973 test_kasumi_decryption_test_case_1_oop), 11974 11975 TEST_CASE_ST(ut_setup, ut_teardown, 11976 test_kasumi_cipher_auth_test_case_1), 11977 11978 /** KASUMI generate auth, then encrypt (F8) */ 11979 TEST_CASE_ST(ut_setup, ut_teardown, 11980 test_kasumi_auth_cipher_test_case_1), 11981 TEST_CASE_ST(ut_setup, ut_teardown, 11982 test_kasumi_auth_cipher_test_case_2), 11983 TEST_CASE_ST(ut_setup, ut_teardown, 11984 test_kasumi_auth_cipher_test_case_2_oop), 11985 TEST_CASE_ST(ut_setup, ut_teardown, 11986 test_kasumi_auth_cipher_test_case_2_sgl), 11987 TEST_CASE_ST(ut_setup, ut_teardown, 11988 test_kasumi_auth_cipher_test_case_2_oop_sgl), 11989 11990 /** KASUMI decrypt (F8), then verify auth */ 11991 TEST_CASE_ST(ut_setup, ut_teardown, 11992 test_kasumi_auth_cipher_verify_test_case_1), 11993 TEST_CASE_ST(ut_setup, ut_teardown, 11994 test_kasumi_auth_cipher_verify_test_case_2), 11995 TEST_CASE_ST(ut_setup, ut_teardown, 11996 test_kasumi_auth_cipher_verify_test_case_2_oop), 11997 TEST_CASE_ST(ut_setup, ut_teardown, 11998 test_kasumi_auth_cipher_verify_test_case_2_sgl), 11999 TEST_CASE_ST(ut_setup, ut_teardown, 12000 test_kasumi_auth_cipher_verify_test_case_2_oop_sgl), 12001 12002 /** ESN Testcase */ 12003 TEST_CASE_ST(ut_setup, ut_teardown, 12004 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check), 12005 TEST_CASE_ST(ut_setup, ut_teardown, 12006 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check), 12007 12008 /** Negative tests */ 12009 TEST_CASE_ST(ut_setup, ut_teardown, 12010 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12011 TEST_CASE_ST(ut_setup, ut_teardown, 12012 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12013 TEST_CASE_ST(ut_setup, ut_teardown, 12014 test_AES_GCM_auth_encryption_fail_iv_corrupt), 12015 TEST_CASE_ST(ut_setup, ut_teardown, 12016 test_AES_GCM_auth_encryption_fail_in_data_corrupt), 12017 TEST_CASE_ST(ut_setup, ut_teardown, 12018 test_AES_GCM_auth_encryption_fail_out_data_corrupt), 12019 TEST_CASE_ST(ut_setup, ut_teardown, 12020 test_AES_GCM_auth_encryption_fail_aad_len_corrupt), 12021 TEST_CASE_ST(ut_setup, ut_teardown, 12022 test_AES_GCM_auth_encryption_fail_aad_corrupt), 12023 TEST_CASE_ST(ut_setup, ut_teardown, 12024 test_AES_GCM_auth_encryption_fail_tag_corrupt), 12025 TEST_CASE_ST(ut_setup, ut_teardown, 12026 test_AES_GCM_auth_decryption_fail_iv_corrupt), 12027 TEST_CASE_ST(ut_setup, ut_teardown, 12028 test_AES_GCM_auth_decryption_fail_in_data_corrupt), 12029 TEST_CASE_ST(ut_setup, ut_teardown, 12030 test_AES_GCM_auth_decryption_fail_out_data_corrupt), 12031 TEST_CASE_ST(ut_setup, ut_teardown, 12032 test_AES_GCM_auth_decryption_fail_aad_len_corrupt), 12033 TEST_CASE_ST(ut_setup, ut_teardown, 12034 test_AES_GCM_auth_decryption_fail_aad_corrupt), 12035 TEST_CASE_ST(ut_setup, ut_teardown, 12036 test_AES_GCM_auth_decryption_fail_tag_corrupt), 12037 TEST_CASE_ST(ut_setup, ut_teardown, 12038 authentication_verify_AES128_GMAC_fail_data_corrupt), 12039 TEST_CASE_ST(ut_setup, ut_teardown, 12040 authentication_verify_AES128_GMAC_fail_tag_corrupt), 12041 TEST_CASE_ST(ut_setup, ut_teardown, 12042 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12043 TEST_CASE_ST(ut_setup, ut_teardown, 12044 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12045 12046 /** Mixed CIPHER + HASH algorithms */ 12047 /** AUTH AES CMAC + CIPHER AES CTR */ 12048 TEST_CASE_ST(ut_setup, ut_teardown, 12049 test_aes_cmac_aes_ctr_digest_enc_test_case_1), 12050 TEST_CASE_ST(ut_setup, ut_teardown, 12051 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop), 12052 TEST_CASE_ST(ut_setup, ut_teardown, 12053 test_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl), 12054 TEST_CASE_ST(ut_setup, ut_teardown, 12055 test_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl), 12056 TEST_CASE_ST(ut_setup, ut_teardown, 12057 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1), 12058 TEST_CASE_ST(ut_setup, ut_teardown, 12059 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop), 12060 TEST_CASE_ST(ut_setup, ut_teardown, 12061 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_sgl), 12062 TEST_CASE_ST(ut_setup, ut_teardown, 12063 test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl), 12064 12065 /** AUTH ZUC + CIPHER SNOW3G */ 12066 TEST_CASE_ST(ut_setup, ut_teardown, 12067 test_auth_zuc_cipher_snow_test_case_1), 12068 TEST_CASE_ST(ut_setup, ut_teardown, 12069 test_verify_auth_zuc_cipher_snow_test_case_1), 12070 /** AUTH AES CMAC + CIPHER SNOW3G */ 12071 TEST_CASE_ST(ut_setup, ut_teardown, 12072 test_auth_aes_cmac_cipher_snow_test_case_1), 12073 TEST_CASE_ST(ut_setup, ut_teardown, 12074 test_verify_auth_aes_cmac_cipher_snow_test_case_1), 12075 /** AUTH ZUC + CIPHER AES CTR */ 12076 TEST_CASE_ST(ut_setup, ut_teardown, 12077 test_auth_zuc_cipher_aes_ctr_test_case_1), 12078 TEST_CASE_ST(ut_setup, ut_teardown, 12079 test_verify_auth_zuc_cipher_aes_ctr_test_case_1), 12080 /** AUTH SNOW3G + CIPHER AES CTR */ 12081 TEST_CASE_ST(ut_setup, ut_teardown, 12082 test_auth_snow_cipher_aes_ctr_test_case_1), 12083 TEST_CASE_ST(ut_setup, ut_teardown, 12084 test_verify_auth_snow_cipher_aes_ctr_test_case_1), 12085 /** AUTH SNOW3G + CIPHER ZUC */ 12086 TEST_CASE_ST(ut_setup, ut_teardown, 12087 test_auth_snow_cipher_zuc_test_case_1), 12088 TEST_CASE_ST(ut_setup, ut_teardown, 12089 test_verify_auth_snow_cipher_zuc_test_case_1), 12090 /** AUTH AES CMAC + CIPHER ZUC */ 12091 TEST_CASE_ST(ut_setup, ut_teardown, 12092 test_auth_aes_cmac_cipher_zuc_test_case_1), 12093 TEST_CASE_ST(ut_setup, ut_teardown, 12094 test_verify_auth_aes_cmac_cipher_zuc_test_case_1), 12095 12096 /** AUTH NULL + CIPHER SNOW3G */ 12097 TEST_CASE_ST(ut_setup, ut_teardown, 12098 test_auth_null_cipher_snow_test_case_1), 12099 TEST_CASE_ST(ut_setup, ut_teardown, 12100 test_verify_auth_null_cipher_snow_test_case_1), 12101 /** AUTH NULL + CIPHER ZUC */ 12102 TEST_CASE_ST(ut_setup, ut_teardown, 12103 test_auth_null_cipher_zuc_test_case_1), 12104 TEST_CASE_ST(ut_setup, ut_teardown, 12105 test_verify_auth_null_cipher_zuc_test_case_1), 12106 /** AUTH SNOW3G + CIPHER NULL */ 12107 TEST_CASE_ST(ut_setup, ut_teardown, 12108 test_auth_snow_cipher_null_test_case_1), 12109 TEST_CASE_ST(ut_setup, ut_teardown, 12110 test_verify_auth_snow_cipher_null_test_case_1), 12111 /** AUTH ZUC + CIPHER NULL */ 12112 TEST_CASE_ST(ut_setup, ut_teardown, 12113 test_auth_zuc_cipher_null_test_case_1), 12114 TEST_CASE_ST(ut_setup, ut_teardown, 12115 test_verify_auth_zuc_cipher_null_test_case_1), 12116 /** AUTH NULL + CIPHER AES CTR */ 12117 TEST_CASE_ST(ut_setup, ut_teardown, 12118 test_auth_null_cipher_aes_ctr_test_case_1), 12119 TEST_CASE_ST(ut_setup, ut_teardown, 12120 test_verify_auth_null_cipher_aes_ctr_test_case_1), 12121 /** AUTH AES CMAC + CIPHER NULL */ 12122 TEST_CASE_ST(ut_setup, ut_teardown, 12123 test_auth_aes_cmac_cipher_null_test_case_1), 12124 TEST_CASE_ST(ut_setup, ut_teardown, 12125 test_verify_auth_aes_cmac_cipher_null_test_case_1), 12126 12127 TEST_CASES_END() /**< NULL terminate unit test array */ 12128 } 12129 }; 12130 12131 static struct unit_test_suite cryptodev_virtio_testsuite = { 12132 .suite_name = "Crypto VIRTIO Unit Test Suite", 12133 .setup = testsuite_setup, 12134 .teardown = testsuite_teardown, 12135 .unit_test_cases = { 12136 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12137 12138 TEST_CASES_END() /**< NULL terminate unit test array */ 12139 } 12140 }; 12141 12142 static struct unit_test_suite cryptodev_caam_jr_testsuite = { 12143 .suite_name = "Crypto CAAM JR Unit Test Suite", 12144 .setup = testsuite_setup, 12145 .teardown = testsuite_teardown, 12146 .unit_test_cases = { 12147 TEST_CASE_ST(ut_setup, ut_teardown, 12148 test_device_configure_invalid_dev_id), 12149 TEST_CASE_ST(ut_setup, ut_teardown, 12150 test_multi_session), 12151 12152 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12153 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12154 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12155 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12156 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12157 12158 TEST_CASES_END() /**< NULL terminate unit test array */ 12159 } 12160 }; 12161 12162 static struct unit_test_suite cryptodev_dpaa_sec_testsuite = { 12163 .suite_name = "Crypto DPAA_SEC Unit Test Suite", 12164 .setup = testsuite_setup, 12165 .teardown = testsuite_teardown, 12166 .unit_test_cases = { 12167 TEST_CASE_ST(ut_setup, ut_teardown, 12168 test_device_configure_invalid_dev_id), 12169 TEST_CASE_ST(ut_setup, ut_teardown, 12170 test_multi_session), 12171 12172 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12173 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12174 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12175 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12176 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12177 12178 #ifdef RTE_LIBRTE_SECURITY 12179 TEST_CASE_ST(ut_setup, ut_teardown, 12180 test_PDCP_PROTO_cplane_encap_all), 12181 12182 TEST_CASE_ST(ut_setup, ut_teardown, 12183 test_PDCP_PROTO_cplane_decap_all), 12184 12185 TEST_CASE_ST(ut_setup, ut_teardown, 12186 test_PDCP_PROTO_uplane_encap_all), 12187 12188 TEST_CASE_ST(ut_setup, ut_teardown, 12189 test_PDCP_PROTO_uplane_decap_all), 12190 12191 TEST_CASE_ST(ut_setup, ut_teardown, 12192 test_PDCP_PROTO_SGL_in_place_32B), 12193 TEST_CASE_ST(ut_setup, ut_teardown, 12194 test_PDCP_PROTO_SGL_oop_32B_128B), 12195 TEST_CASE_ST(ut_setup, ut_teardown, 12196 test_PDCP_PROTO_SGL_oop_32B_40B), 12197 TEST_CASE_ST(ut_setup, ut_teardown, 12198 test_PDCP_PROTO_SGL_oop_128B_32B), 12199 #endif 12200 /** AES GCM Authenticated Encryption */ 12201 TEST_CASE_ST(ut_setup, ut_teardown, 12202 test_AES_GCM_auth_encrypt_SGL_in_place_1500B), 12203 TEST_CASE_ST(ut_setup, ut_teardown, 12204 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B), 12205 TEST_CASE_ST(ut_setup, ut_teardown, 12206 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B), 12207 TEST_CASE_ST(ut_setup, ut_teardown, 12208 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg), 12209 TEST_CASE_ST(ut_setup, ut_teardown, 12210 test_AES_GCM_authenticated_encryption_test_case_1), 12211 TEST_CASE_ST(ut_setup, ut_teardown, 12212 test_AES_GCM_authenticated_encryption_test_case_2), 12213 TEST_CASE_ST(ut_setup, ut_teardown, 12214 test_AES_GCM_authenticated_encryption_test_case_3), 12215 TEST_CASE_ST(ut_setup, ut_teardown, 12216 test_AES_GCM_authenticated_encryption_test_case_4), 12217 TEST_CASE_ST(ut_setup, ut_teardown, 12218 test_AES_GCM_authenticated_encryption_test_case_5), 12219 TEST_CASE_ST(ut_setup, ut_teardown, 12220 test_AES_GCM_authenticated_encryption_test_case_6), 12221 TEST_CASE_ST(ut_setup, ut_teardown, 12222 test_AES_GCM_authenticated_encryption_test_case_7), 12223 TEST_CASE_ST(ut_setup, ut_teardown, 12224 test_AES_GCM_authenticated_encryption_test_case_8), 12225 12226 /** AES GCM Authenticated Decryption */ 12227 TEST_CASE_ST(ut_setup, ut_teardown, 12228 test_AES_GCM_authenticated_decryption_test_case_1), 12229 TEST_CASE_ST(ut_setup, ut_teardown, 12230 test_AES_GCM_authenticated_decryption_test_case_2), 12231 TEST_CASE_ST(ut_setup, ut_teardown, 12232 test_AES_GCM_authenticated_decryption_test_case_3), 12233 TEST_CASE_ST(ut_setup, ut_teardown, 12234 test_AES_GCM_authenticated_decryption_test_case_4), 12235 TEST_CASE_ST(ut_setup, ut_teardown, 12236 test_AES_GCM_authenticated_decryption_test_case_5), 12237 TEST_CASE_ST(ut_setup, ut_teardown, 12238 test_AES_GCM_authenticated_decryption_test_case_6), 12239 TEST_CASE_ST(ut_setup, ut_teardown, 12240 test_AES_GCM_authenticated_decryption_test_case_7), 12241 TEST_CASE_ST(ut_setup, ut_teardown, 12242 test_AES_GCM_authenticated_decryption_test_case_8), 12243 12244 /** AES GCM Authenticated Encryption 192 bits key */ 12245 TEST_CASE_ST(ut_setup, ut_teardown, 12246 test_AES_GCM_auth_encryption_test_case_192_1), 12247 TEST_CASE_ST(ut_setup, ut_teardown, 12248 test_AES_GCM_auth_encryption_test_case_192_2), 12249 TEST_CASE_ST(ut_setup, ut_teardown, 12250 test_AES_GCM_auth_encryption_test_case_192_3), 12251 TEST_CASE_ST(ut_setup, ut_teardown, 12252 test_AES_GCM_auth_encryption_test_case_192_4), 12253 TEST_CASE_ST(ut_setup, ut_teardown, 12254 test_AES_GCM_auth_encryption_test_case_192_5), 12255 TEST_CASE_ST(ut_setup, ut_teardown, 12256 test_AES_GCM_auth_encryption_test_case_192_6), 12257 TEST_CASE_ST(ut_setup, ut_teardown, 12258 test_AES_GCM_auth_encryption_test_case_192_7), 12259 12260 /** AES GCM Authenticated Decryption 192 bits key */ 12261 TEST_CASE_ST(ut_setup, ut_teardown, 12262 test_AES_GCM_auth_decryption_test_case_192_1), 12263 TEST_CASE_ST(ut_setup, ut_teardown, 12264 test_AES_GCM_auth_decryption_test_case_192_2), 12265 TEST_CASE_ST(ut_setup, ut_teardown, 12266 test_AES_GCM_auth_decryption_test_case_192_3), 12267 TEST_CASE_ST(ut_setup, ut_teardown, 12268 test_AES_GCM_auth_decryption_test_case_192_4), 12269 TEST_CASE_ST(ut_setup, ut_teardown, 12270 test_AES_GCM_auth_decryption_test_case_192_5), 12271 TEST_CASE_ST(ut_setup, ut_teardown, 12272 test_AES_GCM_auth_decryption_test_case_192_6), 12273 TEST_CASE_ST(ut_setup, ut_teardown, 12274 test_AES_GCM_auth_decryption_test_case_192_7), 12275 12276 /** AES GCM Authenticated Encryption 256 bits key */ 12277 TEST_CASE_ST(ut_setup, ut_teardown, 12278 test_AES_GCM_auth_encryption_test_case_256_1), 12279 TEST_CASE_ST(ut_setup, ut_teardown, 12280 test_AES_GCM_auth_encryption_test_case_256_2), 12281 TEST_CASE_ST(ut_setup, ut_teardown, 12282 test_AES_GCM_auth_encryption_test_case_256_3), 12283 TEST_CASE_ST(ut_setup, ut_teardown, 12284 test_AES_GCM_auth_encryption_test_case_256_4), 12285 TEST_CASE_ST(ut_setup, ut_teardown, 12286 test_AES_GCM_auth_encryption_test_case_256_5), 12287 TEST_CASE_ST(ut_setup, ut_teardown, 12288 test_AES_GCM_auth_encryption_test_case_256_6), 12289 TEST_CASE_ST(ut_setup, ut_teardown, 12290 test_AES_GCM_auth_encryption_test_case_256_7), 12291 12292 /** AES GCM Authenticated Decryption 256 bits key */ 12293 TEST_CASE_ST(ut_setup, ut_teardown, 12294 test_AES_GCM_auth_decryption_test_case_256_1), 12295 TEST_CASE_ST(ut_setup, ut_teardown, 12296 test_AES_GCM_auth_decryption_test_case_256_2), 12297 TEST_CASE_ST(ut_setup, ut_teardown, 12298 test_AES_GCM_auth_decryption_test_case_256_3), 12299 TEST_CASE_ST(ut_setup, ut_teardown, 12300 test_AES_GCM_auth_decryption_test_case_256_4), 12301 TEST_CASE_ST(ut_setup, ut_teardown, 12302 test_AES_GCM_auth_decryption_test_case_256_5), 12303 TEST_CASE_ST(ut_setup, ut_teardown, 12304 test_AES_GCM_auth_decryption_test_case_256_6), 12305 TEST_CASE_ST(ut_setup, ut_teardown, 12306 test_AES_GCM_auth_decryption_test_case_256_7), 12307 12308 /** Out of place tests */ 12309 TEST_CASE_ST(ut_setup, ut_teardown, 12310 test_AES_GCM_authenticated_encryption_oop_test_case_1), 12311 TEST_CASE_ST(ut_setup, ut_teardown, 12312 test_AES_GCM_authenticated_decryption_oop_test_case_1), 12313 12314 /** SNOW 3G encrypt only (UEA2) */ 12315 TEST_CASE_ST(ut_setup, ut_teardown, 12316 test_snow3g_encryption_test_case_1), 12317 TEST_CASE_ST(ut_setup, ut_teardown, 12318 test_snow3g_encryption_test_case_2), 12319 TEST_CASE_ST(ut_setup, ut_teardown, 12320 test_snow3g_encryption_test_case_3), 12321 TEST_CASE_ST(ut_setup, ut_teardown, 12322 test_snow3g_encryption_test_case_4), 12323 TEST_CASE_ST(ut_setup, ut_teardown, 12324 test_snow3g_encryption_test_case_5), 12325 12326 TEST_CASE_ST(ut_setup, ut_teardown, 12327 test_snow3g_encryption_test_case_1_oop), 12328 TEST_CASE_ST(ut_setup, ut_teardown, 12329 test_snow3g_encryption_test_case_1_oop_sgl), 12330 TEST_CASE_ST(ut_setup, ut_teardown, 12331 test_snow3g_decryption_test_case_1_oop), 12332 12333 /** SNOW 3G decrypt only (UEA2) */ 12334 TEST_CASE_ST(ut_setup, ut_teardown, 12335 test_snow3g_decryption_test_case_1), 12336 TEST_CASE_ST(ut_setup, ut_teardown, 12337 test_snow3g_decryption_test_case_2), 12338 TEST_CASE_ST(ut_setup, ut_teardown, 12339 test_snow3g_decryption_test_case_3), 12340 TEST_CASE_ST(ut_setup, ut_teardown, 12341 test_snow3g_decryption_test_case_4), 12342 TEST_CASE_ST(ut_setup, ut_teardown, 12343 test_snow3g_decryption_test_case_5), 12344 12345 TEST_CASE_ST(ut_setup, ut_teardown, 12346 test_snow3g_hash_generate_test_case_1), 12347 TEST_CASE_ST(ut_setup, ut_teardown, 12348 test_snow3g_hash_generate_test_case_2), 12349 TEST_CASE_ST(ut_setup, ut_teardown, 12350 test_snow3g_hash_generate_test_case_3), 12351 TEST_CASE_ST(ut_setup, ut_teardown, 12352 test_snow3g_hash_verify_test_case_1), 12353 TEST_CASE_ST(ut_setup, ut_teardown, 12354 test_snow3g_hash_verify_test_case_2), 12355 TEST_CASE_ST(ut_setup, ut_teardown, 12356 test_snow3g_hash_verify_test_case_3), 12357 12358 /** ZUC encrypt only (EEA3) */ 12359 TEST_CASE_ST(ut_setup, ut_teardown, 12360 test_zuc_encryption_test_case_1), 12361 TEST_CASE_ST(ut_setup, ut_teardown, 12362 test_zuc_encryption_test_case_2), 12363 TEST_CASE_ST(ut_setup, ut_teardown, 12364 test_zuc_encryption_test_case_3), 12365 TEST_CASE_ST(ut_setup, ut_teardown, 12366 test_zuc_encryption_test_case_4), 12367 TEST_CASE_ST(ut_setup, ut_teardown, 12368 test_zuc_encryption_test_case_5), 12369 12370 /** ZUC authenticate (EIA3) */ 12371 TEST_CASE_ST(ut_setup, ut_teardown, 12372 test_zuc_hash_generate_test_case_6), 12373 TEST_CASE_ST(ut_setup, ut_teardown, 12374 test_zuc_hash_generate_test_case_7), 12375 TEST_CASE_ST(ut_setup, ut_teardown, 12376 test_zuc_hash_generate_test_case_8), 12377 12378 /** Negative tests */ 12379 TEST_CASE_ST(ut_setup, ut_teardown, 12380 test_AES_GCM_auth_encryption_fail_iv_corrupt), 12381 TEST_CASE_ST(ut_setup, ut_teardown, 12382 test_AES_GCM_auth_encryption_fail_in_data_corrupt), 12383 TEST_CASE_ST(ut_setup, ut_teardown, 12384 test_AES_GCM_auth_encryption_fail_out_data_corrupt), 12385 TEST_CASE_ST(ut_setup, ut_teardown, 12386 test_AES_GCM_auth_encryption_fail_aad_len_corrupt), 12387 TEST_CASE_ST(ut_setup, ut_teardown, 12388 test_AES_GCM_auth_encryption_fail_aad_corrupt), 12389 TEST_CASE_ST(ut_setup, ut_teardown, 12390 test_AES_GCM_auth_encryption_fail_tag_corrupt), 12391 TEST_CASE_ST(ut_setup, ut_teardown, 12392 test_AES_GCM_auth_decryption_fail_iv_corrupt), 12393 TEST_CASE_ST(ut_setup, ut_teardown, 12394 test_AES_GCM_auth_decryption_fail_in_data_corrupt), 12395 TEST_CASE_ST(ut_setup, ut_teardown, 12396 test_AES_GCM_auth_decryption_fail_out_data_corrupt), 12397 TEST_CASE_ST(ut_setup, ut_teardown, 12398 test_AES_GCM_auth_decryption_fail_aad_len_corrupt), 12399 TEST_CASE_ST(ut_setup, ut_teardown, 12400 test_AES_GCM_auth_decryption_fail_aad_corrupt), 12401 TEST_CASE_ST(ut_setup, ut_teardown, 12402 test_AES_GCM_auth_decryption_fail_tag_corrupt), 12403 TEST_CASE_ST(ut_setup, ut_teardown, 12404 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12405 TEST_CASE_ST(ut_setup, ut_teardown, 12406 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12407 TEST_CASE_ST(ut_setup, ut_teardown, 12408 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12409 TEST_CASE_ST(ut_setup, ut_teardown, 12410 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12411 12412 /* ESN Testcase */ 12413 TEST_CASE_ST(ut_setup, ut_teardown, 12414 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check), 12415 TEST_CASE_ST(ut_setup, ut_teardown, 12416 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check), 12417 12418 TEST_CASES_END() /**< NULL terminate unit test array */ 12419 } 12420 }; 12421 12422 static struct unit_test_suite cryptodev_dpaa2_sec_testsuite = { 12423 .suite_name = "Crypto DPAA2_SEC Unit Test Suite", 12424 .setup = testsuite_setup, 12425 .teardown = testsuite_teardown, 12426 .unit_test_cases = { 12427 TEST_CASE_ST(ut_setup, ut_teardown, 12428 test_device_configure_invalid_dev_id), 12429 TEST_CASE_ST(ut_setup, ut_teardown, 12430 test_multi_session), 12431 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12432 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12433 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12434 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12435 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12436 12437 #ifdef RTE_LIBRTE_SECURITY 12438 TEST_CASE_ST(ut_setup, ut_teardown, 12439 test_PDCP_PROTO_cplane_encap_all), 12440 12441 TEST_CASE_ST(ut_setup, ut_teardown, 12442 test_PDCP_PROTO_cplane_decap_all), 12443 12444 TEST_CASE_ST(ut_setup, ut_teardown, 12445 test_PDCP_PROTO_uplane_encap_all), 12446 12447 TEST_CASE_ST(ut_setup, ut_teardown, 12448 test_PDCP_PROTO_uplane_decap_all), 12449 12450 TEST_CASE_ST(ut_setup, ut_teardown, 12451 test_PDCP_PROTO_SGL_in_place_32B), 12452 TEST_CASE_ST(ut_setup, ut_teardown, 12453 test_PDCP_PROTO_SGL_oop_32B_128B), 12454 TEST_CASE_ST(ut_setup, ut_teardown, 12455 test_PDCP_PROTO_SGL_oop_32B_40B), 12456 TEST_CASE_ST(ut_setup, ut_teardown, 12457 test_PDCP_PROTO_SGL_oop_128B_32B), 12458 #endif 12459 /** AES GCM Authenticated Encryption */ 12460 TEST_CASE_ST(ut_setup, ut_teardown, 12461 test_AES_GCM_auth_encrypt_SGL_in_place_1500B), 12462 TEST_CASE_ST(ut_setup, ut_teardown, 12463 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_400B), 12464 TEST_CASE_ST(ut_setup, ut_teardown, 12465 test_AES_GCM_auth_encrypt_SGL_out_of_place_1500B_2000B), 12466 TEST_CASE_ST(ut_setup, ut_teardown, 12467 test_AES_GCM_auth_encrypt_SGL_out_of_place_400B_1seg), 12468 TEST_CASE_ST(ut_setup, ut_teardown, 12469 test_AES_GCM_authenticated_encryption_test_case_1), 12470 TEST_CASE_ST(ut_setup, ut_teardown, 12471 test_AES_GCM_authenticated_encryption_test_case_2), 12472 TEST_CASE_ST(ut_setup, ut_teardown, 12473 test_AES_GCM_authenticated_encryption_test_case_3), 12474 TEST_CASE_ST(ut_setup, ut_teardown, 12475 test_AES_GCM_authenticated_encryption_test_case_4), 12476 TEST_CASE_ST(ut_setup, ut_teardown, 12477 test_AES_GCM_authenticated_encryption_test_case_5), 12478 TEST_CASE_ST(ut_setup, ut_teardown, 12479 test_AES_GCM_authenticated_encryption_test_case_6), 12480 TEST_CASE_ST(ut_setup, ut_teardown, 12481 test_AES_GCM_authenticated_encryption_test_case_7), 12482 TEST_CASE_ST(ut_setup, ut_teardown, 12483 test_AES_GCM_authenticated_encryption_test_case_8), 12484 12485 /** AES GCM Authenticated Decryption */ 12486 TEST_CASE_ST(ut_setup, ut_teardown, 12487 test_AES_GCM_authenticated_decryption_test_case_1), 12488 TEST_CASE_ST(ut_setup, ut_teardown, 12489 test_AES_GCM_authenticated_decryption_test_case_2), 12490 TEST_CASE_ST(ut_setup, ut_teardown, 12491 test_AES_GCM_authenticated_decryption_test_case_3), 12492 TEST_CASE_ST(ut_setup, ut_teardown, 12493 test_AES_GCM_authenticated_decryption_test_case_4), 12494 TEST_CASE_ST(ut_setup, ut_teardown, 12495 test_AES_GCM_authenticated_decryption_test_case_5), 12496 TEST_CASE_ST(ut_setup, ut_teardown, 12497 test_AES_GCM_authenticated_decryption_test_case_6), 12498 TEST_CASE_ST(ut_setup, ut_teardown, 12499 test_AES_GCM_authenticated_decryption_test_case_7), 12500 TEST_CASE_ST(ut_setup, ut_teardown, 12501 test_AES_GCM_authenticated_decryption_test_case_8), 12502 12503 /** AES GCM Authenticated Encryption 192 bits key */ 12504 TEST_CASE_ST(ut_setup, ut_teardown, 12505 test_AES_GCM_auth_encryption_test_case_192_1), 12506 TEST_CASE_ST(ut_setup, ut_teardown, 12507 test_AES_GCM_auth_encryption_test_case_192_2), 12508 TEST_CASE_ST(ut_setup, ut_teardown, 12509 test_AES_GCM_auth_encryption_test_case_192_3), 12510 TEST_CASE_ST(ut_setup, ut_teardown, 12511 test_AES_GCM_auth_encryption_test_case_192_4), 12512 TEST_CASE_ST(ut_setup, ut_teardown, 12513 test_AES_GCM_auth_encryption_test_case_192_5), 12514 TEST_CASE_ST(ut_setup, ut_teardown, 12515 test_AES_GCM_auth_encryption_test_case_192_6), 12516 TEST_CASE_ST(ut_setup, ut_teardown, 12517 test_AES_GCM_auth_encryption_test_case_192_7), 12518 12519 /** AES GCM Authenticated Decryption 192 bits key */ 12520 TEST_CASE_ST(ut_setup, ut_teardown, 12521 test_AES_GCM_auth_decryption_test_case_192_1), 12522 TEST_CASE_ST(ut_setup, ut_teardown, 12523 test_AES_GCM_auth_decryption_test_case_192_2), 12524 TEST_CASE_ST(ut_setup, ut_teardown, 12525 test_AES_GCM_auth_decryption_test_case_192_3), 12526 TEST_CASE_ST(ut_setup, ut_teardown, 12527 test_AES_GCM_auth_decryption_test_case_192_4), 12528 TEST_CASE_ST(ut_setup, ut_teardown, 12529 test_AES_GCM_auth_decryption_test_case_192_5), 12530 TEST_CASE_ST(ut_setup, ut_teardown, 12531 test_AES_GCM_auth_decryption_test_case_192_6), 12532 TEST_CASE_ST(ut_setup, ut_teardown, 12533 test_AES_GCM_auth_decryption_test_case_192_7), 12534 12535 /** AES GCM Authenticated Encryption 256 bits key */ 12536 TEST_CASE_ST(ut_setup, ut_teardown, 12537 test_AES_GCM_auth_encryption_test_case_256_1), 12538 TEST_CASE_ST(ut_setup, ut_teardown, 12539 test_AES_GCM_auth_encryption_test_case_256_2), 12540 TEST_CASE_ST(ut_setup, ut_teardown, 12541 test_AES_GCM_auth_encryption_test_case_256_3), 12542 TEST_CASE_ST(ut_setup, ut_teardown, 12543 test_AES_GCM_auth_encryption_test_case_256_4), 12544 TEST_CASE_ST(ut_setup, ut_teardown, 12545 test_AES_GCM_auth_encryption_test_case_256_5), 12546 TEST_CASE_ST(ut_setup, ut_teardown, 12547 test_AES_GCM_auth_encryption_test_case_256_6), 12548 TEST_CASE_ST(ut_setup, ut_teardown, 12549 test_AES_GCM_auth_encryption_test_case_256_7), 12550 12551 /** AES GCM Authenticated Decryption 256 bits key */ 12552 TEST_CASE_ST(ut_setup, ut_teardown, 12553 test_AES_GCM_auth_decryption_test_case_256_1), 12554 TEST_CASE_ST(ut_setup, ut_teardown, 12555 test_AES_GCM_auth_decryption_test_case_256_2), 12556 TEST_CASE_ST(ut_setup, ut_teardown, 12557 test_AES_GCM_auth_decryption_test_case_256_3), 12558 TEST_CASE_ST(ut_setup, ut_teardown, 12559 test_AES_GCM_auth_decryption_test_case_256_4), 12560 TEST_CASE_ST(ut_setup, ut_teardown, 12561 test_AES_GCM_auth_decryption_test_case_256_5), 12562 TEST_CASE_ST(ut_setup, ut_teardown, 12563 test_AES_GCM_auth_decryption_test_case_256_6), 12564 TEST_CASE_ST(ut_setup, ut_teardown, 12565 test_AES_GCM_auth_decryption_test_case_256_7), 12566 12567 /** Out of place tests */ 12568 TEST_CASE_ST(ut_setup, ut_teardown, 12569 test_AES_GCM_authenticated_encryption_oop_test_case_1), 12570 TEST_CASE_ST(ut_setup, ut_teardown, 12571 test_AES_GCM_authenticated_decryption_oop_test_case_1), 12572 12573 /** SNOW 3G encrypt only (UEA2) */ 12574 TEST_CASE_ST(ut_setup, ut_teardown, 12575 test_snow3g_encryption_test_case_1), 12576 TEST_CASE_ST(ut_setup, ut_teardown, 12577 test_snow3g_encryption_test_case_2), 12578 TEST_CASE_ST(ut_setup, ut_teardown, 12579 test_snow3g_encryption_test_case_3), 12580 TEST_CASE_ST(ut_setup, ut_teardown, 12581 test_snow3g_encryption_test_case_4), 12582 TEST_CASE_ST(ut_setup, ut_teardown, 12583 test_snow3g_encryption_test_case_5), 12584 12585 TEST_CASE_ST(ut_setup, ut_teardown, 12586 test_snow3g_encryption_test_case_1_oop), 12587 TEST_CASE_ST(ut_setup, ut_teardown, 12588 test_snow3g_encryption_test_case_1_oop_sgl), 12589 TEST_CASE_ST(ut_setup, ut_teardown, 12590 test_snow3g_decryption_test_case_1_oop), 12591 12592 /** SNOW 3G decrypt only (UEA2) */ 12593 TEST_CASE_ST(ut_setup, ut_teardown, 12594 test_snow3g_decryption_test_case_1), 12595 TEST_CASE_ST(ut_setup, ut_teardown, 12596 test_snow3g_decryption_test_case_2), 12597 TEST_CASE_ST(ut_setup, ut_teardown, 12598 test_snow3g_decryption_test_case_3), 12599 TEST_CASE_ST(ut_setup, ut_teardown, 12600 test_snow3g_decryption_test_case_4), 12601 TEST_CASE_ST(ut_setup, ut_teardown, 12602 test_snow3g_decryption_test_case_5), 12603 12604 TEST_CASE_ST(ut_setup, ut_teardown, 12605 test_snow3g_hash_generate_test_case_1), 12606 TEST_CASE_ST(ut_setup, ut_teardown, 12607 test_snow3g_hash_generate_test_case_2), 12608 TEST_CASE_ST(ut_setup, ut_teardown, 12609 test_snow3g_hash_generate_test_case_3), 12610 TEST_CASE_ST(ut_setup, ut_teardown, 12611 test_snow3g_hash_verify_test_case_1), 12612 TEST_CASE_ST(ut_setup, ut_teardown, 12613 test_snow3g_hash_verify_test_case_2), 12614 TEST_CASE_ST(ut_setup, ut_teardown, 12615 test_snow3g_hash_verify_test_case_3), 12616 12617 /** ZUC encrypt only (EEA3) */ 12618 TEST_CASE_ST(ut_setup, ut_teardown, 12619 test_zuc_encryption_test_case_1), 12620 TEST_CASE_ST(ut_setup, ut_teardown, 12621 test_zuc_encryption_test_case_2), 12622 TEST_CASE_ST(ut_setup, ut_teardown, 12623 test_zuc_encryption_test_case_3), 12624 TEST_CASE_ST(ut_setup, ut_teardown, 12625 test_zuc_encryption_test_case_4), 12626 TEST_CASE_ST(ut_setup, ut_teardown, 12627 test_zuc_encryption_test_case_5), 12628 12629 /** ZUC authenticate (EIA3) */ 12630 TEST_CASE_ST(ut_setup, ut_teardown, 12631 test_zuc_hash_generate_test_case_6), 12632 TEST_CASE_ST(ut_setup, ut_teardown, 12633 test_zuc_hash_generate_test_case_7), 12634 TEST_CASE_ST(ut_setup, ut_teardown, 12635 test_zuc_hash_generate_test_case_8), 12636 12637 /** HMAC_MD5 Authentication */ 12638 TEST_CASE_ST(ut_setup, ut_teardown, 12639 test_MD5_HMAC_generate_case_1), 12640 TEST_CASE_ST(ut_setup, ut_teardown, 12641 test_MD5_HMAC_verify_case_1), 12642 TEST_CASE_ST(ut_setup, ut_teardown, 12643 test_MD5_HMAC_generate_case_2), 12644 TEST_CASE_ST(ut_setup, ut_teardown, 12645 test_MD5_HMAC_verify_case_2), 12646 12647 /** Negative tests */ 12648 TEST_CASE_ST(ut_setup, ut_teardown, 12649 test_AES_GCM_auth_encryption_fail_iv_corrupt), 12650 TEST_CASE_ST(ut_setup, ut_teardown, 12651 test_AES_GCM_auth_encryption_fail_in_data_corrupt), 12652 TEST_CASE_ST(ut_setup, ut_teardown, 12653 test_AES_GCM_auth_encryption_fail_out_data_corrupt), 12654 TEST_CASE_ST(ut_setup, ut_teardown, 12655 test_AES_GCM_auth_encryption_fail_aad_len_corrupt), 12656 TEST_CASE_ST(ut_setup, ut_teardown, 12657 test_AES_GCM_auth_encryption_fail_aad_corrupt), 12658 TEST_CASE_ST(ut_setup, ut_teardown, 12659 test_AES_GCM_auth_encryption_fail_tag_corrupt), 12660 TEST_CASE_ST(ut_setup, ut_teardown, 12661 test_AES_GCM_auth_decryption_fail_iv_corrupt), 12662 TEST_CASE_ST(ut_setup, ut_teardown, 12663 test_AES_GCM_auth_decryption_fail_in_data_corrupt), 12664 TEST_CASE_ST(ut_setup, ut_teardown, 12665 test_AES_GCM_auth_decryption_fail_out_data_corrupt), 12666 TEST_CASE_ST(ut_setup, ut_teardown, 12667 test_AES_GCM_auth_decryption_fail_aad_len_corrupt), 12668 TEST_CASE_ST(ut_setup, ut_teardown, 12669 test_AES_GCM_auth_decryption_fail_aad_corrupt), 12670 TEST_CASE_ST(ut_setup, ut_teardown, 12671 test_AES_GCM_auth_decryption_fail_tag_corrupt), 12672 TEST_CASE_ST(ut_setup, ut_teardown, 12673 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12674 TEST_CASE_ST(ut_setup, ut_teardown, 12675 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12676 TEST_CASE_ST(ut_setup, ut_teardown, 12677 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12678 TEST_CASE_ST(ut_setup, ut_teardown, 12679 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12680 12681 /* ESN Testcase */ 12682 TEST_CASE_ST(ut_setup, ut_teardown, 12683 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check), 12684 12685 TEST_CASE_ST(ut_setup, ut_teardown, 12686 auth_decrypt_AES128CBC_HMAC_SHA1_esn_check), 12687 12688 TEST_CASES_END() /**< NULL terminate unit test array */ 12689 } 12690 }; 12691 12692 static struct unit_test_suite cryptodev_armv8_testsuite = { 12693 .suite_name = "Crypto Device ARMv8 Unit Test Suite", 12694 .setup = testsuite_setup, 12695 .teardown = testsuite_teardown, 12696 .unit_test_cases = { 12697 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12698 12699 /** Negative tests */ 12700 TEST_CASE_ST(ut_setup, ut_teardown, 12701 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12702 TEST_CASE_ST(ut_setup, ut_teardown, 12703 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12704 12705 TEST_CASES_END() /**< NULL terminate unit test array */ 12706 } 12707 }; 12708 12709 static struct unit_test_suite cryptodev_mrvl_testsuite = { 12710 .suite_name = "Crypto Device Marvell Component Test Suite", 12711 .setup = testsuite_setup, 12712 .teardown = testsuite_teardown, 12713 .unit_test_cases = { 12714 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session), 12715 TEST_CASE_ST(ut_setup, ut_teardown, 12716 test_multi_session_random_usage), 12717 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12718 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12719 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12720 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12721 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12722 12723 /** Negative tests */ 12724 TEST_CASE_ST(ut_setup, ut_teardown, 12725 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12726 TEST_CASE_ST(ut_setup, ut_teardown, 12727 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12728 TEST_CASE_ST(ut_setup, ut_teardown, 12729 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12730 TEST_CASE_ST(ut_setup, ut_teardown, 12731 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12732 12733 TEST_CASES_END() /**< NULL terminate unit test array */ 12734 } 12735 }; 12736 12737 static struct unit_test_suite cryptodev_ccp_testsuite = { 12738 .suite_name = "Crypto Device CCP Unit Test Suite", 12739 .setup = testsuite_setup, 12740 .teardown = testsuite_teardown, 12741 .unit_test_cases = { 12742 TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session), 12743 TEST_CASE_ST(ut_setup, ut_teardown, 12744 test_multi_session_random_usage), 12745 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12746 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12747 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12748 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12749 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12750 12751 /** Negative tests */ 12752 TEST_CASE_ST(ut_setup, ut_teardown, 12753 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12754 TEST_CASE_ST(ut_setup, ut_teardown, 12755 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12756 TEST_CASE_ST(ut_setup, ut_teardown, 12757 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12758 TEST_CASE_ST(ut_setup, ut_teardown, 12759 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12760 12761 TEST_CASES_END() /**< NULL terminate unit test array */ 12762 } 12763 }; 12764 12765 static struct unit_test_suite cryptodev_octeontx_testsuite = { 12766 .suite_name = "Crypto Device OCTEONTX Unit Test Suite", 12767 .setup = testsuite_setup, 12768 .teardown = testsuite_teardown, 12769 .unit_test_cases = { 12770 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12771 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12772 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12773 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12774 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12775 12776 /** AES GCM Authenticated Encryption */ 12777 TEST_CASE_ST(ut_setup, ut_teardown, 12778 test_AES_GCM_authenticated_encryption_test_case_1), 12779 TEST_CASE_ST(ut_setup, ut_teardown, 12780 test_AES_GCM_authenticated_encryption_test_case_2), 12781 TEST_CASE_ST(ut_setup, ut_teardown, 12782 test_AES_GCM_authenticated_encryption_test_case_3), 12783 TEST_CASE_ST(ut_setup, ut_teardown, 12784 test_AES_GCM_authenticated_encryption_test_case_4), 12785 TEST_CASE_ST(ut_setup, ut_teardown, 12786 test_AES_GCM_authenticated_encryption_test_case_5), 12787 TEST_CASE_ST(ut_setup, ut_teardown, 12788 test_AES_GCM_authenticated_encryption_test_case_6), 12789 TEST_CASE_ST(ut_setup, ut_teardown, 12790 test_AES_GCM_authenticated_encryption_test_case_7), 12791 12792 /** AES GCM Authenticated Decryption */ 12793 TEST_CASE_ST(ut_setup, ut_teardown, 12794 test_AES_GCM_authenticated_decryption_test_case_1), 12795 TEST_CASE_ST(ut_setup, ut_teardown, 12796 test_AES_GCM_authenticated_decryption_test_case_2), 12797 TEST_CASE_ST(ut_setup, ut_teardown, 12798 test_AES_GCM_authenticated_decryption_test_case_3), 12799 TEST_CASE_ST(ut_setup, ut_teardown, 12800 test_AES_GCM_authenticated_decryption_test_case_4), 12801 TEST_CASE_ST(ut_setup, ut_teardown, 12802 test_AES_GCM_authenticated_decryption_test_case_5), 12803 TEST_CASE_ST(ut_setup, ut_teardown, 12804 test_AES_GCM_authenticated_decryption_test_case_6), 12805 TEST_CASE_ST(ut_setup, ut_teardown, 12806 test_AES_GCM_authenticated_decryption_test_case_7), 12807 /** AES GMAC Authentication */ 12808 TEST_CASE_ST(ut_setup, ut_teardown, 12809 test_AES_GMAC_authentication_test_case_1), 12810 TEST_CASE_ST(ut_setup, ut_teardown, 12811 test_AES_GMAC_authentication_verify_test_case_1), 12812 TEST_CASE_ST(ut_setup, ut_teardown, 12813 test_AES_GMAC_authentication_test_case_2), 12814 TEST_CASE_ST(ut_setup, ut_teardown, 12815 test_AES_GMAC_authentication_verify_test_case_2), 12816 TEST_CASE_ST(ut_setup, ut_teardown, 12817 test_AES_GMAC_authentication_test_case_3), 12818 TEST_CASE_ST(ut_setup, ut_teardown, 12819 test_AES_GMAC_authentication_verify_test_case_3), 12820 12821 /** SNOW 3G encrypt only (UEA2) */ 12822 TEST_CASE_ST(ut_setup, ut_teardown, 12823 test_snow3g_encryption_test_case_1), 12824 TEST_CASE_ST(ut_setup, ut_teardown, 12825 test_snow3g_encryption_test_case_2), 12826 TEST_CASE_ST(ut_setup, ut_teardown, 12827 test_snow3g_encryption_test_case_3), 12828 TEST_CASE_ST(ut_setup, ut_teardown, 12829 test_snow3g_encryption_test_case_4), 12830 TEST_CASE_ST(ut_setup, ut_teardown, 12831 test_snow3g_encryption_test_case_5), 12832 12833 TEST_CASE_ST(ut_setup, ut_teardown, 12834 test_snow3g_encryption_test_case_1_oop), 12835 TEST_CASE_ST(ut_setup, ut_teardown, 12836 test_snow3g_decryption_test_case_1_oop), 12837 TEST_CASE_ST(ut_setup, ut_teardown, 12838 test_snow3g_encryption_test_case_1_oop_sgl), 12839 12840 /** SNOW 3G decrypt only (UEA2) */ 12841 TEST_CASE_ST(ut_setup, ut_teardown, 12842 test_snow3g_decryption_test_case_1), 12843 TEST_CASE_ST(ut_setup, ut_teardown, 12844 test_snow3g_decryption_test_case_2), 12845 TEST_CASE_ST(ut_setup, ut_teardown, 12846 test_snow3g_decryption_test_case_3), 12847 TEST_CASE_ST(ut_setup, ut_teardown, 12848 test_snow3g_decryption_test_case_4), 12849 TEST_CASE_ST(ut_setup, ut_teardown, 12850 test_snow3g_decryption_test_case_5), 12851 12852 TEST_CASE_ST(ut_setup, ut_teardown, 12853 test_snow3g_hash_generate_test_case_1), 12854 TEST_CASE_ST(ut_setup, ut_teardown, 12855 test_snow3g_hash_generate_test_case_2), 12856 TEST_CASE_ST(ut_setup, ut_teardown, 12857 test_snow3g_hash_generate_test_case_3), 12858 TEST_CASE_ST(ut_setup, ut_teardown, 12859 test_snow3g_hash_verify_test_case_1), 12860 TEST_CASE_ST(ut_setup, ut_teardown, 12861 test_snow3g_hash_verify_test_case_2), 12862 TEST_CASE_ST(ut_setup, ut_teardown, 12863 test_snow3g_hash_verify_test_case_3), 12864 12865 /** ZUC encrypt only (EEA3) */ 12866 TEST_CASE_ST(ut_setup, ut_teardown, 12867 test_zuc_encryption_test_case_1), 12868 TEST_CASE_ST(ut_setup, ut_teardown, 12869 test_zuc_encryption_test_case_2), 12870 TEST_CASE_ST(ut_setup, ut_teardown, 12871 test_zuc_encryption_test_case_3), 12872 TEST_CASE_ST(ut_setup, ut_teardown, 12873 test_zuc_encryption_test_case_4), 12874 TEST_CASE_ST(ut_setup, ut_teardown, 12875 test_zuc_encryption_test_case_5), 12876 TEST_CASE_ST(ut_setup, ut_teardown, 12877 test_zuc_hash_generate_test_case_1), 12878 TEST_CASE_ST(ut_setup, ut_teardown, 12879 test_zuc_hash_generate_test_case_2), 12880 TEST_CASE_ST(ut_setup, ut_teardown, 12881 test_zuc_hash_generate_test_case_3), 12882 TEST_CASE_ST(ut_setup, ut_teardown, 12883 test_zuc_hash_generate_test_case_4), 12884 TEST_CASE_ST(ut_setup, ut_teardown, 12885 test_zuc_hash_generate_test_case_5), 12886 TEST_CASE_ST(ut_setup, ut_teardown, 12887 test_zuc_encryption_test_case_6_sgl), 12888 12889 /** KASUMI encrypt only (UEA1) */ 12890 TEST_CASE_ST(ut_setup, ut_teardown, 12891 test_kasumi_encryption_test_case_1), 12892 TEST_CASE_ST(ut_setup, ut_teardown, 12893 test_kasumi_encryption_test_case_2), 12894 TEST_CASE_ST(ut_setup, ut_teardown, 12895 test_kasumi_encryption_test_case_3), 12896 TEST_CASE_ST(ut_setup, ut_teardown, 12897 test_kasumi_encryption_test_case_4), 12898 TEST_CASE_ST(ut_setup, ut_teardown, 12899 test_kasumi_encryption_test_case_5), 12900 TEST_CASE_ST(ut_setup, ut_teardown, 12901 test_kasumi_encryption_test_case_1_sgl), 12902 TEST_CASE_ST(ut_setup, ut_teardown, 12903 test_kasumi_encryption_test_case_1_oop_sgl), 12904 /** KASUMI decrypt only (UEA1) */ 12905 TEST_CASE_ST(ut_setup, ut_teardown, 12906 test_kasumi_decryption_test_case_1), 12907 TEST_CASE_ST(ut_setup, ut_teardown, 12908 test_kasumi_decryption_test_case_2), 12909 TEST_CASE_ST(ut_setup, ut_teardown, 12910 test_kasumi_decryption_test_case_3), 12911 TEST_CASE_ST(ut_setup, ut_teardown, 12912 test_kasumi_decryption_test_case_4), 12913 TEST_CASE_ST(ut_setup, ut_teardown, 12914 test_kasumi_decryption_test_case_5), 12915 12916 TEST_CASE_ST(ut_setup, ut_teardown, 12917 test_kasumi_encryption_test_case_1_oop), 12918 TEST_CASE_ST(ut_setup, ut_teardown, 12919 test_kasumi_decryption_test_case_1_oop), 12920 12921 /** KASUMI hash only (UIA1) */ 12922 TEST_CASE_ST(ut_setup, ut_teardown, 12923 test_kasumi_hash_generate_test_case_1), 12924 TEST_CASE_ST(ut_setup, ut_teardown, 12925 test_kasumi_hash_generate_test_case_2), 12926 TEST_CASE_ST(ut_setup, ut_teardown, 12927 test_kasumi_hash_generate_test_case_3), 12928 TEST_CASE_ST(ut_setup, ut_teardown, 12929 test_kasumi_hash_generate_test_case_4), 12930 TEST_CASE_ST(ut_setup, ut_teardown, 12931 test_kasumi_hash_generate_test_case_5), 12932 TEST_CASE_ST(ut_setup, ut_teardown, 12933 test_kasumi_hash_generate_test_case_6), 12934 TEST_CASE_ST(ut_setup, ut_teardown, 12935 test_kasumi_hash_verify_test_case_1), 12936 TEST_CASE_ST(ut_setup, ut_teardown, 12937 test_kasumi_hash_verify_test_case_2), 12938 TEST_CASE_ST(ut_setup, ut_teardown, 12939 test_kasumi_hash_verify_test_case_3), 12940 TEST_CASE_ST(ut_setup, ut_teardown, 12941 test_kasumi_hash_verify_test_case_4), 12942 TEST_CASE_ST(ut_setup, ut_teardown, 12943 test_kasumi_hash_verify_test_case_5), 12944 12945 /** NULL tests */ 12946 TEST_CASE_ST(ut_setup, ut_teardown, 12947 test_null_cipher_only_operation), 12948 TEST_CASE_ST(ut_setup, ut_teardown, 12949 test_null_auth_only_operation), 12950 TEST_CASE_ST(ut_setup, ut_teardown, 12951 test_null_cipher_auth_operation), 12952 TEST_CASE_ST(ut_setup, ut_teardown, 12953 test_null_auth_cipher_operation), 12954 12955 /** Negative tests */ 12956 TEST_CASE_ST(ut_setup, ut_teardown, 12957 authentication_verify_HMAC_SHA1_fail_data_corrupt), 12958 TEST_CASE_ST(ut_setup, ut_teardown, 12959 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 12960 TEST_CASE_ST(ut_setup, ut_teardown, 12961 authentication_verify_AES128_GMAC_fail_data_corrupt), 12962 TEST_CASE_ST(ut_setup, ut_teardown, 12963 authentication_verify_AES128_GMAC_fail_tag_corrupt), 12964 TEST_CASE_ST(ut_setup, ut_teardown, 12965 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 12966 TEST_CASE_ST(ut_setup, ut_teardown, 12967 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 12968 TEST_CASES_END() /**< NULL terminate unit test array */ 12969 } 12970 }; 12971 12972 static struct unit_test_suite cryptodev_nitrox_testsuite = { 12973 .suite_name = "Crypto NITROX Unit Test Suite", 12974 .setup = testsuite_setup, 12975 .teardown = testsuite_teardown, 12976 .unit_test_cases = { 12977 TEST_CASE_ST(ut_setup, ut_teardown, 12978 test_device_configure_invalid_dev_id), 12979 TEST_CASE_ST(ut_setup, ut_teardown, 12980 test_device_configure_invalid_queue_pair_ids), 12981 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12982 12983 TEST_CASES_END() /**< NULL terminate unit test array */ 12984 } 12985 }; 12986 12987 static struct unit_test_suite cryptodev_octeontx2_testsuite = { 12988 .suite_name = "Crypto Device OCTEON TX2 Unit Test Suite", 12989 .setup = testsuite_setup, 12990 .teardown = testsuite_teardown, 12991 .unit_test_cases = { 12992 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all), 12993 TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), 12994 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_all), 12995 TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_cipheronly_all), 12996 TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), 12997 12998 /** AES GCM Authenticated Encryption */ 12999 TEST_CASE_ST(ut_setup, ut_teardown, 13000 test_AES_GCM_authenticated_encryption_test_case_1), 13001 TEST_CASE_ST(ut_setup, ut_teardown, 13002 test_AES_GCM_authenticated_encryption_test_case_2), 13003 TEST_CASE_ST(ut_setup, ut_teardown, 13004 test_AES_GCM_authenticated_encryption_test_case_3), 13005 TEST_CASE_ST(ut_setup, ut_teardown, 13006 test_AES_GCM_authenticated_encryption_test_case_4), 13007 TEST_CASE_ST(ut_setup, ut_teardown, 13008 test_AES_GCM_authenticated_encryption_test_case_5), 13009 TEST_CASE_ST(ut_setup, ut_teardown, 13010 test_AES_GCM_authenticated_encryption_test_case_6), 13011 TEST_CASE_ST(ut_setup, ut_teardown, 13012 test_AES_GCM_authenticated_encryption_test_case_7), 13013 13014 /** AES GCM Authenticated Decryption */ 13015 TEST_CASE_ST(ut_setup, ut_teardown, 13016 test_AES_GCM_authenticated_decryption_test_case_1), 13017 TEST_CASE_ST(ut_setup, ut_teardown, 13018 test_AES_GCM_authenticated_decryption_test_case_2), 13019 TEST_CASE_ST(ut_setup, ut_teardown, 13020 test_AES_GCM_authenticated_decryption_test_case_3), 13021 TEST_CASE_ST(ut_setup, ut_teardown, 13022 test_AES_GCM_authenticated_decryption_test_case_4), 13023 TEST_CASE_ST(ut_setup, ut_teardown, 13024 test_AES_GCM_authenticated_decryption_test_case_5), 13025 TEST_CASE_ST(ut_setup, ut_teardown, 13026 test_AES_GCM_authenticated_decryption_test_case_6), 13027 TEST_CASE_ST(ut_setup, ut_teardown, 13028 test_AES_GCM_authenticated_decryption_test_case_7), 13029 /** AES GMAC Authentication */ 13030 TEST_CASE_ST(ut_setup, ut_teardown, 13031 test_AES_GMAC_authentication_test_case_1), 13032 TEST_CASE_ST(ut_setup, ut_teardown, 13033 test_AES_GMAC_authentication_verify_test_case_1), 13034 TEST_CASE_ST(ut_setup, ut_teardown, 13035 test_AES_GMAC_authentication_test_case_2), 13036 TEST_CASE_ST(ut_setup, ut_teardown, 13037 test_AES_GMAC_authentication_verify_test_case_2), 13038 TEST_CASE_ST(ut_setup, ut_teardown, 13039 test_AES_GMAC_authentication_test_case_3), 13040 TEST_CASE_ST(ut_setup, ut_teardown, 13041 test_AES_GMAC_authentication_verify_test_case_3), 13042 13043 /** SNOW 3G encrypt only (UEA2) */ 13044 TEST_CASE_ST(ut_setup, ut_teardown, 13045 test_snow3g_encryption_test_case_1), 13046 TEST_CASE_ST(ut_setup, ut_teardown, 13047 test_snow3g_encryption_test_case_2), 13048 TEST_CASE_ST(ut_setup, ut_teardown, 13049 test_snow3g_encryption_test_case_3), 13050 TEST_CASE_ST(ut_setup, ut_teardown, 13051 test_snow3g_encryption_test_case_4), 13052 TEST_CASE_ST(ut_setup, ut_teardown, 13053 test_snow3g_encryption_test_case_5), 13054 13055 TEST_CASE_ST(ut_setup, ut_teardown, 13056 test_snow3g_encryption_test_case_1_oop), 13057 TEST_CASE_ST(ut_setup, ut_teardown, 13058 test_snow3g_decryption_test_case_1_oop), 13059 TEST_CASE_ST(ut_setup, ut_teardown, 13060 test_snow3g_encryption_test_case_1_oop_sgl), 13061 13062 /** SNOW 3G decrypt only (UEA2) */ 13063 TEST_CASE_ST(ut_setup, ut_teardown, 13064 test_snow3g_decryption_test_case_1), 13065 TEST_CASE_ST(ut_setup, ut_teardown, 13066 test_snow3g_decryption_test_case_2), 13067 TEST_CASE_ST(ut_setup, ut_teardown, 13068 test_snow3g_decryption_test_case_3), 13069 TEST_CASE_ST(ut_setup, ut_teardown, 13070 test_snow3g_decryption_test_case_4), 13071 TEST_CASE_ST(ut_setup, ut_teardown, 13072 test_snow3g_decryption_test_case_5), 13073 13074 TEST_CASE_ST(ut_setup, ut_teardown, 13075 test_snow3g_hash_generate_test_case_1), 13076 TEST_CASE_ST(ut_setup, ut_teardown, 13077 test_snow3g_hash_generate_test_case_2), 13078 TEST_CASE_ST(ut_setup, ut_teardown, 13079 test_snow3g_hash_generate_test_case_3), 13080 TEST_CASE_ST(ut_setup, ut_teardown, 13081 test_snow3g_hash_verify_test_case_1), 13082 TEST_CASE_ST(ut_setup, ut_teardown, 13083 test_snow3g_hash_verify_test_case_2), 13084 TEST_CASE_ST(ut_setup, ut_teardown, 13085 test_snow3g_hash_verify_test_case_3), 13086 13087 /** ZUC encrypt only (EEA3) */ 13088 TEST_CASE_ST(ut_setup, ut_teardown, 13089 test_zuc_encryption_test_case_1), 13090 TEST_CASE_ST(ut_setup, ut_teardown, 13091 test_zuc_encryption_test_case_2), 13092 TEST_CASE_ST(ut_setup, ut_teardown, 13093 test_zuc_encryption_test_case_3), 13094 TEST_CASE_ST(ut_setup, ut_teardown, 13095 test_zuc_encryption_test_case_4), 13096 TEST_CASE_ST(ut_setup, ut_teardown, 13097 test_zuc_encryption_test_case_5), 13098 TEST_CASE_ST(ut_setup, ut_teardown, 13099 test_zuc_hash_generate_test_case_1), 13100 TEST_CASE_ST(ut_setup, ut_teardown, 13101 test_zuc_hash_generate_test_case_2), 13102 TEST_CASE_ST(ut_setup, ut_teardown, 13103 test_zuc_hash_generate_test_case_3), 13104 TEST_CASE_ST(ut_setup, ut_teardown, 13105 test_zuc_hash_generate_test_case_4), 13106 TEST_CASE_ST(ut_setup, ut_teardown, 13107 test_zuc_hash_generate_test_case_5), 13108 TEST_CASE_ST(ut_setup, ut_teardown, 13109 test_zuc_encryption_test_case_6_sgl), 13110 13111 /** KASUMI encrypt only (UEA1) */ 13112 TEST_CASE_ST(ut_setup, ut_teardown, 13113 test_kasumi_encryption_test_case_1), 13114 TEST_CASE_ST(ut_setup, ut_teardown, 13115 test_kasumi_encryption_test_case_2), 13116 TEST_CASE_ST(ut_setup, ut_teardown, 13117 test_kasumi_encryption_test_case_3), 13118 TEST_CASE_ST(ut_setup, ut_teardown, 13119 test_kasumi_encryption_test_case_4), 13120 TEST_CASE_ST(ut_setup, ut_teardown, 13121 test_kasumi_encryption_test_case_5), 13122 TEST_CASE_ST(ut_setup, ut_teardown, 13123 test_kasumi_encryption_test_case_1_sgl), 13124 TEST_CASE_ST(ut_setup, ut_teardown, 13125 test_kasumi_encryption_test_case_1_oop_sgl), 13126 /** KASUMI decrypt only (UEA1) */ 13127 TEST_CASE_ST(ut_setup, ut_teardown, 13128 test_kasumi_decryption_test_case_1), 13129 TEST_CASE_ST(ut_setup, ut_teardown, 13130 test_kasumi_decryption_test_case_2), 13131 TEST_CASE_ST(ut_setup, ut_teardown, 13132 test_kasumi_decryption_test_case_3), 13133 TEST_CASE_ST(ut_setup, ut_teardown, 13134 test_kasumi_decryption_test_case_4), 13135 TEST_CASE_ST(ut_setup, ut_teardown, 13136 test_kasumi_decryption_test_case_5), 13137 13138 TEST_CASE_ST(ut_setup, ut_teardown, 13139 test_kasumi_encryption_test_case_1_oop), 13140 TEST_CASE_ST(ut_setup, ut_teardown, 13141 test_kasumi_decryption_test_case_1_oop), 13142 13143 /** KASUMI hash only (UIA1) */ 13144 TEST_CASE_ST(ut_setup, ut_teardown, 13145 test_kasumi_hash_generate_test_case_1), 13146 TEST_CASE_ST(ut_setup, ut_teardown, 13147 test_kasumi_hash_generate_test_case_2), 13148 TEST_CASE_ST(ut_setup, ut_teardown, 13149 test_kasumi_hash_generate_test_case_3), 13150 TEST_CASE_ST(ut_setup, ut_teardown, 13151 test_kasumi_hash_generate_test_case_4), 13152 TEST_CASE_ST(ut_setup, ut_teardown, 13153 test_kasumi_hash_generate_test_case_5), 13154 TEST_CASE_ST(ut_setup, ut_teardown, 13155 test_kasumi_hash_generate_test_case_6), 13156 TEST_CASE_ST(ut_setup, ut_teardown, 13157 test_kasumi_hash_verify_test_case_1), 13158 TEST_CASE_ST(ut_setup, ut_teardown, 13159 test_kasumi_hash_verify_test_case_2), 13160 TEST_CASE_ST(ut_setup, ut_teardown, 13161 test_kasumi_hash_verify_test_case_3), 13162 TEST_CASE_ST(ut_setup, ut_teardown, 13163 test_kasumi_hash_verify_test_case_4), 13164 TEST_CASE_ST(ut_setup, ut_teardown, 13165 test_kasumi_hash_verify_test_case_5), 13166 13167 /** NULL tests */ 13168 TEST_CASE_ST(ut_setup, ut_teardown, 13169 test_null_cipher_only_operation), 13170 TEST_CASE_ST(ut_setup, ut_teardown, 13171 test_null_auth_only_operation), 13172 TEST_CASE_ST(ut_setup, ut_teardown, 13173 test_null_cipher_auth_operation), 13174 TEST_CASE_ST(ut_setup, ut_teardown, 13175 test_null_auth_cipher_operation), 13176 13177 /** Negative tests */ 13178 TEST_CASE_ST(ut_setup, ut_teardown, 13179 authentication_verify_HMAC_SHA1_fail_data_corrupt), 13180 TEST_CASE_ST(ut_setup, ut_teardown, 13181 authentication_verify_HMAC_SHA1_fail_tag_corrupt), 13182 TEST_CASE_ST(ut_setup, ut_teardown, 13183 authentication_verify_AES128_GMAC_fail_data_corrupt), 13184 TEST_CASE_ST(ut_setup, ut_teardown, 13185 authentication_verify_AES128_GMAC_fail_tag_corrupt), 13186 TEST_CASE_ST(ut_setup, ut_teardown, 13187 auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt), 13188 TEST_CASE_ST(ut_setup, ut_teardown, 13189 auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), 13190 TEST_CASES_END() /**< NULL terminate unit test array */ 13191 } 13192 }; 13193 13194 static int 13195 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/) 13196 { 13197 gbl_driver_id = rte_cryptodev_driver_id_get( 13198 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)); 13199 13200 if (gbl_driver_id == -1) { 13201 RTE_LOG(ERR, USER1, "QAT PMD must be loaded. Check that both " 13202 "CONFIG_RTE_LIBRTE_PMD_QAT and CONFIG_RTE_LIBRTE_PMD_QAT_SYM " 13203 "are enabled in config file to run this testsuite.\n"); 13204 return TEST_SKIPPED; 13205 } 13206 13207 return unit_test_suite_runner(&cryptodev_testsuite); 13208 } 13209 13210 static int 13211 test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/) 13212 { 13213 gbl_driver_id = rte_cryptodev_driver_id_get( 13214 RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD)); 13215 13216 if (gbl_driver_id == -1) { 13217 RTE_LOG(ERR, USER1, "VIRTIO PMD must be loaded. Check if " 13218 "CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO is enabled " 13219 "in config file to run this testsuite.\n"); 13220 return TEST_FAILED; 13221 } 13222 13223 return unit_test_suite_runner(&cryptodev_virtio_testsuite); 13224 } 13225 13226 static int 13227 test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/) 13228 { 13229 gbl_driver_id = rte_cryptodev_driver_id_get( 13230 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)); 13231 13232 if (gbl_driver_id == -1) { 13233 RTE_LOG(ERR, USER1, "AESNI MB PMD must be loaded. Check if " 13234 "CONFIG_RTE_LIBRTE_PMD_AESNI_MB is enabled " 13235 "in config file to run this testsuite.\n"); 13236 return TEST_SKIPPED; 13237 } 13238 13239 return unit_test_suite_runner(&cryptodev_testsuite); 13240 } 13241 13242 static int 13243 test_cryptodev_openssl(void) 13244 { 13245 gbl_driver_id = rte_cryptodev_driver_id_get( 13246 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD)); 13247 13248 if (gbl_driver_id == -1) { 13249 RTE_LOG(ERR, USER1, "OPENSSL PMD must be loaded. Check if " 13250 "CONFIG_RTE_LIBRTE_PMD_OPENSSL is enabled " 13251 "in config file to run this testsuite.\n"); 13252 return TEST_SKIPPED; 13253 } 13254 13255 return unit_test_suite_runner(&cryptodev_testsuite); 13256 } 13257 13258 static int 13259 test_cryptodev_aesni_gcm(void) 13260 { 13261 gbl_driver_id = rte_cryptodev_driver_id_get( 13262 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD)); 13263 13264 if (gbl_driver_id == -1) { 13265 RTE_LOG(ERR, USER1, "AESNI GCM PMD must be loaded. Check if " 13266 "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM is enabled " 13267 "in config file to run this testsuite.\n"); 13268 return TEST_SKIPPED; 13269 } 13270 13271 return unit_test_suite_runner(&cryptodev_testsuite); 13272 } 13273 13274 static int 13275 test_cryptodev_null(void) 13276 { 13277 gbl_driver_id = rte_cryptodev_driver_id_get( 13278 RTE_STR(CRYPTODEV_NAME_NULL_PMD)); 13279 13280 if (gbl_driver_id == -1) { 13281 RTE_LOG(ERR, USER1, "NULL PMD must be loaded. Check if " 13282 "CONFIG_RTE_LIBRTE_PMD_NULL is enabled " 13283 "in config file to run this testsuite.\n"); 13284 return TEST_SKIPPED; 13285 } 13286 13287 return unit_test_suite_runner(&cryptodev_testsuite); 13288 } 13289 13290 static int 13291 test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/) 13292 { 13293 gbl_driver_id = rte_cryptodev_driver_id_get( 13294 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD)); 13295 13296 if (gbl_driver_id == -1) { 13297 RTE_LOG(ERR, USER1, "SNOW3G PMD must be loaded. Check if " 13298 "CONFIG_RTE_LIBRTE_PMD_SNOW3G is enabled " 13299 "in config file to run this testsuite.\n"); 13300 return TEST_SKIPPED; 13301 } 13302 13303 return unit_test_suite_runner(&cryptodev_testsuite); 13304 } 13305 13306 static int 13307 test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/) 13308 { 13309 gbl_driver_id = rte_cryptodev_driver_id_get( 13310 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD)); 13311 13312 if (gbl_driver_id == -1) { 13313 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if " 13314 "CONFIG_RTE_LIBRTE_PMD_KASUMI is enabled " 13315 "in config file to run this testsuite.\n"); 13316 return TEST_SKIPPED; 13317 } 13318 13319 return unit_test_suite_runner(&cryptodev_testsuite); 13320 } 13321 13322 static int 13323 test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/) 13324 { 13325 gbl_driver_id = rte_cryptodev_driver_id_get( 13326 RTE_STR(CRYPTODEV_NAME_ZUC_PMD)); 13327 13328 if (gbl_driver_id == -1) { 13329 RTE_LOG(ERR, USER1, "ZUC PMD must be loaded. Check if " 13330 "CONFIG_RTE_LIBRTE_PMD_ZUC is enabled " 13331 "in config file to run this testsuite.\n"); 13332 return TEST_SKIPPED; 13333 } 13334 13335 return unit_test_suite_runner(&cryptodev_testsuite); 13336 } 13337 13338 static int 13339 test_cryptodev_armv8(void) 13340 { 13341 gbl_driver_id = rte_cryptodev_driver_id_get( 13342 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD)); 13343 13344 if (gbl_driver_id == -1) { 13345 RTE_LOG(ERR, USER1, "ARMV8 PMD must be loaded. Check if " 13346 "CONFIG_RTE_LIBRTE_PMD_ARMV8 is enabled " 13347 "in config file to run this testsuite.\n"); 13348 return TEST_SKIPPED; 13349 } 13350 13351 return unit_test_suite_runner(&cryptodev_armv8_testsuite); 13352 } 13353 13354 static int 13355 test_cryptodev_mrvl(void) 13356 { 13357 gbl_driver_id = rte_cryptodev_driver_id_get( 13358 RTE_STR(CRYPTODEV_NAME_MVSAM_PMD)); 13359 13360 if (gbl_driver_id == -1) { 13361 RTE_LOG(ERR, USER1, "MVSAM PMD must be loaded. Check if " 13362 "CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO is enabled " 13363 "in config file to run this testsuite.\n"); 13364 return TEST_SKIPPED; 13365 } 13366 13367 return unit_test_suite_runner(&cryptodev_mrvl_testsuite); 13368 } 13369 13370 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER 13371 13372 static int 13373 test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/) 13374 { 13375 gbl_driver_id = rte_cryptodev_driver_id_get( 13376 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD)); 13377 13378 if (gbl_driver_id == -1) { 13379 RTE_LOG(ERR, USER1, "SCHEDULER PMD must be loaded. Check if " 13380 "CONFIG_RTE_LIBRTE_PMD_SCHEDULER is enabled " 13381 "in config file to run this testsuite.\n"); 13382 return TEST_SKIPPED; 13383 } 13384 13385 if (rte_cryptodev_driver_id_get( 13386 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD)) == -1) { 13387 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be" 13388 " enabled in config file to run this testsuite.\n"); 13389 return TEST_SKIPPED; 13390 } 13391 return unit_test_suite_runner(&cryptodev_scheduler_testsuite); 13392 } 13393 13394 REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler); 13395 13396 #endif 13397 13398 static int 13399 test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/) 13400 { 13401 gbl_driver_id = rte_cryptodev_driver_id_get( 13402 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD)); 13403 13404 if (gbl_driver_id == -1) { 13405 RTE_LOG(ERR, USER1, "DPAA2 SEC PMD must be loaded. Check if " 13406 "CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC is enabled " 13407 "in config file to run this testsuite.\n"); 13408 return TEST_SKIPPED; 13409 } 13410 13411 return unit_test_suite_runner(&cryptodev_dpaa2_sec_testsuite); 13412 } 13413 13414 static int 13415 test_cryptodev_dpaa_sec(void /*argv __rte_unused, int argc __rte_unused*/) 13416 { 13417 gbl_driver_id = rte_cryptodev_driver_id_get( 13418 RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD)); 13419 13420 if (gbl_driver_id == -1) { 13421 RTE_LOG(ERR, USER1, "DPAA SEC PMD must be loaded. Check if " 13422 "CONFIG_RTE_LIBRTE_PMD_DPAA_SEC is enabled " 13423 "in config file to run this testsuite.\n"); 13424 return TEST_SKIPPED; 13425 } 13426 13427 return unit_test_suite_runner(&cryptodev_dpaa_sec_testsuite); 13428 } 13429 13430 static int 13431 test_cryptodev_ccp(void) 13432 { 13433 gbl_driver_id = rte_cryptodev_driver_id_get( 13434 RTE_STR(CRYPTODEV_NAME_CCP_PMD)); 13435 13436 if (gbl_driver_id == -1) { 13437 RTE_LOG(ERR, USER1, "CCP PMD must be loaded. Check if " 13438 "CONFIG_RTE_LIBRTE_PMD_CCP is enabled " 13439 "in config file to run this testsuite.\n"); 13440 return TEST_FAILED; 13441 } 13442 13443 return unit_test_suite_runner(&cryptodev_ccp_testsuite); 13444 } 13445 13446 static int 13447 test_cryptodev_octeontx(void) 13448 { 13449 gbl_driver_id = rte_cryptodev_driver_id_get( 13450 RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)); 13451 if (gbl_driver_id == -1) { 13452 RTE_LOG(ERR, USER1, "OCTEONTX PMD must be loaded. Check if " 13453 "CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO is " 13454 "enabled in config file to run this " 13455 "testsuite.\n"); 13456 return TEST_FAILED; 13457 } 13458 return unit_test_suite_runner(&cryptodev_octeontx_testsuite); 13459 } 13460 13461 static int 13462 test_cryptodev_octeontx2(void) 13463 { 13464 gbl_driver_id = rte_cryptodev_driver_id_get( 13465 RTE_STR(CRYPTODEV_NAME_OCTEONTX2_PMD)); 13466 if (gbl_driver_id == -1) { 13467 RTE_LOG(ERR, USER1, "OCTEON TX2 PMD must be loaded. Check if " 13468 "CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO is " 13469 "enabled in config file to run this " 13470 "testsuite.\n"); 13471 return TEST_FAILED; 13472 } 13473 return unit_test_suite_runner(&cryptodev_octeontx2_testsuite); 13474 } 13475 13476 static int 13477 test_cryptodev_caam_jr(void /*argv __rte_unused, int argc __rte_unused*/) 13478 { 13479 gbl_driver_id = rte_cryptodev_driver_id_get( 13480 RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD)); 13481 13482 if (gbl_driver_id == -1) { 13483 RTE_LOG(ERR, USER1, "CAAM_JR PMD must be loaded. Check if " 13484 "CONFIG_RTE_LIBRTE_PMD_CAAM_JR is enabled " 13485 "in config file to run this testsuite.\n"); 13486 return TEST_FAILED; 13487 } 13488 13489 return unit_test_suite_runner(&cryptodev_caam_jr_testsuite); 13490 } 13491 13492 static int 13493 test_cryptodev_nitrox(void) 13494 { 13495 gbl_driver_id = rte_cryptodev_driver_id_get( 13496 RTE_STR(CRYPTODEV_NAME_NITROX_PMD)); 13497 13498 if (gbl_driver_id == -1) { 13499 RTE_LOG(ERR, USER1, "NITROX PMD must be loaded. Check if " 13500 "CONFIG_RTE_LIBRTE_PMD_NITROX is enabled " 13501 "in config file to run this testsuite.\n"); 13502 return TEST_FAILED; 13503 } 13504 13505 return unit_test_suite_runner(&cryptodev_nitrox_testsuite); 13506 } 13507 13508 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat); 13509 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb); 13510 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl); 13511 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm); 13512 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null); 13513 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g); 13514 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi); 13515 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc); 13516 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8); 13517 REGISTER_TEST_COMMAND(cryptodev_sw_mvsam_autotest, test_cryptodev_mrvl); 13518 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec); 13519 REGISTER_TEST_COMMAND(cryptodev_dpaa_sec_autotest, test_cryptodev_dpaa_sec); 13520 REGISTER_TEST_COMMAND(cryptodev_ccp_autotest, test_cryptodev_ccp); 13521 REGISTER_TEST_COMMAND(cryptodev_virtio_autotest, test_cryptodev_virtio); 13522 REGISTER_TEST_COMMAND(cryptodev_octeontx_autotest, test_cryptodev_octeontx); 13523 REGISTER_TEST_COMMAND(cryptodev_octeontx2_autotest, test_cryptodev_octeontx2); 13524 REGISTER_TEST_COMMAND(cryptodev_caam_jr_autotest, test_cryptodev_caam_jr); 13525 REGISTER_TEST_COMMAND(cryptodev_nitrox_autotest, test_cryptodev_nitrox); 13526