]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/dpdk/test/test/test_cryptodev_perf.c
update download target update for octopus release
[ceph.git] / ceph / src / seastar / dpdk / test / test / test_cryptodev_perf.c
1 /*-
2 * BSD LICENSE
3 *
4 * Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Intel Corporation nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 #include <rte_common.h>
34 #include <rte_mbuf.h>
35 #include <rte_malloc.h>
36 #include <rte_memcpy.h>
37
38 #include <rte_crypto.h>
39 #include <rte_cryptodev.h>
40 #include <rte_cycles.h>
41
42 #include "test.h"
43 #include "test_cryptodev.h"
44 #include "test_cryptodev_gcm_test_vectors.h"
45
46
47 #define PERF_NUM_OPS_INFLIGHT (128)
48 #define DEFAULT_NUM_REQS_TO_SUBMIT (10000000)
49
50 struct crypto_testsuite_params {
51 struct rte_mempool *mbuf_mp;
52 struct rte_mempool *op_mpool;
53
54 uint16_t nb_queue_pairs;
55
56 struct rte_cryptodev_config conf;
57 struct rte_cryptodev_qp_conf qp_conf;
58 uint8_t dev_id;
59 };
60
61 enum chain_mode {
62 CIPHER_HASH,
63 HASH_CIPHER,
64 CIPHER_ONLY,
65 HASH_ONLY
66 };
67
68
69 struct symmetric_op {
70 const uint8_t *iv_data;
71 uint32_t iv_len;
72
73 const uint8_t *aad_data;
74 uint32_t aad_len;
75
76 const uint8_t *p_data;
77 uint32_t p_len;
78
79 const uint8_t *c_data;
80 uint32_t c_len;
81
82 const uint8_t *t_data;
83 uint32_t t_len;
84
85 };
86
87 struct symmetric_session_attrs {
88 enum rte_crypto_cipher_operation cipher;
89 enum rte_crypto_auth_operation auth;
90
91 enum rte_crypto_cipher_algorithm cipher_algorithm;
92 const uint8_t *key_cipher_data;
93 uint32_t key_cipher_len;
94
95 enum rte_crypto_auth_algorithm auth_algorithm;
96 const uint8_t *key_auth_data;
97 uint32_t key_auth_len;
98
99 uint32_t digest_len;
100 };
101
102 #define ALIGN_POW2_ROUNDUP(num, align) \
103 (((num) + (align) - 1) & ~((align) - 1))
104
105 /*
106 * This struct is needed to avoid unnecessary allocation or checking
107 * of allocation of crypto params with current alloc on the fly
108 * implementation.
109 */
110
111 struct crypto_params {
112 uint8_t *aad;
113 uint8_t *iv;
114 uint8_t *digest;
115 };
116
117 struct perf_test_params {
118
119 unsigned total_operations;
120 unsigned burst_size;
121 unsigned buf_size;
122
123 enum chain_mode chain;
124
125 enum rte_crypto_cipher_algorithm cipher_algo;
126 unsigned cipher_key_length;
127 enum rte_crypto_auth_algorithm auth_algo;
128
129 struct symmetric_session_attrs *session_attrs;
130
131 struct symmetric_op *symmetric_op;
132 };
133
134 #define MAX_NUM_OF_OPS_PER_UT (128)
135
136 struct crypto_unittest_params {
137 struct rte_crypto_sym_xform cipher_xform;
138 struct rte_crypto_sym_xform auth_xform;
139
140 struct rte_cryptodev_sym_session *sess;
141
142 struct rte_crypto_op *op;
143
144 struct rte_mbuf *obuf[MAX_NUM_OF_OPS_PER_UT];
145 struct rte_mbuf *ibuf[MAX_NUM_OF_OPS_PER_UT];
146
147 uint8_t *digest;
148 };
149
150 static struct rte_cryptodev_sym_session *
151 test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,
152 enum rte_crypto_cipher_algorithm cipher_algo,
153 unsigned int cipher_key_len,
154 enum rte_crypto_auth_algorithm auth_algo);
155 static struct rte_cryptodev_sym_session *
156 test_perf_create_openssl_session(uint8_t dev_id, enum chain_mode chain,
157 enum rte_crypto_cipher_algorithm cipher_algo,
158 unsigned int cipher_key_len,
159 enum rte_crypto_auth_algorithm auth_algo);
160 static struct rte_cryptodev_sym_session *
161 test_perf_create_armv8_session(uint8_t dev_id, enum chain_mode chain,
162 enum rte_crypto_cipher_algorithm cipher_algo,
163 unsigned int cipher_key_len,
164 enum rte_crypto_auth_algorithm auth_algo);
165
166 static struct rte_mbuf *
167 test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz);
168 static inline struct rte_crypto_op *
169 test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
170 struct rte_cryptodev_sym_session *sess, unsigned data_len,
171 unsigned digest_len);
172 static inline struct rte_crypto_op *
173 test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
174 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
175 unsigned int digest_len, enum chain_mode chain);
176 static inline struct rte_crypto_op *
177 test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
178 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
179 unsigned int digest_len, enum chain_mode chain __rte_unused);
180 static inline struct rte_crypto_op *
181 test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
182 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
183 unsigned int digest_len, enum chain_mode chain __rte_unused);
184 static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo);
185
186
187 static const char *chain_mode_name(enum chain_mode mode)
188 {
189 switch (mode) {
190 case CIPHER_HASH: return "cipher_hash"; break;
191 case HASH_CIPHER: return "hash_cipher"; break;
192 case CIPHER_ONLY: return "cipher_only"; break;
193 case HASH_ONLY: return "hash_only"; break;
194 default: return ""; break;
195 }
196 }
197
198 static const char *pmd_name(enum rte_cryptodev_type pmd)
199 {
200 switch (pmd) {
201 case RTE_CRYPTODEV_NULL_PMD: return RTE_STR(CRYPTODEV_NAME_NULL_PMD); break;
202 case RTE_CRYPTODEV_AESNI_GCM_PMD:
203 return RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD);
204 case RTE_CRYPTODEV_AESNI_MB_PMD:
205 return RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD);
206 case RTE_CRYPTODEV_QAT_SYM_PMD:
207 return RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
208 case RTE_CRYPTODEV_SNOW3G_PMD:
209 return RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD);
210 case RTE_CRYPTODEV_DPAA2_SEC_PMD:
211 return RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD);
212 default:
213 return "";
214 }
215 }
216
217 static const char *cipher_algo_name(enum rte_crypto_cipher_algorithm cipher_algo)
218 {
219 switch (cipher_algo) {
220 case RTE_CRYPTO_CIPHER_NULL: return "NULL";
221 case RTE_CRYPTO_CIPHER_3DES_CBC: return "3DES_CBC";
222 case RTE_CRYPTO_CIPHER_3DES_CTR: return "3DES_CTR";
223 case RTE_CRYPTO_CIPHER_3DES_ECB: return "3DES_ECB";
224 case RTE_CRYPTO_CIPHER_AES_CBC: return "AES_CBC";
225 case RTE_CRYPTO_CIPHER_AES_CCM: return "AES_CCM";
226 case RTE_CRYPTO_CIPHER_AES_CTR: return "AES_CTR";
227 case RTE_CRYPTO_CIPHER_AES_ECB: return "AES_ECB";
228 case RTE_CRYPTO_CIPHER_AES_F8: return "AES_F8";
229 case RTE_CRYPTO_CIPHER_AES_GCM: return "AES_GCM";
230 case RTE_CRYPTO_CIPHER_AES_XTS: return "AES_XTS";
231 case RTE_CRYPTO_CIPHER_ARC4: return "ARC4";
232 case RTE_CRYPTO_CIPHER_KASUMI_F8: return "KASUMI_F8";
233 case RTE_CRYPTO_CIPHER_SNOW3G_UEA2: return "SNOW3G_UEA2";
234 case RTE_CRYPTO_CIPHER_ZUC_EEA3: return "ZUC_EEA3";
235 default: return "Another cipher algo";
236 }
237 }
238
239 static const char *auth_algo_name(enum rte_crypto_auth_algorithm auth_algo)
240 {
241 switch (auth_algo) {
242 case RTE_CRYPTO_AUTH_NULL: return "NULL"; break;
243 case RTE_CRYPTO_AUTH_AES_CBC_MAC: return "AES_CBC_MAC"; break;
244 case RTE_CRYPTO_AUTH_AES_CCM: return "AES_CCM"; break;
245 case RTE_CRYPTO_AUTH_AES_CMAC: return "AES_CMAC,"; break;
246 case RTE_CRYPTO_AUTH_AES_GCM: return "AES_GCM"; break;
247 case RTE_CRYPTO_AUTH_AES_GMAC: return "AES_GMAC"; break;
248 case RTE_CRYPTO_AUTH_AES_XCBC_MAC: return "AES_XCBC_MAC"; break;
249 case RTE_CRYPTO_AUTH_KASUMI_F9: return "KASUMI_F9"; break;
250 case RTE_CRYPTO_AUTH_MD5: return "MD5"; break;
251 case RTE_CRYPTO_AUTH_MD5_HMAC: return "MD5_HMAC,"; break;
252 case RTE_CRYPTO_AUTH_SHA1: return "SHA1"; break;
253 case RTE_CRYPTO_AUTH_SHA1_HMAC: return "SHA1_HMAC"; break;
254 case RTE_CRYPTO_AUTH_SHA224: return "SHA224"; break;
255 case RTE_CRYPTO_AUTH_SHA224_HMAC: return "SHA224_HMAC"; break;
256 case RTE_CRYPTO_AUTH_SHA256: return "SHA256"; break;
257 case RTE_CRYPTO_AUTH_SHA256_HMAC: return "SHA256_HMAC"; break;
258 case RTE_CRYPTO_AUTH_SHA384: return "SHA384,"; break;
259 case RTE_CRYPTO_AUTH_SHA384_HMAC: return "SHA384_HMAC,"; break;
260 case RTE_CRYPTO_AUTH_SHA512: return "SHA512,"; break;
261 case RTE_CRYPTO_AUTH_SHA512_HMAC: return "SHA512_HMAC,"; break;
262 case RTE_CRYPTO_AUTH_SNOW3G_UIA2: return "SNOW3G_UIA2"; break;
263 case RTE_CRYPTO_AUTH_ZUC_EIA3: return "RTE_CRYPTO_AUTH_ZUC_EIA3"; break;
264 default: return "Another auth algo"; break;
265 };
266 }
267
268 static struct rte_mbuf *
269 setup_test_string(struct rte_mempool *mpool,
270 const uint8_t *data, size_t len, uint8_t blocksize)
271 {
272 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
273 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
274
275 if (m) {
276 char *dst = rte_pktmbuf_append(m, t_len);
277
278 if (!dst) {
279 rte_pktmbuf_free(m);
280 return NULL;
281 }
282
283 rte_memcpy(dst, (const void *)data, t_len);
284 }
285 return m;
286 }
287
288 static struct crypto_testsuite_params testsuite_params = { NULL };
289 static struct crypto_unittest_params unittest_params;
290 static enum rte_cryptodev_type gbl_cryptodev_perftest_devtype;
291
292 static int
293 testsuite_setup(void)
294 {
295 struct crypto_testsuite_params *ts_params = &testsuite_params;
296 struct rte_cryptodev_info info;
297 unsigned i, nb_devs, valid_dev_id = 0;
298 int ret;
299 uint16_t qp_id;
300
301 ts_params->mbuf_mp = rte_mempool_lookup("CRYPTO_PERF_MBUFPOOL");
302 if (ts_params->mbuf_mp == NULL) {
303 /* Not already created so create */
304 ts_params->mbuf_mp = rte_pktmbuf_pool_create(
305 "CRYPTO_PERF_MBUFPOOL",
306 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
307 rte_socket_id());
308 if (ts_params->mbuf_mp == NULL) {
309 RTE_LOG(ERR, USER1, "Can't create CRYPTO_PERF_MBUFPOOL\n");
310 return TEST_FAILED;
311 }
312 }
313
314
315 ts_params->op_mpool = rte_crypto_op_pool_create("CRYPTO_OP_POOL",
316 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
317 NUM_MBUFS, MBUF_CACHE_SIZE,
318 DEFAULT_NUM_XFORMS *
319 sizeof(struct rte_crypto_sym_xform),
320 rte_socket_id());
321 if (ts_params->op_mpool == NULL) {
322 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
323 return TEST_FAILED;
324 }
325
326 /* Create an AESNI MB device if required */
327 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD) {
328 #ifndef RTE_LIBRTE_PMD_AESNI_MB
329 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
330 " enabled in config file to run this testsuite.\n");
331 return TEST_FAILED;
332 #endif
333 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);
334 if (nb_devs < 1) {
335 ret = rte_vdev_init(
336 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
337
338 TEST_ASSERT(ret == 0,
339 "Failed to create instance of pmd : %s",
340 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
341 }
342 }
343
344 /* Create an AESNI GCM device if required */
345 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_GCM_PMD) {
346 #ifndef RTE_LIBRTE_PMD_AESNI_GCM
347 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
348 " enabled in config file to run this testsuite.\n");
349 return TEST_FAILED;
350 #endif
351 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_GCM_PMD);
352 if (nb_devs < 1) {
353 ret = rte_vdev_init(
354 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL);
355
356 TEST_ASSERT(ret == 0,
357 "Failed to create instance of pmd : %s",
358 RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
359 }
360 }
361
362 /* Create a SNOW3G device if required */
363 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_SNOW3G_PMD) {
364 #ifndef RTE_LIBRTE_PMD_SNOW3G
365 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
366 " enabled in config file to run this testsuite.\n");
367 return TEST_FAILED;
368 #endif
369 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
370 if (nb_devs < 1) {
371 ret = rte_vdev_init(
372 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL);
373
374 TEST_ASSERT(ret == 0,
375 "Failed to create instance of pmd : %s",
376 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
377 }
378 }
379
380 /* Create an OPENSSL device if required */
381 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_OPENSSL_PMD) {
382 #ifndef RTE_LIBRTE_PMD_OPENSSL
383 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_OPENSSL must be"
384 " enabled in config file to run this testsuite.\n");
385 return TEST_FAILED;
386 #endif
387 nb_devs = rte_cryptodev_count_devtype(
388 RTE_CRYPTODEV_OPENSSL_PMD);
389 if (nb_devs < 1) {
390 ret = rte_vdev_init(
391 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
392 NULL);
393
394 TEST_ASSERT(ret == 0, "Failed to create "
395 "instance of pmd : %s",
396 RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
397 }
398 }
399
400 /* Create an ARMv8 device if required */
401 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_ARMV8_PMD) {
402 #ifndef RTE_LIBRTE_PMD_ARMV8_CRYPTO
403 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO must be"
404 " enabled in config file to run this testsuite.\n");
405 return TEST_FAILED;
406 #endif
407 nb_devs = rte_cryptodev_count_devtype(
408 RTE_CRYPTODEV_ARMV8_PMD);
409 if (nb_devs < 1) {
410 ret = rte_vdev_init(
411 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
412 NULL);
413
414 TEST_ASSERT(ret == 0, "Failed to create "
415 "instance of pmd : %s",
416 RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
417 }
418 }
419
420 #ifndef RTE_LIBRTE_PMD_QAT
421 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
422 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
423 "in config file to run this testsuite.\n");
424 return TEST_FAILED;
425 }
426 #endif
427
428 nb_devs = rte_cryptodev_count();
429 if (nb_devs < 1) {
430 RTE_LOG(ERR, USER1, "No crypto devices found?\n");
431 return TEST_FAILED;
432 }
433
434 /* Search for the first valid */
435 for (i = 0; i < nb_devs; i++) {
436 rte_cryptodev_info_get(i, &info);
437 if (info.dev_type == gbl_cryptodev_perftest_devtype) {
438 ts_params->dev_id = i;
439 valid_dev_id = 1;
440 break;
441 }
442 }
443
444 if (!valid_dev_id)
445 return TEST_FAILED;
446
447 /*
448 * Using Crypto Device Id 0 by default.
449 * Set up all the qps on this device
450 */
451
452 rte_cryptodev_info_get(ts_params->dev_id, &info);
453
454 ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
455 ts_params->conf.socket_id = SOCKET_ID_ANY;
456 ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
457
458 TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->dev_id,
459 &ts_params->conf),
460 "Failed to configure cryptodev %u",
461 ts_params->dev_id);
462
463 ts_params->qp_conf.nb_descriptors = PERF_NUM_OPS_INFLIGHT;
464 for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
465
466 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
467 ts_params->dev_id, qp_id,
468 &ts_params->qp_conf,
469 rte_cryptodev_socket_id(ts_params->dev_id)),
470 "Failed to setup queue pair %u on cryptodev %u",
471 qp_id, ts_params->dev_id);
472 }
473
474 return TEST_SUCCESS;
475 }
476 static void
477 testsuite_teardown(void)
478 {
479 struct crypto_testsuite_params *ts_params =
480 &testsuite_params;
481
482 if (ts_params->mbuf_mp != NULL)
483 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
484 rte_mempool_avail_count(ts_params->mbuf_mp));
485 if (ts_params->op_mpool != NULL)
486 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_OP POOL count %u\n",
487 rte_mempool_avail_count(ts_params->op_mpool));
488 }
489
490 static int
491 ut_setup(void)
492 {
493 struct crypto_testsuite_params *ts_params = &testsuite_params;
494 struct crypto_unittest_params *ut_params = &unittest_params;
495
496 /* Clear unit test parameters before running test */
497 memset(ut_params, 0, sizeof(*ut_params));
498
499 rte_cryptodev_stats_reset(ts_params->dev_id);
500
501 /* Start the device */
502 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->dev_id),
503 "Failed to start cryptodev %u",
504 ts_params->dev_id);
505
506 return TEST_SUCCESS;
507 }
508
509 static void
510 ut_teardown(void)
511 {
512 struct crypto_testsuite_params *ts_params = &testsuite_params;
513 struct crypto_unittest_params *ut_params = &unittest_params;
514 struct rte_cryptodev_stats stats;
515
516 unsigned i;
517
518 /* free crypto session structure */
519 if (ut_params->sess)
520 rte_cryptodev_sym_session_free(ts_params->dev_id,
521 ut_params->sess);
522
523 /* free crypto operation structure */
524 if (ut_params->op)
525 rte_crypto_op_free(ut_params->op);
526
527 for (i = 0; i < MAX_NUM_OF_OPS_PER_UT; i++) {
528 if (ut_params->obuf[i])
529 rte_pktmbuf_free(ut_params->obuf[i]);
530 else if (ut_params->ibuf[i])
531 rte_pktmbuf_free(ut_params->ibuf[i]);
532 }
533
534 if (ts_params->mbuf_mp != NULL)
535 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
536 rte_mempool_avail_count(ts_params->mbuf_mp));
537
538 rte_cryptodev_stats_get(ts_params->dev_id, &stats);
539
540 /* Stop the device */
541 rte_cryptodev_stop(ts_params->dev_id);
542 }
543
544 const char plaintext_quote[] =
545 "THE COUNT OF MONTE CRISTO by Alexandre Dumas, Pere Chapter 1. "
546 "Marseilles--The Arrival. On the 24th of February, 1815, the "
547 "look-out at Notre-Dame de la Garde signalled the three-master,"
548 " the Pharaon from Smyrna, Trieste, and Naples. As usual, a "
549 "pilot put off immediately, and rounding the Chateau d'If, got "
550 "on board the vessel between Cape Morgion and Rion island. "
551 "Immediately, and according to custom, the ramparts of Fort "
552 "Saint-Jean were covered with spectators; it is always an event "
553 "at Marseilles for a ship to come into port, especially when "
554 "this ship, like the Pharaon, has been built, rigged, and laden"
555 " at the old Phocee docks, and belongs to an owner of the city."
556 " The ship drew on and had safely passed the strait, which some"
557 " volcanic shock has made between the Calasareigne and Jaros "
558 "islands; had doubled Pomegue, and approached the harbor under"
559 " topsails, jib, and spanker, but so slowly and sedately that"
560 " the idlers, with that instinct which is the forerunner of "
561 "evil, asked one another what misfortune could have happened "
562 "on board. However, those experienced in navigation saw plainly"
563 " that if any accident had occurred, it was not to the vessel "
564 "herself, for she bore down with all the evidence of being "
565 "skilfully handled, the anchor a-cockbill, the jib-boom guys "
566 "already eased off, and standing by the side of the pilot, who"
567 " was steering the Pharaon towards the narrow entrance of the"
568 " inner port, was a young man, who, with activity and vigilant"
569 " eye, watched every motion of the ship, and repeated each "
570 "direction of the pilot. The vague disquietude which prevailed "
571 "among the spectators had so much affected one of the crowd "
572 "that he did not await the arrival of the vessel in harbor, but"
573 " jumping into a small skiff, desired to be pulled alongside "
574 "the Pharaon, which he reached as she rounded into La Reserve "
575 "basin. When the young man on board saw this person approach, "
576 "he left his station by the pilot, and, hat in hand, leaned "
577 "over the ship's bulwarks. He was a fine, tall, slim young "
578 "fellow of eighteen or twenty, with black eyes, and hair as "
579 "dark as a raven's wing; and his whole appearance bespoke that "
580 "calmness and resolution peculiar to men accustomed from their "
581 "cradle to contend with danger. \"Ah, is it you, Dantes?\" "
582 "cried the man in the skiff. \"What's the matter? and why have "
583 "you such an air of sadness aboard?\" \"A great misfortune, M. "
584 "Morrel,\" replied the young man,--\"a great misfortune, for me"
585 " especially! Off Civita Vecchia we lost our brave Captain "
586 "Leclere.\" \"And the cargo?\" inquired the owner, eagerly. "
587 "\"Is all safe, M. Morrel; and I think you will be satisfied on"
588 " that head. But poor Captain Leclere--\" \"What happened to "
589 "him?\" asked the owner, with an air of considerable "
590 "resignation. \"What happened to the worthy captain?\" \"He "
591 "died.\" \"Fell into the sea?\" \"No, sir, he died of "
592 "brain-fever in dreadful agony.\" Then turning to the crew, "
593 "he said, \"Bear a hand there, to take in sail!\" All hands "
594 "obeyed, and at once the eight or ten seamen who composed the "
595 "crew, sprang to their respective stations at the spanker "
596 "brails and outhaul, topsail sheets and halyards, the jib "
597 "downhaul, and the topsail clewlines and buntlines. The young "
598 "sailor gave a look to see that his orders were promptly and "
599 "accurately obeyed, and then turned again to the owner. \"And "
600 "how did this misfortune occur?\" inquired the latter, resuming"
601 " the interrupted conversation. \"Alas, sir, in the most "
602 "unexpected manner. After a long talk with the harbor-master, "
603 "Captain Leclere left Naples greatly disturbed in mind. In "
604 "twenty-four hours he was attacked by a fever, and died three "
605 "days afterwards. We performed the usual burial service, and he"
606 " is at his rest, sewn up in his hammock with a thirty-six "
607 "pound shot at his head and his heels, off El Giglio island. "
608 "We bring to his widow his sword and cross of honor. It was "
609 "worth while, truly,\" added the young man with a melancholy "
610 "smile, \"to make war against the English for ten years, and "
611 "to die in his bed at last, like everybody else.";
612
613 #define QUOTE_LEN_64B (64)
614 #define QUOTE_LEN_128B (128)
615 #define QUOTE_LEN_256B (256)
616 #define QUOTE_LEN_512B (512)
617 #define QUOTE_LEN_768B (768)
618 #define QUOTE_LEN_1024B (1024)
619 #define QUOTE_LEN_1280B (1280)
620 #define QUOTE_LEN_1536B (1536)
621 #define QUOTE_LEN_1792B (1792)
622 #define QUOTE_LEN_2048B (2048)
623
624
625 /* ***** AES-CBC / HMAC-SHA256 Performance Tests ***** */
626
627 #define HMAC_KEY_LENGTH_SHA256 (DIGEST_BYTE_LENGTH_SHA256)
628
629 #define CIPHER_KEY_LENGTH_AES_CBC (16)
630 #define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
631
632 static uint8_t aes_cbc_128_key[] = {
633 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
634 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA };
635
636 static uint8_t aes_cbc_128_iv[] = {
637 0xf5, 0xd3, 0x89, 0x0f, 0x47, 0x00, 0xcb, 0x52,
638 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1 };
639
640 static uint8_t hmac_sha256_key[] = {
641 0xff, 0xcb, 0x37, 0x30, 0x1d, 0x4a, 0xc2, 0x41,
642 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
643 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
644 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };
645
646
647 /* Cipher text output */
648
649 static const uint8_t AES_CBC_ciphertext_64B[] = {
650 0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50,
651 0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0,
652 0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36,
653 0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e,
654 0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c,
655 0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e,
656 0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6,
657 0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c
658 };
659
660 static const uint8_t AES_CBC_ciphertext_128B[] = {
661 0x79, 0x92, 0x65, 0xc8, 0xfb, 0x0a, 0xc7, 0xc4,
662 0x9b, 0x3b, 0xbe, 0x69, 0x7f, 0x7c, 0xf4, 0x4e,
663 0xa5, 0x0d, 0xf6, 0x33, 0xc4, 0xdf, 0xf3, 0x0d,
664 0xdb, 0xb9, 0x68, 0x34, 0xb0, 0x0d, 0xbd, 0xb9,
665 0xa7, 0xf3, 0x86, 0x50, 0x2a, 0xbe, 0x50, 0x5d,
666 0xb3, 0xbe, 0x72, 0xf9, 0x02, 0xb1, 0x69, 0x0b,
667 0x8c, 0x96, 0x4c, 0x3c, 0x0c, 0x1e, 0x76, 0xe5,
668 0x7e, 0x75, 0xdd, 0xd0, 0xa9, 0x75, 0x00, 0x13,
669 0x6b, 0x1e, 0xc0, 0xad, 0xfc, 0x03, 0xb5, 0x99,
670 0xdc, 0x37, 0x35, 0xfc, 0x16, 0x34, 0xfd, 0xb4,
671 0xea, 0x1e, 0xb6, 0x51, 0xdf, 0xab, 0x87, 0xd6,
672 0x87, 0x41, 0xfa, 0x1c, 0xc6, 0x78, 0xa6, 0x3c,
673 0x1d, 0x76, 0xfe, 0xff, 0x65, 0xfc, 0x63, 0x1e,
674 0x1f, 0xe2, 0x7c, 0x9b, 0xa2, 0x72, 0xc3, 0x34,
675 0x23, 0xdf, 0x01, 0xf0, 0xfd, 0x02, 0x8b, 0x97,
676 0x00, 0x2b, 0x97, 0x4e, 0xab, 0x98, 0x21, 0x3c
677 };
678
679 static const uint8_t AES_CBC_ciphertext_256B[] = {
680 0xc7, 0x71, 0x2b, 0xed, 0x2c, 0x97, 0x59, 0xfa,
681 0xcf, 0x5a, 0xb9, 0x31, 0x92, 0xe0, 0xc9, 0x92,
682 0xc0, 0x2d, 0xd5, 0x9c, 0x84, 0xbf, 0x70, 0x36,
683 0x13, 0x48, 0xe0, 0xb1, 0xbf, 0x6c, 0xcd, 0x91,
684 0xa0, 0xc3, 0x57, 0x6c, 0x3f, 0x0e, 0x34, 0x41,
685 0xe7, 0x9c, 0xc0, 0xec, 0x18, 0x0c, 0x05, 0x52,
686 0x78, 0xe2, 0x3c, 0x6e, 0xdf, 0xa5, 0x49, 0xc7,
687 0xf2, 0x55, 0x00, 0x8f, 0x65, 0x6d, 0x4b, 0xd0,
688 0xcb, 0xd4, 0xd2, 0x0b, 0xea, 0xf4, 0xb0, 0x85,
689 0x61, 0x9e, 0x36, 0xc0, 0x71, 0xb7, 0x80, 0xad,
690 0x40, 0x78, 0xb4, 0x70, 0x2b, 0xe8, 0x80, 0xc5,
691 0x19, 0x35, 0x96, 0x55, 0x3b, 0x40, 0x03, 0xbb,
692 0x9f, 0xa6, 0xc2, 0x82, 0x92, 0x04, 0xc3, 0xa6,
693 0x96, 0xc4, 0x7f, 0x4c, 0x3e, 0x3c, 0x79, 0x82,
694 0x88, 0x8b, 0x3f, 0x8b, 0xc5, 0x9f, 0x44, 0xbe,
695 0x71, 0xe7, 0x09, 0xa2, 0x40, 0xa2, 0x23, 0x4e,
696 0x9f, 0x31, 0xab, 0x6f, 0xdf, 0x59, 0x40, 0xe1,
697 0x12, 0x15, 0x55, 0x4b, 0xea, 0x3f, 0xa1, 0x41,
698 0x4f, 0xaf, 0xcd, 0x27, 0x2a, 0x61, 0xa1, 0x9e,
699 0x82, 0x30, 0x05, 0x05, 0x55, 0xce, 0x99, 0xd3,
700 0x8f, 0x3f, 0x86, 0x79, 0xdc, 0x9f, 0x33, 0x07,
701 0x75, 0x26, 0xc8, 0x72, 0x81, 0x0f, 0x9b, 0xf7,
702 0xb1, 0xfb, 0xd3, 0x91, 0x36, 0x08, 0xab, 0x26,
703 0x70, 0x53, 0x0c, 0x99, 0xfd, 0xa9, 0x07, 0xb4,
704 0xe9, 0xce, 0xc1, 0xd6, 0xd2, 0x2c, 0x71, 0x80,
705 0xec, 0x59, 0x61, 0x0b, 0x24, 0xf0, 0x6d, 0x33,
706 0x73, 0x45, 0x6e, 0x80, 0x03, 0x45, 0xf2, 0x76,
707 0xa5, 0x8a, 0xc9, 0xcf, 0xaf, 0x4a, 0xed, 0x35,
708 0xc0, 0x97, 0x52, 0xc5, 0x00, 0xdf, 0xef, 0xc7,
709 0x9f, 0xf2, 0xe8, 0x15, 0x3e, 0xb3, 0x30, 0xe7,
710 0x00, 0xd0, 0x4e, 0xeb, 0x79, 0xf6, 0xf6, 0xcf,
711 0xf0, 0xe7, 0x61, 0xd5, 0x3d, 0x6a, 0x73, 0x9d
712 };
713
714 static const uint8_t AES_CBC_ciphertext_512B[] = {
715 0xb4, 0xc6, 0xc6, 0x5f, 0x7e, 0xca, 0x05, 0x70,
716 0x21, 0x7b, 0x92, 0x9e, 0x23, 0xe7, 0x92, 0xb8,
717 0x27, 0x3d, 0x20, 0x29, 0x57, 0xfa, 0x1f, 0x26,
718 0x0a, 0x04, 0x34, 0xa6, 0xf2, 0xdc, 0x44, 0xb6,
719 0x43, 0x40, 0x62, 0xde, 0x0c, 0xde, 0x1c, 0x30,
720 0x43, 0x85, 0x0b, 0xe8, 0x93, 0x1f, 0xa1, 0x2a,
721 0x8a, 0x27, 0x35, 0x39, 0x14, 0x9f, 0x37, 0x64,
722 0x59, 0xb5, 0x0e, 0x96, 0x82, 0x5d, 0x63, 0x45,
723 0xd6, 0x93, 0x89, 0x46, 0xe4, 0x71, 0x31, 0xeb,
724 0x0e, 0xd1, 0x7b, 0xda, 0x90, 0xb5, 0x81, 0xac,
725 0x76, 0x54, 0x54, 0x85, 0x0b, 0xa9, 0x46, 0x9c,
726 0xf0, 0xfd, 0xde, 0x5d, 0xa8, 0xe3, 0xee, 0xe9,
727 0xf4, 0x9d, 0x34, 0x76, 0x39, 0xe7, 0xc3, 0x4a,
728 0x84, 0x38, 0x92, 0x61, 0xf1, 0x12, 0x9f, 0x05,
729 0xda, 0xdb, 0xc1, 0xd4, 0xb0, 0xa0, 0x27, 0x19,
730 0xa0, 0x56, 0x5d, 0x9b, 0xcc, 0x47, 0x7c, 0x15,
731 0x1d, 0x52, 0x66, 0xd5, 0xff, 0xef, 0x12, 0x23,
732 0x86, 0xe2, 0xee, 0x81, 0x2c, 0x3d, 0x7d, 0x28,
733 0xd5, 0x42, 0xdf, 0xdb, 0x75, 0x1c, 0xeb, 0xdf,
734 0x13, 0x23, 0xd5, 0x17, 0x89, 0xea, 0xd7, 0x01,
735 0xff, 0x57, 0x6a, 0x44, 0x61, 0xf4, 0xea, 0xbe,
736 0x97, 0x9b, 0xc2, 0xb1, 0x9c, 0x5d, 0xff, 0x4f,
737 0x73, 0x2d, 0x3f, 0x57, 0x28, 0x38, 0xbf, 0x3d,
738 0x9f, 0xda, 0x49, 0x55, 0x8f, 0xb2, 0x77, 0xec,
739 0x0f, 0xbc, 0xce, 0xb8, 0xc6, 0xe1, 0x03, 0xed,
740 0x35, 0x9c, 0xf2, 0x4d, 0xa4, 0x29, 0x6c, 0xd6,
741 0x6e, 0x05, 0x53, 0x46, 0xc1, 0x41, 0x09, 0x36,
742 0x0b, 0x7d, 0xf4, 0x9e, 0x0f, 0xba, 0x86, 0x33,
743 0xdd, 0xf1, 0xa7, 0xf7, 0xd5, 0x29, 0xa8, 0xa7,
744 0x4d, 0xce, 0x0c, 0xf5, 0xb4, 0x6c, 0xd8, 0x27,
745 0xb0, 0x87, 0x2a, 0x6f, 0x7f, 0x3f, 0x8f, 0xc3,
746 0xe2, 0x3e, 0x94, 0xcf, 0x61, 0x4a, 0x09, 0x3d,
747 0xf9, 0x55, 0x19, 0x31, 0xf2, 0xd2, 0x4a, 0x3e,
748 0xc1, 0xf5, 0xed, 0x7c, 0x45, 0xb0, 0x0c, 0x7b,
749 0xdd, 0xa6, 0x0a, 0x26, 0x66, 0xec, 0x85, 0x49,
750 0x00, 0x38, 0x05, 0x7c, 0x9c, 0x1c, 0x92, 0xf5,
751 0xf7, 0xdb, 0x5d, 0xbd, 0x61, 0x0c, 0xc9, 0xaf,
752 0xfd, 0x57, 0x3f, 0xee, 0x2b, 0xad, 0x73, 0xef,
753 0xa3, 0xc1, 0x66, 0x26, 0x44, 0x5e, 0xf9, 0x12,
754 0x86, 0x66, 0xa9, 0x61, 0x75, 0xa1, 0xbc, 0x40,
755 0x7f, 0xa8, 0x08, 0x02, 0xc0, 0x76, 0x0e, 0x76,
756 0xb3, 0x26, 0x3d, 0x1c, 0x40, 0x65, 0xe4, 0x18,
757 0x0f, 0x62, 0x17, 0x8f, 0x1e, 0x61, 0xb8, 0x08,
758 0x83, 0x54, 0x42, 0x11, 0x03, 0x30, 0x8e, 0xb7,
759 0xc1, 0x9c, 0xec, 0x69, 0x52, 0x95, 0xfb, 0x7b,
760 0x1a, 0x0c, 0x20, 0x24, 0xf7, 0xb8, 0x38, 0x0c,
761 0xb8, 0x7b, 0xb6, 0x69, 0x70, 0xd0, 0x61, 0xb9,
762 0x70, 0x06, 0xc2, 0x5b, 0x20, 0x47, 0xf7, 0xd9,
763 0x32, 0xc2, 0xf2, 0x90, 0xb6, 0x4d, 0xcd, 0x3c,
764 0x6d, 0x74, 0xea, 0x82, 0x35, 0x1b, 0x08, 0x44,
765 0xba, 0xb7, 0x33, 0x82, 0x33, 0x27, 0x54, 0x77,
766 0x6e, 0x58, 0xfe, 0x46, 0x5a, 0xb4, 0x88, 0x53,
767 0x8d, 0x9b, 0xb1, 0xab, 0xdf, 0x04, 0xe1, 0xfb,
768 0xd7, 0x1e, 0xd7, 0x38, 0x64, 0x54, 0xba, 0xb0,
769 0x6c, 0x84, 0x7a, 0x0f, 0xa7, 0x80, 0x6b, 0x86,
770 0xd9, 0xc9, 0xc6, 0x31, 0x95, 0xfa, 0x8a, 0x2c,
771 0x14, 0xe1, 0x85, 0x66, 0x27, 0xfd, 0x63, 0x3e,
772 0xf0, 0xfa, 0x81, 0xc9, 0x89, 0x4f, 0xe2, 0x6a,
773 0x8c, 0x17, 0xb5, 0xc7, 0x9f, 0x5d, 0x3f, 0x6b,
774 0x3f, 0xcd, 0x13, 0x7a, 0x3c, 0xe6, 0x4e, 0xfa,
775 0x7a, 0x10, 0xb8, 0x7c, 0x40, 0xec, 0x93, 0x11,
776 0x1f, 0xd0, 0x9e, 0xc3, 0x56, 0xb9, 0xf5, 0x21,
777 0x18, 0x41, 0x31, 0xea, 0x01, 0x8d, 0xea, 0x1c,
778 0x95, 0x5e, 0x56, 0x33, 0xbc, 0x7a, 0x3f, 0x6f
779 };
780
781 static const uint8_t AES_CBC_ciphertext_768B[] = {
782 0x3e, 0x7f, 0x9e, 0x4c, 0x88, 0x15, 0x68, 0x69,
783 0x10, 0x09, 0xe1, 0xa7, 0x0f, 0x27, 0x88, 0x2d,
784 0x90, 0x73, 0x4f, 0x67, 0xd3, 0x8b, 0xaf, 0xa1,
785 0x2c, 0x37, 0xa5, 0x6c, 0x7c, 0xbd, 0x95, 0x4c,
786 0x82, 0xcf, 0x05, 0x49, 0x16, 0x5c, 0xe7, 0x06,
787 0xd4, 0xcb, 0x55, 0x65, 0x9a, 0xd0, 0xe1, 0x46,
788 0x3a, 0x37, 0x71, 0xad, 0xb0, 0xb4, 0x99, 0x1e,
789 0x23, 0x57, 0x48, 0x96, 0x9c, 0xc5, 0xc4, 0xdb,
790 0x64, 0x3e, 0xc9, 0x7f, 0x90, 0x5a, 0xa0, 0x08,
791 0x75, 0x4c, 0x09, 0x06, 0x31, 0x6e, 0x59, 0x29,
792 0xfc, 0x2f, 0x72, 0xde, 0xf2, 0x40, 0x5a, 0xfe,
793 0xd3, 0x66, 0x64, 0xb8, 0x9c, 0xc9, 0xa6, 0x1f,
794 0xc3, 0x52, 0xcd, 0xb5, 0xd1, 0x4f, 0x43, 0x3f,
795 0xf4, 0x59, 0x25, 0xc4, 0xdd, 0x3e, 0x58, 0x7c,
796 0x21, 0xd6, 0x21, 0xce, 0xa4, 0xbe, 0x08, 0x23,
797 0x46, 0x68, 0xc0, 0x00, 0x91, 0x47, 0xca, 0x9b,
798 0xe0, 0xb4, 0xe3, 0xab, 0xbf, 0xcf, 0x68, 0x26,
799 0x97, 0x23, 0x09, 0x93, 0x64, 0x8f, 0x57, 0x59,
800 0xe2, 0x41, 0x7c, 0xa2, 0x48, 0x7e, 0xd5, 0x2c,
801 0x54, 0x09, 0x1b, 0x07, 0x94, 0xca, 0x39, 0x83,
802 0xdd, 0xf4, 0x7a, 0x1d, 0x2d, 0xdd, 0x67, 0xf7,
803 0x3c, 0x30, 0x89, 0x3e, 0xc1, 0xdc, 0x1d, 0x8f,
804 0xfc, 0xb1, 0xe9, 0x13, 0x31, 0xb0, 0x16, 0xdb,
805 0x88, 0xf2, 0x32, 0x7e, 0x73, 0xa3, 0xdf, 0x08,
806 0x6b, 0x53, 0x92, 0x08, 0xc9, 0x9d, 0x98, 0xb2,
807 0xf4, 0x8c, 0xb1, 0x95, 0xdc, 0xb6, 0xfc, 0xec,
808 0xf1, 0xc9, 0x0d, 0x6d, 0x42, 0x2c, 0xf5, 0x38,
809 0x29, 0xf4, 0xd8, 0x98, 0x0f, 0xb0, 0x81, 0xa5,
810 0xaa, 0xe6, 0x1f, 0x6e, 0x87, 0x32, 0x1b, 0x02,
811 0x07, 0x57, 0x38, 0x83, 0xf3, 0xe4, 0x54, 0x7c,
812 0xa8, 0x43, 0xdf, 0x3f, 0x42, 0xfd, 0x67, 0x28,
813 0x06, 0x4d, 0xea, 0xce, 0x1f, 0x84, 0x4a, 0xcd,
814 0x8c, 0x61, 0x5e, 0x8f, 0x61, 0xed, 0x84, 0x03,
815 0x53, 0x6a, 0x9e, 0xbf, 0x68, 0x83, 0xa7, 0x42,
816 0x56, 0x57, 0xcd, 0x45, 0x29, 0xfc, 0x7b, 0x07,
817 0xfc, 0xe9, 0xb9, 0x42, 0xfd, 0x29, 0xd5, 0xfd,
818 0x98, 0x11, 0xd1, 0x8d, 0x67, 0x29, 0x47, 0x61,
819 0xd8, 0x27, 0x37, 0x79, 0x29, 0xd1, 0x94, 0x6f,
820 0x8d, 0xf3, 0x1b, 0x3d, 0x6a, 0xb1, 0x59, 0xef,
821 0x1b, 0xd4, 0x70, 0x0e, 0xac, 0xab, 0xa0, 0x2b,
822 0x1f, 0x5e, 0x04, 0xf0, 0x0e, 0x35, 0x72, 0x90,
823 0xfc, 0xcf, 0x86, 0x43, 0xea, 0x45, 0x6d, 0x22,
824 0x63, 0x06, 0x1a, 0x58, 0xd7, 0x2d, 0xc5, 0xb0,
825 0x60, 0x69, 0xe8, 0x53, 0xc2, 0xa2, 0x57, 0x83,
826 0xc4, 0x31, 0xb4, 0xc6, 0xb3, 0xa1, 0x77, 0xb3,
827 0x1c, 0xca, 0x89, 0x3f, 0xf5, 0x10, 0x3b, 0x36,
828 0x31, 0x7d, 0x00, 0x46, 0x00, 0x92, 0xa0, 0xa0,
829 0x34, 0xd8, 0x5e, 0x62, 0xa9, 0xe0, 0x23, 0x37,
830 0x50, 0x85, 0xc7, 0x3a, 0x20, 0xa3, 0x98, 0xc0,
831 0xac, 0x20, 0x06, 0x0f, 0x17, 0x3c, 0xfc, 0x43,
832 0x8c, 0x9d, 0xec, 0xf5, 0x9a, 0x35, 0x96, 0xf7,
833 0xb7, 0x4c, 0xf9, 0x69, 0xf8, 0xd4, 0x1e, 0x9e,
834 0xf9, 0x7c, 0xc4, 0xd2, 0x11, 0x14, 0x41, 0xb9,
835 0x89, 0xd6, 0x07, 0xd2, 0x37, 0x07, 0x5e, 0x5e,
836 0xae, 0x60, 0xdc, 0xe4, 0xeb, 0x38, 0x48, 0x6d,
837 0x95, 0x8d, 0x71, 0xf2, 0xba, 0xda, 0x5f, 0x08,
838 0x9d, 0x4a, 0x0f, 0x56, 0x90, 0x64, 0xab, 0xb6,
839 0x88, 0x22, 0xa8, 0x90, 0x1f, 0x76, 0x2c, 0x83,
840 0x43, 0xce, 0x32, 0x55, 0x45, 0x84, 0x57, 0x43,
841 0xf9, 0xa8, 0xd1, 0x4f, 0xe3, 0xc1, 0x72, 0x9c,
842 0xeb, 0x64, 0xf7, 0xe4, 0x61, 0x2b, 0x93, 0xd1,
843 0x1f, 0xbb, 0x5c, 0xff, 0xa1, 0x59, 0x69, 0xcf,
844 0xf7, 0xaf, 0x58, 0x45, 0xd5, 0x3e, 0x98, 0x7d,
845 0x26, 0x39, 0x5c, 0x75, 0x3c, 0x4a, 0xbf, 0x5e,
846 0x12, 0x10, 0xb0, 0x93, 0x0f, 0x86, 0x82, 0xcf,
847 0xb2, 0xec, 0x70, 0x5c, 0x0b, 0xad, 0x5d, 0x63,
848 0x65, 0x32, 0xa6, 0x04, 0x58, 0x03, 0x91, 0x2b,
849 0xdb, 0x8f, 0xd3, 0xa3, 0x2b, 0x3a, 0xf5, 0xa1,
850 0x62, 0x6c, 0xb6, 0xf0, 0x13, 0x3b, 0x8c, 0x07,
851 0x10, 0x82, 0xc9, 0x56, 0x24, 0x87, 0xfc, 0x56,
852 0xe8, 0xef, 0x90, 0x8b, 0xd6, 0x48, 0xda, 0x53,
853 0x04, 0x49, 0x41, 0xa4, 0x67, 0xe0, 0x33, 0x24,
854 0x6b, 0x9c, 0x07, 0x55, 0x4c, 0x5d, 0xe9, 0x35,
855 0xfa, 0xbd, 0xea, 0xa8, 0x3f, 0xe9, 0xf5, 0x20,
856 0x5c, 0x60, 0x0f, 0x0d, 0x24, 0xcb, 0x1a, 0xd6,
857 0xe8, 0x5c, 0xa8, 0x42, 0xae, 0xd0, 0xd2, 0xf2,
858 0xa8, 0xbe, 0xea, 0x0f, 0x8d, 0xfb, 0x81, 0xa3,
859 0xa4, 0xef, 0xb7, 0x3e, 0x91, 0xbd, 0x26, 0x0f,
860 0x8e, 0xf1, 0xb2, 0xa5, 0x47, 0x06, 0xfa, 0x40,
861 0x8b, 0x31, 0x7a, 0x5a, 0x74, 0x2a, 0x0a, 0x7c,
862 0x62, 0x5d, 0x39, 0xa4, 0xae, 0x14, 0x85, 0x08,
863 0x5b, 0x20, 0x85, 0xf1, 0x57, 0x6e, 0x71, 0x13,
864 0x4e, 0x2b, 0x49, 0x87, 0x01, 0xdf, 0x37, 0xed,
865 0x28, 0xee, 0x4d, 0xa1, 0xf4, 0xb3, 0x3b, 0xba,
866 0x2d, 0xb3, 0x46, 0x17, 0x84, 0x80, 0x9d, 0xd7,
867 0x93, 0x1f, 0x28, 0x7c, 0xf5, 0xf9, 0xd6, 0x85,
868 0x8c, 0xa5, 0x44, 0xe9, 0x2c, 0x65, 0x51, 0x5f,
869 0x53, 0x7a, 0x09, 0xd9, 0x30, 0x16, 0x95, 0x89,
870 0x9c, 0x0b, 0xef, 0x90, 0x6d, 0x23, 0xd3, 0x48,
871 0x57, 0x3b, 0x55, 0x69, 0x96, 0xfc, 0xf7, 0x52,
872 0x92, 0x38, 0x36, 0xbf, 0xa9, 0x0a, 0xbb, 0x68,
873 0x45, 0x08, 0x25, 0xee, 0x59, 0xfe, 0xee, 0xf2,
874 0x2c, 0xd4, 0x5f, 0x78, 0x59, 0x0d, 0x90, 0xf1,
875 0xd7, 0xe4, 0x39, 0x0e, 0x46, 0x36, 0xf5, 0x75,
876 0x03, 0x3c, 0x28, 0xfb, 0xfa, 0x8f, 0xef, 0xc9,
877 0x61, 0x00, 0x94, 0xc3, 0xd2, 0x0f, 0xd9, 0xda
878 };
879
880 static const uint8_t AES_CBC_ciphertext_1024B[] = {
881 0x7d, 0x01, 0x7e, 0x2f, 0x92, 0xb3, 0xea, 0x72,
882 0x4a, 0x3f, 0x10, 0xf9, 0x2b, 0xb0, 0xd5, 0xb9,
883 0x19, 0x68, 0x94, 0xe9, 0x93, 0xe9, 0xd5, 0x26,
884 0x20, 0x44, 0xe2, 0x47, 0x15, 0x8d, 0x75, 0x48,
885 0x8e, 0xe4, 0x40, 0x81, 0xb5, 0x06, 0xa8, 0xb8,
886 0x0e, 0x0f, 0x3b, 0xbc, 0x5b, 0xbe, 0x3b, 0xa2,
887 0x2a, 0x0c, 0x48, 0x98, 0x19, 0xdf, 0xe9, 0x25,
888 0x75, 0xab, 0x93, 0x44, 0xb1, 0x72, 0x70, 0xbb,
889 0x20, 0xcf, 0x78, 0xe9, 0x4d, 0xc6, 0xa9, 0xa9,
890 0x84, 0x78, 0xc5, 0xc0, 0xc4, 0xc9, 0x79, 0x1a,
891 0xbc, 0x61, 0x25, 0x5f, 0xac, 0x01, 0x03, 0xb7,
892 0xef, 0x07, 0xf2, 0x62, 0x98, 0xee, 0xe3, 0xad,
893 0x94, 0x75, 0x30, 0x67, 0xb9, 0x15, 0x00, 0xe7,
894 0x11, 0x32, 0x2e, 0x6b, 0x55, 0x9f, 0xac, 0x68,
895 0xde, 0x61, 0x05, 0x80, 0x01, 0xf3, 0xad, 0xab,
896 0xaf, 0x45, 0xe0, 0xf4, 0x68, 0x5c, 0xc0, 0x52,
897 0x92, 0xc8, 0x21, 0xb6, 0xf5, 0x8a, 0x1d, 0xbb,
898 0xfc, 0x4a, 0x11, 0x62, 0xa2, 0xc4, 0xf1, 0x2d,
899 0x0e, 0xb2, 0xc7, 0x17, 0x34, 0xb4, 0x2a, 0x54,
900 0x81, 0xc2, 0x1e, 0xcf, 0x51, 0x0a, 0x76, 0x54,
901 0xf1, 0x48, 0x0d, 0x5c, 0xcd, 0x38, 0x3e, 0x38,
902 0x3e, 0xf8, 0x46, 0x1d, 0x00, 0xf5, 0x62, 0xe1,
903 0x5c, 0xb7, 0x8d, 0xce, 0xd0, 0x3f, 0xbb, 0x22,
904 0xf1, 0xe5, 0xb1, 0xa0, 0x58, 0x5e, 0x3c, 0x0f,
905 0x15, 0xd1, 0xac, 0x3e, 0xc7, 0x72, 0xc4, 0xde,
906 0x8b, 0x95, 0x3e, 0x91, 0xf7, 0x1d, 0x04, 0x9a,
907 0xc8, 0xe4, 0xbf, 0xd3, 0x22, 0xca, 0x4a, 0xdc,
908 0xb6, 0x16, 0x79, 0x81, 0x75, 0x2f, 0x6b, 0xa7,
909 0x04, 0x98, 0xa7, 0x4e, 0xc1, 0x19, 0x90, 0x33,
910 0x33, 0x3c, 0x7f, 0xdd, 0xac, 0x09, 0x0c, 0xc3,
911 0x91, 0x34, 0x74, 0xab, 0xa5, 0x35, 0x0a, 0x13,
912 0xc3, 0x56, 0x67, 0x6d, 0x1a, 0x3e, 0xbf, 0x56,
913 0x06, 0x67, 0x15, 0x5f, 0xfc, 0x8b, 0xa2, 0x3c,
914 0x5e, 0xaf, 0x56, 0x1f, 0xe3, 0x2e, 0x9d, 0x0a,
915 0xf9, 0x9b, 0xc7, 0xb5, 0x03, 0x1c, 0x68, 0x99,
916 0xfa, 0x3c, 0x37, 0x59, 0xc1, 0xf7, 0x6a, 0x83,
917 0x22, 0xee, 0xca, 0x7f, 0x7d, 0x49, 0xe6, 0x48,
918 0x84, 0x54, 0x7a, 0xff, 0xb3, 0x72, 0x21, 0xd8,
919 0x7a, 0x5d, 0xb1, 0x4b, 0xcc, 0x01, 0x6f, 0x90,
920 0xc6, 0x68, 0x1c, 0x2c, 0xa1, 0xe2, 0x74, 0x40,
921 0x26, 0x9b, 0x57, 0x53, 0xa3, 0x7c, 0x0b, 0x0d,
922 0xcf, 0x05, 0x5d, 0x62, 0x4f, 0x75, 0x06, 0x62,
923 0x1f, 0x26, 0x32, 0xaa, 0x25, 0xcc, 0x26, 0x8d,
924 0xae, 0x01, 0x47, 0xa3, 0x00, 0x42, 0xe2, 0x4c,
925 0xee, 0x29, 0xa2, 0x81, 0xa0, 0xfd, 0xeb, 0xff,
926 0x9a, 0x66, 0x6e, 0x47, 0x5b, 0xab, 0x93, 0x5a,
927 0x02, 0x6d, 0x6f, 0xf2, 0x6e, 0x02, 0x9d, 0xb1,
928 0xab, 0x56, 0xdc, 0x8b, 0x9b, 0x17, 0xa8, 0xfb,
929 0x87, 0x42, 0x7c, 0x91, 0x1e, 0x14, 0xc6, 0x6f,
930 0xdc, 0xf0, 0x27, 0x30, 0xfa, 0x3f, 0xc4, 0xad,
931 0x57, 0x85, 0xd2, 0xc9, 0x32, 0x2c, 0x13, 0xa6,
932 0x04, 0x04, 0x50, 0x05, 0x2f, 0x72, 0xd9, 0x44,
933 0x55, 0x6e, 0x93, 0x40, 0xed, 0x7e, 0xd4, 0x40,
934 0x3e, 0x88, 0x3b, 0x8b, 0xb6, 0xeb, 0xc6, 0x5d,
935 0x9c, 0x99, 0xa1, 0xcf, 0x30, 0xb2, 0xdc, 0x48,
936 0x8a, 0x01, 0xa7, 0x61, 0x77, 0x50, 0x14, 0xf3,
937 0x0c, 0x49, 0x53, 0xb3, 0xb4, 0xb4, 0x28, 0x41,
938 0x4a, 0x2d, 0xd2, 0x4d, 0x2a, 0x30, 0x31, 0x83,
939 0x03, 0x5e, 0xaa, 0xd3, 0xa3, 0xd1, 0xa1, 0xca,
940 0x62, 0xf0, 0xe1, 0xf2, 0xff, 0xf0, 0x19, 0xa6,
941 0xde, 0x22, 0x47, 0xb5, 0x28, 0x7d, 0xf7, 0x07,
942 0x16, 0x0d, 0xb1, 0x55, 0x81, 0x95, 0xe5, 0x1d,
943 0x4d, 0x78, 0xa9, 0x3e, 0xce, 0xe3, 0x1c, 0xf9,
944 0x47, 0xc8, 0xec, 0xc5, 0xc5, 0x93, 0x4c, 0x34,
945 0x20, 0x6b, 0xee, 0x9a, 0xe6, 0x86, 0x57, 0x58,
946 0xd5, 0x58, 0xf1, 0x33, 0x10, 0x29, 0x9e, 0x93,
947 0x2f, 0xf5, 0x90, 0x00, 0x17, 0x67, 0x4f, 0x39,
948 0x18, 0xe1, 0xcf, 0x55, 0x78, 0xbb, 0xe6, 0x29,
949 0x3e, 0x77, 0xd5, 0x48, 0xb7, 0x42, 0x72, 0x53,
950 0x27, 0xfa, 0x5b, 0xe0, 0x36, 0x14, 0x97, 0xb8,
951 0x9b, 0x3c, 0x09, 0x77, 0xc1, 0x0a, 0xe4, 0xa2,
952 0x63, 0xfc, 0xbe, 0x5c, 0x17, 0xcf, 0x01, 0xf5,
953 0x03, 0x0f, 0x17, 0xbc, 0x93, 0xdd, 0x5f, 0xe2,
954 0xf3, 0x08, 0xa8, 0xb1, 0x85, 0xb6, 0x34, 0x3f,
955 0x87, 0x42, 0xa5, 0x42, 0x3b, 0x0e, 0xd6, 0x83,
956 0x6a, 0xfd, 0x5d, 0xc9, 0x67, 0xd5, 0x51, 0xc9,
957 0x2a, 0x4e, 0x91, 0xb0, 0x59, 0xb2, 0x0f, 0xa2,
958 0xe6, 0x47, 0x73, 0xc2, 0xa2, 0xae, 0xbb, 0xc8,
959 0x42, 0xa3, 0x2a, 0x27, 0x29, 0x48, 0x8c, 0x54,
960 0x6c, 0xec, 0x00, 0x2a, 0x42, 0xa3, 0x7a, 0x0f,
961 0x12, 0x66, 0x6b, 0x96, 0xf6, 0xd0, 0x56, 0x4f,
962 0x49, 0x5c, 0x47, 0xec, 0x05, 0x62, 0x54, 0xb2,
963 0x64, 0x5a, 0x69, 0x1f, 0x19, 0xb4, 0x84, 0x5c,
964 0xbe, 0x48, 0x8e, 0xfc, 0x58, 0x21, 0xce, 0xfa,
965 0xaa, 0x84, 0xd2, 0xc1, 0x08, 0xb3, 0x87, 0x0f,
966 0x4f, 0xa3, 0x3a, 0xb6, 0x44, 0xbe, 0x2e, 0x9a,
967 0xdd, 0xb5, 0x44, 0x80, 0xca, 0xf4, 0xc3, 0x6e,
968 0xba, 0x93, 0x77, 0xe0, 0x53, 0xfb, 0x37, 0xfb,
969 0x88, 0xc3, 0x1f, 0x25, 0xde, 0x3e, 0x11, 0xf4,
970 0x89, 0xe7, 0xd1, 0x3b, 0xb4, 0x23, 0xcb, 0x70,
971 0xba, 0x35, 0x97, 0x7c, 0xbe, 0x84, 0x13, 0xcf,
972 0xe0, 0x4d, 0x33, 0x91, 0x71, 0x85, 0xbb, 0x4b,
973 0x97, 0x32, 0x5d, 0xa0, 0xb9, 0x8f, 0xdc, 0x27,
974 0x5a, 0xeb, 0x71, 0xf1, 0xd5, 0x0d, 0x65, 0xb4,
975 0x22, 0x81, 0xde, 0xa7, 0x58, 0x20, 0x0b, 0x18,
976 0x11, 0x76, 0x5c, 0xe6, 0x6a, 0x2c, 0x99, 0x69,
977 0xdc, 0xed, 0x67, 0x08, 0x5d, 0x5e, 0xe9, 0x1e,
978 0x55, 0x70, 0xc1, 0x5a, 0x76, 0x1b, 0x8d, 0x2e,
979 0x0d, 0xf9, 0xcc, 0x30, 0x8c, 0x44, 0x0f, 0x63,
980 0x8c, 0x42, 0x8a, 0x9f, 0x4c, 0xd1, 0x48, 0x28,
981 0x8a, 0xf5, 0x56, 0x2e, 0x23, 0x12, 0xfe, 0x67,
982 0x9a, 0x13, 0x65, 0x75, 0x83, 0xf1, 0x3c, 0x98,
983 0x07, 0x6b, 0xb7, 0x27, 0x5b, 0xf0, 0x70, 0xda,
984 0x30, 0xf8, 0x74, 0x4e, 0x7a, 0x32, 0x84, 0xcc,
985 0x0e, 0xcd, 0x80, 0x8b, 0x82, 0x31, 0x9a, 0x48,
986 0xcf, 0x75, 0x00, 0x1f, 0x4f, 0xe0, 0x8e, 0xa3,
987 0x6a, 0x2c, 0xd4, 0x73, 0x4c, 0x63, 0x7c, 0xa6,
988 0x4d, 0x5e, 0xfd, 0x43, 0x3b, 0x27, 0xe1, 0x5e,
989 0xa3, 0xa9, 0x5c, 0x3b, 0x60, 0xdd, 0xc6, 0x8d,
990 0x5a, 0xf1, 0x3e, 0x89, 0x4b, 0x24, 0xcf, 0x01,
991 0x3a, 0x2d, 0x44, 0xe7, 0xda, 0xe7, 0xa1, 0xac,
992 0x11, 0x05, 0x0c, 0xa9, 0x7a, 0x82, 0x8c, 0x5c,
993 0x29, 0x68, 0x9c, 0x73, 0x13, 0xcc, 0x67, 0x32,
994 0x11, 0x5e, 0xe5, 0xcc, 0x8c, 0xf5, 0xa7, 0x52,
995 0x83, 0x9a, 0x70, 0xef, 0xde, 0x55, 0x9c, 0xc7,
996 0x8a, 0xed, 0xad, 0x28, 0x4a, 0xc5, 0x92, 0x6d,
997 0x8e, 0x47, 0xca, 0xe3, 0xf8, 0x77, 0xb5, 0x26,
998 0x64, 0x84, 0xc2, 0xf1, 0xd7, 0xae, 0x0c, 0xb9,
999 0x39, 0x0f, 0x43, 0x6b, 0xe9, 0xe0, 0x09, 0x4b,
1000 0xe5, 0xe3, 0x17, 0xa6, 0x68, 0x69, 0x46, 0xf4,
1001 0xf0, 0x68, 0x7f, 0x2f, 0x1c, 0x7e, 0x4c, 0xd2,
1002 0xb5, 0xc6, 0x16, 0x85, 0xcf, 0x02, 0x4c, 0x89,
1003 0x0b, 0x25, 0xb0, 0xeb, 0xf3, 0x77, 0x08, 0x6a,
1004 0x46, 0x5c, 0xf6, 0x2f, 0xf1, 0x24, 0xc3, 0x4d,
1005 0x80, 0x60, 0x4d, 0x69, 0x98, 0xde, 0xc7, 0xa1,
1006 0xf6, 0x4e, 0x18, 0x0c, 0x2a, 0xb0, 0xb2, 0xe0,
1007 0x46, 0xe7, 0x49, 0x37, 0xc8, 0x5a, 0x23, 0x24,
1008 0xe3, 0x0f, 0xcc, 0x92, 0xb4, 0x8d, 0xdc, 0x9e
1009 };
1010
1011 static const uint8_t AES_CBC_ciphertext_1280B[] = {
1012 0x91, 0x99, 0x5e, 0x9e, 0x84, 0xff, 0x59, 0x45,
1013 0xc1, 0xf4, 0xbc, 0x9c, 0xb9, 0x30, 0x6c, 0x51,
1014 0x73, 0x52, 0xb4, 0x44, 0x09, 0x79, 0xe2, 0x89,
1015 0x75, 0xeb, 0x54, 0x26, 0xce, 0xd8, 0x24, 0x98,
1016 0xaa, 0xf8, 0x13, 0x16, 0x68, 0x58, 0xc4, 0x82,
1017 0x0e, 0x31, 0xd3, 0x6a, 0x13, 0x58, 0x31, 0xe9,
1018 0x3a, 0xc1, 0x8b, 0xc5, 0x3f, 0x50, 0x42, 0xd1,
1019 0x93, 0xe4, 0x9b, 0x65, 0x2b, 0xf4, 0x1d, 0x9e,
1020 0x2d, 0xdb, 0x48, 0xef, 0x9a, 0x01, 0x68, 0xb6,
1021 0xea, 0x7a, 0x2b, 0xad, 0xfe, 0x77, 0x44, 0x7e,
1022 0x5a, 0xc5, 0x64, 0xb4, 0xfe, 0x5c, 0x80, 0xf3,
1023 0x20, 0x7e, 0xaf, 0x5b, 0xf8, 0xd1, 0x38, 0xa0,
1024 0x8d, 0x09, 0x77, 0x06, 0xfe, 0xf5, 0xf4, 0xe4,
1025 0xee, 0xb8, 0x95, 0x27, 0xed, 0x07, 0xb8, 0xaa,
1026 0x25, 0xb4, 0xe1, 0x4c, 0xeb, 0x3f, 0xdb, 0x39,
1027 0x66, 0x28, 0x1b, 0x60, 0x42, 0x8b, 0x99, 0xd9,
1028 0x49, 0xd6, 0x8c, 0xa4, 0x9d, 0xd8, 0x93, 0x58,
1029 0x8f, 0xfa, 0xd3, 0xf7, 0x37, 0x9c, 0x88, 0xab,
1030 0x16, 0x50, 0xfe, 0x01, 0x1f, 0x88, 0x48, 0xbe,
1031 0x21, 0xa9, 0x90, 0x9e, 0x73, 0xe9, 0x82, 0xf7,
1032 0xbf, 0x4b, 0x43, 0xf4, 0xbf, 0x22, 0x3c, 0x45,
1033 0x47, 0x95, 0x5b, 0x49, 0x71, 0x07, 0x1c, 0x8b,
1034 0x49, 0xa4, 0xa3, 0x49, 0xc4, 0x5f, 0xb1, 0xf5,
1035 0xe3, 0x6b, 0xf1, 0xdc, 0xea, 0x92, 0x7b, 0x29,
1036 0x40, 0xc9, 0x39, 0x5f, 0xdb, 0xbd, 0xf3, 0x6a,
1037 0x09, 0x9b, 0x2a, 0x5e, 0xc7, 0x0b, 0x25, 0x94,
1038 0x55, 0x71, 0x9c, 0x7e, 0x0e, 0xb4, 0x08, 0x12,
1039 0x8c, 0x6e, 0x77, 0xb8, 0x29, 0xf1, 0xc6, 0x71,
1040 0x04, 0x40, 0x77, 0x18, 0x3f, 0x01, 0x09, 0x9c,
1041 0x23, 0x2b, 0x5d, 0x2a, 0x88, 0x20, 0x23, 0x59,
1042 0x74, 0x2a, 0x67, 0x8f, 0xb7, 0xba, 0x38, 0x9f,
1043 0x0f, 0xcf, 0x94, 0xdf, 0xe1, 0x8f, 0x35, 0x5e,
1044 0x34, 0x0c, 0x32, 0x92, 0x2b, 0x23, 0x81, 0xf4,
1045 0x73, 0xa0, 0x5a, 0x2a, 0xbd, 0xa6, 0x6b, 0xae,
1046 0x43, 0xe2, 0xdc, 0x01, 0xc1, 0xc6, 0xc3, 0x04,
1047 0x06, 0xbb, 0xb0, 0x89, 0xb3, 0x4e, 0xbd, 0x81,
1048 0x1b, 0x03, 0x63, 0x93, 0xed, 0x4e, 0xf6, 0xe5,
1049 0x94, 0x6f, 0xd6, 0xf3, 0x20, 0xf3, 0xbc, 0x30,
1050 0xc5, 0xd6, 0xbe, 0x1c, 0x05, 0x34, 0x26, 0x4d,
1051 0x46, 0x5e, 0x56, 0x63, 0xfb, 0xdb, 0xcd, 0xed,
1052 0xb0, 0x7f, 0x83, 0x94, 0x55, 0x54, 0x2f, 0xab,
1053 0xc9, 0xb7, 0x16, 0x4f, 0x9e, 0x93, 0x25, 0xd7,
1054 0x9f, 0x39, 0x2b, 0x63, 0xcf, 0x1e, 0xa3, 0x0e,
1055 0x28, 0x47, 0x8a, 0x5f, 0x40, 0x02, 0x89, 0x1f,
1056 0x83, 0xe7, 0x87, 0xd1, 0x90, 0x17, 0xb8, 0x27,
1057 0x64, 0xe1, 0xe1, 0x48, 0x5a, 0x55, 0x74, 0x99,
1058 0x27, 0x9d, 0x05, 0x67, 0xda, 0x70, 0x12, 0x8f,
1059 0x94, 0x96, 0xfd, 0x36, 0xa4, 0x1d, 0x22, 0xe5,
1060 0x0b, 0xe5, 0x2f, 0x38, 0x55, 0xa3, 0x5d, 0x0b,
1061 0xcf, 0xd4, 0xa9, 0xb8, 0xd6, 0x9a, 0x16, 0x2e,
1062 0x6c, 0x4a, 0x25, 0x51, 0x7a, 0x09, 0x48, 0xdd,
1063 0xf0, 0xa3, 0x5b, 0x08, 0x1e, 0x2f, 0x03, 0x91,
1064 0x80, 0xe8, 0x0f, 0xe9, 0x5a, 0x2f, 0x90, 0xd3,
1065 0x64, 0xed, 0xd7, 0x51, 0x17, 0x66, 0x53, 0x40,
1066 0x43, 0x74, 0xef, 0x0a, 0x0d, 0x49, 0x41, 0xf2,
1067 0x67, 0x6e, 0xea, 0x14, 0xc8, 0x74, 0xd6, 0xa9,
1068 0xb9, 0x6a, 0xe3, 0xec, 0x7d, 0xe8, 0x6a, 0x21,
1069 0x3a, 0x52, 0x42, 0xfe, 0x9a, 0x15, 0x6d, 0x60,
1070 0x64, 0x88, 0xc5, 0xb2, 0x8b, 0x15, 0x2c, 0xff,
1071 0xe2, 0x35, 0xc3, 0xee, 0x9f, 0xcd, 0x82, 0xd9,
1072 0x14, 0x35, 0x2a, 0xb7, 0xf5, 0x2f, 0x7b, 0xbc,
1073 0x01, 0xfd, 0xa8, 0xe0, 0x21, 0x4e, 0x73, 0xf9,
1074 0xf2, 0xb0, 0x79, 0xc9, 0x10, 0x52, 0x8f, 0xa8,
1075 0x3e, 0x3b, 0xbe, 0xc5, 0xde, 0xf6, 0x53, 0xe3,
1076 0x1c, 0x25, 0x3a, 0x1f, 0x13, 0xbf, 0x13, 0xbb,
1077 0x94, 0xc2, 0x97, 0x43, 0x64, 0x47, 0x8f, 0x76,
1078 0xd7, 0xaa, 0xeb, 0xa4, 0x03, 0x50, 0x0c, 0x10,
1079 0x50, 0xd8, 0xf7, 0x75, 0x52, 0x42, 0xe2, 0x94,
1080 0x67, 0xf4, 0x60, 0xfb, 0x21, 0x9b, 0x7a, 0x05,
1081 0x50, 0x7c, 0x1b, 0x4a, 0x8b, 0x29, 0xe1, 0xac,
1082 0xd7, 0x99, 0xfd, 0x0d, 0x65, 0x92, 0xcd, 0x23,
1083 0xa7, 0x35, 0x8e, 0x13, 0xf2, 0xe4, 0x10, 0x74,
1084 0xc6, 0x4f, 0x19, 0xf7, 0x01, 0x0b, 0x46, 0xab,
1085 0xef, 0x8d, 0x4a, 0x4a, 0xfa, 0xda, 0xf3, 0xfb,
1086 0x40, 0x28, 0x88, 0xa2, 0x65, 0x98, 0x4d, 0x88,
1087 0xc7, 0xbf, 0x00, 0xc8, 0xd0, 0x91, 0xcb, 0x89,
1088 0x2f, 0xb0, 0x85, 0xfc, 0xa1, 0xc1, 0x9e, 0x83,
1089 0x88, 0xad, 0x95, 0xc0, 0x31, 0xa0, 0xad, 0xa2,
1090 0x42, 0xb5, 0xe7, 0x55, 0xd4, 0x93, 0x5a, 0x74,
1091 0x4e, 0x41, 0xc3, 0xcf, 0x96, 0x83, 0x46, 0xa1,
1092 0xb7, 0x5b, 0xb1, 0x34, 0x67, 0x4e, 0xb1, 0xd7,
1093 0x40, 0x20, 0x72, 0xe9, 0xc8, 0x74, 0xb7, 0xde,
1094 0x72, 0x29, 0x77, 0x4c, 0x74, 0x7e, 0xcc, 0x18,
1095 0xa5, 0x8d, 0x79, 0x8c, 0xd6, 0x6e, 0xcb, 0xd9,
1096 0xe1, 0x61, 0xe7, 0x36, 0xbc, 0x37, 0xea, 0xee,
1097 0xd8, 0x3c, 0x5e, 0x7c, 0x47, 0x50, 0xd5, 0xec,
1098 0x37, 0xc5, 0x63, 0xc3, 0xc9, 0x99, 0x23, 0x9f,
1099 0x64, 0x39, 0xdf, 0x13, 0x96, 0x6d, 0xea, 0x08,
1100 0x0c, 0x27, 0x2d, 0xfe, 0x0f, 0xc2, 0xa3, 0x97,
1101 0x04, 0x12, 0x66, 0x0d, 0x94, 0xbf, 0xbe, 0x3e,
1102 0xb9, 0xcf, 0x8e, 0xc1, 0x9d, 0xb1, 0x64, 0x17,
1103 0x54, 0x92, 0x3f, 0x0a, 0x51, 0xc8, 0xf5, 0x82,
1104 0x98, 0x73, 0x03, 0xc0, 0x5a, 0x51, 0x01, 0x67,
1105 0xb4, 0x01, 0x04, 0x06, 0xbc, 0x37, 0xde, 0x96,
1106 0x23, 0x3c, 0xce, 0x98, 0x3f, 0xd6, 0x51, 0x1b,
1107 0x01, 0x83, 0x0a, 0x1c, 0xf9, 0xeb, 0x7e, 0x72,
1108 0xa9, 0x51, 0x23, 0xc8, 0xd7, 0x2f, 0x12, 0xbc,
1109 0x08, 0xac, 0x07, 0xe7, 0xa7, 0xe6, 0x46, 0xae,
1110 0x54, 0xa3, 0xc2, 0xf2, 0x05, 0x2d, 0x06, 0x5e,
1111 0xfc, 0xe2, 0xa2, 0x23, 0xac, 0x86, 0xf2, 0x54,
1112 0x83, 0x4a, 0xb6, 0x48, 0x93, 0xa1, 0x78, 0xc2,
1113 0x07, 0xec, 0x82, 0xf0, 0x74, 0xa9, 0x18, 0xe9,
1114 0x53, 0x44, 0x49, 0xc2, 0x94, 0xf8, 0x94, 0x92,
1115 0x08, 0x3f, 0xbf, 0xa6, 0xe5, 0xc6, 0x03, 0x8a,
1116 0xc6, 0x90, 0x48, 0x6c, 0xee, 0xbd, 0x44, 0x92,
1117 0x1f, 0x2a, 0xce, 0x1d, 0xb8, 0x31, 0xa2, 0x9d,
1118 0x24, 0x93, 0xa8, 0x9f, 0x36, 0x00, 0x04, 0x7b,
1119 0xcb, 0x93, 0x59, 0xa1, 0x53, 0xdb, 0x13, 0x7a,
1120 0x54, 0xb1, 0x04, 0xdb, 0xce, 0x48, 0x4f, 0xe5,
1121 0x2f, 0xcb, 0xdf, 0x8f, 0x50, 0x7c, 0xfc, 0x76,
1122 0x80, 0xb4, 0xdc, 0x3b, 0xc8, 0x98, 0x95, 0xf5,
1123 0x50, 0xba, 0x70, 0x5a, 0x97, 0xd5, 0xfc, 0x98,
1124 0x4d, 0xf3, 0x61, 0x0f, 0xcf, 0xac, 0x49, 0x0a,
1125 0xdb, 0xc1, 0x42, 0x8f, 0xb6, 0x29, 0xd5, 0x65,
1126 0xef, 0x83, 0xf1, 0x30, 0x4b, 0x84, 0xd0, 0x69,
1127 0xde, 0xd2, 0x99, 0xe5, 0xec, 0xd3, 0x90, 0x86,
1128 0x39, 0x2a, 0x6e, 0xd5, 0x32, 0xe3, 0x0d, 0x2d,
1129 0x01, 0x8b, 0x17, 0x55, 0x1d, 0x65, 0x57, 0xbf,
1130 0xd8, 0x75, 0xa4, 0x85, 0xb6, 0x4e, 0x35, 0x14,
1131 0x58, 0xe4, 0x89, 0xb8, 0x7a, 0x58, 0x86, 0x0c,
1132 0xbd, 0x8b, 0x05, 0x7b, 0x63, 0xc0, 0x86, 0x80,
1133 0x33, 0x46, 0xd4, 0x9b, 0xb6, 0x0a, 0xeb, 0x6c,
1134 0xae, 0xd6, 0x57, 0x7a, 0xc7, 0x59, 0x33, 0xa0,
1135 0xda, 0xa4, 0x12, 0xbf, 0x52, 0x22, 0x05, 0x8d,
1136 0xeb, 0xee, 0xd5, 0xec, 0xea, 0x29, 0x9b, 0x76,
1137 0x95, 0x50, 0x6d, 0x99, 0xe1, 0x45, 0x63, 0x09,
1138 0x16, 0x5f, 0xb0, 0xf2, 0x5b, 0x08, 0x33, 0xdd,
1139 0x8f, 0xb7, 0x60, 0x7a, 0x8e, 0xc6, 0xfc, 0xac,
1140 0xa9, 0x56, 0x2c, 0xa9, 0x8b, 0x74, 0x33, 0xad,
1141 0x2a, 0x7e, 0x96, 0xb6, 0xba, 0x22, 0x28, 0xcf,
1142 0x4d, 0x96, 0xb7, 0xd1, 0xfa, 0x99, 0x4a, 0x61,
1143 0xe6, 0x84, 0xd1, 0x94, 0xca, 0xf5, 0x86, 0xb0,
1144 0xba, 0x34, 0x7a, 0x04, 0xcc, 0xd4, 0x81, 0xcd,
1145 0xd9, 0x86, 0xb6, 0xe0, 0x5a, 0x6f, 0x9b, 0x99,
1146 0xf0, 0xdf, 0x49, 0xae, 0x6d, 0xc2, 0x54, 0x67,
1147 0xe0, 0xb4, 0x34, 0x2d, 0x1c, 0x46, 0xdf, 0x73,
1148 0x3b, 0x45, 0x43, 0xe7, 0x1f, 0xa3, 0x36, 0x35,
1149 0x25, 0x33, 0xd9, 0xc0, 0x54, 0x38, 0x6e, 0x6b,
1150 0x80, 0xcf, 0x50, 0xa4, 0xb6, 0x21, 0x17, 0xfd,
1151 0x9b, 0x5c, 0x36, 0xca, 0xcc, 0x73, 0x73, 0xad,
1152 0xe0, 0x57, 0x77, 0x90, 0x0e, 0x7f, 0x0f, 0x87,
1153 0x7f, 0xdb, 0x73, 0xbf, 0xda, 0xc2, 0xb3, 0x05,
1154 0x22, 0x06, 0xf5, 0xa3, 0xfc, 0x1e, 0x8f, 0xda,
1155 0xcf, 0x49, 0xd6, 0xb3, 0x66, 0x2c, 0xb5, 0x00,
1156 0xaf, 0x85, 0x6e, 0xb8, 0x5b, 0x8c, 0xa1, 0xa4,
1157 0x21, 0xce, 0x40, 0xf3, 0x98, 0xac, 0xec, 0x88,
1158 0x62, 0x43, 0x2a, 0xac, 0xca, 0xcf, 0xb9, 0x30,
1159 0xeb, 0xfc, 0xef, 0xf0, 0x6e, 0x64, 0x6d, 0xe7,
1160 0x54, 0x88, 0x6b, 0x22, 0x29, 0xbe, 0xa5, 0x8c,
1161 0x31, 0x23, 0x3b, 0x4a, 0x80, 0x37, 0xe6, 0xd0,
1162 0x05, 0xfc, 0x10, 0x0e, 0xdd, 0xbb, 0x00, 0xc5,
1163 0x07, 0x20, 0x59, 0xd3, 0x41, 0x17, 0x86, 0x46,
1164 0xab, 0x68, 0xf6, 0x48, 0x3c, 0xea, 0x5a, 0x06,
1165 0x30, 0x21, 0x19, 0xed, 0x74, 0xbe, 0x0b, 0x97,
1166 0xee, 0x91, 0x35, 0x94, 0x1f, 0xcb, 0x68, 0x7f,
1167 0xe4, 0x48, 0xb0, 0x16, 0xfb, 0xf0, 0x74, 0xdb,
1168 0x06, 0x59, 0x2e, 0x5a, 0x9c, 0xce, 0x8f, 0x7d,
1169 0xba, 0x48, 0xd5, 0x3f, 0x5c, 0xb0, 0xc2, 0x33,
1170 0x48, 0x60, 0x17, 0x08, 0x85, 0xba, 0xff, 0xb9,
1171 0x34, 0x0a, 0x3d, 0x8f, 0x21, 0x13, 0x12, 0x1b
1172 };
1173
1174 static const uint8_t AES_CBC_ciphertext_1536B[] = {
1175 0x89, 0x93, 0x05, 0x99, 0xa9, 0xed, 0xea, 0x62,
1176 0xc9, 0xda, 0x51, 0x15, 0xce, 0x42, 0x91, 0xc3,
1177 0x80, 0xc8, 0x03, 0x88, 0xc2, 0x63, 0xda, 0x53,
1178 0x1a, 0xf3, 0xeb, 0xd5, 0xba, 0x6f, 0x23, 0xb2,
1179 0xed, 0x8f, 0x89, 0xb1, 0xb3, 0xca, 0x90, 0x7a,
1180 0xdd, 0x3f, 0xf6, 0xca, 0x86, 0x58, 0x54, 0xbc,
1181 0xab, 0x0f, 0xf4, 0xab, 0x6d, 0x5d, 0x42, 0xd0,
1182 0x17, 0x49, 0x17, 0xd1, 0x93, 0xea, 0xe8, 0x22,
1183 0xc1, 0x34, 0x9f, 0x3a, 0x3b, 0xaa, 0xe9, 0x1b,
1184 0x93, 0xff, 0x6b, 0x68, 0xba, 0xe6, 0xd2, 0x39,
1185 0x3d, 0x55, 0x34, 0x8f, 0x98, 0x86, 0xb4, 0xd8,
1186 0x7c, 0x0d, 0x3e, 0x01, 0x63, 0x04, 0x01, 0xff,
1187 0x16, 0x0f, 0x51, 0x5f, 0x73, 0x53, 0xf0, 0x3a,
1188 0x38, 0xb4, 0x4d, 0x8d, 0xaf, 0xa3, 0xca, 0x2f,
1189 0x6f, 0xdf, 0xc0, 0x41, 0x6c, 0x48, 0x60, 0x1a,
1190 0xe4, 0xe7, 0x8a, 0x65, 0x6f, 0x8d, 0xd7, 0xe1,
1191 0x10, 0xab, 0x78, 0x5b, 0xb9, 0x69, 0x1f, 0xe0,
1192 0x5c, 0xf1, 0x19, 0x12, 0x21, 0xc7, 0x51, 0xbc,
1193 0x61, 0x5f, 0xc0, 0x36, 0x17, 0xc0, 0x28, 0xd9,
1194 0x51, 0xcb, 0x43, 0xd9, 0xfa, 0xd1, 0xad, 0x79,
1195 0x69, 0x86, 0x49, 0xc5, 0xe5, 0x69, 0x27, 0xce,
1196 0x22, 0xd0, 0xe1, 0x6a, 0xf9, 0x02, 0xca, 0x6c,
1197 0x34, 0xc7, 0xb8, 0x02, 0xc1, 0x38, 0x7f, 0xd5,
1198 0x15, 0xf5, 0xd6, 0xeb, 0xf9, 0x30, 0x40, 0x43,
1199 0xea, 0x87, 0xde, 0x35, 0xf6, 0x83, 0x59, 0x09,
1200 0x68, 0x62, 0x00, 0x87, 0xb8, 0xe7, 0xca, 0x05,
1201 0x0f, 0xac, 0x42, 0x58, 0x45, 0xaa, 0xc9, 0x9b,
1202 0xfd, 0x2a, 0xda, 0x65, 0x33, 0x93, 0x9d, 0xc6,
1203 0x93, 0x8d, 0xe2, 0xc5, 0x71, 0xc1, 0x5c, 0x13,
1204 0xde, 0x7b, 0xd4, 0xb9, 0x4c, 0x35, 0x61, 0x85,
1205 0x90, 0x78, 0xf7, 0x81, 0x98, 0x45, 0x99, 0x24,
1206 0x58, 0x73, 0x28, 0xf8, 0x31, 0xab, 0x54, 0x2e,
1207 0xc0, 0x38, 0x77, 0x25, 0x5c, 0x06, 0x9c, 0xc3,
1208 0x69, 0x21, 0x92, 0x76, 0xe1, 0x16, 0xdc, 0xa9,
1209 0xee, 0xb6, 0x80, 0x66, 0x43, 0x11, 0x24, 0xb3,
1210 0x07, 0x17, 0x89, 0x0f, 0xcb, 0xe0, 0x60, 0xa8,
1211 0x9d, 0x06, 0x4b, 0x6e, 0x72, 0xb7, 0xbc, 0x4f,
1212 0xb8, 0xc0, 0x80, 0xa2, 0xfb, 0x46, 0x5b, 0x8f,
1213 0x11, 0x01, 0x92, 0x9d, 0x37, 0x09, 0x98, 0xc8,
1214 0x0a, 0x46, 0xae, 0x12, 0xac, 0x61, 0x3f, 0xe7,
1215 0x41, 0x1a, 0xaa, 0x2e, 0xdc, 0xd7, 0x2a, 0x47,
1216 0xee, 0xdf, 0x08, 0xd1, 0xff, 0xea, 0x13, 0xc6,
1217 0x05, 0xdb, 0x29, 0xcc, 0x03, 0xba, 0x7b, 0x6d,
1218 0x40, 0xc1, 0xc9, 0x76, 0x75, 0x03, 0x7a, 0x71,
1219 0xc9, 0x5f, 0xd9, 0xe0, 0x61, 0x69, 0x36, 0x8f,
1220 0xb2, 0xbc, 0x28, 0xf3, 0x90, 0x71, 0xda, 0x5f,
1221 0x08, 0xd5, 0x0d, 0xc1, 0xe6, 0xbd, 0x2b, 0xc6,
1222 0x6c, 0x42, 0xfd, 0xbf, 0x10, 0xe8, 0x5f, 0x87,
1223 0x3d, 0x21, 0x42, 0x85, 0x01, 0x0a, 0xbf, 0x8e,
1224 0x49, 0xd3, 0x9c, 0x89, 0x3b, 0xea, 0xe1, 0xbf,
1225 0xe9, 0x9b, 0x5e, 0x0e, 0xb8, 0xeb, 0xcd, 0x3a,
1226 0xf6, 0x29, 0x41, 0x35, 0xdd, 0x9b, 0x13, 0x24,
1227 0xe0, 0x1d, 0x8a, 0xcb, 0x20, 0xf8, 0x41, 0x51,
1228 0x3e, 0x23, 0x8c, 0x67, 0x98, 0x39, 0x53, 0x77,
1229 0x2a, 0x68, 0xf4, 0x3c, 0x7e, 0xd6, 0xc4, 0x6e,
1230 0xf1, 0x53, 0xe9, 0xd8, 0x5c, 0xc1, 0xa9, 0x38,
1231 0x6f, 0x5e, 0xe4, 0xd4, 0x29, 0x1c, 0x6c, 0xee,
1232 0x2f, 0xea, 0xde, 0x61, 0x71, 0x5a, 0xea, 0xce,
1233 0x23, 0x6e, 0x1b, 0x16, 0x43, 0xb7, 0xc0, 0xe3,
1234 0x87, 0xa1, 0x95, 0x1e, 0x97, 0x4d, 0xea, 0xa6,
1235 0xf7, 0x25, 0xac, 0x82, 0x2a, 0xd3, 0xa6, 0x99,
1236 0x75, 0xdd, 0xc1, 0x55, 0x32, 0x6b, 0xea, 0x33,
1237 0x88, 0xce, 0x06, 0xac, 0x15, 0x39, 0x19, 0xa3,
1238 0x59, 0xaf, 0x7a, 0x1f, 0xd9, 0x72, 0x5e, 0xf7,
1239 0x4c, 0xf3, 0x5d, 0x6b, 0xf2, 0x16, 0x92, 0xa8,
1240 0x9e, 0x3d, 0xd4, 0x4c, 0x72, 0x55, 0x4e, 0x4a,
1241 0xf7, 0x8b, 0x2f, 0x67, 0x5a, 0x90, 0xb7, 0xcf,
1242 0x16, 0xd3, 0x7b, 0x5a, 0x9a, 0xc8, 0x9f, 0xbf,
1243 0x01, 0x76, 0x3b, 0x86, 0x2c, 0x2a, 0x78, 0x10,
1244 0x70, 0x05, 0x38, 0xf9, 0xdd, 0x2a, 0x1d, 0x00,
1245 0x25, 0xb7, 0x10, 0xac, 0x3b, 0x3c, 0x4d, 0x3c,
1246 0x01, 0x68, 0x3c, 0x5a, 0x29, 0xc2, 0xa0, 0x1b,
1247 0x95, 0x67, 0xf9, 0x0a, 0x60, 0xb7, 0x11, 0x9c,
1248 0x40, 0x45, 0xd7, 0xb0, 0xda, 0x49, 0x87, 0xcd,
1249 0xb0, 0x9b, 0x61, 0x8c, 0xf4, 0x0d, 0x94, 0x1d,
1250 0x79, 0x66, 0x13, 0x0b, 0xc6, 0x6b, 0x19, 0xee,
1251 0xa0, 0x6b, 0x64, 0x7d, 0xc4, 0xff, 0x98, 0x72,
1252 0x60, 0xab, 0x7f, 0x0f, 0x4d, 0x5d, 0x6b, 0xc3,
1253 0xba, 0x5e, 0x0d, 0x04, 0xd9, 0x59, 0x17, 0xd0,
1254 0x64, 0xbe, 0xfb, 0x58, 0xfc, 0xed, 0x18, 0xf6,
1255 0xac, 0x19, 0xa4, 0xfd, 0x16, 0x59, 0x80, 0x58,
1256 0xb8, 0x0f, 0x79, 0x24, 0x60, 0x18, 0x62, 0xa9,
1257 0xa3, 0xa0, 0xe8, 0x81, 0xd6, 0xec, 0x5b, 0xfe,
1258 0x5b, 0xb8, 0xa4, 0x00, 0xa9, 0xd0, 0x90, 0x17,
1259 0xe5, 0x50, 0x3d, 0x2b, 0x12, 0x6e, 0x2a, 0x13,
1260 0x65, 0x7c, 0xdf, 0xdf, 0xa7, 0xdd, 0x9f, 0x78,
1261 0x5f, 0x8f, 0x4e, 0x90, 0xa6, 0x10, 0xe4, 0x7b,
1262 0x68, 0x6b, 0xfd, 0xa9, 0x6d, 0x47, 0xfa, 0xec,
1263 0x42, 0x35, 0x07, 0x12, 0x3e, 0x78, 0x23, 0x15,
1264 0xff, 0xe2, 0x65, 0xc7, 0x47, 0x89, 0x2f, 0x97,
1265 0x7c, 0xd7, 0x6b, 0x69, 0x35, 0x79, 0x6f, 0x85,
1266 0xb4, 0xa9, 0x75, 0x04, 0x32, 0x9a, 0xfe, 0xf0,
1267 0xce, 0xe3, 0xf1, 0xab, 0x15, 0x47, 0xe4, 0x9c,
1268 0xc1, 0x48, 0x32, 0x3c, 0xbe, 0x44, 0x72, 0xc9,
1269 0xaa, 0x50, 0x37, 0xa6, 0xbe, 0x41, 0xcf, 0xe8,
1270 0x17, 0x4e, 0x37, 0xbe, 0xf1, 0x34, 0x2c, 0xd9,
1271 0x60, 0x48, 0x09, 0xa5, 0x26, 0x00, 0x31, 0x77,
1272 0x4e, 0xac, 0x7c, 0x89, 0x75, 0xe3, 0xde, 0x26,
1273 0x4c, 0x32, 0x54, 0x27, 0x8e, 0x92, 0x26, 0x42,
1274 0x85, 0x76, 0x01, 0x76, 0x62, 0x4c, 0x29, 0xe9,
1275 0x38, 0x05, 0x51, 0x54, 0x97, 0xa3, 0x03, 0x59,
1276 0x5e, 0xec, 0x0c, 0xe4, 0x96, 0xb7, 0x15, 0xa8,
1277 0x41, 0x06, 0x2b, 0x78, 0x95, 0x24, 0xf6, 0x32,
1278 0xc5, 0xec, 0xd7, 0x89, 0x28, 0x1e, 0xec, 0xb1,
1279 0xc7, 0x21, 0x0c, 0xd3, 0x80, 0x7c, 0x5a, 0xe6,
1280 0xb1, 0x3a, 0x52, 0x33, 0x84, 0x4e, 0x32, 0x6e,
1281 0x7a, 0xf6, 0x43, 0x15, 0x5b, 0xa6, 0xba, 0xeb,
1282 0xa8, 0xe4, 0xff, 0x4f, 0xbd, 0xbd, 0xa8, 0x5e,
1283 0xbe, 0x27, 0xaf, 0xc5, 0xf7, 0x9e, 0xdf, 0x48,
1284 0x22, 0xca, 0x6a, 0x0b, 0x3c, 0xd7, 0xe0, 0xdc,
1285 0xf3, 0x71, 0x08, 0xdc, 0x28, 0x13, 0x08, 0xf2,
1286 0x08, 0x1d, 0x9d, 0x7b, 0xd9, 0xde, 0x6f, 0xe6,
1287 0xe8, 0x88, 0x18, 0xc2, 0xcd, 0x93, 0xc5, 0x38,
1288 0x21, 0x68, 0x4c, 0x9a, 0xfb, 0xb6, 0x18, 0x16,
1289 0x73, 0x2c, 0x1d, 0x6f, 0x95, 0xfb, 0x65, 0x4f,
1290 0x7c, 0xec, 0x8d, 0x6c, 0xa8, 0xc0, 0x55, 0x28,
1291 0xc6, 0xc3, 0xea, 0xeb, 0x05, 0xf5, 0x65, 0xeb,
1292 0x53, 0xe1, 0x54, 0xef, 0xb8, 0x64, 0x98, 0x2d,
1293 0x98, 0x9e, 0xc8, 0xfe, 0xa2, 0x07, 0x30, 0xf7,
1294 0xf7, 0xae, 0xdb, 0x32, 0xf8, 0x71, 0x9d, 0x06,
1295 0xdf, 0x9b, 0xda, 0x61, 0x7d, 0xdb, 0xae, 0x06,
1296 0x24, 0x63, 0x74, 0xb6, 0xf3, 0x1b, 0x66, 0x09,
1297 0x60, 0xff, 0x2b, 0x29, 0xf5, 0xa9, 0x9d, 0x61,
1298 0x5d, 0x55, 0x10, 0x82, 0x21, 0xbb, 0x64, 0x0d,
1299 0xef, 0x5c, 0xe3, 0x30, 0x1b, 0x60, 0x1e, 0x5b,
1300 0xfe, 0x6c, 0xf5, 0x15, 0xa3, 0x86, 0x27, 0x58,
1301 0x46, 0x00, 0x20, 0xcb, 0x86, 0x9a, 0x52, 0x29,
1302 0x20, 0x68, 0x4d, 0x67, 0x88, 0x70, 0xc2, 0x31,
1303 0xd8, 0xbb, 0xa5, 0xa7, 0x88, 0x7f, 0x66, 0xbc,
1304 0xaa, 0x0f, 0xe1, 0x78, 0x7b, 0x97, 0x3c, 0xb7,
1305 0xd7, 0xd8, 0x04, 0xe0, 0x09, 0x60, 0xc8, 0xd0,
1306 0x9e, 0xe5, 0x6b, 0x31, 0x7f, 0x88, 0xfe, 0xc3,
1307 0xfd, 0x89, 0xec, 0x76, 0x4b, 0xb3, 0xa7, 0x37,
1308 0x03, 0xb7, 0xc6, 0x10, 0x7c, 0x9d, 0x0c, 0x75,
1309 0xd3, 0x08, 0x14, 0x94, 0x03, 0x42, 0x25, 0x26,
1310 0x85, 0xf7, 0xf0, 0x90, 0x06, 0x3e, 0x6f, 0x60,
1311 0x52, 0x55, 0xd5, 0x0f, 0x79, 0x64, 0x69, 0x69,
1312 0x46, 0xf9, 0x7f, 0x7f, 0x03, 0xf1, 0x1f, 0xdb,
1313 0x39, 0x05, 0xba, 0x4a, 0x8f, 0x17, 0xe7, 0xba,
1314 0xe2, 0x07, 0x7c, 0x1d, 0x9e, 0xbc, 0x94, 0xc0,
1315 0x61, 0x59, 0x8e, 0x72, 0xaf, 0xfc, 0x99, 0xe4,
1316 0xd5, 0xa8, 0xee, 0x0a, 0x48, 0x2d, 0x82, 0x8b,
1317 0x34, 0x54, 0x8a, 0xce, 0xc7, 0xfa, 0xdd, 0xba,
1318 0x54, 0xdf, 0xb3, 0x30, 0x33, 0x73, 0x2e, 0xd5,
1319 0x52, 0xab, 0x49, 0x91, 0x4e, 0x0a, 0xd6, 0x2f,
1320 0x67, 0xe4, 0xdd, 0x64, 0x48, 0x16, 0xd9, 0x85,
1321 0xaa, 0x52, 0xa5, 0x0b, 0xd3, 0xb4, 0x2d, 0x77,
1322 0x5e, 0x52, 0x77, 0x17, 0xcf, 0xbe, 0x88, 0x04,
1323 0x01, 0x52, 0xe2, 0xf1, 0x46, 0xe2, 0x91, 0x30,
1324 0x65, 0xcf, 0xc0, 0x65, 0x45, 0xc3, 0x7e, 0xf4,
1325 0x2e, 0xb5, 0xaf, 0x6f, 0xab, 0x1a, 0xfa, 0x70,
1326 0x35, 0xb8, 0x4f, 0x2d, 0x78, 0x90, 0x33, 0xb5,
1327 0x9a, 0x67, 0xdb, 0x2f, 0x28, 0x32, 0xb6, 0x54,
1328 0xab, 0x4c, 0x6b, 0x85, 0xed, 0x6c, 0x3e, 0x05,
1329 0x2a, 0xc7, 0x32, 0xe8, 0xf5, 0xa3, 0x7b, 0x4e,
1330 0x7b, 0x58, 0x24, 0x73, 0xf7, 0xfd, 0xc7, 0xc8,
1331 0x6c, 0x71, 0x68, 0xb1, 0xf6, 0xc5, 0x9e, 0x1e,
1332 0xe3, 0x5c, 0x25, 0xc0, 0x5b, 0x3e, 0x59, 0xa1,
1333 0x18, 0x5a, 0xe8, 0xb5, 0xd1, 0x44, 0x13, 0xa3,
1334 0xe6, 0x05, 0x76, 0xd2, 0x8d, 0x6e, 0x54, 0x68,
1335 0x0c, 0xa4, 0x7b, 0x8b, 0xd3, 0x8c, 0x42, 0x13,
1336 0x87, 0xda, 0xdf, 0x8f, 0xa5, 0x83, 0x7a, 0x42,
1337 0x99, 0xb7, 0xeb, 0xe2, 0x79, 0xe0, 0xdb, 0xda,
1338 0x33, 0xa8, 0x50, 0x3a, 0xd7, 0xe7, 0xd3, 0x61,
1339 0x18, 0xb8, 0xaa, 0x2d, 0xc8, 0xd8, 0x2c, 0x28,
1340 0xe5, 0x97, 0x0a, 0x7c, 0x6c, 0x7f, 0x09, 0xd7,
1341 0x88, 0x80, 0xac, 0x12, 0xed, 0xf8, 0xc6, 0xb5,
1342 0x2d, 0xd6, 0x63, 0x9b, 0x98, 0x35, 0x26, 0xde,
1343 0xf6, 0x31, 0xee, 0x7e, 0xa0, 0xfb, 0x16, 0x98,
1344 0xb1, 0x96, 0x1d, 0xee, 0xe3, 0x2f, 0xfb, 0x41,
1345 0xdd, 0xea, 0x10, 0x1e, 0x03, 0x89, 0x18, 0xd2,
1346 0x47, 0x0c, 0xa0, 0x57, 0xda, 0x76, 0x3a, 0x37,
1347 0x2c, 0xe4, 0xf9, 0x77, 0xc8, 0x43, 0x5f, 0xcb,
1348 0xd6, 0x85, 0xf7, 0x22, 0xe4, 0x32, 0x25, 0xa8,
1349 0xdc, 0x21, 0xc0, 0xf5, 0x95, 0xb2, 0xf8, 0x83,
1350 0xf0, 0x65, 0x61, 0x15, 0x48, 0x94, 0xb7, 0x03,
1351 0x7f, 0x66, 0xa1, 0x39, 0x1f, 0xdd, 0xce, 0x96,
1352 0xfe, 0x58, 0x81, 0x3d, 0x41, 0x11, 0x87, 0x13,
1353 0x26, 0x1b, 0x6d, 0xf3, 0xca, 0x2e, 0x2c, 0x76,
1354 0xd3, 0x2f, 0x6d, 0x49, 0x70, 0x53, 0x05, 0x96,
1355 0xcc, 0x30, 0x2b, 0x83, 0xf2, 0xc6, 0xb2, 0x4b,
1356 0x22, 0x13, 0x95, 0x42, 0xeb, 0x56, 0x4d, 0x22,
1357 0xe6, 0x43, 0x6f, 0xba, 0xe7, 0x3b, 0xe5, 0x59,
1358 0xce, 0x57, 0x88, 0x85, 0xb6, 0xbf, 0x15, 0x37,
1359 0xb3, 0x7a, 0x7e, 0xc4, 0xbc, 0x99, 0xfc, 0xe4,
1360 0x89, 0x00, 0x68, 0x39, 0xbc, 0x5a, 0xba, 0xab,
1361 0x52, 0xab, 0xe6, 0x81, 0xfd, 0x93, 0x62, 0xe9,
1362 0xb7, 0x12, 0xd1, 0x18, 0x1a, 0xb9, 0x55, 0x4a,
1363 0x0f, 0xae, 0x35, 0x11, 0x04, 0x27, 0xf3, 0x42,
1364 0x4e, 0xca, 0xdf, 0x9f, 0x12, 0x62, 0xea, 0x03,
1365 0xc0, 0xa9, 0x22, 0x7b, 0x6c, 0x6c, 0xe3, 0xdf,
1366 0x16, 0xad, 0x03, 0xc9, 0xfe, 0xa4, 0xdd, 0x4f
1367 };
1368
1369 static const uint8_t AES_CBC_ciphertext_1792B[] = {
1370 0x59, 0xcc, 0xfe, 0x8f, 0xb4, 0x9d, 0x0e, 0xd1,
1371 0x85, 0xfc, 0x9b, 0x43, 0xc1, 0xb7, 0x54, 0x67,
1372 0x01, 0xef, 0xb8, 0x71, 0x36, 0xdb, 0x50, 0x48,
1373 0x7a, 0xea, 0xcf, 0xce, 0xba, 0x30, 0x10, 0x2e,
1374 0x96, 0x2b, 0xfd, 0xcf, 0x00, 0xe3, 0x1f, 0xac,
1375 0x66, 0x14, 0x30, 0x86, 0x49, 0xdb, 0x01, 0x8b,
1376 0x07, 0xdd, 0x00, 0x9d, 0x0d, 0x5c, 0x19, 0x11,
1377 0xe8, 0x44, 0x2b, 0x25, 0x70, 0xed, 0x7c, 0x33,
1378 0x0d, 0xe3, 0x34, 0x93, 0x63, 0xad, 0x26, 0xb1,
1379 0x11, 0x91, 0x34, 0x2e, 0x1d, 0x50, 0xaa, 0xd4,
1380 0xef, 0x3a, 0x6d, 0xd7, 0x33, 0x20, 0x0d, 0x3f,
1381 0x9b, 0xdd, 0xc3, 0xa5, 0xc5, 0xf1, 0x99, 0xdc,
1382 0xea, 0x52, 0xda, 0x55, 0xea, 0xa2, 0x7a, 0xc5,
1383 0x78, 0x44, 0x4a, 0x02, 0x33, 0x19, 0x62, 0x37,
1384 0xf8, 0x8b, 0xd1, 0x0c, 0x21, 0xdf, 0x40, 0x19,
1385 0x81, 0xea, 0xfb, 0x1c, 0xa7, 0xcc, 0x60, 0xfe,
1386 0x63, 0x25, 0x8f, 0xf3, 0x73, 0x0f, 0x45, 0xe6,
1387 0x6a, 0x18, 0xbf, 0xbe, 0xad, 0x92, 0x2a, 0x1e,
1388 0x15, 0x65, 0x6f, 0xef, 0x92, 0xcd, 0x0e, 0x19,
1389 0x3d, 0x42, 0xa8, 0xfc, 0x0d, 0x32, 0x58, 0xe0,
1390 0x56, 0x9f, 0xd6, 0x9b, 0x8b, 0xec, 0xe0, 0x45,
1391 0x4d, 0x7e, 0x73, 0x87, 0xff, 0x74, 0x92, 0x59,
1392 0x60, 0x13, 0x93, 0xda, 0xec, 0xbf, 0xfa, 0x20,
1393 0xb6, 0xe7, 0xdf, 0xc7, 0x10, 0xf5, 0x79, 0xb4,
1394 0xd7, 0xac, 0xaf, 0x2b, 0x37, 0x52, 0x30, 0x1d,
1395 0xbe, 0x0f, 0x60, 0x77, 0x3d, 0x03, 0x63, 0xa9,
1396 0xae, 0xb1, 0xf3, 0xca, 0xca, 0xb4, 0x21, 0xd7,
1397 0x6f, 0x2e, 0x5e, 0x9b, 0x68, 0x53, 0x80, 0xab,
1398 0x30, 0x23, 0x0a, 0x72, 0x6b, 0xb1, 0xd8, 0x25,
1399 0x5d, 0x3a, 0x62, 0x9b, 0x4f, 0x59, 0x3b, 0x79,
1400 0xa8, 0x9e, 0x08, 0x6d, 0x37, 0xb0, 0xfc, 0x42,
1401 0x51, 0x25, 0x86, 0xbd, 0x54, 0x5a, 0x95, 0x20,
1402 0x6c, 0xac, 0xb9, 0x30, 0x1c, 0x03, 0xc9, 0x49,
1403 0x38, 0x55, 0x31, 0x49, 0xed, 0xa9, 0x0e, 0xc3,
1404 0x65, 0xb4, 0x68, 0x6b, 0x07, 0x4c, 0x0a, 0xf9,
1405 0x21, 0x69, 0x7c, 0x9f, 0x28, 0x80, 0xe9, 0x49,
1406 0x22, 0x7c, 0xec, 0x97, 0xf7, 0x70, 0xb4, 0xb8,
1407 0x25, 0xe7, 0x80, 0x2c, 0x43, 0x24, 0x8a, 0x2e,
1408 0xac, 0xa2, 0x84, 0x20, 0xe7, 0xf4, 0x6b, 0x86,
1409 0x37, 0x05, 0xc7, 0x59, 0x04, 0x49, 0x2a, 0x99,
1410 0x80, 0x46, 0x32, 0x19, 0xe6, 0x30, 0xce, 0xc0,
1411 0xef, 0x6e, 0xec, 0xe5, 0x2f, 0x24, 0xc1, 0x78,
1412 0x45, 0x02, 0xd3, 0x64, 0x99, 0xf5, 0xc7, 0xbc,
1413 0x8f, 0x8c, 0x75, 0xb1, 0x0a, 0xc8, 0xc3, 0xbd,
1414 0x5e, 0x7e, 0xbd, 0x0e, 0xdf, 0x4b, 0x96, 0x6a,
1415 0xfd, 0x03, 0xdb, 0xd1, 0x31, 0x1e, 0x27, 0xf9,
1416 0xe5, 0x83, 0x9a, 0xfc, 0x13, 0x4c, 0xd3, 0x04,
1417 0xdb, 0xdb, 0x3f, 0x35, 0x93, 0x4e, 0x14, 0x6b,
1418 0x00, 0x5c, 0xb6, 0x11, 0x50, 0xee, 0x61, 0x5c,
1419 0x10, 0x5c, 0xd0, 0x90, 0x02, 0x2e, 0x12, 0xe0,
1420 0x50, 0x44, 0xad, 0x75, 0xcd, 0x94, 0xcf, 0x92,
1421 0xcb, 0xe3, 0xe8, 0x77, 0x4b, 0xd7, 0x1a, 0x7c,
1422 0xdd, 0x6b, 0x49, 0x21, 0x7c, 0xe8, 0x2c, 0x25,
1423 0x49, 0x86, 0x1e, 0x54, 0xae, 0xfc, 0x0e, 0x80,
1424 0xb1, 0xd5, 0xa5, 0x23, 0xcf, 0xcc, 0x0e, 0x11,
1425 0xe2, 0x7c, 0x3c, 0x25, 0x78, 0x64, 0x03, 0xa1,
1426 0xdd, 0x9f, 0x74, 0x12, 0x7b, 0x21, 0xb5, 0x73,
1427 0x15, 0x3c, 0xed, 0xad, 0x07, 0x62, 0x21, 0x79,
1428 0xd4, 0x2f, 0x0d, 0x72, 0xe9, 0x7c, 0x6b, 0x96,
1429 0x6e, 0xe5, 0x36, 0x4a, 0xd2, 0x38, 0xe1, 0xff,
1430 0x6e, 0x26, 0xa4, 0xac, 0x83, 0x07, 0xe6, 0x67,
1431 0x74, 0x6c, 0xec, 0x8b, 0x4b, 0x79, 0x33, 0x50,
1432 0x2f, 0x8f, 0xa0, 0x8f, 0xfa, 0x38, 0x6a, 0xa2,
1433 0x3a, 0x42, 0x85, 0x15, 0x90, 0xd0, 0xb3, 0x0d,
1434 0x8a, 0xe4, 0x60, 0x03, 0xef, 0xf9, 0x65, 0x8a,
1435 0x4e, 0x50, 0x8c, 0x65, 0xba, 0x61, 0x16, 0xc3,
1436 0x93, 0xb7, 0x75, 0x21, 0x98, 0x25, 0x60, 0x6e,
1437 0x3d, 0x68, 0xba, 0x7c, 0xe4, 0xf3, 0xd9, 0x9b,
1438 0xfb, 0x7a, 0xed, 0x1f, 0xb3, 0x4b, 0x88, 0x74,
1439 0x2c, 0xb8, 0x8c, 0x22, 0x95, 0xce, 0x90, 0xf1,
1440 0xdb, 0x80, 0xa6, 0x39, 0xae, 0x82, 0xa1, 0xef,
1441 0x75, 0xec, 0xfe, 0xf1, 0xe8, 0x04, 0xfd, 0x99,
1442 0x1b, 0x5f, 0x45, 0x87, 0x4f, 0xfa, 0xa2, 0x3e,
1443 0x3e, 0xb5, 0x01, 0x4b, 0x46, 0xeb, 0x13, 0x9a,
1444 0xe4, 0x7d, 0x03, 0x87, 0xb1, 0x59, 0x91, 0x8e,
1445 0x37, 0xd3, 0x16, 0xce, 0xef, 0x4b, 0xe9, 0x46,
1446 0x8d, 0x2a, 0x50, 0x2f, 0x41, 0xd3, 0x7b, 0xcf,
1447 0xf0, 0xb7, 0x8b, 0x65, 0x0f, 0xa3, 0x27, 0x10,
1448 0xe9, 0xa9, 0xe9, 0x2c, 0xbe, 0xbb, 0x82, 0xe3,
1449 0x7b, 0x0b, 0x81, 0x3e, 0xa4, 0x6a, 0x4f, 0x3b,
1450 0xd5, 0x61, 0xf8, 0x47, 0x04, 0x99, 0x5b, 0xff,
1451 0xf3, 0x14, 0x6e, 0x57, 0x5b, 0xbf, 0x1b, 0xb4,
1452 0x3f, 0xf9, 0x31, 0xf6, 0x95, 0xd5, 0x10, 0xa9,
1453 0x72, 0x28, 0x23, 0xa9, 0x6a, 0xa2, 0xcf, 0x7d,
1454 0xe3, 0x18, 0x95, 0xda, 0xbc, 0x6f, 0xe9, 0xd8,
1455 0xef, 0x49, 0x3f, 0xd3, 0xef, 0x1f, 0xe1, 0x50,
1456 0xe8, 0x8a, 0xc0, 0xce, 0xcc, 0xb7, 0x5e, 0x0e,
1457 0x8b, 0x95, 0x80, 0xfd, 0x58, 0x2a, 0x9b, 0xc8,
1458 0xb4, 0x17, 0x04, 0x46, 0x74, 0xd4, 0x68, 0x91,
1459 0x33, 0xc8, 0x31, 0x15, 0x84, 0x16, 0x35, 0x03,
1460 0x64, 0x6d, 0xa9, 0x4e, 0x20, 0xeb, 0xa9, 0x3f,
1461 0x21, 0x5e, 0x9b, 0x09, 0xc3, 0x45, 0xf8, 0x7c,
1462 0x59, 0x62, 0x29, 0x9a, 0x5c, 0xcf, 0xb4, 0x27,
1463 0x5e, 0x13, 0xea, 0xb3, 0xef, 0xd9, 0x01, 0x2a,
1464 0x65, 0x5f, 0x14, 0xf4, 0xbf, 0x28, 0x89, 0x3d,
1465 0xdd, 0x9d, 0x52, 0xbd, 0x9e, 0x5b, 0x3b, 0xd2,
1466 0xc2, 0x81, 0x35, 0xb6, 0xac, 0xdd, 0x27, 0xc3,
1467 0x7b, 0x01, 0x5a, 0x6d, 0x4c, 0x5e, 0x2c, 0x30,
1468 0xcb, 0x3a, 0xfa, 0xc1, 0xd7, 0x31, 0x67, 0x3e,
1469 0x08, 0x6a, 0xe8, 0x8c, 0x75, 0xac, 0x1a, 0x6a,
1470 0x52, 0xf7, 0x51, 0xcd, 0x85, 0x3f, 0x3c, 0xa7,
1471 0xea, 0xbc, 0xd7, 0x18, 0x9e, 0x27, 0x73, 0xe6,
1472 0x2b, 0x58, 0xb6, 0xd2, 0x29, 0x68, 0xd5, 0x8f,
1473 0x00, 0x4d, 0x55, 0xf6, 0x61, 0x5a, 0xcc, 0x51,
1474 0xa6, 0x5e, 0x85, 0xcb, 0x0b, 0xfd, 0x06, 0xca,
1475 0xf5, 0xbf, 0x0d, 0x13, 0x74, 0x78, 0x6d, 0x9e,
1476 0x20, 0x11, 0x84, 0x3e, 0x78, 0x17, 0x04, 0x4f,
1477 0x64, 0x2c, 0x3b, 0x3e, 0x93, 0x7b, 0x58, 0x33,
1478 0x07, 0x52, 0xf7, 0x60, 0x6a, 0xa8, 0x3b, 0x19,
1479 0x27, 0x7a, 0x93, 0xc5, 0x53, 0xad, 0xec, 0xf6,
1480 0xc8, 0x94, 0xee, 0x92, 0xea, 0xee, 0x7e, 0xea,
1481 0xb9, 0x5f, 0xac, 0x59, 0x5d, 0x2e, 0x78, 0x53,
1482 0x72, 0x81, 0x92, 0xdd, 0x1c, 0x63, 0xbe, 0x02,
1483 0xeb, 0xa8, 0x1b, 0x2a, 0x6e, 0x72, 0xe3, 0x2d,
1484 0x84, 0x0d, 0x8a, 0x22, 0xf6, 0xba, 0xab, 0x04,
1485 0x8e, 0x04, 0x24, 0xdb, 0xcc, 0xe2, 0x69, 0xeb,
1486 0x4e, 0xfa, 0x6b, 0x5b, 0xc8, 0xc0, 0xd9, 0x25,
1487 0xcb, 0x40, 0x8d, 0x4b, 0x8e, 0xa0, 0xd4, 0x72,
1488 0x98, 0x36, 0x46, 0x3b, 0x4f, 0x5f, 0x96, 0x84,
1489 0x03, 0x28, 0x86, 0x4d, 0xa1, 0x8a, 0xd7, 0xb2,
1490 0x5b, 0x27, 0x01, 0x80, 0x62, 0x49, 0x56, 0xb9,
1491 0xa0, 0xa1, 0xe3, 0x6e, 0x22, 0x2a, 0x5d, 0x03,
1492 0x86, 0x40, 0x36, 0x22, 0x5e, 0xd2, 0xe5, 0xc0,
1493 0x6b, 0xfa, 0xac, 0x80, 0x4e, 0x09, 0x99, 0xbc,
1494 0x2f, 0x9b, 0xcc, 0xf3, 0x4e, 0xf7, 0x99, 0x98,
1495 0x11, 0x6e, 0x6f, 0x62, 0x22, 0x6b, 0x92, 0x95,
1496 0x3b, 0xc3, 0xd2, 0x8e, 0x0f, 0x07, 0xc2, 0x51,
1497 0x5c, 0x4d, 0xb2, 0x6e, 0xc0, 0x27, 0x73, 0xcd,
1498 0x57, 0xb7, 0xf0, 0xe9, 0x2e, 0xc8, 0xe2, 0x0c,
1499 0xd1, 0xb5, 0x0f, 0xff, 0xf9, 0xec, 0x38, 0xba,
1500 0x97, 0xd6, 0x94, 0x9b, 0xd1, 0x79, 0xb6, 0x6a,
1501 0x01, 0x17, 0xe4, 0x7e, 0xa6, 0xd5, 0x86, 0x19,
1502 0xae, 0xf3, 0xf0, 0x62, 0x73, 0xc0, 0xf0, 0x0a,
1503 0x7a, 0x96, 0x93, 0x72, 0x89, 0x7e, 0x25, 0x57,
1504 0xf8, 0xf7, 0xd5, 0x1e, 0xe5, 0xac, 0xd6, 0x38,
1505 0x4f, 0xe8, 0x81, 0xd1, 0x53, 0x41, 0x07, 0x2d,
1506 0x58, 0x34, 0x1c, 0xef, 0x74, 0x2e, 0x61, 0xca,
1507 0xd3, 0xeb, 0xd6, 0x93, 0x0a, 0xf2, 0xf2, 0x86,
1508 0x9c, 0xe3, 0x7a, 0x52, 0xf5, 0x42, 0xf1, 0x8b,
1509 0x10, 0xf2, 0x25, 0x68, 0x7e, 0x61, 0xb1, 0x19,
1510 0xcf, 0x8f, 0x5a, 0x53, 0xb7, 0x68, 0x4f, 0x1a,
1511 0x71, 0xe9, 0x83, 0x91, 0x3a, 0x78, 0x0f, 0xf7,
1512 0xd4, 0x74, 0xf5, 0x06, 0xd2, 0x88, 0xb0, 0x06,
1513 0xe5, 0xc0, 0xfb, 0xb3, 0x91, 0xad, 0xc0, 0x84,
1514 0x31, 0xf2, 0x3a, 0xcf, 0x63, 0xe6, 0x4a, 0xd3,
1515 0x78, 0xbe, 0xde, 0x73, 0x3e, 0x02, 0x8e, 0xb8,
1516 0x3a, 0xf6, 0x55, 0xa7, 0xf8, 0x5a, 0xb5, 0x0e,
1517 0x0c, 0xc5, 0xe5, 0x66, 0xd5, 0xd2, 0x18, 0xf3,
1518 0xef, 0xa5, 0xc9, 0x68, 0x69, 0xe0, 0xcd, 0x00,
1519 0x33, 0x99, 0x6e, 0xea, 0xcb, 0x06, 0x7a, 0xe1,
1520 0xe1, 0x19, 0x0b, 0xe7, 0x08, 0xcd, 0x09, 0x1b,
1521 0x85, 0xec, 0xc4, 0xd4, 0x75, 0xf0, 0xd6, 0xfb,
1522 0x84, 0x95, 0x07, 0x44, 0xca, 0xa5, 0x2a, 0x6c,
1523 0xc2, 0x00, 0x58, 0x08, 0x87, 0x9e, 0x0a, 0xd4,
1524 0x06, 0xe2, 0x91, 0x5f, 0xb7, 0x1b, 0x11, 0xfa,
1525 0x85, 0xfc, 0x7c, 0xf2, 0x0f, 0x6e, 0x3c, 0x8a,
1526 0xe1, 0x0f, 0xa0, 0x33, 0x84, 0xce, 0x81, 0x4d,
1527 0x32, 0x4d, 0xeb, 0x41, 0xcf, 0x5a, 0x05, 0x60,
1528 0x47, 0x6c, 0x2a, 0xc4, 0x17, 0xd5, 0x16, 0x3a,
1529 0xe4, 0xe7, 0xab, 0x84, 0x94, 0x22, 0xff, 0x56,
1530 0xb0, 0x0c, 0x92, 0x6c, 0x19, 0x11, 0x4c, 0xb3,
1531 0xed, 0x58, 0x48, 0x84, 0x2a, 0xe2, 0x19, 0x2a,
1532 0xe1, 0xc0, 0x56, 0x82, 0x3c, 0x83, 0xb4, 0x58,
1533 0x2d, 0xf0, 0xb5, 0x1e, 0x76, 0x85, 0x51, 0xc2,
1534 0xe4, 0x95, 0x27, 0x96, 0xd1, 0x90, 0xc3, 0x17,
1535 0x75, 0xa1, 0xbb, 0x46, 0x5f, 0xa6, 0xf2, 0xef,
1536 0x71, 0x56, 0x92, 0xc5, 0x8a, 0x85, 0x52, 0xe4,
1537 0x63, 0x21, 0x6f, 0x55, 0x85, 0x2b, 0x6b, 0x0d,
1538 0xc9, 0x92, 0x77, 0x67, 0xe3, 0xff, 0x2a, 0x2b,
1539 0x90, 0x01, 0x3d, 0x74, 0x63, 0x04, 0x61, 0x3c,
1540 0x8e, 0xf8, 0xfc, 0x04, 0xdd, 0x21, 0x85, 0x92,
1541 0x1e, 0x4d, 0x51, 0x8d, 0xb5, 0x6b, 0xf1, 0xda,
1542 0x96, 0xf5, 0x8e, 0x3c, 0x38, 0x5a, 0xac, 0x9b,
1543 0xba, 0x0c, 0x84, 0x5d, 0x50, 0x12, 0xc7, 0xc5,
1544 0x7a, 0xcb, 0xb1, 0xfa, 0x16, 0x93, 0xdf, 0x98,
1545 0xda, 0x3f, 0x49, 0xa3, 0x94, 0x78, 0x70, 0xc7,
1546 0x0b, 0xb6, 0x91, 0xa6, 0x16, 0x2e, 0xcf, 0xfd,
1547 0x51, 0x6a, 0x5b, 0xad, 0x7a, 0xdd, 0xa9, 0x48,
1548 0x48, 0xac, 0xd6, 0x45, 0xbc, 0x23, 0x31, 0x1d,
1549 0x86, 0x54, 0x8a, 0x7f, 0x04, 0x97, 0x71, 0x9e,
1550 0xbc, 0x2e, 0x6b, 0xd9, 0x33, 0xc8, 0x20, 0xc9,
1551 0xe0, 0x25, 0x86, 0x59, 0x15, 0xcf, 0x63, 0xe5,
1552 0x99, 0xf1, 0x24, 0xf1, 0xba, 0xc4, 0x15, 0x02,
1553 0xe2, 0xdb, 0xfe, 0x4a, 0xf8, 0x3b, 0x91, 0x13,
1554 0x8d, 0x03, 0x81, 0x9f, 0xb3, 0x3f, 0x04, 0x03,
1555 0x58, 0xc0, 0xef, 0x27, 0x82, 0x14, 0xd2, 0x7f,
1556 0x93, 0x70, 0xb7, 0xb2, 0x02, 0x21, 0xb3, 0x07,
1557 0x7f, 0x1c, 0xef, 0x88, 0xee, 0x29, 0x7a, 0x0b,
1558 0x3d, 0x75, 0x5a, 0x93, 0xfe, 0x7f, 0x14, 0xf7,
1559 0x4e, 0x4b, 0x7f, 0x21, 0x02, 0xad, 0xf9, 0x43,
1560 0x29, 0x1a, 0xe8, 0x1b, 0xf5, 0x32, 0xb2, 0x96,
1561 0xe6, 0xe8, 0x96, 0x20, 0x9b, 0x96, 0x8e, 0x7b,
1562 0xfe, 0xd8, 0xc9, 0x9c, 0x65, 0x16, 0xd6, 0x68,
1563 0x95, 0xf8, 0x22, 0xe2, 0xae, 0x84, 0x03, 0xfd,
1564 0x87, 0xa2, 0x72, 0x79, 0x74, 0x95, 0xfa, 0xe1,
1565 0xfe, 0xd0, 0x4e, 0x3d, 0x39, 0x2e, 0x67, 0x55,
1566 0x71, 0x6c, 0x89, 0x33, 0x49, 0x0c, 0x1b, 0x46,
1567 0x92, 0x31, 0x6f, 0xa6, 0xf0, 0x09, 0xbd, 0x2d,
1568 0xe2, 0xca, 0xda, 0x18, 0x33, 0xce, 0x67, 0x37,
1569 0xfd, 0x6f, 0xcb, 0x9d, 0xbd, 0x42, 0xbc, 0xb2,
1570 0x9c, 0x28, 0xcd, 0x65, 0x3c, 0x61, 0xbc, 0xde,
1571 0x9d, 0xe1, 0x2a, 0x3e, 0xbf, 0xee, 0x3c, 0xcb,
1572 0xb1, 0x50, 0xa9, 0x2c, 0xbe, 0xb5, 0x43, 0xd0,
1573 0xec, 0x29, 0xf9, 0x16, 0x6f, 0x31, 0xd9, 0x9b,
1574 0x92, 0xb1, 0x32, 0xae, 0x0f, 0xb6, 0x9d, 0x0e,
1575 0x25, 0x7f, 0x89, 0x1f, 0x1d, 0x01, 0x68, 0xab,
1576 0x3d, 0xd1, 0x74, 0x5b, 0x4c, 0x38, 0x7f, 0x3d,
1577 0x33, 0xa5, 0xa2, 0x9f, 0xda, 0x84, 0xa5, 0x82,
1578 0x2d, 0x16, 0x66, 0x46, 0x08, 0x30, 0x14, 0x48,
1579 0x5e, 0xca, 0xe3, 0xf4, 0x8c, 0xcb, 0x32, 0xc6,
1580 0xf1, 0x43, 0x62, 0xc6, 0xef, 0x16, 0xfa, 0x43,
1581 0xae, 0x9c, 0x53, 0xe3, 0x49, 0x45, 0x80, 0xfd,
1582 0x1d, 0x8c, 0xa9, 0x6d, 0x77, 0x76, 0xaa, 0x40,
1583 0xc4, 0x4e, 0x7b, 0x78, 0x6b, 0xe0, 0x1d, 0xce,
1584 0x56, 0x3d, 0xf0, 0x11, 0xfe, 0x4f, 0x6a, 0x6d,
1585 0x0f, 0x4f, 0x90, 0x38, 0x92, 0x17, 0xfa, 0x56,
1586 0x12, 0xa6, 0xa1, 0x0a, 0xea, 0x2f, 0x50, 0xf9,
1587 0x60, 0x66, 0x6c, 0x7d, 0x5a, 0x08, 0x8e, 0x3c,
1588 0xf3, 0xf0, 0x33, 0x02, 0x11, 0x02, 0xfe, 0x4c,
1589 0x56, 0x2b, 0x9f, 0x0c, 0xbd, 0x65, 0x8a, 0x83,
1590 0xde, 0x7c, 0x05, 0x26, 0x93, 0x19, 0xcc, 0xf3,
1591 0x71, 0x0e, 0xad, 0x2f, 0xb3, 0xc9, 0x38, 0x50,
1592 0x64, 0xd5, 0x4c, 0x60, 0x5f, 0x02, 0x13, 0x34,
1593 0xc9, 0x75, 0xc4, 0x60, 0xab, 0x2e, 0x17, 0x7d
1594 };
1595
1596 static const uint8_t AES_CBC_ciphertext_2048B[] = {
1597 0x8b, 0x55, 0xbd, 0xfd, 0x2b, 0x35, 0x76, 0x5c,
1598 0xd1, 0x90, 0xd7, 0x6a, 0x63, 0x1e, 0x39, 0x71,
1599 0x0d, 0x5c, 0xd8, 0x03, 0x00, 0x75, 0xf1, 0x07,
1600 0x03, 0x8d, 0x76, 0xeb, 0x3b, 0x00, 0x1e, 0x33,
1601 0x88, 0xfc, 0x8f, 0x08, 0x4d, 0x33, 0xf1, 0x3c,
1602 0xee, 0xd0, 0x5d, 0x19, 0x8b, 0x3c, 0x50, 0x86,
1603 0xfd, 0x8d, 0x58, 0x21, 0xb4, 0xae, 0x0f, 0x81,
1604 0xe9, 0x9f, 0xc9, 0xc0, 0x90, 0xf7, 0x04, 0x6f,
1605 0x39, 0x1d, 0x8a, 0x3f, 0x8d, 0x32, 0x23, 0xb5,
1606 0x1f, 0xcc, 0x8a, 0x12, 0x2d, 0x46, 0x82, 0x5e,
1607 0x6a, 0x34, 0x8c, 0xb1, 0x93, 0x70, 0x3b, 0xde,
1608 0x55, 0xaf, 0x16, 0x35, 0x99, 0x84, 0xd5, 0x88,
1609 0xc9, 0x54, 0xb1, 0xb2, 0xd3, 0xeb, 0x9e, 0x55,
1610 0x9a, 0xa9, 0xa7, 0xf5, 0xda, 0x29, 0xcf, 0xe1,
1611 0x98, 0x64, 0x45, 0x77, 0xf2, 0x12, 0x69, 0x8f,
1612 0x78, 0xd8, 0x82, 0x41, 0xb2, 0x9f, 0xe2, 0x1c,
1613 0x63, 0x9b, 0x24, 0x81, 0x67, 0x95, 0xa2, 0xff,
1614 0x26, 0x9d, 0x65, 0x48, 0x61, 0x30, 0x66, 0x41,
1615 0x68, 0x84, 0xbb, 0x59, 0x14, 0x8e, 0x9a, 0x62,
1616 0xb6, 0xca, 0xda, 0xbe, 0x7c, 0x41, 0x52, 0x6e,
1617 0x1b, 0x86, 0xbf, 0x08, 0xeb, 0x37, 0x84, 0x60,
1618 0xe4, 0xc4, 0x1e, 0xa8, 0x4c, 0x84, 0x60, 0x2f,
1619 0x70, 0x90, 0xf2, 0x26, 0xe7, 0x65, 0x0c, 0xc4,
1620 0x58, 0x36, 0x8e, 0x4d, 0xdf, 0xff, 0x9a, 0x39,
1621 0x93, 0x01, 0xcf, 0x6f, 0x6d, 0xde, 0xef, 0x79,
1622 0xb0, 0xce, 0xe2, 0x98, 0xdb, 0x85, 0x8d, 0x62,
1623 0x9d, 0xb9, 0x63, 0xfd, 0xf0, 0x35, 0xb5, 0xa9,
1624 0x1b, 0xf9, 0xe5, 0xd4, 0x2e, 0x22, 0x2d, 0xcc,
1625 0x42, 0xbf, 0x0e, 0x51, 0xf7, 0x15, 0x07, 0x32,
1626 0x75, 0x5b, 0x74, 0xbb, 0x00, 0xef, 0xd4, 0x66,
1627 0x8b, 0xad, 0x71, 0x53, 0x94, 0xd7, 0x7d, 0x2c,
1628 0x40, 0x3e, 0x69, 0xa0, 0x4c, 0x86, 0x5e, 0x06,
1629 0xed, 0xdf, 0x22, 0xe2, 0x24, 0x25, 0x4e, 0x9b,
1630 0x5f, 0x49, 0x74, 0xba, 0xed, 0xb1, 0xa6, 0xeb,
1631 0xae, 0x3f, 0xc6, 0x9e, 0x0b, 0x29, 0x28, 0x9a,
1632 0xb6, 0xb2, 0x74, 0x58, 0xec, 0xa6, 0x4a, 0xed,
1633 0xe5, 0x10, 0x00, 0x85, 0xe1, 0x63, 0x41, 0x61,
1634 0x30, 0x7c, 0x97, 0xcf, 0x75, 0xcf, 0xb6, 0xf3,
1635 0xf7, 0xda, 0x35, 0x3f, 0x85, 0x8c, 0x64, 0xca,
1636 0xb7, 0xea, 0x7f, 0xe4, 0xa3, 0x4d, 0x30, 0x84,
1637 0x8c, 0x9c, 0x80, 0x5a, 0x50, 0xa5, 0x64, 0xae,
1638 0x26, 0xd3, 0xb5, 0x01, 0x73, 0x36, 0x8a, 0x92,
1639 0x49, 0xc4, 0x1a, 0x94, 0x81, 0x9d, 0xf5, 0x6c,
1640 0x50, 0xe1, 0x58, 0x0b, 0x75, 0xdd, 0x6b, 0x6a,
1641 0xca, 0x69, 0xea, 0xc3, 0x33, 0x90, 0x9f, 0x3b,
1642 0x65, 0x5d, 0x5e, 0xee, 0x31, 0xb7, 0x32, 0xfd,
1643 0x56, 0x83, 0xb6, 0xfb, 0xa8, 0x04, 0xfc, 0x1e,
1644 0x11, 0xfb, 0x02, 0x23, 0x53, 0x49, 0x45, 0xb1,
1645 0x07, 0xfc, 0xba, 0xe7, 0x5f, 0x5d, 0x2d, 0x7f,
1646 0x9e, 0x46, 0xba, 0xe9, 0xb0, 0xdb, 0x32, 0x04,
1647 0xa4, 0xa7, 0x98, 0xab, 0x91, 0xcd, 0x02, 0x05,
1648 0xf5, 0x74, 0x31, 0x98, 0x83, 0x3d, 0x33, 0x11,
1649 0x0e, 0xe3, 0x8d, 0xa8, 0xc9, 0x0e, 0xf3, 0xb9,
1650 0x47, 0x67, 0xe9, 0x79, 0x2b, 0x34, 0xcd, 0x9b,
1651 0x45, 0x75, 0x29, 0xf0, 0xbf, 0xcc, 0xda, 0x3a,
1652 0x91, 0xb2, 0x15, 0x27, 0x7a, 0xe5, 0xf5, 0x6a,
1653 0x5e, 0xbe, 0x2c, 0x98, 0xe8, 0x40, 0x96, 0x4f,
1654 0x8a, 0x09, 0xfd, 0xf6, 0xb2, 0xe7, 0x45, 0xb6,
1655 0x08, 0xc1, 0x69, 0xe1, 0xb3, 0xc4, 0x24, 0x34,
1656 0x07, 0x85, 0xd5, 0xa9, 0x78, 0xca, 0xfa, 0x4b,
1657 0x01, 0x19, 0x4d, 0x95, 0xdc, 0xa5, 0xc1, 0x9c,
1658 0xec, 0x27, 0x5b, 0xa6, 0x54, 0x25, 0xbd, 0xc8,
1659 0x0a, 0xb7, 0x11, 0xfb, 0x4e, 0xeb, 0x65, 0x2e,
1660 0xe1, 0x08, 0x9c, 0x3a, 0x45, 0x44, 0x33, 0xef,
1661 0x0d, 0xb9, 0xff, 0x3e, 0x68, 0x9c, 0x61, 0x2b,
1662 0x11, 0xb8, 0x5c, 0x47, 0x0f, 0x94, 0xf2, 0xf8,
1663 0x0b, 0xbb, 0x99, 0x18, 0x85, 0xa3, 0xba, 0x44,
1664 0xf3, 0x79, 0xb3, 0x63, 0x2c, 0x1f, 0x2a, 0x35,
1665 0x3b, 0x23, 0x98, 0xab, 0xf4, 0x16, 0x36, 0xf8,
1666 0xde, 0x86, 0xa4, 0xd4, 0x75, 0xff, 0x51, 0xf9,
1667 0xeb, 0x42, 0x5f, 0x55, 0xe2, 0xbe, 0xd1, 0x5b,
1668 0xb5, 0x38, 0xeb, 0xb4, 0x4d, 0xec, 0xec, 0x99,
1669 0xe1, 0x39, 0x43, 0xaa, 0x64, 0xf7, 0xc9, 0xd8,
1670 0xf2, 0x9a, 0x71, 0x43, 0x39, 0x17, 0xe8, 0xa8,
1671 0xa2, 0xe2, 0xa4, 0x2c, 0x18, 0x11, 0x49, 0xdf,
1672 0x18, 0xdd, 0x85, 0x6e, 0x65, 0x96, 0xe2, 0xba,
1673 0xa1, 0x0a, 0x2c, 0xca, 0xdc, 0x5f, 0xe4, 0xf4,
1674 0x35, 0x03, 0xb2, 0xa9, 0xda, 0xcf, 0xb7, 0x6d,
1675 0x65, 0x82, 0x82, 0x67, 0x9d, 0x0e, 0xf3, 0xe8,
1676 0x85, 0x6c, 0x69, 0xb8, 0x4c, 0xa6, 0xc6, 0x2e,
1677 0x40, 0xb5, 0x54, 0x28, 0x95, 0xe4, 0x57, 0xe0,
1678 0x5b, 0xf8, 0xde, 0x59, 0xe0, 0xfd, 0x89, 0x48,
1679 0xac, 0x56, 0x13, 0x54, 0xb9, 0x1b, 0xf5, 0x59,
1680 0x97, 0xb6, 0xb3, 0xe8, 0xac, 0x2d, 0xfc, 0xd2,
1681 0xea, 0x57, 0x96, 0x57, 0xa8, 0x26, 0x97, 0x2c,
1682 0x01, 0x89, 0x56, 0xea, 0xec, 0x8c, 0x53, 0xd5,
1683 0xd7, 0x9e, 0xc9, 0x98, 0x0b, 0xad, 0x03, 0x75,
1684 0xa0, 0x6e, 0x98, 0x8b, 0x97, 0x8d, 0x8d, 0x85,
1685 0x7d, 0x74, 0xa7, 0x2d, 0xde, 0x67, 0x0c, 0xcd,
1686 0x54, 0xb8, 0x15, 0x7b, 0xeb, 0xf5, 0x84, 0xb9,
1687 0x78, 0xab, 0xd8, 0x68, 0x91, 0x1f, 0x6a, 0xa6,
1688 0x28, 0x22, 0xf7, 0x00, 0x49, 0x00, 0xbe, 0x41,
1689 0x71, 0x0a, 0xf5, 0xe7, 0x9f, 0xb4, 0x11, 0x41,
1690 0x3f, 0xcd, 0xa9, 0xa9, 0x01, 0x8b, 0x6a, 0xeb,
1691 0x54, 0x4c, 0x58, 0x92, 0x68, 0x02, 0x0e, 0xe9,
1692 0xed, 0x65, 0x4c, 0xfb, 0x95, 0x48, 0x58, 0xa2,
1693 0xaa, 0x57, 0x69, 0x13, 0x82, 0x0c, 0x2c, 0x4b,
1694 0x5d, 0x4e, 0x18, 0x30, 0xef, 0x1c, 0xb1, 0x9d,
1695 0x05, 0x05, 0x02, 0x1c, 0x97, 0xc9, 0x48, 0xfe,
1696 0x5e, 0x7b, 0x77, 0xa3, 0x1f, 0x2a, 0x81, 0x42,
1697 0xf0, 0x4b, 0x85, 0x12, 0x9c, 0x1f, 0x44, 0xb1,
1698 0x14, 0x91, 0x92, 0x65, 0x77, 0xb1, 0x87, 0xa2,
1699 0xfc, 0xa4, 0xe7, 0xd2, 0x9b, 0xf2, 0x17, 0xf0,
1700 0x30, 0x1c, 0x8d, 0x33, 0xbc, 0x25, 0x28, 0x48,
1701 0xfd, 0x30, 0x79, 0x0a, 0x99, 0x3e, 0xb4, 0x0f,
1702 0x1e, 0xa6, 0x68, 0x76, 0x19, 0x76, 0x29, 0xac,
1703 0x5d, 0xb8, 0x1e, 0x42, 0xd6, 0x85, 0x04, 0xbf,
1704 0x64, 0x1c, 0x2d, 0x53, 0xe9, 0x92, 0x78, 0xf8,
1705 0xc3, 0xda, 0x96, 0x92, 0x10, 0x6f, 0x45, 0x85,
1706 0xaf, 0x5e, 0xcc, 0xa8, 0xc0, 0xc6, 0x2e, 0x73,
1707 0x51, 0x3f, 0x5e, 0xd7, 0x52, 0x33, 0x71, 0x12,
1708 0x6d, 0x85, 0xee, 0xea, 0x85, 0xa8, 0x48, 0x2b,
1709 0x40, 0x64, 0x6d, 0x28, 0x73, 0x16, 0xd7, 0x82,
1710 0xd9, 0x90, 0xed, 0x1f, 0xa7, 0x5c, 0xb1, 0x5c,
1711 0x27, 0xb9, 0x67, 0x8b, 0xb4, 0x17, 0x13, 0x83,
1712 0x5f, 0x09, 0x72, 0x0a, 0xd7, 0xa0, 0xec, 0x81,
1713 0x59, 0x19, 0xb9, 0xa6, 0x5a, 0x37, 0x34, 0x14,
1714 0x47, 0xf6, 0xe7, 0x6c, 0xd2, 0x09, 0x10, 0xe7,
1715 0xdd, 0xbb, 0x02, 0xd1, 0x28, 0xfa, 0x01, 0x2c,
1716 0x93, 0x64, 0x2e, 0x1b, 0x4c, 0x02, 0x52, 0xcb,
1717 0x07, 0xa1, 0xb6, 0x46, 0x02, 0x80, 0xd9, 0x8f,
1718 0x5c, 0x62, 0xbe, 0x78, 0x9e, 0x75, 0xc4, 0x97,
1719 0x91, 0x39, 0x12, 0x65, 0xb9, 0x3b, 0xc2, 0xd1,
1720 0xaf, 0xf2, 0x1f, 0x4e, 0x4d, 0xd1, 0xf0, 0x9f,
1721 0xb7, 0x12, 0xfd, 0xe8, 0x75, 0x18, 0xc0, 0x9d,
1722 0x8c, 0x70, 0xff, 0x77, 0x05, 0xb6, 0x1a, 0x1f,
1723 0x96, 0x48, 0xf6, 0xfe, 0xd5, 0x5d, 0x98, 0xa5,
1724 0x72, 0x1c, 0x84, 0x76, 0x3e, 0xb8, 0x87, 0x37,
1725 0xdd, 0xd4, 0x3a, 0x45, 0xdd, 0x09, 0xd8, 0xe7,
1726 0x09, 0x2f, 0x3e, 0x33, 0x9e, 0x7b, 0x8c, 0xe4,
1727 0x85, 0x12, 0x4e, 0xf8, 0x06, 0xb7, 0xb1, 0x85,
1728 0x24, 0x96, 0xd8, 0xfe, 0x87, 0x92, 0x81, 0xb1,
1729 0xa3, 0x38, 0xb9, 0x56, 0xe1, 0xf6, 0x36, 0x41,
1730 0xbb, 0xd6, 0x56, 0x69, 0x94, 0x57, 0xb3, 0xa4,
1731 0xca, 0xa4, 0xe1, 0x02, 0x3b, 0x96, 0x71, 0xe0,
1732 0xb2, 0x2f, 0x85, 0x48, 0x1b, 0x4a, 0x41, 0x80,
1733 0x4b, 0x9c, 0xe0, 0xc9, 0x39, 0xb8, 0xb1, 0xca,
1734 0x64, 0x77, 0x46, 0x58, 0xe6, 0x84, 0xd5, 0x2b,
1735 0x65, 0xce, 0xe9, 0x09, 0xa3, 0xaa, 0xfb, 0x83,
1736 0xa9, 0x28, 0x68, 0xfd, 0xcd, 0xfd, 0x76, 0x83,
1737 0xe1, 0x20, 0x22, 0x77, 0x3a, 0xa3, 0xb2, 0x93,
1738 0x14, 0x91, 0xfc, 0xe2, 0x17, 0x63, 0x2b, 0xa6,
1739 0x29, 0x38, 0x7b, 0x9b, 0x8b, 0x15, 0x77, 0xd6,
1740 0xaa, 0x92, 0x51, 0x53, 0x50, 0xff, 0xa0, 0x35,
1741 0xa0, 0x59, 0x7d, 0xf0, 0x11, 0x23, 0x49, 0xdf,
1742 0x5a, 0x21, 0xc2, 0xfe, 0x35, 0xa0, 0x1d, 0xe2,
1743 0xae, 0xa2, 0x8a, 0x61, 0x5b, 0xf7, 0xf1, 0x1c,
1744 0x1c, 0xec, 0xc4, 0xf6, 0xdc, 0xaa, 0xc8, 0xc2,
1745 0xe5, 0xa1, 0x2e, 0x14, 0xe5, 0xc6, 0xc9, 0x73,
1746 0x03, 0x78, 0xeb, 0xed, 0xe0, 0x3e, 0xc5, 0xf4,
1747 0xf1, 0x50, 0xb2, 0x01, 0x91, 0x96, 0xf5, 0xbb,
1748 0xe1, 0x32, 0xcd, 0xa8, 0x66, 0xbf, 0x73, 0x85,
1749 0x94, 0xd6, 0x7e, 0x68, 0xc5, 0xe4, 0xed, 0xd5,
1750 0xe3, 0x67, 0x4c, 0xa5, 0xb3, 0x1f, 0xdf, 0xf8,
1751 0xb3, 0x73, 0x5a, 0xac, 0xeb, 0x46, 0x16, 0x24,
1752 0xab, 0xca, 0xa4, 0xdd, 0x87, 0x0e, 0x24, 0x83,
1753 0x32, 0x04, 0x4c, 0xd8, 0xda, 0x7d, 0xdc, 0xe3,
1754 0x01, 0x93, 0xf3, 0xc1, 0x5b, 0xbd, 0xc3, 0x1d,
1755 0x40, 0x62, 0xde, 0x94, 0x03, 0x85, 0x91, 0x2a,
1756 0xa0, 0x25, 0x10, 0xd3, 0x32, 0x9f, 0x93, 0x00,
1757 0xa7, 0x8a, 0xfa, 0x77, 0x7c, 0xaf, 0x4d, 0xc8,
1758 0x7a, 0xf3, 0x16, 0x2b, 0xba, 0xeb, 0x74, 0x51,
1759 0xb8, 0xdd, 0x32, 0xad, 0x68, 0x7d, 0xdd, 0xca,
1760 0x60, 0x98, 0xc9, 0x9b, 0xb6, 0x5d, 0x4d, 0x3a,
1761 0x66, 0x8a, 0xbe, 0x05, 0xf9, 0x0c, 0xc5, 0xba,
1762 0x52, 0x82, 0x09, 0x1f, 0x5a, 0x66, 0x89, 0x69,
1763 0xa3, 0x5d, 0x93, 0x50, 0x7d, 0x44, 0xc3, 0x2a,
1764 0xb8, 0xab, 0xec, 0xa6, 0x5a, 0xae, 0x4a, 0x6a,
1765 0xcd, 0xfd, 0xb6, 0xff, 0x3d, 0x98, 0x05, 0xd9,
1766 0x5b, 0x29, 0xc4, 0x6f, 0xe0, 0x76, 0xe2, 0x3f,
1767 0xec, 0xd7, 0xa4, 0x91, 0x63, 0xf5, 0x4e, 0x4b,
1768 0xab, 0x20, 0x8c, 0x3a, 0x41, 0xed, 0x8b, 0x4b,
1769 0xb9, 0x01, 0x21, 0xc0, 0x6d, 0xfd, 0x70, 0x5b,
1770 0x20, 0x92, 0x41, 0x89, 0x74, 0xb7, 0xe9, 0x8b,
1771 0xfc, 0x6d, 0x17, 0x3f, 0x7f, 0x89, 0x3d, 0x6b,
1772 0x8f, 0xbc, 0xd2, 0x57, 0xe9, 0xc9, 0x6e, 0xa7,
1773 0x19, 0x26, 0x18, 0xad, 0xef, 0xb5, 0x87, 0xbf,
1774 0xb8, 0xa8, 0xd6, 0x7d, 0xdd, 0x5f, 0x94, 0x54,
1775 0x09, 0x92, 0x2b, 0xf5, 0x04, 0xf7, 0x36, 0x69,
1776 0x8e, 0xf4, 0xdc, 0x1d, 0x6e, 0x55, 0xbb, 0xe9,
1777 0x13, 0x05, 0x83, 0x35, 0x9c, 0xed, 0xcf, 0x8c,
1778 0x26, 0x8c, 0x7b, 0xc7, 0x0b, 0xba, 0xfd, 0xe2,
1779 0x84, 0x5c, 0x2a, 0x79, 0x43, 0x99, 0xb2, 0xc3,
1780 0x82, 0x87, 0xc8, 0xcd, 0x37, 0x6d, 0xa1, 0x2b,
1781 0x39, 0xb2, 0x38, 0x99, 0xd9, 0xfc, 0x02, 0x15,
1782 0x55, 0x21, 0x62, 0x59, 0xeb, 0x00, 0x86, 0x08,
1783 0x20, 0xbe, 0x1a, 0x62, 0x4d, 0x7e, 0xdf, 0x68,
1784 0x73, 0x5b, 0x5f, 0xaf, 0x84, 0x96, 0x2e, 0x1f,
1785 0x6b, 0x03, 0xc9, 0xa6, 0x75, 0x18, 0xe9, 0xd4,
1786 0xbd, 0xc8, 0xec, 0x9a, 0x5a, 0xb3, 0x99, 0xab,
1787 0x5f, 0x7c, 0x08, 0x7f, 0x69, 0x4d, 0x52, 0xa2,
1788 0x30, 0x17, 0x3b, 0x16, 0x15, 0x1b, 0x11, 0x62,
1789 0x3e, 0x80, 0x4b, 0x85, 0x7c, 0x9c, 0xd1, 0x3a,
1790 0x13, 0x01, 0x5e, 0x45, 0xf1, 0xc8, 0x5f, 0xcd,
1791 0x0e, 0x21, 0xf5, 0x82, 0xd4, 0x7b, 0x5c, 0x45,
1792 0x27, 0x6b, 0xef, 0xfe, 0xb8, 0xc0, 0x6f, 0xdc,
1793 0x60, 0x7b, 0xe4, 0xd5, 0x75, 0x71, 0xe6, 0xe8,
1794 0x7d, 0x6b, 0x6d, 0x80, 0xaf, 0x76, 0x41, 0x58,
1795 0xb7, 0xac, 0xb7, 0x13, 0x2f, 0x81, 0xcc, 0xf9,
1796 0x19, 0x97, 0xe8, 0xee, 0x40, 0x91, 0xfc, 0x89,
1797 0x13, 0x1e, 0x67, 0x9a, 0xdb, 0x8f, 0x8f, 0xc7,
1798 0x4a, 0xc9, 0xaf, 0x2f, 0x67, 0x01, 0x3c, 0xb8,
1799 0xa8, 0x3e, 0x78, 0x93, 0x1b, 0xdf, 0xbb, 0x34,
1800 0x0b, 0x1a, 0xfa, 0xc2, 0x2d, 0xc5, 0x1c, 0xec,
1801 0x97, 0x4f, 0x48, 0x41, 0x15, 0x0e, 0x75, 0xed,
1802 0x66, 0x8c, 0x17, 0x7f, 0xb1, 0x48, 0x13, 0xc1,
1803 0xfb, 0x60, 0x06, 0xf9, 0x72, 0x41, 0x3e, 0xcf,
1804 0x6e, 0xb6, 0xc8, 0xeb, 0x4b, 0x5a, 0xd2, 0x0c,
1805 0x28, 0xda, 0x02, 0x7a, 0x46, 0x21, 0x42, 0xb5,
1806 0x34, 0xda, 0xcb, 0x5e, 0xbd, 0x66, 0x5c, 0xca,
1807 0xff, 0x52, 0x43, 0x89, 0xf9, 0x10, 0x9a, 0x9e,
1808 0x9b, 0xe3, 0xb0, 0x51, 0xe9, 0xf3, 0x0a, 0x35,
1809 0x77, 0x54, 0xcc, 0xac, 0xa6, 0xf1, 0x2e, 0x36,
1810 0x89, 0xac, 0xc5, 0xc6, 0x62, 0x5a, 0xc0, 0x6d,
1811 0xc4, 0xe1, 0xf7, 0x64, 0x30, 0xff, 0x11, 0x40,
1812 0x13, 0x89, 0xd8, 0xd7, 0x73, 0x3f, 0x93, 0x08,
1813 0x68, 0xab, 0x66, 0x09, 0x1a, 0xea, 0x78, 0xc9,
1814 0x52, 0xf2, 0xfd, 0x93, 0x1b, 0x94, 0xbe, 0x5c,
1815 0xe5, 0x00, 0x6e, 0x00, 0xb9, 0xea, 0x27, 0xaa,
1816 0xb3, 0xee, 0xe3, 0xc8, 0x6a, 0xb0, 0xc1, 0x8e,
1817 0x9b, 0x54, 0x40, 0x10, 0x96, 0x06, 0xe8, 0xb3,
1818 0xf5, 0x55, 0x77, 0xd7, 0x5c, 0x94, 0xc1, 0x74,
1819 0xf3, 0x07, 0x64, 0xac, 0x1c, 0xde, 0xc7, 0x22,
1820 0xb0, 0xbf, 0x2a, 0x5a, 0xc0, 0x8f, 0x8a, 0x83,
1821 0x50, 0xc2, 0x5e, 0x97, 0xa0, 0xbe, 0x49, 0x7e,
1822 0x47, 0xaf, 0xa7, 0x20, 0x02, 0x35, 0xa4, 0x57,
1823 0xd9, 0x26, 0x63, 0xdb, 0xf1, 0x34, 0x42, 0x89,
1824 0x36, 0xd1, 0x77, 0x6f, 0xb1, 0xea, 0x79, 0x7e,
1825 0x95, 0x10, 0x5a, 0xee, 0xa3, 0xae, 0x6f, 0xba,
1826 0xa9, 0xef, 0x5a, 0x7e, 0x34, 0x03, 0x04, 0x07,
1827 0x92, 0xd6, 0x07, 0x79, 0xaa, 0x14, 0x90, 0x97,
1828 0x05, 0x4d, 0xa6, 0x27, 0x10, 0x5c, 0x25, 0x24,
1829 0xcb, 0xcc, 0xf6, 0x77, 0x9e, 0x43, 0x23, 0xd4,
1830 0x98, 0xef, 0x22, 0xa8, 0xad, 0xf2, 0x26, 0x08,
1831 0x59, 0x69, 0xa4, 0xc3, 0x97, 0xe0, 0x5c, 0x6f,
1832 0xeb, 0x3d, 0xd4, 0x62, 0x6e, 0x80, 0x61, 0x02,
1833 0xf4, 0xfc, 0x94, 0x79, 0xbb, 0x4e, 0x6d, 0xd7,
1834 0x30, 0x5b, 0x10, 0x11, 0x5a, 0x3d, 0xa7, 0x50,
1835 0x1d, 0x9a, 0x13, 0x5f, 0x4f, 0xa8, 0xa7, 0xb6,
1836 0x39, 0xc7, 0xea, 0xe6, 0x19, 0x61, 0x69, 0xc7,
1837 0x9a, 0x3a, 0xeb, 0x9d, 0xdc, 0xf7, 0x06, 0x37,
1838 0xbd, 0xac, 0xe3, 0x18, 0xff, 0xfe, 0x11, 0xdb,
1839 0x67, 0x42, 0xb4, 0xea, 0xa8, 0xbd, 0xb0, 0x76,
1840 0xd2, 0x74, 0x32, 0xc2, 0xa4, 0x9c, 0xe7, 0x60,
1841 0xc5, 0x30, 0x9a, 0x57, 0x66, 0xcd, 0x0f, 0x02,
1842 0x4c, 0xea, 0xe9, 0xd3, 0x2a, 0x5c, 0x09, 0xc2,
1843 0xff, 0x6a, 0xde, 0x5d, 0xb7, 0xe9, 0x75, 0x6b,
1844 0x29, 0x94, 0xd6, 0xf7, 0xc3, 0xdf, 0xfb, 0x70,
1845 0xec, 0xb5, 0x8c, 0xb0, 0x78, 0x7a, 0xee, 0x52,
1846 0x5f, 0x8c, 0xae, 0x85, 0xe5, 0x98, 0xa2, 0xb7,
1847 0x7c, 0x02, 0x2a, 0xcc, 0x9e, 0xde, 0x99, 0x5f,
1848 0x84, 0x20, 0xbb, 0xdc, 0xf2, 0xd2, 0x13, 0x46,
1849 0x3c, 0xd6, 0x4d, 0xe7, 0x50, 0xef, 0x55, 0xc3,
1850 0x96, 0x9f, 0xec, 0x6c, 0xd8, 0xe2, 0xea, 0xed,
1851 0xc7, 0x33, 0xc9, 0xb3, 0x1c, 0x4f, 0x1d, 0x83,
1852 0x1d, 0xe4, 0xdd, 0xb2, 0x24, 0x8f, 0xf9, 0xf5
1853 };
1854
1855
1856 static const uint8_t HMAC_SHA256_ciphertext_64B_digest[] = {
1857 0xc5, 0x6d, 0x4f, 0x29, 0xf4, 0xd2, 0xcc, 0x87,
1858 0x3c, 0x81, 0x02, 0x6d, 0x38, 0x7a, 0x67, 0x3e,
1859 0x95, 0x9c, 0x5c, 0x8f, 0xda, 0x5c, 0x06, 0xe0,
1860 0x65, 0xf1, 0x6c, 0x51, 0x52, 0x49, 0x3e, 0x5f
1861 };
1862
1863 static const uint8_t HMAC_SHA256_ciphertext_128B_digest[] = {
1864 0x76, 0x64, 0x2d, 0x69, 0x71, 0x5d, 0x6a, 0xd8,
1865 0x9f, 0x74, 0x11, 0x2f, 0x58, 0xe0, 0x4a, 0x2f,
1866 0x6c, 0x88, 0x5e, 0x4d, 0x9c, 0x79, 0x83, 0x1c,
1867 0x8a, 0x14, 0xd0, 0x07, 0xfb, 0xbf, 0x6c, 0x8f
1868 };
1869
1870 static const uint8_t HMAC_SHA256_ciphertext_256B_digest[] = {
1871 0x05, 0xa7, 0x44, 0xcd, 0x91, 0x8c, 0x95, 0xcf,
1872 0x7b, 0x8f, 0xd3, 0x90, 0x86, 0x7e, 0x7b, 0xb9,
1873 0x05, 0xd6, 0x6e, 0x7a, 0xc1, 0x7b, 0x26, 0xff,
1874 0xd3, 0x4b, 0xe0, 0x22, 0x8b, 0xa8, 0x47, 0x52
1875 };
1876
1877 static const uint8_t HMAC_SHA256_ciphertext_512B_digest[] = {
1878 0x08, 0xb7, 0x29, 0x54, 0x18, 0x7e, 0x97, 0x49,
1879 0xc6, 0x7c, 0x9f, 0x94, 0xa5, 0x4f, 0xa2, 0x25,
1880 0xd0, 0xe2, 0x30, 0x7b, 0xad, 0x93, 0xc9, 0x12,
1881 0x0f, 0xf0, 0xf0, 0x71, 0xc2, 0xf6, 0x53, 0x8f
1882 };
1883
1884 static const uint8_t HMAC_SHA256_ciphertext_768B_digest[] = {
1885 0xe4, 0x3e, 0x73, 0x93, 0x03, 0xaf, 0x6f, 0x9c,
1886 0xca, 0x57, 0x3b, 0x4a, 0x6e, 0x83, 0x58, 0xf5,
1887 0x66, 0xc2, 0xb4, 0xa7, 0xe0, 0xee, 0x63, 0x6b,
1888 0x48, 0xb7, 0x50, 0x45, 0x69, 0xdf, 0x5c, 0x5b
1889 };
1890
1891 static const uint8_t HMAC_SHA256_ciphertext_1024B_digest[] = {
1892 0x03, 0xb9, 0x96, 0x26, 0xdc, 0x1c, 0xab, 0xe2,
1893 0xf5, 0x70, 0x55, 0x15, 0x67, 0x6e, 0x48, 0x11,
1894 0xe7, 0x67, 0xea, 0xfa, 0x5c, 0x6b, 0x28, 0x22,
1895 0xc9, 0x0e, 0x67, 0x04, 0xb3, 0x71, 0x7f, 0x88
1896 };
1897
1898 static const uint8_t HMAC_SHA256_ciphertext_1280B_digest[] = {
1899 0x01, 0x91, 0xb8, 0x78, 0xd3, 0x21, 0x74, 0xa5,
1900 0x1c, 0x8b, 0xd4, 0xd2, 0xc0, 0x49, 0xd7, 0xd2,
1901 0x16, 0x46, 0x66, 0x85, 0x50, 0x6d, 0x08, 0xcc,
1902 0xc7, 0x0a, 0xa3, 0x71, 0xcc, 0xde, 0xee, 0xdc
1903 };
1904
1905 static const uint8_t HMAC_SHA256_ciphertext_1536B_digest[] = {
1906 0xf2, 0xe5, 0xe9, 0x57, 0x53, 0xd7, 0x69, 0x28,
1907 0x7b, 0x69, 0xb5, 0x49, 0xa3, 0x31, 0x56, 0x5f,
1908 0xa4, 0xe9, 0x87, 0x26, 0x2f, 0xe0, 0x2d, 0xd6,
1909 0x08, 0x44, 0x01, 0x71, 0x0c, 0x93, 0x85, 0x84
1910 };
1911
1912 static const uint8_t HMAC_SHA256_ciphertext_1792B_digest[] = {
1913 0xf6, 0x57, 0x62, 0x01, 0xbf, 0x2d, 0xea, 0x4a,
1914 0xef, 0x43, 0x85, 0x60, 0x18, 0xdf, 0x8b, 0xb4,
1915 0x60, 0xc0, 0xfd, 0x2f, 0x90, 0x15, 0xe6, 0x91,
1916 0x56, 0x61, 0x68, 0x7f, 0x5e, 0x92, 0xa8, 0xdd
1917 };
1918
1919 static const uint8_t HMAC_SHA256_ciphertext_2048B_digest[] = {
1920 0x81, 0x1a, 0x29, 0xbc, 0x6b, 0x9f, 0xbb, 0xb8,
1921 0xef, 0x71, 0x7b, 0x1f, 0x6f, 0xd4, 0x7e, 0x68,
1922 0x3a, 0x9c, 0xb9, 0x98, 0x22, 0x81, 0xfa, 0x95,
1923 0xee, 0xbc, 0x7f, 0x23, 0x29, 0x88, 0x76, 0xb8
1924 };
1925
1926 struct crypto_data_params {
1927 const char *name;
1928 uint16_t length;
1929 const char *plaintext;
1930 struct crypto_expected_output {
1931 const uint8_t *ciphertext;
1932 const uint8_t *digest;
1933 } expected;
1934 };
1935
1936 #define MAX_PACKET_SIZE_INDEX 10
1937
1938 struct crypto_data_params aes_cbc_hmac_sha256_output[MAX_PACKET_SIZE_INDEX] = {
1939 { "64B", 64, &plaintext_quote[sizeof(plaintext_quote) - 1 - 64],
1940 { AES_CBC_ciphertext_64B, HMAC_SHA256_ciphertext_64B_digest } },
1941 { "128B", 128, &plaintext_quote[sizeof(plaintext_quote) - 1 - 128],
1942 { AES_CBC_ciphertext_128B, HMAC_SHA256_ciphertext_128B_digest } },
1943 { "256B", 256, &plaintext_quote[sizeof(plaintext_quote) - 1 - 256],
1944 { AES_CBC_ciphertext_256B, HMAC_SHA256_ciphertext_256B_digest } },
1945 { "512B", 512, &plaintext_quote[sizeof(plaintext_quote) - 1 - 512],
1946 { AES_CBC_ciphertext_512B, HMAC_SHA256_ciphertext_512B_digest } },
1947 { "768B", 768, &plaintext_quote[sizeof(plaintext_quote) - 1 - 768],
1948 { AES_CBC_ciphertext_768B, HMAC_SHA256_ciphertext_768B_digest } },
1949 { "1024B", 1024, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1024],
1950 { AES_CBC_ciphertext_1024B, HMAC_SHA256_ciphertext_1024B_digest } },
1951 { "1280B", 1280, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1280],
1952 { AES_CBC_ciphertext_1280B, HMAC_SHA256_ciphertext_1280B_digest } },
1953 { "1536B", 1536, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1536],
1954 { AES_CBC_ciphertext_1536B, HMAC_SHA256_ciphertext_1536B_digest } },
1955 { "1792B", 1792, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1792],
1956 { AES_CBC_ciphertext_1792B, HMAC_SHA256_ciphertext_1792B_digest } },
1957 { "2048B", 2048, &plaintext_quote[sizeof(plaintext_quote) - 1 - 2048],
1958 { AES_CBC_ciphertext_2048B, HMAC_SHA256_ciphertext_2048B_digest } }
1959 };
1960
1961 static int
1962 test_perf_crypto_qp_vary_burst_size(uint16_t dev_num)
1963 {
1964 uint32_t num_to_submit = 4096;
1965 struct rte_crypto_op *c_ops[num_to_submit];
1966 struct rte_crypto_op *proc_ops[num_to_submit];
1967 uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
1968 uint32_t burst_sent, burst_received;
1969 uint32_t i, burst_size, num_sent, num_received;
1970 struct crypto_testsuite_params *ts_params = &testsuite_params;
1971 struct crypto_unittest_params *ut_params = &unittest_params;
1972 struct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;
1973
1974 if (rte_cryptodev_count() == 0) {
1975 printf("\nNo crypto devices available. Is kernel driver loaded?\n");
1976 return TEST_FAILED;
1977 }
1978
1979 /* Setup Cipher Parameters */
1980 ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1981 ut_params->cipher_xform.next = &ut_params->auth_xform;
1982
1983 ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1984 ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1985 ut_params->cipher_xform.cipher.key.data = aes_cbc_128_key;
1986 ut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;
1987
1988
1989 /* Setup HMAC Parameters */
1990 ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1991 ut_params->auth_xform.next = NULL;
1992
1993 ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1994 ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
1995 ut_params->auth_xform.auth.key.data = hmac_sha256_key;
1996 ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
1997 ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
1998
1999 /* Create Crypto session*/
2000 ut_params->sess = rte_cryptodev_sym_session_create(ts_params->dev_id,
2001 &ut_params->cipher_xform);
2002
2003 TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
2004
2005 /* Generate Crypto op data structure(s) */
2006 for (i = 0; i < num_to_submit ; i++) {
2007 struct rte_mbuf *m = setup_test_string(ts_params->mbuf_mp,
2008 data_params[0].expected.ciphertext,
2009 data_params[0].length, 0);
2010 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
2011
2012 ut_params->digest = (uint8_t *)rte_pktmbuf_append(m,
2013 DIGEST_BYTE_LENGTH_SHA256);
2014 TEST_ASSERT_NOT_NULL(ut_params->digest,
2015 "no room to append digest");
2016
2017 rte_memcpy(ut_params->digest, data_params[0].expected.digest,
2018 DIGEST_BYTE_LENGTH_SHA256);
2019
2020
2021 struct rte_crypto_op *op =
2022 rte_crypto_op_alloc(ts_params->op_mpool,
2023 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2024
2025 rte_crypto_op_attach_sym_session(op, ut_params->sess);
2026
2027 op->sym->auth.digest.data = ut_params->digest;
2028 op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
2029 data_params[0].length);
2030 op->sym->auth.digest.length = DIGEST_BYTE_LENGTH_SHA256;
2031
2032 op->sym->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
2033 op->sym->auth.data.length = data_params[0].length;
2034
2035
2036 op->sym->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(m,
2037 CIPHER_IV_LENGTH_AES_CBC);
2038 op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
2039 op->sym->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
2040
2041 rte_memcpy(op->sym->cipher.iv.data, aes_cbc_128_iv,
2042 CIPHER_IV_LENGTH_AES_CBC);
2043
2044 op->sym->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
2045 op->sym->cipher.data.length = data_params[0].length;
2046
2047 op->sym->m_src = m;
2048
2049 c_ops[i] = op;
2050 }
2051
2052 printf("\nTest to measure the IA cycle cost using AES128_CBC_SHA256_HMAC "
2053 "algorithm with a constant request size of %u.",
2054 data_params[0].length);
2055 printf("\nThis test will keep retries at 0 and only measure IA cycle "
2056 "cost for each request.");
2057 printf("\nDev No\tQP No\tNum Sent\tNum Received\tTx/Rx burst");
2058 printf("\tRetries (Device Busy)\tAverage IA cycle cost "
2059 "(assuming 0 retries)");
2060 for (i = 2; i <= 128 ; i *= 2) {
2061 num_sent = 0;
2062 num_received = 0;
2063 retries = 0;
2064 failed_polls = 0;
2065 burst_size = i;
2066 total_cycles = 0;
2067 while (num_sent < num_to_submit) {
2068 start_cycles = rte_rdtsc_precise();
2069 burst_sent = rte_cryptodev_enqueue_burst(dev_num,
2070 0, &c_ops[num_sent],
2071 ((num_to_submit-num_sent) < burst_size) ?
2072 num_to_submit-num_sent : burst_size);
2073 if (burst_sent == 0)
2074 retries++;
2075 else
2076 num_sent += burst_sent;
2077 end_cycles = rte_rdtsc_precise();
2078 total_cycles += (end_cycles - start_cycles);
2079 /*
2080 * Wait until requests have been sent.
2081 */
2082 rte_delay_ms(1);
2083
2084 start_cycles = rte_rdtsc_precise();
2085 burst_received = rte_cryptodev_dequeue_burst(
2086 dev_num, 0, proc_ops, burst_size);
2087 if (burst_received == 0)
2088 failed_polls++;
2089 else
2090 num_received += burst_received;
2091 end_cycles = rte_rdtsc_precise();
2092 total_cycles += end_cycles - start_cycles;
2093 }
2094
2095 while (num_received != num_to_submit) {
2096 if (gbl_cryptodev_perftest_devtype ==
2097 RTE_CRYPTODEV_AESNI_MB_PMD)
2098 rte_cryptodev_enqueue_burst(dev_num, 0,
2099 NULL, 0);
2100
2101 burst_received = rte_cryptodev_dequeue_burst(
2102 dev_num, 0, proc_ops, burst_size);
2103 if (burst_received == 0)
2104 failed_polls++;
2105 else
2106 num_received += burst_received;
2107 }
2108
2109 printf("\n%u\t%u\t%u\t\t%u\t\t%u", dev_num, 0,
2110 num_sent, num_received, burst_size);
2111 printf("\t\t%"PRIu64, retries);
2112 printf("\t\t\t%"PRIu64, total_cycles/num_received);
2113 }
2114 printf("\n");
2115
2116 for (i = 0; i < num_to_submit ; i++) {
2117 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2118 rte_crypto_op_free(c_ops[i]);
2119 }
2120 return TEST_SUCCESS;
2121 }
2122
2123 static int
2124 test_perf_snow3G_optimise_cyclecount(struct perf_test_params *pparams)
2125 {
2126 uint32_t num_to_submit = pparams->total_operations;
2127 struct rte_crypto_op *c_ops[num_to_submit];
2128 struct rte_crypto_op *proc_ops[num_to_submit];
2129 uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
2130 uint32_t burst_sent = 0, burst_received = 0;
2131 uint32_t i, burst_size, num_sent, num_ops_received;
2132 struct crypto_testsuite_params *ts_params = &testsuite_params;
2133 static struct rte_cryptodev_sym_session *sess;
2134
2135 if (rte_cryptodev_count() == 0) {
2136 printf("\nNo crypto devices found. Is PMD build configured?\n");
2137 printf("\nAnd is kernel driver loaded for HW PMDs?\n");
2138 return TEST_FAILED;
2139 }
2140
2141 /* Create Crypto session*/
2142 sess = test_perf_create_snow3g_session(ts_params->dev_id,
2143 pparams->chain, pparams->cipher_algo,
2144 pparams->cipher_key_length, pparams->auth_algo);
2145 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2146
2147 /* Generate Crypto op data structure(s)*/
2148 for (i = 0; i < num_to_submit ; i++) {
2149 struct rte_mbuf *m = test_perf_create_pktmbuf(
2150 ts_params->mbuf_mp,
2151 pparams->buf_size);
2152 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
2153
2154 struct rte_crypto_op *op =
2155 rte_crypto_op_alloc(ts_params->op_mpool,
2156 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2157 TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
2158
2159 op = test_perf_set_crypto_op_snow3g(op, m, sess, pparams->buf_size,
2160 get_auth_digest_length(pparams->auth_algo));
2161 TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
2162
2163 c_ops[i] = op;
2164 }
2165
2166 printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, auth_algo:%s, "
2167 "Packet Size %u bytes",
2168 pmd_name(gbl_cryptodev_perftest_devtype),
2169 ts_params->dev_id, 0,
2170 chain_mode_name(pparams->chain),
2171 cipher_algo_name(pparams->cipher_algo),
2172 auth_algo_name(pparams->auth_algo),
2173 pparams->buf_size);
2174 printf("\nOps Tx\tOps Rx\tOps/burst ");
2175 printf("Retries EmptyPolls\tIACycles/CyOp\tIACycles/Burst\tIACycles/Byte");
2176
2177 for (i = 2; i <= 128 ; i *= 2) {
2178 num_sent = 0;
2179 num_ops_received = 0;
2180 retries = 0;
2181 failed_polls = 0;
2182 burst_size = i;
2183 total_cycles = 0;
2184 while (num_sent < num_to_submit) {
2185 start_cycles = rte_rdtsc_precise();
2186 burst_sent = rte_cryptodev_enqueue_burst(ts_params->dev_id,
2187 0, &c_ops[num_sent],
2188 ((num_to_submit-num_sent) < burst_size) ?
2189 num_to_submit-num_sent : burst_size);
2190 end_cycles = rte_rdtsc_precise();
2191 if (burst_sent == 0)
2192 retries++;
2193 num_sent += burst_sent;
2194 total_cycles += (end_cycles - start_cycles);
2195
2196 /* Wait until requests have been sent. */
2197
2198 rte_delay_ms(1);
2199
2200 start_cycles = rte_rdtsc_precise();
2201 burst_received = rte_cryptodev_dequeue_burst(
2202 ts_params->dev_id, 0, proc_ops, burst_size);
2203 end_cycles = rte_rdtsc_precise();
2204 if (burst_received < burst_sent)
2205 failed_polls++;
2206 num_ops_received += burst_received;
2207
2208 total_cycles += end_cycles - start_cycles;
2209 }
2210
2211 while (num_ops_received != num_to_submit) {
2212 if (gbl_cryptodev_perftest_devtype ==
2213 RTE_CRYPTODEV_AESNI_MB_PMD)
2214 rte_cryptodev_enqueue_burst(ts_params->dev_id, 0,
2215 NULL, 0);
2216 start_cycles = rte_rdtsc_precise();
2217 burst_received = rte_cryptodev_dequeue_burst(
2218 ts_params->dev_id, 0, proc_ops, burst_size);
2219 end_cycles = rte_rdtsc_precise();
2220 total_cycles += end_cycles - start_cycles;
2221 if (burst_received == 0)
2222 failed_polls++;
2223 num_ops_received += burst_received;
2224 }
2225
2226 printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
2227 printf("\t\t%"PRIu64, retries);
2228 printf("\t%"PRIu64, failed_polls);
2229 printf("\t\t%"PRIu64, total_cycles/num_ops_received);
2230 printf("\t\t%"PRIu64, (total_cycles/num_ops_received)*burst_size);
2231 printf("\t\t%"PRIu64, total_cycles/(num_ops_received*pparams->buf_size));
2232 }
2233 printf("\n");
2234
2235 for (i = 0; i < num_to_submit ; i++) {
2236 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2237 rte_crypto_op_free(c_ops[i]);
2238 }
2239 rte_cryptodev_sym_session_free(ts_params->dev_id, sess);
2240
2241 return TEST_SUCCESS;
2242 }
2243
2244 static int
2245 test_perf_snow3G_vary_burst_size(void)
2246 {
2247 unsigned total_operations = 4096;
2248 /*no need to vary pkt size for QAT, should have no effect on IA cycles */
2249 uint16_t buf_lengths[] = {40};
2250 uint8_t i, j;
2251
2252 struct perf_test_params params_set[] = {
2253 {
2254 .chain = CIPHER_ONLY,
2255 .cipher_algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2256 .cipher_key_length = 16,
2257 .auth_algo = RTE_CRYPTO_AUTH_NULL,
2258 },
2259 {
2260 .chain = HASH_ONLY,
2261 .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
2262 .auth_algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2263 .cipher_key_length = 16
2264 },
2265 };
2266
2267 printf("\n\nStart %s.", __func__);
2268 printf("\nThis Test measures the average IA cycle cost using a "
2269 "constant request(packet) size. ");
2270 printf("Cycle cost is only valid when indicators show device is not busy,"
2271 " i.e. Retries and EmptyPolls = 0");
2272
2273 for (i = 0; i < RTE_DIM(params_set); i++) {
2274 printf("\n");
2275 params_set[i].total_operations = total_operations;
2276
2277 for (j = 0;
2278 j < RTE_DIM(buf_lengths);
2279 j++) {
2280
2281 params_set[i].buf_size = buf_lengths[j];
2282
2283 test_perf_snow3G_optimise_cyclecount(&params_set[i]);
2284 }
2285
2286 }
2287
2288 return 0;
2289 }
2290
2291 static int
2292 test_perf_openssl_optimise_cyclecount(struct perf_test_params *pparams)
2293 {
2294 uint32_t num_to_submit = pparams->total_operations;
2295 struct rte_crypto_op *c_ops[num_to_submit];
2296 struct rte_crypto_op *proc_ops[num_to_submit];
2297 uint64_t failed_polls, retries, start_cycles,
2298 end_cycles, total_cycles = 0;
2299 uint32_t burst_sent = 0, burst_received = 0;
2300 uint32_t i, burst_size, num_sent, num_ops_received;
2301
2302 struct crypto_testsuite_params *ts_params = &testsuite_params;
2303
2304 static struct rte_cryptodev_sym_session *sess;
2305
2306 static struct rte_crypto_op *(*test_perf_set_crypto_op)
2307 (struct rte_crypto_op *, struct rte_mbuf *,
2308 struct rte_cryptodev_sym_session *,
2309 unsigned int, unsigned int,
2310 enum chain_mode);
2311
2312 unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
2313
2314 if (rte_cryptodev_count() == 0) {
2315 printf("\nNo crypto devices found. Is PMD build configured?\n");
2316 return TEST_FAILED;
2317 }
2318
2319 /* Create Crypto session*/
2320 sess = test_perf_create_openssl_session(ts_params->dev_id,
2321 pparams->chain, pparams->cipher_algo,
2322 pparams->cipher_key_length, pparams->auth_algo);
2323 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2324
2325 /* Generate Crypto op data structure(s)*/
2326 for (i = 0; i < num_to_submit ; i++) {
2327 struct rte_mbuf *m = test_perf_create_pktmbuf(
2328 ts_params->mbuf_mp,
2329 pparams->buf_size);
2330 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
2331
2332 struct rte_crypto_op *op =
2333 rte_crypto_op_alloc(ts_params->op_mpool,
2334 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2335 TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
2336
2337 switch (pparams->cipher_algo) {
2338 case RTE_CRYPTO_CIPHER_3DES_CBC:
2339 case RTE_CRYPTO_CIPHER_3DES_CTR:
2340 test_perf_set_crypto_op = test_perf_set_crypto_op_3des;
2341 break;
2342 case RTE_CRYPTO_CIPHER_AES_CBC:
2343 case RTE_CRYPTO_CIPHER_AES_CTR:
2344 test_perf_set_crypto_op = test_perf_set_crypto_op_aes;
2345 break;
2346 case RTE_CRYPTO_CIPHER_AES_GCM:
2347 test_perf_set_crypto_op =
2348 test_perf_set_crypto_op_aes_gcm;
2349 break;
2350 default:
2351 return TEST_FAILED;
2352 }
2353
2354 op = test_perf_set_crypto_op(op, m, sess, pparams->buf_size,
2355 digest_length, pparams->chain);
2356 TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
2357
2358 c_ops[i] = op;
2359 }
2360
2361 printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, cipher key length:%u, "
2362 "auth_algo:%s, Packet Size %u bytes",
2363 pmd_name(gbl_cryptodev_perftest_devtype),
2364 ts_params->dev_id, 0,
2365 chain_mode_name(pparams->chain),
2366 cipher_algo_name(pparams->cipher_algo),
2367 pparams->cipher_key_length,
2368 auth_algo_name(pparams->auth_algo),
2369 pparams->buf_size);
2370 printf("\nOps Tx\tOps Rx\tOps/burst ");
2371 printf("Retries EmptyPolls\tIACycles/CyOp\tIACycles/Burst\t"
2372 "IACycles/Byte");
2373
2374 for (i = 2; i <= 128 ; i *= 2) {
2375 num_sent = 0;
2376 num_ops_received = 0;
2377 retries = 0;
2378 failed_polls = 0;
2379 burst_size = i;
2380 total_cycles = 0;
2381 while (num_sent < num_to_submit) {
2382 start_cycles = rte_rdtsc_precise();
2383 burst_sent = rte_cryptodev_enqueue_burst(
2384 ts_params->dev_id,
2385 0, &c_ops[num_sent],
2386 ((num_to_submit - num_sent) <
2387 burst_size) ?
2388 num_to_submit - num_sent : burst_size);
2389 end_cycles = rte_rdtsc_precise();
2390 if (burst_sent == 0)
2391 retries++;
2392 num_sent += burst_sent;
2393 total_cycles += (end_cycles - start_cycles);
2394
2395 /* Wait until requests have been sent. */
2396 rte_delay_ms(1);
2397
2398 start_cycles = rte_rdtsc_precise();
2399 burst_received = rte_cryptodev_dequeue_burst(
2400 ts_params->dev_id, 0, proc_ops,
2401 burst_size);
2402 end_cycles = rte_rdtsc_precise();
2403 if (burst_received < burst_sent)
2404 failed_polls++;
2405 num_ops_received += burst_received;
2406
2407 total_cycles += end_cycles - start_cycles;
2408 }
2409
2410 while (num_ops_received != num_to_submit) {
2411 /* Sending 0 length burst to flush sw crypto device */
2412 rte_cryptodev_enqueue_burst(ts_params->dev_id, 0,
2413 NULL, 0);
2414
2415 start_cycles = rte_rdtsc_precise();
2416 burst_received = rte_cryptodev_dequeue_burst(
2417 ts_params->dev_id, 0, proc_ops,
2418 burst_size);
2419 end_cycles = rte_rdtsc_precise();
2420
2421 total_cycles += end_cycles - start_cycles;
2422 if (burst_received == 0)
2423 failed_polls++;
2424 num_ops_received += burst_received;
2425 }
2426
2427 printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
2428 printf("\t\t%"PRIu64, retries);
2429 printf("\t%"PRIu64, failed_polls);
2430 printf("\t\t%"PRIu64, total_cycles/num_ops_received);
2431 printf("\t\t%"PRIu64, (total_cycles/num_ops_received) *
2432 burst_size);
2433 printf("\t\t%"PRIu64,
2434 total_cycles /
2435 (num_ops_received * pparams->buf_size));
2436 }
2437 printf("\n");
2438
2439 for (i = 0; i < num_to_submit ; i++) {
2440 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2441 rte_crypto_op_free(c_ops[i]);
2442 }
2443 rte_cryptodev_sym_session_free(ts_params->dev_id, sess);
2444
2445 return TEST_SUCCESS;
2446 }
2447
2448 static int
2449 test_perf_armv8_optimise_cyclecount(struct perf_test_params *pparams)
2450 {
2451 uint32_t num_to_submit = pparams->total_operations;
2452 struct rte_crypto_op *c_ops[num_to_submit];
2453 struct rte_crypto_op *proc_ops[num_to_submit];
2454 uint64_t failed_polls, retries, start_cycles, end_cycles,
2455 total_cycles = 0;
2456 uint32_t burst_sent = 0, burst_received = 0;
2457 uint32_t i, burst_size, num_sent, num_ops_received;
2458 uint32_t nb_ops;
2459
2460 struct crypto_testsuite_params *ts_params = &testsuite_params;
2461
2462 static struct rte_cryptodev_sym_session *sess;
2463
2464 unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
2465
2466 if (rte_cryptodev_count() == 0) {
2467 printf("\nNo crypto devices found. Is PMD build configured?\n");
2468 return TEST_FAILED;
2469 }
2470
2471 /* Create Crypto session*/
2472 sess = test_perf_create_armv8_session(ts_params->dev_id,
2473 pparams->chain, pparams->cipher_algo,
2474 pparams->cipher_key_length, pparams->auth_algo);
2475 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2476
2477 /* Generate Crypto op data structure(s)*/
2478 for (i = 0; i < num_to_submit ; i++) {
2479 struct rte_mbuf *m = test_perf_create_pktmbuf(
2480 ts_params->mbuf_mp,
2481 pparams->buf_size);
2482 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
2483
2484 struct rte_crypto_op *op =
2485 rte_crypto_op_alloc(ts_params->op_mpool,
2486 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2487 TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
2488
2489 op = test_perf_set_crypto_op_aes(op, m, sess, pparams->buf_size,
2490 digest_length, pparams->chain);
2491 TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
2492
2493 c_ops[i] = op;
2494 }
2495
2496 printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, cipher key length:%u, "
2497 "auth_algo:%s, Packet Size %u bytes",
2498 pmd_name(gbl_cryptodev_perftest_devtype),
2499 ts_params->dev_id, 0,
2500 chain_mode_name(pparams->chain),
2501 cipher_algo_name(pparams->cipher_algo),
2502 pparams->cipher_key_length,
2503 auth_algo_name(pparams->auth_algo),
2504 pparams->buf_size);
2505 printf("\nOps Tx\tOps Rx\tOps/burst ");
2506 printf("Retries "
2507 "EmptyPolls\tIACycles/CyOp\tIACycles/Burst\tIACycles/Byte");
2508
2509 for (i = 2; i <= 128 ; i *= 2) {
2510 num_sent = 0;
2511 num_ops_received = 0;
2512 retries = 0;
2513 failed_polls = 0;
2514 burst_size = i;
2515 total_cycles = 0;
2516 while (num_sent < num_to_submit) {
2517 if ((num_to_submit - num_sent) < burst_size)
2518 nb_ops = num_to_submit - num_sent;
2519 else
2520 nb_ops = burst_size;
2521
2522 start_cycles = rte_rdtsc();
2523 burst_sent = rte_cryptodev_enqueue_burst(
2524 ts_params->dev_id,
2525 0, &c_ops[num_sent],
2526 nb_ops);
2527 end_cycles = rte_rdtsc();
2528
2529 if (burst_sent == 0)
2530 retries++;
2531 num_sent += burst_sent;
2532 total_cycles += (end_cycles - start_cycles);
2533
2534 start_cycles = rte_rdtsc();
2535 burst_received = rte_cryptodev_dequeue_burst(
2536 ts_params->dev_id, 0, proc_ops,
2537 burst_size);
2538 end_cycles = rte_rdtsc();
2539 if (burst_received < burst_sent)
2540 failed_polls++;
2541 num_ops_received += burst_received;
2542
2543 total_cycles += end_cycles - start_cycles;
2544 }
2545
2546 while (num_ops_received != num_to_submit) {
2547 /* Sending 0 length burst to flush sw crypto device */
2548 rte_cryptodev_enqueue_burst(
2549 ts_params->dev_id, 0, NULL, 0);
2550
2551 start_cycles = rte_rdtsc();
2552 burst_received = rte_cryptodev_dequeue_burst(
2553 ts_params->dev_id, 0, proc_ops, burst_size);
2554 end_cycles = rte_rdtsc();
2555
2556 total_cycles += end_cycles - start_cycles;
2557 if (burst_received == 0)
2558 failed_polls++;
2559 num_ops_received += burst_received;
2560 }
2561
2562 printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
2563 printf("\t\t%"PRIu64, retries);
2564 printf("\t%"PRIu64, failed_polls);
2565 printf("\t\t%"PRIu64, total_cycles/num_ops_received);
2566 printf("\t\t%"PRIu64,
2567 (total_cycles/num_ops_received)*burst_size);
2568 printf("\t\t%"PRIu64,
2569 total_cycles/(num_ops_received*pparams->buf_size));
2570 }
2571 printf("\n");
2572
2573 for (i = 0; i < num_to_submit ; i++) {
2574 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2575 rte_crypto_op_free(c_ops[i]);
2576 }
2577
2578 return TEST_SUCCESS;
2579 }
2580
2581 static uint32_t get_auth_key_max_length(enum rte_crypto_auth_algorithm algo)
2582 {
2583 switch (algo) {
2584 case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
2585 return 16;
2586 case RTE_CRYPTO_AUTH_SHA1_HMAC:
2587 return 64;
2588 case RTE_CRYPTO_AUTH_SHA224_HMAC:
2589 return 64;
2590 case RTE_CRYPTO_AUTH_SHA256_HMAC:
2591 return 64;
2592 case RTE_CRYPTO_AUTH_SHA384_HMAC:
2593 return 128;
2594 case RTE_CRYPTO_AUTH_SHA512_HMAC:
2595 return 128;
2596 case RTE_CRYPTO_AUTH_AES_GCM:
2597 return 0;
2598 default:
2599 return 0;
2600 }
2601 }
2602
2603 static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo)
2604 {
2605 switch (algo) {
2606 case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
2607 return 4;
2608 case RTE_CRYPTO_AUTH_SHA1_HMAC:
2609 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA1;
2610 case RTE_CRYPTO_AUTH_SHA224_HMAC:
2611 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA224;
2612 case RTE_CRYPTO_AUTH_SHA256_HMAC:
2613 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA256;
2614 case RTE_CRYPTO_AUTH_SHA384_HMAC:
2615 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA384;
2616 case RTE_CRYPTO_AUTH_SHA512_HMAC:
2617 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA512;
2618 case RTE_CRYPTO_AUTH_AES_GCM:
2619 return DIGEST_BYTE_LENGTH_AES_GCM;
2620 default:
2621 return 0;
2622 }
2623 }
2624
2625 static uint8_t aes_key[] = {
2626 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2627 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2630 };
2631
2632 static uint8_t aes_iv[] = {
2633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2634 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2635 };
2636
2637 static uint8_t triple_des_key[] = {
2638 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2641 };
2642
2643 static uint8_t triple_des_iv[] = {
2644 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2645 };
2646
2647 static uint8_t hmac_sha_key[] = {
2648 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2651 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2652 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2653 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2654 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2655 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2656 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2658 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2660 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2661 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2662 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2664 };
2665
2666 static uint8_t snow3g_cipher_key[] = {
2667 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
2668 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
2669 };
2670
2671 static uint8_t snow3g_iv[] = {
2672 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
2673 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
2674 };
2675
2676 static uint8_t snow3g_hash_key[] = {
2677 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
2678 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
2679 };
2680
2681 static struct rte_cryptodev_sym_session *
2682 test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,
2683 enum rte_crypto_cipher_algorithm cipher_algo,
2684 unsigned cipher_key_len,
2685 enum rte_crypto_auth_algorithm auth_algo)
2686 {
2687 struct rte_crypto_sym_xform cipher_xform = { 0 };
2688 struct rte_crypto_sym_xform auth_xform = { 0 };
2689
2690
2691 /* Setup Cipher Parameters */
2692 cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2693 cipher_xform.cipher.algo = cipher_algo;
2694 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2695
2696 cipher_xform.cipher.key.data = aes_key;
2697 cipher_xform.cipher.key.length = cipher_key_len;
2698 if (chain != CIPHER_ONLY) {
2699 /* Setup HMAC Parameters */
2700 auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2701 auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2702 auth_xform.auth.algo = auth_algo;
2703 auth_xform.auth.key.data = hmac_sha_key;
2704 auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
2705 auth_xform.auth.digest_length =
2706 get_auth_digest_length(auth_algo);
2707 }
2708 switch (chain) {
2709 case CIPHER_HASH:
2710 cipher_xform.next = &auth_xform;
2711 auth_xform.next = NULL;
2712 /* Create Crypto session*/
2713 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2714 case HASH_CIPHER:
2715 auth_xform.next = &cipher_xform;
2716 cipher_xform.next = NULL;
2717 /* Create Crypto session*/
2718 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2719 case CIPHER_ONLY:
2720 cipher_xform.next = NULL;
2721 /* Create Crypto session*/
2722 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2723 default:
2724 return NULL;
2725 }
2726 }
2727
2728 #define SNOW3G_CIPHER_IV_LENGTH 16
2729
2730 static struct rte_cryptodev_sym_session *
2731 test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,
2732 enum rte_crypto_cipher_algorithm cipher_algo, unsigned cipher_key_len,
2733 enum rte_crypto_auth_algorithm auth_algo)
2734 {
2735 struct rte_crypto_sym_xform cipher_xform = {0};
2736 struct rte_crypto_sym_xform auth_xform = {0};
2737
2738
2739 /* Setup Cipher Parameters */
2740 cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2741 cipher_xform.cipher.algo = cipher_algo;
2742 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2743
2744 cipher_xform.cipher.key.data = snow3g_cipher_key;
2745 cipher_xform.cipher.key.length = cipher_key_len;
2746
2747 /* Setup HMAC Parameters */
2748 auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2749 auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2750 auth_xform.auth.algo = auth_algo;
2751
2752 auth_xform.auth.add_auth_data_length = SNOW3G_CIPHER_IV_LENGTH;
2753 auth_xform.auth.key.data = snow3g_hash_key;
2754 auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
2755 auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
2756
2757 switch (chain) {
2758 case CIPHER_HASH:
2759 cipher_xform.next = &auth_xform;
2760 auth_xform.next = NULL;
2761 /* Create Crypto session*/
2762 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2763 case HASH_CIPHER:
2764 auth_xform.next = &cipher_xform;
2765 cipher_xform.next = NULL;
2766 /* Create Crypto session*/
2767 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2768 case CIPHER_ONLY:
2769 cipher_xform.next = NULL;
2770 /* Create Crypto session*/
2771 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2772 case HASH_ONLY:
2773 auth_xform.next = NULL;
2774 /* Create Crypto session */
2775 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2776 default:
2777 return NULL;
2778 }
2779 }
2780
2781 static struct rte_cryptodev_sym_session *
2782 test_perf_create_openssl_session(uint8_t dev_id, enum chain_mode chain,
2783 enum rte_crypto_cipher_algorithm cipher_algo,
2784 unsigned int cipher_key_len,
2785 enum rte_crypto_auth_algorithm auth_algo)
2786 {
2787 struct rte_crypto_sym_xform cipher_xform = { 0 };
2788 struct rte_crypto_sym_xform auth_xform = { 0 };
2789
2790 /* Setup Cipher Parameters */
2791 cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2792 cipher_xform.cipher.algo = cipher_algo;
2793 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2794
2795 switch (cipher_algo) {
2796 case RTE_CRYPTO_CIPHER_3DES_CBC:
2797 case RTE_CRYPTO_CIPHER_3DES_CTR:
2798 cipher_xform.cipher.key.data = triple_des_key;
2799 break;
2800 case RTE_CRYPTO_CIPHER_AES_CBC:
2801 case RTE_CRYPTO_CIPHER_AES_CTR:
2802 case RTE_CRYPTO_CIPHER_AES_GCM:
2803 cipher_xform.cipher.key.data = aes_key;
2804 break;
2805 default:
2806 return NULL;
2807 }
2808
2809 cipher_xform.cipher.key.length = cipher_key_len;
2810
2811 /* Setup Auth Parameters */
2812 auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2813 auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2814 auth_xform.auth.algo = auth_algo;
2815
2816 switch (auth_algo) {
2817 case RTE_CRYPTO_AUTH_SHA1_HMAC:
2818 auth_xform.auth.key.data = hmac_sha_key;
2819 break;
2820 case RTE_CRYPTO_AUTH_AES_GCM:
2821 auth_xform.auth.key.data = NULL;
2822 break;
2823 default:
2824 return NULL;
2825 }
2826
2827 auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
2828 auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
2829
2830 switch (chain) {
2831 case CIPHER_HASH:
2832 cipher_xform.next = &auth_xform;
2833 auth_xform.next = NULL;
2834 /* Create Crypto session*/
2835 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2836 case HASH_CIPHER:
2837 auth_xform.next = &cipher_xform;
2838 cipher_xform.next = NULL;
2839 /* Create Crypto session*/
2840 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2841 default:
2842 return NULL;
2843 }
2844 }
2845
2846 static struct rte_cryptodev_sym_session *
2847 test_perf_create_armv8_session(uint8_t dev_id, enum chain_mode chain,
2848 enum rte_crypto_cipher_algorithm cipher_algo,
2849 unsigned int cipher_key_len,
2850 enum rte_crypto_auth_algorithm auth_algo)
2851 {
2852 struct rte_crypto_sym_xform cipher_xform = { 0 };
2853 struct rte_crypto_sym_xform auth_xform = { 0 };
2854
2855 /* Setup Cipher Parameters */
2856 cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2857 cipher_xform.cipher.algo = cipher_algo;
2858
2859 switch (cipher_algo) {
2860 case RTE_CRYPTO_CIPHER_AES_CBC:
2861 cipher_xform.cipher.key.data = aes_cbc_128_key;
2862 break;
2863 default:
2864 return NULL;
2865 }
2866
2867 cipher_xform.cipher.key.length = cipher_key_len;
2868
2869 /* Setup Auth Parameters */
2870 auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2871 auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2872 auth_xform.auth.algo = auth_algo;
2873
2874 auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
2875
2876 switch (chain) {
2877 case CIPHER_HASH:
2878 cipher_xform.next = &auth_xform;
2879 auth_xform.next = NULL;
2880 /* Encrypt and hash the result */
2881 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2882 /* Create Crypto session*/
2883 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2884 case HASH_CIPHER:
2885 auth_xform.next = &cipher_xform;
2886 cipher_xform.next = NULL;
2887 /* Hash encrypted message and decrypt */
2888 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
2889 /* Create Crypto session*/
2890 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2891 default:
2892 return NULL;
2893 }
2894 }
2895
2896 #define AES_BLOCK_SIZE 16
2897 #define AES_CIPHER_IV_LENGTH 16
2898
2899 #define TRIPLE_DES_BLOCK_SIZE 8
2900 #define TRIPLE_DES_CIPHER_IV_LENGTH 8
2901
2902 static struct rte_mbuf *
2903 test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz)
2904 {
2905 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
2906
2907 if (rte_pktmbuf_append(m, buf_sz) == NULL) {
2908 rte_pktmbuf_free(m);
2909 return NULL;
2910 }
2911
2912 memset(rte_pktmbuf_mtod(m, uint8_t *), 0, buf_sz);
2913
2914 return m;
2915 }
2916
2917 static inline struct rte_crypto_op *
2918 test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
2919 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
2920 unsigned int digest_len, enum chain_mode chain)
2921 {
2922 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
2923 rte_crypto_op_free(op);
2924 return NULL;
2925 }
2926
2927 /* Authentication Parameters */
2928 if (chain == CIPHER_ONLY) {
2929 op->sym->auth.digest.data = NULL;
2930 op->sym->auth.digest.phys_addr = 0;
2931 op->sym->auth.digest.length = 0;
2932 op->sym->auth.aad.data = NULL;
2933 op->sym->auth.aad.length = 0;
2934 op->sym->auth.data.offset = 0;
2935 op->sym->auth.data.length = 0;
2936 } else {
2937 op->sym->auth.digest.data = rte_pktmbuf_mtod_offset(m,
2938 uint8_t *, AES_CIPHER_IV_LENGTH + data_len);
2939 op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
2940 AES_CIPHER_IV_LENGTH + data_len);
2941 op->sym->auth.digest.length = digest_len;
2942 op->sym->auth.aad.data = aes_iv;
2943 op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
2944 op->sym->auth.data.offset = AES_CIPHER_IV_LENGTH;
2945 op->sym->auth.data.length = data_len;
2946 }
2947
2948
2949 /* Cipher Parameters */
2950 op->sym->cipher.iv.data = rte_pktmbuf_mtod(m, uint8_t *);
2951 op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
2952 op->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;
2953
2954 rte_memcpy(op->sym->cipher.iv.data, aes_iv, AES_CIPHER_IV_LENGTH);
2955
2956 op->sym->cipher.data.offset = AES_CIPHER_IV_LENGTH;
2957 op->sym->cipher.data.length = data_len;
2958
2959 op->sym->m_src = m;
2960
2961 return op;
2962 }
2963
2964 static inline struct rte_crypto_op *
2965 test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
2966 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
2967 unsigned int digest_len, enum chain_mode chain __rte_unused)
2968 {
2969 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
2970 rte_crypto_op_free(op);
2971 return NULL;
2972 }
2973
2974 /* Authentication Parameters */
2975 op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
2976 (m->data_off + data_len);
2977 op->sym->auth.digest.phys_addr =
2978 rte_pktmbuf_mtophys_offset(m, data_len);
2979 op->sym->auth.digest.length = digest_len;
2980 op->sym->auth.aad.data = aes_iv;
2981 op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
2982
2983 /* Cipher Parameters */
2984 op->sym->cipher.iv.data = aes_iv;
2985 op->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;
2986
2987 /* Data lengths/offsets Parameters */
2988 op->sym->auth.data.offset = AES_BLOCK_SIZE;
2989 op->sym->auth.data.length = data_len - AES_BLOCK_SIZE;
2990
2991 op->sym->cipher.data.offset = AES_BLOCK_SIZE;
2992 op->sym->cipher.data.length = data_len - AES_BLOCK_SIZE;
2993
2994 op->sym->m_src = m;
2995
2996 return op;
2997 }
2998
2999 static inline struct rte_crypto_op *
3000 test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
3001 struct rte_cryptodev_sym_session *sess, unsigned data_len,
3002 unsigned digest_len)
3003 {
3004 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
3005 rte_crypto_op_free(op);
3006 return NULL;
3007 }
3008
3009 /* Authentication Parameters */
3010 op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
3011 (m->data_off + data_len);
3012 op->sym->auth.digest.phys_addr =
3013 rte_pktmbuf_mtophys_offset(m, data_len);
3014 op->sym->auth.digest.length = digest_len;
3015 op->sym->auth.aad.data = snow3g_iv;
3016 op->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;
3017
3018 /* Cipher Parameters */
3019 op->sym->cipher.iv.data = snow3g_iv;
3020 op->sym->cipher.iv.length = SNOW3G_CIPHER_IV_LENGTH;
3021
3022 /* Data lengths/offsets Parameters */
3023 op->sym->auth.data.offset = 0;
3024 op->sym->auth.data.length = data_len << 3;
3025
3026 op->sym->cipher.data.offset = 0;
3027 op->sym->cipher.data.length = data_len << 3;
3028
3029 op->sym->m_src = m;
3030
3031 return op;
3032 }
3033
3034 static inline struct rte_crypto_op *
3035 test_perf_set_crypto_op_snow3g_cipher(struct rte_crypto_op *op,
3036 struct rte_mbuf *m,
3037 struct rte_cryptodev_sym_session *sess,
3038 unsigned data_len)
3039 {
3040 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
3041 rte_crypto_op_free(op);
3042 return NULL;
3043 }
3044
3045 /* Cipher Parameters */
3046 op->sym->cipher.iv.data = rte_pktmbuf_mtod(m, uint8_t *);
3047 op->sym->cipher.iv.length = SNOW3G_CIPHER_IV_LENGTH;
3048 rte_memcpy(op->sym->cipher.iv.data, snow3g_iv, SNOW3G_CIPHER_IV_LENGTH);
3049 op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
3050
3051 op->sym->cipher.data.offset = SNOW3G_CIPHER_IV_LENGTH;
3052 op->sym->cipher.data.length = data_len << 3;
3053
3054 op->sym->m_src = m;
3055
3056 return op;
3057 }
3058
3059
3060 static inline struct rte_crypto_op *
3061 test_perf_set_crypto_op_snow3g_hash(struct rte_crypto_op *op,
3062 struct rte_mbuf *m,
3063 struct rte_cryptodev_sym_session *sess,
3064 unsigned data_len,
3065 unsigned digest_len)
3066 {
3067 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
3068 rte_crypto_op_free(op);
3069 return NULL;
3070 }
3071
3072 /* Authentication Parameters */
3073
3074 op->sym->auth.digest.data =
3075 (uint8_t *)rte_pktmbuf_mtod_offset(m, uint8_t *,
3076 data_len);
3077 op->sym->auth.digest.phys_addr =
3078 rte_pktmbuf_mtophys_offset(m, data_len +
3079 SNOW3G_CIPHER_IV_LENGTH);
3080 op->sym->auth.digest.length = digest_len;
3081 op->sym->auth.aad.data = rte_pktmbuf_mtod(m, uint8_t *);
3082 op->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;
3083 rte_memcpy(op->sym->auth.aad.data, snow3g_iv,
3084 SNOW3G_CIPHER_IV_LENGTH);
3085 op->sym->auth.aad.phys_addr = rte_pktmbuf_mtophys(m);
3086
3087 /* Data lengths/offsets Parameters */
3088 op->sym->auth.data.offset = SNOW3G_CIPHER_IV_LENGTH;
3089 op->sym->auth.data.length = data_len << 3;
3090
3091 op->sym->m_src = m;
3092
3093 return op;
3094 }
3095
3096
3097 static inline struct rte_crypto_op *
3098 test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
3099 struct rte_cryptodev_sym_session *sess, unsigned int data_len,
3100 unsigned int digest_len, enum chain_mode chain __rte_unused)
3101 {
3102 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
3103 rte_crypto_op_free(op);
3104 return NULL;
3105 }
3106
3107 /* Authentication Parameters */
3108 op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
3109 (m->data_off + data_len);
3110 op->sym->auth.digest.phys_addr =
3111 rte_pktmbuf_mtophys_offset(m, data_len);
3112 op->sym->auth.digest.length = digest_len;
3113 op->sym->auth.aad.data = triple_des_iv;
3114 op->sym->auth.aad.length = TRIPLE_DES_CIPHER_IV_LENGTH;
3115
3116 /* Cipher Parameters */
3117 op->sym->cipher.iv.data = triple_des_iv;
3118 op->sym->cipher.iv.length = TRIPLE_DES_CIPHER_IV_LENGTH;
3119
3120 /* Data lengths/offsets Parameters */
3121 op->sym->auth.data.offset = 0;
3122 op->sym->auth.data.length = data_len;
3123
3124 op->sym->cipher.data.offset = TRIPLE_DES_BLOCK_SIZE;
3125 op->sym->cipher.data.length = data_len - TRIPLE_DES_BLOCK_SIZE;
3126
3127 op->sym->m_src = m;
3128
3129 return op;
3130 }
3131
3132 /* An mbuf set is used in each burst. An mbuf can be used by multiple bursts at
3133 * same time, i.e. as they're not dereferenced there's no need to wait until
3134 * finished with to re-use */
3135 #define NUM_MBUF_SETS 8
3136
3137 static int
3138 test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,
3139 struct perf_test_params *pparams)
3140 {
3141 uint16_t i, k, l, m;
3142 uint16_t j = 0;
3143 uint16_t ops_unused = 0;
3144
3145 uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
3146 uint64_t processed = 0, failed_polls = 0, retries = 0;
3147 uint64_t tsc_start = 0, tsc_end = 0;
3148
3149 uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
3150
3151 struct rte_crypto_op *ops[pparams->burst_size];
3152 struct rte_crypto_op *proc_ops[pparams->burst_size];
3153
3154 struct rte_mbuf *mbufs[pparams->burst_size * 8];
3155
3156 struct crypto_testsuite_params *ts_params = &testsuite_params;
3157
3158 static struct rte_cryptodev_sym_session *sess;
3159
3160 if (rte_cryptodev_count() == 0) {
3161 printf("\nNo crypto devices available. Is kernel driver loaded?\n");
3162 return TEST_FAILED;
3163 }
3164
3165 /* Create Crypto session*/
3166 sess = test_perf_create_aes_sha_session(ts_params->dev_id,
3167 pparams->chain, pparams->cipher_algo,
3168 pparams->cipher_key_length, pparams->auth_algo);
3169 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
3170
3171 /* Generate a burst of crypto operations */
3172 for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
3173 mbufs[i] = test_perf_create_pktmbuf(
3174 ts_params->mbuf_mp,
3175 pparams->buf_size);
3176
3177 if (mbufs[i] == NULL) {
3178 printf("\nFailed to get mbuf - freeing the rest.\n");
3179 for (k = 0; k < i; k++)
3180 rte_pktmbuf_free(mbufs[k]);
3181 return -1;
3182 }
3183
3184 /* Make room for Digest and IV in mbuf */
3185 if (pparams->chain != CIPHER_ONLY)
3186 rte_pktmbuf_append(mbufs[i], digest_length);
3187 rte_pktmbuf_prepend(mbufs[i], AES_CIPHER_IV_LENGTH);
3188 }
3189
3190
3191 tsc_start = rte_rdtsc_precise();
3192
3193 while (total_enqueued < pparams->total_operations) {
3194 uint16_t burst_size =
3195 total_enqueued+pparams->burst_size <= pparams->total_operations ?
3196 pparams->burst_size : pparams->total_operations-total_enqueued;
3197 uint16_t ops_needed = burst_size-ops_unused;
3198
3199 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3200 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
3201 printf("\nFailed to alloc enough ops, finish dequeuing "
3202 "and free ops below.");
3203 } else {
3204 for (i = 0; i < ops_needed; i++)
3205 ops[i] = test_perf_set_crypto_op_aes(ops[i],
3206 mbufs[i + (pparams->burst_size *
3207 (j % NUM_MBUF_SETS))],
3208 sess, pparams->buf_size, digest_length,
3209 pparams->chain);
3210
3211 /* enqueue burst */
3212 burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
3213 queue_id, ops, burst_size);
3214
3215 if (burst_enqueued < burst_size)
3216 retries++;
3217
3218 ops_unused = burst_size-burst_enqueued;
3219 total_enqueued += burst_enqueued;
3220 }
3221
3222 /* dequeue burst */
3223 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3224 proc_ops, pparams->burst_size);
3225 if (burst_dequeued == 0)
3226 failed_polls++;
3227 else {
3228 processed += burst_dequeued;
3229
3230 for (l = 0; l < burst_dequeued; l++)
3231 rte_crypto_op_free(proc_ops[l]);
3232 }
3233 j++;
3234 }
3235
3236 /* Dequeue any operations still in the crypto device */
3237 while (processed < pparams->total_operations) {
3238 /* Sending 0 length burst to flush sw crypto device */
3239 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
3240
3241 /* dequeue burst */
3242 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3243 proc_ops, pparams->burst_size);
3244 if (burst_dequeued == 0)
3245 failed_polls++;
3246 else {
3247 processed += burst_dequeued;
3248
3249 for (m = 0; m < burst_dequeued; m++)
3250 rte_crypto_op_free(proc_ops[m]);
3251 }
3252 }
3253
3254 tsc_end = rte_rdtsc_precise();
3255
3256 double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
3257 double throughput = (ops_s * pparams->buf_size * 8) / 1000000000;
3258
3259 printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size, ops_s/1000000,
3260 throughput, retries, failed_polls);
3261
3262 for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
3263 rte_pktmbuf_free(mbufs[i]);
3264 rte_cryptodev_sym_session_free(dev_id, sess);
3265
3266 printf("\n");
3267 return TEST_SUCCESS;
3268 }
3269
3270
3271 static int
3272 test_perf_snow3g(uint8_t dev_id, uint16_t queue_id,
3273 struct perf_test_params *pparams)
3274 {
3275 uint16_t i, k, l, m;
3276 uint16_t j = 0;
3277 uint16_t ops_unused = 0;
3278 uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
3279 uint64_t processed = 0, failed_polls = 0, retries = 0;
3280 uint64_t tsc_start = 0, tsc_end = 0;
3281
3282 uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
3283
3284 struct rte_crypto_op *ops[pparams->burst_size];
3285 struct rte_crypto_op *proc_ops[pparams->burst_size];
3286
3287 struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
3288
3289 struct crypto_testsuite_params *ts_params = &testsuite_params;
3290
3291 static struct rte_cryptodev_sym_session *sess;
3292
3293 if (rte_cryptodev_count() == 0) {
3294 printf("\nNo crypto devices found. Is PMD build configured?\n");
3295 printf("\nAnd is kernel driver loaded for HW PMDs?\n");
3296 return TEST_FAILED;
3297 }
3298
3299 /* Create Crypto session*/
3300 sess = test_perf_create_snow3g_session(ts_params->dev_id,
3301 pparams->chain, pparams->cipher_algo,
3302 pparams->cipher_key_length, pparams->auth_algo);
3303 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
3304
3305 /* Generate a burst of crypto operations */
3306 for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
3307 /*
3308 * Buffer size + iv/aad len is allocated, for perf tests they
3309 * are equal + digest len.
3310 */
3311 mbufs[i] = test_perf_create_pktmbuf(
3312 ts_params->mbuf_mp,
3313 pparams->buf_size + SNOW3G_CIPHER_IV_LENGTH +
3314 digest_length);
3315
3316 if (mbufs[i] == NULL) {
3317 printf("\nFailed to get mbuf - freeing the rest.\n");
3318 for (k = 0; k < i; k++)
3319 rte_pktmbuf_free(mbufs[k]);
3320 return -1;
3321 }
3322
3323 }
3324
3325 tsc_start = rte_rdtsc_precise();
3326
3327 while (total_enqueued < pparams->total_operations) {
3328 uint16_t burst_size =
3329 (total_enqueued+pparams->burst_size)
3330 <= pparams->total_operations ?
3331 pparams->burst_size : pparams->total_operations-total_enqueued;
3332 uint16_t ops_needed = burst_size-ops_unused;
3333 /* Handle the last burst correctly */
3334 uint16_t op_offset = pparams->burst_size - burst_size;
3335
3336 if (ops_needed !=
3337 rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3338 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
3339 ops+op_offset, ops_needed)) {
3340 printf("\nFailed to alloc enough ops.");
3341 /*Don't exit, dequeue, more ops should become available*/
3342 } else {
3343 for (i = 0; i < ops_needed; i++) {
3344 if (pparams->chain == HASH_ONLY)
3345 ops[i+op_offset] =
3346 test_perf_set_crypto_op_snow3g_hash(ops[i+op_offset],
3347 mbufs[i +
3348 (pparams->burst_size * (j % NUM_MBUF_SETS))],
3349 sess,
3350 pparams->buf_size, digest_length);
3351 else if (pparams->chain == CIPHER_ONLY)
3352 ops[i+op_offset] =
3353 test_perf_set_crypto_op_snow3g_cipher(ops[i+op_offset],
3354 mbufs[i +
3355 (pparams->burst_size * (j % NUM_MBUF_SETS))],
3356 sess,
3357 pparams->buf_size);
3358 else
3359 return 1;
3360 }
3361
3362 /* enqueue burst */
3363 burst_enqueued =
3364 rte_cryptodev_enqueue_burst(dev_id, queue_id,
3365 ops+op_offset, burst_size);
3366
3367 if (burst_enqueued < burst_size)
3368 retries++;
3369
3370 ops_unused = burst_size-burst_enqueued;
3371 total_enqueued += burst_enqueued;
3372 }
3373
3374 /* dequeue burst */
3375 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3376 proc_ops, pparams->burst_size);
3377 if (burst_dequeued == 0) {
3378 failed_polls++;
3379 } else {
3380 processed += burst_dequeued;
3381 for (l = 0; l < burst_dequeued; l++)
3382 rte_crypto_op_free(proc_ops[l]);
3383 }
3384 j++;
3385 }
3386
3387 /* Dequeue any operations still in the crypto device */
3388 while (processed < pparams->total_operations) {
3389 /* Sending 0 length burst to flush sw crypto device */
3390 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
3391
3392 /* dequeue burst */
3393 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3394 proc_ops, pparams->burst_size);
3395 if (burst_dequeued == 0)
3396 failed_polls++;
3397 else {
3398 processed += burst_dequeued;
3399 for (m = 0; m < burst_dequeued; m++)
3400 rte_crypto_op_free(proc_ops[m]);
3401 }
3402 }
3403
3404 tsc_end = rte_rdtsc_precise();
3405
3406 double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
3407 double cycles_burst = (double) (tsc_end - tsc_start) /
3408 (double) processed * pparams->burst_size;
3409 double cycles_buff = (double) (tsc_end - tsc_start) / (double) processed;
3410 double cycles_B = cycles_buff / pparams->buf_size;
3411 double throughput = (ops_s * pparams->buf_size * 8) / 1000000;
3412
3413 if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
3414 /* Cycle count misleading on HW devices for this test, so don't print */
3415 printf("%4u\t%6.2f\t%10.2f\t n/a \t\t n/a "
3416 "\t\t n/a \t\t%8"PRIu64"\t%8"PRIu64,
3417 pparams->buf_size, ops_s/1000000,
3418 throughput, retries, failed_polls);
3419 } else {
3420 printf("%4u\t%6.2f\t%10.2f\t%10.2f\t%8.2f"
3421 "\t%8.2f\t%8"PRIu64"\t%8"PRIu64,
3422 pparams->buf_size, ops_s/1000000, throughput, cycles_burst,
3423 cycles_buff, cycles_B, retries, failed_polls);
3424 }
3425
3426 for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
3427 rte_pktmbuf_free(mbufs[i]);
3428 rte_cryptodev_sym_session_free(dev_id, sess);
3429
3430 printf("\n");
3431 return TEST_SUCCESS;
3432 }
3433
3434 static int
3435 test_perf_openssl(uint8_t dev_id, uint16_t queue_id,
3436 struct perf_test_params *pparams)
3437 {
3438 uint16_t i, k, l, m;
3439 uint16_t j = 0;
3440 uint16_t ops_unused = 0;
3441
3442 uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
3443 uint64_t processed = 0, failed_polls = 0, retries = 0;
3444 uint64_t tsc_start = 0, tsc_end = 0;
3445
3446 unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
3447
3448 struct rte_crypto_op *ops[pparams->burst_size];
3449 struct rte_crypto_op *proc_ops[pparams->burst_size];
3450
3451 struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
3452
3453 struct crypto_testsuite_params *ts_params = &testsuite_params;
3454
3455 static struct rte_cryptodev_sym_session *sess;
3456
3457 static struct rte_crypto_op *(*test_perf_set_crypto_op)
3458 (struct rte_crypto_op *, struct rte_mbuf *,
3459 struct rte_cryptodev_sym_session *,
3460 unsigned int, unsigned int,
3461 enum chain_mode);
3462
3463 switch (pparams->cipher_algo) {
3464 case RTE_CRYPTO_CIPHER_3DES_CBC:
3465 case RTE_CRYPTO_CIPHER_3DES_CTR:
3466 test_perf_set_crypto_op = test_perf_set_crypto_op_3des;
3467 break;
3468 case RTE_CRYPTO_CIPHER_AES_CBC:
3469 case RTE_CRYPTO_CIPHER_AES_CTR:
3470 test_perf_set_crypto_op = test_perf_set_crypto_op_aes;
3471 break;
3472 case RTE_CRYPTO_CIPHER_AES_GCM:
3473 test_perf_set_crypto_op = test_perf_set_crypto_op_aes_gcm;
3474 break;
3475 default:
3476 return TEST_FAILED;
3477 }
3478
3479 if (rte_cryptodev_count() == 0) {
3480 printf("\nNo crypto devices found. Is PMD build configured?\n");
3481 return TEST_FAILED;
3482 }
3483
3484 /* Create Crypto session*/
3485 sess = test_perf_create_openssl_session(ts_params->dev_id,
3486 pparams->chain, pparams->cipher_algo,
3487 pparams->cipher_key_length, pparams->auth_algo);
3488 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
3489
3490 /* Generate a burst of crypto operations */
3491 for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
3492 mbufs[i] = test_perf_create_pktmbuf(
3493 ts_params->mbuf_mp,
3494 pparams->buf_size);
3495
3496 if (mbufs[i] == NULL) {
3497 printf("\nFailed to get mbuf - freeing the rest.\n");
3498 for (k = 0; k < i; k++)
3499 rte_pktmbuf_free(mbufs[k]);
3500 return -1;
3501 }
3502 }
3503
3504 tsc_start = rte_rdtsc_precise();
3505
3506 while (total_enqueued < pparams->total_operations) {
3507 uint16_t burst_size =
3508 total_enqueued + pparams->burst_size <=
3509 pparams->total_operations ? pparams->burst_size :
3510 pparams->total_operations - total_enqueued;
3511 uint16_t ops_needed = burst_size - ops_unused;
3512
3513 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3514 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
3515 printf("\nFailed to alloc enough ops, finish dequeuing "
3516 "and free ops below.");
3517 } else {
3518 for (i = 0; i < ops_needed; i++)
3519 ops[i] = test_perf_set_crypto_op(ops[i],
3520 mbufs[i + (pparams->burst_size *
3521 (j % NUM_MBUF_SETS))],
3522 sess, pparams->buf_size, digest_length,
3523 pparams->chain);
3524
3525 /* enqueue burst */
3526 burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
3527 queue_id, ops, burst_size);
3528
3529 if (burst_enqueued < burst_size)
3530 retries++;
3531
3532 ops_unused = burst_size - burst_enqueued;
3533 total_enqueued += burst_enqueued;
3534 }
3535
3536 /* dequeue burst */
3537 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3538 proc_ops, pparams->burst_size);
3539 if (burst_dequeued == 0)
3540 failed_polls++;
3541 else {
3542 processed += burst_dequeued;
3543
3544 for (l = 0; l < burst_dequeued; l++)
3545 rte_crypto_op_free(proc_ops[l]);
3546 }
3547 j++;
3548 }
3549
3550 /* Dequeue any operations still in the crypto device */
3551 while (processed < pparams->total_operations) {
3552 /* Sending 0 length burst to flush sw crypto device */
3553 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
3554
3555 /* dequeue burst */
3556 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3557 proc_ops, pparams->burst_size);
3558 if (burst_dequeued == 0)
3559 failed_polls++;
3560 else {
3561 processed += burst_dequeued;
3562
3563 for (m = 0; m < burst_dequeued; m++)
3564 rte_crypto_op_free(proc_ops[m]);
3565 }
3566 }
3567
3568 tsc_end = rte_rdtsc_precise();
3569
3570 double ops_s = ((double)processed / (tsc_end - tsc_start))
3571 * rte_get_tsc_hz();
3572 double throughput = (ops_s * pparams->buf_size * NUM_MBUF_SETS)
3573 / 1000000000;
3574
3575 printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size,
3576 ops_s / 1000000, throughput, retries, failed_polls);
3577
3578 for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
3579 rte_pktmbuf_free(mbufs[i]);
3580 rte_cryptodev_sym_session_free(dev_id, sess);
3581
3582 printf("\n");
3583 return TEST_SUCCESS;
3584 }
3585
3586 static int
3587 test_perf_armv8(uint8_t dev_id, uint16_t queue_id,
3588 struct perf_test_params *pparams)
3589 {
3590 uint16_t i, k, l, m;
3591 uint16_t j = 0;
3592 uint16_t ops_unused = 0;
3593 uint16_t burst_size;
3594 uint16_t ops_needed;
3595
3596 uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
3597 uint64_t processed = 0, failed_polls = 0, retries = 0;
3598 uint64_t tsc_start = 0, tsc_end = 0;
3599
3600 unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
3601
3602 struct rte_crypto_op *ops[pparams->burst_size];
3603 struct rte_crypto_op *proc_ops[pparams->burst_size];
3604
3605 struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
3606
3607 struct crypto_testsuite_params *ts_params = &testsuite_params;
3608
3609 static struct rte_cryptodev_sym_session *sess;
3610
3611 if (rte_cryptodev_count() == 0) {
3612 printf("\nNo crypto devices found. Is PMD build configured?\n");
3613 return TEST_FAILED;
3614 }
3615
3616 /* Create Crypto session*/
3617 sess = test_perf_create_armv8_session(ts_params->dev_id,
3618 pparams->chain, pparams->cipher_algo,
3619 pparams->cipher_key_length, pparams->auth_algo);
3620 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
3621
3622 /* Generate a burst of crypto operations */
3623 for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
3624 mbufs[i] = test_perf_create_pktmbuf(
3625 ts_params->mbuf_mp,
3626 pparams->buf_size);
3627
3628 if (mbufs[i] == NULL) {
3629 printf("\nFailed to get mbuf - freeing the rest.\n");
3630 for (k = 0; k < i; k++)
3631 rte_pktmbuf_free(mbufs[k]);
3632 return -1;
3633 }
3634 }
3635
3636 tsc_start = rte_rdtsc();
3637
3638 while (total_enqueued < pparams->total_operations) {
3639 if ((total_enqueued + pparams->burst_size) <=
3640 pparams->total_operations)
3641 burst_size = pparams->burst_size;
3642 else
3643 burst_size = pparams->total_operations - total_enqueued;
3644
3645 ops_needed = burst_size - ops_unused;
3646
3647 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3648 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
3649 printf("\nFailed to alloc enough ops, finish dequeuing "
3650 "and free ops below.");
3651 } else {
3652 for (i = 0; i < ops_needed; i++)
3653 ops[i] = test_perf_set_crypto_op_aes(ops[i],
3654 mbufs[i + (pparams->burst_size *
3655 (j % NUM_MBUF_SETS))], sess,
3656 pparams->buf_size, digest_length,
3657 pparams->chain);
3658
3659 /* enqueue burst */
3660 burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
3661 queue_id, ops, burst_size);
3662
3663 if (burst_enqueued < burst_size)
3664 retries++;
3665
3666 ops_unused = burst_size - burst_enqueued;
3667 total_enqueued += burst_enqueued;
3668 }
3669
3670 /* dequeue burst */
3671 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3672 proc_ops, pparams->burst_size);
3673 if (burst_dequeued == 0)
3674 failed_polls++;
3675 else {
3676 processed += burst_dequeued;
3677
3678 for (l = 0; l < burst_dequeued; l++)
3679 rte_crypto_op_free(proc_ops[l]);
3680 }
3681 j++;
3682 }
3683
3684 /* Dequeue any operations still in the crypto device */
3685 while (processed < pparams->total_operations) {
3686 /* Sending 0 length burst to flush sw crypto device */
3687 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
3688
3689 /* dequeue burst */
3690 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3691 proc_ops, pparams->burst_size);
3692 if (burst_dequeued == 0)
3693 failed_polls++;
3694 else {
3695 processed += burst_dequeued;
3696
3697 for (m = 0; m < burst_dequeued; m++)
3698 rte_crypto_op_free(proc_ops[m]);
3699 }
3700 }
3701
3702 tsc_end = rte_rdtsc();
3703
3704 double ops_s = ((double)processed / (tsc_end - tsc_start))
3705 * rte_get_tsc_hz();
3706 double throughput = (ops_s * pparams->buf_size * NUM_MBUF_SETS)
3707 / 1000000000;
3708
3709 printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size,
3710 ops_s / 1000000, throughput, retries, failed_polls);
3711
3712 for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
3713 rte_pktmbuf_free(mbufs[i]);
3714
3715 printf("\n");
3716 return TEST_SUCCESS;
3717 }
3718
3719 /*
3720
3721 perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA1);
3722 perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_256);
3723 perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_512);
3724
3725 perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA1);
3726 perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_256);
3727 perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_512);
3728
3729 perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA1);
3730 perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_256);
3731 perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_512);
3732 */
3733 static int
3734 test_perf_aes_cbc_encrypt_digest_vary_pkt_size(void)
3735 {
3736 unsigned total_operations = 1000000;
3737 unsigned burst_size = 32;
3738 unsigned buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048 };
3739 uint8_t i, j;
3740
3741 struct perf_test_params params_set[] = {
3742 {
3743 .chain = CIPHER_ONLY,
3744 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3745 .cipher_key_length = 16,
3746 .auth_algo = RTE_CRYPTO_AUTH_NULL
3747 },
3748 {
3749 .chain = CIPHER_HASH,
3750 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3751 .cipher_key_length = 16,
3752 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3753 },
3754 {
3755 .chain = CIPHER_HASH,
3756
3757 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3758 .cipher_key_length = 16,
3759 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
3760 },
3761 {
3762 .chain = CIPHER_HASH,
3763
3764 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3765 .cipher_key_length = 16,
3766 .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
3767 },
3768 {
3769 .chain = CIPHER_HASH,
3770
3771 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3772 .cipher_key_length = 32,
3773 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3774 },
3775 {
3776 .chain = CIPHER_HASH,
3777
3778 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3779 .cipher_key_length = 32,
3780 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
3781 },
3782 {
3783 .chain = CIPHER_HASH,
3784
3785 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
3786 .cipher_key_length = 32,
3787 .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
3788 },
3789 };
3790
3791 for (i = 0; i < RTE_DIM(params_set); i++) {
3792
3793 params_set[i].total_operations = total_operations;
3794 params_set[i].burst_size = burst_size;
3795 printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
3796 " burst_size: %d ops\n",
3797 chain_mode_name(params_set[i].chain),
3798 cipher_algo_name(params_set[i].cipher_algo),
3799 auth_algo_name(params_set[i].auth_algo),
3800 params_set[i].cipher_key_length,
3801 burst_size);
3802 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
3803 "Retries\tEmptyPolls\n");
3804 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
3805 params_set[i].buf_size = buf_lengths[j];
3806 test_perf_aes_sha(testsuite_params.dev_id, 0,
3807 &params_set[i]);
3808 }
3809 }
3810 return 0;
3811 }
3812
3813 static int
3814 test_perf_snow3G_vary_pkt_size(void)
3815 {
3816 unsigned total_operations = 1000000;
3817 uint8_t i, j;
3818 unsigned k;
3819 uint16_t burst_sizes[] = { 64 };
3820 uint16_t buf_lengths[] = { 40, 64, 80, 120, 240, 256, 400, 512, 600, 1024, 2048 };
3821
3822 struct perf_test_params params_set[] = {
3823 {
3824 .chain = CIPHER_ONLY,
3825 .cipher_algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
3826 .cipher_key_length = 16,
3827 .auth_algo = RTE_CRYPTO_AUTH_NULL,
3828 },
3829 {
3830 .chain = HASH_ONLY,
3831 .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
3832 .auth_algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
3833 .cipher_key_length = 16
3834 },
3835 };
3836
3837 printf("\n\nStart %s.", __func__);
3838 printf("\nTest to measure max throughput at various pkt sizes.");
3839 printf("\nOn HW devices t'put maximised when high Retries and EmptyPolls"
3840 " so cycle cost not relevant (n/a displayed).");
3841
3842 for (i = 0; i < RTE_DIM(params_set); i++) {
3843 printf("\n\n");
3844 params_set[i].total_operations = total_operations;
3845 for (k = 0; k < RTE_DIM(burst_sizes); k++) {
3846 printf("\nOn %s dev%u qp%u, %s, "
3847 "cipher algo:%s, auth algo:%s, burst_size: %d ops",
3848 pmd_name(gbl_cryptodev_perftest_devtype),
3849 testsuite_params.dev_id, 0,
3850 chain_mode_name(params_set[i].chain),
3851 cipher_algo_name(params_set[i].cipher_algo),
3852 auth_algo_name(params_set[i].auth_algo),
3853 burst_sizes[k]);
3854
3855 params_set[i].burst_size = burst_sizes[k];
3856 printf("\nPktSzB\tOp/s(M)\tThruput(Mbps)\tCycles/Burst\t"
3857 "Cycles/buf\tCycles/B\tRetries\t\tEmptyPolls\n");
3858 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
3859
3860 params_set[i].buf_size = buf_lengths[j];
3861
3862 test_perf_snow3g(testsuite_params.dev_id, 0, &params_set[i]);
3863 }
3864 }
3865 }
3866
3867 return 0;
3868 }
3869
3870 static int
3871 test_perf_openssl_vary_pkt_size(void)
3872 {
3873 unsigned int total_operations = 10000;
3874 unsigned int burst_size = { 64 };
3875 unsigned int buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536,
3876 1792, 2048 };
3877 uint8_t i, j;
3878
3879 struct perf_test_params params_set[] = {
3880 {
3881 .chain = CIPHER_HASH,
3882
3883 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
3884 .cipher_key_length = 16,
3885 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3886 },
3887 {
3888 .chain = CIPHER_HASH,
3889
3890 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
3891 .cipher_key_length = 24,
3892 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3893 },
3894 {
3895 .chain = CIPHER_HASH,
3896
3897 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
3898 .cipher_key_length = 16,
3899 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3900 },
3901 {
3902 .chain = CIPHER_HASH,
3903
3904 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
3905 .cipher_key_length = 32,
3906 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3907 },
3908 {
3909 .chain = CIPHER_HASH,
3910
3911 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
3912 .cipher_key_length = 16,
3913 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3914 },
3915 {
3916 .chain = CIPHER_HASH,
3917
3918 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
3919 .cipher_key_length = 24,
3920 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3921 },
3922 {
3923 .chain = CIPHER_HASH,
3924
3925 .cipher_algo = RTE_CRYPTO_CIPHER_AES_GCM,
3926 .cipher_key_length = 16,
3927 .auth_algo = RTE_CRYPTO_AUTH_AES_GCM
3928 },
3929 };
3930
3931 for (i = 0; i < RTE_DIM(params_set); i++) {
3932 params_set[i].total_operations = total_operations;
3933 params_set[i].burst_size = burst_size;
3934 printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
3935 " burst_size: %d ops\n",
3936 chain_mode_name(params_set[i].chain),
3937 cipher_algo_name(params_set[i].cipher_algo),
3938 auth_algo_name(params_set[i].auth_algo),
3939 params_set[i].cipher_key_length,
3940 burst_size);
3941 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\tRetries\t"
3942 "EmptyPolls\n");
3943 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
3944 params_set[i].buf_size = buf_lengths[j];
3945 test_perf_openssl(testsuite_params.dev_id, 0,
3946 &params_set[i]);
3947 }
3948 }
3949
3950 return 0;
3951 }
3952
3953 static int
3954 test_perf_openssl_vary_burst_size(void)
3955 {
3956 unsigned int total_operations = 4096;
3957 uint16_t buf_lengths[] = { 40 };
3958 uint8_t i, j;
3959
3960 struct perf_test_params params_set[] = {
3961 {
3962 .chain = CIPHER_HASH,
3963
3964 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
3965 .cipher_key_length = 16,
3966 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3967 },
3968 {
3969 .chain = CIPHER_HASH,
3970
3971 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
3972 .cipher_key_length = 24,
3973 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3974 },
3975 {
3976 .chain = CIPHER_HASH,
3977
3978 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
3979 .cipher_key_length = 16,
3980 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3981 },
3982 {
3983 .chain = CIPHER_HASH,
3984
3985 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
3986 .cipher_key_length = 32,
3987 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3988 },
3989 {
3990 .chain = CIPHER_HASH,
3991
3992 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
3993 .cipher_key_length = 16,
3994 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
3995 },
3996 {
3997 .chain = CIPHER_HASH,
3998
3999 .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
4000 .cipher_key_length = 24,
4001 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4002 },
4003 {
4004 .chain = CIPHER_HASH,
4005
4006 .cipher_algo = RTE_CRYPTO_CIPHER_AES_GCM,
4007 .cipher_key_length = 16,
4008 .auth_algo = RTE_CRYPTO_AUTH_AES_GCM
4009 },
4010 };
4011
4012 printf("\n\nStart %s.", __func__);
4013 printf("\nThis Test measures the average IA cycle cost using a "
4014 "constant request(packet) size. ");
4015 printf("Cycle cost is only valid when indicators show device is not"
4016 " busy, i.e. Retries and EmptyPolls = 0");
4017
4018 for (i = 0; i < RTE_DIM(params_set); i++) {
4019 printf("\n");
4020 params_set[i].total_operations = total_operations;
4021
4022 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
4023 params_set[i].buf_size = buf_lengths[j];
4024 test_perf_openssl_optimise_cyclecount(&params_set[i]);
4025 }
4026 }
4027
4028 return 0;
4029 }
4030
4031 static int
4032 test_perf_armv8_vary_pkt_size(void)
4033 {
4034 unsigned int total_operations = 100000;
4035 unsigned int burst_size = { 64 };
4036 unsigned int buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536,
4037 1792, 2048 };
4038 uint8_t i, j;
4039
4040 struct perf_test_params params_set[] = {
4041 {
4042 .chain = CIPHER_HASH,
4043
4044 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4045 .cipher_key_length = 16,
4046 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4047 },
4048 {
4049 .chain = HASH_CIPHER,
4050
4051 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4052 .cipher_key_length = 16,
4053 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4054 },
4055 {
4056 .chain = CIPHER_HASH,
4057
4058 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4059 .cipher_key_length = 16,
4060 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
4061 },
4062 {
4063 .chain = HASH_CIPHER,
4064
4065 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4066 .cipher_key_length = 16,
4067 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
4068 },
4069 };
4070
4071 for (i = 0; i < RTE_DIM(params_set); i++) {
4072 params_set[i].total_operations = total_operations;
4073 params_set[i].burst_size = burst_size;
4074 printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
4075 " burst_size: %d ops\n",
4076 chain_mode_name(params_set[i].chain),
4077 cipher_algo_name(params_set[i].cipher_algo),
4078 auth_algo_name(params_set[i].auth_algo),
4079 params_set[i].cipher_key_length,
4080 burst_size);
4081 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\tRetries\t"
4082 "EmptyPolls\n");
4083 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
4084 params_set[i].buf_size = buf_lengths[j];
4085 test_perf_armv8(testsuite_params.dev_id, 0,
4086 &params_set[i]);
4087 }
4088 }
4089
4090 return 0;
4091 }
4092
4093 static int
4094 test_perf_armv8_vary_burst_size(void)
4095 {
4096 unsigned int total_operations = 4096;
4097 uint16_t buf_lengths[] = { 64 };
4098 uint8_t i, j;
4099
4100 struct perf_test_params params_set[] = {
4101 {
4102 .chain = CIPHER_HASH,
4103
4104 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4105 .cipher_key_length = 16,
4106 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4107 },
4108 {
4109 .chain = HASH_CIPHER,
4110
4111 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4112 .cipher_key_length = 16,
4113 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4114 },
4115 {
4116 .chain = CIPHER_HASH,
4117
4118 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4119 .cipher_key_length = 16,
4120 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
4121 },
4122 {
4123 .chain = HASH_CIPHER,
4124
4125 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4126 .cipher_key_length = 16,
4127 .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
4128 },
4129 };
4130
4131 printf("\n\nStart %s.", __func__);
4132 printf("\nThis Test measures the average IA cycle cost using a "
4133 "constant request(packet) size. ");
4134 printf("Cycle cost is only valid when indicators show device is "
4135 "not busy, i.e. Retries and EmptyPolls = 0");
4136
4137 for (i = 0; i < RTE_DIM(params_set); i++) {
4138 printf("\n");
4139 params_set[i].total_operations = total_operations;
4140
4141 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
4142 params_set[i].buf_size = buf_lengths[j];
4143 test_perf_armv8_optimise_cyclecount(&params_set[i]);
4144 }
4145 }
4146
4147 return 0;
4148 }
4149
4150 static int
4151 test_perf_aes_cbc_vary_burst_size(void)
4152 {
4153 return test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);
4154 }
4155
4156
4157 static struct rte_cryptodev_sym_session *
4158 test_perf_create_session(uint8_t dev_id, struct perf_test_params *pparams)
4159 {
4160 static struct rte_cryptodev_sym_session *sess;
4161 struct rte_crypto_sym_xform cipher_xform = { 0 };
4162 struct rte_crypto_sym_xform auth_xform = { 0 };
4163
4164 uint8_t cipher_key[pparams->session_attrs->key_cipher_len];
4165 uint8_t auth_key[pparams->session_attrs->key_auth_len];
4166
4167 memcpy(cipher_key, pparams->session_attrs->key_cipher_data,
4168 pparams->session_attrs->key_cipher_len);
4169 memcpy(auth_key, pparams->session_attrs->key_auth_data,
4170 pparams->session_attrs->key_auth_len);
4171
4172 cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
4173 cipher_xform.next = NULL;
4174
4175 cipher_xform.cipher.algo = pparams->session_attrs->cipher_algorithm;
4176 cipher_xform.cipher.op = pparams->session_attrs->cipher;
4177 cipher_xform.cipher.key.data = cipher_key;
4178 cipher_xform.cipher.key.length = pparams->session_attrs->key_cipher_len;
4179
4180 auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
4181 auth_xform.next = NULL;
4182
4183 auth_xform.auth.op = pparams->session_attrs->auth;
4184 auth_xform.auth.algo = pparams->session_attrs->auth_algorithm;
4185
4186 auth_xform.auth.digest_length = pparams->session_attrs->digest_len;
4187 auth_xform.auth.key.length = pparams->session_attrs->key_auth_len;
4188
4189
4190 cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4191 if (cipher_xform.cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
4192 cipher_xform.next = &auth_xform;
4193 sess = rte_cryptodev_sym_session_create(dev_id,
4194 &cipher_xform);
4195 } else {
4196 auth_xform.next = &cipher_xform;
4197 sess = rte_cryptodev_sym_session_create(dev_id,
4198 &auth_xform);
4199 }
4200
4201 return sess;
4202 }
4203
4204 static inline struct rte_crypto_op *
4205 perf_gcm_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,
4206 struct rte_cryptodev_sym_session *sess,
4207 struct crypto_params *m_hlp,
4208 struct perf_test_params *params)
4209 {
4210 if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
4211 rte_crypto_op_free(op);
4212 return NULL;
4213 }
4214
4215 uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len,
4216 16);
4217
4218 op->sym->auth.digest.data = m_hlp->digest;
4219 op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
4220 m,
4221 params->symmetric_op->aad_len +
4222 iv_pad_len +
4223 params->symmetric_op->p_len);
4224
4225 op->sym->auth.digest.length = params->symmetric_op->t_len;
4226
4227 op->sym->auth.aad.data = m_hlp->aad;
4228 op->sym->auth.aad.length = params->symmetric_op->aad_len;
4229 op->sym->auth.aad.phys_addr = rte_pktmbuf_mtophys_offset(
4230 m,
4231 iv_pad_len);
4232
4233 rte_memcpy(op->sym->auth.aad.data, params->symmetric_op->aad_data,
4234 params->symmetric_op->aad_len);
4235
4236 op->sym->cipher.iv.data = m_hlp->iv;
4237 rte_memcpy(op->sym->cipher.iv.data, params->symmetric_op->iv_data,
4238 params->symmetric_op->iv_len);
4239 if (params->symmetric_op->iv_len == 12)
4240 op->sym->cipher.iv.data[15] = 1;
4241
4242 op->sym->cipher.iv.length = params->symmetric_op->iv_len;
4243
4244 op->sym->auth.data.offset =
4245 iv_pad_len + params->symmetric_op->aad_len;
4246 op->sym->auth.data.length = params->symmetric_op->p_len;
4247
4248 op->sym->cipher.data.offset =
4249 iv_pad_len + params->symmetric_op->aad_len;
4250 op->sym->cipher.data.length = params->symmetric_op->p_len;
4251
4252 op->sym->m_src = m;
4253
4254 return op;
4255 }
4256
4257 static struct rte_mbuf *
4258 test_perf_create_pktmbuf_fill(struct rte_mempool *mpool,
4259 struct perf_test_params *params,
4260 unsigned buf_sz, struct crypto_params *m_hlp)
4261 {
4262 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
4263 uint16_t iv_pad_len =
4264 ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len, 16);
4265 uint16_t aad_len = params->symmetric_op->aad_len;
4266 uint16_t digest_size = params->symmetric_op->t_len;
4267 char *p;
4268
4269 p = rte_pktmbuf_append(m, aad_len);
4270 if (p == NULL) {
4271 rte_pktmbuf_free(m);
4272 return NULL;
4273 }
4274 m_hlp->aad = (uint8_t *)p;
4275
4276 p = rte_pktmbuf_append(m, iv_pad_len);
4277 if (p == NULL) {
4278 rte_pktmbuf_free(m);
4279 return NULL;
4280 }
4281 m_hlp->iv = (uint8_t *)p;
4282
4283 p = rte_pktmbuf_append(m, buf_sz);
4284 if (p == NULL) {
4285 rte_pktmbuf_free(m);
4286 return NULL;
4287 }
4288 rte_memcpy(p, params->symmetric_op->p_data, buf_sz);
4289
4290 p = rte_pktmbuf_append(m, digest_size);
4291 if (p == NULL) {
4292 rte_pktmbuf_free(m);
4293 return NULL;
4294 }
4295 m_hlp->digest = (uint8_t *)p;
4296
4297 return m;
4298 }
4299
4300 static int
4301 perf_AES_GCM(uint8_t dev_id, uint16_t queue_id,
4302 struct perf_test_params *pparams, uint32_t test_ops)
4303 {
4304 int j = 0;
4305 struct crypto_testsuite_params *ts_params = &testsuite_params;
4306 struct rte_cryptodev_sym_session *sess;
4307 struct rte_crypto_op *ops[pparams->burst_size];
4308 struct rte_crypto_op *proc_ops[pparams->burst_size];
4309 uint32_t total_operations = pparams->total_operations;
4310
4311 uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
4312 uint64_t processed = 0, failed_polls = 0, retries = 0;
4313 uint64_t tsc_start = 0, tsc_end = 0;
4314
4315 uint16_t i = 0, l = 0, m = 0;
4316 uint16_t burst = pparams->burst_size * NUM_MBUF_SETS;
4317 uint16_t ops_unused = 0;
4318
4319 struct rte_mbuf *mbufs[burst];
4320 struct crypto_params m_hlp[burst];
4321
4322 if (rte_cryptodev_count() == 0) {
4323 printf("\nNo crypto devices available. "
4324 "Is kernel driver loaded?\n");
4325 return TEST_FAILED;
4326 }
4327
4328 sess = test_perf_create_session(dev_id, pparams);
4329 TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
4330
4331 for (i = 0; i < burst; i++) {
4332 mbufs[i] = test_perf_create_pktmbuf_fill(
4333 ts_params->mbuf_mp,
4334 pparams, pparams->symmetric_op->p_len,
4335 &m_hlp[i]);
4336 }
4337
4338 if (test_ops)
4339 total_operations = test_ops;
4340
4341 tsc_start = rte_rdtsc_precise();
4342 while (total_enqueued < total_operations) {
4343 uint16_t burst_size =
4344 total_enqueued+pparams->burst_size <= total_operations ?
4345 pparams->burst_size : total_operations-total_enqueued;
4346 uint16_t ops_needed = burst_size-ops_unused;
4347
4348 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
4349 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
4350 printf("\nFailed to alloc enough ops, "
4351 "finish dequeuing");
4352 } else {
4353 for (i = 0; i < ops_needed; i++)
4354 ops[i] = perf_gcm_set_crypto_op(ops[i],
4355 mbufs[i + (pparams->burst_size *
4356 (j % NUM_MBUF_SETS))],
4357 sess, &m_hlp[i + (pparams->burst_size *
4358 (j % NUM_MBUF_SETS))], pparams);
4359
4360 /* enqueue burst */
4361 burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
4362 queue_id, ops, burst_size);
4363
4364 if (burst_enqueued < burst_size)
4365 retries++;
4366
4367 ops_unused = burst_size-burst_enqueued;
4368 total_enqueued += burst_enqueued;
4369 }
4370
4371 /* dequeue burst */
4372 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
4373 proc_ops, pparams->burst_size);
4374 if (burst_dequeued == 0)
4375 failed_polls++;
4376 else {
4377 processed += burst_dequeued;
4378
4379 for (l = 0; l < burst_dequeued; l++)
4380 rte_crypto_op_free(proc_ops[l]);
4381 }
4382
4383 j++;
4384 }
4385
4386 /* Dequeue any operations still in the crypto device */
4387 while (processed < total_operations) {
4388 /* Sending 0 length burst to flush sw crypto device */
4389 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
4390
4391 /* dequeue burst */
4392 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
4393 proc_ops, pparams->burst_size);
4394 if (burst_dequeued == 0)
4395 failed_polls++;
4396 else {
4397 processed += burst_dequeued;
4398
4399 for (m = 0; m < burst_dequeued; m++) {
4400 if (test_ops) {
4401 uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP
4402 (pparams->symmetric_op->iv_len, 16);
4403 uint8_t *pkt = rte_pktmbuf_mtod(
4404 proc_ops[m]->sym->m_src,
4405 uint8_t *);
4406
4407 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4408 pparams->symmetric_op->c_data,
4409 pkt + iv_pad_len +
4410 pparams->symmetric_op->aad_len,
4411 pparams->symmetric_op->c_len,
4412 "GCM Ciphertext data not as expected");
4413
4414 TEST_ASSERT_BUFFERS_ARE_EQUAL(
4415 pparams->symmetric_op->t_data,
4416 pkt + iv_pad_len +
4417 pparams->symmetric_op->aad_len +
4418 pparams->symmetric_op->c_len,
4419 pparams->symmetric_op->t_len,
4420 "GCM MAC data not as expected");
4421
4422 }
4423 rte_crypto_op_free(proc_ops[m]);
4424 }
4425 }
4426 }
4427
4428 tsc_end = rte_rdtsc_precise();
4429
4430 double ops_s = ((double)processed / (tsc_end - tsc_start))
4431 * rte_get_tsc_hz();
4432 double throughput = (ops_s * pparams->symmetric_op->p_len * 8)
4433 / 1000000000;
4434
4435 if (!test_ops) {
4436 printf("\n%u\t\t%6.2f\t%16.2f\t%8"PRIu64"\t%10"PRIu64,
4437 pparams->symmetric_op->p_len,
4438 ops_s/1000000, throughput, retries, failed_polls);
4439 }
4440
4441 for (i = 0; i < burst; i++)
4442 rte_pktmbuf_free(mbufs[i]);
4443 rte_cryptodev_sym_session_free(dev_id, sess);
4444
4445 return 0;
4446 }
4447
4448 static int
4449 test_perf_AES_GCM(int continual_buf_len, int continual_size)
4450 {
4451 uint16_t i, j, k, loops = 1;
4452
4453 uint16_t buf_lengths[] = { 64, 128, 256, 512, 1024, 1536, 2048 };
4454
4455 static const struct cryptodev_perf_test_data *gcm_tests[] = {
4456 &AES_GCM_128_12IV_0AAD
4457 };
4458
4459 if (continual_buf_len)
4460 loops = continual_size;
4461
4462 int TEST_CASES_GCM = RTE_DIM(gcm_tests);
4463
4464 const unsigned burst_size = 32;
4465
4466 struct symmetric_op ops_set[TEST_CASES_GCM];
4467 struct perf_test_params params_set[TEST_CASES_GCM];
4468 struct symmetric_session_attrs session_attrs[TEST_CASES_GCM];
4469 static const struct cryptodev_perf_test_data *gcm_test;
4470
4471 for (i = 0; i < TEST_CASES_GCM; ++i) {
4472
4473 gcm_test = gcm_tests[i];
4474
4475 session_attrs[i].cipher =
4476 RTE_CRYPTO_CIPHER_OP_ENCRYPT;
4477 session_attrs[i].cipher_algorithm =
4478 RTE_CRYPTO_CIPHER_AES_GCM;
4479 session_attrs[i].key_cipher_data =
4480 gcm_test->key.data;
4481 session_attrs[i].key_cipher_len =
4482 gcm_test->key.len;
4483 session_attrs[i].auth_algorithm =
4484 RTE_CRYPTO_AUTH_AES_GCM;
4485 session_attrs[i].auth =
4486 RTE_CRYPTO_AUTH_OP_GENERATE;
4487 session_attrs[i].key_auth_data = NULL;
4488 session_attrs[i].key_auth_len = 0;
4489 session_attrs[i].digest_len =
4490 gcm_test->auth_tag.len;
4491
4492 ops_set[i].aad_data = gcm_test->aad.data;
4493 ops_set[i].aad_len = gcm_test->aad.len;
4494 ops_set[i].iv_data = gcm_test->iv.data;
4495 ops_set[i].iv_len = gcm_test->iv.len;
4496 ops_set[i].p_data = gcm_test->plaintext.data;
4497 ops_set[i].p_len = buf_lengths[i];
4498 ops_set[i].c_data = gcm_test->ciphertext.data;
4499 ops_set[i].c_len = buf_lengths[i];
4500 ops_set[i].t_data = gcm_test->auth_tags[i].data;
4501 ops_set[i].t_len = gcm_test->auth_tags[i].len;
4502
4503 params_set[i].chain = CIPHER_HASH;
4504 params_set[i].session_attrs = &session_attrs[i];
4505 params_set[i].symmetric_op = &ops_set[i];
4506 if (continual_buf_len)
4507 params_set[i].total_operations = 0xFFFFFF;
4508 else
4509 params_set[i].total_operations = 1000000;
4510
4511 params_set[i].burst_size = burst_size;
4512
4513 }
4514
4515 if (continual_buf_len)
4516 printf("\nCipher algo: %s Cipher hash: %s cipher key size: %ub"
4517 " burst size: %u", "AES_GCM", "AES_GCM",
4518 gcm_test->key.len << 3, burst_size);
4519
4520 for (i = 0; i < RTE_DIM(gcm_tests); i++) {
4521
4522 if (!continual_buf_len) {
4523 printf("\nCipher algo: %s Cipher hash: %s cipher key size: %ub"
4524 " burst size: %u", "AES_GCM", "AES_GCM",
4525 gcm_test->key.len << 3, burst_size);
4526 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
4527 " Retries\tEmptyPolls");
4528 }
4529
4530 uint16_t len = RTE_DIM(buf_lengths);
4531 uint16_t p = 0;
4532
4533 if (continual_buf_len) {
4534 for (k = 0; k < RTE_DIM(buf_lengths); k++)
4535 if (buf_lengths[k] == continual_buf_len) {
4536 len = k + 1;
4537 p = k;
4538 break;
4539 }
4540 }
4541 for (j = p; j < len; ++j) {
4542
4543 params_set[i].symmetric_op->c_len = buf_lengths[j];
4544 params_set[i].symmetric_op->p_len = buf_lengths[j];
4545
4546 ops_set[i].t_data = gcm_tests[i]->auth_tags[j].data;
4547 ops_set[i].t_len = gcm_tests[i]->auth_tags[j].len;
4548
4549 /* Run is twice, one for encryption/hash checks,
4550 * one for perf
4551 */
4552 if (perf_AES_GCM(testsuite_params.dev_id, 0,
4553 &params_set[i], 1))
4554 return TEST_FAILED;
4555
4556 for (k = 0; k < loops; k++) {
4557 if (continual_buf_len)
4558 printf("\n\nBuffer Size(B)\tOPS(M)\t"
4559 "Throughput(Gbps)\t"
4560 "Retries\tEmptyPolls");
4561 if (perf_AES_GCM(testsuite_params.dev_id, 0,
4562 &params_set[i], 0))
4563 return TEST_FAILED;
4564 if (continual_buf_len)
4565 printf("\n\nCompleted loop %i of %i ...",
4566 k+1, loops);
4567 }
4568 }
4569
4570 }
4571 printf("\n");
4572 return 0;
4573 }
4574
4575 static int test_cryptodev_perf_AES_GCM(void)
4576 {
4577 return test_perf_AES_GCM(0, 0);
4578 }
4579 /*
4580 * This function calls AES GCM performance tests providing
4581 * size of packet as an argument. If size of packet is not
4582 * in the buf_lengths array, all sizes will be used
4583 */
4584 static int test_continual_perf_AES_GCM(void)
4585 {
4586 return test_perf_AES_GCM(1024, 10);
4587 }
4588
4589 static int
4590 test_perf_continual_performance_test(void)
4591 {
4592 unsigned int total_operations = 0xFFFFFF;
4593 unsigned int total_loops = 10;
4594 unsigned int burst_size = 32;
4595 uint8_t i;
4596
4597 struct perf_test_params params_set = {
4598 .total_operations = total_operations,
4599 .burst_size = burst_size,
4600 .buf_size = 1024,
4601
4602 .chain = CIPHER_HASH,
4603
4604 .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
4605 .cipher_key_length = 16,
4606 .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
4607 };
4608
4609 for (i = 1; i <= total_loops; ++i) {
4610 printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
4611 " burst_size: %d ops\n",
4612 chain_mode_name(params_set.chain),
4613 cipher_algo_name(params_set.cipher_algo),
4614 auth_algo_name(params_set.auth_algo),
4615 params_set.cipher_key_length,
4616 burst_size);
4617 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
4618 "Retries\tEmptyPolls\n");
4619 test_perf_aes_sha(testsuite_params.dev_id, 0,
4620 &params_set);
4621 printf("\nCompleted loop %i of %i ...", i, total_loops);
4622 }
4623 return 0;
4624 }
4625
4626 static struct unit_test_suite cryptodev_qat_continual_testsuite = {
4627 .suite_name = "Crypto Device Continual Performance Test",
4628 .setup = testsuite_setup,
4629 .teardown = testsuite_teardown,
4630 .unit_test_cases = {
4631 TEST_CASE_ST(ut_setup, ut_teardown,
4632 test_perf_continual_performance_test),
4633 TEST_CASE_ST(ut_setup, ut_teardown,
4634 test_continual_perf_AES_GCM),
4635 TEST_CASES_END() /**< NULL terminate unit test array */
4636 }
4637 };
4638
4639 static struct unit_test_suite cryptodev_testsuite = {
4640 .suite_name = "Crypto Device Unit Test Suite",
4641 .setup = testsuite_setup,
4642 .teardown = testsuite_teardown,
4643 .unit_test_cases = {
4644 TEST_CASE_ST(ut_setup, ut_teardown,
4645 test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
4646 TEST_CASE_ST(ut_setup, ut_teardown,
4647 test_cryptodev_perf_AES_GCM),
4648 TEST_CASE_ST(ut_setup, ut_teardown,
4649 test_perf_aes_cbc_vary_burst_size),
4650 TEST_CASES_END() /**< NULL terminate unit test array */
4651 }
4652 };
4653
4654 static struct unit_test_suite cryptodev_dpaa2_sec_testsuite = {
4655 .suite_name = "Crypto Device DPAA2_SEC Unit Test Suite",
4656 .setup = testsuite_setup,
4657 .teardown = testsuite_teardown,
4658 .unit_test_cases = {
4659 TEST_CASE_ST(ut_setup, ut_teardown,
4660 test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
4661 TEST_CASES_END() /**< NULL terminate unit test array */
4662 }
4663 };
4664
4665 static struct unit_test_suite cryptodev_gcm_testsuite = {
4666 .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
4667 .setup = testsuite_setup,
4668 .teardown = testsuite_teardown,
4669 .unit_test_cases = {
4670 TEST_CASE_ST(ut_setup, ut_teardown,
4671 test_cryptodev_perf_AES_GCM),
4672 TEST_CASES_END() /**< NULL terminate unit test array */
4673 }
4674 };
4675
4676 static struct unit_test_suite cryptodev_aes_testsuite = {
4677 .suite_name = "Crypto Device AESNI MB Unit Test Suite",
4678 .setup = testsuite_setup,
4679 .teardown = testsuite_teardown,
4680 .unit_test_cases = {
4681 TEST_CASE_ST(ut_setup, ut_teardown,
4682 test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
4683 TEST_CASES_END() /**< NULL terminate unit test array */
4684 }
4685 };
4686
4687 static struct unit_test_suite cryptodev_snow3g_testsuite = {
4688 .suite_name = "Crypto Device SNOW3G Unit Test Suite",
4689 .setup = testsuite_setup,
4690 .teardown = testsuite_teardown,
4691 .unit_test_cases = {
4692 TEST_CASE_ST(ut_setup, ut_teardown,
4693 test_perf_snow3G_vary_pkt_size),
4694 TEST_CASE_ST(ut_setup, ut_teardown,
4695 test_perf_snow3G_vary_burst_size),
4696 TEST_CASES_END() /**< NULL terminate unit test array */
4697 }
4698 };
4699
4700 static struct unit_test_suite cryptodev_openssl_testsuite = {
4701 .suite_name = "Crypto Device OPENSSL Unit Test Suite",
4702 .setup = testsuite_setup,
4703 .teardown = testsuite_teardown,
4704 .unit_test_cases = {
4705 TEST_CASE_ST(ut_setup, ut_teardown,
4706 test_perf_openssl_vary_pkt_size),
4707 TEST_CASE_ST(ut_setup, ut_teardown,
4708 test_perf_openssl_vary_burst_size),
4709 TEST_CASES_END() /**< NULL terminate unit test array */
4710 }
4711 };
4712
4713 static struct unit_test_suite cryptodev_armv8_testsuite = {
4714 .suite_name = "Crypto Device ARMv8 Unit Test Suite",
4715 .setup = testsuite_setup,
4716 .teardown = testsuite_teardown,
4717 .unit_test_cases = {
4718 TEST_CASE_ST(ut_setup, ut_teardown,
4719 test_perf_armv8_vary_pkt_size),
4720 TEST_CASE_ST(ut_setup, ut_teardown,
4721 test_perf_armv8_vary_burst_size),
4722 TEST_CASES_END() /**< NULL terminate unit test array */
4723 }
4724 };
4725
4726 static int
4727 perftest_aesni_gcm_cryptodev(void)
4728 {
4729 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_GCM_PMD;
4730
4731 return unit_test_suite_runner(&cryptodev_gcm_testsuite);
4732 }
4733
4734 static int
4735 perftest_aesni_mb_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4736 {
4737 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_MB_PMD;
4738
4739 return unit_test_suite_runner(&cryptodev_aes_testsuite);
4740 }
4741
4742 static int
4743 perftest_qat_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4744 {
4745 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
4746
4747 return unit_test_suite_runner(&cryptodev_testsuite);
4748 }
4749
4750 static int
4751 perftest_sw_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4752 {
4753 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_SNOW3G_PMD;
4754
4755 return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
4756 }
4757
4758 static int
4759 perftest_qat_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4760 {
4761 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
4762
4763 return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
4764 }
4765
4766 static int
4767 perftest_openssl_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4768 {
4769 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_OPENSSL_PMD;
4770
4771 return unit_test_suite_runner(&cryptodev_openssl_testsuite);
4772 }
4773
4774 static int
4775 perftest_qat_continual_cryptodev(void)
4776 {
4777 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
4778
4779 return unit_test_suite_runner(&cryptodev_qat_continual_testsuite);
4780 }
4781
4782 static int
4783 perftest_sw_armv8_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
4784 {
4785 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_ARMV8_PMD;
4786
4787 return unit_test_suite_runner(&cryptodev_armv8_testsuite);
4788 }
4789
4790 static int
4791 perftest_dpaa2_sec_cryptodev(void)
4792 {
4793 gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_DPAA2_SEC_PMD;
4794
4795 return unit_test_suite_runner(&cryptodev_dpaa2_sec_testsuite);
4796 }
4797
4798 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perftest, perftest_aesni_mb_cryptodev);
4799 REGISTER_TEST_COMMAND(cryptodev_qat_perftest, perftest_qat_cryptodev);
4800 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_perftest, perftest_sw_snow3g_cryptodev);
4801 REGISTER_TEST_COMMAND(cryptodev_qat_snow3g_perftest, perftest_qat_snow3g_cryptodev);
4802 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_perftest, perftest_aesni_gcm_cryptodev);
4803 REGISTER_TEST_COMMAND(cryptodev_openssl_perftest,
4804 perftest_openssl_cryptodev);
4805 REGISTER_TEST_COMMAND(cryptodev_qat_continual_perftest,
4806 perftest_qat_continual_cryptodev);
4807 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_perftest,
4808 perftest_sw_armv8_cryptodev);
4809 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_perftest,
4810 perftest_dpaa2_sec_cryptodev);