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