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