app/test: improve error message for disabled crypto
[dpdk.git] / app / 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, unsigned cipher_key_len,
153                 enum rte_crypto_auth_algorithm auth_algo);
154 static struct rte_mbuf *
155 test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz);
156 static inline struct rte_crypto_op *
157 test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
158                 struct rte_cryptodev_sym_session *sess, unsigned data_len,
159                 unsigned digest_len);
160 static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo);
161
162
163 static const char *chain_mode_name(enum chain_mode mode)
164 {
165         switch (mode) {
166         case CIPHER_HASH: return "cipher_hash"; break;
167         case HASH_CIPHER: return "hash_cipher"; break;
168         case CIPHER_ONLY: return "cipher_only"; break;
169         case HASH_ONLY: return "hash_only"; break;
170         default: return ""; break;
171         }
172 }
173
174 static const char *pmd_name(enum rte_cryptodev_type pmd)
175 {
176         switch (pmd) {
177         case RTE_CRYPTODEV_NULL_PMD: return RTE_STR(CRYPTODEV_NAME_NULL_PMD); break;
178         case RTE_CRYPTODEV_AESNI_GCM_PMD:
179                 return RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD);
180         case RTE_CRYPTODEV_AESNI_MB_PMD:
181                 return RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD);
182         case RTE_CRYPTODEV_QAT_SYM_PMD:
183                 return RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
184         case RTE_CRYPTODEV_SNOW3G_PMD:
185                 return RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD);
186         default:
187                 return "";
188         }
189 }
190
191 static const char *cipher_algo_name(enum rte_crypto_cipher_algorithm cipher_algo)
192 {
193         switch (cipher_algo) {
194         case RTE_CRYPTO_CIPHER_NULL: return "NULL";
195         case RTE_CRYPTO_CIPHER_3DES_CBC: return "3DES_CBC";
196         case RTE_CRYPTO_CIPHER_3DES_CTR: return "3DES_CTR";
197         case RTE_CRYPTO_CIPHER_3DES_ECB: return "3DES_ECB";
198         case RTE_CRYPTO_CIPHER_AES_CBC: return "AES_CBC";
199         case RTE_CRYPTO_CIPHER_AES_CCM: return "AES_CCM";
200         case RTE_CRYPTO_CIPHER_AES_CTR: return "AES_CTR";
201         case RTE_CRYPTO_CIPHER_AES_ECB: return "AES_ECB";
202         case RTE_CRYPTO_CIPHER_AES_F8: return "AES_F8";
203         case RTE_CRYPTO_CIPHER_AES_GCM: return "AES_GCM";
204         case RTE_CRYPTO_CIPHER_AES_XTS: return "AES_XTS";
205         case RTE_CRYPTO_CIPHER_ARC4: return "ARC4";
206         case RTE_CRYPTO_CIPHER_KASUMI_F8: return "KASUMI_F8";
207         case RTE_CRYPTO_CIPHER_SNOW3G_UEA2: return "SNOW3G_UEA2";
208         case RTE_CRYPTO_CIPHER_ZUC_EEA3: return "ZUC_EEA3";
209         default: return "Another cipher algo";
210         }
211 }
212
213 static const char *auth_algo_name(enum rte_crypto_auth_algorithm auth_algo)
214 {
215         switch (auth_algo) {
216         case RTE_CRYPTO_AUTH_NULL: return "NULL"; break;
217         case RTE_CRYPTO_AUTH_AES_CBC_MAC: return "AES_CBC_MAC"; break;
218         case RTE_CRYPTO_AUTH_AES_CCM: return "AES_CCM"; break;
219         case RTE_CRYPTO_AUTH_AES_CMAC: return "AES_CMAC,"; break;
220         case RTE_CRYPTO_AUTH_AES_GCM: return "AES_GCM"; break;
221         case RTE_CRYPTO_AUTH_AES_GMAC: return "AES_GMAC"; break;
222         case RTE_CRYPTO_AUTH_AES_XCBC_MAC: return "AES_XCBC_MAC"; break;
223         case RTE_CRYPTO_AUTH_KASUMI_F9: return "KASUMI_F9"; break;
224         case RTE_CRYPTO_AUTH_MD5: return "MD5"; break;
225         case RTE_CRYPTO_AUTH_MD5_HMAC: return "MD5_HMAC,"; break;
226         case RTE_CRYPTO_AUTH_SHA1: return "SHA1"; break;
227         case RTE_CRYPTO_AUTH_SHA1_HMAC: return "SHA1_HMAC"; break;
228         case RTE_CRYPTO_AUTH_SHA224: return "SHA224"; break;
229         case RTE_CRYPTO_AUTH_SHA224_HMAC: return "SHA224_HMAC"; break;
230         case RTE_CRYPTO_AUTH_SHA256: return "SHA256"; break;
231         case RTE_CRYPTO_AUTH_SHA256_HMAC: return "SHA256_HMAC"; break;
232         case RTE_CRYPTO_AUTH_SHA384: return "SHA384,"; break;
233         case RTE_CRYPTO_AUTH_SHA384_HMAC: return "SHA384_HMAC,"; break;
234         case RTE_CRYPTO_AUTH_SHA512: return "SHA512,"; break;
235         case RTE_CRYPTO_AUTH_SHA512_HMAC: return "SHA512_HMAC,"; break;
236         case RTE_CRYPTO_AUTH_SNOW3G_UIA2: return "SNOW3G_UIA2"; break;
237         case RTE_CRYPTO_AUTH_ZUC_EIA3: return "RTE_CRYPTO_AUTH_ZUC_EIA3"; break;
238         default: return "Another auth algo"; break;
239         };
240 }
241
242 static struct rte_mbuf *
243 setup_test_string(struct rte_mempool *mpool,
244                 const uint8_t *data, size_t len, uint8_t blocksize)
245 {
246         struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
247         size_t t_len = len - (blocksize ? (len % blocksize) : 0);
248
249         if (m) {
250                 char *dst = rte_pktmbuf_append(m, t_len);
251
252                 if (!dst) {
253                         rte_pktmbuf_free(m);
254                         return NULL;
255                 }
256
257                 rte_memcpy(dst, (const void *)data, t_len);
258         }
259         return m;
260 }
261
262 static struct crypto_testsuite_params testsuite_params = { NULL };
263 static struct crypto_unittest_params unittest_params;
264 static enum rte_cryptodev_type gbl_cryptodev_perftest_devtype;
265
266 static int
267 testsuite_setup(void)
268 {
269         struct crypto_testsuite_params *ts_params = &testsuite_params;
270         struct rte_cryptodev_info info;
271         unsigned i, nb_devs, valid_dev_id = 0;
272         int ret;
273         uint16_t qp_id;
274
275         ts_params->mbuf_mp = rte_mempool_lookup("CRYPTO_PERF_MBUFPOOL");
276         if (ts_params->mbuf_mp == NULL) {
277                 /* Not already created so create */
278                 ts_params->mbuf_mp = rte_pktmbuf_pool_create(
279                                 "CRYPTO_PERF_MBUFPOOL",
280                                 NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
281                                 rte_socket_id());
282                 if (ts_params->mbuf_mp == NULL) {
283                         RTE_LOG(ERR, USER1, "Can't create CRYPTO_PERF_MBUFPOOL\n");
284                         return TEST_FAILED;
285                 }
286         }
287
288
289         ts_params->op_mpool = rte_crypto_op_pool_create("CRYPTO_OP_POOL",
290                         RTE_CRYPTO_OP_TYPE_SYMMETRIC,
291                         NUM_MBUFS, MBUF_CACHE_SIZE,
292                         DEFAULT_NUM_XFORMS *
293                         sizeof(struct rte_crypto_sym_xform),
294                         rte_socket_id());
295                 if (ts_params->op_mpool == NULL) {
296                         RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
297                         return TEST_FAILED;
298                 }
299
300         /* Create 2 AESNI MB devices if required */
301         if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD) {
302 #ifndef RTE_LIBRTE_PMD_AESNI_MB
303                 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
304                         " enabled in config file to run this testsuite.\n");
305                 return TEST_FAILED;
306 #endif
307                 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);
308                 if (nb_devs < 2) {
309                         for (i = nb_devs; i < 2; i++) {
310                                 ret = rte_eal_vdev_init(
311                                         RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
312
313                                 TEST_ASSERT(ret == 0,
314                                         "Failed to create instance %u of pmd : %s",
315                                         i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
316                         }
317                 }
318         }
319
320         /* Create 2 AESNI GCM devices if required */
321         if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_GCM_PMD) {
322 #ifndef RTE_LIBRTE_PMD_AESNI_GCM
323                 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
324                         " enabled in config file to run this testsuite.\n");
325                 return TEST_FAILED;
326 #endif
327                 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_GCM_PMD);
328                 if (nb_devs < 2) {
329                         for (i = nb_devs; i < 2; i++) {
330                                 ret = rte_eal_vdev_init(
331                                         RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL);
332
333                                 TEST_ASSERT(ret == 0,
334                                         "Failed to create instance %u of pmd : %s",
335                                         i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
336                         }
337                 }
338         }
339
340         /* Create 2 SNOW3G devices if required */
341         if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_SNOW3G_PMD) {
342 #ifndef RTE_LIBRTE_PMD_SNOW3G
343                 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
344                         " enabled in config file to run this testsuite.\n");
345                 return TEST_FAILED;
346 #endif
347                 nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
348                 if (nb_devs < 2) {
349                         for (i = nb_devs; i < 2; i++) {
350                                 ret = rte_eal_vdev_init(
351                                         RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL);
352
353                                 TEST_ASSERT(ret == 0,
354                                         "Failed to create instance %u of pmd : %s",
355                                         i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
356                         }
357                 }
358         }
359
360 #ifndef RTE_LIBRTE_PMD_QAT
361         if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
362                 RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
363                                 "in config file to run this testsuite.\n");
364                 return TEST_FAILED;
365         }
366 #endif
367
368         nb_devs = rte_cryptodev_count();
369         if (nb_devs < 1) {
370                 RTE_LOG(ERR, USER1, "No crypto devices found?");
371                 return TEST_FAILED;
372         }
373
374         /* Search for the first valid */
375         for (i = 0; i < nb_devs; i++) {
376                 rte_cryptodev_info_get(i, &info);
377                 if (info.dev_type == gbl_cryptodev_perftest_devtype) {
378                         ts_params->dev_id = i;
379                         valid_dev_id = 1;
380                         break;
381                 }
382         }
383
384         if (!valid_dev_id)
385                 return TEST_FAILED;
386
387         /*
388          * Using Crypto Device Id 0 by default.
389          * Since we can't free and re-allocate queue memory always set the queues
390          * on this device up to max size first so enough memory is allocated for
391          * any later re-configures needed by other tests
392          */
393
394         rte_cryptodev_info_get(ts_params->dev_id, &info);
395
396         ts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;
397         ts_params->conf.socket_id = SOCKET_ID_ANY;
398         ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
399
400         TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->dev_id,
401                         &ts_params->conf),
402                         "Failed to configure cryptodev %u",
403                         ts_params->dev_id);
404
405
406         ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
407
408         for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
409                 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
410                         ts_params->dev_id, qp_id,
411                         &ts_params->qp_conf,
412                         rte_cryptodev_socket_id(ts_params->dev_id)),
413                         "Failed to setup queue pair %u on cryptodev %u",
414                         qp_id, ts_params->dev_id);
415         }
416
417         /*Now reconfigure queues to size we actually want to use in this testsuite.*/
418         ts_params->qp_conf.nb_descriptors = PERF_NUM_OPS_INFLIGHT;
419         for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
420
421                 TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
422                         ts_params->dev_id, qp_id,
423                                 &ts_params->qp_conf,
424                                 rte_cryptodev_socket_id(ts_params->dev_id)),
425                                 "Failed to setup queue pair %u on cryptodev %u",
426                                 qp_id, ts_params->dev_id);
427         }
428
429         return TEST_SUCCESS;
430 }
431 static void
432 testsuite_teardown(void)
433 {
434         struct crypto_testsuite_params *ts_params =
435                         &testsuite_params;
436
437         if (ts_params->mbuf_mp != NULL)
438                 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
439                 rte_mempool_avail_count(ts_params->mbuf_mp));
440         if (ts_params->op_mpool != NULL)
441                 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_OP POOL count %u\n",
442                 rte_mempool_avail_count(ts_params->op_mpool));
443 }
444
445 static int
446 ut_setup(void)
447 {
448         struct crypto_testsuite_params *ts_params = &testsuite_params;
449         struct crypto_unittest_params *ut_params = &unittest_params;
450
451         /* Clear unit test parameters before running test */
452         memset(ut_params, 0, sizeof(*ut_params));
453
454         rte_cryptodev_stats_reset(ts_params->dev_id);
455
456         /* Start the device */
457         TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->dev_id),
458                         "Failed to start cryptodev %u",
459                         ts_params->dev_id);
460
461         return TEST_SUCCESS;
462 }
463
464 static void
465 ut_teardown(void)
466 {
467         struct crypto_testsuite_params *ts_params = &testsuite_params;
468         struct crypto_unittest_params *ut_params = &unittest_params;
469         struct rte_cryptodev_stats stats;
470
471         unsigned i;
472
473         /* free crypto session structure */
474         if (ut_params->sess)
475                 rte_cryptodev_sym_session_free(ts_params->dev_id,
476                                 ut_params->sess);
477
478         /* free crypto operation structure */
479         if (ut_params->op)
480                 rte_crypto_op_free(ut_params->op);
481
482         for (i = 0; i < MAX_NUM_OF_OPS_PER_UT; i++) {
483                 if (ut_params->obuf[i])
484                         rte_pktmbuf_free(ut_params->obuf[i]);
485                 else if (ut_params->ibuf[i])
486                         rte_pktmbuf_free(ut_params->ibuf[i]);
487         }
488
489         if (ts_params->mbuf_mp != NULL)
490                 RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
491                         rte_mempool_avail_count(ts_params->mbuf_mp));
492
493         rte_cryptodev_stats_get(ts_params->dev_id, &stats);
494
495         /* Stop the device */
496         rte_cryptodev_stop(ts_params->dev_id);
497 }
498
499 const char plaintext_quote[] =
500                 "THE COUNT OF MONTE CRISTO by Alexandre Dumas, Pere Chapter 1. "
501                 "Marseilles--The Arrival. On the 24th of February, 1815, the "
502                 "look-out at Notre-Dame de la Garde signalled the three-master,"
503                 " the Pharaon from Smyrna, Trieste, and Naples. As usual, a "
504                 "pilot put off immediately, and rounding the Chateau d'If, got "
505                 "on board the vessel between Cape Morgion and Rion island. "
506                 "Immediately, and according to custom, the ramparts of Fort "
507                 "Saint-Jean were covered with spectators; it is always an event "
508                 "at Marseilles for a ship to come into port, especially when "
509                 "this ship, like the Pharaon, has been built, rigged, and laden"
510                 " at the old Phocee docks, and belongs to an owner of the city."
511                 " The ship drew on and had safely passed the strait, which some"
512                 " volcanic shock has made between the Calasareigne and Jaros "
513                 "islands; had doubled Pomegue, and approached the harbor under"
514                 " topsails, jib, and spanker, but so slowly and sedately that"
515                 " the idlers, with that instinct which is the forerunner of "
516                 "evil, asked one another what misfortune could have happened "
517                 "on board. However, those experienced in navigation saw plainly"
518                 " that if any accident had occurred, it was not to the vessel "
519                 "herself, for she bore down with all the evidence of being "
520                 "skilfully handled, the anchor a-cockbill, the jib-boom guys "
521                 "already eased off, and standing by the side of the pilot, who"
522                 " was steering the Pharaon towards the narrow entrance of the"
523                 " inner port, was a young man, who, with activity and vigilant"
524                 " eye, watched every motion of the ship, and repeated each "
525                 "direction of the pilot. The vague disquietude which prevailed "
526                 "among the spectators had so much affected one of the crowd "
527                 "that he did not await the arrival of the vessel in harbor, but"
528                 " jumping into a small skiff, desired to be pulled alongside "
529                 "the Pharaon, which he reached as she rounded into La Reserve "
530                 "basin. When the young man on board saw this person approach, "
531                 "he left his station by the pilot, and, hat in hand, leaned "
532                 "over the ship's bulwarks. He was a fine, tall, slim young "
533                 "fellow of eighteen or twenty, with black eyes, and hair as "
534                 "dark as a raven's wing; and his whole appearance bespoke that "
535                 "calmness and resolution peculiar to men accustomed from their "
536                 "cradle to contend with danger. \"Ah, is it you, Dantes?\" "
537                 "cried the man in the skiff. \"What's the matter? and why have "
538                 "you such an air of sadness aboard?\" \"A great misfortune, M. "
539                 "Morrel,\" replied the young man,--\"a great misfortune, for me"
540                 " especially! Off Civita Vecchia we lost our brave Captain "
541                 "Leclere.\" \"And the cargo?\" inquired the owner, eagerly. "
542                 "\"Is all safe, M. Morrel; and I think you will be satisfied on"
543                 " that head. But poor Captain Leclere--\" \"What happened to "
544                 "him?\" asked the owner, with an air of considerable "
545                 "resignation. \"What happened to the worthy captain?\" \"He "
546                 "died.\" \"Fell into the sea?\" \"No, sir, he died of "
547                 "brain-fever in dreadful agony.\" Then turning to the crew, "
548                 "he said, \"Bear a hand there, to take in sail!\" All hands "
549                 "obeyed, and at once the eight or ten seamen who composed the "
550                 "crew, sprang to their respective stations at the spanker "
551                 "brails and outhaul, topsail sheets and halyards, the jib "
552                 "downhaul, and the topsail clewlines and buntlines. The young "
553                 "sailor gave a look to see that his orders were promptly and "
554                 "accurately obeyed, and then turned again to the owner. \"And "
555                 "how did this misfortune occur?\" inquired the latter, resuming"
556                 " the interrupted conversation. \"Alas, sir, in the most "
557                 "unexpected manner. After a long talk with the harbor-master, "
558                 "Captain Leclere left Naples greatly disturbed in mind. In "
559                 "twenty-four hours he was attacked by a fever, and died three "
560                 "days afterwards. We performed the usual burial service, and he"
561                 " is at his rest, sewn up in his hammock with a thirty-six "
562                 "pound shot at his head and his heels, off El Giglio island. "
563                 "We bring to his widow his sword and cross of honor. It was "
564                 "worth while, truly,\" added the young man with a melancholy "
565                 "smile, \"to make war against the English for ten years, and "
566                 "to die in his bed at last, like everybody else.";
567
568 #define QUOTE_LEN_64B           (64)
569 #define QUOTE_LEN_128B          (128)
570 #define QUOTE_LEN_256B          (256)
571 #define QUOTE_LEN_512B          (512)
572 #define QUOTE_LEN_768B          (768)
573 #define QUOTE_LEN_1024B         (1024)
574 #define QUOTE_LEN_1280B         (1280)
575 #define QUOTE_LEN_1536B         (1536)
576 #define QUOTE_LEN_1792B         (1792)
577 #define QUOTE_LEN_2048B         (2048)
578
579
580 /* ***** AES-CBC / HMAC-SHA256 Performance Tests ***** */
581
582 #define HMAC_KEY_LENGTH_SHA256  (DIGEST_BYTE_LENGTH_SHA256)
583
584 #define CIPHER_KEY_LENGTH_AES_CBC       (16)
585 #define CIPHER_IV_LENGTH_AES_CBC        (CIPHER_KEY_LENGTH_AES_CBC)
586
587 static uint8_t aes_cbc_128_key[] = {
588                 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
589                 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA };
590
591 static uint8_t aes_cbc_128_iv[] = {
592                 0xf5, 0xd3, 0x89, 0x0f, 0x47, 0x00, 0xcb, 0x52,
593                 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1 };
594
595 static uint8_t hmac_sha256_key[] = {
596                 0xff, 0xcb, 0x37, 0x30, 0x1d, 0x4a, 0xc2, 0x41,
597                 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
598                 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
599                 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };
600
601
602 /* Cipher text output */
603
604 static const uint8_t AES_CBC_ciphertext_64B[] = {
605                 0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50,
606                 0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0,
607                 0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36,
608                 0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e,
609                 0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c,
610                 0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e,
611                 0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6,
612                 0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c
613 };
614
615 static const uint8_t AES_CBC_ciphertext_128B[] = {
616                 0x79, 0x92, 0x65, 0xc8, 0xfb, 0x0a, 0xc7, 0xc4,
617                 0x9b, 0x3b, 0xbe, 0x69, 0x7f, 0x7c, 0xf4, 0x4e,
618                 0xa5, 0x0d, 0xf6, 0x33, 0xc4, 0xdf, 0xf3, 0x0d,
619                 0xdb, 0xb9, 0x68, 0x34, 0xb0, 0x0d, 0xbd, 0xb9,
620                 0xa7, 0xf3, 0x86, 0x50, 0x2a, 0xbe, 0x50, 0x5d,
621                 0xb3, 0xbe, 0x72, 0xf9, 0x02, 0xb1, 0x69, 0x0b,
622                 0x8c, 0x96, 0x4c, 0x3c, 0x0c, 0x1e, 0x76, 0xe5,
623                 0x7e, 0x75, 0xdd, 0xd0, 0xa9, 0x75, 0x00, 0x13,
624                 0x6b, 0x1e, 0xc0, 0xad, 0xfc, 0x03, 0xb5, 0x99,
625                 0xdc, 0x37, 0x35, 0xfc, 0x16, 0x34, 0xfd, 0xb4,
626                 0xea, 0x1e, 0xb6, 0x51, 0xdf, 0xab, 0x87, 0xd6,
627                 0x87, 0x41, 0xfa, 0x1c, 0xc6, 0x78, 0xa6, 0x3c,
628                 0x1d, 0x76, 0xfe, 0xff, 0x65, 0xfc, 0x63, 0x1e,
629                 0x1f, 0xe2, 0x7c, 0x9b, 0xa2, 0x72, 0xc3, 0x34,
630                 0x23, 0xdf, 0x01, 0xf0, 0xfd, 0x02, 0x8b, 0x97,
631                 0x00, 0x2b, 0x97, 0x4e, 0xab, 0x98, 0x21, 0x3c
632 };
633
634 static const uint8_t AES_CBC_ciphertext_256B[] = {
635                 0xc7, 0x71, 0x2b, 0xed, 0x2c, 0x97, 0x59, 0xfa,
636                 0xcf, 0x5a, 0xb9, 0x31, 0x92, 0xe0, 0xc9, 0x92,
637                 0xc0, 0x2d, 0xd5, 0x9c, 0x84, 0xbf, 0x70, 0x36,
638                 0x13, 0x48, 0xe0, 0xb1, 0xbf, 0x6c, 0xcd, 0x91,
639                 0xa0, 0xc3, 0x57, 0x6c, 0x3f, 0x0e, 0x34, 0x41,
640                 0xe7, 0x9c, 0xc0, 0xec, 0x18, 0x0c, 0x05, 0x52,
641                 0x78, 0xe2, 0x3c, 0x6e, 0xdf, 0xa5, 0x49, 0xc7,
642                 0xf2, 0x55, 0x00, 0x8f, 0x65, 0x6d, 0x4b, 0xd0,
643                 0xcb, 0xd4, 0xd2, 0x0b, 0xea, 0xf4, 0xb0, 0x85,
644                 0x61, 0x9e, 0x36, 0xc0, 0x71, 0xb7, 0x80, 0xad,
645                 0x40, 0x78, 0xb4, 0x70, 0x2b, 0xe8, 0x80, 0xc5,
646                 0x19, 0x35, 0x96, 0x55, 0x3b, 0x40, 0x03, 0xbb,
647                 0x9f, 0xa6, 0xc2, 0x82, 0x92, 0x04, 0xc3, 0xa6,
648                 0x96, 0xc4, 0x7f, 0x4c, 0x3e, 0x3c, 0x79, 0x82,
649                 0x88, 0x8b, 0x3f, 0x8b, 0xc5, 0x9f, 0x44, 0xbe,
650                 0x71, 0xe7, 0x09, 0xa2, 0x40, 0xa2, 0x23, 0x4e,
651                 0x9f, 0x31, 0xab, 0x6f, 0xdf, 0x59, 0x40, 0xe1,
652                 0x12, 0x15, 0x55, 0x4b, 0xea, 0x3f, 0xa1, 0x41,
653                 0x4f, 0xaf, 0xcd, 0x27, 0x2a, 0x61, 0xa1, 0x9e,
654                 0x82, 0x30, 0x05, 0x05, 0x55, 0xce, 0x99, 0xd3,
655                 0x8f, 0x3f, 0x86, 0x79, 0xdc, 0x9f, 0x33, 0x07,
656                 0x75, 0x26, 0xc8, 0x72, 0x81, 0x0f, 0x9b, 0xf7,
657                 0xb1, 0xfb, 0xd3, 0x91, 0x36, 0x08, 0xab, 0x26,
658                 0x70, 0x53, 0x0c, 0x99, 0xfd, 0xa9, 0x07, 0xb4,
659                 0xe9, 0xce, 0xc1, 0xd6, 0xd2, 0x2c, 0x71, 0x80,
660                 0xec, 0x59, 0x61, 0x0b, 0x24, 0xf0, 0x6d, 0x33,
661                 0x73, 0x45, 0x6e, 0x80, 0x03, 0x45, 0xf2, 0x76,
662                 0xa5, 0x8a, 0xc9, 0xcf, 0xaf, 0x4a, 0xed, 0x35,
663                 0xc0, 0x97, 0x52, 0xc5, 0x00, 0xdf, 0xef, 0xc7,
664                 0x9f, 0xf2, 0xe8, 0x15, 0x3e, 0xb3, 0x30, 0xe7,
665                 0x00, 0xd0, 0x4e, 0xeb, 0x79, 0xf6, 0xf6, 0xcf,
666                 0xf0, 0xe7, 0x61, 0xd5, 0x3d, 0x6a, 0x73, 0x9d
667 };
668
669 static const uint8_t AES_CBC_ciphertext_512B[] = {
670                 0xb4, 0xc6, 0xc6, 0x5f, 0x7e, 0xca, 0x05, 0x70,
671                 0x21, 0x7b, 0x92, 0x9e, 0x23, 0xe7, 0x92, 0xb8,
672                 0x27, 0x3d, 0x20, 0x29, 0x57, 0xfa, 0x1f, 0x26,
673                 0x0a, 0x04, 0x34, 0xa6, 0xf2, 0xdc, 0x44, 0xb6,
674                 0x43, 0x40, 0x62, 0xde, 0x0c, 0xde, 0x1c, 0x30,
675                 0x43, 0x85, 0x0b, 0xe8, 0x93, 0x1f, 0xa1, 0x2a,
676                 0x8a, 0x27, 0x35, 0x39, 0x14, 0x9f, 0x37, 0x64,
677                 0x59, 0xb5, 0x0e, 0x96, 0x82, 0x5d, 0x63, 0x45,
678                 0xd6, 0x93, 0x89, 0x46, 0xe4, 0x71, 0x31, 0xeb,
679                 0x0e, 0xd1, 0x7b, 0xda, 0x90, 0xb5, 0x81, 0xac,
680                 0x76, 0x54, 0x54, 0x85, 0x0b, 0xa9, 0x46, 0x9c,
681                 0xf0, 0xfd, 0xde, 0x5d, 0xa8, 0xe3, 0xee, 0xe9,
682                 0xf4, 0x9d, 0x34, 0x76, 0x39, 0xe7, 0xc3, 0x4a,
683                 0x84, 0x38, 0x92, 0x61, 0xf1, 0x12, 0x9f, 0x05,
684                 0xda, 0xdb, 0xc1, 0xd4, 0xb0, 0xa0, 0x27, 0x19,
685                 0xa0, 0x56, 0x5d, 0x9b, 0xcc, 0x47, 0x7c, 0x15,
686                 0x1d, 0x52, 0x66, 0xd5, 0xff, 0xef, 0x12, 0x23,
687                 0x86, 0xe2, 0xee, 0x81, 0x2c, 0x3d, 0x7d, 0x28,
688                 0xd5, 0x42, 0xdf, 0xdb, 0x75, 0x1c, 0xeb, 0xdf,
689                 0x13, 0x23, 0xd5, 0x17, 0x89, 0xea, 0xd7, 0x01,
690                 0xff, 0x57, 0x6a, 0x44, 0x61, 0xf4, 0xea, 0xbe,
691                 0x97, 0x9b, 0xc2, 0xb1, 0x9c, 0x5d, 0xff, 0x4f,
692                 0x73, 0x2d, 0x3f, 0x57, 0x28, 0x38, 0xbf, 0x3d,
693                 0x9f, 0xda, 0x49, 0x55, 0x8f, 0xb2, 0x77, 0xec,
694                 0x0f, 0xbc, 0xce, 0xb8, 0xc6, 0xe1, 0x03, 0xed,
695                 0x35, 0x9c, 0xf2, 0x4d, 0xa4, 0x29, 0x6c, 0xd6,
696                 0x6e, 0x05, 0x53, 0x46, 0xc1, 0x41, 0x09, 0x36,
697                 0x0b, 0x7d, 0xf4, 0x9e, 0x0f, 0xba, 0x86, 0x33,
698                 0xdd, 0xf1, 0xa7, 0xf7, 0xd5, 0x29, 0xa8, 0xa7,
699                 0x4d, 0xce, 0x0c, 0xf5, 0xb4, 0x6c, 0xd8, 0x27,
700                 0xb0, 0x87, 0x2a, 0x6f, 0x7f, 0x3f, 0x8f, 0xc3,
701                 0xe2, 0x3e, 0x94, 0xcf, 0x61, 0x4a, 0x09, 0x3d,
702                 0xf9, 0x55, 0x19, 0x31, 0xf2, 0xd2, 0x4a, 0x3e,
703                 0xc1, 0xf5, 0xed, 0x7c, 0x45, 0xb0, 0x0c, 0x7b,
704                 0xdd, 0xa6, 0x0a, 0x26, 0x66, 0xec, 0x85, 0x49,
705                 0x00, 0x38, 0x05, 0x7c, 0x9c, 0x1c, 0x92, 0xf5,
706                 0xf7, 0xdb, 0x5d, 0xbd, 0x61, 0x0c, 0xc9, 0xaf,
707                 0xfd, 0x57, 0x3f, 0xee, 0x2b, 0xad, 0x73, 0xef,
708                 0xa3, 0xc1, 0x66, 0x26, 0x44, 0x5e, 0xf9, 0x12,
709                 0x86, 0x66, 0xa9, 0x61, 0x75, 0xa1, 0xbc, 0x40,
710                 0x7f, 0xa8, 0x08, 0x02, 0xc0, 0x76, 0x0e, 0x76,
711                 0xb3, 0x26, 0x3d, 0x1c, 0x40, 0x65, 0xe4, 0x18,
712                 0x0f, 0x62, 0x17, 0x8f, 0x1e, 0x61, 0xb8, 0x08,
713                 0x83, 0x54, 0x42, 0x11, 0x03, 0x30, 0x8e, 0xb7,
714                 0xc1, 0x9c, 0xec, 0x69, 0x52, 0x95, 0xfb, 0x7b,
715                 0x1a, 0x0c, 0x20, 0x24, 0xf7, 0xb8, 0x38, 0x0c,
716                 0xb8, 0x7b, 0xb6, 0x69, 0x70, 0xd0, 0x61, 0xb9,
717                 0x70, 0x06, 0xc2, 0x5b, 0x20, 0x47, 0xf7, 0xd9,
718                 0x32, 0xc2, 0xf2, 0x90, 0xb6, 0x4d, 0xcd, 0x3c,
719                 0x6d, 0x74, 0xea, 0x82, 0x35, 0x1b, 0x08, 0x44,
720                 0xba, 0xb7, 0x33, 0x82, 0x33, 0x27, 0x54, 0x77,
721                 0x6e, 0x58, 0xfe, 0x46, 0x5a, 0xb4, 0x88, 0x53,
722                 0x8d, 0x9b, 0xb1, 0xab, 0xdf, 0x04, 0xe1, 0xfb,
723                 0xd7, 0x1e, 0xd7, 0x38, 0x64, 0x54, 0xba, 0xb0,
724                 0x6c, 0x84, 0x7a, 0x0f, 0xa7, 0x80, 0x6b, 0x86,
725                 0xd9, 0xc9, 0xc6, 0x31, 0x95, 0xfa, 0x8a, 0x2c,
726                 0x14, 0xe1, 0x85, 0x66, 0x27, 0xfd, 0x63, 0x3e,
727                 0xf0, 0xfa, 0x81, 0xc9, 0x89, 0x4f, 0xe2, 0x6a,
728                 0x8c, 0x17, 0xb5, 0xc7, 0x9f, 0x5d, 0x3f, 0x6b,
729                 0x3f, 0xcd, 0x13, 0x7a, 0x3c, 0xe6, 0x4e, 0xfa,
730                 0x7a, 0x10, 0xb8, 0x7c, 0x40, 0xec, 0x93, 0x11,
731                 0x1f, 0xd0, 0x9e, 0xc3, 0x56, 0xb9, 0xf5, 0x21,
732                 0x18, 0x41, 0x31, 0xea, 0x01, 0x8d, 0xea, 0x1c,
733                 0x95, 0x5e, 0x56, 0x33, 0xbc, 0x7a, 0x3f, 0x6f
734 };
735
736 static const uint8_t AES_CBC_ciphertext_768B[] = {
737                 0x3e, 0x7f, 0x9e, 0x4c, 0x88, 0x15, 0x68, 0x69,
738                 0x10, 0x09, 0xe1, 0xa7, 0x0f, 0x27, 0x88, 0x2d,
739                 0x90, 0x73, 0x4f, 0x67, 0xd3, 0x8b, 0xaf, 0xa1,
740                 0x2c, 0x37, 0xa5, 0x6c, 0x7c, 0xbd, 0x95, 0x4c,
741                 0x82, 0xcf, 0x05, 0x49, 0x16, 0x5c, 0xe7, 0x06,
742                 0xd4, 0xcb, 0x55, 0x65, 0x9a, 0xd0, 0xe1, 0x46,
743                 0x3a, 0x37, 0x71, 0xad, 0xb0, 0xb4, 0x99, 0x1e,
744                 0x23, 0x57, 0x48, 0x96, 0x9c, 0xc5, 0xc4, 0xdb,
745                 0x64, 0x3e, 0xc9, 0x7f, 0x90, 0x5a, 0xa0, 0x08,
746                 0x75, 0x4c, 0x09, 0x06, 0x31, 0x6e, 0x59, 0x29,
747                 0xfc, 0x2f, 0x72, 0xde, 0xf2, 0x40, 0x5a, 0xfe,
748                 0xd3, 0x66, 0x64, 0xb8, 0x9c, 0xc9, 0xa6, 0x1f,
749                 0xc3, 0x52, 0xcd, 0xb5, 0xd1, 0x4f, 0x43, 0x3f,
750                 0xf4, 0x59, 0x25, 0xc4, 0xdd, 0x3e, 0x58, 0x7c,
751                 0x21, 0xd6, 0x21, 0xce, 0xa4, 0xbe, 0x08, 0x23,
752                 0x46, 0x68, 0xc0, 0x00, 0x91, 0x47, 0xca, 0x9b,
753                 0xe0, 0xb4, 0xe3, 0xab, 0xbf, 0xcf, 0x68, 0x26,
754                 0x97, 0x23, 0x09, 0x93, 0x64, 0x8f, 0x57, 0x59,
755                 0xe2, 0x41, 0x7c, 0xa2, 0x48, 0x7e, 0xd5, 0x2c,
756                 0x54, 0x09, 0x1b, 0x07, 0x94, 0xca, 0x39, 0x83,
757                 0xdd, 0xf4, 0x7a, 0x1d, 0x2d, 0xdd, 0x67, 0xf7,
758                 0x3c, 0x30, 0x89, 0x3e, 0xc1, 0xdc, 0x1d, 0x8f,
759                 0xfc, 0xb1, 0xe9, 0x13, 0x31, 0xb0, 0x16, 0xdb,
760                 0x88, 0xf2, 0x32, 0x7e, 0x73, 0xa3, 0xdf, 0x08,
761                 0x6b, 0x53, 0x92, 0x08, 0xc9, 0x9d, 0x98, 0xb2,
762                 0xf4, 0x8c, 0xb1, 0x95, 0xdc, 0xb6, 0xfc, 0xec,
763                 0xf1, 0xc9, 0x0d, 0x6d, 0x42, 0x2c, 0xf5, 0x38,
764                 0x29, 0xf4, 0xd8, 0x98, 0x0f, 0xb0, 0x81, 0xa5,
765                 0xaa, 0xe6, 0x1f, 0x6e, 0x87, 0x32, 0x1b, 0x02,
766                 0x07, 0x57, 0x38, 0x83, 0xf3, 0xe4, 0x54, 0x7c,
767                 0xa8, 0x43, 0xdf, 0x3f, 0x42, 0xfd, 0x67, 0x28,
768                 0x06, 0x4d, 0xea, 0xce, 0x1f, 0x84, 0x4a, 0xcd,
769                 0x8c, 0x61, 0x5e, 0x8f, 0x61, 0xed, 0x84, 0x03,
770                 0x53, 0x6a, 0x9e, 0xbf, 0x68, 0x83, 0xa7, 0x42,
771                 0x56, 0x57, 0xcd, 0x45, 0x29, 0xfc, 0x7b, 0x07,
772                 0xfc, 0xe9, 0xb9, 0x42, 0xfd, 0x29, 0xd5, 0xfd,
773                 0x98, 0x11, 0xd1, 0x8d, 0x67, 0x29, 0x47, 0x61,
774                 0xd8, 0x27, 0x37, 0x79, 0x29, 0xd1, 0x94, 0x6f,
775                 0x8d, 0xf3, 0x1b, 0x3d, 0x6a, 0xb1, 0x59, 0xef,
776                 0x1b, 0xd4, 0x70, 0x0e, 0xac, 0xab, 0xa0, 0x2b,
777                 0x1f, 0x5e, 0x04, 0xf0, 0x0e, 0x35, 0x72, 0x90,
778                 0xfc, 0xcf, 0x86, 0x43, 0xea, 0x45, 0x6d, 0x22,
779                 0x63, 0x06, 0x1a, 0x58, 0xd7, 0x2d, 0xc5, 0xb0,
780                 0x60, 0x69, 0xe8, 0x53, 0xc2, 0xa2, 0x57, 0x83,
781                 0xc4, 0x31, 0xb4, 0xc6, 0xb3, 0xa1, 0x77, 0xb3,
782                 0x1c, 0xca, 0x89, 0x3f, 0xf5, 0x10, 0x3b, 0x36,
783                 0x31, 0x7d, 0x00, 0x46, 0x00, 0x92, 0xa0, 0xa0,
784                 0x34, 0xd8, 0x5e, 0x62, 0xa9, 0xe0, 0x23, 0x37,
785                 0x50, 0x85, 0xc7, 0x3a, 0x20, 0xa3, 0x98, 0xc0,
786                 0xac, 0x20, 0x06, 0x0f, 0x17, 0x3c, 0xfc, 0x43,
787                 0x8c, 0x9d, 0xec, 0xf5, 0x9a, 0x35, 0x96, 0xf7,
788                 0xb7, 0x4c, 0xf9, 0x69, 0xf8, 0xd4, 0x1e, 0x9e,
789                 0xf9, 0x7c, 0xc4, 0xd2, 0x11, 0x14, 0x41, 0xb9,
790                 0x89, 0xd6, 0x07, 0xd2, 0x37, 0x07, 0x5e, 0x5e,
791                 0xae, 0x60, 0xdc, 0xe4, 0xeb, 0x38, 0x48, 0x6d,
792                 0x95, 0x8d, 0x71, 0xf2, 0xba, 0xda, 0x5f, 0x08,
793                 0x9d, 0x4a, 0x0f, 0x56, 0x90, 0x64, 0xab, 0xb6,
794                 0x88, 0x22, 0xa8, 0x90, 0x1f, 0x76, 0x2c, 0x83,
795                 0x43, 0xce, 0x32, 0x55, 0x45, 0x84, 0x57, 0x43,
796                 0xf9, 0xa8, 0xd1, 0x4f, 0xe3, 0xc1, 0x72, 0x9c,
797                 0xeb, 0x64, 0xf7, 0xe4, 0x61, 0x2b, 0x93, 0xd1,
798                 0x1f, 0xbb, 0x5c, 0xff, 0xa1, 0x59, 0x69, 0xcf,
799                 0xf7, 0xaf, 0x58, 0x45, 0xd5, 0x3e, 0x98, 0x7d,
800                 0x26, 0x39, 0x5c, 0x75, 0x3c, 0x4a, 0xbf, 0x5e,
801                 0x12, 0x10, 0xb0, 0x93, 0x0f, 0x86, 0x82, 0xcf,
802                 0xb2, 0xec, 0x70, 0x5c, 0x0b, 0xad, 0x5d, 0x63,
803                 0x65, 0x32, 0xa6, 0x04, 0x58, 0x03, 0x91, 0x2b,
804                 0xdb, 0x8f, 0xd3, 0xa3, 0x2b, 0x3a, 0xf5, 0xa1,
805                 0x62, 0x6c, 0xb6, 0xf0, 0x13, 0x3b, 0x8c, 0x07,
806                 0x10, 0x82, 0xc9, 0x56, 0x24, 0x87, 0xfc, 0x56,
807                 0xe8, 0xef, 0x90, 0x8b, 0xd6, 0x48, 0xda, 0x53,
808                 0x04, 0x49, 0x41, 0xa4, 0x67, 0xe0, 0x33, 0x24,
809                 0x6b, 0x9c, 0x07, 0x55, 0x4c, 0x5d, 0xe9, 0x35,
810                 0xfa, 0xbd, 0xea, 0xa8, 0x3f, 0xe9, 0xf5, 0x20,
811                 0x5c, 0x60, 0x0f, 0x0d, 0x24, 0xcb, 0x1a, 0xd6,
812                 0xe8, 0x5c, 0xa8, 0x42, 0xae, 0xd0, 0xd2, 0xf2,
813                 0xa8, 0xbe, 0xea, 0x0f, 0x8d, 0xfb, 0x81, 0xa3,
814                 0xa4, 0xef, 0xb7, 0x3e, 0x91, 0xbd, 0x26, 0x0f,
815                 0x8e, 0xf1, 0xb2, 0xa5, 0x47, 0x06, 0xfa, 0x40,
816                 0x8b, 0x31, 0x7a, 0x5a, 0x74, 0x2a, 0x0a, 0x7c,
817                 0x62, 0x5d, 0x39, 0xa4, 0xae, 0x14, 0x85, 0x08,
818                 0x5b, 0x20, 0x85, 0xf1, 0x57, 0x6e, 0x71, 0x13,
819                 0x4e, 0x2b, 0x49, 0x87, 0x01, 0xdf, 0x37, 0xed,
820                 0x28, 0xee, 0x4d, 0xa1, 0xf4, 0xb3, 0x3b, 0xba,
821                 0x2d, 0xb3, 0x46, 0x17, 0x84, 0x80, 0x9d, 0xd7,
822                 0x93, 0x1f, 0x28, 0x7c, 0xf5, 0xf9, 0xd6, 0x85,
823                 0x8c, 0xa5, 0x44, 0xe9, 0x2c, 0x65, 0x51, 0x5f,
824                 0x53, 0x7a, 0x09, 0xd9, 0x30, 0x16, 0x95, 0x89,
825                 0x9c, 0x0b, 0xef, 0x90, 0x6d, 0x23, 0xd3, 0x48,
826                 0x57, 0x3b, 0x55, 0x69, 0x96, 0xfc, 0xf7, 0x52,
827                 0x92, 0x38, 0x36, 0xbf, 0xa9, 0x0a, 0xbb, 0x68,
828                 0x45, 0x08, 0x25, 0xee, 0x59, 0xfe, 0xee, 0xf2,
829                 0x2c, 0xd4, 0x5f, 0x78, 0x59, 0x0d, 0x90, 0xf1,
830                 0xd7, 0xe4, 0x39, 0x0e, 0x46, 0x36, 0xf5, 0x75,
831                 0x03, 0x3c, 0x28, 0xfb, 0xfa, 0x8f, 0xef, 0xc9,
832                 0x61, 0x00, 0x94, 0xc3, 0xd2, 0x0f, 0xd9, 0xda
833 };
834
835 static const uint8_t AES_CBC_ciphertext_1024B[] = {
836                 0x7d, 0x01, 0x7e, 0x2f, 0x92, 0xb3, 0xea, 0x72,
837                 0x4a, 0x3f, 0x10, 0xf9, 0x2b, 0xb0, 0xd5, 0xb9,
838                 0x19, 0x68, 0x94, 0xe9, 0x93, 0xe9, 0xd5, 0x26,
839                 0x20, 0x44, 0xe2, 0x47, 0x15, 0x8d, 0x75, 0x48,
840                 0x8e, 0xe4, 0x40, 0x81, 0xb5, 0x06, 0xa8, 0xb8,
841                 0x0e, 0x0f, 0x3b, 0xbc, 0x5b, 0xbe, 0x3b, 0xa2,
842                 0x2a, 0x0c, 0x48, 0x98, 0x19, 0xdf, 0xe9, 0x25,
843                 0x75, 0xab, 0x93, 0x44, 0xb1, 0x72, 0x70, 0xbb,
844                 0x20, 0xcf, 0x78, 0xe9, 0x4d, 0xc6, 0xa9, 0xa9,
845                 0x84, 0x78, 0xc5, 0xc0, 0xc4, 0xc9, 0x79, 0x1a,
846                 0xbc, 0x61, 0x25, 0x5f, 0xac, 0x01, 0x03, 0xb7,
847                 0xef, 0x07, 0xf2, 0x62, 0x98, 0xee, 0xe3, 0xad,
848                 0x94, 0x75, 0x30, 0x67, 0xb9, 0x15, 0x00, 0xe7,
849                 0x11, 0x32, 0x2e, 0x6b, 0x55, 0x9f, 0xac, 0x68,
850                 0xde, 0x61, 0x05, 0x80, 0x01, 0xf3, 0xad, 0xab,
851                 0xaf, 0x45, 0xe0, 0xf4, 0x68, 0x5c, 0xc0, 0x52,
852                 0x92, 0xc8, 0x21, 0xb6, 0xf5, 0x8a, 0x1d, 0xbb,
853                 0xfc, 0x4a, 0x11, 0x62, 0xa2, 0xc4, 0xf1, 0x2d,
854                 0x0e, 0xb2, 0xc7, 0x17, 0x34, 0xb4, 0x2a, 0x54,
855                 0x81, 0xc2, 0x1e, 0xcf, 0x51, 0x0a, 0x76, 0x54,
856                 0xf1, 0x48, 0x0d, 0x5c, 0xcd, 0x38, 0x3e, 0x38,
857                 0x3e, 0xf8, 0x46, 0x1d, 0x00, 0xf5, 0x62, 0xe1,
858                 0x5c, 0xb7, 0x8d, 0xce, 0xd0, 0x3f, 0xbb, 0x22,
859                 0xf1, 0xe5, 0xb1, 0xa0, 0x58, 0x5e, 0x3c, 0x0f,
860                 0x15, 0xd1, 0xac, 0x3e, 0xc7, 0x72, 0xc4, 0xde,
861                 0x8b, 0x95, 0x3e, 0x91, 0xf7, 0x1d, 0x04, 0x9a,
862                 0xc8, 0xe4, 0xbf, 0xd3, 0x22, 0xca, 0x4a, 0xdc,
863                 0xb6, 0x16, 0x79, 0x81, 0x75, 0x2f, 0x6b, 0xa7,
864                 0x04, 0x98, 0xa7, 0x4e, 0xc1, 0x19, 0x90, 0x33,
865                 0x33, 0x3c, 0x7f, 0xdd, 0xac, 0x09, 0x0c, 0xc3,
866                 0x91, 0x34, 0x74, 0xab, 0xa5, 0x35, 0x0a, 0x13,
867                 0xc3, 0x56, 0x67, 0x6d, 0x1a, 0x3e, 0xbf, 0x56,
868                 0x06, 0x67, 0x15, 0x5f, 0xfc, 0x8b, 0xa2, 0x3c,
869                 0x5e, 0xaf, 0x56, 0x1f, 0xe3, 0x2e, 0x9d, 0x0a,
870                 0xf9, 0x9b, 0xc7, 0xb5, 0x03, 0x1c, 0x68, 0x99,
871                 0xfa, 0x3c, 0x37, 0x59, 0xc1, 0xf7, 0x6a, 0x83,
872                 0x22, 0xee, 0xca, 0x7f, 0x7d, 0x49, 0xe6, 0x48,
873                 0x84, 0x54, 0x7a, 0xff, 0xb3, 0x72, 0x21, 0xd8,
874                 0x7a, 0x5d, 0xb1, 0x4b, 0xcc, 0x01, 0x6f, 0x90,
875                 0xc6, 0x68, 0x1c, 0x2c, 0xa1, 0xe2, 0x74, 0x40,
876                 0x26, 0x9b, 0x57, 0x53, 0xa3, 0x7c, 0x0b, 0x0d,
877                 0xcf, 0x05, 0x5d, 0x62, 0x4f, 0x75, 0x06, 0x62,
878                 0x1f, 0x26, 0x32, 0xaa, 0x25, 0xcc, 0x26, 0x8d,
879                 0xae, 0x01, 0x47, 0xa3, 0x00, 0x42, 0xe2, 0x4c,
880                 0xee, 0x29, 0xa2, 0x81, 0xa0, 0xfd, 0xeb, 0xff,
881                 0x9a, 0x66, 0x6e, 0x47, 0x5b, 0xab, 0x93, 0x5a,
882                 0x02, 0x6d, 0x6f, 0xf2, 0x6e, 0x02, 0x9d, 0xb1,
883                 0xab, 0x56, 0xdc, 0x8b, 0x9b, 0x17, 0xa8, 0xfb,
884                 0x87, 0x42, 0x7c, 0x91, 0x1e, 0x14, 0xc6, 0x6f,
885                 0xdc, 0xf0, 0x27, 0x30, 0xfa, 0x3f, 0xc4, 0xad,
886                 0x57, 0x85, 0xd2, 0xc9, 0x32, 0x2c, 0x13, 0xa6,
887                 0x04, 0x04, 0x50, 0x05, 0x2f, 0x72, 0xd9, 0x44,
888                 0x55, 0x6e, 0x93, 0x40, 0xed, 0x7e, 0xd4, 0x40,
889                 0x3e, 0x88, 0x3b, 0x8b, 0xb6, 0xeb, 0xc6, 0x5d,
890                 0x9c, 0x99, 0xa1, 0xcf, 0x30, 0xb2, 0xdc, 0x48,
891                 0x8a, 0x01, 0xa7, 0x61, 0x77, 0x50, 0x14, 0xf3,
892                 0x0c, 0x49, 0x53, 0xb3, 0xb4, 0xb4, 0x28, 0x41,
893                 0x4a, 0x2d, 0xd2, 0x4d, 0x2a, 0x30, 0x31, 0x83,
894                 0x03, 0x5e, 0xaa, 0xd3, 0xa3, 0xd1, 0xa1, 0xca,
895                 0x62, 0xf0, 0xe1, 0xf2, 0xff, 0xf0, 0x19, 0xa6,
896                 0xde, 0x22, 0x47, 0xb5, 0x28, 0x7d, 0xf7, 0x07,
897                 0x16, 0x0d, 0xb1, 0x55, 0x81, 0x95, 0xe5, 0x1d,
898                 0x4d, 0x78, 0xa9, 0x3e, 0xce, 0xe3, 0x1c, 0xf9,
899                 0x47, 0xc8, 0xec, 0xc5, 0xc5, 0x93, 0x4c, 0x34,
900                 0x20, 0x6b, 0xee, 0x9a, 0xe6, 0x86, 0x57, 0x58,
901                 0xd5, 0x58, 0xf1, 0x33, 0x10, 0x29, 0x9e, 0x93,
902                 0x2f, 0xf5, 0x90, 0x00, 0x17, 0x67, 0x4f, 0x39,
903                 0x18, 0xe1, 0xcf, 0x55, 0x78, 0xbb, 0xe6, 0x29,
904                 0x3e, 0x77, 0xd5, 0x48, 0xb7, 0x42, 0x72, 0x53,
905                 0x27, 0xfa, 0x5b, 0xe0, 0x36, 0x14, 0x97, 0xb8,
906                 0x9b, 0x3c, 0x09, 0x77, 0xc1, 0x0a, 0xe4, 0xa2,
907                 0x63, 0xfc, 0xbe, 0x5c, 0x17, 0xcf, 0x01, 0xf5,
908                 0x03, 0x0f, 0x17, 0xbc, 0x93, 0xdd, 0x5f, 0xe2,
909                 0xf3, 0x08, 0xa8, 0xb1, 0x85, 0xb6, 0x34, 0x3f,
910                 0x87, 0x42, 0xa5, 0x42, 0x3b, 0x0e, 0xd6, 0x83,
911                 0x6a, 0xfd, 0x5d, 0xc9, 0x67, 0xd5, 0x51, 0xc9,
912                 0x2a, 0x4e, 0x91, 0xb0, 0x59, 0xb2, 0x0f, 0xa2,
913                 0xe6, 0x47, 0x73, 0xc2, 0xa2, 0xae, 0xbb, 0xc8,
914                 0x42, 0xa3, 0x2a, 0x27, 0x29, 0x48, 0x8c, 0x54,
915                 0x6c, 0xec, 0x00, 0x2a, 0x42, 0xa3, 0x7a, 0x0f,
916                 0x12, 0x66, 0x6b, 0x96, 0xf6, 0xd0, 0x56, 0x4f,
917                 0x49, 0x5c, 0x47, 0xec, 0x05, 0x62, 0x54, 0xb2,
918                 0x64, 0x5a, 0x69, 0x1f, 0x19, 0xb4, 0x84, 0x5c,
919                 0xbe, 0x48, 0x8e, 0xfc, 0x58, 0x21, 0xce, 0xfa,
920                 0xaa, 0x84, 0xd2, 0xc1, 0x08, 0xb3, 0x87, 0x0f,
921                 0x4f, 0xa3, 0x3a, 0xb6, 0x44, 0xbe, 0x2e, 0x9a,
922                 0xdd, 0xb5, 0x44, 0x80, 0xca, 0xf4, 0xc3, 0x6e,
923                 0xba, 0x93, 0x77, 0xe0, 0x53, 0xfb, 0x37, 0xfb,
924                 0x88, 0xc3, 0x1f, 0x25, 0xde, 0x3e, 0x11, 0xf4,
925                 0x89, 0xe7, 0xd1, 0x3b, 0xb4, 0x23, 0xcb, 0x70,
926                 0xba, 0x35, 0x97, 0x7c, 0xbe, 0x84, 0x13, 0xcf,
927                 0xe0, 0x4d, 0x33, 0x91, 0x71, 0x85, 0xbb, 0x4b,
928                 0x97, 0x32, 0x5d, 0xa0, 0xb9, 0x8f, 0xdc, 0x27,
929                 0x5a, 0xeb, 0x71, 0xf1, 0xd5, 0x0d, 0x65, 0xb4,
930                 0x22, 0x81, 0xde, 0xa7, 0x58, 0x20, 0x0b, 0x18,
931                 0x11, 0x76, 0x5c, 0xe6, 0x6a, 0x2c, 0x99, 0x69,
932                 0xdc, 0xed, 0x67, 0x08, 0x5d, 0x5e, 0xe9, 0x1e,
933                 0x55, 0x70, 0xc1, 0x5a, 0x76, 0x1b, 0x8d, 0x2e,
934                 0x0d, 0xf9, 0xcc, 0x30, 0x8c, 0x44, 0x0f, 0x63,
935                 0x8c, 0x42, 0x8a, 0x9f, 0x4c, 0xd1, 0x48, 0x28,
936                 0x8a, 0xf5, 0x56, 0x2e, 0x23, 0x12, 0xfe, 0x67,
937                 0x9a, 0x13, 0x65, 0x75, 0x83, 0xf1, 0x3c, 0x98,
938                 0x07, 0x6b, 0xb7, 0x27, 0x5b, 0xf0, 0x70, 0xda,
939                 0x30, 0xf8, 0x74, 0x4e, 0x7a, 0x32, 0x84, 0xcc,
940                 0x0e, 0xcd, 0x80, 0x8b, 0x82, 0x31, 0x9a, 0x48,
941                 0xcf, 0x75, 0x00, 0x1f, 0x4f, 0xe0, 0x8e, 0xa3,
942                 0x6a, 0x2c, 0xd4, 0x73, 0x4c, 0x63, 0x7c, 0xa6,
943                 0x4d, 0x5e, 0xfd, 0x43, 0x3b, 0x27, 0xe1, 0x5e,
944                 0xa3, 0xa9, 0x5c, 0x3b, 0x60, 0xdd, 0xc6, 0x8d,
945                 0x5a, 0xf1, 0x3e, 0x89, 0x4b, 0x24, 0xcf, 0x01,
946                 0x3a, 0x2d, 0x44, 0xe7, 0xda, 0xe7, 0xa1, 0xac,
947                 0x11, 0x05, 0x0c, 0xa9, 0x7a, 0x82, 0x8c, 0x5c,
948                 0x29, 0x68, 0x9c, 0x73, 0x13, 0xcc, 0x67, 0x32,
949                 0x11, 0x5e, 0xe5, 0xcc, 0x8c, 0xf5, 0xa7, 0x52,
950                 0x83, 0x9a, 0x70, 0xef, 0xde, 0x55, 0x9c, 0xc7,
951                 0x8a, 0xed, 0xad, 0x28, 0x4a, 0xc5, 0x92, 0x6d,
952                 0x8e, 0x47, 0xca, 0xe3, 0xf8, 0x77, 0xb5, 0x26,
953                 0x64, 0x84, 0xc2, 0xf1, 0xd7, 0xae, 0x0c, 0xb9,
954                 0x39, 0x0f, 0x43, 0x6b, 0xe9, 0xe0, 0x09, 0x4b,
955                 0xe5, 0xe3, 0x17, 0xa6, 0x68, 0x69, 0x46, 0xf4,
956                 0xf0, 0x68, 0x7f, 0x2f, 0x1c, 0x7e, 0x4c, 0xd2,
957                 0xb5, 0xc6, 0x16, 0x85, 0xcf, 0x02, 0x4c, 0x89,
958                 0x0b, 0x25, 0xb0, 0xeb, 0xf3, 0x77, 0x08, 0x6a,
959                 0x46, 0x5c, 0xf6, 0x2f, 0xf1, 0x24, 0xc3, 0x4d,
960                 0x80, 0x60, 0x4d, 0x69, 0x98, 0xde, 0xc7, 0xa1,
961                 0xf6, 0x4e, 0x18, 0x0c, 0x2a, 0xb0, 0xb2, 0xe0,
962                 0x46, 0xe7, 0x49, 0x37, 0xc8, 0x5a, 0x23, 0x24,
963                 0xe3, 0x0f, 0xcc, 0x92, 0xb4, 0x8d, 0xdc, 0x9e
964 };
965
966 static const uint8_t AES_CBC_ciphertext_1280B[] = {
967                 0x91, 0x99, 0x5e, 0x9e, 0x84, 0xff, 0x59, 0x45,
968                 0xc1, 0xf4, 0xbc, 0x9c, 0xb9, 0x30, 0x6c, 0x51,
969                 0x73, 0x52, 0xb4, 0x44, 0x09, 0x79, 0xe2, 0x89,
970                 0x75, 0xeb, 0x54, 0x26, 0xce, 0xd8, 0x24, 0x98,
971                 0xaa, 0xf8, 0x13, 0x16, 0x68, 0x58, 0xc4, 0x82,
972                 0x0e, 0x31, 0xd3, 0x6a, 0x13, 0x58, 0x31, 0xe9,
973                 0x3a, 0xc1, 0x8b, 0xc5, 0x3f, 0x50, 0x42, 0xd1,
974                 0x93, 0xe4, 0x9b, 0x65, 0x2b, 0xf4, 0x1d, 0x9e,
975                 0x2d, 0xdb, 0x48, 0xef, 0x9a, 0x01, 0x68, 0xb6,
976                 0xea, 0x7a, 0x2b, 0xad, 0xfe, 0x77, 0x44, 0x7e,
977                 0x5a, 0xc5, 0x64, 0xb4, 0xfe, 0x5c, 0x80, 0xf3,
978                 0x20, 0x7e, 0xaf, 0x5b, 0xf8, 0xd1, 0x38, 0xa0,
979                 0x8d, 0x09, 0x77, 0x06, 0xfe, 0xf5, 0xf4, 0xe4,
980                 0xee, 0xb8, 0x95, 0x27, 0xed, 0x07, 0xb8, 0xaa,
981                 0x25, 0xb4, 0xe1, 0x4c, 0xeb, 0x3f, 0xdb, 0x39,
982                 0x66, 0x28, 0x1b, 0x60, 0x42, 0x8b, 0x99, 0xd9,
983                 0x49, 0xd6, 0x8c, 0xa4, 0x9d, 0xd8, 0x93, 0x58,
984                 0x8f, 0xfa, 0xd3, 0xf7, 0x37, 0x9c, 0x88, 0xab,
985                 0x16, 0x50, 0xfe, 0x01, 0x1f, 0x88, 0x48, 0xbe,
986                 0x21, 0xa9, 0x90, 0x9e, 0x73, 0xe9, 0x82, 0xf7,
987                 0xbf, 0x4b, 0x43, 0xf4, 0xbf, 0x22, 0x3c, 0x45,
988                 0x47, 0x95, 0x5b, 0x49, 0x71, 0x07, 0x1c, 0x8b,
989                 0x49, 0xa4, 0xa3, 0x49, 0xc4, 0x5f, 0xb1, 0xf5,
990                 0xe3, 0x6b, 0xf1, 0xdc, 0xea, 0x92, 0x7b, 0x29,
991                 0x40, 0xc9, 0x39, 0x5f, 0xdb, 0xbd, 0xf3, 0x6a,
992                 0x09, 0x9b, 0x2a, 0x5e, 0xc7, 0x0b, 0x25, 0x94,
993                 0x55, 0x71, 0x9c, 0x7e, 0x0e, 0xb4, 0x08, 0x12,
994                 0x8c, 0x6e, 0x77, 0xb8, 0x29, 0xf1, 0xc6, 0x71,
995                 0x04, 0x40, 0x77, 0x18, 0x3f, 0x01, 0x09, 0x9c,
996                 0x23, 0x2b, 0x5d, 0x2a, 0x88, 0x20, 0x23, 0x59,
997                 0x74, 0x2a, 0x67, 0x8f, 0xb7, 0xba, 0x38, 0x9f,
998                 0x0f, 0xcf, 0x94, 0xdf, 0xe1, 0x8f, 0x35, 0x5e,
999                 0x34, 0x0c, 0x32, 0x92, 0x2b, 0x23, 0x81, 0xf4,
1000                 0x73, 0xa0, 0x5a, 0x2a, 0xbd, 0xa6, 0x6b, 0xae,
1001                 0x43, 0xe2, 0xdc, 0x01, 0xc1, 0xc6, 0xc3, 0x04,
1002                 0x06, 0xbb, 0xb0, 0x89, 0xb3, 0x4e, 0xbd, 0x81,
1003                 0x1b, 0x03, 0x63, 0x93, 0xed, 0x4e, 0xf6, 0xe5,
1004                 0x94, 0x6f, 0xd6, 0xf3, 0x20, 0xf3, 0xbc, 0x30,
1005                 0xc5, 0xd6, 0xbe, 0x1c, 0x05, 0x34, 0x26, 0x4d,
1006                 0x46, 0x5e, 0x56, 0x63, 0xfb, 0xdb, 0xcd, 0xed,
1007                 0xb0, 0x7f, 0x83, 0x94, 0x55, 0x54, 0x2f, 0xab,
1008                 0xc9, 0xb7, 0x16, 0x4f, 0x9e, 0x93, 0x25, 0xd7,
1009                 0x9f, 0x39, 0x2b, 0x63, 0xcf, 0x1e, 0xa3, 0x0e,
1010                 0x28, 0x47, 0x8a, 0x5f, 0x40, 0x02, 0x89, 0x1f,
1011                 0x83, 0xe7, 0x87, 0xd1, 0x90, 0x17, 0xb8, 0x27,
1012                 0x64, 0xe1, 0xe1, 0x48, 0x5a, 0x55, 0x74, 0x99,
1013                 0x27, 0x9d, 0x05, 0x67, 0xda, 0x70, 0x12, 0x8f,
1014                 0x94, 0x96, 0xfd, 0x36, 0xa4, 0x1d, 0x22, 0xe5,
1015                 0x0b, 0xe5, 0x2f, 0x38, 0x55, 0xa3, 0x5d, 0x0b,
1016                 0xcf, 0xd4, 0xa9, 0xb8, 0xd6, 0x9a, 0x16, 0x2e,
1017                 0x6c, 0x4a, 0x25, 0x51, 0x7a, 0x09, 0x48, 0xdd,
1018                 0xf0, 0xa3, 0x5b, 0x08, 0x1e, 0x2f, 0x03, 0x91,
1019                 0x80, 0xe8, 0x0f, 0xe9, 0x5a, 0x2f, 0x90, 0xd3,
1020                 0x64, 0xed, 0xd7, 0x51, 0x17, 0x66, 0x53, 0x40,
1021                 0x43, 0x74, 0xef, 0x0a, 0x0d, 0x49, 0x41, 0xf2,
1022                 0x67, 0x6e, 0xea, 0x14, 0xc8, 0x74, 0xd6, 0xa9,
1023                 0xb9, 0x6a, 0xe3, 0xec, 0x7d, 0xe8, 0x6a, 0x21,
1024                 0x3a, 0x52, 0x42, 0xfe, 0x9a, 0x15, 0x6d, 0x60,
1025                 0x64, 0x88, 0xc5, 0xb2, 0x8b, 0x15, 0x2c, 0xff,
1026                 0xe2, 0x35, 0xc3, 0xee, 0x9f, 0xcd, 0x82, 0xd9,
1027                 0x14, 0x35, 0x2a, 0xb7, 0xf5, 0x2f, 0x7b, 0xbc,
1028                 0x01, 0xfd, 0xa8, 0xe0, 0x21, 0x4e, 0x73, 0xf9,
1029                 0xf2, 0xb0, 0x79, 0xc9, 0x10, 0x52, 0x8f, 0xa8,
1030                 0x3e, 0x3b, 0xbe, 0xc5, 0xde, 0xf6, 0x53, 0xe3,
1031                 0x1c, 0x25, 0x3a, 0x1f, 0x13, 0xbf, 0x13, 0xbb,
1032                 0x94, 0xc2, 0x97, 0x43, 0x64, 0x47, 0x8f, 0x76,
1033                 0xd7, 0xaa, 0xeb, 0xa4, 0x03, 0x50, 0x0c, 0x10,
1034                 0x50, 0xd8, 0xf7, 0x75, 0x52, 0x42, 0xe2, 0x94,
1035                 0x67, 0xf4, 0x60, 0xfb, 0x21, 0x9b, 0x7a, 0x05,
1036                 0x50, 0x7c, 0x1b, 0x4a, 0x8b, 0x29, 0xe1, 0xac,
1037                 0xd7, 0x99, 0xfd, 0x0d, 0x65, 0x92, 0xcd, 0x23,
1038                 0xa7, 0x35, 0x8e, 0x13, 0xf2, 0xe4, 0x10, 0x74,
1039                 0xc6, 0x4f, 0x19, 0xf7, 0x01, 0x0b, 0x46, 0xab,
1040                 0xef, 0x8d, 0x4a, 0x4a, 0xfa, 0xda, 0xf3, 0xfb,
1041                 0x40, 0x28, 0x88, 0xa2, 0x65, 0x98, 0x4d, 0x88,
1042                 0xc7, 0xbf, 0x00, 0xc8, 0xd0, 0x91, 0xcb, 0x89,
1043                 0x2f, 0xb0, 0x85, 0xfc, 0xa1, 0xc1, 0x9e, 0x83,
1044                 0x88, 0xad, 0x95, 0xc0, 0x31, 0xa0, 0xad, 0xa2,
1045                 0x42, 0xb5, 0xe7, 0x55, 0xd4, 0x93, 0x5a, 0x74,
1046                 0x4e, 0x41, 0xc3, 0xcf, 0x96, 0x83, 0x46, 0xa1,
1047                 0xb7, 0x5b, 0xb1, 0x34, 0x67, 0x4e, 0xb1, 0xd7,
1048                 0x40, 0x20, 0x72, 0xe9, 0xc8, 0x74, 0xb7, 0xde,
1049                 0x72, 0x29, 0x77, 0x4c, 0x74, 0x7e, 0xcc, 0x18,
1050                 0xa5, 0x8d, 0x79, 0x8c, 0xd6, 0x6e, 0xcb, 0xd9,
1051                 0xe1, 0x61, 0xe7, 0x36, 0xbc, 0x37, 0xea, 0xee,
1052                 0xd8, 0x3c, 0x5e, 0x7c, 0x47, 0x50, 0xd5, 0xec,
1053                 0x37, 0xc5, 0x63, 0xc3, 0xc9, 0x99, 0x23, 0x9f,
1054                 0x64, 0x39, 0xdf, 0x13, 0x96, 0x6d, 0xea, 0x08,
1055                 0x0c, 0x27, 0x2d, 0xfe, 0x0f, 0xc2, 0xa3, 0x97,
1056                 0x04, 0x12, 0x66, 0x0d, 0x94, 0xbf, 0xbe, 0x3e,
1057                 0xb9, 0xcf, 0x8e, 0xc1, 0x9d, 0xb1, 0x64, 0x17,
1058                 0x54, 0x92, 0x3f, 0x0a, 0x51, 0xc8, 0xf5, 0x82,
1059                 0x98, 0x73, 0x03, 0xc0, 0x5a, 0x51, 0x01, 0x67,
1060                 0xb4, 0x01, 0x04, 0x06, 0xbc, 0x37, 0xde, 0x96,
1061                 0x23, 0x3c, 0xce, 0x98, 0x3f, 0xd6, 0x51, 0x1b,
1062                 0x01, 0x83, 0x0a, 0x1c, 0xf9, 0xeb, 0x7e, 0x72,
1063                 0xa9, 0x51, 0x23, 0xc8, 0xd7, 0x2f, 0x12, 0xbc,
1064                 0x08, 0xac, 0x07, 0xe7, 0xa7, 0xe6, 0x46, 0xae,
1065                 0x54, 0xa3, 0xc2, 0xf2, 0x05, 0x2d, 0x06, 0x5e,
1066                 0xfc, 0xe2, 0xa2, 0x23, 0xac, 0x86, 0xf2, 0x54,
1067                 0x83, 0x4a, 0xb6, 0x48, 0x93, 0xa1, 0x78, 0xc2,
1068                 0x07, 0xec, 0x82, 0xf0, 0x74, 0xa9, 0x18, 0xe9,
1069                 0x53, 0x44, 0x49, 0xc2, 0x94, 0xf8, 0x94, 0x92,
1070                 0x08, 0x3f, 0xbf, 0xa6, 0xe5, 0xc6, 0x03, 0x8a,
1071                 0xc6, 0x90, 0x48, 0x6c, 0xee, 0xbd, 0x44, 0x92,
1072                 0x1f, 0x2a, 0xce, 0x1d, 0xb8, 0x31, 0xa2, 0x9d,
1073                 0x24, 0x93, 0xa8, 0x9f, 0x36, 0x00, 0x04, 0x7b,
1074                 0xcb, 0x93, 0x59, 0xa1, 0x53, 0xdb, 0x13, 0x7a,
1075                 0x54, 0xb1, 0x04, 0xdb, 0xce, 0x48, 0x4f, 0xe5,
1076                 0x2f, 0xcb, 0xdf, 0x8f, 0x50, 0x7c, 0xfc, 0x76,
1077                 0x80, 0xb4, 0xdc, 0x3b, 0xc8, 0x98, 0x95, 0xf5,
1078                 0x50, 0xba, 0x70, 0x5a, 0x97, 0xd5, 0xfc, 0x98,
1079                 0x4d, 0xf3, 0x61, 0x0f, 0xcf, 0xac, 0x49, 0x0a,
1080                 0xdb, 0xc1, 0x42, 0x8f, 0xb6, 0x29, 0xd5, 0x65,
1081                 0xef, 0x83, 0xf1, 0x30, 0x4b, 0x84, 0xd0, 0x69,
1082                 0xde, 0xd2, 0x99, 0xe5, 0xec, 0xd3, 0x90, 0x86,
1083                 0x39, 0x2a, 0x6e, 0xd5, 0x32, 0xe3, 0x0d, 0x2d,
1084                 0x01, 0x8b, 0x17, 0x55, 0x1d, 0x65, 0x57, 0xbf,
1085                 0xd8, 0x75, 0xa4, 0x85, 0xb6, 0x4e, 0x35, 0x14,
1086                 0x58, 0xe4, 0x89, 0xb8, 0x7a, 0x58, 0x86, 0x0c,
1087                 0xbd, 0x8b, 0x05, 0x7b, 0x63, 0xc0, 0x86, 0x80,
1088                 0x33, 0x46, 0xd4, 0x9b, 0xb6, 0x0a, 0xeb, 0x6c,
1089                 0xae, 0xd6, 0x57, 0x7a, 0xc7, 0x59, 0x33, 0xa0,
1090                 0xda, 0xa4, 0x12, 0xbf, 0x52, 0x22, 0x05, 0x8d,
1091                 0xeb, 0xee, 0xd5, 0xec, 0xea, 0x29, 0x9b, 0x76,
1092                 0x95, 0x50, 0x6d, 0x99, 0xe1, 0x45, 0x63, 0x09,
1093                 0x16, 0x5f, 0xb0, 0xf2, 0x5b, 0x08, 0x33, 0xdd,
1094                 0x8f, 0xb7, 0x60, 0x7a, 0x8e, 0xc6, 0xfc, 0xac,
1095                 0xa9, 0x56, 0x2c, 0xa9, 0x8b, 0x74, 0x33, 0xad,
1096                 0x2a, 0x7e, 0x96, 0xb6, 0xba, 0x22, 0x28, 0xcf,
1097                 0x4d, 0x96, 0xb7, 0xd1, 0xfa, 0x99, 0x4a, 0x61,
1098                 0xe6, 0x84, 0xd1, 0x94, 0xca, 0xf5, 0x86, 0xb0,
1099                 0xba, 0x34, 0x7a, 0x04, 0xcc, 0xd4, 0x81, 0xcd,
1100                 0xd9, 0x86, 0xb6, 0xe0, 0x5a, 0x6f, 0x9b, 0x99,
1101                 0xf0, 0xdf, 0x49, 0xae, 0x6d, 0xc2, 0x54, 0x67,
1102                 0xe0, 0xb4, 0x34, 0x2d, 0x1c, 0x46, 0xdf, 0x73,
1103                 0x3b, 0x45, 0x43, 0xe7, 0x1f, 0xa3, 0x36, 0x35,
1104                 0x25, 0x33, 0xd9, 0xc0, 0x54, 0x38, 0x6e, 0x6b,
1105                 0x80, 0xcf, 0x50, 0xa4, 0xb6, 0x21, 0x17, 0xfd,
1106                 0x9b, 0x5c, 0x36, 0xca, 0xcc, 0x73, 0x73, 0xad,
1107                 0xe0, 0x57, 0x77, 0x90, 0x0e, 0x7f, 0x0f, 0x87,
1108                 0x7f, 0xdb, 0x73, 0xbf, 0xda, 0xc2, 0xb3, 0x05,
1109                 0x22, 0x06, 0xf5, 0xa3, 0xfc, 0x1e, 0x8f, 0xda,
1110                 0xcf, 0x49, 0xd6, 0xb3, 0x66, 0x2c, 0xb5, 0x00,
1111                 0xaf, 0x85, 0x6e, 0xb8, 0x5b, 0x8c, 0xa1, 0xa4,
1112                 0x21, 0xce, 0x40, 0xf3, 0x98, 0xac, 0xec, 0x88,
1113                 0x62, 0x43, 0x2a, 0xac, 0xca, 0xcf, 0xb9, 0x30,
1114                 0xeb, 0xfc, 0xef, 0xf0, 0x6e, 0x64, 0x6d, 0xe7,
1115                 0x54, 0x88, 0x6b, 0x22, 0x29, 0xbe, 0xa5, 0x8c,
1116                 0x31, 0x23, 0x3b, 0x4a, 0x80, 0x37, 0xe6, 0xd0,
1117                 0x05, 0xfc, 0x10, 0x0e, 0xdd, 0xbb, 0x00, 0xc5,
1118                 0x07, 0x20, 0x59, 0xd3, 0x41, 0x17, 0x86, 0x46,
1119                 0xab, 0x68, 0xf6, 0x48, 0x3c, 0xea, 0x5a, 0x06,
1120                 0x30, 0x21, 0x19, 0xed, 0x74, 0xbe, 0x0b, 0x97,
1121                 0xee, 0x91, 0x35, 0x94, 0x1f, 0xcb, 0x68, 0x7f,
1122                 0xe4, 0x48, 0xb0, 0x16, 0xfb, 0xf0, 0x74, 0xdb,
1123                 0x06, 0x59, 0x2e, 0x5a, 0x9c, 0xce, 0x8f, 0x7d,
1124                 0xba, 0x48, 0xd5, 0x3f, 0x5c, 0xb0, 0xc2, 0x33,
1125                 0x48, 0x60, 0x17, 0x08, 0x85, 0xba, 0xff, 0xb9,
1126                 0x34, 0x0a, 0x3d, 0x8f, 0x21, 0x13, 0x12, 0x1b
1127 };
1128
1129 static const uint8_t AES_CBC_ciphertext_1536B[] = {
1130                 0x89, 0x93, 0x05, 0x99, 0xa9, 0xed, 0xea, 0x62,
1131                 0xc9, 0xda, 0x51, 0x15, 0xce, 0x42, 0x91, 0xc3,
1132                 0x80, 0xc8, 0x03, 0x88, 0xc2, 0x63, 0xda, 0x53,
1133                 0x1a, 0xf3, 0xeb, 0xd5, 0xba, 0x6f, 0x23, 0xb2,
1134                 0xed, 0x8f, 0x89, 0xb1, 0xb3, 0xca, 0x90, 0x7a,
1135                 0xdd, 0x3f, 0xf6, 0xca, 0x86, 0x58, 0x54, 0xbc,
1136                 0xab, 0x0f, 0xf4, 0xab, 0x6d, 0x5d, 0x42, 0xd0,
1137                 0x17, 0x49, 0x17, 0xd1, 0x93, 0xea, 0xe8, 0x22,
1138                 0xc1, 0x34, 0x9f, 0x3a, 0x3b, 0xaa, 0xe9, 0x1b,
1139                 0x93, 0xff, 0x6b, 0x68, 0xba, 0xe6, 0xd2, 0x39,
1140                 0x3d, 0x55, 0x34, 0x8f, 0x98, 0x86, 0xb4, 0xd8,
1141                 0x7c, 0x0d, 0x3e, 0x01, 0x63, 0x04, 0x01, 0xff,
1142                 0x16, 0x0f, 0x51, 0x5f, 0x73, 0x53, 0xf0, 0x3a,
1143                 0x38, 0xb4, 0x4d, 0x8d, 0xaf, 0xa3, 0xca, 0x2f,
1144                 0x6f, 0xdf, 0xc0, 0x41, 0x6c, 0x48, 0x60, 0x1a,
1145                 0xe4, 0xe7, 0x8a, 0x65, 0x6f, 0x8d, 0xd7, 0xe1,
1146                 0x10, 0xab, 0x78, 0x5b, 0xb9, 0x69, 0x1f, 0xe0,
1147                 0x5c, 0xf1, 0x19, 0x12, 0x21, 0xc7, 0x51, 0xbc,
1148                 0x61, 0x5f, 0xc0, 0x36, 0x17, 0xc0, 0x28, 0xd9,
1149                 0x51, 0xcb, 0x43, 0xd9, 0xfa, 0xd1, 0xad, 0x79,
1150                 0x69, 0x86, 0x49, 0xc5, 0xe5, 0x69, 0x27, 0xce,
1151                 0x22, 0xd0, 0xe1, 0x6a, 0xf9, 0x02, 0xca, 0x6c,
1152                 0x34, 0xc7, 0xb8, 0x02, 0xc1, 0x38, 0x7f, 0xd5,
1153                 0x15, 0xf5, 0xd6, 0xeb, 0xf9, 0x30, 0x40, 0x43,
1154                 0xea, 0x87, 0xde, 0x35, 0xf6, 0x83, 0x59, 0x09,
1155                 0x68, 0x62, 0x00, 0x87, 0xb8, 0xe7, 0xca, 0x05,
1156                 0x0f, 0xac, 0x42, 0x58, 0x45, 0xaa, 0xc9, 0x9b,
1157                 0xfd, 0x2a, 0xda, 0x65, 0x33, 0x93, 0x9d, 0xc6,
1158                 0x93, 0x8d, 0xe2, 0xc5, 0x71, 0xc1, 0x5c, 0x13,
1159                 0xde, 0x7b, 0xd4, 0xb9, 0x4c, 0x35, 0x61, 0x85,
1160                 0x90, 0x78, 0xf7, 0x81, 0x98, 0x45, 0x99, 0x24,
1161                 0x58, 0x73, 0x28, 0xf8, 0x31, 0xab, 0x54, 0x2e,
1162                 0xc0, 0x38, 0x77, 0x25, 0x5c, 0x06, 0x9c, 0xc3,
1163                 0x69, 0x21, 0x92, 0x76, 0xe1, 0x16, 0xdc, 0xa9,
1164                 0xee, 0xb6, 0x80, 0x66, 0x43, 0x11, 0x24, 0xb3,
1165                 0x07, 0x17, 0x89, 0x0f, 0xcb, 0xe0, 0x60, 0xa8,
1166                 0x9d, 0x06, 0x4b, 0x6e, 0x72, 0xb7, 0xbc, 0x4f,
1167                 0xb8, 0xc0, 0x80, 0xa2, 0xfb, 0x46, 0x5b, 0x8f,
1168                 0x11, 0x01, 0x92, 0x9d, 0x37, 0x09, 0x98, 0xc8,
1169                 0x0a, 0x46, 0xae, 0x12, 0xac, 0x61, 0x3f, 0xe7,
1170                 0x41, 0x1a, 0xaa, 0x2e, 0xdc, 0xd7, 0x2a, 0x47,
1171                 0xee, 0xdf, 0x08, 0xd1, 0xff, 0xea, 0x13, 0xc6,
1172                 0x05, 0xdb, 0x29, 0xcc, 0x03, 0xba, 0x7b, 0x6d,
1173                 0x40, 0xc1, 0xc9, 0x76, 0x75, 0x03, 0x7a, 0x71,
1174                 0xc9, 0x5f, 0xd9, 0xe0, 0x61, 0x69, 0x36, 0x8f,
1175                 0xb2, 0xbc, 0x28, 0xf3, 0x90, 0x71, 0xda, 0x5f,
1176                 0x08, 0xd5, 0x0d, 0xc1, 0xe6, 0xbd, 0x2b, 0xc6,
1177                 0x6c, 0x42, 0xfd, 0xbf, 0x10, 0xe8, 0x5f, 0x87,
1178                 0x3d, 0x21, 0x42, 0x85, 0x01, 0x0a, 0xbf, 0x8e,
1179                 0x49, 0xd3, 0x9c, 0x89, 0x3b, 0xea, 0xe1, 0xbf,
1180                 0xe9, 0x9b, 0x5e, 0x0e, 0xb8, 0xeb, 0xcd, 0x3a,
1181                 0xf6, 0x29, 0x41, 0x35, 0xdd, 0x9b, 0x13, 0x24,
1182                 0xe0, 0x1d, 0x8a, 0xcb, 0x20, 0xf8, 0x41, 0x51,
1183                 0x3e, 0x23, 0x8c, 0x67, 0x98, 0x39, 0x53, 0x77,
1184                 0x2a, 0x68, 0xf4, 0x3c, 0x7e, 0xd6, 0xc4, 0x6e,
1185                 0xf1, 0x53, 0xe9, 0xd8, 0x5c, 0xc1, 0xa9, 0x38,
1186                 0x6f, 0x5e, 0xe4, 0xd4, 0x29, 0x1c, 0x6c, 0xee,
1187                 0x2f, 0xea, 0xde, 0x61, 0x71, 0x5a, 0xea, 0xce,
1188                 0x23, 0x6e, 0x1b, 0x16, 0x43, 0xb7, 0xc0, 0xe3,
1189                 0x87, 0xa1, 0x95, 0x1e, 0x97, 0x4d, 0xea, 0xa6,
1190                 0xf7, 0x25, 0xac, 0x82, 0x2a, 0xd3, 0xa6, 0x99,
1191                 0x75, 0xdd, 0xc1, 0x55, 0x32, 0x6b, 0xea, 0x33,
1192                 0x88, 0xce, 0x06, 0xac, 0x15, 0x39, 0x19, 0xa3,
1193                 0x59, 0xaf, 0x7a, 0x1f, 0xd9, 0x72, 0x5e, 0xf7,
1194                 0x4c, 0xf3, 0x5d, 0x6b, 0xf2, 0x16, 0x92, 0xa8,
1195                 0x9e, 0x3d, 0xd4, 0x4c, 0x72, 0x55, 0x4e, 0x4a,
1196                 0xf7, 0x8b, 0x2f, 0x67, 0x5a, 0x90, 0xb7, 0xcf,
1197                 0x16, 0xd3, 0x7b, 0x5a, 0x9a, 0xc8, 0x9f, 0xbf,
1198                 0x01, 0x76, 0x3b, 0x86, 0x2c, 0x2a, 0x78, 0x10,
1199                 0x70, 0x05, 0x38, 0xf9, 0xdd, 0x2a, 0x1d, 0x00,
1200                 0x25, 0xb7, 0x10, 0xac, 0x3b, 0x3c, 0x4d, 0x3c,
1201                 0x01, 0x68, 0x3c, 0x5a, 0x29, 0xc2, 0xa0, 0x1b,
1202                 0x95, 0x67, 0xf9, 0x0a, 0x60, 0xb7, 0x11, 0x9c,
1203                 0x40, 0x45, 0xd7, 0xb0, 0xda, 0x49, 0x87, 0xcd,
1204                 0xb0, 0x9b, 0x61, 0x8c, 0xf4, 0x0d, 0x94, 0x1d,
1205                 0x79, 0x66, 0x13, 0x0b, 0xc6, 0x6b, 0x19, 0xee,
1206                 0xa0, 0x6b, 0x64, 0x7d, 0xc4, 0xff, 0x98, 0x72,
1207                 0x60, 0xab, 0x7f, 0x0f, 0x4d, 0x5d, 0x6b, 0xc3,
1208                 0xba, 0x5e, 0x0d, 0x04, 0xd9, 0x59, 0x17, 0xd0,
1209                 0x64, 0xbe, 0xfb, 0x58, 0xfc, 0xed, 0x18, 0xf6,
1210                 0xac, 0x19, 0xa4, 0xfd, 0x16, 0x59, 0x80, 0x58,
1211                 0xb8, 0x0f, 0x79, 0x24, 0x60, 0x18, 0x62, 0xa9,
1212                 0xa3, 0xa0, 0xe8, 0x81, 0xd6, 0xec, 0x5b, 0xfe,
1213                 0x5b, 0xb8, 0xa4, 0x00, 0xa9, 0xd0, 0x90, 0x17,
1214                 0xe5, 0x50, 0x3d, 0x2b, 0x12, 0x6e, 0x2a, 0x13,
1215                 0x65, 0x7c, 0xdf, 0xdf, 0xa7, 0xdd, 0x9f, 0x78,
1216                 0x5f, 0x8f, 0x4e, 0x90, 0xa6, 0x10, 0xe4, 0x7b,
1217                 0x68, 0x6b, 0xfd, 0xa9, 0x6d, 0x47, 0xfa, 0xec,
1218                 0x42, 0x35, 0x07, 0x12, 0x3e, 0x78, 0x23, 0x15,
1219                 0xff, 0xe2, 0x65, 0xc7, 0x47, 0x89, 0x2f, 0x97,
1220                 0x7c, 0xd7, 0x6b, 0x69, 0x35, 0x79, 0x6f, 0x85,
1221                 0xb4, 0xa9, 0x75, 0x04, 0x32, 0x9a, 0xfe, 0xf0,
1222                 0xce, 0xe3, 0xf1, 0xab, 0x15, 0x47, 0xe4, 0x9c,
1223                 0xc1, 0x48, 0x32, 0x3c, 0xbe, 0x44, 0x72, 0xc9,
1224                 0xaa, 0x50, 0x37, 0xa6, 0xbe, 0x41, 0xcf, 0xe8,
1225                 0x17, 0x4e, 0x37, 0xbe, 0xf1, 0x34, 0x2c, 0xd9,
1226                 0x60, 0x48, 0x09, 0xa5, 0x26, 0x00, 0x31, 0x77,
1227                 0x4e, 0xac, 0x7c, 0x89, 0x75, 0xe3, 0xde, 0x26,
1228                 0x4c, 0x32, 0x54, 0x27, 0x8e, 0x92, 0x26, 0x42,
1229                 0x85, 0x76, 0x01, 0x76, 0x62, 0x4c, 0x29, 0xe9,
1230                 0x38, 0x05, 0x51, 0x54, 0x97, 0xa3, 0x03, 0x59,
1231                 0x5e, 0xec, 0x0c, 0xe4, 0x96, 0xb7, 0x15, 0xa8,
1232                 0x41, 0x06, 0x2b, 0x78, 0x95, 0x24, 0xf6, 0x32,
1233                 0xc5, 0xec, 0xd7, 0x89, 0x28, 0x1e, 0xec, 0xb1,
1234                 0xc7, 0x21, 0x0c, 0xd3, 0x80, 0x7c, 0x5a, 0xe6,
1235                 0xb1, 0x3a, 0x52, 0x33, 0x84, 0x4e, 0x32, 0x6e,
1236                 0x7a, 0xf6, 0x43, 0x15, 0x5b, 0xa6, 0xba, 0xeb,
1237                 0xa8, 0xe4, 0xff, 0x4f, 0xbd, 0xbd, 0xa8, 0x5e,
1238                 0xbe, 0x27, 0xaf, 0xc5, 0xf7, 0x9e, 0xdf, 0x48,
1239                 0x22, 0xca, 0x6a, 0x0b, 0x3c, 0xd7, 0xe0, 0xdc,
1240                 0xf3, 0x71, 0x08, 0xdc, 0x28, 0x13, 0x08, 0xf2,
1241                 0x08, 0x1d, 0x9d, 0x7b, 0xd9, 0xde, 0x6f, 0xe6,
1242                 0xe8, 0x88, 0x18, 0xc2, 0xcd, 0x93, 0xc5, 0x38,
1243                 0x21, 0x68, 0x4c, 0x9a, 0xfb, 0xb6, 0x18, 0x16,
1244                 0x73, 0x2c, 0x1d, 0x6f, 0x95, 0xfb, 0x65, 0x4f,
1245                 0x7c, 0xec, 0x8d, 0x6c, 0xa8, 0xc0, 0x55, 0x28,
1246                 0xc6, 0xc3, 0xea, 0xeb, 0x05, 0xf5, 0x65, 0xeb,
1247                 0x53, 0xe1, 0x54, 0xef, 0xb8, 0x64, 0x98, 0x2d,
1248                 0x98, 0x9e, 0xc8, 0xfe, 0xa2, 0x07, 0x30, 0xf7,
1249                 0xf7, 0xae, 0xdb, 0x32, 0xf8, 0x71, 0x9d, 0x06,
1250                 0xdf, 0x9b, 0xda, 0x61, 0x7d, 0xdb, 0xae, 0x06,
1251                 0x24, 0x63, 0x74, 0xb6, 0xf3, 0x1b, 0x66, 0x09,
1252                 0x60, 0xff, 0x2b, 0x29, 0xf5, 0xa9, 0x9d, 0x61,
1253                 0x5d, 0x55, 0x10, 0x82, 0x21, 0xbb, 0x64, 0x0d,
1254                 0xef, 0x5c, 0xe3, 0x30, 0x1b, 0x60, 0x1e, 0x5b,
1255                 0xfe, 0x6c, 0xf5, 0x15, 0xa3, 0x86, 0x27, 0x58,
1256                 0x46, 0x00, 0x20, 0xcb, 0x86, 0x9a, 0x52, 0x29,
1257                 0x20, 0x68, 0x4d, 0x67, 0x88, 0x70, 0xc2, 0x31,
1258                 0xd8, 0xbb, 0xa5, 0xa7, 0x88, 0x7f, 0x66, 0xbc,
1259                 0xaa, 0x0f, 0xe1, 0x78, 0x7b, 0x97, 0x3c, 0xb7,
1260                 0xd7, 0xd8, 0x04, 0xe0, 0x09, 0x60, 0xc8, 0xd0,
1261                 0x9e, 0xe5, 0x6b, 0x31, 0x7f, 0x88, 0xfe, 0xc3,
1262                 0xfd, 0x89, 0xec, 0x76, 0x4b, 0xb3, 0xa7, 0x37,
1263                 0x03, 0xb7, 0xc6, 0x10, 0x7c, 0x9d, 0x0c, 0x75,
1264                 0xd3, 0x08, 0x14, 0x94, 0x03, 0x42, 0x25, 0x26,
1265                 0x85, 0xf7, 0xf0, 0x90, 0x06, 0x3e, 0x6f, 0x60,
1266                 0x52, 0x55, 0xd5, 0x0f, 0x79, 0x64, 0x69, 0x69,
1267                 0x46, 0xf9, 0x7f, 0x7f, 0x03, 0xf1, 0x1f, 0xdb,
1268                 0x39, 0x05, 0xba, 0x4a, 0x8f, 0x17, 0xe7, 0xba,
1269                 0xe2, 0x07, 0x7c, 0x1d, 0x9e, 0xbc, 0x94, 0xc0,
1270                 0x61, 0x59, 0x8e, 0x72, 0xaf, 0xfc, 0x99, 0xe4,
1271                 0xd5, 0xa8, 0xee, 0x0a, 0x48, 0x2d, 0x82, 0x8b,
1272                 0x34, 0x54, 0x8a, 0xce, 0xc7, 0xfa, 0xdd, 0xba,
1273                 0x54, 0xdf, 0xb3, 0x30, 0x33, 0x73, 0x2e, 0xd5,
1274                 0x52, 0xab, 0x49, 0x91, 0x4e, 0x0a, 0xd6, 0x2f,
1275                 0x67, 0xe4, 0xdd, 0x64, 0x48, 0x16, 0xd9, 0x85,
1276                 0xaa, 0x52, 0xa5, 0x0b, 0xd3, 0xb4, 0x2d, 0x77,
1277                 0x5e, 0x52, 0x77, 0x17, 0xcf, 0xbe, 0x88, 0x04,
1278                 0x01, 0x52, 0xe2, 0xf1, 0x46, 0xe2, 0x91, 0x30,
1279                 0x65, 0xcf, 0xc0, 0x65, 0x45, 0xc3, 0x7e, 0xf4,
1280                 0x2e, 0xb5, 0xaf, 0x6f, 0xab, 0x1a, 0xfa, 0x70,
1281                 0x35, 0xb8, 0x4f, 0x2d, 0x78, 0x90, 0x33, 0xb5,
1282                 0x9a, 0x67, 0xdb, 0x2f, 0x28, 0x32, 0xb6, 0x54,
1283                 0xab, 0x4c, 0x6b, 0x85, 0xed, 0x6c, 0x3e, 0x05,
1284                 0x2a, 0xc7, 0x32, 0xe8, 0xf5, 0xa3, 0x7b, 0x4e,
1285                 0x7b, 0x58, 0x24, 0x73, 0xf7, 0xfd, 0xc7, 0xc8,
1286                 0x6c, 0x71, 0x68, 0xb1, 0xf6, 0xc5, 0x9e, 0x1e,
1287                 0xe3, 0x5c, 0x25, 0xc0, 0x5b, 0x3e, 0x59, 0xa1,
1288                 0x18, 0x5a, 0xe8, 0xb5, 0xd1, 0x44, 0x13, 0xa3,
1289                 0xe6, 0x05, 0x76, 0xd2, 0x8d, 0x6e, 0x54, 0x68,
1290                 0x0c, 0xa4, 0x7b, 0x8b, 0xd3, 0x8c, 0x42, 0x13,
1291                 0x87, 0xda, 0xdf, 0x8f, 0xa5, 0x83, 0x7a, 0x42,
1292                 0x99, 0xb7, 0xeb, 0xe2, 0x79, 0xe0, 0xdb, 0xda,
1293                 0x33, 0xa8, 0x50, 0x3a, 0xd7, 0xe7, 0xd3, 0x61,
1294                 0x18, 0xb8, 0xaa, 0x2d, 0xc8, 0xd8, 0x2c, 0x28,
1295                 0xe5, 0x97, 0x0a, 0x7c, 0x6c, 0x7f, 0x09, 0xd7,
1296                 0x88, 0x80, 0xac, 0x12, 0xed, 0xf8, 0xc6, 0xb5,
1297                 0x2d, 0xd6, 0x63, 0x9b, 0x98, 0x35, 0x26, 0xde,
1298                 0xf6, 0x31, 0xee, 0x7e, 0xa0, 0xfb, 0x16, 0x98,
1299                 0xb1, 0x96, 0x1d, 0xee, 0xe3, 0x2f, 0xfb, 0x41,
1300                 0xdd, 0xea, 0x10, 0x1e, 0x03, 0x89, 0x18, 0xd2,
1301                 0x47, 0x0c, 0xa0, 0x57, 0xda, 0x76, 0x3a, 0x37,
1302                 0x2c, 0xe4, 0xf9, 0x77, 0xc8, 0x43, 0x5f, 0xcb,
1303                 0xd6, 0x85, 0xf7, 0x22, 0xe4, 0x32, 0x25, 0xa8,
1304                 0xdc, 0x21, 0xc0, 0xf5, 0x95, 0xb2, 0xf8, 0x83,
1305                 0xf0, 0x65, 0x61, 0x15, 0x48, 0x94, 0xb7, 0x03,
1306                 0x7f, 0x66, 0xa1, 0x39, 0x1f, 0xdd, 0xce, 0x96,
1307                 0xfe, 0x58, 0x81, 0x3d, 0x41, 0x11, 0x87, 0x13,
1308                 0x26, 0x1b, 0x6d, 0xf3, 0xca, 0x2e, 0x2c, 0x76,
1309                 0xd3, 0x2f, 0x6d, 0x49, 0x70, 0x53, 0x05, 0x96,
1310                 0xcc, 0x30, 0x2b, 0x83, 0xf2, 0xc6, 0xb2, 0x4b,
1311                 0x22, 0x13, 0x95, 0x42, 0xeb, 0x56, 0x4d, 0x22,
1312                 0xe6, 0x43, 0x6f, 0xba, 0xe7, 0x3b, 0xe5, 0x59,
1313                 0xce, 0x57, 0x88, 0x85, 0xb6, 0xbf, 0x15, 0x37,
1314                 0xb3, 0x7a, 0x7e, 0xc4, 0xbc, 0x99, 0xfc, 0xe4,
1315                 0x89, 0x00, 0x68, 0x39, 0xbc, 0x5a, 0xba, 0xab,
1316                 0x52, 0xab, 0xe6, 0x81, 0xfd, 0x93, 0x62, 0xe9,
1317                 0xb7, 0x12, 0xd1, 0x18, 0x1a, 0xb9, 0x55, 0x4a,
1318                 0x0f, 0xae, 0x35, 0x11, 0x04, 0x27, 0xf3, 0x42,
1319                 0x4e, 0xca, 0xdf, 0x9f, 0x12, 0x62, 0xea, 0x03,
1320                 0xc0, 0xa9, 0x22, 0x7b, 0x6c, 0x6c, 0xe3, 0xdf,
1321                 0x16, 0xad, 0x03, 0xc9, 0xfe, 0xa4, 0xdd, 0x4f
1322 };
1323
1324 static const uint8_t AES_CBC_ciphertext_1792B[] = {
1325                 0x59, 0xcc, 0xfe, 0x8f, 0xb4, 0x9d, 0x0e, 0xd1,
1326                 0x85, 0xfc, 0x9b, 0x43, 0xc1, 0xb7, 0x54, 0x67,
1327                 0x01, 0xef, 0xb8, 0x71, 0x36, 0xdb, 0x50, 0x48,
1328                 0x7a, 0xea, 0xcf, 0xce, 0xba, 0x30, 0x10, 0x2e,
1329                 0x96, 0x2b, 0xfd, 0xcf, 0x00, 0xe3, 0x1f, 0xac,
1330                 0x66, 0x14, 0x30, 0x86, 0x49, 0xdb, 0x01, 0x8b,
1331                 0x07, 0xdd, 0x00, 0x9d, 0x0d, 0x5c, 0x19, 0x11,
1332                 0xe8, 0x44, 0x2b, 0x25, 0x70, 0xed, 0x7c, 0x33,
1333                 0x0d, 0xe3, 0x34, 0x93, 0x63, 0xad, 0x26, 0xb1,
1334                 0x11, 0x91, 0x34, 0x2e, 0x1d, 0x50, 0xaa, 0xd4,
1335                 0xef, 0x3a, 0x6d, 0xd7, 0x33, 0x20, 0x0d, 0x3f,
1336                 0x9b, 0xdd, 0xc3, 0xa5, 0xc5, 0xf1, 0x99, 0xdc,
1337                 0xea, 0x52, 0xda, 0x55, 0xea, 0xa2, 0x7a, 0xc5,
1338                 0x78, 0x44, 0x4a, 0x02, 0x33, 0x19, 0x62, 0x37,
1339                 0xf8, 0x8b, 0xd1, 0x0c, 0x21, 0xdf, 0x40, 0x19,
1340                 0x81, 0xea, 0xfb, 0x1c, 0xa7, 0xcc, 0x60, 0xfe,
1341                 0x63, 0x25, 0x8f, 0xf3, 0x73, 0x0f, 0x45, 0xe6,
1342                 0x6a, 0x18, 0xbf, 0xbe, 0xad, 0x92, 0x2a, 0x1e,
1343                 0x15, 0x65, 0x6f, 0xef, 0x92, 0xcd, 0x0e, 0x19,
1344                 0x3d, 0x42, 0xa8, 0xfc, 0x0d, 0x32, 0x58, 0xe0,
1345                 0x56, 0x9f, 0xd6, 0x9b, 0x8b, 0xec, 0xe0, 0x45,
1346                 0x4d, 0x7e, 0x73, 0x87, 0xff, 0x74, 0x92, 0x59,
1347                 0x60, 0x13, 0x93, 0xda, 0xec, 0xbf, 0xfa, 0x20,
1348                 0xb6, 0xe7, 0xdf, 0xc7, 0x10, 0xf5, 0x79, 0xb4,
1349                 0xd7, 0xac, 0xaf, 0x2b, 0x37, 0x52, 0x30, 0x1d,
1350                 0xbe, 0x0f, 0x60, 0x77, 0x3d, 0x03, 0x63, 0xa9,
1351                 0xae, 0xb1, 0xf3, 0xca, 0xca, 0xb4, 0x21, 0xd7,
1352                 0x6f, 0x2e, 0x5e, 0x9b, 0x68, 0x53, 0x80, 0xab,
1353                 0x30, 0x23, 0x0a, 0x72, 0x6b, 0xb1, 0xd8, 0x25,
1354                 0x5d, 0x3a, 0x62, 0x9b, 0x4f, 0x59, 0x3b, 0x79,
1355                 0xa8, 0x9e, 0x08, 0x6d, 0x37, 0xb0, 0xfc, 0x42,
1356                 0x51, 0x25, 0x86, 0xbd, 0x54, 0x5a, 0x95, 0x20,
1357                 0x6c, 0xac, 0xb9, 0x30, 0x1c, 0x03, 0xc9, 0x49,
1358                 0x38, 0x55, 0x31, 0x49, 0xed, 0xa9, 0x0e, 0xc3,
1359                 0x65, 0xb4, 0x68, 0x6b, 0x07, 0x4c, 0x0a, 0xf9,
1360                 0x21, 0x69, 0x7c, 0x9f, 0x28, 0x80, 0xe9, 0x49,
1361                 0x22, 0x7c, 0xec, 0x97, 0xf7, 0x70, 0xb4, 0xb8,
1362                 0x25, 0xe7, 0x80, 0x2c, 0x43, 0x24, 0x8a, 0x2e,
1363                 0xac, 0xa2, 0x84, 0x20, 0xe7, 0xf4, 0x6b, 0x86,
1364                 0x37, 0x05, 0xc7, 0x59, 0x04, 0x49, 0x2a, 0x99,
1365                 0x80, 0x46, 0x32, 0x19, 0xe6, 0x30, 0xce, 0xc0,
1366                 0xef, 0x6e, 0xec, 0xe5, 0x2f, 0x24, 0xc1, 0x78,
1367                 0x45, 0x02, 0xd3, 0x64, 0x99, 0xf5, 0xc7, 0xbc,
1368                 0x8f, 0x8c, 0x75, 0xb1, 0x0a, 0xc8, 0xc3, 0xbd,
1369                 0x5e, 0x7e, 0xbd, 0x0e, 0xdf, 0x4b, 0x96, 0x6a,
1370                 0xfd, 0x03, 0xdb, 0xd1, 0x31, 0x1e, 0x27, 0xf9,
1371                 0xe5, 0x83, 0x9a, 0xfc, 0x13, 0x4c, 0xd3, 0x04,
1372                 0xdb, 0xdb, 0x3f, 0x35, 0x93, 0x4e, 0x14, 0x6b,
1373                 0x00, 0x5c, 0xb6, 0x11, 0x50, 0xee, 0x61, 0x5c,
1374                 0x10, 0x5c, 0xd0, 0x90, 0x02, 0x2e, 0x12, 0xe0,
1375                 0x50, 0x44, 0xad, 0x75, 0xcd, 0x94, 0xcf, 0x92,
1376                 0xcb, 0xe3, 0xe8, 0x77, 0x4b, 0xd7, 0x1a, 0x7c,
1377                 0xdd, 0x6b, 0x49, 0x21, 0x7c, 0xe8, 0x2c, 0x25,
1378                 0x49, 0x86, 0x1e, 0x54, 0xae, 0xfc, 0x0e, 0x80,
1379                 0xb1, 0xd5, 0xa5, 0x23, 0xcf, 0xcc, 0x0e, 0x11,
1380                 0xe2, 0x7c, 0x3c, 0x25, 0x78, 0x64, 0x03, 0xa1,
1381                 0xdd, 0x9f, 0x74, 0x12, 0x7b, 0x21, 0xb5, 0x73,
1382                 0x15, 0x3c, 0xed, 0xad, 0x07, 0x62, 0x21, 0x79,
1383                 0xd4, 0x2f, 0x0d, 0x72, 0xe9, 0x7c, 0x6b, 0x96,
1384                 0x6e, 0xe5, 0x36, 0x4a, 0xd2, 0x38, 0xe1, 0xff,
1385                 0x6e, 0x26, 0xa4, 0xac, 0x83, 0x07, 0xe6, 0x67,
1386                 0x74, 0x6c, 0xec, 0x8b, 0x4b, 0x79, 0x33, 0x50,
1387                 0x2f, 0x8f, 0xa0, 0x8f, 0xfa, 0x38, 0x6a, 0xa2,
1388                 0x3a, 0x42, 0x85, 0x15, 0x90, 0xd0, 0xb3, 0x0d,
1389                 0x8a, 0xe4, 0x60, 0x03, 0xef, 0xf9, 0x65, 0x8a,
1390                 0x4e, 0x50, 0x8c, 0x65, 0xba, 0x61, 0x16, 0xc3,
1391                 0x93, 0xb7, 0x75, 0x21, 0x98, 0x25, 0x60, 0x6e,
1392                 0x3d, 0x68, 0xba, 0x7c, 0xe4, 0xf3, 0xd9, 0x9b,
1393                 0xfb, 0x7a, 0xed, 0x1f, 0xb3, 0x4b, 0x88, 0x74,
1394                 0x2c, 0xb8, 0x8c, 0x22, 0x95, 0xce, 0x90, 0xf1,
1395                 0xdb, 0x80, 0xa6, 0x39, 0xae, 0x82, 0xa1, 0xef,
1396                 0x75, 0xec, 0xfe, 0xf1, 0xe8, 0x04, 0xfd, 0x99,
1397                 0x1b, 0x5f, 0x45, 0x87, 0x4f, 0xfa, 0xa2, 0x3e,
1398                 0x3e, 0xb5, 0x01, 0x4b, 0x46, 0xeb, 0x13, 0x9a,
1399                 0xe4, 0x7d, 0x03, 0x87, 0xb1, 0x59, 0x91, 0x8e,
1400                 0x37, 0xd3, 0x16, 0xce, 0xef, 0x4b, 0xe9, 0x46,
1401                 0x8d, 0x2a, 0x50, 0x2f, 0x41, 0xd3, 0x7b, 0xcf,
1402                 0xf0, 0xb7, 0x8b, 0x65, 0x0f, 0xa3, 0x27, 0x10,
1403                 0xe9, 0xa9, 0xe9, 0x2c, 0xbe, 0xbb, 0x82, 0xe3,
1404                 0x7b, 0x0b, 0x81, 0x3e, 0xa4, 0x6a, 0x4f, 0x3b,
1405                 0xd5, 0x61, 0xf8, 0x47, 0x04, 0x99, 0x5b, 0xff,
1406                 0xf3, 0x14, 0x6e, 0x57, 0x5b, 0xbf, 0x1b, 0xb4,
1407                 0x3f, 0xf9, 0x31, 0xf6, 0x95, 0xd5, 0x10, 0xa9,
1408                 0x72, 0x28, 0x23, 0xa9, 0x6a, 0xa2, 0xcf, 0x7d,
1409                 0xe3, 0x18, 0x95, 0xda, 0xbc, 0x6f, 0xe9, 0xd8,
1410                 0xef, 0x49, 0x3f, 0xd3, 0xef, 0x1f, 0xe1, 0x50,
1411                 0xe8, 0x8a, 0xc0, 0xce, 0xcc, 0xb7, 0x5e, 0x0e,
1412                 0x8b, 0x95, 0x80, 0xfd, 0x58, 0x2a, 0x9b, 0xc8,
1413                 0xb4, 0x17, 0x04, 0x46, 0x74, 0xd4, 0x68, 0x91,
1414                 0x33, 0xc8, 0x31, 0x15, 0x84, 0x16, 0x35, 0x03,
1415                 0x64, 0x6d, 0xa9, 0x4e, 0x20, 0xeb, 0xa9, 0x3f,
1416                 0x21, 0x5e, 0x9b, 0x09, 0xc3, 0x45, 0xf8, 0x7c,
1417                 0x59, 0x62, 0x29, 0x9a, 0x5c, 0xcf, 0xb4, 0x27,
1418                 0x5e, 0x13, 0xea, 0xb3, 0xef, 0xd9, 0x01, 0x2a,
1419                 0x65, 0x5f, 0x14, 0xf4, 0xbf, 0x28, 0x89, 0x3d,
1420                 0xdd, 0x9d, 0x52, 0xbd, 0x9e, 0x5b, 0x3b, 0xd2,
1421                 0xc2, 0x81, 0x35, 0xb6, 0xac, 0xdd, 0x27, 0xc3,
1422                 0x7b, 0x01, 0x5a, 0x6d, 0x4c, 0x5e, 0x2c, 0x30,
1423                 0xcb, 0x3a, 0xfa, 0xc1, 0xd7, 0x31, 0x67, 0x3e,
1424                 0x08, 0x6a, 0xe8, 0x8c, 0x75, 0xac, 0x1a, 0x6a,
1425                 0x52, 0xf7, 0x51, 0xcd, 0x85, 0x3f, 0x3c, 0xa7,
1426                 0xea, 0xbc, 0xd7, 0x18, 0x9e, 0x27, 0x73, 0xe6,
1427                 0x2b, 0x58, 0xb6, 0xd2, 0x29, 0x68, 0xd5, 0x8f,
1428                 0x00, 0x4d, 0x55, 0xf6, 0x61, 0x5a, 0xcc, 0x51,
1429                 0xa6, 0x5e, 0x85, 0xcb, 0x0b, 0xfd, 0x06, 0xca,
1430                 0xf5, 0xbf, 0x0d, 0x13, 0x74, 0x78, 0x6d, 0x9e,
1431                 0x20, 0x11, 0x84, 0x3e, 0x78, 0x17, 0x04, 0x4f,
1432                 0x64, 0x2c, 0x3b, 0x3e, 0x93, 0x7b, 0x58, 0x33,
1433                 0x07, 0x52, 0xf7, 0x60, 0x6a, 0xa8, 0x3b, 0x19,
1434                 0x27, 0x7a, 0x93, 0xc5, 0x53, 0xad, 0xec, 0xf6,
1435                 0xc8, 0x94, 0xee, 0x92, 0xea, 0xee, 0x7e, 0xea,
1436                 0xb9, 0x5f, 0xac, 0x59, 0x5d, 0x2e, 0x78, 0x53,
1437                 0x72, 0x81, 0x92, 0xdd, 0x1c, 0x63, 0xbe, 0x02,
1438                 0xeb, 0xa8, 0x1b, 0x2a, 0x6e, 0x72, 0xe3, 0x2d,
1439                 0x84, 0x0d, 0x8a, 0x22, 0xf6, 0xba, 0xab, 0x04,
1440                 0x8e, 0x04, 0x24, 0xdb, 0xcc, 0xe2, 0x69, 0xeb,
1441                 0x4e, 0xfa, 0x6b, 0x5b, 0xc8, 0xc0, 0xd9, 0x25,
1442                 0xcb, 0x40, 0x8d, 0x4b, 0x8e, 0xa0, 0xd4, 0x72,
1443                 0x98, 0x36, 0x46, 0x3b, 0x4f, 0x5f, 0x96, 0x84,
1444                 0x03, 0x28, 0x86, 0x4d, 0xa1, 0x8a, 0xd7, 0xb2,
1445                 0x5b, 0x27, 0x01, 0x80, 0x62, 0x49, 0x56, 0xb9,
1446                 0xa0, 0xa1, 0xe3, 0x6e, 0x22, 0x2a, 0x5d, 0x03,
1447                 0x86, 0x40, 0x36, 0x22, 0x5e, 0xd2, 0xe5, 0xc0,
1448                 0x6b, 0xfa, 0xac, 0x80, 0x4e, 0x09, 0x99, 0xbc,
1449                 0x2f, 0x9b, 0xcc, 0xf3, 0x4e, 0xf7, 0x99, 0x98,
1450                 0x11, 0x6e, 0x6f, 0x62, 0x22, 0x6b, 0x92, 0x95,
1451                 0x3b, 0xc3, 0xd2, 0x8e, 0x0f, 0x07, 0xc2, 0x51,
1452                 0x5c, 0x4d, 0xb2, 0x6e, 0xc0, 0x27, 0x73, 0xcd,
1453                 0x57, 0xb7, 0xf0, 0xe9, 0x2e, 0xc8, 0xe2, 0x0c,
1454                 0xd1, 0xb5, 0x0f, 0xff, 0xf9, 0xec, 0x38, 0xba,
1455                 0x97, 0xd6, 0x94, 0x9b, 0xd1, 0x79, 0xb6, 0x6a,
1456                 0x01, 0x17, 0xe4, 0x7e, 0xa6, 0xd5, 0x86, 0x19,
1457                 0xae, 0xf3, 0xf0, 0x62, 0x73, 0xc0, 0xf0, 0x0a,
1458                 0x7a, 0x96, 0x93, 0x72, 0x89, 0x7e, 0x25, 0x57,
1459                 0xf8, 0xf7, 0xd5, 0x1e, 0xe5, 0xac, 0xd6, 0x38,
1460                 0x4f, 0xe8, 0x81, 0xd1, 0x53, 0x41, 0x07, 0x2d,
1461                 0x58, 0x34, 0x1c, 0xef, 0x74, 0x2e, 0x61, 0xca,
1462                 0xd3, 0xeb, 0xd6, 0x93, 0x0a, 0xf2, 0xf2, 0x86,
1463                 0x9c, 0xe3, 0x7a, 0x52, 0xf5, 0x42, 0xf1, 0x8b,
1464                 0x10, 0xf2, 0x25, 0x68, 0x7e, 0x61, 0xb1, 0x19,
1465                 0xcf, 0x8f, 0x5a, 0x53, 0xb7, 0x68, 0x4f, 0x1a,
1466                 0x71, 0xe9, 0x83, 0x91, 0x3a, 0x78, 0x0f, 0xf7,
1467                 0xd4, 0x74, 0xf5, 0x06, 0xd2, 0x88, 0xb0, 0x06,
1468                 0xe5, 0xc0, 0xfb, 0xb3, 0x91, 0xad, 0xc0, 0x84,
1469                 0x31, 0xf2, 0x3a, 0xcf, 0x63, 0xe6, 0x4a, 0xd3,
1470                 0x78, 0xbe, 0xde, 0x73, 0x3e, 0x02, 0x8e, 0xb8,
1471                 0x3a, 0xf6, 0x55, 0xa7, 0xf8, 0x5a, 0xb5, 0x0e,
1472                 0x0c, 0xc5, 0xe5, 0x66, 0xd5, 0xd2, 0x18, 0xf3,
1473                 0xef, 0xa5, 0xc9, 0x68, 0x69, 0xe0, 0xcd, 0x00,
1474                 0x33, 0x99, 0x6e, 0xea, 0xcb, 0x06, 0x7a, 0xe1,
1475                 0xe1, 0x19, 0x0b, 0xe7, 0x08, 0xcd, 0x09, 0x1b,
1476                 0x85, 0xec, 0xc4, 0xd4, 0x75, 0xf0, 0xd6, 0xfb,
1477                 0x84, 0x95, 0x07, 0x44, 0xca, 0xa5, 0x2a, 0x6c,
1478                 0xc2, 0x00, 0x58, 0x08, 0x87, 0x9e, 0x0a, 0xd4,
1479                 0x06, 0xe2, 0x91, 0x5f, 0xb7, 0x1b, 0x11, 0xfa,
1480                 0x85, 0xfc, 0x7c, 0xf2, 0x0f, 0x6e, 0x3c, 0x8a,
1481                 0xe1, 0x0f, 0xa0, 0x33, 0x84, 0xce, 0x81, 0x4d,
1482                 0x32, 0x4d, 0xeb, 0x41, 0xcf, 0x5a, 0x05, 0x60,
1483                 0x47, 0x6c, 0x2a, 0xc4, 0x17, 0xd5, 0x16, 0x3a,
1484                 0xe4, 0xe7, 0xab, 0x84, 0x94, 0x22, 0xff, 0x56,
1485                 0xb0, 0x0c, 0x92, 0x6c, 0x19, 0x11, 0x4c, 0xb3,
1486                 0xed, 0x58, 0x48, 0x84, 0x2a, 0xe2, 0x19, 0x2a,
1487                 0xe1, 0xc0, 0x56, 0x82, 0x3c, 0x83, 0xb4, 0x58,
1488                 0x2d, 0xf0, 0xb5, 0x1e, 0x76, 0x85, 0x51, 0xc2,
1489                 0xe4, 0x95, 0x27, 0x96, 0xd1, 0x90, 0xc3, 0x17,
1490                 0x75, 0xa1, 0xbb, 0x46, 0x5f, 0xa6, 0xf2, 0xef,
1491                 0x71, 0x56, 0x92, 0xc5, 0x8a, 0x85, 0x52, 0xe4,
1492                 0x63, 0x21, 0x6f, 0x55, 0x85, 0x2b, 0x6b, 0x0d,
1493                 0xc9, 0x92, 0x77, 0x67, 0xe3, 0xff, 0x2a, 0x2b,
1494                 0x90, 0x01, 0x3d, 0x74, 0x63, 0x04, 0x61, 0x3c,
1495                 0x8e, 0xf8, 0xfc, 0x04, 0xdd, 0x21, 0x85, 0x92,
1496                 0x1e, 0x4d, 0x51, 0x8d, 0xb5, 0x6b, 0xf1, 0xda,
1497                 0x96, 0xf5, 0x8e, 0x3c, 0x38, 0x5a, 0xac, 0x9b,
1498                 0xba, 0x0c, 0x84, 0x5d, 0x50, 0x12, 0xc7, 0xc5,
1499                 0x7a, 0xcb, 0xb1, 0xfa, 0x16, 0x93, 0xdf, 0x98,
1500                 0xda, 0x3f, 0x49, 0xa3, 0x94, 0x78, 0x70, 0xc7,
1501                 0x0b, 0xb6, 0x91, 0xa6, 0x16, 0x2e, 0xcf, 0xfd,
1502                 0x51, 0x6a, 0x5b, 0xad, 0x7a, 0xdd, 0xa9, 0x48,
1503                 0x48, 0xac, 0xd6, 0x45, 0xbc, 0x23, 0x31, 0x1d,
1504                 0x86, 0x54, 0x8a, 0x7f, 0x04, 0x97, 0x71, 0x9e,
1505                 0xbc, 0x2e, 0x6b, 0xd9, 0x33, 0xc8, 0x20, 0xc9,
1506                 0xe0, 0x25, 0x86, 0x59, 0x15, 0xcf, 0x63, 0xe5,
1507                 0x99, 0xf1, 0x24, 0xf1, 0xba, 0xc4, 0x15, 0x02,
1508                 0xe2, 0xdb, 0xfe, 0x4a, 0xf8, 0x3b, 0x91, 0x13,
1509                 0x8d, 0x03, 0x81, 0x9f, 0xb3, 0x3f, 0x04, 0x03,
1510                 0x58, 0xc0, 0xef, 0x27, 0x82, 0x14, 0xd2, 0x7f,
1511                 0x93, 0x70, 0xb7, 0xb2, 0x02, 0x21, 0xb3, 0x07,
1512                 0x7f, 0x1c, 0xef, 0x88, 0xee, 0x29, 0x7a, 0x0b,
1513                 0x3d, 0x75, 0x5a, 0x93, 0xfe, 0x7f, 0x14, 0xf7,
1514                 0x4e, 0x4b, 0x7f, 0x21, 0x02, 0xad, 0xf9, 0x43,
1515                 0x29, 0x1a, 0xe8, 0x1b, 0xf5, 0x32, 0xb2, 0x96,
1516                 0xe6, 0xe8, 0x96, 0x20, 0x9b, 0x96, 0x8e, 0x7b,
1517                 0xfe, 0xd8, 0xc9, 0x9c, 0x65, 0x16, 0xd6, 0x68,
1518                 0x95, 0xf8, 0x22, 0xe2, 0xae, 0x84, 0x03, 0xfd,
1519                 0x87, 0xa2, 0x72, 0x79, 0x74, 0x95, 0xfa, 0xe1,
1520                 0xfe, 0xd0, 0x4e, 0x3d, 0x39, 0x2e, 0x67, 0x55,
1521                 0x71, 0x6c, 0x89, 0x33, 0x49, 0x0c, 0x1b, 0x46,
1522                 0x92, 0x31, 0x6f, 0xa6, 0xf0, 0x09, 0xbd, 0x2d,
1523                 0xe2, 0xca, 0xda, 0x18, 0x33, 0xce, 0x67, 0x37,
1524                 0xfd, 0x6f, 0xcb, 0x9d, 0xbd, 0x42, 0xbc, 0xb2,
1525                 0x9c, 0x28, 0xcd, 0x65, 0x3c, 0x61, 0xbc, 0xde,
1526                 0x9d, 0xe1, 0x2a, 0x3e, 0xbf, 0xee, 0x3c, 0xcb,
1527                 0xb1, 0x50, 0xa9, 0x2c, 0xbe, 0xb5, 0x43, 0xd0,
1528                 0xec, 0x29, 0xf9, 0x16, 0x6f, 0x31, 0xd9, 0x9b,
1529                 0x92, 0xb1, 0x32, 0xae, 0x0f, 0xb6, 0x9d, 0x0e,
1530                 0x25, 0x7f, 0x89, 0x1f, 0x1d, 0x01, 0x68, 0xab,
1531                 0x3d, 0xd1, 0x74, 0x5b, 0x4c, 0x38, 0x7f, 0x3d,
1532                 0x33, 0xa5, 0xa2, 0x9f, 0xda, 0x84, 0xa5, 0x82,
1533                 0x2d, 0x16, 0x66, 0x46, 0x08, 0x30, 0x14, 0x48,
1534                 0x5e, 0xca, 0xe3, 0xf4, 0x8c, 0xcb, 0x32, 0xc6,
1535                 0xf1, 0x43, 0x62, 0xc6, 0xef, 0x16, 0xfa, 0x43,
1536                 0xae, 0x9c, 0x53, 0xe3, 0x49, 0x45, 0x80, 0xfd,
1537                 0x1d, 0x8c, 0xa9, 0x6d, 0x77, 0x76, 0xaa, 0x40,
1538                 0xc4, 0x4e, 0x7b, 0x78, 0x6b, 0xe0, 0x1d, 0xce,
1539                 0x56, 0x3d, 0xf0, 0x11, 0xfe, 0x4f, 0x6a, 0x6d,
1540                 0x0f, 0x4f, 0x90, 0x38, 0x92, 0x17, 0xfa, 0x56,
1541                 0x12, 0xa6, 0xa1, 0x0a, 0xea, 0x2f, 0x50, 0xf9,
1542                 0x60, 0x66, 0x6c, 0x7d, 0x5a, 0x08, 0x8e, 0x3c,
1543                 0xf3, 0xf0, 0x33, 0x02, 0x11, 0x02, 0xfe, 0x4c,
1544                 0x56, 0x2b, 0x9f, 0x0c, 0xbd, 0x65, 0x8a, 0x83,
1545                 0xde, 0x7c, 0x05, 0x26, 0x93, 0x19, 0xcc, 0xf3,
1546                 0x71, 0x0e, 0xad, 0x2f, 0xb3, 0xc9, 0x38, 0x50,
1547                 0x64, 0xd5, 0x4c, 0x60, 0x5f, 0x02, 0x13, 0x34,
1548                 0xc9, 0x75, 0xc4, 0x60, 0xab, 0x2e, 0x17, 0x7d
1549 };
1550
1551 static const uint8_t AES_CBC_ciphertext_2048B[] = {
1552                 0x8b, 0x55, 0xbd, 0xfd, 0x2b, 0x35, 0x76, 0x5c,
1553                 0xd1, 0x90, 0xd7, 0x6a, 0x63, 0x1e, 0x39, 0x71,
1554                 0x0d, 0x5c, 0xd8, 0x03, 0x00, 0x75, 0xf1, 0x07,
1555                 0x03, 0x8d, 0x76, 0xeb, 0x3b, 0x00, 0x1e, 0x33,
1556                 0x88, 0xfc, 0x8f, 0x08, 0x4d, 0x33, 0xf1, 0x3c,
1557                 0xee, 0xd0, 0x5d, 0x19, 0x8b, 0x3c, 0x50, 0x86,
1558                 0xfd, 0x8d, 0x58, 0x21, 0xb4, 0xae, 0x0f, 0x81,
1559                 0xe9, 0x9f, 0xc9, 0xc0, 0x90, 0xf7, 0x04, 0x6f,
1560                 0x39, 0x1d, 0x8a, 0x3f, 0x8d, 0x32, 0x23, 0xb5,
1561                 0x1f, 0xcc, 0x8a, 0x12, 0x2d, 0x46, 0x82, 0x5e,
1562                 0x6a, 0x34, 0x8c, 0xb1, 0x93, 0x70, 0x3b, 0xde,
1563                 0x55, 0xaf, 0x16, 0x35, 0x99, 0x84, 0xd5, 0x88,
1564                 0xc9, 0x54, 0xb1, 0xb2, 0xd3, 0xeb, 0x9e, 0x55,
1565                 0x9a, 0xa9, 0xa7, 0xf5, 0xda, 0x29, 0xcf, 0xe1,
1566                 0x98, 0x64, 0x45, 0x77, 0xf2, 0x12, 0x69, 0x8f,
1567                 0x78, 0xd8, 0x82, 0x41, 0xb2, 0x9f, 0xe2, 0x1c,
1568                 0x63, 0x9b, 0x24, 0x81, 0x67, 0x95, 0xa2, 0xff,
1569                 0x26, 0x9d, 0x65, 0x48, 0x61, 0x30, 0x66, 0x41,
1570                 0x68, 0x84, 0xbb, 0x59, 0x14, 0x8e, 0x9a, 0x62,
1571                 0xb6, 0xca, 0xda, 0xbe, 0x7c, 0x41, 0x52, 0x6e,
1572                 0x1b, 0x86, 0xbf, 0x08, 0xeb, 0x37, 0x84, 0x60,
1573                 0xe4, 0xc4, 0x1e, 0xa8, 0x4c, 0x84, 0x60, 0x2f,
1574                 0x70, 0x90, 0xf2, 0x26, 0xe7, 0x65, 0x0c, 0xc4,
1575                 0x58, 0x36, 0x8e, 0x4d, 0xdf, 0xff, 0x9a, 0x39,
1576                 0x93, 0x01, 0xcf, 0x6f, 0x6d, 0xde, 0xef, 0x79,
1577                 0xb0, 0xce, 0xe2, 0x98, 0xdb, 0x85, 0x8d, 0x62,
1578                 0x9d, 0xb9, 0x63, 0xfd, 0xf0, 0x35, 0xb5, 0xa9,
1579                 0x1b, 0xf9, 0xe5, 0xd4, 0x2e, 0x22, 0x2d, 0xcc,
1580                 0x42, 0xbf, 0x0e, 0x51, 0xf7, 0x15, 0x07, 0x32,
1581                 0x75, 0x5b, 0x74, 0xbb, 0x00, 0xef, 0xd4, 0x66,
1582                 0x8b, 0xad, 0x71, 0x53, 0x94, 0xd7, 0x7d, 0x2c,
1583                 0x40, 0x3e, 0x69, 0xa0, 0x4c, 0x86, 0x5e, 0x06,
1584                 0xed, 0xdf, 0x22, 0xe2, 0x24, 0x25, 0x4e, 0x9b,
1585                 0x5f, 0x49, 0x74, 0xba, 0xed, 0xb1, 0xa6, 0xeb,
1586                 0xae, 0x3f, 0xc6, 0x9e, 0x0b, 0x29, 0x28, 0x9a,
1587                 0xb6, 0xb2, 0x74, 0x58, 0xec, 0xa6, 0x4a, 0xed,
1588                 0xe5, 0x10, 0x00, 0x85, 0xe1, 0x63, 0x41, 0x61,
1589                 0x30, 0x7c, 0x97, 0xcf, 0x75, 0xcf, 0xb6, 0xf3,
1590                 0xf7, 0xda, 0x35, 0x3f, 0x85, 0x8c, 0x64, 0xca,
1591                 0xb7, 0xea, 0x7f, 0xe4, 0xa3, 0x4d, 0x30, 0x84,
1592                 0x8c, 0x9c, 0x80, 0x5a, 0x50, 0xa5, 0x64, 0xae,
1593                 0x26, 0xd3, 0xb5, 0x01, 0x73, 0x36, 0x8a, 0x92,
1594                 0x49, 0xc4, 0x1a, 0x94, 0x81, 0x9d, 0xf5, 0x6c,
1595                 0x50, 0xe1, 0x58, 0x0b, 0x75, 0xdd, 0x6b, 0x6a,
1596                 0xca, 0x69, 0xea, 0xc3, 0x33, 0x90, 0x9f, 0x3b,
1597                 0x65, 0x5d, 0x5e, 0xee, 0x31, 0xb7, 0x32, 0xfd,
1598                 0x56, 0x83, 0xb6, 0xfb, 0xa8, 0x04, 0xfc, 0x1e,
1599                 0x11, 0xfb, 0x02, 0x23, 0x53, 0x49, 0x45, 0xb1,
1600                 0x07, 0xfc, 0xba, 0xe7, 0x5f, 0x5d, 0x2d, 0x7f,
1601                 0x9e, 0x46, 0xba, 0xe9, 0xb0, 0xdb, 0x32, 0x04,
1602                 0xa4, 0xa7, 0x98, 0xab, 0x91, 0xcd, 0x02, 0x05,
1603                 0xf5, 0x74, 0x31, 0x98, 0x83, 0x3d, 0x33, 0x11,
1604                 0x0e, 0xe3, 0x8d, 0xa8, 0xc9, 0x0e, 0xf3, 0xb9,
1605                 0x47, 0x67, 0xe9, 0x79, 0x2b, 0x34, 0xcd, 0x9b,
1606                 0x45, 0x75, 0x29, 0xf0, 0xbf, 0xcc, 0xda, 0x3a,
1607                 0x91, 0xb2, 0x15, 0x27, 0x7a, 0xe5, 0xf5, 0x6a,
1608                 0x5e, 0xbe, 0x2c, 0x98, 0xe8, 0x40, 0x96, 0x4f,
1609                 0x8a, 0x09, 0xfd, 0xf6, 0xb2, 0xe7, 0x45, 0xb6,
1610                 0x08, 0xc1, 0x69, 0xe1, 0xb3, 0xc4, 0x24, 0x34,
1611                 0x07, 0x85, 0xd5, 0xa9, 0x78, 0xca, 0xfa, 0x4b,
1612                 0x01, 0x19, 0x4d, 0x95, 0xdc, 0xa5, 0xc1, 0x9c,
1613                 0xec, 0x27, 0x5b, 0xa6, 0x54, 0x25, 0xbd, 0xc8,
1614                 0x0a, 0xb7, 0x11, 0xfb, 0x4e, 0xeb, 0x65, 0x2e,
1615                 0xe1, 0x08, 0x9c, 0x3a, 0x45, 0x44, 0x33, 0xef,
1616                 0x0d, 0xb9, 0xff, 0x3e, 0x68, 0x9c, 0x61, 0x2b,
1617                 0x11, 0xb8, 0x5c, 0x47, 0x0f, 0x94, 0xf2, 0xf8,
1618                 0x0b, 0xbb, 0x99, 0x18, 0x85, 0xa3, 0xba, 0x44,
1619                 0xf3, 0x79, 0xb3, 0x63, 0x2c, 0x1f, 0x2a, 0x35,
1620                 0x3b, 0x23, 0x98, 0xab, 0xf4, 0x16, 0x36, 0xf8,
1621                 0xde, 0x86, 0xa4, 0xd4, 0x75, 0xff, 0x51, 0xf9,
1622                 0xeb, 0x42, 0x5f, 0x55, 0xe2, 0xbe, 0xd1, 0x5b,
1623                 0xb5, 0x38, 0xeb, 0xb4, 0x4d, 0xec, 0xec, 0x99,
1624                 0xe1, 0x39, 0x43, 0xaa, 0x64, 0xf7, 0xc9, 0xd8,
1625                 0xf2, 0x9a, 0x71, 0x43, 0x39, 0x17, 0xe8, 0xa8,
1626                 0xa2, 0xe2, 0xa4, 0x2c, 0x18, 0x11, 0x49, 0xdf,
1627                 0x18, 0xdd, 0x85, 0x6e, 0x65, 0x96, 0xe2, 0xba,
1628                 0xa1, 0x0a, 0x2c, 0xca, 0xdc, 0x5f, 0xe4, 0xf4,
1629                 0x35, 0x03, 0xb2, 0xa9, 0xda, 0xcf, 0xb7, 0x6d,
1630                 0x65, 0x82, 0x82, 0x67, 0x9d, 0x0e, 0xf3, 0xe8,
1631                 0x85, 0x6c, 0x69, 0xb8, 0x4c, 0xa6, 0xc6, 0x2e,
1632                 0x40, 0xb5, 0x54, 0x28, 0x95, 0xe4, 0x57, 0xe0,
1633                 0x5b, 0xf8, 0xde, 0x59, 0xe0, 0xfd, 0x89, 0x48,
1634                 0xac, 0x56, 0x13, 0x54, 0xb9, 0x1b, 0xf5, 0x59,
1635                 0x97, 0xb6, 0xb3, 0xe8, 0xac, 0x2d, 0xfc, 0xd2,
1636                 0xea, 0x57, 0x96, 0x57, 0xa8, 0x26, 0x97, 0x2c,
1637                 0x01, 0x89, 0x56, 0xea, 0xec, 0x8c, 0x53, 0xd5,
1638                 0xd7, 0x9e, 0xc9, 0x98, 0x0b, 0xad, 0x03, 0x75,
1639                 0xa0, 0x6e, 0x98, 0x8b, 0x97, 0x8d, 0x8d, 0x85,
1640                 0x7d, 0x74, 0xa7, 0x2d, 0xde, 0x67, 0x0c, 0xcd,
1641                 0x54, 0xb8, 0x15, 0x7b, 0xeb, 0xf5, 0x84, 0xb9,
1642                 0x78, 0xab, 0xd8, 0x68, 0x91, 0x1f, 0x6a, 0xa6,
1643                 0x28, 0x22, 0xf7, 0x00, 0x49, 0x00, 0xbe, 0x41,
1644                 0x71, 0x0a, 0xf5, 0xe7, 0x9f, 0xb4, 0x11, 0x41,
1645                 0x3f, 0xcd, 0xa9, 0xa9, 0x01, 0x8b, 0x6a, 0xeb,
1646                 0x54, 0x4c, 0x58, 0x92, 0x68, 0x02, 0x0e, 0xe9,
1647                 0xed, 0x65, 0x4c, 0xfb, 0x95, 0x48, 0x58, 0xa2,
1648                 0xaa, 0x57, 0x69, 0x13, 0x82, 0x0c, 0x2c, 0x4b,
1649                 0x5d, 0x4e, 0x18, 0x30, 0xef, 0x1c, 0xb1, 0x9d,
1650                 0x05, 0x05, 0x02, 0x1c, 0x97, 0xc9, 0x48, 0xfe,
1651                 0x5e, 0x7b, 0x77, 0xa3, 0x1f, 0x2a, 0x81, 0x42,
1652                 0xf0, 0x4b, 0x85, 0x12, 0x9c, 0x1f, 0x44, 0xb1,
1653                 0x14, 0x91, 0x92, 0x65, 0x77, 0xb1, 0x87, 0xa2,
1654                 0xfc, 0xa4, 0xe7, 0xd2, 0x9b, 0xf2, 0x17, 0xf0,
1655                 0x30, 0x1c, 0x8d, 0x33, 0xbc, 0x25, 0x28, 0x48,
1656                 0xfd, 0x30, 0x79, 0x0a, 0x99, 0x3e, 0xb4, 0x0f,
1657                 0x1e, 0xa6, 0x68, 0x76, 0x19, 0x76, 0x29, 0xac,
1658                 0x5d, 0xb8, 0x1e, 0x42, 0xd6, 0x85, 0x04, 0xbf,
1659                 0x64, 0x1c, 0x2d, 0x53, 0xe9, 0x92, 0x78, 0xf8,
1660                 0xc3, 0xda, 0x96, 0x92, 0x10, 0x6f, 0x45, 0x85,
1661                 0xaf, 0x5e, 0xcc, 0xa8, 0xc0, 0xc6, 0x2e, 0x73,
1662                 0x51, 0x3f, 0x5e, 0xd7, 0x52, 0x33, 0x71, 0x12,
1663                 0x6d, 0x85, 0xee, 0xea, 0x85, 0xa8, 0x48, 0x2b,
1664                 0x40, 0x64, 0x6d, 0x28, 0x73, 0x16, 0xd7, 0x82,
1665                 0xd9, 0x90, 0xed, 0x1f, 0xa7, 0x5c, 0xb1, 0x5c,
1666                 0x27, 0xb9, 0x67, 0x8b, 0xb4, 0x17, 0x13, 0x83,
1667                 0x5f, 0x09, 0x72, 0x0a, 0xd7, 0xa0, 0xec, 0x81,
1668                 0x59, 0x19, 0xb9, 0xa6, 0x5a, 0x37, 0x34, 0x14,
1669                 0x47, 0xf6, 0xe7, 0x6c, 0xd2, 0x09, 0x10, 0xe7,
1670                 0xdd, 0xbb, 0x02, 0xd1, 0x28, 0xfa, 0x01, 0x2c,
1671                 0x93, 0x64, 0x2e, 0x1b, 0x4c, 0x02, 0x52, 0xcb,
1672                 0x07, 0xa1, 0xb6, 0x46, 0x02, 0x80, 0xd9, 0x8f,
1673                 0x5c, 0x62, 0xbe, 0x78, 0x9e, 0x75, 0xc4, 0x97,
1674                 0x91, 0x39, 0x12, 0x65, 0xb9, 0x3b, 0xc2, 0xd1,
1675                 0xaf, 0xf2, 0x1f, 0x4e, 0x4d, 0xd1, 0xf0, 0x9f,
1676                 0xb7, 0x12, 0xfd, 0xe8, 0x75, 0x18, 0xc0, 0x9d,
1677                 0x8c, 0x70, 0xff, 0x77, 0x05, 0xb6, 0x1a, 0x1f,
1678                 0x96, 0x48, 0xf6, 0xfe, 0xd5, 0x5d, 0x98, 0xa5,
1679                 0x72, 0x1c, 0x84, 0x76, 0x3e, 0xb8, 0x87, 0x37,
1680                 0xdd, 0xd4, 0x3a, 0x45, 0xdd, 0x09, 0xd8, 0xe7,
1681                 0x09, 0x2f, 0x3e, 0x33, 0x9e, 0x7b, 0x8c, 0xe4,
1682                 0x85, 0x12, 0x4e, 0xf8, 0x06, 0xb7, 0xb1, 0x85,
1683                 0x24, 0x96, 0xd8, 0xfe, 0x87, 0x92, 0x81, 0xb1,
1684                 0xa3, 0x38, 0xb9, 0x56, 0xe1, 0xf6, 0x36, 0x41,
1685                 0xbb, 0xd6, 0x56, 0x69, 0x94, 0x57, 0xb3, 0xa4,
1686                 0xca, 0xa4, 0xe1, 0x02, 0x3b, 0x96, 0x71, 0xe0,
1687                 0xb2, 0x2f, 0x85, 0x48, 0x1b, 0x4a, 0x41, 0x80,
1688                 0x4b, 0x9c, 0xe0, 0xc9, 0x39, 0xb8, 0xb1, 0xca,
1689                 0x64, 0x77, 0x46, 0x58, 0xe6, 0x84, 0xd5, 0x2b,
1690                 0x65, 0xce, 0xe9, 0x09, 0xa3, 0xaa, 0xfb, 0x83,
1691                 0xa9, 0x28, 0x68, 0xfd, 0xcd, 0xfd, 0x76, 0x83,
1692                 0xe1, 0x20, 0x22, 0x77, 0x3a, 0xa3, 0xb2, 0x93,
1693                 0x14, 0x91, 0xfc, 0xe2, 0x17, 0x63, 0x2b, 0xa6,
1694                 0x29, 0x38, 0x7b, 0x9b, 0x8b, 0x15, 0x77, 0xd6,
1695                 0xaa, 0x92, 0x51, 0x53, 0x50, 0xff, 0xa0, 0x35,
1696                 0xa0, 0x59, 0x7d, 0xf0, 0x11, 0x23, 0x49, 0xdf,
1697                 0x5a, 0x21, 0xc2, 0xfe, 0x35, 0xa0, 0x1d, 0xe2,
1698                 0xae, 0xa2, 0x8a, 0x61, 0x5b, 0xf7, 0xf1, 0x1c,
1699                 0x1c, 0xec, 0xc4, 0xf6, 0xdc, 0xaa, 0xc8, 0xc2,
1700                 0xe5, 0xa1, 0x2e, 0x14, 0xe5, 0xc6, 0xc9, 0x73,
1701                 0x03, 0x78, 0xeb, 0xed, 0xe0, 0x3e, 0xc5, 0xf4,
1702                 0xf1, 0x50, 0xb2, 0x01, 0x91, 0x96, 0xf5, 0xbb,
1703                 0xe1, 0x32, 0xcd, 0xa8, 0x66, 0xbf, 0x73, 0x85,
1704                 0x94, 0xd6, 0x7e, 0x68, 0xc5, 0xe4, 0xed, 0xd5,
1705                 0xe3, 0x67, 0x4c, 0xa5, 0xb3, 0x1f, 0xdf, 0xf8,
1706                 0xb3, 0x73, 0x5a, 0xac, 0xeb, 0x46, 0x16, 0x24,
1707                 0xab, 0xca, 0xa4, 0xdd, 0x87, 0x0e, 0x24, 0x83,
1708                 0x32, 0x04, 0x4c, 0xd8, 0xda, 0x7d, 0xdc, 0xe3,
1709                 0x01, 0x93, 0xf3, 0xc1, 0x5b, 0xbd, 0xc3, 0x1d,
1710                 0x40, 0x62, 0xde, 0x94, 0x03, 0x85, 0x91, 0x2a,
1711                 0xa0, 0x25, 0x10, 0xd3, 0x32, 0x9f, 0x93, 0x00,
1712                 0xa7, 0x8a, 0xfa, 0x77, 0x7c, 0xaf, 0x4d, 0xc8,
1713                 0x7a, 0xf3, 0x16, 0x2b, 0xba, 0xeb, 0x74, 0x51,
1714                 0xb8, 0xdd, 0x32, 0xad, 0x68, 0x7d, 0xdd, 0xca,
1715                 0x60, 0x98, 0xc9, 0x9b, 0xb6, 0x5d, 0x4d, 0x3a,
1716                 0x66, 0x8a, 0xbe, 0x05, 0xf9, 0x0c, 0xc5, 0xba,
1717                 0x52, 0x82, 0x09, 0x1f, 0x5a, 0x66, 0x89, 0x69,
1718                 0xa3, 0x5d, 0x93, 0x50, 0x7d, 0x44, 0xc3, 0x2a,
1719                 0xb8, 0xab, 0xec, 0xa6, 0x5a, 0xae, 0x4a, 0x6a,
1720                 0xcd, 0xfd, 0xb6, 0xff, 0x3d, 0x98, 0x05, 0xd9,
1721                 0x5b, 0x29, 0xc4, 0x6f, 0xe0, 0x76, 0xe2, 0x3f,
1722                 0xec, 0xd7, 0xa4, 0x91, 0x63, 0xf5, 0x4e, 0x4b,
1723                 0xab, 0x20, 0x8c, 0x3a, 0x41, 0xed, 0x8b, 0x4b,
1724                 0xb9, 0x01, 0x21, 0xc0, 0x6d, 0xfd, 0x70, 0x5b,
1725                 0x20, 0x92, 0x41, 0x89, 0x74, 0xb7, 0xe9, 0x8b,
1726                 0xfc, 0x6d, 0x17, 0x3f, 0x7f, 0x89, 0x3d, 0x6b,
1727                 0x8f, 0xbc, 0xd2, 0x57, 0xe9, 0xc9, 0x6e, 0xa7,
1728                 0x19, 0x26, 0x18, 0xad, 0xef, 0xb5, 0x87, 0xbf,
1729                 0xb8, 0xa8, 0xd6, 0x7d, 0xdd, 0x5f, 0x94, 0x54,
1730                 0x09, 0x92, 0x2b, 0xf5, 0x04, 0xf7, 0x36, 0x69,
1731                 0x8e, 0xf4, 0xdc, 0x1d, 0x6e, 0x55, 0xbb, 0xe9,
1732                 0x13, 0x05, 0x83, 0x35, 0x9c, 0xed, 0xcf, 0x8c,
1733                 0x26, 0x8c, 0x7b, 0xc7, 0x0b, 0xba, 0xfd, 0xe2,
1734                 0x84, 0x5c, 0x2a, 0x79, 0x43, 0x99, 0xb2, 0xc3,
1735                 0x82, 0x87, 0xc8, 0xcd, 0x37, 0x6d, 0xa1, 0x2b,
1736                 0x39, 0xb2, 0x38, 0x99, 0xd9, 0xfc, 0x02, 0x15,
1737                 0x55, 0x21, 0x62, 0x59, 0xeb, 0x00, 0x86, 0x08,
1738                 0x20, 0xbe, 0x1a, 0x62, 0x4d, 0x7e, 0xdf, 0x68,
1739                 0x73, 0x5b, 0x5f, 0xaf, 0x84, 0x96, 0x2e, 0x1f,
1740                 0x6b, 0x03, 0xc9, 0xa6, 0x75, 0x18, 0xe9, 0xd4,
1741                 0xbd, 0xc8, 0xec, 0x9a, 0x5a, 0xb3, 0x99, 0xab,
1742                 0x5f, 0x7c, 0x08, 0x7f, 0x69, 0x4d, 0x52, 0xa2,
1743                 0x30, 0x17, 0x3b, 0x16, 0x15, 0x1b, 0x11, 0x62,
1744                 0x3e, 0x80, 0x4b, 0x85, 0x7c, 0x9c, 0xd1, 0x3a,
1745                 0x13, 0x01, 0x5e, 0x45, 0xf1, 0xc8, 0x5f, 0xcd,
1746                 0x0e, 0x21, 0xf5, 0x82, 0xd4, 0x7b, 0x5c, 0x45,
1747                 0x27, 0x6b, 0xef, 0xfe, 0xb8, 0xc0, 0x6f, 0xdc,
1748                 0x60, 0x7b, 0xe4, 0xd5, 0x75, 0x71, 0xe6, 0xe8,
1749                 0x7d, 0x6b, 0x6d, 0x80, 0xaf, 0x76, 0x41, 0x58,
1750                 0xb7, 0xac, 0xb7, 0x13, 0x2f, 0x81, 0xcc, 0xf9,
1751                 0x19, 0x97, 0xe8, 0xee, 0x40, 0x91, 0xfc, 0x89,
1752                 0x13, 0x1e, 0x67, 0x9a, 0xdb, 0x8f, 0x8f, 0xc7,
1753                 0x4a, 0xc9, 0xaf, 0x2f, 0x67, 0x01, 0x3c, 0xb8,
1754                 0xa8, 0x3e, 0x78, 0x93, 0x1b, 0xdf, 0xbb, 0x34,
1755                 0x0b, 0x1a, 0xfa, 0xc2, 0x2d, 0xc5, 0x1c, 0xec,
1756                 0x97, 0x4f, 0x48, 0x41, 0x15, 0x0e, 0x75, 0xed,
1757                 0x66, 0x8c, 0x17, 0x7f, 0xb1, 0x48, 0x13, 0xc1,
1758                 0xfb, 0x60, 0x06, 0xf9, 0x72, 0x41, 0x3e, 0xcf,
1759                 0x6e, 0xb6, 0xc8, 0xeb, 0x4b, 0x5a, 0xd2, 0x0c,
1760                 0x28, 0xda, 0x02, 0x7a, 0x46, 0x21, 0x42, 0xb5,
1761                 0x34, 0xda, 0xcb, 0x5e, 0xbd, 0x66, 0x5c, 0xca,
1762                 0xff, 0x52, 0x43, 0x89, 0xf9, 0x10, 0x9a, 0x9e,
1763                 0x9b, 0xe3, 0xb0, 0x51, 0xe9, 0xf3, 0x0a, 0x35,
1764                 0x77, 0x54, 0xcc, 0xac, 0xa6, 0xf1, 0x2e, 0x36,
1765                 0x89, 0xac, 0xc5, 0xc6, 0x62, 0x5a, 0xc0, 0x6d,
1766                 0xc4, 0xe1, 0xf7, 0x64, 0x30, 0xff, 0x11, 0x40,
1767                 0x13, 0x89, 0xd8, 0xd7, 0x73, 0x3f, 0x93, 0x08,
1768                 0x68, 0xab, 0x66, 0x09, 0x1a, 0xea, 0x78, 0xc9,
1769                 0x52, 0xf2, 0xfd, 0x93, 0x1b, 0x94, 0xbe, 0x5c,
1770                 0xe5, 0x00, 0x6e, 0x00, 0xb9, 0xea, 0x27, 0xaa,
1771                 0xb3, 0xee, 0xe3, 0xc8, 0x6a, 0xb0, 0xc1, 0x8e,
1772                 0x9b, 0x54, 0x40, 0x10, 0x96, 0x06, 0xe8, 0xb3,
1773                 0xf5, 0x55, 0x77, 0xd7, 0x5c, 0x94, 0xc1, 0x74,
1774                 0xf3, 0x07, 0x64, 0xac, 0x1c, 0xde, 0xc7, 0x22,
1775                 0xb0, 0xbf, 0x2a, 0x5a, 0xc0, 0x8f, 0x8a, 0x83,
1776                 0x50, 0xc2, 0x5e, 0x97, 0xa0, 0xbe, 0x49, 0x7e,
1777                 0x47, 0xaf, 0xa7, 0x20, 0x02, 0x35, 0xa4, 0x57,
1778                 0xd9, 0x26, 0x63, 0xdb, 0xf1, 0x34, 0x42, 0x89,
1779                 0x36, 0xd1, 0x77, 0x6f, 0xb1, 0xea, 0x79, 0x7e,
1780                 0x95, 0x10, 0x5a, 0xee, 0xa3, 0xae, 0x6f, 0xba,
1781                 0xa9, 0xef, 0x5a, 0x7e, 0x34, 0x03, 0x04, 0x07,
1782                 0x92, 0xd6, 0x07, 0x79, 0xaa, 0x14, 0x90, 0x97,
1783                 0x05, 0x4d, 0xa6, 0x27, 0x10, 0x5c, 0x25, 0x24,
1784                 0xcb, 0xcc, 0xf6, 0x77, 0x9e, 0x43, 0x23, 0xd4,
1785                 0x98, 0xef, 0x22, 0xa8, 0xad, 0xf2, 0x26, 0x08,
1786                 0x59, 0x69, 0xa4, 0xc3, 0x97, 0xe0, 0x5c, 0x6f,
1787                 0xeb, 0x3d, 0xd4, 0x62, 0x6e, 0x80, 0x61, 0x02,
1788                 0xf4, 0xfc, 0x94, 0x79, 0xbb, 0x4e, 0x6d, 0xd7,
1789                 0x30, 0x5b, 0x10, 0x11, 0x5a, 0x3d, 0xa7, 0x50,
1790                 0x1d, 0x9a, 0x13, 0x5f, 0x4f, 0xa8, 0xa7, 0xb6,
1791                 0x39, 0xc7, 0xea, 0xe6, 0x19, 0x61, 0x69, 0xc7,
1792                 0x9a, 0x3a, 0xeb, 0x9d, 0xdc, 0xf7, 0x06, 0x37,
1793                 0xbd, 0xac, 0xe3, 0x18, 0xff, 0xfe, 0x11, 0xdb,
1794                 0x67, 0x42, 0xb4, 0xea, 0xa8, 0xbd, 0xb0, 0x76,
1795                 0xd2, 0x74, 0x32, 0xc2, 0xa4, 0x9c, 0xe7, 0x60,
1796                 0xc5, 0x30, 0x9a, 0x57, 0x66, 0xcd, 0x0f, 0x02,
1797                 0x4c, 0xea, 0xe9, 0xd3, 0x2a, 0x5c, 0x09, 0xc2,
1798                 0xff, 0x6a, 0xde, 0x5d, 0xb7, 0xe9, 0x75, 0x6b,
1799                 0x29, 0x94, 0xd6, 0xf7, 0xc3, 0xdf, 0xfb, 0x70,
1800                 0xec, 0xb5, 0x8c, 0xb0, 0x78, 0x7a, 0xee, 0x52,
1801                 0x5f, 0x8c, 0xae, 0x85, 0xe5, 0x98, 0xa2, 0xb7,
1802                 0x7c, 0x02, 0x2a, 0xcc, 0x9e, 0xde, 0x99, 0x5f,
1803                 0x84, 0x20, 0xbb, 0xdc, 0xf2, 0xd2, 0x13, 0x46,
1804                 0x3c, 0xd6, 0x4d, 0xe7, 0x50, 0xef, 0x55, 0xc3,
1805                 0x96, 0x9f, 0xec, 0x6c, 0xd8, 0xe2, 0xea, 0xed,
1806                 0xc7, 0x33, 0xc9, 0xb3, 0x1c, 0x4f, 0x1d, 0x83,
1807                 0x1d, 0xe4, 0xdd, 0xb2, 0x24, 0x8f, 0xf9, 0xf5
1808 };
1809
1810
1811 static const uint8_t HMAC_SHA256_ciphertext_64B_digest[] = {
1812                 0xc5, 0x6d, 0x4f, 0x29, 0xf4, 0xd2, 0xcc, 0x87,
1813                 0x3c, 0x81, 0x02, 0x6d, 0x38, 0x7a, 0x67, 0x3e,
1814                 0x95, 0x9c, 0x5c, 0x8f, 0xda, 0x5c, 0x06, 0xe0,
1815                 0x65, 0xf1, 0x6c, 0x51, 0x52, 0x49, 0x3e, 0x5f
1816 };
1817
1818 static const uint8_t HMAC_SHA256_ciphertext_128B_digest[] = {
1819                 0x76, 0x64, 0x2d, 0x69, 0x71, 0x5d, 0x6a, 0xd8,
1820                 0x9f, 0x74, 0x11, 0x2f, 0x58, 0xe0, 0x4a, 0x2f,
1821                 0x6c, 0x88, 0x5e, 0x4d, 0x9c, 0x79, 0x83, 0x1c,
1822                 0x8a, 0x14, 0xd0, 0x07, 0xfb, 0xbf, 0x6c, 0x8f
1823 };
1824
1825 static const uint8_t HMAC_SHA256_ciphertext_256B_digest[] = {
1826                 0x05, 0xa7, 0x44, 0xcd, 0x91, 0x8c, 0x95, 0xcf,
1827                 0x7b, 0x8f, 0xd3, 0x90, 0x86, 0x7e, 0x7b, 0xb9,
1828                 0x05, 0xd6, 0x6e, 0x7a, 0xc1, 0x7b, 0x26, 0xff,
1829                 0xd3, 0x4b, 0xe0, 0x22, 0x8b, 0xa8, 0x47, 0x52
1830 };
1831
1832 static const uint8_t HMAC_SHA256_ciphertext_512B_digest[] = {
1833                 0x08, 0xb7, 0x29, 0x54, 0x18, 0x7e, 0x97, 0x49,
1834                 0xc6, 0x7c, 0x9f, 0x94, 0xa5, 0x4f, 0xa2, 0x25,
1835                 0xd0, 0xe2, 0x30, 0x7b, 0xad, 0x93, 0xc9, 0x12,
1836                 0x0f, 0xf0, 0xf0, 0x71, 0xc2, 0xf6, 0x53, 0x8f
1837 };
1838
1839 static const uint8_t HMAC_SHA256_ciphertext_768B_digest[] = {
1840                 0xe4, 0x3e, 0x73, 0x93, 0x03, 0xaf, 0x6f, 0x9c,
1841                 0xca, 0x57, 0x3b, 0x4a, 0x6e, 0x83, 0x58, 0xf5,
1842                 0x66, 0xc2, 0xb4, 0xa7, 0xe0, 0xee, 0x63, 0x6b,
1843                 0x48, 0xb7, 0x50, 0x45, 0x69, 0xdf, 0x5c, 0x5b
1844 };
1845
1846 static const uint8_t HMAC_SHA256_ciphertext_1024B_digest[] = {
1847                 0x03, 0xb9, 0x96, 0x26, 0xdc, 0x1c, 0xab, 0xe2,
1848                 0xf5, 0x70, 0x55, 0x15, 0x67, 0x6e, 0x48, 0x11,
1849                 0xe7, 0x67, 0xea, 0xfa, 0x5c, 0x6b, 0x28, 0x22,
1850                 0xc9, 0x0e, 0x67, 0x04, 0xb3, 0x71, 0x7f, 0x88
1851 };
1852
1853 static const uint8_t HMAC_SHA256_ciphertext_1280B_digest[] = {
1854                 0x01, 0x91, 0xb8, 0x78, 0xd3, 0x21, 0x74, 0xa5,
1855                 0x1c, 0x8b, 0xd4, 0xd2, 0xc0, 0x49, 0xd7, 0xd2,
1856                 0x16, 0x46, 0x66, 0x85, 0x50, 0x6d, 0x08, 0xcc,
1857                 0xc7, 0x0a, 0xa3, 0x71, 0xcc, 0xde, 0xee, 0xdc
1858 };
1859
1860 static const uint8_t HMAC_SHA256_ciphertext_1536B_digest[] = {
1861                 0xf2, 0xe5, 0xe9, 0x57, 0x53, 0xd7, 0x69, 0x28,
1862                 0x7b, 0x69, 0xb5, 0x49, 0xa3, 0x31, 0x56, 0x5f,
1863                 0xa4, 0xe9, 0x87, 0x26, 0x2f, 0xe0, 0x2d, 0xd6,
1864                 0x08, 0x44, 0x01, 0x71, 0x0c, 0x93, 0x85, 0x84
1865 };
1866
1867 static const uint8_t HMAC_SHA256_ciphertext_1792B_digest[] = {
1868                 0xf6, 0x57, 0x62, 0x01, 0xbf, 0x2d, 0xea, 0x4a,
1869                 0xef, 0x43, 0x85, 0x60, 0x18, 0xdf, 0x8b, 0xb4,
1870                 0x60, 0xc0, 0xfd, 0x2f, 0x90, 0x15, 0xe6, 0x91,
1871                 0x56, 0x61, 0x68, 0x7f, 0x5e, 0x92, 0xa8, 0xdd
1872 };
1873
1874 static const uint8_t HMAC_SHA256_ciphertext_2048B_digest[] = {
1875                 0x81, 0x1a, 0x29, 0xbc, 0x6b, 0x9f, 0xbb, 0xb8,
1876                 0xef, 0x71, 0x7b, 0x1f, 0x6f, 0xd4, 0x7e, 0x68,
1877                 0x3a, 0x9c, 0xb9, 0x98, 0x22, 0x81, 0xfa, 0x95,
1878                 0xee, 0xbc, 0x7f, 0x23, 0x29, 0x88, 0x76, 0xb8
1879 };
1880
1881 struct crypto_data_params {
1882         const char *name;
1883         uint16_t length;
1884         const char *plaintext;
1885         struct crypto_expected_output {
1886                 const uint8_t *ciphertext;
1887                 const uint8_t *digest;
1888         } expected;
1889 };
1890
1891 #define MAX_PACKET_SIZE_INDEX   10
1892
1893 struct crypto_data_params aes_cbc_hmac_sha256_output[MAX_PACKET_SIZE_INDEX] = {
1894         { "64B", 64, &plaintext_quote[sizeof(plaintext_quote) - 1 - 64],
1895                 { AES_CBC_ciphertext_64B, HMAC_SHA256_ciphertext_64B_digest } },
1896         { "128B", 128, &plaintext_quote[sizeof(plaintext_quote) - 1 - 128],
1897                 { AES_CBC_ciphertext_128B, HMAC_SHA256_ciphertext_128B_digest } },
1898         { "256B", 256, &plaintext_quote[sizeof(plaintext_quote) - 1 - 256],
1899                 { AES_CBC_ciphertext_256B, HMAC_SHA256_ciphertext_256B_digest } },
1900         { "512B", 512, &plaintext_quote[sizeof(plaintext_quote) - 1 - 512],
1901                 { AES_CBC_ciphertext_512B, HMAC_SHA256_ciphertext_512B_digest } },
1902         { "768B", 768, &plaintext_quote[sizeof(plaintext_quote) - 1 - 768],
1903                 { AES_CBC_ciphertext_768B, HMAC_SHA256_ciphertext_768B_digest } },
1904         { "1024B", 1024, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1024],
1905                 { AES_CBC_ciphertext_1024B, HMAC_SHA256_ciphertext_1024B_digest } },
1906         { "1280B", 1280, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1280],
1907                 { AES_CBC_ciphertext_1280B, HMAC_SHA256_ciphertext_1280B_digest } },
1908         { "1536B", 1536, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1536],
1909                 { AES_CBC_ciphertext_1536B, HMAC_SHA256_ciphertext_1536B_digest } },
1910         { "1792B", 1792, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1792],
1911                 { AES_CBC_ciphertext_1792B, HMAC_SHA256_ciphertext_1792B_digest } },
1912         { "2048B", 2048, &plaintext_quote[sizeof(plaintext_quote) - 1 - 2048],
1913                 { AES_CBC_ciphertext_2048B, HMAC_SHA256_ciphertext_2048B_digest } }
1914 };
1915
1916 static int
1917 test_perf_crypto_qp_vary_burst_size(uint16_t dev_num)
1918 {
1919         uint32_t num_to_submit = 4096;
1920         struct rte_crypto_op *c_ops[num_to_submit];
1921         struct rte_crypto_op *proc_ops[num_to_submit];
1922         uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
1923         uint32_t burst_sent, burst_received;
1924         uint32_t i, burst_size, num_sent, num_received;
1925         struct crypto_testsuite_params *ts_params = &testsuite_params;
1926         struct crypto_unittest_params *ut_params = &unittest_params;
1927         struct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;
1928
1929         if (rte_cryptodev_count() == 0) {
1930                 printf("\nNo crypto devices available. Is kernel driver loaded?\n");
1931                 return TEST_FAILED;
1932         }
1933
1934         /* Setup Cipher Parameters */
1935         ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1936         ut_params->cipher_xform.next = &ut_params->auth_xform;
1937
1938         ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
1939         ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
1940         ut_params->cipher_xform.cipher.key.data = aes_cbc_128_key;
1941         ut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;
1942
1943
1944         /* Setup HMAC Parameters */
1945         ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1946         ut_params->auth_xform.next = NULL;
1947
1948         ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
1949         ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
1950         ut_params->auth_xform.auth.key.data = hmac_sha256_key;
1951         ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
1952         ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
1953
1954         /* Create Crypto session*/
1955         ut_params->sess = rte_cryptodev_sym_session_create(ts_params->dev_id,
1956                 &ut_params->cipher_xform);
1957
1958         TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
1959
1960         /* Generate Crypto op data structure(s) */
1961         for (i = 0; i < num_to_submit ; i++) {
1962                 struct rte_mbuf *m = setup_test_string(ts_params->mbuf_mp,
1963                                 data_params[0].expected.ciphertext,
1964                                 data_params[0].length, 0);
1965                 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
1966
1967                 ut_params->digest = (uint8_t *)rte_pktmbuf_append(m,
1968                                 DIGEST_BYTE_LENGTH_SHA256);
1969                 TEST_ASSERT_NOT_NULL(ut_params->digest,
1970                                 "no room to append digest");
1971
1972                 rte_memcpy(ut_params->digest, data_params[0].expected.digest,
1973                         DIGEST_BYTE_LENGTH_SHA256);
1974
1975
1976                 struct rte_crypto_op *op =
1977                                 rte_crypto_op_alloc(ts_params->op_mpool,
1978                                                 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1979
1980                 rte_crypto_op_attach_sym_session(op, ut_params->sess);
1981
1982                 op->sym->auth.digest.data = ut_params->digest;
1983                 op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
1984                                 data_params[0].length);
1985                 op->sym->auth.digest.length = DIGEST_BYTE_LENGTH_SHA256;
1986
1987                 op->sym->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
1988                 op->sym->auth.data.length = data_params[0].length;
1989
1990
1991                 op->sym->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(m,
1992                                 CIPHER_IV_LENGTH_AES_CBC);
1993                 op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
1994                 op->sym->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
1995
1996                 rte_memcpy(op->sym->cipher.iv.data, aes_cbc_128_iv,
1997                                 CIPHER_IV_LENGTH_AES_CBC);
1998
1999                 op->sym->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
2000                 op->sym->cipher.data.length = data_params[0].length;
2001
2002                 op->sym->m_src = m;
2003
2004                 c_ops[i] = op;
2005         }
2006
2007         printf("\nTest to measure the IA cycle cost using AES128_CBC_SHA256_HMAC "
2008                         "algorithm with a constant request size of %u.",
2009                         data_params[0].length);
2010         printf("\nThis test will keep retries at 0 and only measure IA cycle "
2011                         "cost for each request.");
2012         printf("\nDev No\tQP No\tNum Sent\tNum Received\tTx/Rx burst");
2013         printf("\tRetries (Device Busy)\tAverage IA cycle cost "
2014                         "(assuming 0 retries)");
2015         for (i = 2; i <= 128 ; i *= 2) {
2016                 num_sent = 0;
2017                 num_received = 0;
2018                 retries = 0;
2019                 failed_polls = 0;
2020                 burst_size = i;
2021                 total_cycles = 0;
2022                 while (num_sent < num_to_submit) {
2023                         start_cycles = rte_rdtsc_precise();
2024                         burst_sent = rte_cryptodev_enqueue_burst(dev_num,
2025                                         0, &c_ops[num_sent],
2026                                         ((num_to_submit-num_sent) < burst_size) ?
2027                                         num_to_submit-num_sent : burst_size);
2028                         if (burst_sent == 0)
2029                                 retries++;
2030                         else
2031                                 num_sent += burst_sent;
2032                         end_cycles = rte_rdtsc_precise();
2033                         total_cycles += (end_cycles - start_cycles);
2034                         /*
2035                          * Wait until requests have been sent.
2036                          */
2037                         rte_delay_ms(1);
2038
2039                         start_cycles = rte_rdtsc_precise();
2040                         burst_received = rte_cryptodev_dequeue_burst(
2041                                         dev_num, 0, proc_ops, burst_size);
2042                         if (burst_received == 0)
2043                                 failed_polls++;
2044                         else
2045                                 num_received += burst_received;
2046                         end_cycles = rte_rdtsc_precise();
2047                         total_cycles += end_cycles - start_cycles;
2048                 }
2049
2050                 while (num_received != num_to_submit) {
2051                         if (gbl_cryptodev_perftest_devtype ==
2052                                         RTE_CRYPTODEV_AESNI_MB_PMD)
2053                                 rte_cryptodev_enqueue_burst(dev_num, 0,
2054                                                 NULL, 0);
2055
2056                         burst_received = rte_cryptodev_dequeue_burst(
2057                                         dev_num, 0, proc_ops, burst_size);
2058                         if (burst_received == 0)
2059                                 failed_polls++;
2060                         else
2061                                 num_received += burst_received;
2062                 }
2063
2064                 printf("\n%u\t%u\t%u\t\t%u\t\t%u", dev_num, 0,
2065                                         num_sent, num_received, burst_size);
2066                 printf("\t\t%"PRIu64, retries);
2067                 printf("\t\t\t%"PRIu64, total_cycles/num_received);
2068         }
2069         printf("\n");
2070
2071         for (i = 0; i < num_to_submit ; i++) {
2072                 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2073                 rte_crypto_op_free(c_ops[i]);
2074         }
2075         return TEST_SUCCESS;
2076 }
2077
2078 static int
2079 test_perf_snow3G_optimise_cyclecount(struct perf_test_params *pparams)
2080 {
2081         uint32_t num_to_submit = pparams->total_operations;
2082         struct rte_crypto_op *c_ops[num_to_submit];
2083         struct rte_crypto_op *proc_ops[num_to_submit];
2084         uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
2085         uint32_t burst_sent = 0, burst_received = 0;
2086         uint32_t i, burst_size, num_sent, num_ops_received;
2087         struct crypto_testsuite_params *ts_params = &testsuite_params;
2088         static struct rte_cryptodev_sym_session *sess;
2089
2090         if (rte_cryptodev_count() == 0) {
2091                 printf("\nNo crypto devices found. Is PMD build configured?\n");
2092                 printf("\nAnd is kernel driver loaded for HW PMDs?\n");
2093                 return TEST_FAILED;
2094         }
2095
2096         /* Create Crypto session*/
2097         sess = test_perf_create_snow3g_session(ts_params->dev_id,
2098                         pparams->chain, pparams->cipher_algo,
2099                         pparams->cipher_key_length, pparams->auth_algo);
2100         TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2101
2102         /* Generate Crypto op data structure(s)*/
2103         for (i = 0; i < num_to_submit ; i++) {
2104                 struct rte_mbuf *m = test_perf_create_pktmbuf(
2105                                                 ts_params->mbuf_mp,
2106                                                 pparams->buf_size);
2107                 TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
2108
2109                 struct rte_crypto_op *op =
2110                                 rte_crypto_op_alloc(ts_params->op_mpool,
2111                                                 RTE_CRYPTO_OP_TYPE_SYMMETRIC);
2112                 TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
2113
2114                 op = test_perf_set_crypto_op_snow3g(op, m, sess, pparams->buf_size,
2115                                         get_auth_digest_length(pparams->auth_algo));
2116                 TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
2117
2118                 c_ops[i] = op;
2119         }
2120
2121         printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, auth_algo:%s, "
2122                         "Packet Size %u bytes",
2123                         pmd_name(gbl_cryptodev_perftest_devtype),
2124                         ts_params->dev_id, 0,
2125                         chain_mode_name(pparams->chain),
2126                         cipher_algo_name(pparams->cipher_algo),
2127                         auth_algo_name(pparams->auth_algo),
2128                         pparams->buf_size);
2129         printf("\nOps Tx\tOps Rx\tOps/burst  ");
2130         printf("Retries  EmptyPolls\tIACycles/CyOp\tIACycles/Burst\tIACycles/Byte");
2131
2132         for (i = 2; i <= 128 ; i *= 2) {
2133                 num_sent = 0;
2134                 num_ops_received = 0;
2135                 retries = 0;
2136                 failed_polls = 0;
2137                 burst_size = i;
2138                 total_cycles = 0;
2139                 while (num_sent < num_to_submit) {
2140                         start_cycles = rte_rdtsc_precise();
2141                         burst_sent = rte_cryptodev_enqueue_burst(ts_params->dev_id,
2142                                         0, &c_ops[num_sent],
2143                                         ((num_to_submit-num_sent) < burst_size) ?
2144                                         num_to_submit-num_sent : burst_size);
2145                         end_cycles = rte_rdtsc_precise();
2146                         if (burst_sent == 0)
2147                                 retries++;
2148                         num_sent += burst_sent;
2149                         total_cycles += (end_cycles - start_cycles);
2150
2151                         /* Wait until requests have been sent. */
2152
2153                         rte_delay_ms(1);
2154
2155                         start_cycles = rte_rdtsc_precise();
2156                         burst_received = rte_cryptodev_dequeue_burst(
2157                                         ts_params->dev_id, 0, proc_ops, burst_size);
2158                         end_cycles = rte_rdtsc_precise();
2159                         if (burst_received < burst_sent)
2160                                 failed_polls++;
2161                         num_ops_received += burst_received;
2162
2163                         total_cycles += end_cycles - start_cycles;
2164                 }
2165
2166                 while (num_ops_received != num_to_submit) {
2167                         if (gbl_cryptodev_perftest_devtype ==
2168                                         RTE_CRYPTODEV_AESNI_MB_PMD)
2169                                 rte_cryptodev_enqueue_burst(ts_params->dev_id, 0,
2170                                                 NULL, 0);
2171                         start_cycles = rte_rdtsc_precise();
2172                         burst_received = rte_cryptodev_dequeue_burst(
2173                                         ts_params->dev_id, 0, proc_ops, burst_size);
2174                         end_cycles = rte_rdtsc_precise();
2175                         total_cycles += end_cycles - start_cycles;
2176                         if (burst_received == 0)
2177                                 failed_polls++;
2178                         num_ops_received += burst_received;
2179                 }
2180
2181                 printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
2182                 printf("\t\t%"PRIu64, retries);
2183                 printf("\t%"PRIu64, failed_polls);
2184                 printf("\t\t%"PRIu64, total_cycles/num_ops_received);
2185                 printf("\t\t%"PRIu64, (total_cycles/num_ops_received)*burst_size);
2186                 printf("\t\t%"PRIu64, total_cycles/(num_ops_received*pparams->buf_size));
2187         }
2188         printf("\n");
2189
2190         for (i = 0; i < num_to_submit ; i++) {
2191                 rte_pktmbuf_free(c_ops[i]->sym->m_src);
2192                 rte_crypto_op_free(c_ops[i]);
2193         }
2194
2195         return TEST_SUCCESS;
2196 }
2197
2198 static int
2199 test_perf_snow3G_vary_burst_size(void)
2200 {
2201         unsigned total_operations = 4096;
2202         /*no need to vary pkt size for QAT, should have no effect on IA cycles */
2203         uint16_t buf_lengths[] = {40};
2204         uint8_t i, j;
2205
2206         struct perf_test_params params_set[] = {
2207                         {
2208                                         .chain = CIPHER_ONLY,
2209                                         .cipher_algo  = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2210                                         .cipher_key_length = 16,
2211                                         .auth_algo  = RTE_CRYPTO_AUTH_NULL,
2212                         },
2213                         {
2214                                         .chain = HASH_ONLY,
2215                                         .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
2216                                         .auth_algo  = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2217                                         .cipher_key_length = 16
2218                         },
2219         };
2220
2221         printf("\n\nStart %s.", __func__);
2222         printf("\nThis Test measures the average IA cycle cost using a "
2223                         "constant request(packet) size. ");
2224         printf("Cycle cost is only valid when indicators show device is not busy,"
2225                         " i.e. Retries and EmptyPolls = 0");
2226
2227         for (i = 0; i < RTE_DIM(params_set); i++) {
2228                 printf("\n");
2229                 params_set[i].total_operations = total_operations;
2230
2231                 for (j = 0;
2232                         j < RTE_DIM(buf_lengths);
2233                         j++) {
2234
2235                         params_set[i].buf_size = buf_lengths[j];
2236
2237                         test_perf_snow3G_optimise_cyclecount(&params_set[i]);
2238                 }
2239
2240         }
2241
2242         return 0;
2243 }
2244
2245 static uint32_t get_auth_key_max_length(enum rte_crypto_auth_algorithm algo)
2246 {
2247         switch (algo) {
2248         case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
2249                 return 16;
2250         case RTE_CRYPTO_AUTH_SHA1_HMAC:
2251                 return 64;
2252         case RTE_CRYPTO_AUTH_SHA224_HMAC:
2253                 return 64;
2254         case RTE_CRYPTO_AUTH_SHA256_HMAC:
2255                 return 64;
2256         case RTE_CRYPTO_AUTH_SHA384_HMAC:
2257                 return 128;
2258         case RTE_CRYPTO_AUTH_SHA512_HMAC:
2259                 return 128;
2260         default:
2261                 return 0;
2262         }
2263 }
2264
2265 static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo)
2266 {
2267         switch (algo) {
2268         case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
2269                 return 4;
2270         case RTE_CRYPTO_AUTH_SHA1_HMAC:
2271                 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA1;
2272         case RTE_CRYPTO_AUTH_SHA224_HMAC:
2273                 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA224;
2274         case RTE_CRYPTO_AUTH_SHA256_HMAC:
2275                 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA256;
2276         case RTE_CRYPTO_AUTH_SHA384_HMAC:
2277                 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA384;
2278         case RTE_CRYPTO_AUTH_SHA512_HMAC:
2279                 return TRUNCATED_DIGEST_BYTE_LENGTH_SHA512;
2280         default:
2281                 return 0;
2282         }
2283 }
2284
2285 static uint8_t aes_cbc_key[] = {
2286                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2287                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2288                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2289                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2290 };
2291
2292 static uint8_t aes_cbc_iv[] = {
2293                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2294                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2295 };
2296
2297 static uint8_t hmac_sha_key[] = {
2298                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2299                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2300                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2301                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2302                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2303                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2304                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2305                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2306                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2307                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2308                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2309                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2310                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2311                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2312                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2313                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2314 };
2315
2316 static uint8_t snow3g_cipher_key[] = {
2317                 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
2318                 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
2319 };
2320
2321 static uint8_t snow3g_iv[] = {
2322                 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
2323                 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
2324 };
2325
2326 static uint8_t snow3g_hash_key[] = {
2327                 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
2328                 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
2329 };
2330
2331 static struct rte_cryptodev_sym_session *
2332 test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,
2333                 enum rte_crypto_cipher_algorithm cipher_algo,
2334                 unsigned cipher_key_len,
2335                 enum rte_crypto_auth_algorithm auth_algo)
2336 {
2337         struct rte_crypto_sym_xform cipher_xform = { 0 };
2338         struct rte_crypto_sym_xform auth_xform = { 0 };
2339
2340
2341         /* Setup Cipher Parameters */
2342         cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2343         cipher_xform.cipher.algo = cipher_algo;
2344         cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2345
2346         cipher_xform.cipher.key.data = aes_cbc_key;
2347         cipher_xform.cipher.key.length = cipher_key_len;
2348
2349         /* Setup HMAC Parameters */
2350         auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2351         auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2352         auth_xform.auth.algo = auth_algo;
2353
2354         auth_xform.auth.key.data = hmac_sha_key;
2355         auth_xform.auth.key.length =  get_auth_key_max_length(auth_algo);
2356         auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
2357
2358         switch (chain) {
2359         case CIPHER_HASH:
2360                 cipher_xform.next = &auth_xform;
2361                 auth_xform.next = NULL;
2362                 /* Create Crypto session*/
2363                 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2364         case HASH_CIPHER:
2365                 auth_xform.next = &cipher_xform;
2366                 cipher_xform.next = NULL;
2367                 /* Create Crypto session*/
2368                 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2369         default:
2370                 return NULL;
2371         }
2372 }
2373
2374 static struct rte_cryptodev_sym_session *
2375 test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,
2376                 enum rte_crypto_cipher_algorithm cipher_algo, unsigned cipher_key_len,
2377                 enum rte_crypto_auth_algorithm auth_algo)
2378 {
2379         struct rte_crypto_sym_xform cipher_xform = {0};
2380         struct rte_crypto_sym_xform auth_xform = {0};
2381
2382
2383         /* Setup Cipher Parameters */
2384         cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2385         cipher_xform.cipher.algo = cipher_algo;
2386         cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2387
2388         cipher_xform.cipher.key.data = snow3g_cipher_key;
2389         cipher_xform.cipher.key.length = cipher_key_len;
2390
2391         /* Setup HMAC Parameters */
2392         auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2393         auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
2394         auth_xform.auth.algo = auth_algo;
2395
2396         auth_xform.auth.key.data = snow3g_hash_key;
2397         auth_xform.auth.key.length =  get_auth_key_max_length(auth_algo);
2398         auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
2399
2400         switch (chain) {
2401         case CIPHER_HASH:
2402                 cipher_xform.next = &auth_xform;
2403                 auth_xform.next = NULL;
2404                 /* Create Crypto session*/
2405                 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2406         case HASH_CIPHER:
2407                 auth_xform.next = &cipher_xform;
2408                 cipher_xform.next = NULL;
2409                 /* Create Crypto session*/
2410                 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2411         case CIPHER_ONLY:
2412                 cipher_xform.next = NULL;
2413                 /* Create Crypto session*/
2414                 return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
2415         case HASH_ONLY:
2416                 auth_xform.next = NULL;
2417                 /* Create Crypto session */
2418                 return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
2419         default:
2420                 return NULL;
2421         }
2422 }
2423
2424 #define AES_CBC_BLOCK_SIZE 16
2425 #define AES_CBC_CIPHER_IV_LENGTH 16
2426 #define SNOW3G_CIPHER_IV_LENGTH 16
2427
2428 static struct rte_mbuf *
2429 test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz)
2430 {
2431         struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
2432
2433         if (rte_pktmbuf_append(m, buf_sz) == NULL) {
2434                 rte_pktmbuf_free(m);
2435                 return NULL;
2436         }
2437
2438         memset(rte_pktmbuf_mtod(m, uint8_t *), 0, buf_sz);
2439
2440         return m;
2441 }
2442
2443 static inline struct rte_crypto_op *
2444 test_perf_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,
2445                 struct rte_cryptodev_sym_session *sess, unsigned data_len,
2446                 unsigned digest_len)
2447 {
2448         if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
2449                 rte_crypto_op_free(op);
2450                 return NULL;
2451         }
2452
2453         /* Authentication Parameters */
2454         op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
2455                                         (m->data_off + data_len);
2456         op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m, data_len);
2457         op->sym->auth.digest.length = digest_len;
2458         op->sym->auth.aad.data = aes_cbc_iv;
2459         op->sym->auth.aad.length = AES_CBC_CIPHER_IV_LENGTH;
2460
2461         /* Cipher Parameters */
2462         op->sym->cipher.iv.data = aes_cbc_iv;
2463         op->sym->cipher.iv.length = AES_CBC_CIPHER_IV_LENGTH;
2464
2465         /* Data lengths/offsets Parameters */
2466         op->sym->auth.data.offset = 0;
2467         op->sym->auth.data.length = data_len;
2468
2469         op->sym->cipher.data.offset = AES_CBC_BLOCK_SIZE;
2470         op->sym->cipher.data.length = data_len - AES_CBC_BLOCK_SIZE;
2471
2472         op->sym->m_src = m;
2473
2474         return op;
2475 }
2476
2477 static inline struct rte_crypto_op *
2478 test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
2479                 struct rte_cryptodev_sym_session *sess, unsigned data_len,
2480                 unsigned digest_len)
2481 {
2482         if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
2483                 rte_crypto_op_free(op);
2484                 return NULL;
2485         }
2486
2487         /* Authentication Parameters */
2488         op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
2489                                                 (m->data_off + data_len);
2490         op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m, data_len);
2491         op->sym->auth.digest.length = digest_len;
2492         op->sym->auth.aad.data = snow3g_iv;
2493         op->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;
2494
2495         /* Cipher Parameters */
2496         op->sym->cipher.iv.data = snow3g_iv;
2497         op->sym->cipher.iv.length = SNOW3G_CIPHER_IV_LENGTH;
2498
2499         /* Data lengths/offsets Parameters */
2500         op->sym->auth.data.offset = 0;
2501         op->sym->auth.data.length = data_len << 3;
2502
2503         op->sym->cipher.data.offset = 0;
2504         op->sym->cipher.data.length = data_len << 3;
2505
2506         op->sym->m_src = m;
2507
2508         return op;
2509 }
2510
2511
2512
2513 /* An mbuf set is used in each burst. An mbuf can be used by multiple bursts at
2514  * same time, i.e. as they're not dereferenced there's no need to wait until
2515  * finished with to re-use */
2516 #define NUM_MBUF_SETS 8
2517
2518 static int
2519 test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,
2520                 struct perf_test_params *pparams)
2521 {
2522         uint16_t i, k, l, m;
2523         uint16_t j = 0;
2524         uint16_t ops_unused = 0;
2525
2526         uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
2527         uint64_t processed = 0, failed_polls = 0, retries = 0;
2528         uint64_t tsc_start = 0, tsc_end = 0;
2529
2530         uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
2531
2532         struct rte_crypto_op *ops[pparams->burst_size];
2533         struct rte_crypto_op *proc_ops[pparams->burst_size];
2534
2535         struct rte_mbuf *mbufs[pparams->burst_size * 8];
2536
2537         struct crypto_testsuite_params *ts_params = &testsuite_params;
2538
2539         static struct rte_cryptodev_sym_session *sess;
2540
2541         if (rte_cryptodev_count() == 0) {
2542                 printf("\nNo crypto devices available. Is kernel driver loaded?\n");
2543                 return TEST_FAILED;
2544         }
2545
2546         /* Create Crypto session*/
2547         sess = test_perf_create_aes_sha_session(ts_params->dev_id,
2548                         pparams->chain, pparams->cipher_algo,
2549                         pparams->cipher_key_length, pparams->auth_algo);
2550         TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2551
2552         /* Generate a burst of crypto operations */
2553         for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
2554                 mbufs[i] = test_perf_create_pktmbuf(
2555                                 ts_params->mbuf_mp,
2556                                 pparams->buf_size);
2557
2558                 if (mbufs[i] == NULL) {
2559                         printf("\nFailed to get mbuf - freeing the rest.\n");
2560                         for (k = 0; k < i; k++)
2561                                 rte_pktmbuf_free(mbufs[k]);
2562                         return -1;
2563                 }
2564
2565         }
2566
2567
2568         tsc_start = rte_rdtsc_precise();
2569
2570         while (total_enqueued < pparams->total_operations) {
2571                 uint16_t burst_size =
2572                 total_enqueued+pparams->burst_size <= pparams->total_operations ?
2573                 pparams->burst_size : pparams->total_operations-total_enqueued;
2574                 uint16_t ops_needed = burst_size-ops_unused;
2575
2576                 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
2577                                 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
2578                         printf("\nFailed to alloc enough ops, finish dequeuing "
2579                                 "and free ops below.");
2580                 } else {
2581                         for (i = 0; i < ops_needed; i++)
2582                                 ops[i] = test_perf_set_crypto_op(ops[i],
2583                                         mbufs[i + (pparams->burst_size *
2584                                                 (j % NUM_MBUF_SETS))],
2585                                         sess, pparams->buf_size, digest_length);
2586
2587                         /* enqueue burst */
2588                         burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
2589                                         queue_id, ops, burst_size);
2590
2591                         if (burst_enqueued < burst_size)
2592                                 retries++;
2593
2594                         ops_unused = burst_size-burst_enqueued;
2595                         total_enqueued += burst_enqueued;
2596                 }
2597
2598                 /* dequeue burst */
2599                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
2600                                 proc_ops, pparams->burst_size);
2601                 if (burst_dequeued == 0)
2602                         failed_polls++;
2603                 else {
2604                         processed += burst_dequeued;
2605
2606                         for (l = 0; l < burst_dequeued; l++)
2607                                 rte_crypto_op_free(proc_ops[l]);
2608                 }
2609                 j++;
2610         }
2611
2612         /* Dequeue any operations still in the crypto device */
2613         while (processed < pparams->total_operations) {
2614                 /* Sending 0 length burst to flush sw crypto device */
2615                 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
2616
2617                 /* dequeue burst */
2618                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
2619                                 proc_ops, pparams->burst_size);
2620                 if (burst_dequeued == 0)
2621                         failed_polls++;
2622                 else {
2623                         processed += burst_dequeued;
2624
2625                         for (m = 0; m < burst_dequeued; m++)
2626                                 rte_crypto_op_free(proc_ops[m]);
2627                 }
2628         }
2629
2630         tsc_end = rte_rdtsc_precise();
2631
2632         double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
2633         double throughput = (ops_s * pparams->buf_size * 8) / 1000000000;
2634
2635         printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size, ops_s/1000000,
2636                         throughput, retries, failed_polls);
2637
2638         for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
2639                 rte_pktmbuf_free(mbufs[i]);
2640
2641         printf("\n");
2642         return TEST_SUCCESS;
2643 }
2644
2645
2646 static int
2647 test_perf_snow3g(uint8_t dev_id, uint16_t queue_id,
2648                 struct perf_test_params *pparams)
2649 {
2650         uint16_t i, k, l, m;
2651         uint16_t j = 0;
2652         uint16_t ops_unused = 0;
2653         uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
2654         uint64_t processed = 0, failed_polls = 0, retries = 0;
2655         uint64_t tsc_start = 0, tsc_end = 0;
2656
2657         uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
2658
2659         struct rte_crypto_op *ops[pparams->burst_size];
2660         struct rte_crypto_op *proc_ops[pparams->burst_size];
2661
2662         struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
2663
2664         struct crypto_testsuite_params *ts_params = &testsuite_params;
2665
2666         static struct rte_cryptodev_sym_session *sess;
2667
2668         if (rte_cryptodev_count() == 0) {
2669                 printf("\nNo crypto devices found. Is PMD build configured?\n");
2670                 printf("\nAnd is kernel driver loaded for HW PMDs?\n");
2671                 return TEST_FAILED;
2672         }
2673
2674         /* Create Crypto session*/
2675         sess = test_perf_create_snow3g_session(ts_params->dev_id,
2676                         pparams->chain, pparams->cipher_algo,
2677                         pparams->cipher_key_length, pparams->auth_algo);
2678         TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
2679
2680         /* Generate a burst of crypto operations */
2681         for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
2682                 mbufs[i] = test_perf_create_pktmbuf(
2683                                 ts_params->mbuf_mp,
2684                                 pparams->buf_size);
2685
2686                 if (mbufs[i] == NULL) {
2687                         printf("\nFailed to get mbuf - freeing the rest.\n");
2688                         for (k = 0; k < i; k++)
2689                                 rte_pktmbuf_free(mbufs[k]);
2690                         return -1;
2691                 }
2692
2693         }
2694
2695         tsc_start = rte_rdtsc_precise();
2696
2697         while (total_enqueued < pparams->total_operations) {
2698                 uint16_t burst_size =
2699                                 (total_enqueued+pparams->burst_size)
2700                                                 <= pparams->total_operations ?
2701                 pparams->burst_size : pparams->total_operations-total_enqueued;
2702                 uint16_t ops_needed = burst_size-ops_unused;
2703                 /* Handle the last burst correctly */
2704                 uint16_t op_offset = pparams->burst_size - burst_size;
2705
2706                 if (ops_needed !=
2707                         rte_crypto_op_bulk_alloc(ts_params->op_mpool,
2708                                                 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2709                                                 ops+op_offset, ops_needed)) {
2710                         printf("\nFailed to alloc enough ops.");
2711                         /*Don't exit, dequeue, more ops should become available*/
2712                 } else {
2713                         for (i = 0; i < ops_needed; i++) {
2714                                 ops[i+op_offset] =
2715                                 test_perf_set_crypto_op_snow3g(ops[i+op_offset],
2716                                 mbufs[i +
2717                                   (pparams->burst_size * (j % NUM_MBUF_SETS))],
2718                                 sess,
2719                                 pparams->buf_size, digest_length);
2720                         }
2721
2722                         /* enqueue burst */
2723                         burst_enqueued =
2724                                 rte_cryptodev_enqueue_burst(dev_id, queue_id,
2725                                                 ops+op_offset, burst_size);
2726
2727                         if (burst_enqueued < burst_size)
2728                                 retries++;
2729
2730                         ops_unused = burst_size-burst_enqueued;
2731                         total_enqueued += burst_enqueued;
2732                 }
2733
2734                 /* dequeue burst */
2735                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
2736                                         proc_ops, pparams->burst_size);
2737                 if (burst_dequeued == 0) {
2738                         failed_polls++;
2739                 } else {
2740                         processed += burst_dequeued;
2741                         for (l = 0; l < burst_dequeued; l++)
2742                                 rte_crypto_op_free(proc_ops[l]);
2743                 }
2744                 j++;
2745         }
2746
2747         /* Dequeue any operations still in the crypto device */
2748         while (processed < pparams->total_operations) {
2749                 /* Sending 0 length burst to flush sw crypto device */
2750                 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
2751
2752                 /* dequeue burst */
2753                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
2754                                 proc_ops, pparams->burst_size);
2755                 if (burst_dequeued == 0)
2756                         failed_polls++;
2757                 else {
2758                         processed += burst_dequeued;
2759                         for (m = 0; m < burst_dequeued; m++)
2760                                 rte_crypto_op_free(proc_ops[m]);
2761                 }
2762         }
2763
2764         tsc_end = rte_rdtsc_precise();
2765
2766         double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
2767         double cycles_burst = (double) (tsc_end - tsc_start) /
2768                                         (double) processed * pparams->burst_size;
2769         double cycles_buff = (double) (tsc_end - tsc_start) / (double) processed;
2770         double cycles_B = cycles_buff / pparams->buf_size;
2771         double throughput = (ops_s * pparams->buf_size * 8) / 1000000;
2772
2773         if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
2774                 /* Cycle count misleading on HW devices for this test, so don't print */
2775                 printf("%4u\t%6.2f\t%10.2f\t n/a \t\t n/a "
2776                         "\t\t n/a \t\t%8"PRIu64"\t%8"PRIu64,
2777                         pparams->buf_size, ops_s/1000000,
2778                         throughput, retries, failed_polls);
2779         } else {
2780                 printf("%4u\t%6.2f\t%10.2f\t%10.2f\t%8.2f"
2781                         "\t%8.2f\t%8"PRIu64"\t%8"PRIu64,
2782                         pparams->buf_size, ops_s/1000000, throughput, cycles_burst,
2783                         cycles_buff, cycles_B, retries, failed_polls);
2784         }
2785
2786         for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
2787                 rte_pktmbuf_free(mbufs[i]);
2788
2789         printf("\n");
2790         return TEST_SUCCESS;
2791 }
2792
2793 /*
2794
2795     perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA1);
2796     perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_256);
2797     perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_512);
2798
2799     perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA1);
2800     perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_256);
2801     perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_512);
2802
2803     perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA1);
2804     perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_256);
2805     perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_512);
2806  */
2807 static int
2808 test_perf_aes_cbc_encrypt_digest_vary_pkt_size(void)
2809 {
2810         unsigned total_operations = 1000000;
2811         unsigned burst_size = 32;
2812         unsigned buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048 };
2813         uint8_t i, j;
2814
2815         struct perf_test_params params_set[] = {
2816                 {
2817                         .chain = CIPHER_HASH,
2818
2819                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2820                         .cipher_key_length = 16,
2821                         .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
2822                 },
2823                 {
2824                         .chain = CIPHER_HASH,
2825
2826                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2827                         .cipher_key_length = 16,
2828                         .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
2829                 },
2830                 {
2831                         .chain = CIPHER_HASH,
2832
2833                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2834                         .cipher_key_length = 16,
2835                         .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
2836                 },
2837                 {
2838                         .chain = CIPHER_HASH,
2839
2840                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2841                         .cipher_key_length = 32,
2842                         .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
2843                 },
2844                 {
2845                         .chain = CIPHER_HASH,
2846
2847                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2848                         .cipher_key_length = 32,
2849                         .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
2850                 },
2851                 {
2852                         .chain = CIPHER_HASH,
2853
2854                         .cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
2855                         .cipher_key_length = 32,
2856                         .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
2857                 },
2858         };
2859
2860         for (i = 0; i < RTE_DIM(params_set); i++) {
2861
2862                 params_set[i].total_operations = total_operations;
2863                 params_set[i].burst_size = burst_size;
2864                 printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
2865                                 " burst_size: %d ops\n",
2866                                 chain_mode_name(params_set[i].chain),
2867                                 cipher_algo_name(params_set[i].cipher_algo),
2868                                 auth_algo_name(params_set[i].auth_algo),
2869                                 params_set[i].cipher_key_length,
2870                                 burst_size);
2871                 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
2872                         "Retries\tEmptyPolls\n");
2873                 for (j = 0; j < RTE_DIM(buf_lengths); j++) {
2874                         params_set[i].buf_size = buf_lengths[j];
2875                         test_perf_aes_sha(testsuite_params.dev_id, 0,
2876                                         &params_set[i]);
2877                 }
2878         }
2879         return 0;
2880 }
2881
2882 static int
2883 test_perf_snow3G_vary_pkt_size(void)
2884 {
2885         unsigned total_operations = 1000000;
2886         uint8_t i, j;
2887         unsigned k;
2888         uint16_t burst_sizes[] = {64};
2889         uint16_t buf_lengths[] = {40, 64, 80, 120, 240, 256, 400, 512, 600, 1024, 2048};
2890
2891         struct perf_test_params params_set[] = {
2892                 {
2893                         .chain = CIPHER_ONLY,
2894                         .cipher_algo  = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
2895                         .cipher_key_length = 16,
2896                         .auth_algo  = RTE_CRYPTO_AUTH_NULL,
2897                 },
2898                 {
2899                         .chain = HASH_ONLY,
2900                         .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
2901                         .auth_algo  = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
2902                         .cipher_key_length = 16
2903                 },
2904         };
2905
2906         printf("\n\nStart %s.", __func__);
2907         printf("\nTest to measure max throughput at various pkt sizes.");
2908         printf("\nOn HW devices t'put maximised when high Retries and EmptyPolls"
2909                         " so cycle cost not relevant (n/a displayed).");
2910
2911         for (i = 0; i < RTE_DIM(params_set); i++) {
2912                 printf("\n\n");
2913                 params_set[i].total_operations = total_operations;
2914                 for (k = 0; k < RTE_DIM(burst_sizes); k++) {
2915                         printf("\nOn %s dev%u qp%u, %s, "
2916                                 "cipher algo:%s, auth algo:%s, burst_size: %d ops",
2917                                 pmd_name(gbl_cryptodev_perftest_devtype),
2918                                 testsuite_params.dev_id, 0,
2919                                 chain_mode_name(params_set[i].chain),
2920                                 cipher_algo_name(params_set[i].cipher_algo),
2921                                 auth_algo_name(params_set[i].auth_algo),
2922                                 burst_sizes[k]);
2923
2924                         params_set[i].burst_size = burst_sizes[k];
2925                         printf("\nPktSzB\tOp/s(M)\tThruput(Mbps)\tCycles/Burst\t"
2926                                 "Cycles/buf\tCycles/B\tRetries\t\tEmptyPolls\n");
2927                         for (j = 0; j < RTE_DIM(buf_lengths); j++) {
2928
2929                                 params_set[i].buf_size = buf_lengths[j];
2930
2931                                 test_perf_snow3g(testsuite_params.dev_id, 0, &params_set[i]);
2932                         }
2933                 }
2934         }
2935
2936         return 0;
2937 }
2938
2939 static int
2940 test_perf_aes_cbc_vary_burst_size(void)
2941 {
2942         return test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);
2943 }
2944
2945
2946 static struct rte_cryptodev_sym_session *
2947 test_perf_create_session(uint8_t dev_id, struct perf_test_params *pparams)
2948 {
2949         static struct rte_cryptodev_sym_session *sess;
2950         struct rte_crypto_sym_xform cipher_xform = { 0 };
2951         struct rte_crypto_sym_xform auth_xform = { 0 };
2952
2953         uint8_t cipher_key[pparams->session_attrs->key_cipher_len];
2954         uint8_t auth_key[pparams->session_attrs->key_auth_len];
2955
2956         memcpy(cipher_key, pparams->session_attrs->key_cipher_data,
2957                  pparams->session_attrs->key_cipher_len);
2958         memcpy(auth_key, pparams->session_attrs->key_auth_data,
2959                  pparams->session_attrs->key_auth_len);
2960
2961         cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
2962         cipher_xform.next = NULL;
2963
2964         cipher_xform.cipher.algo = pparams->session_attrs->cipher_algorithm;
2965         cipher_xform.cipher.op = pparams->session_attrs->cipher;
2966         cipher_xform.cipher.key.data = cipher_key;
2967         cipher_xform.cipher.key.length = pparams->session_attrs->key_cipher_len;
2968
2969         auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
2970         auth_xform.next = NULL;
2971
2972         auth_xform.auth.op = pparams->session_attrs->auth;
2973         auth_xform.auth.algo = pparams->session_attrs->auth_algorithm;
2974
2975         auth_xform.auth.digest_length = pparams->session_attrs->digest_len;
2976         auth_xform.auth.key.length = pparams->session_attrs->key_auth_len;
2977
2978
2979         cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
2980         if (cipher_xform.cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
2981                 cipher_xform.next = &auth_xform;
2982                 sess = rte_cryptodev_sym_session_create(dev_id,
2983                                 &cipher_xform);
2984         } else {
2985                 auth_xform.next = &cipher_xform;
2986                 sess = rte_cryptodev_sym_session_create(dev_id,
2987                                 &auth_xform);
2988         }
2989
2990         return sess;
2991 }
2992
2993 static inline struct rte_crypto_op *
2994 perf_gcm_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,
2995                 struct rte_cryptodev_sym_session *sess,
2996                 struct crypto_params *m_hlp,
2997                 struct perf_test_params *params)
2998 {
2999         if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
3000                 rte_crypto_op_free(op);
3001                 return NULL;
3002         }
3003
3004         uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len,
3005                                                  16);
3006
3007         op->sym->auth.digest.data = m_hlp->digest;
3008         op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
3009                                           m,
3010                                           params->symmetric_op->aad_len +
3011                                           iv_pad_len +
3012                                           params->symmetric_op->p_len);
3013
3014         op->sym->auth.digest.length = params->symmetric_op->t_len;
3015
3016         op->sym->auth.aad.data = m_hlp->aad;
3017         op->sym->auth.aad.length = params->symmetric_op->aad_len;
3018         op->sym->auth.aad.phys_addr = rte_pktmbuf_mtophys_offset(
3019                                           m,
3020                                           iv_pad_len);
3021
3022         rte_memcpy(op->sym->auth.aad.data, params->symmetric_op->aad_data,
3023                        params->symmetric_op->aad_len);
3024
3025         op->sym->cipher.iv.data = m_hlp->iv;
3026         rte_memcpy(op->sym->cipher.iv.data, params->symmetric_op->iv_data,
3027                        params->symmetric_op->iv_len);
3028         if (params->symmetric_op->iv_len == 12)
3029                 op->sym->cipher.iv.data[15] = 1;
3030
3031         op->sym->cipher.iv.length = params->symmetric_op->iv_len;
3032
3033         op->sym->auth.data.offset =
3034                         iv_pad_len + params->symmetric_op->aad_len;
3035         op->sym->auth.data.length = params->symmetric_op->p_len;
3036
3037         op->sym->cipher.data.offset =
3038                         iv_pad_len + params->symmetric_op->aad_len;
3039         op->sym->cipher.data.length = params->symmetric_op->p_len;
3040
3041         op->sym->m_src = m;
3042
3043         return op;
3044 }
3045
3046 static struct rte_mbuf *
3047 test_perf_create_pktmbuf_fill(struct rte_mempool *mpool,
3048                 struct perf_test_params *params,
3049                 unsigned buf_sz, struct crypto_params *m_hlp)
3050 {
3051         struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
3052         uint16_t iv_pad_len =
3053                         ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len, 16);
3054         uint16_t aad_len = params->symmetric_op->aad_len;
3055         uint16_t digest_size = params->symmetric_op->t_len;
3056         char *p;
3057
3058         p = rte_pktmbuf_append(m, aad_len);
3059         if (p == NULL) {
3060                 rte_pktmbuf_free(m);
3061                 return NULL;
3062         }
3063         m_hlp->aad = (uint8_t *)p;
3064
3065         p = rte_pktmbuf_append(m, iv_pad_len);
3066         if (p == NULL) {
3067                 rte_pktmbuf_free(m);
3068                 return NULL;
3069         }
3070         m_hlp->iv = (uint8_t *)p;
3071
3072         p = rte_pktmbuf_append(m, buf_sz);
3073         if (p == NULL) {
3074                 rte_pktmbuf_free(m);
3075                 return NULL;
3076         }
3077         rte_memcpy(p, params->symmetric_op->p_data, buf_sz);
3078
3079         p = rte_pktmbuf_append(m, digest_size);
3080         if (p == NULL) {
3081                 rte_pktmbuf_free(m);
3082                 return NULL;
3083         }
3084         m_hlp->digest = (uint8_t *)p;
3085
3086         return m;
3087 }
3088
3089 static int
3090 perf_AES_GCM(uint8_t dev_id, uint16_t queue_id,
3091              struct perf_test_params *pparams, uint32_t test_ops)
3092 {
3093         int j = 0;
3094         struct crypto_testsuite_params *ts_params = &testsuite_params;
3095         struct rte_cryptodev_sym_session *sess;
3096         struct rte_crypto_op *ops[pparams->burst_size];
3097         struct rte_crypto_op *proc_ops[pparams->burst_size];
3098         uint32_t total_operations = pparams->total_operations;
3099
3100         uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
3101         uint64_t processed = 0, failed_polls = 0, retries = 0;
3102         uint64_t tsc_start = 0, tsc_end = 0;
3103
3104         uint16_t i = 0, l = 0, m = 0;
3105         uint16_t burst = pparams->burst_size * NUM_MBUF_SETS;
3106         uint16_t ops_unused = 0;
3107
3108         struct rte_mbuf *mbufs[burst];
3109         struct crypto_params m_hlp[burst];
3110
3111         if (rte_cryptodev_count() == 0) {
3112                 printf("\nNo crypto devices available. "
3113                                 "Is kernel driver loaded?\n");
3114                 return TEST_FAILED;
3115         }
3116
3117         sess = test_perf_create_session(dev_id, pparams);
3118         TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
3119
3120         for (i = 0; i < burst; i++) {
3121                 mbufs[i] = test_perf_create_pktmbuf_fill(
3122                                 ts_params->mbuf_mp,
3123                                 pparams, pparams->symmetric_op->p_len,
3124                                 &m_hlp[i]);
3125         }
3126
3127         if (test_ops)
3128                 total_operations = test_ops;
3129
3130         tsc_start = rte_rdtsc_precise();
3131         while (total_enqueued < total_operations) {
3132                 uint16_t burst_size =
3133                 total_enqueued+pparams->burst_size <= total_operations ?
3134                 pparams->burst_size : total_operations-total_enqueued;
3135                 uint16_t ops_needed = burst_size-ops_unused;
3136
3137                 if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
3138                                 RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
3139                         printf("\nFailed to alloc enough ops, "
3140                                         "finish dequeuing");
3141                 } else {
3142                         for (i = 0; i < ops_needed; i++)
3143                                 ops[i] = perf_gcm_set_crypto_op(ops[i],
3144                                         mbufs[i + (pparams->burst_size *
3145                                                 (j % NUM_MBUF_SETS))],
3146                                         sess, &m_hlp[i + (pparams->burst_size *
3147                                                 (j % NUM_MBUF_SETS))], pparams);
3148
3149                         /* enqueue burst */
3150                         burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
3151                                         queue_id, ops, burst_size);
3152
3153                         if (burst_enqueued < burst_size)
3154                                 retries++;
3155
3156                         ops_unused = burst_size-burst_enqueued;
3157                         total_enqueued += burst_enqueued;
3158                 }
3159
3160                 /* dequeue burst */
3161                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3162                                 proc_ops, pparams->burst_size);
3163                 if (burst_dequeued == 0)
3164                         failed_polls++;
3165                 else {
3166                         processed += burst_dequeued;
3167
3168                         for (l = 0; l < burst_dequeued; l++)
3169                                 rte_crypto_op_free(proc_ops[l]);
3170                 }
3171
3172                 j++;
3173         }
3174
3175         /* Dequeue any operations still in the crypto device */
3176         while (processed < total_operations) {
3177                 /* Sending 0 length burst to flush sw crypto device */
3178                 rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
3179
3180                 /* dequeue burst */
3181                 burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
3182                                 proc_ops, pparams->burst_size);
3183                 if (burst_dequeued == 0)
3184                         failed_polls++;
3185                 else {
3186                         processed += burst_dequeued;
3187
3188                 for (m = 0; m < burst_dequeued; m++) {
3189                         if (test_ops) {
3190                                 uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP
3191                                         (pparams->symmetric_op->iv_len, 16);
3192                                 uint8_t *pkt = rte_pktmbuf_mtod(
3193                                         proc_ops[m]->sym->m_src,
3194                                         uint8_t *);
3195
3196                                 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3197                                         pparams->symmetric_op->c_data,
3198                                         pkt + iv_pad_len +
3199                                         pparams->symmetric_op->aad_len,
3200                                         pparams->symmetric_op->c_len,
3201                                         "GCM Ciphertext data not as expected");
3202
3203                                 TEST_ASSERT_BUFFERS_ARE_EQUAL(
3204                                         pparams->symmetric_op->t_data,
3205                                         pkt + iv_pad_len +
3206                                         pparams->symmetric_op->aad_len +
3207                                         pparams->symmetric_op->c_len,
3208                                         pparams->symmetric_op->t_len,
3209                                         "GCM MAC data not as expected");
3210
3211                                 }
3212                                 rte_crypto_op_free(proc_ops[m]);
3213                         }
3214                 }
3215         }
3216
3217         tsc_end = rte_rdtsc_precise();
3218
3219         double ops_s = ((double)processed / (tsc_end - tsc_start))
3220                         * rte_get_tsc_hz();
3221         double throughput = (ops_s * pparams->symmetric_op->p_len * 8)
3222                         / 1000000000;
3223
3224         if (!test_ops) {
3225                 printf("\n%u\t\t%6.2f\t%16.2f\t%8"PRIu64"\t%10"PRIu64,
3226                 pparams->symmetric_op->p_len,
3227                 ops_s/1000000, throughput, retries, failed_polls);
3228         }
3229
3230         for (i = 0; i < burst; i++)
3231                 rte_pktmbuf_free(mbufs[i]);
3232
3233         return 0;
3234 }
3235
3236 static int
3237 test_perf_AES_GCM(void)
3238 {
3239         uint16_t i, j;
3240
3241         uint16_t buf_lengths[] = { 64, 128, 256, 512, 1024, 1536, 2048 };
3242
3243         static const struct cryptodev_perf_test_data *gcm_tests[] = {
3244                         &AES_GCM_128_12IV_0AAD
3245         };
3246
3247         int TEST_CASES_GCM = RTE_DIM(gcm_tests);
3248
3249         const unsigned burst_size = 32;
3250
3251         struct symmetric_op ops_set[TEST_CASES_GCM];
3252         struct perf_test_params params_set[TEST_CASES_GCM];
3253         struct symmetric_session_attrs session_attrs[TEST_CASES_GCM];
3254         static const struct cryptodev_perf_test_data *gcm_test;
3255
3256         for (i = 0; i < TEST_CASES_GCM; ++i) {
3257
3258                 gcm_test = gcm_tests[i];
3259
3260                 session_attrs[i].cipher =
3261                                 RTE_CRYPTO_CIPHER_OP_ENCRYPT;
3262                 session_attrs[i].cipher_algorithm =
3263                                 RTE_CRYPTO_CIPHER_AES_GCM;
3264                 session_attrs[i].key_cipher_data =
3265                                 gcm_test->key.data;
3266                 session_attrs[i].key_cipher_len =
3267                                 gcm_test->key.len;
3268                 session_attrs[i].auth_algorithm =
3269                                 RTE_CRYPTO_AUTH_AES_GCM;
3270                 session_attrs[i].auth =
3271                         RTE_CRYPTO_AUTH_OP_GENERATE;
3272                 session_attrs[i].key_auth_data = NULL;
3273                 session_attrs[i].key_auth_len = 0;
3274                 session_attrs[i].digest_len =
3275                                 gcm_test->auth_tag.len;
3276
3277                 ops_set[i].aad_data = gcm_test->aad.data;
3278                 ops_set[i].aad_len = gcm_test->aad.len;
3279                 ops_set[i].iv_data = gcm_test->iv.data;
3280                 ops_set[i].iv_len = gcm_test->iv.len;
3281                 ops_set[i].p_data = gcm_test->plaintext.data;
3282                 ops_set[i].p_len = buf_lengths[i];
3283                 ops_set[i].c_data = gcm_test->ciphertext.data;
3284                 ops_set[i].c_len = buf_lengths[i];
3285                 ops_set[i].t_data = gcm_test->auth_tags[i].data;
3286                 ops_set[i].t_len = gcm_test->auth_tags[i].len;
3287
3288                 params_set[i].chain = CIPHER_HASH;
3289                 params_set[i].session_attrs = &session_attrs[i];
3290                 params_set[i].symmetric_op = &ops_set[i];
3291                 params_set[i].total_operations = 1000000;
3292                 params_set[i].burst_size = burst_size;
3293
3294         }
3295
3296         for (i = 0; i < RTE_DIM(gcm_tests); i++) {
3297
3298                 printf("\nCipher algo: %s Cipher hash: %s cipher key size: %ub"
3299                                 " burst size: %u", "AES_GCM", "AES_GCM",
3300                                 gcm_test->key.len << 3, burst_size
3301                                 );
3302                 printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
3303                         " Retries\tEmptyPolls");
3304
3305                 for (j = 0; j < RTE_DIM(buf_lengths); ++j) {
3306
3307                         params_set[i].symmetric_op->c_len = buf_lengths[j];
3308                         params_set[i].symmetric_op->p_len = buf_lengths[j];
3309
3310                         ops_set[i].t_data = gcm_tests[i]->auth_tags[j].data;
3311                         ops_set[i].t_len = gcm_tests[i]->auth_tags[j].len;
3312
3313                         /* Run is twice, one for encryption/hash checks,
3314                          * one for perf
3315                          */
3316                         if (perf_AES_GCM(testsuite_params.dev_id, 0,
3317                                         &params_set[i], 1))
3318                                 return TEST_FAILED;
3319
3320                         if (perf_AES_GCM(testsuite_params.dev_id, 0,
3321                                         &params_set[i], 0))
3322                                 return TEST_FAILED;
3323                 }
3324
3325         }
3326         printf("\n");
3327         return 0;
3328 }
3329
3330 static struct unit_test_suite cryptodev_testsuite  = {
3331         .suite_name = "Crypto Device Unit Test Suite",
3332         .setup = testsuite_setup,
3333         .teardown = testsuite_teardown,
3334         .unit_test_cases = {
3335                 TEST_CASE_ST(ut_setup, ut_teardown,
3336                                 test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
3337                 TEST_CASE_ST(ut_setup, ut_teardown,
3338                                 test_perf_AES_GCM),
3339                 TEST_CASE_ST(ut_setup, ut_teardown,
3340                                 test_perf_aes_cbc_vary_burst_size),
3341                 TEST_CASES_END() /**< NULL terminate unit test array */
3342         }
3343 };
3344
3345 static struct unit_test_suite cryptodev_gcm_testsuite  = {
3346         .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
3347         .setup = testsuite_setup,
3348         .teardown = testsuite_teardown,
3349         .unit_test_cases = {
3350                 TEST_CASE_ST(ut_setup, ut_teardown,
3351                                 test_perf_AES_GCM),
3352                 TEST_CASES_END() /**< NULL terminate unit test array */
3353         }
3354 };
3355
3356 static struct unit_test_suite cryptodev_aes_testsuite  = {
3357         .suite_name = "Crypto Device AESNI MB Unit Test Suite",
3358         .setup = testsuite_setup,
3359         .teardown = testsuite_teardown,
3360         .unit_test_cases = {
3361                 TEST_CASE_ST(ut_setup, ut_teardown,
3362                                 test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
3363                 TEST_CASES_END() /**< NULL terminate unit test array */
3364         }
3365 };
3366
3367 static struct unit_test_suite cryptodev_snow3g_testsuite  = {
3368         .suite_name = "Crypto Device SNOW3G Unit Test Suite",
3369         .setup = testsuite_setup,
3370         .teardown = testsuite_teardown,
3371         .unit_test_cases = {
3372                 TEST_CASE_ST(ut_setup, ut_teardown,
3373                                 test_perf_snow3G_vary_pkt_size),
3374                 TEST_CASE_ST(ut_setup, ut_teardown,
3375                                 test_perf_snow3G_vary_burst_size),
3376                 TEST_CASES_END() /**< NULL terminate unit test array */
3377         }
3378 };
3379
3380 static int
3381 perftest_aesni_gcm_cryptodev(void)
3382 {
3383         gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_GCM_PMD;
3384
3385         return unit_test_suite_runner(&cryptodev_gcm_testsuite);
3386 }
3387
3388 static int
3389 perftest_aesni_mb_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
3390 {
3391         gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_MB_PMD;
3392
3393         return unit_test_suite_runner(&cryptodev_aes_testsuite);
3394 }
3395
3396 static int
3397 perftest_qat_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
3398 {
3399         gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
3400
3401         return unit_test_suite_runner(&cryptodev_testsuite);
3402 }
3403
3404 static int
3405 perftest_sw_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
3406 {
3407         gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_SNOW3G_PMD;
3408
3409         return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
3410 }
3411
3412 static int
3413 perftest_qat_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
3414 {
3415         gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
3416
3417         return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
3418 }
3419
3420 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perftest, perftest_aesni_mb_cryptodev);
3421 REGISTER_TEST_COMMAND(cryptodev_qat_perftest, perftest_qat_cryptodev);
3422 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_perftest, perftest_sw_snow3g_cryptodev);
3423 REGISTER_TEST_COMMAND(cryptodev_qat_snow3g_perftest, perftest_qat_snow3g_cryptodev);
3424 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_perftest, perftest_aesni_gcm_cryptodev);