DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 2/2] app/crypto-perf: support ML DSA
From: Pratik Senapati @ 2026-06-09  5:53 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji
In-Reply-To: <20260609055315.1539233-1-psenapati@marvell.com>

Add ML-DSA44 support to test-crypto-perf.

Signed-off-by: Pratik Senapati <psenapati@marvell.com>
---
 app/test-crypto-perf/cperf_ops.c             |   70 +
 app/test-crypto-perf/cperf_options.h         |    2 +
 app/test-crypto-perf/cperf_options_parsing.c |   20 +-
 app/test-crypto-perf/cperf_test_common.c     |    3 +-
 app/test-crypto-perf/cperf_test_vectors.c    | 1661 ++++++++++++++++++
 app/test-crypto-perf/cperf_test_vectors.h    |   37 +
 app/test-crypto-perf/main.c                  |   17 +
 doc/guides/tools/cryptoperf.rst              |    1 +
 8 files changed, 1809 insertions(+), 2 deletions(-)

diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-perf/cperf_ops.c
index 806265f7bf..7d3a74b505 100644
--- a/app/test-crypto-perf/cperf_ops.c
+++ b/app/test-crypto-perf/cperf_ops.c
@@ -251,6 +251,58 @@ cperf_set_ops_asym_mlkem(struct rte_crypto_op **ops,
 	}
 }
 
+static void
+cperf_set_ops_asym_mldsa(struct rte_crypto_op **ops,
+		uint32_t src_buf_offset __rte_unused,
+		uint32_t dst_buf_offset __rte_unused, uint16_t nb_ops,
+		void *sess,
+		const struct cperf_options *options,
+		const struct cperf_test_vector *test_vector __rte_unused,
+		uint16_t iv_offset __rte_unused,
+		uint32_t *imix_idx __rte_unused,
+		uint64_t *tsc_start __rte_unused)
+{
+	uint16_t i;
+
+	for (i = 0; i < nb_ops; i++) {
+		struct rte_crypto_asym_op *asym_op = ops[i]->asym;
+
+		ops[i]->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;
+		rte_crypto_op_attach_asym_session(ops[i], sess);
+
+		if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_SIGN) {
+			asym_op->mldsa.op = RTE_CRYPTO_ML_DSA_OP_SIGN;
+			asym_op->mldsa.siggen.privkey.data = options->mldsa_data->privkey.data;
+			asym_op->mldsa.siggen.privkey.length = options->mldsa_data->privkey.length;
+			asym_op->mldsa.siggen.message.data = options->mldsa_data->message.data;
+			asym_op->mldsa.siggen.message.length = options->mldsa_data->message.length;
+			asym_op->mldsa.siggen.sign.data = options->mldsa_data->sign.data;
+			asym_op->mldsa.siggen.sign.length = options->mldsa_data->sign.length;
+			asym_op->mldsa.siggen.ctx.data = options->mldsa_data->ctx.data;
+			asym_op->mldsa.siggen.ctx.length = options->mldsa_data->ctx.length;
+			asym_op->mldsa.siggen.seed.data = options->mldsa_data->seed.data;
+			asym_op->mldsa.siggen.seed.length = options->mldsa_data->seed.length;
+			asym_op->mldsa.siggen.mu.data = options->mldsa_data->mu.data;
+			asym_op->mldsa.siggen.mu.length = options->mldsa_data->mu.length;
+			asym_op->mldsa.siggen.hash = options->mldsa_data->hash;
+		} else if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_VERIFY) {
+			asym_op->mldsa.op = RTE_CRYPTO_ML_DSA_OP_VERIFY;
+			asym_op->mldsa.sigver.pubkey.data = options->mldsa_data->pubkey.data;
+			asym_op->mldsa.sigver.pubkey.length = options->mldsa_data->pubkey.length;
+			asym_op->mldsa.sigver.message.data = options->mldsa_data->message.data;
+			asym_op->mldsa.sigver.message.length = options->mldsa_data->message.length;
+			asym_op->mldsa.sigver.sign.data = options->mldsa_data->sign.data;
+			asym_op->mldsa.sigver.sign.length = options->mldsa_data->sign.length;
+			asym_op->mldsa.sigver.ctx.data = options->mldsa_data->ctx.data;
+			asym_op->mldsa.sigver.ctx.length = options->mldsa_data->ctx.length;
+			asym_op->mldsa.sigver.mu.data = options->mldsa_data->mu.data;
+			asym_op->mldsa.sigver.mu.length = options->mldsa_data->mu.length;
+			asym_op->mldsa.sigver.hash = options->mldsa_data->hash;
+		} else {
+			rte_panic("Unsupported ML-DSA operation type %d\n", options->asym_op_type);
+		}
+	}
+}
 
 #ifdef RTE_LIB_SECURITY
 static void
@@ -1269,6 +1321,21 @@ cperf_create_session(struct rte_mempool *sess_mp,
 
 		return asym_sess;
 	}
+	if (options->op_type == CPERF_ASYM_MLDSA44) {
+		xform.next = NULL;
+		xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ML_DSA;
+		xform.mldsa.type = RTE_CRYPTO_ML_DSA_44;
+		xform.mldsa.sign_deterministic =
+		   options->mldsa_data->sign_deterministic;
+		xform.mldsa.sign_prehash = false;
+
+		ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mp, &asym_sess);
+		if (ret < 0) {
+			RTE_LOG(ERR, USER1, "ML-DSA Asym session create failed\n");
+			return NULL;
+		}
+		return asym_sess;
+	}
 
 	if (options->op_type == CPERF_ASYM_MLKEM512) {
 		xform.next = NULL;
@@ -1600,6 +1667,9 @@ cperf_get_op_functions(const struct cperf_options *options,
 	case CPERF_ASYM_SM2:
 		op_fns->populate_ops = cperf_set_ops_asym_sm2;
 		break;
+	case CPERF_ASYM_MLDSA44:
+		op_fns->populate_ops = cperf_set_ops_asym_mldsa;
+		break;
 	case CPERF_ASYM_MLKEM512:
 		op_fns->populate_ops = cperf_set_ops_asym_mlkem;
 		break;
diff --git a/app/test-crypto-perf/cperf_options.h b/app/test-crypto-perf/cperf_options.h
index 98b8eeec3e..d8ceca2424 100644
--- a/app/test-crypto-perf/cperf_options.h
+++ b/app/test-crypto-perf/cperf_options.h
@@ -101,6 +101,7 @@ enum cperf_op_type {
 	CPERF_ASYM_SECP521R1,
 	CPERF_ASYM_ED25519,
 	CPERF_ASYM_SM2,
+	CPERF_ASYM_MLDSA44,
 	CPERF_ASYM_MLKEM512,
 	CPERF_TLS,
 };
@@ -189,6 +190,7 @@ struct cperf_options {
 	struct cperf_eddsa_test_data *eddsa_data;
 	struct cperf_sm2_test_data *sm2_data;
 	struct cperf_mlkem_test_data *mlkem_data;
+	struct cperf_mldsa_test_data *mldsa_data;
 	enum rte_crypto_asym_op_type asym_op_type;
 	enum rte_crypto_auth_algorithm asym_hash_alg;
 	struct cperf_rsa_test_data *rsa_data;
diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c
index 34afa938c8..44c2a7173a 100644
--- a/app/test-crypto-perf/cperf_options_parsing.c
+++ b/app/test-crypto-perf/cperf_options_parsing.c
@@ -41,7 +41,7 @@ usage(char *progname)
 		" --optype cipher-only / auth-only / cipher-then-auth / auth-then-cipher /\n"
 		"        aead / pdcp / docsis / ipsec / modex / rsa / secp192r1 /\n"
 		"        secp224r1 / secp256r1 / secp384r1 / secp521r1 / eddsa / sm2 /\n"
-		"        mlkem_512 /\n"
+		"        mlkem_512 / mldsa_44 /\n"
 		"        tls-record : set operation type\n"
 		" --sessionless: enable session-less crypto operations\n"
 		" --shared-session: share 1 session across all queue pairs on crypto device\n"
@@ -560,6 +560,10 @@ parse_op_type(struct cperf_options *opts, const char *arg)
 			cperf_op_type_strs[CPERF_ASYM_SM2],
 			CPERF_ASYM_SM2
 		},
+		{
+			cperf_op_type_strs[CPERF_ASYM_MLDSA44],
+			CPERF_ASYM_MLDSA44
+		},
 		{
 			cperf_op_type_strs[CPERF_ASYM_MLKEM512],
 			CPERF_ASYM_MLKEM512
@@ -1180,6 +1184,7 @@ cperf_options_default(struct cperf_options *opts)
 	opts->eddsa_data = &ed25519_perf_data;
 	opts->sm2_data = &sm2_perf_data;
 	opts->mlkem_data = &mlkem_encap_perf_data[0];
+	opts->mldsa_data = &mldsa_sign_perf_data[0];
 	opts->asym_op_type = RTE_CRYPTO_ASYM_OP_ENCRYPT;
 }
 
@@ -1709,6 +1714,17 @@ cperf_options_check(struct cperf_options *options)
 	}
 #endif
 
+	if (options->op_type == CPERF_ASYM_MLDSA44) {
+		if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_SIGN)
+			options->mldsa_data = &mldsa_sign_perf_data[0];
+		else if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_VERIFY)
+			options->mldsa_data = &mldsa_verify_perf_data[0];
+		else {
+			RTE_LOG(ERR, USER1, "ML-DSA only supports sign and verify operations\n");
+			return -EINVAL;
+		}
+	}
+
 	return 0;
 }
 
@@ -1759,6 +1775,8 @@ cperf_options_dump(struct cperf_options *opts)
 				   rte_crypto_asym_op_strings[opts->asym_op_type]);
 		if (opts->op_type == CPERF_ASYM_RSA)
 			printf("# rsa test name: %s\n", opts->rsa_data->name);
+		if (opts->op_type == CPERF_ASYM_MLDSA44)
+			printf("# mldsa test name: %s\n", opts->mldsa_data->name);
 		if (opts->op_type == CPERF_ASYM_MLKEM512)
 			printf("# mlkem test name: %s\n", opts->mlkem_data->name);
 	}
diff --git a/app/test-crypto-perf/cperf_test_common.c b/app/test-crypto-perf/cperf_test_common.c
index 383d4bd940..0bcaa6dfd8 100644
--- a/app/test-crypto-perf/cperf_test_common.c
+++ b/app/test-crypto-perf/cperf_test_common.c
@@ -314,7 +314,8 @@ cperf_is_asym_test(const struct cperf_options *options)
 	    options->op_type == CPERF_ASYM_SECP521R1 ||
 	    options->op_type == CPERF_ASYM_ED25519 ||
 	    options->op_type == CPERF_ASYM_SM2 ||
-		options->op_type == CPERF_ASYM_MLKEM512)
+		options->op_type == CPERF_ASYM_MLKEM512 ||
+		options->op_type == CPERF_ASYM_MLDSA44)
 		return true;
 
 	return false;
diff --git a/app/test-crypto-perf/cperf_test_vectors.c b/app/test-crypto-perf/cperf_test_vectors.c
index 6e2435b004..a3b050af11 100644
--- a/app/test-crypto-perf/cperf_test_vectors.c
+++ b/app/test-crypto-perf/cperf_test_vectors.c
@@ -3934,6 +3934,1624 @@ uint8_t mlkem_512_sk[] = {
 	0x5E, 0x7A, 0xB9, 0x3A, 0x40, 0xAD, 0x38, 0x6A
 };
 
+uint8_t mldsa_44_seed[] = {
+	0xf4, 0x41, 0xc9, 0x62, 0x17, 0x32, 0x2c, 0xbc,
+	0xcf, 0x05, 0xf7, 0x5b, 0xd5, 0xfb, 0x0a, 0x0a,
+	0x78, 0xbf, 0xad, 0xab, 0x89, 0x6e, 0x88, 0xdb,
+	0xb4, 0x08, 0x90, 0xe0, 0x16, 0x9b, 0xb6, 0x66,
+};
+
+uint8_t mldsa_44_privkey[] = {
+	0xcc, 0x2c, 0x93, 0xce, 0xfc, 0x0b, 0xf6, 0x74,
+	0x93, 0x28, 0x95, 0xe8, 0xc0, 0xc8, 0x83, 0xb8,
+	0xc9, 0x0c, 0x9a, 0x5c, 0x18, 0xd2, 0x79, 0x5c,
+	0xf3, 0x58, 0xd8, 0x02, 0x6c, 0x5e, 0xad, 0x79,
+	0xc1, 0xae, 0x0a, 0x97, 0x90, 0x41, 0x10, 0x32,
+	0x59, 0x46, 0x12, 0x27, 0x0a, 0xa3, 0xc7, 0xf0,
+	0x74, 0x54, 0x3d, 0xb2, 0x24, 0xc2, 0xa2, 0xec,
+	0xaf, 0x31, 0xa0, 0xf4, 0x78, 0x97, 0x7c, 0x6a,
+	0xdc, 0x91, 0x87, 0x60, 0x01, 0xa9, 0x19, 0x2d,
+	0x0d, 0xca, 0xb4, 0x14, 0x9d, 0x41, 0xe3, 0x18,
+	0x4b, 0x99, 0x31, 0xfa, 0xf4, 0xfa, 0xc4, 0x75,
+	0x93, 0x87, 0xc7, 0x7a, 0x8f, 0x0e, 0xc6, 0xb2,
+	0xfa, 0xf6, 0x48, 0x84, 0x17, 0x42, 0x01, 0xcb,
+	0xd2, 0x55, 0x40, 0x2f, 0x23, 0x21, 0x91, 0x11,
+	0x40, 0x00, 0xdc, 0x91, 0x3d, 0xf5, 0x96, 0xdb,
+	0xb3, 0x6d, 0xd5, 0xf4, 0xc5, 0x11, 0x96, 0x8f,
+	0x13, 0x25, 0x4a, 0x24, 0xb3, 0x90, 0x9b, 0x16,
+	0x30, 0x20, 0x96, 0x10, 0x10, 0x97, 0x6c, 0xd0,
+	0x26, 0x26, 0x61, 0x84, 0x85, 0x1b, 0xb2, 0x81,
+	0x5c, 0x10, 0x88, 0x48, 0xc8, 0x8d, 0x1c, 0x42,
+	0x61, 0x19, 0x32, 0x04, 0x81, 0xa6, 0x89, 0x98,
+	0x42, 0x62, 0x14, 0xa3, 0x90, 0xc8, 0xc2, 0x4c,
+	0x41, 0x04, 0x2c, 0x5b, 0x26, 0x2a, 0xd1, 0x30,
+	0x12, 0x18, 0x40, 0x71, 0x08, 0x98, 0x70, 0x60,
+	0x40, 0x09, 0x4a, 0x44, 0x0a, 0x24, 0x43, 0x92,
+	0x04, 0x20, 0x06, 0x80, 0xa2, 0x01, 0x18, 0x47,
+	0x12, 0x23, 0xc7, 0x6c, 0x50, 0x32, 0x61, 0xda,
+	0x26, 0x40, 0x84, 0x98, 0x90, 0xd3, 0x04, 0x66,
+	0x52, 0xb8, 0x70, 0x99, 0x02, 0x6c, 0x64, 0xb2,
+	0x00, 0x1b, 0x35, 0x90, 0x23, 0x00, 0x92, 0x01,
+	0x02, 0x20, 0x12, 0x89, 0x25, 0x62, 0xa6, 0x4d,
+	0x1b, 0x29, 0x08, 0x08, 0x46, 0x72, 0xa1, 0x18,
+	0x11, 0x03, 0x80, 0x60, 0xd4, 0x38, 0x80, 0x64,
+	0x36, 0x4e, 0x23, 0x30, 0x8e, 0x23, 0x81, 0x60,
+	0xd1, 0x84, 0x89, 0xe2, 0xa8, 0x2d, 0x80, 0x92,
+	0x61, 0x8a, 0x22, 0x28, 0x0a, 0xc9, 0x50, 0xe3,
+	0x96, 0x40, 0x84, 0xa0, 0x0d, 0xd8, 0xc2, 0x2c,
+	0xd1, 0x30, 0x10, 0x18, 0xa0, 0x48, 0xe2, 0xb2,
+	0x04, 0x00, 0xa8, 0x29, 0x19, 0x42, 0x68, 0xa3,
+	0xa2, 0x71, 0xd9, 0xc0, 0x45, 0xa2, 0xc6, 0x4c,
+	0x51, 0x36, 0x71, 0xc1, 0x40, 0x02, 0x08, 0x12,
+	0x72, 0x90, 0x04, 0x2e, 0x80, 0x30, 0x24, 0x8b,
+	0x90, 0x44, 0x82, 0x82, 0x68, 0xa2, 0x84, 0x2d,
+	0x08, 0x00, 0x61, 0x23, 0x82, 0x48, 0x00, 0x33,
+	0x29, 0x58, 0x48, 0x86, 0x01, 0x01, 0x21, 0x62,
+	0xa8, 0x91, 0xe3, 0x10, 0x6c, 0x58, 0x24, 0x09,
+	0x0c, 0x14, 0x02, 0x63, 0x22, 0x20, 0x12, 0x48,
+	0x70, 0x81, 0x26, 0x6e, 0x00, 0x86, 0x31, 0x1a,
+	0x22, 0x65, 0x40, 0x38, 0x00, 0x02, 0x47, 0x09,
+	0xc9, 0x82, 0x8c, 0x82, 0xa0, 0x2c, 0xd3, 0x04,
+	0x45, 0x50, 0xb0, 0x28, 0xd0, 0x10, 0x8d, 0x1c,
+	0x10, 0x52, 0x4b, 0x00, 0x66, 0xc8, 0xc0, 0x08,
+	0x9a, 0xa8, 0x2d, 0xd4, 0x02, 0x8a, 0x1b, 0x35,
+	0x65, 0x04, 0xc7, 0x28, 0x84, 0x38, 0x50, 0x18,
+	0x20, 0x4a, 0x91, 0x18, 0x8c, 0x9b, 0x20, 0x09,
+	0x94, 0x08, 0x71, 0x64, 0x06, 0x25, 0x20, 0x23,
+	0x09, 0xd8, 0x82, 0x68, 0x5a, 0xa6, 0x31, 0x63,
+	0x36, 0x32, 0x5c, 0x12, 0x62, 0xdb, 0x32, 0x6e,
+	0x14, 0x93, 0x68, 0x9a, 0x34, 0x80, 0x83, 0x44,
+	0x4a, 0x18, 0x13, 0x49, 0x43, 0xb8, 0x0d, 0xda,
+	0x92, 0x41, 0x42, 0xb8, 0x84, 0x52, 0x94, 0x91,
+	0x04, 0x05, 0x4d, 0xa2, 0x38, 0x64, 0x01, 0x19,
+	0x05, 0x18, 0xa2, 0x4d, 0x90, 0x34, 0x26, 0x91,
+	0x30, 0x68, 0x1c, 0x14, 0x44, 0x4b, 0x18, 0x22,
+	0x12, 0x90, 0x91, 0x42, 0x96, 0x91, 0x19, 0x48,
+	0x4c, 0x24, 0x46, 0x80, 0xc3, 0xb8, 0x8c, 0x1c,
+	0x80, 0x8d, 0x18, 0x45, 0x88, 0xd8, 0x94, 0x4c,
+	0x13, 0x02, 0x65, 0xd3, 0x22, 0x29, 0x49, 0x04,
+	0x82, 0x04, 0xc2, 0x40, 0x04, 0x34, 0x21, 0xe1,
+	0x34, 0x46, 0x20, 0x90, 0x44, 0x93, 0x14, 0x44,
+	0xdb, 0xc0, 0x4d, 0x1b, 0xa2, 0x24, 0x5a, 0x24,
+	0x68, 0x10, 0x46, 0x66, 0x11, 0x43, 0x29, 0xd0,
+	0x90, 0x0d, 0x49, 0x12, 0x4c, 0xc1, 0x96, 0x2c,
+	0xdb, 0x22, 0x65, 0xe4, 0x16, 0x24, 0xd1, 0x24,
+	0x26, 0x53, 0xb8, 0x45, 0x8a, 0xb4, 0x11, 0x04,
+	0x96, 0x28, 0x80, 0x22, 0x8e, 0xd1, 0x10, 0x05,
+	0x44, 0x44, 0x8a, 0x5c, 0xb4, 0x50, 0xdc, 0x10,
+	0x02, 0xc1, 0xa2, 0x4c, 0x11, 0x05, 0x2c, 0x21,
+	0x39, 0x6a, 0x64, 0x36, 0x01, 0x09, 0xc3, 0x0c,
+	0x9a, 0x24, 0x52, 0x92, 0x20, 0x0a, 0xd2, 0xa8,
+	0x49, 0x99, 0xc6, 0x8d, 0x50, 0x26, 0x62, 0x09,
+	0x42, 0x05, 0x5b, 0xc0, 0x41, 0xd0, 0x22, 0x25,
+	0x09, 0xb4, 0x2d, 0x98, 0xa2, 0x24, 0x12, 0x84,
+	0x0d, 0xca, 0x98, 0x11, 0x22, 0x80, 0x21, 0x1b,
+	0x00, 0x44, 0x84, 0xc6, 0x89, 0x92, 0x48, 0x42,
+	0x50, 0xc8, 0x60, 0x24, 0x15, 0x69, 0xa2, 0x48,
+	0x06, 0xc4, 0xb0, 0x24, 0x63, 0x14, 0x40, 0x12,
+	0xc4, 0x61, 0x82, 0x30, 0x60, 0x88, 0x96, 0x89,
+	0xc9, 0xc0, 0x89, 0x12, 0x36, 0x82, 0x8c, 0xc0,
+	0x09, 0xc0, 0x88, 0x91, 0xdb, 0x10, 0x64, 0x08,
+	0x36, 0x71, 0x94, 0x10, 0x46, 0x20, 0x83, 0x10,
+	0x13, 0x13, 0x4c, 0x08, 0x28, 0x45, 0x24, 0xb9,
+	0x64, 0x09, 0xb0, 0x48, 0x1c, 0x25, 0x50, 0x23,
+	0x40, 0x90, 0xe0, 0x96, 0x50, 0x9a, 0x38, 0x41,
+	0xcc, 0xb2, 0x2c, 0xdb, 0x04, 0x66, 0x61, 0x48,
+	0x30, 0x02, 0x34, 0x4e, 0xd1, 0xc2, 0x85, 0xc9,
+	0x06, 0x41, 0x19, 0x30, 0x69, 0xc8, 0x94, 0x68,
+	0x1c, 0x83, 0x70, 0x03, 0x10, 0x4d, 0xc2, 0x16,
+	0x4e, 0x64, 0x92, 0x30, 0x60, 0x16, 0x84, 0xa2,
+	0xa8, 0x90, 0xa4, 0x38, 0x11, 0x0a, 0x88, 0x05,
+	0x10, 0x93, 0x88, 0x43, 0x06, 0x10, 0x18, 0x10,
+	0x70, 0x03, 0x28, 0x42, 0x89, 0x28, 0x8d, 0x8a,
+	0xa8, 0x09, 0x94, 0x42, 0x85, 0xa3, 0x10, 0x61,
+	0x0c, 0x45, 0x50, 0x04, 0x31, 0x4c, 0xd1, 0x10,
+	0x12, 0x8b, 0x96, 0x05, 0x03, 0xa0, 0x89, 0x21,
+	0xc4, 0x4d, 0x61, 0xc8, 0x61, 0x09, 0x99, 0x10,
+	0x59, 0x96, 0x49, 0x00, 0x89, 0x08, 0x23, 0x00,
+	0x10, 0xcc, 0xa4, 0x61, 0x01, 0x25, 0x80, 0x21,
+	0x31, 0x09, 0x13, 0x28, 0x0d, 0x1c, 0x05, 0x85,
+	0x62, 0x92, 0x44, 0x09, 0x10, 0x8a, 0x5a, 0xa6,
+	0x20, 0x89, 0xb0, 0x20, 0x0c, 0xb3, 0x01, 0xc9,
+	0x26, 0x61, 0x0b, 0x34, 0x6a, 0x8b, 0x44, 0x0e,
+	0xf2, 0x47, 0x18, 0xf8, 0x4a, 0xfa, 0x45, 0x60,
+	0x87, 0xeb, 0x0f, 0xff, 0x75, 0xa6, 0xba, 0x18,
+	0x9a, 0x7d, 0x37, 0xc4, 0xc7, 0x7e, 0x1a, 0xc9,
+	0x0d, 0x06, 0x53, 0xca, 0xf0, 0x2c, 0xe9, 0xe9,
+	0x4b, 0x5f, 0x8b, 0xbc, 0x77, 0xc6, 0x71, 0x68,
+	0x4f, 0x8c, 0x3b, 0x30, 0x59, 0x91, 0xf0, 0xb5,
+	0x6d, 0xa6, 0x28, 0x2c, 0xd4, 0x0a, 0x00, 0x27,
+	0x6a, 0x39, 0x17, 0x88, 0xa9, 0x93, 0xbb, 0x6e,
+	0xda, 0x3e, 0x4b, 0xb7, 0x1b, 0x6a, 0xb2, 0xe2,
+	0xc4, 0x6f, 0x21, 0x78, 0x74, 0xff, 0xa2, 0x02,
+	0x65, 0x68, 0xa4, 0xce, 0xb4, 0xfe, 0x0c, 0x18,
+	0x59, 0xb9, 0xc8, 0x33, 0x41, 0x27, 0xa1, 0x4b,
+	0xcf, 0xe9, 0xa9, 0xd7, 0x2d, 0xf9, 0xcd, 0xc6,
+	0xde, 0x4e, 0x1d, 0x7d, 0x07, 0xf4, 0xda, 0xed,
+	0x89, 0xa1, 0xef, 0xbc, 0xec, 0x1b, 0xc3, 0x07,
+	0xfd, 0xf5, 0x96, 0xa3, 0x6c, 0x70, 0xc8, 0xb9,
+	0x9f, 0x46, 0x0a, 0xad, 0x46, 0x01, 0xa1, 0x92,
+	0x7c, 0xd1, 0x12, 0x78, 0x89, 0x89, 0x98, 0x68,
+	0x9e, 0xdd, 0xd9, 0x7b, 0x9f, 0x2b, 0x29, 0xc1,
+	0x0e, 0x29, 0xb0, 0x44, 0x7c, 0x22, 0xd7, 0x67,
+	0x47, 0x91, 0xf0, 0xf8, 0x56, 0x79, 0x89, 0x42,
+	0x95, 0x60, 0x53, 0x32, 0xc1, 0x14, 0x48, 0x56,
+	0x67, 0x00, 0x80, 0x86, 0xcd, 0x80, 0x21, 0x75,
+	0xe8, 0xe2, 0x41, 0x6a, 0x5d, 0xb2, 0x12, 0x57,
+	0x1e, 0x83, 0x34, 0xa4, 0x95, 0x4e, 0x0e, 0x71,
+	0xac, 0xcb, 0x09, 0xef, 0xea, 0x4e, 0xe0, 0x4d,
+	0x44, 0xb2, 0x67, 0xd2, 0x6e, 0x78, 0x01, 0xb5,
+	0x09, 0x64, 0xa7, 0xdf, 0xe6, 0x16, 0x72, 0x6b,
+	0x19, 0xe5, 0x88, 0x8a, 0x06, 0xae, 0x0a, 0x93,
+	0xdb, 0xee, 0x0e, 0xf6, 0x52, 0x84, 0x95, 0x2b,
+	0xf8, 0xf4, 0xcd, 0x5d, 0x8b, 0x3a, 0x86, 0x87,
+	0x8e, 0x8b, 0x97, 0x65, 0xb1, 0xd6, 0x50, 0xbc,
+	0xa7, 0xf0, 0x32, 0xb5, 0x39, 0x1e, 0x10, 0x7d,
+	0x96, 0x11, 0xc1, 0xe8, 0x47, 0xfa, 0xdd, 0x24,
+	0x22, 0xb6, 0x43, 0xb2, 0x41, 0x95, 0x98, 0x1a,
+	0x3f, 0x0f, 0x9a, 0xd3, 0xc4, 0x10, 0x19, 0x85,
+	0x0a, 0x0d, 0xde, 0xb7, 0x76, 0xec, 0xe3, 0x57,
+	0x2e, 0x38, 0x4e, 0xb1, 0x2e, 0x4a, 0xaf, 0xc8,
+	0x78, 0xa7, 0xb3, 0x1e, 0xaf, 0xe0, 0xe4, 0xbb,
+	0xc8, 0x0b, 0x24, 0x04, 0x08, 0xd2, 0xbc, 0x91,
+	0xca, 0x8e, 0x4e, 0x85, 0x39, 0x76, 0x20, 0xc9,
+	0xa7, 0x47, 0x8b, 0x6a, 0xd9, 0xc8, 0xb7, 0xb0,
+	0xa5, 0xa2, 0x85, 0x48, 0x4c, 0xcb, 0x16, 0xaf,
+	0x45, 0x48, 0x00, 0xbe, 0x67, 0xef, 0x67, 0x65,
+	0xa3, 0x9d, 0x43, 0x07, 0x59, 0x88, 0x9a, 0xad,
+	0xe5, 0xad, 0x1e, 0xeb, 0xd5, 0xd4, 0xc7, 0xa4,
+	0xb9, 0x40, 0x70, 0x2c, 0xe1, 0xcb, 0x5c, 0x3f,
+	0x49, 0x6b, 0x51, 0xbf, 0xd3, 0xb7, 0xea, 0x33,
+	0x52, 0x73, 0xcf, 0x26, 0x19, 0x54, 0x1d, 0xb6,
+	0x33, 0x5d, 0x1a, 0x88, 0xdb, 0xd6, 0xfe, 0xae,
+	0xf4, 0x45, 0x67, 0x80, 0x8a, 0xfc, 0xc4, 0xbe,
+	0xfb, 0x6a, 0x4a, 0x75, 0x88, 0x35, 0x26, 0x1f,
+	0x90, 0x65, 0x26, 0x5e, 0xb8, 0x0d, 0x15, 0x9d,
+	0x70, 0x76, 0xf2, 0xfd, 0xed, 0x55, 0x71, 0x2b,
+	0xe8, 0x2d, 0xc0, 0x28, 0xee, 0x53, 0x7c, 0xa1,
+	0x3e, 0x86, 0x74, 0xa2, 0xd3, 0x9e, 0x2c, 0x70,
+	0x15, 0x3a, 0x90, 0xfd, 0x1d, 0xac, 0x81, 0x2d,
+	0xa6, 0x6a, 0xe6, 0xd7, 0x7f, 0xd9, 0x97, 0xc9,
+	0x47, 0x7c, 0x07, 0xe6, 0x35, 0x45, 0xc9, 0x1f,
+	0x08, 0xbc, 0x14, 0xdb, 0x12, 0x84, 0xc3, 0xc8,
+	0xe2, 0x86, 0xa3, 0xa2, 0x1e, 0xfb, 0x3f, 0xca,
+	0x92, 0x04, 0xe0, 0x6b, 0x29, 0xe0, 0xe0, 0x23,
+	0x51, 0x40, 0x8e, 0xec, 0xf8, 0x87, 0xa2, 0x7a,
+	0x2d, 0x8b, 0xc2, 0x62, 0x8c, 0x29, 0x82, 0x4b,
+	0x86, 0x1a, 0xa7, 0xc6, 0xaa, 0x24, 0x5f, 0x24,
+	0x03, 0x20, 0xa8, 0x3c, 0xa3, 0xcb, 0xd1, 0x60,
+	0x64, 0x7d, 0x22, 0x9b, 0x07, 0x46, 0x1e, 0xff,
+	0x43, 0xa9, 0x38, 0x34, 0x0f, 0x01, 0x00, 0x7f,
+	0xc6, 0xcb, 0x0a, 0xed, 0x73, 0xc0, 0xfb, 0x77,
+	0x80, 0x8c, 0x2c, 0x4c, 0xa5, 0x20, 0xe8, 0xcf,
+	0x37, 0xf9, 0x00, 0x12, 0xe1, 0x6c, 0xb5, 0x9a,
+	0x91, 0xbe, 0x1f, 0xaf, 0xf1, 0x8c, 0x6e, 0x09,
+	0xea, 0xcf, 0xac, 0x43, 0x6e, 0x32, 0xd0, 0xf4,
+	0x89, 0x4e, 0x42, 0xc2, 0xe7, 0x84, 0x7a, 0x66,
+	0xb5, 0x2b, 0x5c, 0x7d, 0x83, 0x4b, 0xd4, 0x3d,
+	0x81, 0x6d, 0x68, 0xb9, 0x72, 0xe5, 0xd5, 0xe5,
+	0xf5, 0x9c, 0x4d, 0x95, 0xcd, 0xcd, 0x4d, 0x9a,
+	0x4e, 0x69, 0xb9, 0x8a, 0x1e, 0x96, 0x69, 0xc0,
+	0xe0, 0x39, 0x02, 0x21, 0x1c, 0x82, 0xd9, 0x5b,
+	0xe5, 0xde, 0x34, 0xff, 0xf0, 0x15, 0xc7, 0x9a,
+	0x62, 0x83, 0xca, 0xa3, 0x70, 0x15, 0xeb, 0x8f,
+	0x73, 0x0e, 0xa9, 0x9c, 0xe9, 0xe3, 0xe7, 0xfc,
+	0xb4, 0xcb, 0xac, 0xdf, 0x61, 0x91, 0xf3, 0x4b,
+	0x87, 0xa6, 0x29, 0xea, 0x36, 0x81, 0x07, 0x3e,
+	0xae, 0x69, 0xee, 0x87, 0x2a, 0x30, 0x1c, 0x97,
+	0x96, 0x40, 0x08, 0x48, 0xcf, 0x5f, 0xfe, 0x57,
+	0x23, 0xfd, 0xb7, 0x9a, 0x69, 0xef, 0xf5, 0x6e,
+	0xc9, 0xdd, 0x95, 0x2b, 0x17, 0xd5, 0x2c, 0xad,
+	0xa4, 0x49, 0x78, 0xb1, 0xd1, 0x00, 0xe7, 0xca,
+	0xcb, 0x20, 0x9e, 0xba, 0xea, 0xc8, 0xd4, 0x9b,
+	0x84, 0xac, 0x0b, 0xf0, 0x3b, 0x2c, 0xf0, 0x95,
+	0x3b, 0x5b, 0xf8, 0xfe, 0xe5, 0xc6, 0xee, 0x7c,
+	0x9e, 0x41, 0xf0, 0xef, 0xcf, 0x4d, 0xdd, 0xe8,
+	0x63, 0x6b, 0xcf, 0xe9, 0xd2, 0x80, 0x98, 0xf9,
+	0x7d, 0x22, 0x7e, 0xfc, 0xdd, 0x50, 0x6b, 0xa3,
+	0x6d, 0x7c, 0xed, 0x35, 0xbc, 0x28, 0x64, 0x03,
+	0xe6, 0x01, 0xac, 0x7c, 0xe1, 0x9b, 0x08, 0x6f,
+	0xd8, 0xdc, 0xaf, 0xb6, 0x9d, 0x4c, 0xdf, 0xb1,
+	0xde, 0xf4, 0x90, 0x5b, 0x46, 0xee, 0x7d, 0x28,
+	0xfb, 0xaa, 0xa9, 0x69, 0x47, 0xf5, 0x52, 0x74,
+	0x97, 0x9f, 0x8b, 0xbb, 0x26, 0x8f, 0x0d, 0x89,
+	0x2f, 0xc9, 0x57, 0xac, 0x2f, 0x88, 0x12, 0xdd,
+	0x12, 0x2f, 0x75, 0x97, 0xc7, 0x7b, 0x45, 0x46,
+	0x3a, 0x52, 0x4b, 0xf6, 0x76, 0xe0, 0x99, 0xef,
+	0xbe, 0xbf, 0xed, 0x0d, 0x32, 0xed, 0xc6, 0x5e,
+	0x6a, 0xe6, 0x0e, 0x12, 0xd4, 0xce, 0xf8, 0x0c,
+	0x7b, 0x4f, 0x1d, 0x3b, 0xf8, 0xaf, 0xdd, 0xd1,
+	0x78, 0x74, 0x59, 0xc7, 0xe4, 0xbc, 0xe3, 0xdd,
+	0x4a, 0xa7, 0x77, 0xa5, 0xcd, 0x80, 0x7c, 0x6b,
+	0x19, 0x46, 0x3d, 0xbd, 0x0a, 0x75, 0x48, 0xfa,
+	0x1c, 0xee, 0x02, 0xe9, 0x79, 0x10, 0x6c, 0xb4,
+	0xb3, 0xb2, 0xbe, 0xc8, 0x5c, 0xd1, 0xa1, 0xe2,
+	0xd5, 0x0a, 0xb5, 0xf3, 0x0c, 0x3f, 0x03, 0xb9,
+	0x2f, 0x61, 0x44, 0x95, 0xe1, 0x16, 0xcb, 0xc1,
+	0xee, 0xb3, 0xb8, 0x85, 0xd6, 0x1c, 0xf4, 0xfa,
+	0x86, 0x73, 0xc5, 0xf3, 0xba, 0xb5, 0xe0, 0x95,
+	0x34, 0x95, 0x72, 0xfa, 0xa7, 0xb8, 0x50, 0xba,
+	0xfb, 0xa6, 0x3c, 0x0f, 0x3c, 0xe3, 0xaa, 0x56,
+	0x05, 0xaf, 0x08, 0xec, 0x50, 0x12, 0x73, 0x25,
+	0x29, 0x72, 0xf5, 0xf6, 0xee, 0x06, 0xe4, 0x05,
+	0x1a, 0xe1, 0x1a, 0x13, 0x3f, 0xa3, 0x55, 0x16,
+	0x12, 0x17, 0x88, 0xd2, 0xa7, 0xc1, 0xd0, 0xf2,
+	0x7d, 0x51, 0x46, 0x36, 0x2e, 0x77, 0xa8, 0x02,
+	0x67, 0xad, 0xe7, 0x63, 0xaa, 0xbf, 0xe5, 0xbf,
+	0xa1, 0xab, 0xc4, 0xf6, 0x72, 0xae, 0xdf, 0x79,
+	0x0e, 0x82, 0x47, 0xb5, 0xf4, 0x48, 0x39, 0x22,
+	0xe3, 0x0a, 0x94, 0x5e, 0x3a, 0x4b, 0xa6, 0xa7,
+	0x5c, 0xb8, 0xec, 0x3e, 0x10, 0xae, 0x94, 0x34,
+	0x2c, 0xc0, 0x4b, 0xdd, 0xca, 0x4d, 0xc9, 0x7c,
+	0xf8, 0x2e, 0x32, 0x4e, 0x00, 0x2c, 0x34, 0x71,
+	0x28, 0xad, 0xd5, 0xcb, 0x19, 0xb8, 0x1d, 0xaa,
+	0x85, 0xac, 0xec, 0x16, 0xb6, 0x1f, 0x95, 0xc5,
+	0xa9, 0x4b, 0x8a, 0xfc, 0x70, 0xb7, 0x34, 0xb0,
+	0x63, 0x55, 0xff, 0x15, 0xc2, 0x72, 0x74, 0xe0,
+	0x6d, 0x01, 0x3d, 0xf0, 0x6a, 0xab, 0x4b, 0x8a,
+	0x72, 0xdc, 0x2b, 0x0a, 0x8a, 0xf4, 0x02, 0x1b,
+	0x0b, 0x51, 0xd8, 0xf7, 0x17, 0xcf, 0x48, 0xf0,
+	0x97, 0xa0, 0xc2, 0x7a, 0xc4, 0x64, 0x59, 0x2a,
+	0xa3, 0x27, 0xbe, 0x3b, 0xf7, 0xc5, 0x6d, 0x51,
+	0x29, 0xe2, 0x68, 0x87, 0x75, 0x71, 0x72, 0xac,
+	0xc8, 0xc1, 0xc8, 0xe5, 0xf6, 0x8a, 0x27, 0x8c,
+	0x45, 0x03, 0x10, 0xf7, 0x1a, 0xff, 0x1b, 0x04,
+	0x1c, 0xaf, 0x27, 0x7a, 0x57, 0xac, 0x0f, 0x57,
+	0x2a, 0x74, 0xd0, 0x46, 0x64, 0xbf, 0xc9, 0xe8,
+	0x35, 0x6b, 0x5c, 0x79, 0x9a, 0x51, 0xeb, 0xd1,
+	0xb3, 0x1d, 0xfd, 0x2f, 0x83, 0x2e, 0x24, 0x95,
+	0x94, 0xc7, 0x9d, 0x9f, 0x5d, 0x5c, 0x8e, 0x6c,
+	0x8f, 0xfc, 0xce, 0x89, 0x67, 0x9b, 0x38, 0x4b,
+	0x0d, 0x44, 0x9a, 0xb5, 0x74, 0xbf, 0x88, 0x90,
+	0xa1, 0xf2, 0xc4, 0xd2, 0xb3, 0x07, 0xe5, 0x34,
+	0x62, 0xc0, 0xfc, 0x3f, 0xdb, 0x77, 0x8e, 0x84,
+	0x61, 0xc1, 0x15, 0xf6, 0x5f, 0x5d, 0x73, 0xbc,
+	0x0c, 0x70, 0x32, 0xeb, 0x2c, 0xd3, 0x19, 0x83,
+	0x22, 0xfa, 0x5b, 0xcc, 0x5f, 0xbf, 0xbe, 0xfc,
+	0x3c, 0x28, 0x74, 0x2d, 0x33, 0x8f, 0x74, 0xe5,
+	0xca, 0xc9, 0x84, 0x8f, 0xba, 0x48, 0x11, 0x84,
+	0x33, 0xf0, 0x7d, 0x5c, 0xad, 0x47, 0x36, 0xf7,
+	0x33, 0xb0, 0xbb, 0x44, 0x65, 0x72, 0x45, 0xd1,
+	0x40, 0x4c, 0x39, 0x8b, 0x16, 0x90, 0x74, 0xa3,
+	0xd2, 0x3c, 0xc6, 0x7a, 0xa4, 0x4f, 0x0d, 0x9a,
+	0xe1, 0xfd, 0x49, 0x82, 0xc6, 0x69, 0xf7, 0xe7,
+	0x3d, 0xeb, 0x2b, 0xbe, 0xfd, 0x1a, 0x73, 0x2c,
+	0xf3, 0xbc, 0xd6, 0xaa, 0xaa, 0x54, 0x22, 0x5c,
+	0x54, 0x92, 0x73, 0xe3, 0x79, 0x0a, 0x87, 0x20,
+	0x82, 0xdb, 0x02, 0x42, 0x81, 0xb1, 0xf7, 0x0d,
+	0xf0, 0xd8, 0x56, 0x0f, 0x74, 0x0c, 0x65, 0x7c,
+	0x8c, 0x96, 0xb9, 0x9f, 0xfa, 0xb6, 0x48, 0x66,
+	0xf1, 0xbe, 0xf8, 0x46, 0x70, 0xe5, 0x26, 0xc1,
+	0x68, 0x7f, 0x81, 0x72, 0x14, 0x2f, 0x96, 0x22,
+	0x05, 0xd1, 0xc0, 0xb8, 0x93, 0x9d, 0x02, 0x8b,
+	0xff, 0x0b, 0x2d, 0xb9, 0x01, 0xaa, 0x61, 0x09,
+	0x9d, 0x55, 0x21, 0xdd, 0xda, 0xec, 0x44, 0xce,
+	0x00, 0x98, 0xf8, 0x34, 0x86, 0x49, 0xd4, 0x72,
+	0x90, 0xfb, 0xd7, 0xb1, 0x33, 0xb9, 0xe5, 0xd3,
+	0xc0, 0x27, 0x88, 0x4b, 0x6d, 0x84, 0x34, 0x7c,
+	0x77, 0x7e, 0xcf, 0x27, 0x4d, 0x5f, 0x1d, 0xb4,
+	0xb4, 0xac, 0xcc, 0x7d, 0x83, 0xc2, 0x89, 0x3d,
+	0xeb, 0xb6, 0xa3, 0x57, 0x30, 0xbc, 0x94, 0x9f,
+	0xe9, 0x63, 0xca, 0x7d, 0xa3, 0x9d, 0x0a, 0x43,
+	0xed, 0x4a, 0xfd, 0xd3, 0x5e, 0x23, 0x97, 0x75,
+	0x28, 0x97, 0xaa, 0x0c, 0xf9, 0xa1, 0x03, 0xb1,
+	0x55, 0x82, 0xec, 0xcc, 0x91, 0x27, 0xf4, 0xcf,
+	0x63, 0x10, 0xf3, 0xd3, 0x8b, 0x5c, 0xa8, 0xc2,
+	0x58, 0x4d, 0xf5, 0x67, 0xe9, 0xe1, 0xc2, 0xf2,
+	0x11, 0x5e, 0xf2, 0xe1, 0x1c, 0xf2, 0x0c, 0x50,
+	0x71, 0x9f, 0xd1, 0x1c, 0xb8, 0x82, 0x7d, 0x3b,
+	0x23, 0x90, 0x4e, 0x08, 0xbf, 0x51, 0xa1, 0xc9,
+	0xe9, 0x90, 0x07, 0x4e, 0xb3, 0xcc, 0x72, 0xbf,
+	0x2c, 0x87, 0x18, 0x3b, 0xc7, 0x29, 0x8a, 0x3b,
+	0x0b, 0x4c, 0x55, 0x20, 0x08, 0xb0, 0xa3, 0x04,
+	0xf9, 0x6b, 0x53, 0x84, 0x4c, 0xef, 0xc1, 0xc6,
+	0xa4, 0xa9, 0xba, 0xe6, 0xb8, 0x72, 0x60, 0x6b,
+	0x2d, 0x25, 0x08, 0xc1, 0xd4, 0x4e, 0x0b, 0xcb,
+	0xe9, 0x71, 0x9b, 0x5a, 0x9a, 0x1e, 0x21, 0x9a,
+	0x0a, 0xd0, 0x52, 0x82, 0xe9, 0x31, 0x45, 0x9e,
+	0xe4, 0x85, 0x6b, 0xac, 0x8e, 0x7c, 0x73, 0x0c,
+	0x0d, 0xd6, 0x54, 0x27, 0x5a, 0xce, 0xc8, 0x07,
+	0x19, 0x84, 0x8b, 0xee, 0x0f, 0x6f, 0x8b, 0xbc,
+	0x0c, 0x1b, 0xe0, 0x08, 0x64, 0xa6, 0xe6, 0xe1,
+	0xf8, 0x56, 0x5e, 0xe8, 0x27, 0x7d, 0x26, 0xee,
+	0x20, 0x5e, 0x3d, 0x2e, 0x84, 0xdc, 0x50, 0xb0,
+	0x16, 0x3f, 0x8c, 0xec, 0xa9, 0xd3, 0x61, 0x85,
+	0x5a, 0xba, 0x02, 0x82, 0x65, 0x30, 0xdb, 0x23,
+	0x1c, 0xcb, 0xc3, 0xe6, 0x80, 0x5e, 0x4f, 0x6e,
+	0xd8, 0x3b, 0x5e, 0xce, 0x67, 0xbb, 0xdb, 0x22,
+	0xac, 0xf1, 0x32, 0x53, 0x6a, 0xd6, 0x43, 0x1a,
+	0xf0, 0x11, 0xc5, 0x0f, 0xc5, 0x12, 0xdf, 0xe6,
+	0x91, 0x8b, 0x15, 0xf4, 0x41, 0xd9, 0xe3, 0x51,
+};
+
+uint8_t mldsa_44_pubkey[] = {
+	0xcc, 0x2c, 0x93, 0xce, 0xfc, 0x0b, 0xf6, 0x74,
+	0x93, 0x28, 0x95, 0xe8, 0xc0, 0xc8, 0x83, 0xb8,
+	0xc9, 0x0c, 0x9a, 0x5c, 0x18, 0xd2, 0x79, 0x5c,
+	0xf3, 0x58, 0xd8, 0x02, 0x6c, 0x5e, 0xad, 0x79,
+	0xde, 0x77, 0x1a, 0xd3, 0x49, 0xc9, 0x12, 0xc9,
+	0xff, 0xcf, 0xa2, 0x6c, 0x1d, 0x37, 0x91, 0xa2,
+	0xf5, 0x43, 0xbc, 0xdb, 0x9e, 0xdb, 0xa5, 0xdb,
+	0xd9, 0x87, 0xc5, 0xf2, 0xf7, 0x79, 0x58, 0x4c,
+	0x08, 0x9f, 0x9c, 0xca, 0x9c, 0xef, 0xa8, 0x80,
+	0x27, 0x31, 0xf1, 0xc5, 0x0e, 0x2b, 0x6d, 0xa1,
+	0x53, 0x9e, 0x99, 0x1e, 0xc8, 0x75, 0x4a, 0x59,
+	0x27, 0x33, 0x41, 0xdd, 0x39, 0xff, 0x37, 0xdf,
+	0x5b, 0xb9, 0xe4, 0x56, 0x54, 0x28, 0x8e, 0xb1,
+	0xfe, 0xd8, 0x4e, 0x60, 0xcd, 0x22, 0xd7, 0x30,
+	0xe5, 0x73, 0xe4, 0xb1, 0x08, 0x0f, 0x0a, 0xbe,
+	0x9a, 0x44, 0xfd, 0xb1, 0xed, 0xb1, 0x8e, 0x0d,
+	0x7c, 0x3c, 0x3d, 0x04, 0x52, 0x4b, 0x93, 0xf4,
+	0xa6, 0xce, 0x8d, 0xb0, 0xe4, 0xf6, 0xb1, 0x09,
+	0xfc, 0xc3, 0x42, 0x3d, 0xff, 0x4c, 0x55, 0x3c,
+	0x73, 0x75, 0x35, 0x9d, 0xe8, 0x68, 0x42, 0x09,
+	0x14, 0x36, 0x91, 0x63, 0xfc, 0xc6, 0x23, 0x7c,
+	0x25, 0x81, 0xd5, 0xc1, 0xfe, 0xca, 0xf6, 0x71,
+	0x51, 0x8e, 0xab, 0x29, 0xa1, 0x86, 0xbb, 0x45,
+	0x43, 0x67, 0x7f, 0xdf, 0x7e, 0x92, 0xff, 0x35,
+	0x38, 0xd3, 0xea, 0x94, 0xc9, 0xa3, 0x0f, 0x46,
+	0x25, 0xa6, 0x1e, 0x00, 0x60, 0x7b, 0xc0, 0xbc,
+	0xe9, 0x5e, 0x16, 0x0e, 0x81, 0xf5, 0x4e, 0x98,
+	0xa1, 0x64, 0xb0, 0xb7, 0x02, 0xec, 0x73, 0xad,
+	0xf8, 0xc1, 0xce, 0x8b, 0x8f, 0xbd, 0x89, 0xbf,
+	0x0f, 0x42, 0x31, 0x6d, 0x75, 0x42, 0xd7, 0x59,
+	0x64, 0xad, 0x09, 0xd3, 0x7a, 0x00, 0x7b, 0xdd,
+	0x12, 0x76, 0xb0, 0x00, 0x73, 0x5b, 0xbf, 0x44,
+	0x54, 0x6e, 0x56, 0x26, 0xa5, 0x27, 0x4d, 0xff,
+	0xe5, 0x8a, 0x04, 0x73, 0xd9, 0x75, 0x8c, 0xf7,
+	0x06, 0x64, 0xfb, 0xa5, 0x00, 0x27, 0x39, 0x0e,
+	0x48, 0x8f, 0x73, 0x29, 0x61, 0x5f, 0x15, 0xf5,
+	0x08, 0x15, 0x33, 0xd1, 0x76, 0xba, 0xf3, 0x3e,
+	0x28, 0xb8, 0x57, 0xcd, 0x9d, 0x61, 0x1f, 0xca,
+	0xd7, 0xc3, 0x10, 0xdb, 0x68, 0xeb, 0xa4, 0x15,
+	0x40, 0xd8, 0xe7, 0xa0, 0xd2, 0xd1, 0xd6, 0xb1,
+	0xd3, 0x75, 0x8e, 0xc1, 0x60, 0x02, 0xb5, 0x69,
+	0xf2, 0x8c, 0xf3, 0xc6, 0x2e, 0x9d, 0xf7, 0x8d,
+	0xed, 0xb0, 0x01, 0xba, 0xb5, 0x62, 0x7e, 0x8f,
+	0x91, 0xbd, 0x73, 0xc6, 0x35, 0xf9, 0xdb, 0xea,
+	0x28, 0xce, 0x8a, 0x47, 0x74, 0x7c, 0x3d, 0x85,
+	0x4d, 0x1e, 0x11, 0x7e, 0xa2, 0xaa, 0x04, 0x30,
+	0x12, 0xce, 0xea, 0xc1, 0xc5, 0x1e, 0x62, 0x7a,
+	0x21, 0x6a, 0xd5, 0xb8, 0x3c, 0xa0, 0xd6, 0xca,
+	0xb4, 0x8d, 0xff, 0xc3, 0xfc, 0xf2, 0xf1, 0x3c,
+	0x87, 0x23, 0xef, 0x68, 0xe4, 0x37, 0x96, 0xb0,
+	0xbb, 0x78, 0xa3, 0x3a, 0xe0, 0xd0, 0x41, 0xeb,
+	0x4c, 0x80, 0x55, 0x9b, 0x66, 0x5e, 0x33, 0xea,
+	0x33, 0x35, 0x79, 0xda, 0x04, 0x81, 0x19, 0x22,
+	0xb4, 0x4c, 0x7a, 0xef, 0x51, 0x50, 0x20, 0x6c,
+	0xf8, 0xf7, 0x5f, 0x03, 0x74, 0x72, 0xda, 0x1f,
+	0xe3, 0x0b, 0x82, 0x71, 0x50, 0x3d, 0x02, 0x61,
+	0x16, 0x44, 0xeb, 0xcf, 0xe3, 0x23, 0x9d, 0xef,
+	0xec, 0xce, 0xb3, 0xd0, 0xd2, 0x19, 0xd1, 0xe0,
+	0x2e, 0x33, 0xde, 0x28, 0x4b, 0xde, 0x85, 0xc1,
+	0xb2, 0x8a, 0xa5, 0x82, 0x0c, 0xa6, 0x9f, 0x23,
+	0x53, 0xea, 0xef, 0x78, 0x60, 0x24, 0x3a, 0x40,
+	0xc0, 0xc1, 0xac, 0xc9, 0x64, 0xd4, 0x03, 0x5f,
+	0x61, 0xa5, 0xdf, 0x6f, 0x6b, 0x4e, 0xb2, 0xe7,
+	0x1a, 0xc6, 0x69, 0x69, 0xd9, 0xc6, 0x6e, 0x5d,
+	0xea, 0xd8, 0xc0, 0x29, 0xcc, 0x8f, 0x35, 0x7b,
+	0xcb, 0x48, 0x3a, 0xfd, 0xba, 0x7a, 0x90, 0xc7,
+	0x65, 0x55, 0xfc, 0x90, 0x98, 0x6c, 0x15, 0x38,
+	0x0e, 0x88, 0x6e, 0x08, 0x49, 0x85, 0xc6, 0x6d,
+	0x8f, 0x30, 0x37, 0xa1, 0x64, 0x79, 0xa1, 0x65,
+	0x2d, 0x07, 0x38, 0x3e, 0x1c, 0xa6, 0x12, 0xee,
+	0xc5, 0x16, 0x68, 0x5c, 0x93, 0x14, 0xda, 0x33,
+	0x3d, 0x74, 0x62, 0xf1, 0xcf, 0x0e, 0x81, 0x80,
+	0xda, 0xea, 0xa7, 0x08, 0xde, 0xf3, 0xdc, 0xfe,
+	0x3a, 0xf5, 0x60, 0xe9, 0x35, 0x95, 0x52, 0x6c,
+	0x7f, 0xef, 0x8b, 0xa7, 0x55, 0x3d, 0x42, 0xfd,
+	0x39, 0x24, 0xd2, 0xfb, 0x28, 0x08, 0x83, 0x2b,
+	0x44, 0xf1, 0x21, 0x73, 0x13, 0x88, 0xa7, 0xba,
+	0x2d, 0xd6, 0xe9, 0x4e, 0xcb, 0xfe, 0x18, 0xe4,
+	0xc7, 0x85, 0xf3, 0xb8, 0xab, 0xd0, 0xb9, 0xbe,
+	0x5e, 0x8a, 0x62, 0x0e, 0x61, 0xa3, 0x29, 0x1d,
+	0xef, 0x46, 0xe7, 0x70, 0x14, 0xb1, 0x9f, 0x07,
+	0xbf, 0x3f, 0x1f, 0xc8, 0x11, 0xe4, 0x2c, 0x39,
+	0x48, 0x0e, 0xcf, 0x92, 0x62, 0x4b, 0x1f, 0x0c,
+	0x2e, 0x29, 0x61, 0xef, 0x29, 0x67, 0x7c, 0x0f,
+	0xac, 0x99, 0xb2, 0x9a, 0x7d, 0xac, 0x7c, 0x54,
+	0xae, 0xed, 0x4b, 0xf5, 0x4a, 0x4b, 0xb4, 0x14,
+	0xad, 0x6d, 0xce, 0xce, 0xcc, 0x3f, 0xb8, 0x59,
+	0x71, 0x7c, 0xd4, 0x76, 0x7c, 0xe4, 0x68, 0xc6,
+	0x76, 0xa8, 0xe3, 0x03, 0x48, 0xb6, 0xe4, 0x11,
+	0x6c, 0x5f, 0xd4, 0x76, 0x80, 0xdf, 0x2c, 0x67,
+	0x00, 0x4c, 0xce, 0x22, 0x21, 0xff, 0xb0, 0x9b,
+	0xcb, 0x72, 0xd1, 0xe3, 0xa2, 0x32, 0x5c, 0x12,
+	0xda, 0x7c, 0x95, 0x5d, 0xb2, 0xae, 0x1b, 0x25,
+	0x2e, 0x5f, 0xe6, 0xff, 0x4c, 0xbf, 0x00, 0x16,
+	0xd0, 0x3c, 0xbf, 0x44, 0x92, 0x07, 0xa0, 0x0d,
+	0x13, 0xba, 0xb8, 0x62, 0x66, 0x0b, 0x14, 0x0f,
+	0x5a, 0x9d, 0x42, 0x19, 0xd7, 0xbe, 0xe3, 0x33,
+	0x53, 0xa2, 0x60, 0x2d, 0xde, 0x43, 0x85, 0x03,
+	0x96, 0x50, 0x83, 0x83, 0x25, 0x3c, 0x19, 0x20,
+	0x44, 0x5f, 0x3b, 0x5a, 0xc2, 0x90, 0xe1, 0x2d,
+	0x47, 0x53, 0x50, 0xeb, 0xf7, 0xc7, 0x46, 0x4c,
+	0xf2, 0xad, 0xb2, 0x8f, 0x03, 0x4e, 0x82, 0x5d,
+	0x0f, 0xa0, 0x3d, 0xde, 0x4d, 0x93, 0x34, 0xd0,
+	0x1a, 0xe2, 0x5d, 0xbc, 0xe5, 0x8d, 0xfb, 0x5a,
+	0xba, 0xe2, 0x24, 0xec, 0xc8, 0xd2, 0xa3, 0x91,
+	0xa2, 0xa9, 0x0e, 0x0e, 0xf5, 0xfb, 0x9f, 0xed,
+	0x69, 0x21, 0x9d, 0x00, 0x92, 0xb5, 0x94, 0x0f,
+	0x38, 0x94, 0x29, 0xf9, 0xe7, 0xaa, 0xf1, 0xf7,
+	0x20, 0x10, 0xf0, 0xeb, 0x26, 0x96, 0x5a, 0x0e,
+	0x99, 0x8d, 0x71, 0xef, 0xb2, 0xa0, 0xf3, 0x38,
+	0xce, 0xf9, 0x99, 0x6f, 0x96, 0xbb, 0xa5, 0x55,
+	0x27, 0x5c, 0xf5, 0xf8, 0x63, 0xf7, 0xf8, 0x0a,
+	0x31, 0xee, 0x01, 0xa8, 0xc9, 0x0c, 0xbd, 0x73,
+	0x62, 0x21, 0xa7, 0x1c, 0xd1, 0x62, 0xe5, 0xdd,
+	0x43, 0x95, 0x4d, 0x60, 0x11, 0x65, 0x6c, 0xfa,
+	0x67, 0x9a, 0x2f, 0x24, 0x1e, 0xbd, 0x10, 0xc4,
+	0xe5, 0x23, 0x6f, 0x02, 0x76, 0x51, 0xd6, 0xe3,
+	0xad, 0x88, 0xda, 0xc4, 0xd9, 0x6a, 0x8f, 0xf7,
+	0xd2, 0x50, 0xdf, 0x9a, 0xad, 0x21, 0xc7, 0x5b,
+	0x47, 0x83, 0xf6, 0xc8, 0xcb, 0x0a, 0xd5, 0x28,
+	0x91, 0x3f, 0x18, 0x44, 0x62, 0x81, 0xfb, 0xcf,
+	0x51, 0x5d, 0xa1, 0xf5, 0x46, 0x74, 0x0d, 0x32,
+	0x21, 0x55, 0x1b, 0x8a, 0xf3, 0xd0, 0x4f, 0x41,
+	0x86, 0xc3, 0x55, 0x0b, 0x1c, 0xd9, 0x56, 0x2f,
+	0xcf, 0xe7, 0x9f, 0x06, 0x73, 0x82, 0xc2, 0x30,
+	0x7a, 0xc2, 0x01, 0xa2, 0x1e, 0xeb, 0x5d, 0x77,
+	0x7f, 0xbe, 0xee, 0xf4, 0x8a, 0x1b, 0x3b, 0xe3,
+	0x2d, 0xd5, 0x3e, 0x3b, 0x40, 0x82, 0xd6, 0x60,
+	0x86, 0x2f, 0xe9, 0xac, 0xc3, 0x65, 0xa5, 0xa3,
+	0x8c, 0x54, 0x51, 0x1f, 0x8e, 0x89, 0x19, 0xdd,
+	0xc5, 0x4a, 0xc0, 0xa2, 0x8b, 0xe5, 0x80, 0xfd,
+	0xa1, 0xd8, 0xe9, 0x15, 0xa0, 0x94, 0xd7, 0x9e,
+	0xe2, 0xf1, 0x83, 0x52, 0xf3, 0x0e, 0x34, 0x2f,
+	0x85, 0x67, 0x49, 0x73, 0x67, 0xb9, 0xb5, 0xd5,
+	0x0c, 0x1d, 0x03, 0x8e, 0x68, 0x57, 0x8d, 0xd2,
+	0x33, 0x44, 0x94, 0x28, 0x5b, 0xfa, 0xe0, 0x2b,
+	0x80, 0xd9, 0x96, 0x85, 0x6e, 0x0a, 0x2a, 0xdd,
+	0x9b, 0x5b, 0x55, 0x5a, 0x31, 0xb6, 0xfe, 0x3e,
+	0x0a, 0x41, 0x28, 0x20, 0xa7, 0xde, 0x31, 0xbe,
+	0x73, 0xcb, 0xbc, 0xbb, 0x50, 0xf8, 0x58, 0x74,
+	0xb1, 0x6b, 0x3f, 0x9a, 0x6c, 0x5e, 0x02, 0x87,
+	0x8d, 0x19, 0xa1, 0xd3, 0x6a, 0xc2, 0x91, 0x82,
+	0x3e, 0x0c, 0x90, 0xb8, 0xa6, 0x95, 0x23, 0x4e,
+	0xb9, 0x2d, 0x4d, 0x6c, 0xfb, 0xd7, 0x5e, 0xdf,
+	0xca, 0x06, 0x9b, 0x94, 0xb7, 0xfc, 0xbc, 0xad,
+	0x39, 0x5d, 0x43, 0xcb, 0x1c, 0x7d, 0x3c, 0x95,
+	0x3f, 0xf4, 0x47, 0x04, 0x1f, 0xfc, 0x8b, 0x23,
+	0xe7, 0xcf, 0x24, 0x6f, 0x40, 0x9b, 0xa5, 0x56,
+	0xcd, 0x69, 0x9e, 0x1f, 0x5a, 0xa0, 0x3b, 0x8f,
+	0x3e, 0x1c, 0xe7, 0x42, 0xc9, 0x66, 0xee, 0x99,
+	0x13, 0xb1, 0x4f, 0x65, 0x86, 0xba, 0xf0, 0x87,
+	0x81, 0x6f, 0x44, 0x08, 0xb4, 0x18, 0xac, 0xb6,
+	0xd3, 0x96, 0x68, 0xd4, 0x88, 0x89, 0xf2, 0xa2,
+	0xd6, 0x2f, 0xfe, 0x7e, 0x49, 0xb3, 0x9c, 0xc9,
+	0xaf, 0xd9, 0x28, 0xa8, 0x96, 0xc9, 0x2d, 0x26,
+	0x5b, 0xc7, 0xef, 0x66, 0x08, 0xd2, 0x38, 0x4f,
+	0x10, 0xb3, 0x83, 0x15, 0xf6, 0x00, 0x83, 0x3f,
+	0x20, 0xfe, 0xa8, 0x44, 0x6b, 0x62, 0x3b, 0x17,
+	0x39, 0x2e, 0xec, 0x5e, 0x78, 0xbe, 0xec, 0x16,
+	0x29, 0xa6, 0x79, 0x4c, 0x08, 0x75, 0xc8, 0x78,
+	0x3e, 0xc0, 0x05, 0xe9, 0xbb, 0x47, 0x94, 0xae,
+	0xaf, 0xa5, 0xbb, 0xb8, 0x47, 0x31, 0xf7, 0xe9,
+	0xb8, 0x1e, 0x6c, 0xda, 0x26, 0xc5, 0xf3, 0x26,
+	0x89, 0xd5, 0x04, 0x23, 0x0b, 0x11, 0x84, 0x8f,
+};
+
+uint8_t mldsa_44_sign[] = {
+	0x3E, 0xDD, 0xD2, 0x34, 0x62, 0x78, 0xEC, 0x19,
+	0x9F, 0xAA, 0xEC, 0x89, 0x99, 0x78, 0x31, 0xCB,
+	0x82, 0x0B, 0xE6, 0x46, 0x8D, 0x24, 0x9A, 0xD3,
+	0x69, 0xB7, 0x01, 0x85, 0x93, 0x75, 0xD0, 0xBE,
+	0xEA, 0x1F, 0x76, 0xFB, 0xB4, 0x6D, 0xC9, 0x64,
+	0xD4, 0x44, 0x68, 0x5D, 0xAD, 0x09, 0x69, 0xFC,
+	0x31, 0x2F, 0xD1, 0xFA, 0xEF, 0xF2, 0x1D, 0x2E,
+	0xB6, 0xA5, 0xA9, 0xFD, 0x31, 0x04, 0x68, 0x1E,
+	0x0B, 0xEC, 0xF4, 0x23, 0x4C, 0x9F, 0xC9, 0xD6,
+	0x27, 0x8D, 0xE1, 0xAA, 0x29, 0x38, 0x16, 0x65,
+	0x7E, 0x38, 0x5A, 0x30, 0xFC, 0xD9, 0xBF, 0x63,
+	0x3B, 0x82, 0xFE, 0x0D, 0x68, 0xD4, 0x52, 0x55,
+	0xBE, 0x86, 0x69, 0xCF, 0x75, 0x26, 0x2C, 0xB9,
+	0x1D, 0x66, 0x39, 0x4C, 0x89, 0xAC, 0x36, 0xBF,
+	0x34, 0x27, 0xCC, 0x7E, 0x6C, 0xC5, 0xBB, 0xFB,
+	0x78, 0x03, 0x39, 0x61, 0xD8, 0x76, 0x63, 0x6E,
+	0x6B, 0x68, 0x02, 0x43, 0x44, 0x57, 0x2E, 0x39,
+	0x9E, 0x9D, 0x64, 0x77, 0x8E, 0x8B, 0x79, 0x36,
+	0xCE, 0xE6, 0xBC, 0x6D, 0x80, 0xC8, 0x04, 0x81,
+	0x2A, 0x04, 0xD4, 0xEF, 0x63, 0xE1, 0x3F, 0xC4,
+	0xC1, 0x54, 0xD5, 0xAB, 0xE4, 0xEC, 0x65, 0xB0,
+	0xF0, 0x1A, 0xB2, 0x32, 0x9A, 0xB8, 0x51, 0xD4,
+	0x43, 0xFE, 0x81, 0x4F, 0xBD, 0x5D, 0xEE, 0xDE,
+	0x24, 0xAC, 0xBC, 0x22, 0x9B, 0x80, 0xB7, 0xE8,
+	0x22, 0x4B, 0x1B, 0x23, 0x89, 0x8C, 0xFE, 0xE3,
+	0x30, 0x35, 0xA2, 0x0B, 0x4E, 0x66, 0x64, 0xFE,
+	0x57, 0x68, 0xCF, 0xF5, 0xE5, 0x11, 0xB9, 0xB6,
+	0x3A, 0x2B, 0x15, 0x0D, 0xA4, 0x11, 0xE1, 0x01,
+	0x96, 0x06, 0x5D, 0x47, 0xCC, 0x04, 0x63, 0xB3,
+	0xC7, 0xDD, 0x0F, 0x4A, 0x0A, 0x90, 0x9C, 0x0C,
+	0x61, 0x1D, 0x4C, 0x21, 0x32, 0xD6, 0xE9, 0xDD,
+	0x0F, 0x91, 0xA4, 0xD1, 0x30, 0x14, 0x1C, 0x48,
+	0xEC, 0xF4, 0x4F, 0x02, 0x7B, 0x1E, 0x25, 0x3A,
+	0x7C, 0x6B, 0x42, 0x13, 0xF7, 0xBC, 0xB5, 0x02,
+	0xA9, 0x20, 0x85, 0x21, 0x01, 0x67, 0xC3, 0xDD,
+	0x6C, 0x6D, 0xD3, 0xC9, 0x6F, 0x13, 0x75, 0xDD,
+	0x1D, 0xD7, 0xE7, 0xF3, 0x34, 0x17, 0x37, 0xFF,
+	0xE6, 0x3B, 0xB5, 0x1F, 0xEE, 0x51, 0x73, 0x6D,
+	0x9E, 0xB7, 0xE2, 0xE7, 0xA1, 0x65, 0xE4, 0x29,
+	0x8E, 0xBF, 0x66, 0xCE, 0x5E, 0xD4, 0xBA, 0x0C,
+	0x18, 0x84, 0xBE, 0xAE, 0x9A, 0x17, 0x0D, 0xAE,
+	0x55, 0x90, 0x7F, 0x72, 0x73, 0xAB, 0x9F, 0x87,
+	0xCC, 0x3D, 0xCB, 0xE4, 0x38, 0x66, 0x92, 0xEE,
+	0x6D, 0xE9, 0x0B, 0x8A, 0xE2, 0x5F, 0x68, 0x9D,
+	0x06, 0xFD, 0xF3, 0x77, 0x4B, 0x50, 0xCD, 0x0E,
+	0x2B, 0xE1, 0xD3, 0xB4, 0xF4, 0x02, 0xF5, 0x9B,
+	0x5F, 0x3E, 0x59, 0xD7, 0x57, 0x9D, 0x87, 0x80,
+	0x60, 0xEB, 0x70, 0xF5, 0x34, 0x56, 0x46, 0x5B,
+	0xBA, 0x8F, 0x90, 0xAE, 0x9F, 0x6B, 0x43, 0x8C,
+	0x51, 0x45, 0xD2, 0x16, 0x4C, 0xBA, 0x86, 0xF0,
+	0xF4, 0xD5, 0x34, 0x6A, 0x3E, 0x5F, 0xAE, 0xBE,
+	0x95, 0x40, 0xFE, 0x26, 0x4D, 0x5E, 0x60, 0x4E,
+	0xD9, 0xEB, 0x47, 0x7D, 0x43, 0x63, 0x5F, 0x4B,
+	0xB1, 0xCE, 0x7E, 0xA2, 0xF0, 0xC9, 0x30, 0x0C,
+	0xB7, 0x13, 0x43, 0xC0, 0xF8, 0x02, 0x6C, 0xD2,
+	0x5F, 0xCE, 0x25, 0xF3, 0xAE, 0xC3, 0x2D, 0xC3,
+	0x13, 0xAE, 0x49, 0x8B, 0x82, 0x82, 0x44, 0xD0,
+	0x50, 0xF8, 0x00, 0x5E, 0xAC, 0xDE, 0x4B, 0x88,
+	0xC2, 0x38, 0x5C, 0xC3, 0x65, 0xF4, 0x25, 0x63,
+	0x29, 0xC3, 0xB0, 0x7A, 0x45, 0x5D, 0x43, 0x89,
+	0xCA, 0x5A, 0x12, 0x61, 0xD8, 0x92, 0x65, 0x1B,
+	0x0F, 0xBF, 0x62, 0xB9, 0xA6, 0xF2, 0xA8, 0xA7,
+	0x06, 0xAC, 0x02, 0xA4, 0xC6, 0x25, 0xD6, 0xC5,
+	0xD2, 0xDE, 0x87, 0x88, 0x11, 0xBD, 0x7C, 0x87,
+	0x91, 0xA9, 0x91, 0x60, 0x1F, 0x0F, 0xF0, 0x24,
+	0xFE, 0xA0, 0xEB, 0xDC, 0x89, 0x68, 0x84, 0x10,
+	0xD7, 0x55, 0xC1, 0x3A, 0xCA, 0x1F, 0xFF, 0x77,
+	0x41, 0xA1, 0xDB, 0x13, 0x31, 0xEF, 0x9C, 0xA3,
+	0xA2, 0x3A, 0x37, 0x1B, 0xF9, 0x46, 0xF8, 0x51,
+	0x15, 0xB3, 0x0A, 0x12, 0x64, 0x3F, 0xE5, 0xA8,
+	0x07, 0xA2, 0x57, 0x87, 0x2A, 0x3F, 0xD2, 0x87,
+	0xDB, 0xC0, 0x33, 0xAC, 0xF5, 0x28, 0x42, 0xC5,
+	0xD4, 0x20, 0x27, 0xAE, 0x57, 0xAF, 0x6C, 0x74,
+	0x8A, 0xA0, 0x90, 0xEE, 0x34, 0xE9, 0x19, 0xB9,
+	0x0E, 0xDF, 0x4D, 0xDE, 0x77, 0x66, 0xC4, 0xBC,
+	0x99, 0x59, 0x14, 0xCB, 0x9D, 0xBF, 0xBC, 0x5F,
+	0xFF, 0x2B, 0xA7, 0xED, 0x29, 0x49, 0x13, 0x6C,
+	0x2B, 0x71, 0x58, 0xC2, 0xC4, 0x67, 0xCB, 0x6A,
+	0x18, 0x6F, 0x4E, 0x88, 0xB9, 0x76, 0xC8, 0x6B,
+	0xDC, 0x6A, 0x05, 0xA5, 0x22, 0x31, 0x15, 0xCE,
+	0x54, 0xDA, 0xE8, 0x0E, 0xED, 0xDF, 0x46, 0x90,
+	0x93, 0x9A, 0xE6, 0x2B, 0x45, 0xA4, 0x51, 0x42,
+	0x29, 0x05, 0xA9, 0xFF, 0x29, 0xBE, 0x4F, 0x6E,
+	0xE7, 0x52, 0x2C, 0x16, 0x3F, 0x95, 0x94, 0x7B,
+	0xE6, 0xE1, 0xF7, 0x9F, 0x36, 0x1F, 0xEE, 0x46,
+	0xA9, 0xE3, 0x71, 0x37, 0x08, 0xF7, 0x63, 0xAF,
+	0x16, 0xB9, 0x43, 0x86, 0xAC, 0xC7, 0x5D, 0x5B,
+	0x73, 0x38, 0x08, 0x2C, 0xC6, 0x65, 0x02, 0xC8,
+	0x70, 0x71, 0x01, 0xA7, 0xD3, 0xA6, 0xB9, 0x74,
+	0xAA, 0x71, 0x3B, 0x1B, 0xEF, 0x84, 0xA9, 0x77,
+	0x91, 0x82, 0x7F, 0xB7, 0x3D, 0x2E, 0x8B, 0xD5,
+	0x4D, 0xAD, 0x29, 0xAC, 0x51, 0x9E, 0xDB, 0xF0,
+	0x4A, 0x1D, 0x29, 0x82, 0x04, 0x9E, 0x03, 0x8C,
+	0x74, 0x66, 0x12, 0x75, 0xD0, 0x77, 0x07, 0xCC,
+	0x7E, 0x8D, 0x19, 0x2F, 0x42, 0xFA, 0xB7, 0xBD,
+	0x7E, 0x77, 0xEF, 0xF1, 0x35, 0xAF, 0x7C, 0xFF,
+	0x52, 0x5F, 0xDB, 0x03, 0x99, 0x0D, 0x89, 0x8A,
+	0x60, 0x61, 0x42, 0xC2, 0xE7, 0x33, 0x58, 0xE7,
+	0x40, 0x90, 0x46, 0x84, 0xD5, 0x4B, 0x30, 0x88,
+	0xA7, 0xBB, 0x25, 0xDE, 0x02, 0xFE, 0x57, 0x93,
+	0xFD, 0xD0, 0x6E, 0xA2, 0xFE, 0x38, 0xA3, 0x5E,
+	0x6C, 0x35, 0x06, 0xC4, 0xC6, 0x8C, 0x9C, 0x37,
+	0x3B, 0x6A, 0x1D, 0x91, 0xCB, 0x84, 0x03, 0x47,
+	0x85, 0xC7, 0x1D, 0x82, 0xEE, 0xB5, 0xF8, 0xEC,
+	0x29, 0xDE, 0x30, 0x76, 0x32, 0x08, 0x6A, 0x75,
+	0x43, 0x6A, 0xB8, 0x4C, 0x5D, 0x5A, 0x54, 0xC2,
+	0xE3, 0x58, 0x43, 0x6E, 0x90, 0xCE, 0x51, 0xEB,
+	0xE2, 0xFD, 0x68, 0xAE, 0xB3, 0xBA, 0x80, 0xB4,
+	0x03, 0x84, 0x26, 0x4E, 0xAB, 0x7B, 0x15, 0x2D,
+	0xDE, 0xB0, 0x7B, 0xF3, 0x4D, 0xFB, 0x6A, 0xFC,
+	0xE3, 0x47, 0xFC, 0x9C, 0x34, 0xC8, 0xB2, 0x10,
+	0x46, 0xCC, 0x5F, 0x0A, 0xC6, 0xEB, 0x48, 0x47,
+	0xFF, 0x73, 0x75, 0xD0, 0x7C, 0xBF, 0x44, 0xCB,
+	0xAE, 0x8A, 0x30, 0x0B, 0x3F, 0x58, 0x11, 0x51,
+	0x32, 0xD5, 0x7C, 0xCC, 0xB5, 0xDB, 0xD9, 0x21,
+	0xD0, 0x6C, 0x29, 0xE2, 0xD0, 0xE1, 0xB2, 0xC8,
+	0x06, 0x29, 0xC0, 0xC8, 0x5B, 0xB2, 0x3A, 0x66,
+	0x7A, 0x25, 0x13, 0x57, 0x80, 0x14, 0x5B, 0x31,
+	0xC4, 0x7B, 0x21, 0xB5, 0x50, 0x9C, 0x76, 0x6B,
+	0x8C, 0x16, 0xF7, 0x95, 0xA1, 0x79, 0x6B, 0xA8,
+	0x22, 0x13, 0xD5, 0x32, 0x15, 0x3E, 0xFC, 0x55,
+	0x80, 0xD2, 0x71, 0xD1, 0x59, 0x15, 0xDA, 0xFC,
+	0x55, 0x75, 0xE7, 0x7E, 0x15, 0x48, 0xD9, 0x73,
+	0x0D, 0x6A, 0x31, 0x8A, 0x1C, 0x86, 0x4A, 0x31,
+	0x57, 0x5B, 0x0A, 0x9D, 0xE4, 0x8C, 0x80, 0x7F,
+	0x0E, 0x07, 0x36, 0x38, 0x7C, 0xEA, 0x3C, 0xBD,
+	0xBD, 0xD1, 0xAA, 0xE7, 0xE4, 0x43, 0xB2, 0xFC,
+	0x26, 0x39, 0x4F, 0xCC, 0xE6, 0xB8, 0xD7, 0x90,
+	0xC3, 0x5F, 0xAA, 0xEA, 0x78, 0xC6, 0xD7, 0x58,
+	0x15, 0x7D, 0x27, 0xD0, 0x7E, 0x0F, 0x13, 0x0D,
+	0x47, 0x49, 0x28, 0x5B, 0xD7, 0xBC, 0x41, 0xB5,
+	0x66, 0x38, 0x29, 0xB4, 0x71, 0xEC, 0xA2, 0xDE,
+	0xE3, 0xE0, 0x4C, 0x27, 0xB4, 0x2C, 0xEE, 0xF1,
+	0x5F, 0x37, 0x81, 0xCE, 0x31, 0x42, 0x87, 0x44,
+	0x39, 0x7B, 0x35, 0xCF, 0xE8, 0x7D, 0x5E, 0xD7,
+	0xA3, 0x3D, 0xB9, 0x92, 0x95, 0x8C, 0x25, 0xC6,
+	0xC9, 0xBC, 0x46, 0x4E, 0x03, 0x70, 0x29, 0x4B,
+	0x79, 0xB8, 0xEF, 0x54, 0x98, 0x8B, 0x9A, 0x45,
+	0x09, 0x8C, 0x43, 0xD1, 0x9B, 0x29, 0xEA, 0xDE,
+	0xF2, 0x25, 0x10, 0xA6, 0xF9, 0x2C, 0xC8, 0x90,
+	0x49, 0xA5, 0x3C, 0xDC, 0xCE, 0xA3, 0x98, 0xF1,
+	0x4C, 0xC6, 0x3E, 0xE0, 0x21, 0x58, 0x1A, 0x39,
+	0xDA, 0x50, 0x2A, 0x6A, 0x18, 0x49, 0xC9, 0xA1,
+	0x9D, 0xF3, 0xF4, 0xFB, 0xDD, 0x6F, 0x8D, 0xF4,
+	0xFE, 0x61, 0xA0, 0xC6, 0xF5, 0x58, 0x89, 0xAE,
+	0xEC, 0xC6, 0xE0, 0x88, 0x4A, 0x07, 0x6F, 0x11,
+	0x72, 0x5A, 0x6D, 0x3E, 0x08, 0x64, 0x3E, 0x23,
+	0x7D, 0x9A, 0x74, 0xB3, 0xC3, 0xDA, 0xA7, 0x29,
+	0x0E, 0xC1, 0x37, 0xB0, 0x04, 0x42, 0x47, 0x01,
+	0x80, 0x4B, 0xC0, 0x35, 0x49, 0x19, 0xB1, 0xDB,
+	0x51, 0x51, 0x09, 0x90, 0x08, 0xB2, 0xC4, 0x5C,
+	0xA0, 0xD6, 0x6E, 0x09, 0xFF, 0xA0, 0xC6, 0x4F,
+	0x32, 0x95, 0x84, 0xBE, 0xAA, 0x4A, 0x0A, 0x36,
+	0x83, 0xD3, 0x0C, 0xB7, 0xE0, 0xD0, 0x24, 0xE9,
+	0x0A, 0x2F, 0x0F, 0xB4, 0x3A, 0x2F, 0xCE, 0x34,
+	0xE5, 0xF0, 0x67, 0x07, 0x72, 0x52, 0x24, 0xE9,
+	0x9F, 0xBF, 0xDE, 0x40, 0x95, 0xAD, 0x74, 0x41,
+	0x4A, 0x00, 0x07, 0xEB, 0x14, 0xDD, 0xC4, 0xA2,
+	0x37, 0x72, 0x83, 0xE7, 0xD6, 0x20, 0xF5, 0xC6,
+	0x86, 0x97, 0xC5, 0x64, 0x58, 0x1B, 0x57, 0x5F,
+	0x9D, 0x06, 0x1D, 0xB5, 0x2D, 0x26, 0xBA, 0xE4,
+	0x49, 0x71, 0x08, 0xBD, 0x21, 0xC4, 0xA9, 0xF3,
+	0x26, 0x7A, 0x28, 0xD6, 0x81, 0x20, 0xCD, 0x9C,
+	0xED, 0xB8, 0xDC, 0x45, 0x33, 0xC0, 0x54, 0x5C,
+	0x3A, 0xF5, 0xC5, 0x1B, 0x19, 0x10, 0xCA, 0xDF,
+	0x99, 0xD4, 0xEE, 0x25, 0xD6, 0x71, 0x24, 0x4D,
+	0xFF, 0x14, 0x85, 0x58, 0x07, 0xC8, 0x3F, 0xD6,
+	0x55, 0x1C, 0xBF, 0xF8, 0x94, 0x31, 0x04, 0x83,
+	0xEC, 0xD1, 0xF5, 0x20, 0x72, 0xC3, 0xE9, 0xB1,
+	0x8A, 0x00, 0x0B, 0x94, 0x53, 0x4C, 0x01, 0x8C,
+	0xDE, 0x80, 0x59, 0x66, 0x72, 0x2D, 0xC5, 0x78,
+	0xAC, 0x4A, 0xAD, 0x4F, 0x14, 0xC1, 0x78, 0x87,
+	0x5F, 0xDF, 0xF2, 0x95, 0xCF, 0x8F, 0x3F, 0xA6,
+	0xCC, 0xAA, 0x1E, 0xD8, 0xA8, 0x37, 0xAD, 0x5B,
+	0xA5, 0x6D, 0xBC, 0x81, 0xAC, 0xCD, 0xFD, 0x56,
+	0x9E, 0x8B, 0xB9, 0xEC, 0x7E, 0x82, 0x4E, 0x55,
+	0x05, 0xFD, 0x9F, 0xDC, 0x0A, 0xF7, 0xBD, 0x3F,
+	0xEA, 0x42, 0x9D, 0x7E, 0xAB, 0x09, 0xDF, 0x3D,
+	0xA3, 0x8C, 0x63, 0x78, 0x81, 0x8F, 0x46, 0x9F,
+	0x12, 0xB8, 0x8A, 0xA5, 0xE4, 0xE9, 0x73, 0x95,
+	0x37, 0xD3, 0x39, 0xFE, 0x9B, 0x69, 0x58, 0x05,
+	0x5B, 0x30, 0x09, 0x31, 0x8B, 0xD9, 0xDB, 0xAE,
+	0x96, 0x93, 0x96, 0xDF, 0xC0, 0x70, 0x1D, 0xFF,
+	0x5D, 0x60, 0x72, 0x5A, 0xDD, 0xC2, 0x3D, 0xCF,
+	0x13, 0xA0, 0x36, 0x38, 0xF4, 0x3A, 0x03, 0x15,
+	0x48, 0xF0, 0xB1, 0x4A, 0x12, 0x72, 0xBA, 0x6B,
+	0xE2, 0xD6, 0x4E, 0x57, 0x22, 0x87, 0x2F, 0xE7,
+	0x40, 0x1B, 0x22, 0xF3, 0x4A, 0xE7, 0xB1, 0xA4,
+	0x28, 0xC7, 0xBB, 0x17, 0x5E, 0x0C, 0x03, 0xE3,
+	0xF4, 0x67, 0x25, 0xB2, 0xBB, 0xE6, 0x4E, 0xCD,
+	0x8A, 0x39, 0xC6, 0x05, 0xB7, 0x14, 0x10, 0xF4,
+	0x36, 0xE9, 0x8A, 0xC3, 0x41, 0xD3, 0x30, 0xAD,
+	0x79, 0x56, 0xE2, 0xC3, 0x55, 0xFC, 0x05, 0x3B,
+	0xD0, 0x83, 0x31, 0xE7, 0xA1, 0x85, 0xBE, 0x6C,
+	0xAF, 0x9D, 0xA6, 0x26, 0xC4, 0x7A, 0x4B, 0xD8,
+	0x26, 0xA7, 0x59, 0xBB, 0x8D, 0x6E, 0x15, 0x96,
+	0x84, 0x08, 0x0B, 0xDF, 0x29, 0x2D, 0x74, 0xD9,
+	0xAD, 0xFE, 0xC1, 0x3A, 0x84, 0x4E, 0xCE, 0x8F,
+	0x00, 0x9A, 0x50, 0xB8, 0x6F, 0x02, 0xE6, 0xEC,
+	0xA9, 0xE6, 0x1F, 0x71, 0x6A, 0x48, 0x98, 0x61,
+	0x3B, 0xC1, 0x37, 0x5A, 0x2E, 0xF3, 0xE0, 0xD6,
+	0x11, 0x0C, 0x15, 0x39, 0x7B, 0xFB, 0x37, 0xAF,
+	0x7A, 0xCA, 0xD6, 0x10, 0xDE, 0x95, 0x6A, 0xC6,
+	0x19, 0xEC, 0x21, 0x51, 0xCE, 0xAE, 0x8F, 0x5A,
+	0xEE, 0xEF, 0xB2, 0x9C, 0xF7, 0x4F, 0x5A, 0xB4,
+	0x90, 0xED, 0xB0, 0x64, 0x59, 0x95, 0xC5, 0x32,
+	0xC1, 0x85, 0xD7, 0x7E, 0x6C, 0xC6, 0x76, 0x11,
+	0x4B, 0xB5, 0x17, 0x1D, 0xEE, 0x15, 0xFF, 0xD3,
+	0xC7, 0xBB, 0xAA, 0x3C, 0x5D, 0x4D, 0x03, 0x82,
+	0xC0, 0xC7, 0xEA, 0xD0, 0xD8, 0x1B, 0xFF, 0x3C,
+	0x1D, 0x5A, 0x3F, 0xBD, 0x81, 0x66, 0x62, 0x6E,
+	0xB3, 0xF5, 0x5F, 0xF0, 0x43, 0x90, 0x01, 0x71,
+	0xDD, 0xB6, 0x0F, 0x60, 0xCE, 0xFB, 0x17, 0x21,
+	0x5A, 0x7F, 0x0C, 0x69, 0x82, 0x9D, 0x4C, 0xF3,
+	0x30, 0x1A, 0xF7, 0x1E, 0x85, 0x1A, 0x89, 0x84,
+	0xF3, 0x4E, 0x8F, 0x15, 0x60, 0x43, 0x6D, 0x3A,
+	0x5B, 0x07, 0xC0, 0x78, 0x6A, 0x02, 0xB4, 0x98,
+	0x3D, 0xAB, 0xAC, 0x25, 0x55, 0xC8, 0x49, 0x7E,
+	0xC9, 0x04, 0x73, 0xAF, 0x0D, 0x17, 0x1A, 0xA6,
+	0xBE, 0xD8, 0x11, 0x69, 0x4F, 0x17, 0x39, 0xF3,
+	0x57, 0x53, 0x1F, 0xD5, 0x1B, 0x15, 0x89, 0x53,
+	0x54, 0xB1, 0x9F, 0xFD, 0x52, 0x92, 0xA8, 0x98,
+	0xD4, 0x7B, 0xEE, 0x43, 0xC6, 0x31, 0xDE, 0xEC,
+	0xDC, 0xE5, 0x1D, 0x90, 0x37, 0x63, 0xA1, 0xF8,
+	0x42, 0x52, 0x8A, 0x73, 0x8B, 0x3D, 0x42, 0x85,
+	0x64, 0x5C, 0xA9, 0xCC, 0xA1, 0xCD, 0xEB, 0x9E,
+	0x2A, 0xF5, 0x21, 0x9E, 0x81, 0xC6, 0x2D, 0xD7,
+	0x22, 0xC2, 0xEE, 0x47, 0x7E, 0xDA, 0x60, 0x26,
+	0xFA, 0xE9, 0xB1, 0x81, 0x01, 0x77, 0xD3, 0x42,
+	0xDD, 0x03, 0x65, 0x74, 0x2B, 0x85, 0x49, 0x9A,
+	0xA5, 0x27, 0x76, 0x49, 0xF1, 0x72, 0x5E, 0xDF,
+	0xB7, 0xAD, 0x19, 0x1A, 0x58, 0x89, 0x56, 0x5C,
+	0x61, 0x03, 0xC7, 0x42, 0x84, 0xF2, 0x9E, 0x9E,
+	0x09, 0x2A, 0x2D, 0x3B, 0xAE, 0x6A, 0x8E, 0x9A,
+	0x87, 0x70, 0x16, 0x0A, 0xF1, 0xA9, 0xEA, 0xD2,
+	0xF3, 0x2A, 0xA3, 0xB0, 0x32, 0xD3, 0x28, 0x92,
+	0x19, 0x02, 0x77, 0xB2, 0x26, 0x1B, 0xC0, 0x59,
+	0x1A, 0x67, 0x4B, 0x51, 0x04, 0x83, 0x25, 0xF6,
+	0x4E, 0xA3, 0x92, 0x55, 0xCD, 0x74, 0xF5, 0x23,
+	0x98, 0xB7, 0xB9, 0x75, 0xA6, 0xDC, 0x4E, 0xD2,
+	0x93, 0x39, 0x94, 0xA3, 0xCD, 0xF8, 0xD5, 0xA4,
+	0xA9, 0x3C, 0x97, 0xED, 0x18, 0x54, 0xBB, 0x59,
+	0x7E, 0x75, 0xE3, 0xEE, 0x5A, 0x36, 0x53, 0x3D,
+	0x02, 0xFB, 0x47, 0xE6, 0x10, 0x1D, 0xDF, 0x21,
+	0xDA, 0x44, 0x66, 0x05, 0x81, 0xC4, 0xE9, 0x3B,
+	0xD5, 0x56, 0xC5, 0xAD, 0x50, 0x7A, 0xE1, 0xAA,
+	0x91, 0x7F, 0x7C, 0x4E, 0x85, 0xCC, 0xDC, 0x4A,
+	0xBD, 0x72, 0x1F, 0x3F, 0x21, 0x93, 0x98, 0x21,
+	0xB8, 0xCC, 0x21, 0x00, 0x24, 0x13, 0xAB, 0x63,
+	0xC1, 0x31, 0xCA, 0x1C, 0x67, 0x0C, 0x0E, 0x5A,
+	0x62, 0xC3, 0x1E, 0x6D, 0x63, 0x9B, 0xDA, 0x7F,
+	0x92, 0xC4, 0x64, 0x8B, 0xC7, 0x80, 0x04, 0x05,
+	0x36, 0x06, 0xCE, 0xF7, 0x37, 0x3A, 0xA8, 0xDF,
+	0x2C, 0x61, 0x46, 0x48, 0x2A, 0x5C, 0xDC, 0xBB,
+	0x34, 0x16, 0xDA, 0x59, 0x0D, 0x5B, 0xE5, 0x08,
+	0x05, 0xAF, 0x59, 0x86, 0x34, 0x56, 0x88, 0x4F,
+	0xAF, 0xA0, 0x28, 0xC4, 0xF2, 0x97, 0xC6, 0xF4,
+	0x7C, 0xFD, 0xA4, 0x20, 0xE4, 0x20, 0x2C, 0xDA,
+	0x98, 0xAD, 0x4A, 0x96, 0x9F, 0x62, 0xBB, 0x1C,
+	0xB6, 0x28, 0xB0, 0xD0, 0xEA, 0x3B, 0xB8, 0x3C,
+	0x8D, 0x4E, 0x97, 0xEA, 0x9E, 0x63, 0xAA, 0xAA,
+	0x8D, 0x22, 0x61, 0x29, 0x1A, 0x82, 0x29, 0x86,
+	0x87, 0x62, 0xA4, 0xE4, 0xC0, 0x03, 0x93, 0x55,
+	0x7D, 0x40, 0xE9, 0x43, 0x14, 0x9C, 0xE2, 0xDA,
+	0x0A, 0x00, 0x37, 0xEA, 0x80, 0xB8, 0x31, 0x66,
+	0xAE, 0xD7, 0xF8, 0xB4, 0x24, 0xC7, 0x78, 0xDB,
+	0x23, 0x66, 0x61, 0xA5, 0x47, 0x10, 0x4A, 0xE8,
+	0x79, 0xB6, 0xBD, 0x6A, 0xB6, 0x22, 0x6C, 0x7B,
+	0x19, 0xF3, 0x80, 0x35, 0x9A, 0x15, 0x36, 0x89,
+	0x2A, 0x2C, 0xED, 0x26, 0xF1, 0x96, 0xFF, 0x30,
+	0x4D, 0x03, 0x82, 0x2C, 0x69, 0x31, 0x40, 0x40,
+	0x0C, 0xD1, 0x40, 0x3E, 0xE0, 0xB5, 0x37, 0xA8,
+	0x6D, 0x68, 0x68, 0x8F, 0x9E, 0xC5, 0x12, 0x05,
+	0xF5, 0x36, 0x85, 0x5F, 0x8A, 0x52, 0x7B, 0x60,
+	0xA2, 0xC2, 0x39, 0xAF, 0x87, 0xC8, 0xC4, 0xF2,
+	0x53, 0x1D, 0xF0, 0x84, 0x32, 0x8A, 0x04, 0x42,
+	0xBF, 0xCA, 0x1A, 0x08, 0x89, 0x71, 0xCA, 0xC8,
+	0x11, 0xA6, 0xDC, 0xED, 0x31, 0xFC, 0x41, 0xFC,
+	0x84, 0x75, 0xA5, 0x98, 0x67, 0x9E, 0xE7, 0x69,
+	0x9F, 0x3C, 0x42, 0x94, 0x69, 0xA5, 0x1D, 0xC2,
+	0x55, 0x9D, 0x2E, 0xC9, 0x13, 0x3C, 0x68, 0x94,
+	0xA9, 0x7E, 0x6A, 0xFC, 0x11, 0xE3, 0x97, 0x0D,
+	0x59, 0x8F, 0x8D, 0x05, 0x01, 0x4A, 0x74, 0xB6,
+	0x96, 0x6D, 0x1E, 0x7F, 0x63, 0xA5, 0x54, 0x39,
+	0x5A, 0x6C, 0xB9, 0x9B, 0xC3, 0x79, 0xCB, 0xD3,
+	0xC9, 0xE9, 0x37, 0x9E, 0xDC, 0x3B, 0xE2, 0xD2,
+	0xE6, 0x07, 0x77, 0xFA, 0xD5, 0xCF, 0xD6, 0x42,
+	0x45, 0x46, 0xFE, 0x06, 0x28, 0x0E, 0x4D, 0xA6,
+	0x72, 0xE6, 0x6F, 0x39, 0xCD, 0xB9, 0xBF, 0x43,
+	0xF7, 0xD9, 0x99, 0x9B, 0x46, 0xF1, 0x80, 0xBA,
+	0x07, 0x4A, 0x0A, 0xC3, 0x9F, 0xD3, 0xCB, 0xA5,
+	0x85, 0xF7, 0xEE, 0x9F, 0x6D, 0xC0, 0x52, 0xD7,
+	0x17, 0x27, 0x81, 0x92, 0x98, 0xA0, 0xBB, 0xC9,
+	0xD7, 0xE4, 0xF0, 0xF8, 0x25, 0x2C, 0x38, 0x3B,
+	0x44, 0x4E, 0x55, 0x57, 0x5F, 0x86, 0x9A, 0xA1,
+	0xB2, 0xBB, 0xBF, 0xE4, 0xF4, 0x04, 0x0D, 0x16,
+	0x34, 0x48, 0x5A, 0x68, 0x72, 0x88, 0x8B, 0x97,
+	0xA5, 0xAC, 0xBC, 0xC4, 0xC9, 0xCC, 0xF3, 0x03,
+	0x12, 0x14, 0x2C, 0x3B, 0x3E, 0x3F, 0x4D, 0x52,
+	0x79, 0x7A, 0x91, 0x96, 0xA8, 0xB3, 0xBB, 0xCC,
+	0xCF, 0xD7, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x0C, 0x1D, 0x2F, 0x43,
+};
+
+uint8_t mldsa_44_sign_dtrm[] = {
+	0xC7, 0x9B, 0x98, 0x33, 0xEA, 0xCC, 0xCC, 0x47,
+	0x51, 0x8F, 0xE1, 0xC0, 0xDA, 0x82, 0x9B, 0xAA,
+	0x74, 0x0A, 0x14, 0x25, 0x73, 0x53, 0x27, 0x7C,
+	0x4C, 0x4A, 0xD6, 0xB7, 0x7C, 0x71, 0x25, 0xD8,
+	0xC5, 0xBA, 0xA8, 0x18, 0x59, 0xC7, 0x64, 0x2E,
+	0x9A, 0x65, 0xE9, 0x63, 0x83, 0x3D, 0xB8, 0x2B,
+	0x42, 0x0A, 0x6D, 0x7D, 0xCE, 0x6A, 0xA3, 0x11,
+	0xD6, 0xB6, 0x54, 0x82, 0x36, 0x38, 0xF1, 0x84,
+	0x01, 0x3E, 0x26, 0x66, 0xC7, 0x38, 0x6F, 0x41,
+	0x4C, 0xC2, 0x42, 0xB5, 0xBF, 0xCE, 0x7B, 0x8B,
+	0xD5, 0x4F, 0x9B, 0x9F, 0x0E, 0xFE, 0x52, 0xAF,
+	0x6D, 0x39, 0xD8, 0x0A, 0x27, 0x4D, 0xDB, 0x9F,
+	0x04, 0x25, 0x8C, 0xF5, 0x89, 0x5B, 0xEB, 0xDC,
+	0x70, 0xBF, 0x23, 0x1D, 0x14, 0x73, 0x9E, 0xFC,
+	0x41, 0xA0, 0xA2, 0xA5, 0xAA, 0xAB, 0x8E, 0xCD,
+	0x5E, 0x29, 0xC5, 0x3E, 0xEC, 0x0A, 0xD9, 0x06,
+	0xEB, 0x8C, 0x18, 0x41, 0x80, 0x91, 0x5D, 0xC9,
+	0x28, 0xCE, 0xDB, 0x1C, 0x0E, 0x8F, 0xE3, 0xC0,
+	0xE5, 0xB1, 0x0A, 0x38, 0x06, 0x43, 0x36, 0x0D,
+	0xF8, 0xE6, 0x2E, 0xCB, 0xEB, 0x51, 0xC8, 0x82,
+	0xE0, 0x3B, 0xCB, 0xCE, 0x62, 0xC8, 0xE0, 0x8A,
+	0x2C, 0xE4, 0xC7, 0xD7, 0xC1, 0x8A, 0x64, 0x0D,
+	0xE8, 0x5A, 0x52, 0x83, 0x58, 0x93, 0x2A, 0x25,
+	0x92, 0x65, 0x19, 0x4F, 0x0F, 0x44, 0x1C, 0xCE,
+	0x56, 0x91, 0xB4, 0xC9, 0x8D, 0x9E, 0x6A, 0xD5,
+	0xCA, 0xE3, 0xA0, 0xE3, 0x46, 0x45, 0x0D, 0x59,
+	0x14, 0x90, 0x72, 0x67, 0xC5, 0x95, 0xAC, 0x2A,
+	0xC4, 0x70, 0xD2, 0xCA, 0x40, 0x1D, 0x62, 0x0E,
+	0x2A, 0xA4, 0x3E, 0xAC, 0x45, 0x00, 0x96, 0xA4,
+	0xF6, 0xAC, 0xEE, 0x01, 0x19, 0xEB, 0xCC, 0x8C,
+	0x62, 0xE3, 0x26, 0x59, 0xB7, 0xB9, 0xBF, 0xBB,
+	0x8D, 0x72, 0xAD, 0x1A, 0xA2, 0x8D, 0xB1, 0x1B,
+	0xC1, 0xC1, 0xD8, 0xFF, 0x03, 0xAF, 0x74, 0xDF,
+	0xC6, 0x3C, 0xCE, 0xBD, 0xA8, 0x12, 0xFA, 0xAC,
+	0x83, 0x8C, 0x7E, 0x26, 0x8E, 0x0D, 0x03, 0xF3,
+	0x02, 0x17, 0x23, 0x13, 0x25, 0x01, 0x1F, 0xB9,
+	0x3B, 0x1C, 0x3E, 0xA7, 0xD9, 0xE4, 0xE6, 0xCA,
+	0xD6, 0x0C, 0x91, 0xAC, 0xEE, 0xD4, 0x42, 0xA7,
+	0xB1, 0x62, 0x70, 0xC8, 0xC9, 0x2F, 0x0A, 0xE0,
+	0xA8, 0xC7, 0x22, 0xE5, 0x2C, 0x06, 0x1C, 0x09,
+	0x4B, 0x45, 0x25, 0x02, 0x07, 0x8A, 0x86, 0xCC,
+	0xF8, 0xF9, 0x36, 0x11, 0x67, 0x75, 0xEE, 0xD2,
+	0xD4, 0x67, 0x09, 0xFD, 0x37, 0xB4, 0x3F, 0x7B,
+	0x4A, 0x2B, 0x4E, 0x05, 0x37, 0x5E, 0xFD, 0x97,
+	0x79, 0x95, 0x13, 0x95, 0x0D, 0x75, 0x15, 0x94,
+	0x27, 0x36, 0xB3, 0x97, 0x03, 0xBE, 0x38, 0x14,
+	0xCB, 0x4D, 0x16, 0x49, 0xFF, 0x36, 0xFA, 0xED,
+	0x4D, 0x97, 0x45, 0xE4, 0xFB, 0xF9, 0x61, 0x7D,
+	0x1F, 0xCE, 0xC3, 0xBF, 0xB3, 0xEA, 0x3C, 0xBC,
+	0x13, 0x05, 0xBB, 0xAB, 0x44, 0x84, 0x80, 0x0F,
+	0xB9, 0x1F, 0x6E, 0x88, 0x27, 0x4A, 0xFA, 0x17,
+	0x83, 0x76, 0x5F, 0xC5, 0xE8, 0x85, 0xBC, 0xFF,
+	0xD8, 0x48, 0x4A, 0x9F, 0xEB, 0xC3, 0xF8, 0x41,
+	0x86, 0x4D, 0xC2, 0x75, 0x7B, 0x74, 0x71, 0x68,
+	0x9C, 0xF8, 0x05, 0x8B, 0xB7, 0xFA, 0xE0, 0xA7,
+	0xFA, 0xEC, 0x53, 0x91, 0xD0, 0xB4, 0x44, 0x7A,
+	0x42, 0xAD, 0xD2, 0x17, 0x86, 0x8F, 0x96, 0xF0,
+	0xF1, 0xD6, 0xC0, 0x26, 0x34, 0x83, 0x2E, 0x62,
+	0x0D, 0x3F, 0x13, 0x5A, 0x8C, 0xBC, 0x6D, 0x8D,
+	0x39, 0x05, 0x91, 0x10, 0x32, 0xBE, 0x17, 0x8A,
+	0xC7, 0x23, 0xBE, 0x3F, 0xC5, 0x8A, 0xE0, 0x81,
+	0xFC, 0x0D, 0x4C, 0x62, 0xE8, 0x67, 0xBA, 0x8B,
+	0xBD, 0xA5, 0xCB, 0xE9, 0x34, 0x3D, 0x8D, 0x84,
+	0x9D, 0x65, 0xBF, 0x9E, 0xC4, 0xB3, 0x16, 0x2E,
+	0x12, 0xB9, 0x1F, 0x82, 0xA1, 0x46, 0x26, 0xD5,
+	0xAB, 0x7D, 0x80, 0x4D, 0x9C, 0xD3, 0xEB, 0x77,
+	0xFB, 0x67, 0xEA, 0xEE, 0xA8, 0x7B, 0x17, 0x02,
+	0x2E, 0x6E, 0xF5, 0x11, 0x44, 0xFC, 0x31, 0x01,
+	0xCC, 0x03, 0x94, 0x0A, 0xCF, 0x8D, 0x12, 0xCD,
+	0x87, 0x66, 0x38, 0x62, 0x3C, 0xBB, 0x98, 0x2E,
+	0xC5, 0x58, 0xD0, 0xF3, 0x06, 0xBD, 0x49, 0x7E,
+	0x18, 0x7D, 0x64, 0xEF, 0x37, 0x71, 0x87, 0xD4,
+	0xE6, 0x2C, 0xCC, 0x32, 0x59, 0x65, 0x05, 0x45,
+	0xDE, 0xF3, 0x17, 0x62, 0x2C, 0x25, 0x62, 0x9C,
+	0x67, 0xBD, 0x74, 0xF1, 0x54, 0x0E, 0x0B, 0x4A,
+	0x01, 0x9F, 0x5E, 0x3B, 0x08, 0x57, 0xFA, 0x09,
+	0x99, 0x11, 0x2C, 0x3E, 0x1D, 0x2D, 0xF7, 0x91,
+	0x12, 0x14, 0xFF, 0x95, 0x6F, 0xCA, 0xBD, 0x25,
+	0xEC, 0x3C, 0x98, 0xA7, 0xAB, 0x98, 0x0E, 0xFB,
+	0x01, 0xE9, 0x5E, 0x58, 0x5A, 0x49, 0x3F, 0xB2,
+	0xC4, 0xBC, 0xF3, 0xEC, 0xCA, 0x4C, 0x54, 0x27,
+	0x66, 0x10, 0x60, 0x76, 0x5C, 0xFB, 0x9E, 0xAC,
+	0xD2, 0x09, 0x75, 0xB3, 0x2B, 0x65, 0xE7, 0x93,
+	0xAD, 0x2B, 0x08, 0x6F, 0x87, 0x73, 0x45, 0x2A,
+	0x1B, 0xB1, 0x75, 0xE7, 0x02, 0x9B, 0xCB, 0x56,
+	0x87, 0x6F, 0x66, 0x44, 0xED, 0xDC, 0x03, 0x92,
+	0xD4, 0xF1, 0x07, 0x40, 0xD6, 0x86, 0xD5, 0x98,
+	0x3D, 0x9B, 0x03, 0xD9, 0x0A, 0x58, 0x59, 0x54,
+	0x06, 0x10, 0xFD, 0x15, 0xFB, 0xE0, 0x5B, 0x81,
+	0x8D, 0x0C, 0xC0, 0xA6, 0x15, 0x94, 0x72, 0x5E,
+	0xC8, 0x4A, 0x73, 0x59, 0x63, 0xF6, 0xCD, 0x8D,
+	0xA4, 0xC2, 0xAF, 0x2E, 0xAE, 0xC1, 0x93, 0x89,
+	0x08, 0x81, 0x10, 0xEC, 0x44, 0x81, 0x33, 0x96,
+	0x88, 0xDC, 0x19, 0xDF, 0xD4, 0x2E, 0x5D, 0x52,
+	0xD7, 0x6A, 0x02, 0x64, 0x11, 0x6B, 0x24, 0xCF,
+	0x51, 0xD4, 0xC1, 0x85, 0x7D, 0xA3, 0x24, 0x6A,
+	0x05, 0x13, 0x55, 0xC3, 0x64, 0x5A, 0xDF, 0x9A,
+	0x23, 0x73, 0xEA, 0xD9, 0x48, 0x98, 0xBE, 0x1C,
+	0xBD, 0x3A, 0x5D, 0x37, 0xDC, 0x18, 0xA8, 0x39,
+	0x71, 0x67, 0xC4, 0x12, 0xF1, 0xE3, 0x53, 0x73,
+	0xF1, 0xD8, 0xC4, 0x8B, 0xB3, 0x64, 0x03, 0xDD,
+	0x6E, 0xFB, 0x4A, 0xEF, 0xA4, 0x37, 0xA8, 0xA5,
+	0x2E, 0x86, 0x40, 0x73, 0x16, 0xBA, 0x3A, 0xF5,
+	0x5E, 0x47, 0xD8, 0x13, 0x58, 0xB7, 0x73, 0xA2,
+	0xDA, 0x00, 0x9F, 0x90, 0xE4, 0xF8, 0x0B, 0xB3,
+	0x26, 0x0A, 0xD8, 0x46, 0x8A, 0x09, 0x55, 0xCB,
+	0xCB, 0xA4, 0x89, 0x84, 0xF8, 0x35, 0xF0, 0xDF,
+	0x45, 0x5B, 0x6A, 0xAF, 0xA8, 0x5F, 0xE4, 0xC2,
+	0x03, 0x9B, 0x5B, 0x11, 0x21, 0xA7, 0xDE, 0xC5,
+	0x71, 0x3D, 0x00, 0xF8, 0x6F, 0x13, 0x75, 0x4E,
+	0x7B, 0x6B, 0x32, 0x95, 0xD3, 0x77, 0x82, 0xA2,
+	0x70, 0x6A, 0x80, 0xC3, 0x0D, 0x53, 0xC4, 0x1C,
+	0xF0, 0x1C, 0x5A, 0x54, 0xA4, 0xB2, 0x7A, 0x90,
+	0x6E, 0x48, 0x39, 0x19, 0x4A, 0x70, 0x8E, 0xEB,
+	0xF2, 0x94, 0x07, 0x45, 0xC0, 0x4B, 0xC1, 0x80,
+	0xED, 0x87, 0x39, 0x6B, 0x5F, 0x7E, 0x63, 0x95,
+	0x38, 0xFB, 0xF4, 0x6E, 0x3A, 0x6A, 0x78, 0x59,
+	0x1E, 0x51, 0x45, 0x02, 0x14, 0xAC, 0xA1, 0xD1,
+	0xC8, 0x44, 0x03, 0xB6, 0x3D, 0xA4, 0xB3, 0xC1,
+	0xE0, 0x1C, 0x39, 0xA1, 0x87, 0x21, 0x7C, 0xBA,
+	0x9A, 0x92, 0xA3, 0xAF, 0x37, 0xE8, 0x27, 0xA1,
+	0xBE, 0x2D, 0x83, 0x0A, 0x46, 0xE7, 0x68, 0x44,
+	0x9D, 0xB1, 0x57, 0x33, 0x9B, 0x57, 0xE3, 0x0C,
+	0xE7, 0xDF, 0x7F, 0x15, 0xC0, 0xB5, 0x3A, 0x08,
+	0x6C, 0xEF, 0xB3, 0xD3, 0xA2, 0x3C, 0x84, 0xC8,
+	0x77, 0x46, 0xB8, 0xD0, 0x1E, 0x6D, 0x7A, 0x0B,
+	0xD7, 0x25, 0x77, 0x74, 0xF6, 0xD8, 0xF4, 0x75,
+	0x54, 0x6A, 0x91, 0x48, 0x98, 0xAC, 0x52, 0xA6,
+	0x6C, 0xBC, 0x05, 0xA4, 0x92, 0x8F, 0x52, 0xAA,
+	0x97, 0xCC, 0x23, 0xD8, 0x69, 0x01, 0xB0, 0xD2,
+	0x1F, 0x22, 0xE8, 0xD1, 0xF7, 0x89, 0x8E, 0x40,
+	0xF1, 0xD8, 0xCE, 0xB5, 0x26, 0x82, 0xBD, 0xD7,
+	0x7C, 0x88, 0xB2, 0x6F, 0x16, 0x07, 0x67, 0x51,
+	0x45, 0x6C, 0x90, 0x63, 0xBA, 0x58, 0xB6, 0x71,
+	0xB8, 0x54, 0xA8, 0x4C, 0x54, 0xB3, 0xD7, 0x2B,
+	0x9F, 0xEB, 0x1C, 0xC6, 0x9F, 0xFA, 0xD6, 0xD3,
+	0xED, 0xA0, 0x99, 0x18, 0x99, 0x23, 0xB0, 0x1A,
+	0xAA, 0x3A, 0x42, 0xCB, 0x4A, 0xFC, 0x54, 0x30,
+	0x86, 0xD0, 0xFF, 0x44, 0x62, 0xAB, 0x94, 0xBD,
+	0xA9, 0x95, 0x27, 0x22, 0xD6, 0x57, 0xE7, 0x26,
+	0x94, 0x18, 0x0C, 0xDE, 0x10, 0x44, 0xE4, 0x1A,
+	0x55, 0x15, 0x07, 0xDC, 0x33, 0xCF, 0x4D, 0x27,
+	0x9D, 0xDD, 0x19, 0xF7, 0x81, 0xD5, 0x2A, 0xFA,
+	0x52, 0xC5, 0xA3, 0xF9, 0x6A, 0x78, 0xE8, 0x95,
+	0xE5, 0x00, 0x98, 0x46, 0xD0, 0xA5, 0x55, 0x23,
+	0x0D, 0xED, 0xA3, 0x84, 0x87, 0xAF, 0xB5, 0xBC,
+	0x10, 0x8B, 0x1F, 0x0A, 0x5E, 0x08, 0x5B, 0xC8,
+	0x78, 0xBD, 0xBC, 0xB5, 0x29, 0x56, 0x3C, 0xFB,
+	0x95, 0xC7, 0xFD, 0xDD, 0xB6, 0x2A, 0x66, 0x5A,
+	0x2B, 0x86, 0xA2, 0x74, 0x33, 0x67, 0xA3, 0x48,
+	0xE7, 0xFA, 0xCB, 0x08, 0x6B, 0x9D, 0x85, 0x8E,
+	0x38, 0x14, 0xCB, 0xC2, 0xDA, 0xA7, 0x06, 0x3A,
+	0x23, 0xE6, 0x80, 0x7D, 0x01, 0xA2, 0xA4, 0x1B,
+	0x3C, 0xCF, 0x9C, 0xE8, 0x62, 0x4D, 0xF5, 0x81,
+	0x8C, 0xB9, 0x11, 0x8A, 0x12, 0x07, 0x93, 0xDD,
+	0xB9, 0x40, 0x32, 0xB4, 0x60, 0x6A, 0xC8, 0x76,
+	0x95, 0x54, 0x0A, 0x48, 0xE2, 0xFF, 0x8A, 0x3C,
+	0xA2, 0x17, 0x4A, 0xCF, 0xDF, 0x6A, 0xAF, 0xBE,
+	0x7A, 0x62, 0x7A, 0x3A, 0x60, 0x0B, 0x64, 0x2D,
+	0xF0, 0xF9, 0x9C, 0x0B, 0xB2, 0x1C, 0xFD, 0xB6,
+	0x3F, 0x86, 0x9F, 0x4A, 0xA7, 0xA3, 0x8C, 0xC1,
+	0xAD, 0xF3, 0xFA, 0x86, 0xEF, 0x3F, 0xD7, 0x86,
+	0x05, 0xF0, 0x8D, 0xA6, 0xD1, 0xFE, 0xE0, 0xB4,
+	0x12, 0xC6, 0x35, 0x88, 0xFE, 0x77, 0xDE, 0x4E,
+	0x36, 0x4C, 0x8A, 0x81, 0x62, 0xC0, 0x30, 0x95,
+	0xC9, 0x2E, 0xB5, 0xCD, 0x09, 0x8D, 0x14, 0xDF,
+	0xED, 0x2E, 0x2D, 0xCE, 0x8A, 0x94, 0x7A, 0xC7,
+	0x12, 0x51, 0x8B, 0xEF, 0x45, 0xE9, 0x7A, 0x5E,
+	0x1E, 0x51, 0x73, 0x34, 0x51, 0x2B, 0xCB, 0x45,
+	0x22, 0xE6, 0x6F, 0x62, 0x20, 0xBA, 0xD2, 0x4E,
+	0xDC, 0x1F, 0xEE, 0x25, 0xFD, 0xA5, 0xD8, 0xD6,
+	0x4A, 0x24, 0xEA, 0x5E, 0x36, 0xF5, 0x76, 0x76,
+	0x27, 0x53, 0x99, 0xA1, 0xAF, 0x9E, 0x3C, 0x2A,
+	0x4C, 0xB2, 0x26, 0x8C, 0xC4, 0x1D, 0x38, 0x0C,
+	0x3F, 0xC6, 0x34, 0xA8, 0x5B, 0x96, 0x46, 0x4B,
+	0xE4, 0x17, 0xB8, 0x91, 0xD8, 0x28, 0x43, 0x99,
+	0xD8, 0xB5, 0x1D, 0x87, 0x66, 0x29, 0xC6, 0x8E,
+	0x43, 0x07, 0xAE, 0xBC, 0x05, 0xBF, 0xE2, 0xED,
+	0xDD, 0xCD, 0xDA, 0x65, 0xC9, 0x87, 0x95, 0xB6,
+	0x4D, 0x64, 0x64, 0x23, 0x5D, 0x19, 0x9D, 0x47,
+	0xC0, 0xED, 0x36, 0x03, 0x8C, 0x1E, 0xBA, 0xDE,
+	0xB7, 0x5D, 0xB8, 0x2B, 0x10, 0x35, 0x6F, 0xCD,
+	0x8E, 0xF8, 0xFA, 0xC0, 0x95, 0x34, 0x5C, 0x6A,
+	0x49, 0xDB, 0x30, 0x4C, 0xEB, 0x61, 0x27, 0xF5,
+	0x83, 0x5B, 0xBF, 0x05, 0x1F, 0x56, 0xF0, 0x4B,
+	0x1C, 0x25, 0x29, 0xA2, 0xC5, 0xF2, 0x46, 0xF6,
+	0xE9, 0x04, 0xDB, 0x7D, 0x01, 0xDE, 0xE0, 0x76,
+	0xEC, 0xB0, 0x24, 0x61, 0x41, 0xA4, 0x53, 0x84,
+	0x90, 0x1B, 0x96, 0x72, 0x00, 0x14, 0x26, 0xED,
+	0x20, 0x31, 0x5A, 0x24, 0xC9, 0xB2, 0x2A, 0x75,
+	0xD3, 0x94, 0xC1, 0xFE, 0xCE, 0xC1, 0x57, 0xDE,
+	0x5E, 0xCD, 0xBE, 0xCB, 0x85, 0x4A, 0x6B, 0x85,
+	0x28, 0xC3, 0x7B, 0x12, 0x7F, 0x61, 0xDD, 0x22,
+	0x07, 0x37, 0xFF, 0x70, 0x7A, 0xA1, 0x56, 0xD4,
+	0x5A, 0x3A, 0x59, 0xAB, 0xC3, 0x65, 0x09, 0x0E,
+	0x3C, 0x9C, 0x52, 0x34, 0xB2, 0x5D, 0x89, 0x62,
+	0x89, 0x3E, 0x22, 0x07, 0x56, 0xA2, 0x4D, 0x95,
+	0xE8, 0x78, 0x15, 0x44, 0x6F, 0xA3, 0xB2, 0x2C,
+	0x24, 0xF8, 0xA0, 0x54, 0x9E, 0x73, 0x25, 0x0C,
+	0xB3, 0x2C, 0xFF, 0x2D, 0x9C, 0x2E, 0xE1, 0xD8,
+	0x70, 0xF1, 0xCA, 0xA4, 0xB6, 0x6E, 0xDF, 0xE5,
+	0xB4, 0x0F, 0xF7, 0x00, 0x8E, 0x4F, 0x6F, 0xBA,
+	0x0D, 0x1F, 0x82, 0xF0, 0x7D, 0xC4, 0xED, 0x1E,
+	0xB6, 0x61, 0xE2, 0x3C, 0xBF, 0x5F, 0x88, 0xE1,
+	0x37, 0x5E, 0xE7, 0x7D, 0xE2, 0x13, 0xDF, 0x9A,
+	0x59, 0x6D, 0x85, 0x87, 0x7D, 0xCD, 0x8A, 0x01,
+	0xA1, 0xA7, 0x10, 0x63, 0xB5, 0xA4, 0xC4, 0xE0,
+	0x1A, 0x45, 0x4E, 0x91, 0x07, 0x54, 0x62, 0xD6,
+	0xC2, 0x3F, 0x96, 0x40, 0xF6, 0x8B, 0x12, 0x59,
+	0xEF, 0x20, 0x9C, 0x35, 0x4E, 0x37, 0x1F, 0xAA,
+	0x9C, 0x01, 0xA5, 0x59, 0x85, 0x37, 0x9E, 0x4F,
+	0xDF, 0xFF, 0x40, 0x6E, 0xC2, 0xE6, 0xC6, 0x09,
+	0x70, 0x1C, 0xC2, 0xCD, 0x11, 0x6B, 0x84, 0xC8,
+	0xEE, 0x2B, 0xAE, 0xD5, 0x36, 0xFC, 0x83, 0x30,
+	0xDD, 0x5E, 0x13, 0x6C, 0x49, 0xDB, 0x44, 0xDD,
+	0x39, 0x58, 0xE7, 0x83, 0xD6, 0x1A, 0x5F, 0xE2,
+	0xF7, 0x82, 0xDC, 0x1E, 0x80, 0x44, 0xDB, 0x48,
+	0x62, 0x32, 0x75, 0x3E, 0x6A, 0x98, 0x1A, 0xB2,
+	0x36, 0xBF, 0xDE, 0x35, 0x6B, 0x20, 0x9F, 0x83,
+	0xB5, 0xA2, 0x1C, 0x0B, 0x99, 0x9B, 0x49, 0x43,
+	0xEB, 0x5B, 0x67, 0x03, 0x8A, 0x24, 0x45, 0x8C,
+	0x15, 0xEE, 0xD2, 0xB2, 0x35, 0xEB, 0xAF, 0x69,
+	0x0E, 0x69, 0x3B, 0x4D, 0x80, 0x9B, 0x75, 0x43,
+	0xB4, 0x40, 0x30, 0xCF, 0xD9, 0x76, 0xD4, 0x58,
+	0xAC, 0x2B, 0x10, 0xE3, 0xF3, 0x48, 0x38, 0xAA,
+	0x69, 0x18, 0x51, 0x5C, 0xD7, 0xB0, 0x9E, 0x5B,
+	0x1E, 0x18, 0xD7, 0x59, 0x67, 0x80, 0x4F, 0xCB,
+	0x40, 0x49, 0xB0, 0x27, 0xCD, 0x15, 0xF7, 0x56,
+	0x34, 0x0F, 0x5D, 0xD9, 0xC4, 0xCB, 0xF7, 0x83,
+	0x0D, 0x8B, 0xCF, 0x21, 0x13, 0x1A, 0x49, 0xE6,
+	0x21, 0x49, 0x0F, 0x67, 0xFF, 0xE6, 0xE7, 0xF4,
+	0xD7, 0x2C, 0xDA, 0xFD, 0xBD, 0x86, 0xC2, 0x40,
+	0x6E, 0xB5, 0x05, 0xFC, 0x3E, 0x88, 0xB4, 0xB1,
+	0xC1, 0x5C, 0x6D, 0x0F, 0x0F, 0x17, 0xE6, 0xE0,
+	0x96, 0x4B, 0x45, 0xBD, 0x07, 0x20, 0x00, 0x3F,
+	0xF0, 0xF2, 0xB9, 0xA1, 0x35, 0x01, 0x47, 0x81,
+	0x1F, 0xA2, 0x0A, 0x66, 0xDB, 0xD7, 0x58, 0x51,
+	0x88, 0x78, 0x24, 0x6F, 0x7E, 0x68, 0x46, 0xBD,
+	0xEB, 0x5C, 0xA9, 0xDE, 0x30, 0x34, 0x2B, 0xA3,
+	0xCF, 0x93, 0x82, 0x14, 0x3D, 0x96, 0x1E, 0xD7,
+	0x6E, 0x9A, 0x2E, 0x72, 0xD0, 0x49, 0xDB, 0x24,
+	0xA0, 0x6E, 0x8E, 0xBA, 0x4A, 0x36, 0xCB, 0xF6,
+	0x9A, 0x46, 0x24, 0xEF, 0x18, 0xA8, 0xD9, 0xD5,
+	0x93, 0xF0, 0x2B, 0xEC, 0x60, 0x0A, 0x8F, 0x1C,
+	0xE8, 0x69, 0x56, 0x14, 0x6C, 0x8E, 0x30, 0xFB,
+	0x8D, 0xCF, 0xE7, 0x92, 0x59, 0x2E, 0x32, 0xEB,
+	0xAE, 0xA3, 0x99, 0x87, 0x98, 0x49, 0x03, 0xCD,
+	0x5E, 0xBD, 0xDE, 0xB9, 0xF5, 0xD0, 0xB3, 0xB1,
+	0x65, 0xAC, 0xC7, 0x42, 0xB4, 0xCF, 0x6A, 0x00,
+	0x3E, 0x2E, 0xC1, 0x13, 0xDF, 0x5E, 0x2E, 0xEC,
+	0x30, 0x00, 0xE2, 0xAB, 0xFD, 0x74, 0x06, 0x55,
+	0x88, 0x07, 0xB0, 0xEF, 0x6D, 0x43, 0x81, 0x15,
+	0xFC, 0xF6, 0x96, 0x91, 0x3D, 0x2F, 0xFE, 0xBD,
+	0xB9, 0xC8, 0xB6, 0x81, 0x63, 0xE0, 0xA9, 0x20,
+	0x93, 0xEC, 0x4B, 0x1E, 0xB9, 0xC2, 0xD0, 0x8C,
+	0x2E, 0xCB, 0x18, 0x7D, 0x1F, 0x66, 0xA6, 0x96,
+	0xA9, 0xB8, 0x66, 0x4F, 0xCF, 0xC9, 0xDA, 0x97,
+	0xCA, 0x07, 0xF1, 0xC8, 0xFB, 0x56, 0x60, 0xA9,
+	0x25, 0xDB, 0xFC, 0x2D, 0xB6, 0x0A, 0x42, 0x6A,
+	0x7F, 0xCE, 0x70, 0x91, 0xFF, 0x3B, 0xAC, 0xAB,
+	0xF2, 0x23, 0x4E, 0x50, 0xE9, 0xE6, 0x2F, 0xCB,
+	0x98, 0xBA, 0x7D, 0xD2, 0x8A, 0xDE, 0x6E, 0x80,
+	0x0C, 0xC6, 0xEB, 0xD9, 0x64, 0xD4, 0x59, 0xD5,
+	0x75, 0x00, 0x18, 0x7F, 0xD6, 0x86, 0xC2, 0x25,
+	0x98, 0xA9, 0x28, 0x1C, 0x40, 0x46, 0xC6, 0xA5,
+	0xAF, 0x6E, 0x5D, 0x25, 0x3C, 0x77, 0xF9, 0x43,
+	0xF3, 0x20, 0xFC, 0x43, 0xA0, 0x5E, 0xF1, 0x65,
+	0x5D, 0x8B, 0x33, 0x5A, 0x94, 0xF0, 0x6F, 0xB6,
+	0xD4, 0x4A, 0x48, 0x64, 0x31, 0x73, 0x17, 0x4E,
+	0x88, 0x90, 0xA8, 0xE4, 0x7F, 0xCE, 0xD5, 0x7D,
+	0xE3, 0x84, 0x3F, 0x38, 0x71, 0x4C, 0xB1, 0x18,
+	0xAA, 0x46, 0xF2, 0xCF, 0x99, 0xF0, 0x24, 0xD7,
+	0xFD, 0xFC, 0x2C, 0x81, 0x25, 0xC1, 0x8E, 0x0B,
+	0x82, 0x4C, 0x14, 0x6C, 0x44, 0xB1, 0x78, 0x67,
+	0x14, 0x47, 0xCA, 0x70, 0x0D, 0x13, 0xD1, 0xA8,
+	0x73, 0xBC, 0x4E, 0xAA, 0x1E, 0xB7, 0x59, 0xC0,
+	0xAC, 0xE3, 0x21, 0x2B, 0x55, 0x22, 0x6A, 0x53,
+	0xA6, 0xF0, 0xE9, 0x56, 0x37, 0x3B, 0xD6, 0x1B,
+	0x2E, 0x57, 0x98, 0x4D, 0x6A, 0x7E, 0xEB, 0x2E,
+	0x9B, 0xB8, 0xE2, 0x27, 0x55, 0xE2, 0x2E, 0xFA,
+	0x3C, 0xD2, 0x7A, 0xCC, 0xDB, 0x5C, 0x45, 0x85,
+	0xA6, 0x92, 0x49, 0x79, 0x9D, 0x18, 0x20, 0x50,
+	0x7B, 0xF4, 0x0F, 0x43, 0x2F, 0x7B, 0x3E, 0x90,
+	0xEF, 0xF3, 0x29, 0x66, 0xDF, 0xD1, 0xE9, 0x44,
+	0xC6, 0x28, 0xAA, 0x48, 0x00, 0x5F, 0x12, 0xEB,
+	0xEC, 0x26, 0x7F, 0xB3, 0x83, 0xFB, 0x50, 0x5A,
+	0x5F, 0x5A, 0x8E, 0x08, 0x4B, 0xF7, 0x50, 0x10,
+	0xC8, 0x73, 0x8F, 0x9C, 0xF6, 0xCB, 0xDC, 0xEA,
+	0x78, 0x07, 0x2C, 0x59, 0xAD, 0x66, 0x48, 0xFF,
+	0x56, 0x7D, 0x99, 0xC9, 0xEA, 0x64, 0xE7, 0xD0,
+	0x46, 0x88, 0x58, 0x46, 0x93, 0x37, 0x70, 0xC1,
+	0x91, 0x40, 0x02, 0x46, 0x7F, 0x8D, 0xFE, 0x66,
+	0x07, 0x1F, 0x3B, 0x56, 0x6A, 0x6E, 0x88, 0xB2,
+	0xBB, 0xC0, 0xC8, 0xCD, 0xD9, 0xDC, 0x0A, 0x0C,
+	0x1A, 0x27, 0x35, 0x48, 0x4C, 0x5B, 0x5D, 0x90,
+	0xA0, 0xB2, 0xB4, 0xCE, 0xD6, 0xDD, 0x07, 0x13,
+	0x7C, 0x93, 0x99, 0xA2, 0xA9, 0xAC, 0xC3, 0xC8,
+	0xEF, 0x1D, 0x33, 0x3D, 0x3F, 0x42, 0x52, 0x57,
+	0x6D, 0x72, 0x87, 0x8E, 0x96, 0xA8, 0xC6, 0xC8,
+	0xD0, 0xD6, 0xE8, 0xEB, 0xF2, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x0E, 0x1E, 0x29, 0x3D,
+};
+
+uint8_t mldsa_44_message[] = {
+	0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+	0x74, 0x68, 0x65, 0x20, 0x6D, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x62,
+	0x65, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64,
+	0x2E, 0x0A,
+};
+
+uint8_t mldsa_44_privkey_noseed[] = {
+	0xBA, 0x71, 0xF9, 0xF6, 0x4E, 0x11, 0xBA, 0xEB,
+	0x58, 0xFA, 0x9C, 0x6F, 0xBB, 0x6E, 0x14, 0xE6,
+	0x1F, 0x18, 0x64, 0x3D, 0xAB, 0x49, 0x5B, 0x47,
+	0x53, 0x9A, 0x91, 0x66, 0xCA, 0x01, 0x98, 0x13,
+	0xC5, 0xC1, 0x61, 0x0A, 0x40, 0x77, 0x4F, 0x0E,
+	0xBA, 0x33, 0x34, 0xF8, 0xB5, 0xBE, 0x56, 0xE8,
+	0x78, 0x71, 0xB3, 0xC3, 0xA7, 0x72, 0xC0, 0x72,
+	0x0F, 0xA3, 0x76, 0x66, 0xAE, 0x17, 0x35, 0xFD,
+	0xE6, 0xBC, 0x38, 0xA1, 0xC3, 0x5F, 0x8C, 0xF0,
+	0x8E, 0x44, 0x09, 0x24, 0xC9, 0x03, 0x71, 0x97,
+	0xBB, 0x87, 0xFD, 0xC4, 0x64, 0x6B, 0x86, 0xDA,
+	0x5A, 0x05, 0x89, 0xA3, 0x26, 0xCC, 0x0C, 0x0D,
+	0x95, 0x0F, 0xF8, 0xB5, 0xA9, 0xEA, 0x41, 0x35,
+	0xEA, 0xB8, 0xA9, 0x3F, 0x80, 0xF0, 0x92, 0x7E,
+	0x12, 0x40, 0x46, 0xE2, 0x5B, 0x23, 0x66, 0xAE,
+	0xA2, 0x5A, 0x6D, 0x1D, 0x0F, 0xEF, 0x98, 0x21,
+	0x04, 0xB8, 0x09, 0xDA, 0x12, 0x48, 0xE1, 0x40,
+	0x4C, 0x11, 0x03, 0x85, 0x99, 0xB0, 0x4D, 0x61,
+	0x04, 0x0A, 0xC0, 0x34, 0x28, 0x23, 0x16, 0x80,
+	0x08, 0x12, 0x45, 0x11, 0x49, 0x0C, 0xA0, 0x96,
+	0x0D, 0xC2, 0xA8, 0x01, 0x5A, 0xA8, 0x65, 0x0B,
+	0x30, 0x25, 0xD4, 0x94, 0x44, 0x8B, 0x38, 0x8C,
+	0x10, 0x24, 0x41, 0x22, 0x40, 0x69, 0x8A, 0x04,
+	0x04, 0x0C, 0x26, 0x90, 0xE3, 0x34, 0x69, 0xE2,
+	0x24, 0x68, 0xD2, 0x44, 0x00, 0x0B, 0x84, 0x90,
+	0xD9, 0x42, 0x30, 0x21, 0x91, 0x8D, 0x09, 0x99,
+	0x64, 0x20, 0x39, 0x60, 0x82, 0x36, 0x21, 0x90,
+	0xB8, 0x4C, 0x02, 0x12, 0x6E, 0x24, 0xB9, 0x70,
+	0x84, 0x22, 0x01, 0xE1, 0xA8, 0x64, 0x44, 0x26,
+	0x0E, 0x01, 0x17, 0x0E, 0x82, 0x40, 0x6C, 0x9B,
+	0x38, 0x6D, 0x0A, 0x93, 0x50, 0x52, 0x22, 0x25,
+	0xD2, 0xB8, 0x2C, 0x1A, 0x25, 0x70, 0x90, 0x12,
+	0x22, 0xD1, 0xB2, 0x80, 0x22, 0x46, 0x52, 0x01,
+	0x34, 0x80, 0x40, 0x34, 0x21, 0x41, 0x06, 0x60,
+	0x41, 0x32, 0x82, 0x09, 0x45, 0x90, 0x52, 0x32,
+	0x29, 0x83, 0xB8, 0x44, 0x93, 0x12, 0x21, 0x0A,
+	0xC1, 0x89, 0x60, 0xB2, 0x71, 0x9C, 0x90, 0x69,
+	0x90, 0x82, 0x90, 0x89, 0x12, 0x49, 0x40, 0x40,
+	0x8A, 0x5C, 0x10, 0x48, 0x01, 0x87, 0x91, 0x03,
+	0xB0, 0x40, 0xD8, 0x44, 0x05, 0xE4, 0xB0, 0x29,
+	0x0A, 0x27, 0x90, 0x1C, 0xC9, 0x50, 0x58, 0x02,
+	0x8C, 0x0C, 0x49, 0x72, 0x49, 0x84, 0x6D, 0x19,
+	0xA7, 0x85, 0xE3, 0x00, 0x30, 0xCB, 0xB2, 0x21,
+	0xE2, 0x08, 0x10, 0x4C, 0xA6, 0x64, 0x11, 0x43,
+	0x68, 0x52, 0x94, 0x69, 0x09, 0x39, 0x32, 0x91,
+	0xA2, 0x6D, 0xCA, 0x14, 0x84, 0xA3, 0x92, 0x11,
+	0xDB, 0x94, 0x2C, 0x01, 0xC6, 0x64, 0x14, 0x24,
+	0x8C, 0x1A, 0x15, 0x31, 0x0A, 0x23, 0x0E, 0xD8,
+	0x14, 0x20, 0xA4, 0x26, 0x8D, 0x43, 0x40, 0x90,
+	0xC1, 0x42, 0x86, 0xA4, 0x10, 0x85, 0x0C, 0x32,
+	0x2D, 0xD0, 0x28, 0x60, 0x1B, 0xB5, 0x0C, 0x52,
+	0x44, 0x61, 0x21, 0x15, 0x24, 0x21, 0xC6, 0x04,
+	0xD8, 0x34, 0x31, 0xD9, 0x12, 0x71, 0xA2, 0x34,
+	0x52, 0x03, 0x30, 0x89, 0x54, 0x32, 0x10, 0x83,
+	0x94, 0x08, 0xA2, 0xA4, 0x70, 0xD2, 0x44, 0x8E,
+	0x84, 0x02, 0x8D, 0x91, 0x46, 0x62, 0x0B, 0x00,
+	0x0E, 0xA0, 0x80, 0x70, 0x22, 0xB5, 0x0D, 0x0B,
+	0xC9, 0x01, 0x00, 0x26, 0x4D, 0xE2, 0x44, 0x80,
+	0x93, 0x20, 0x65, 0xC9, 0x96, 0x8D, 0xDA, 0xA4,
+	0x4C, 0x42, 0xA8, 0x00, 0x1A, 0x27, 0x6C, 0xC3,
+	0x94, 0x4D, 0xA0, 0x30, 0x2C, 0xDA, 0xA8, 0x04,
+	0x23, 0xA3, 0x8C, 0x63, 0x04, 0x0E, 0x59, 0xC8,
+	0x00, 0x20, 0xA9, 0x6C, 0xC4, 0x06, 0x50, 0x82,
+	0x00, 0x2E, 0x5C, 0xB2, 0x44, 0x61, 0x46, 0x51,
+	0x0C, 0x18, 0x80, 0x18, 0x38, 0x82, 0x02, 0x25,
+	0x90, 0xA2, 0xB2, 0x60, 0x21, 0xA0, 0x40, 0x20,
+	0x49, 0x2A, 0x52, 0x28, 0x86, 0x93, 0xA6, 0x28,
+	0x9B, 0x94, 0x71, 0x02, 0xB9, 0x6D, 0x49, 0xA0,
+	0x2C, 0x09, 0x25, 0x28, 0x18, 0x93, 0x09, 0x10,
+	0x49, 0x4C, 0x13, 0xC9, 0x91, 0xA3, 0x88, 0x2D,
+	0x50, 0x12, 0x31, 0x63, 0xB4, 0x00, 0xA4, 0x00,
+	0x4E, 0x04, 0xB6, 0x68, 0x12, 0x14, 0x26, 0x00,
+	0x17, 0x00, 0x9B, 0x92, 0x0C, 0x51, 0xA8, 0x65,
+	0x11, 0x44, 0x8D, 0x44, 0x42, 0x69, 0x00, 0xA5,
+	0x6D, 0x04, 0xA9, 0x69, 0x43, 0x94, 0x69, 0x4C,
+	0xB8, 0x60, 0x52, 0x26, 0x2D, 0xA1, 0x32, 0x11,
+	0xCA, 0xB0, 0x11, 0x1B, 0x81, 0x90, 0x12, 0x11,
+	0x64, 0x42, 0x86, 0x89, 0x9C, 0x12, 0x51, 0xDC,
+	0xC0, 0x41, 0x13, 0x47, 0x68, 0x9B, 0x20, 0x92,
+	0xD1, 0x26, 0x91, 0x23, 0x96, 0x50, 0x13, 0xB3,
+	0x4C, 0x12, 0x45, 0x69, 0x21, 0xA1, 0x05, 0x0C,
+	0x46, 0x65, 0x99, 0x38, 0x30, 0x99, 0x26, 0x2E,
+	0x19, 0x15, 0x72, 0x11, 0x39, 0x8D, 0x89, 0x10,
+	0x92, 0x50, 0x28, 0x11, 0x48, 0xA6, 0x49, 0x52,
+	0xB6, 0x2D, 0xC9, 0x30, 0x4D, 0xD9, 0x32, 0x91,
+	0x91, 0xA6, 0x44, 0x14, 0x34, 0x0E, 0x13, 0x39,
+	0x41, 0x98, 0x06, 0x0C, 0x22, 0x25, 0x6C, 0x14,
+	0x47, 0x70, 0x21, 0xB7, 0x60, 0x23, 0x98, 0x25,
+	0xE4, 0x24, 0x6E, 0xD1, 0xB6, 0x44, 0x51, 0x44,
+	0x2C, 0x41, 0x42, 0x85, 0xE0, 0x44, 0x42, 0x89,
+	0x42, 0x42, 0xC2, 0x24, 0x2C, 0xCC, 0xC6, 0x68,
+	0x13, 0x12, 0x69, 0x98, 0x30, 0x49, 0x23, 0x28,
+	0x6A, 0x14, 0xC8, 0x11, 0x60, 0x92, 0x30, 0x11,
+	0x26, 0x52, 0x92, 0xB0, 0x00, 0x5C, 0x84, 0x2C,
+	0x4A, 0x14, 0x29, 0x0A, 0x95, 0x40, 0xE3, 0xC4,
+	0x05, 0x0C, 0xC8, 0x89, 0xA1, 0x26, 0x62, 0x44,
+	0x10, 0x04, 0x9A, 0xC8, 0x70, 0x0C, 0x93, 0x60,
+	0x90, 0xB6, 0x30, 0x12, 0x17, 0x71, 0x23, 0x18,
+	0x4E, 0xD4, 0x10, 0x85, 0x84, 0x20, 0x82, 0x5C,
+	0x14, 0x48, 0x90, 0xB2, 0x51, 0xA0, 0x18, 0x92,
+	0x93, 0x94, 0x80, 0x1A, 0x49, 0x72, 0xC0, 0x02,
+	0x06, 0xE1, 0xA6, 0x8C, 0xA1, 0x80, 0x4D, 0x4A,
+	0x26, 0x08, 0x18, 0x07, 0x62, 0x42, 0x12, 0x40,
+	0x10, 0x41, 0x64, 0x44, 0x42, 0x4E, 0x94, 0x86,
+	0x40, 0x9A, 0x84, 0x41, 0x21, 0xC5, 0x71, 0x01,
+	0x96, 0x29, 0x19, 0x40, 0x4E, 0x94, 0x36, 0x22,
+	0x24, 0xC3, 0x20, 0x22, 0x88, 0x71, 0x84, 0x20,
+	0x4C, 0x64, 0x20, 0x69, 0xDB, 0x84, 0x24, 0x24,
+	0x25, 0x46, 0x21, 0xC4, 0x71, 0x8A, 0x14, 0x64,
+	0x01, 0x20, 0x65, 0x4C, 0x84, 0x24, 0x44, 0x24,
+	0x30, 0x8A, 0x22, 0x70, 0xD3, 0x86, 0x30, 0x0B,
+	0xB4, 0x6C, 0x21, 0x23, 0x0A, 0x8B, 0xB8, 0x4D,
+	0x5C, 0xF7, 0xD7, 0xE6, 0x89, 0x30, 0x2B, 0xED,
+	0xB1, 0xC5, 0x86, 0x7E, 0x7D, 0x26, 0x9B, 0x1C,
+	0xDB, 0x07, 0xF8, 0x25, 0x64, 0x10, 0x82, 0xE1,
+	0x9A, 0x8D, 0xA2, 0xF9, 0x30, 0x77, 0xE8, 0xB1,
+	0xFC, 0x3D, 0x4E, 0x6B, 0x2D, 0x32, 0x58, 0x33,
+	0x6B, 0x4F, 0x9C, 0x64, 0x55, 0x15, 0x3A, 0xC0,
+	0x40, 0xA8, 0x47, 0xFB, 0x64, 0x7F, 0xBB, 0x6B,
+	0x55, 0x2A, 0x40, 0x00, 0x71, 0xFE, 0x17, 0x72,
+	0x48, 0x5B, 0x7A, 0x9D, 0x1F, 0x0D, 0x14, 0x7B,
+	0xF3, 0x38, 0x8C, 0x56, 0x54, 0x71, 0xE4, 0xE6,
+	0x2C, 0xC3, 0xCE, 0x0D, 0x0C, 0x0F, 0xC3, 0x60,
+	0xDF, 0x92, 0x89, 0xED, 0x99, 0x18, 0x37, 0x6B,
+	0x8B, 0x8B, 0x93, 0x14, 0x50, 0x47, 0xF8, 0xFE,
+	0xA2, 0x98, 0x60, 0x07, 0xC2, 0xAA, 0x89, 0x92,
+	0x2F, 0x69, 0xEB, 0x47, 0x5B, 0x59, 0x7B, 0x2B,
+	0xBA, 0x23, 0x7B, 0x9C, 0x84, 0x2E, 0x3F, 0xF1,
+	0xD3, 0x25, 0xE8, 0x2A, 0x1F, 0x23, 0xE9, 0x49,
+	0x89, 0xD0, 0x06, 0xBC, 0x7C, 0xE4, 0x94, 0x6F,
+	0x2E, 0x8B, 0x77, 0xE1, 0x08, 0x48, 0x46, 0x3C,
+	0x47, 0xFE, 0x7B, 0x20, 0x9E, 0x2A, 0x61, 0x7D,
+	0xDD, 0x41, 0x79, 0x6A, 0xE6, 0x14, 0x5E, 0x70,
+	0x9C, 0xDA, 0x94, 0x06, 0xF2, 0x26, 0x12, 0x57,
+	0xC2, 0x13, 0xB4, 0xB3, 0x0D, 0xA3, 0x0A, 0xC2,
+	0x5B, 0x0D, 0x06, 0xCF, 0x79, 0xA8, 0x12, 0xC5,
+	0xFC, 0xB0, 0xEF, 0x11, 0xD9, 0xFE, 0xDF, 0xE0,
+	0x99, 0x4A, 0xFE, 0x3B, 0x69, 0xB0, 0x6A, 0x29,
+	0x16, 0xCF, 0x69, 0x2B, 0x9D, 0xA7, 0x60, 0x28,
+	0xE5, 0xF3, 0xA0, 0x48, 0x79, 0xE6, 0x96, 0xD2,
+	0x1F, 0x73, 0x5C, 0x37, 0x83, 0x15, 0x36, 0x4D,
+	0xB0, 0xA4, 0xE0, 0xAB, 0x6B, 0x53, 0xD3, 0x1E,
+	0xFA, 0xF3, 0x0D, 0x65, 0xE3, 0x7A, 0x1B, 0x6A,
+	0x77, 0x04, 0x6F, 0x04, 0xC6, 0x4B, 0xA1, 0x07,
+	0x2A, 0x97, 0x80, 0xE0, 0xC5, 0x66, 0xC9, 0x43,
+	0x39, 0xA4, 0xD1, 0x9D, 0x00, 0x68, 0xC5, 0x7D,
+	0x6E, 0x6F, 0x0B, 0x51, 0x2D, 0xB7, 0x13, 0x4A,
+	0x95, 0x0E, 0xAF, 0x4F, 0x7B, 0x01, 0xA5, 0xFD,
+	0xD0, 0x65, 0xB9, 0x1B, 0xFA, 0x29, 0xE4, 0x42,
+	0x36, 0x79, 0xCD, 0xE7, 0x4B, 0xC6, 0xA8, 0xF1,
+	0xC8, 0x4C, 0x4D, 0xF7, 0x83, 0x87, 0x23, 0x1D,
+	0xC8, 0x5C, 0xE3, 0x26, 0x70, 0x44, 0x59, 0x03,
+	0xC4, 0xBE, 0xBE, 0xE3, 0xF5, 0x0C, 0x43, 0xE5,
+	0x04, 0x49, 0x49, 0x69, 0x11, 0xAA, 0x93, 0xE7,
+	0xE3, 0x95, 0x78, 0x74, 0x14, 0xD3, 0x17, 0x68,
+	0xD9, 0x91, 0x25, 0x20, 0xF8, 0x3C, 0x02, 0xFF,
+	0x01, 0x12, 0x4D, 0xCF, 0x0E, 0x12, 0x5F, 0xAF,
+	0xD5, 0xB9, 0xD7, 0xE7, 0xDD, 0xA4, 0xF5, 0xB5,
+	0x0C, 0x70, 0xAE, 0xBB, 0x85, 0x99, 0xA2, 0xE4,
+	0x47, 0x6A, 0x0D, 0xE5, 0x31, 0xB0, 0x40, 0x26,
+	0x72, 0xDF, 0x75, 0x75, 0x14, 0x2D, 0x86, 0x01,
+	0x60, 0x5C, 0x94, 0x01, 0x79, 0x23, 0xF6, 0x4A,
+	0xC5, 0x77, 0xC4, 0xBE, 0xD8, 0xD8, 0xE8, 0x9A,
+	0x74, 0xCA, 0x9F, 0x38, 0x19, 0xCB, 0xF1, 0x42,
+	0xA7, 0x2D, 0xEB, 0xE7, 0x7C, 0x4E, 0xFB, 0x71,
+	0x27, 0xE2, 0xD8, 0xC1, 0xB7, 0xBF, 0xB6, 0x42,
+	0x86, 0xC0, 0xBD, 0x52, 0x23, 0x3F, 0x43, 0xC6,
+	0x7D, 0x57, 0x17, 0xF9, 0x7A, 0xD8, 0x28, 0x54,
+	0x87, 0x3D, 0xDC, 0x7F, 0x71, 0xD6, 0x56, 0xAA,
+	0xA6, 0xEF, 0x70, 0x70, 0x60, 0xAF, 0x28, 0x0B,
+	0x9F, 0x45, 0x4B, 0x4F, 0xED, 0xB4, 0x77, 0x6E,
+	0x83, 0xB2, 0xFD, 0xBA, 0x20, 0xA4, 0x5A, 0xEF,
+	0xEB, 0x54, 0x9A, 0x1E, 0xD0, 0x38, 0x20, 0x21,
+	0x89, 0x3C, 0xA9, 0xA6, 0xE7, 0x4C, 0xCC, 0x30,
+	0xA2, 0x55, 0x39, 0x37, 0xCC, 0xEF, 0x34, 0x38,
+	0x99, 0xB5, 0x02, 0xCF, 0x46, 0xDD, 0xB8, 0xDD,
+	0x1D, 0x95, 0xFE, 0xFB, 0x60, 0xC9, 0xB2, 0x04,
+	0x69, 0xA1, 0x50, 0x3B, 0x2A, 0x68, 0x75, 0x87,
+	0x83, 0x0D, 0x33, 0xCE, 0xE9, 0xA7, 0x2D, 0x79,
+	0x8F, 0xCF, 0x4A, 0x9B, 0x45, 0x2C, 0x85, 0x49,
+	0xF5, 0x59, 0xC5, 0xD9, 0xFC, 0x6B, 0xFE, 0x08,
+	0x3F, 0x44, 0x6C, 0x2D, 0x90, 0x39, 0x81, 0xD9,
+	0xF2, 0x64, 0x92, 0x48, 0x3A, 0xB4, 0x52, 0xEA,
+	0x5B, 0xB1, 0x00, 0x8F, 0xFE, 0xAC, 0x97, 0x5D,
+	0xA0, 0x27, 0x59, 0x59, 0x3E, 0x7E, 0x06, 0x63,
+	0x61, 0x07, 0x3A, 0x83, 0xB2, 0x7B, 0x53, 0x1A,
+	0x3D, 0x0D, 0xDA, 0x51, 0x7C, 0xA9, 0x90, 0xEA,
+	0x32, 0x35, 0xD1, 0xD7, 0xB5, 0xE0, 0x9D, 0xA5,
+	0xF0, 0x2D, 0xC1, 0x52, 0x5B, 0x1D, 0xA6, 0x85,
+	0x96, 0x5B, 0x54, 0xFC, 0x2A, 0x3A, 0x73, 0xA1,
+	0x79, 0x0E, 0x0E, 0xFB, 0x69, 0xE7, 0x0A, 0x78,
+	0xFA, 0x55, 0x03, 0x44, 0xEA, 0x8C, 0x75, 0x3D,
+	0xBF, 0x18, 0x63, 0x9B, 0xAA, 0x8C, 0xB1, 0x25,
+	0x9A, 0xA7, 0x4F, 0x68, 0xF9, 0x2A, 0xBA, 0x80,
+	0x07, 0xC6, 0x18, 0xCC, 0xB6, 0xF5, 0x06, 0x9F,
+	0xF4, 0x6B, 0x97, 0x51, 0xBB, 0xFF, 0xF3, 0x7D,
+	0xF3, 0x21, 0x36, 0x0F, 0x0F, 0x5C, 0x0E, 0x7F,
+	0x56, 0x26, 0xDD, 0x12, 0x9A, 0xE3, 0xAE, 0x2A,
+	0x7C, 0x56, 0xCD, 0xB6, 0x11, 0xED, 0xA4, 0xC9,
+	0x8F, 0xEC, 0x83, 0x16, 0x3C, 0xD5, 0x11, 0x68,
+	0x78, 0xC1, 0xA9, 0x3E, 0xBA, 0xA2, 0x6D, 0xB4,
+	0x05, 0xEA, 0xF4, 0xA7, 0xAB, 0xA2, 0x77, 0x83,
+	0x7D, 0xE9, 0xA5, 0x15, 0x04, 0x70, 0x76, 0x24,
+	0xEF, 0x2E, 0x1B, 0xBB, 0xCA, 0x29, 0x24, 0x11,
+	0x16, 0x7F, 0x2E, 0x3D, 0x39, 0x0C, 0x0E, 0x51,
+	0xF8, 0x4A, 0x2F, 0x13, 0x83, 0x90, 0xE3, 0x3F,
+	0x85, 0x83, 0x5D, 0x38, 0xA9, 0x4D, 0xBB, 0xE7,
+	0x1E, 0x6C, 0x82, 0x1E, 0x86, 0xB1, 0x1F, 0xFD,
+	0x89, 0xEF, 0xF4, 0xBF, 0xE2, 0x08, 0xD6, 0x00,
+	0x5D, 0x28, 0xF7, 0x04, 0xBA, 0xEA, 0xD1, 0xF2,
+	0x5D, 0xE0, 0xEB, 0x24, 0x1B, 0x18, 0xFC, 0x7F,
+	0xA0, 0xDD, 0xD9, 0x0D, 0xC1, 0x39, 0xBE, 0x7F,
+	0xCB, 0xEB, 0x97, 0x30, 0xFA, 0xE4, 0xB5, 0xD1,
+	0x72, 0x70, 0xCE, 0x4C, 0x67, 0x0C, 0x42, 0x57,
+	0x0A, 0x9C, 0xF2, 0x5B, 0xC4, 0xFA, 0xE5, 0xCD,
+	0x31, 0xE5, 0xD5, 0x5A, 0xD0, 0x22, 0x6A, 0x94,
+	0xBE, 0x52, 0x94, 0x8C, 0x67, 0x02, 0xA9, 0x86,
+	0xA0, 0xAD, 0xBF, 0xCD, 0x3A, 0xC4, 0x82, 0xBB,
+	0x12, 0xAB, 0xBB, 0x79, 0xA2, 0xF6, 0x60, 0x28,
+	0x42, 0x15, 0x3B, 0x2F, 0x82, 0xA3, 0xB3, 0xCD,
+	0x16, 0x88, 0xE7, 0x4D, 0x36, 0x53, 0x4B, 0xFF,
+	0x8C, 0x48, 0xD3, 0xC4, 0x51, 0xEB, 0x2C, 0x5F,
+	0x98, 0xFE, 0xB9, 0xE7, 0x86, 0x4D, 0x60, 0xAF,
+	0x96, 0xE8, 0x3B, 0x21, 0x62, 0x46, 0x74, 0x82,
+	0xF0, 0x58, 0x63, 0x9C, 0x86, 0xA7, 0x85, 0xA9,
+	0xA1, 0xD4, 0xB6, 0x9B, 0xC3, 0x0E, 0x77, 0xA6,
+	0x4C, 0x3B, 0xBC, 0xD7, 0xDE, 0xB4, 0xE3, 0xD3,
+	0x0F, 0x1A, 0x67, 0x21, 0x20, 0x3D, 0x87, 0xA8,
+	0x8A, 0xB8, 0x5E, 0x02, 0x7A, 0x97, 0x42, 0xFC,
+	0x68, 0x8F, 0x0A, 0xDF, 0x15, 0x72, 0x8E, 0x59,
+	0x7E, 0x91, 0x0C, 0xFE, 0x5D, 0xF3, 0x3C, 0x56,
+	0xA1, 0x36, 0xEF, 0x39, 0xC7, 0xCA, 0x5D, 0x65,
+	0x0C, 0x2B, 0x9F, 0x90, 0x1C, 0x9B, 0x89, 0xE1,
+	0xE0, 0x93, 0x54, 0x93, 0x61, 0xF3, 0x03, 0xBE,
+	0x88, 0x39, 0xD1, 0x45, 0x4C, 0xCE, 0xB5, 0xFB,
+	0xC4, 0x43, 0x5F, 0xA0, 0xDA, 0xB5, 0x8A, 0x8F,
+	0xC2, 0x85, 0x36, 0x0E, 0xEA, 0x49, 0x1C, 0xA0,
+	0x77, 0x96, 0x1C, 0x4A, 0xAA, 0x3E, 0x96, 0xDE,
+	0x99, 0x71, 0xB9, 0x4F, 0xDF, 0xA5, 0x20, 0x7C,
+	0xCF, 0x0D, 0x9D, 0xAB, 0x2C, 0x48, 0x96, 0xF0,
+	0x7E, 0xB6, 0x77, 0x1A, 0x38, 0x3C, 0x65, 0x12,
+	0xF4, 0x1E, 0xA2, 0x8D, 0xEE, 0xE4, 0x07, 0xFD,
+	0xAE, 0x3C, 0x57, 0x4F, 0x5D, 0x41, 0x6A, 0x89,
+	0x7A, 0x27, 0xEF, 0x7C, 0xF5, 0x96, 0xF0, 0x43,
+	0x2D, 0x62, 0x4A, 0x2C, 0x4E, 0xAC, 0xE5, 0x2F,
+	0x3C, 0xBF, 0x2C, 0x63, 0x31, 0xB8, 0x0C, 0x9C,
+	0x91, 0x65, 0xBF, 0x13, 0x34, 0x24, 0x69, 0x32,
+	0x02, 0x4E, 0xC0, 0xBE, 0x44, 0xB3, 0x21, 0x36,
+	0xB4, 0xE4, 0x34, 0x27, 0x91, 0x35, 0x85, 0x03,
+	0x64, 0xC7, 0x57, 0xF1, 0xDC, 0xFA, 0x63, 0x85,
+	0xE2, 0x56, 0x33, 0x12, 0xC5, 0xF5, 0x53, 0xF0,
+	0xC8, 0x44, 0xEA, 0xBB, 0x79, 0x11, 0xCE, 0xE7,
+	0x60, 0xCA, 0xEB, 0x3E, 0x19, 0x3B, 0xF3, 0xA9,
+	0xC3, 0x81, 0x14, 0x87, 0x23, 0x9A, 0xD2, 0xE0,
+	0x14, 0x78, 0xF4, 0x6E, 0x41, 0x8A, 0x5D, 0xE5,
+	0x6B, 0x7F, 0x17, 0x55, 0xBA, 0x68, 0xF9, 0xA3,
+	0x74, 0x61, 0x3B, 0x5D, 0xE2, 0xED, 0x26, 0xC5,
+	0x80, 0xC7, 0x72, 0xDB, 0xDB, 0xFA, 0xB1, 0xF7,
+	0xE3, 0xF5, 0x7D, 0x94, 0xF8, 0x4E, 0x30, 0xDE,
+	0xB2, 0x9D, 0x70, 0xA9, 0x1D, 0xF2, 0x88, 0xFC,
+	0x43, 0xA2, 0x76, 0xDF, 0xED, 0x58, 0xE2, 0xB0,
+	0xDB, 0x53, 0x83, 0xE5, 0x32, 0xB6, 0xEE, 0xDF,
+	0xB3, 0x92, 0xE4, 0x3D, 0xC3, 0xDA, 0x72, 0x01,
+	0xA0, 0x68, 0xF5, 0x23, 0x1E, 0xE5, 0x22, 0x09,
+	0x8D, 0x68, 0x59, 0xB2, 0xD5, 0x64, 0x63, 0xA8,
+	0x91, 0x7B, 0x3C, 0x25, 0x61, 0x65, 0x79, 0x66,
+	0xDB, 0xC4, 0x78, 0x56, 0xB6, 0xFF, 0xC8, 0x2B,
+	0xCC, 0x37, 0x9F, 0xFD, 0x08, 0xB2, 0x59, 0xF3,
+	0xD9, 0xD7, 0x87, 0x3B, 0xA8, 0xFC, 0xBE, 0x4C,
+	0x94, 0x13, 0xB6, 0x01, 0x15, 0x91, 0x60, 0x70,
+	0x1D, 0xF0, 0x04, 0x70, 0xB1, 0x49, 0xBD, 0xF3,
+	0x2F, 0x4D, 0x3C, 0xFC, 0xFB, 0x9D, 0xEB, 0xC7,
+	0x72, 0x41, 0x71, 0x7D, 0x13, 0x06, 0x7A, 0xAE,
+	0xD2, 0x3C, 0x7A, 0x26, 0x51, 0x18, 0x51, 0x69,
+	0xF1, 0x26, 0x70, 0x61, 0xFB, 0x6B, 0x30, 0xE4,
+	0xFE, 0xA7, 0x3F, 0x66, 0xF4, 0xF9, 0x27, 0x56,
+	0xAC, 0x26, 0x23, 0x41, 0x8A, 0xF8, 0xB2, 0xA3,
+	0x98, 0x71, 0x1B, 0x7C, 0x68, 0x07, 0xB4, 0x34,
+	0x25, 0xE1, 0xD9, 0x9B, 0xFD, 0xCD, 0x5D, 0xF5,
+	0x31, 0x95, 0x28, 0x79, 0x06, 0xA3, 0x32, 0xF5,
+	0x99, 0x71, 0xA0, 0xC3, 0x43, 0x97, 0x5F, 0xC3,
+	0x20, 0xAD, 0x13, 0x7C, 0x9E, 0x34, 0xCE, 0x7C,
+	0xE8, 0x55, 0x20, 0xB2, 0x6C, 0xA1, 0x97, 0xA1,
+	0xFA, 0x2D, 0xF2, 0xEC, 0xD4, 0xE3, 0xFA, 0x83,
+	0x3B, 0x3B, 0xD2, 0xC2, 0x44, 0x82, 0x80, 0x42,
+	0x52, 0xCF, 0x1D, 0xF6, 0xAD, 0xC6, 0x39, 0x8F,
+	0x35, 0xE9, 0x8A, 0xB1, 0x87, 0x10, 0x40, 0x76,
+	0x80, 0xC9, 0xC1, 0xDB, 0xAC, 0x8C, 0x7E, 0xDC,
+	0x86, 0x46, 0xB9, 0x70, 0x82, 0xE2, 0xE1, 0x21,
+	0xFA, 0xA7, 0xFA, 0xC2, 0x1E, 0x4A, 0x33, 0x83,
+	0x84, 0xCB, 0x92, 0x20, 0x2C, 0x61, 0xBD, 0x12,
+	0x6C, 0x5D, 0xDD, 0x45, 0x8B, 0x32, 0x7A, 0x18,
+	0xBD, 0x71, 0x6F, 0x14, 0x2C, 0xA5, 0xCD, 0xB3,
+	0xE4, 0x9D, 0x7E, 0xB8, 0xD9, 0x62, 0xB5, 0xB8,
+	0x5A, 0x88, 0xF7, 0x99, 0xB6, 0x9A, 0x6A, 0x66,
+	0xC7, 0xBD, 0x62, 0x9F, 0x56, 0xB4, 0x3C, 0x02,
+	0x90, 0x62, 0x9B, 0x5E, 0x27, 0x4C, 0xDE, 0xC7,
+	0xA0, 0x72, 0x29, 0xE7, 0x93, 0x9A, 0x77, 0xD3,
+	0x2E, 0x8E, 0xF7, 0x30, 0xFC, 0xCE, 0xAD, 0x9C,
+	0x4E, 0x06, 0x77, 0xA8, 0x3A, 0x03, 0x30, 0xAB,
+	0x76, 0x5D, 0x33, 0x6D, 0xD2, 0xAA, 0x15, 0x5D,
+	0xCD, 0x2A, 0xC7, 0xF3, 0x15, 0x29, 0x77, 0x4F,
+	0x49, 0x36, 0xB0, 0x5D, 0x0B, 0x14, 0xB4, 0x8F,
+	0xAA, 0x1E, 0x8C, 0xD4, 0x50, 0x56, 0xE5, 0x6C,
+	0x13, 0x9B, 0x17, 0xF8, 0x90, 0x71, 0x5A, 0xD6,
+	0x3D, 0x6C, 0x4A, 0x9F, 0x2D, 0x97, 0x6C, 0x8B,
+	0x63, 0x5B, 0xDF, 0xE5, 0x86, 0x02, 0x81, 0x6F,
+	0x61, 0x2C, 0x6E, 0x4B, 0x22, 0x53, 0x67, 0xCB,
+	0x9A, 0x7B, 0xB7, 0x9C, 0x01, 0x8F, 0x1B, 0x8C,
+	0x53, 0x15, 0x18, 0x0A, 0xAD, 0xBE, 0x3A, 0xB7,
+	0x5A, 0xC3, 0x56, 0x20, 0x6F, 0xE2, 0x7C, 0x12,
+	0xDF, 0x3B, 0x56, 0x97, 0x84, 0xE3, 0xA5, 0x38,
+	0xFB, 0x05, 0x24, 0x18, 0x26, 0x6E, 0x72, 0xDB,
+	0x40, 0x0D, 0x6F, 0x32, 0xC4, 0x29, 0x7F, 0x34,
+	0xF9, 0xF1, 0xAF, 0x18, 0x6C, 0x37, 0x65, 0x65,
+	0x5F, 0x11, 0xB3, 0xE5, 0xA3, 0xC8, 0x04, 0x9B,
+	0x7D, 0xF1, 0x40, 0x11, 0xFF, 0x21, 0x5F, 0xBF,
+	0x17, 0xBF, 0x89, 0xEE, 0x97, 0x6C, 0xF0, 0xDB,
+	0xAB, 0x62, 0x70, 0x10, 0x4E, 0x7E, 0x31, 0x9D,
+	0x1F, 0x64, 0xC5, 0x9E, 0x20, 0x9E, 0x35, 0x82,
+};
+
+uint8_t mldsa_44_pubkey_noseed[] = {
+	0xBA, 0x71, 0xF9, 0xF6, 0x4E, 0x11, 0xBA, 0xEB,
+	0x58, 0xFA, 0x9C, 0x6F, 0xBB, 0x6E, 0x14, 0xE6,
+	0x1F, 0x18, 0x64, 0x3D, 0xAB, 0x49, 0x5B, 0x47,
+	0x53, 0x9A, 0x91, 0x66, 0xCA, 0x01, 0x98, 0x13,
+	0x1C, 0x44, 0xF8, 0x26, 0xBB, 0xD5, 0x6E, 0x34,
+	0xE5, 0x5D, 0xB5, 0xE5, 0xE2, 0xD7, 0x33, 0x48,
+	0x5E, 0x39, 0xEA, 0x26, 0x0F, 0xC6, 0x00, 0x0C,
+	0x5E, 0xA4, 0xBA, 0x80, 0xD3, 0x45, 0x5C, 0xDE,
+	0x53, 0xB4, 0x6F, 0x34, 0x48, 0x2A, 0xED, 0xFD,
+	0x54, 0x50, 0xFC, 0x2E, 0x1B, 0xA4, 0xF2, 0x5D,
+	0x15, 0xF9, 0xC1, 0x44, 0x24, 0x2F, 0xB3, 0x9B,
+	0xB5, 0x22, 0x87, 0x18, 0x90, 0x30, 0xC5, 0x04,
+	0x98, 0xE1, 0x71, 0x7B, 0x7C, 0x75, 0x8B, 0x19,
+	0x0A, 0x67, 0x48, 0xEA, 0x9A, 0xA3, 0xF7, 0xAC,
+	0xAA, 0xF2, 0xC7, 0xCB, 0x52, 0x6E, 0xD7, 0x17,
+	0xC9, 0xF7, 0x9A, 0xEB, 0x84, 0x21, 0x4F, 0xA5,
+	0xCD, 0x8D, 0xED, 0x92, 0xA0, 0xC3, 0xFA, 0x15,
+	0x58, 0x81, 0x0F, 0x12, 0xC7, 0x05, 0x0A, 0x36,
+	0x77, 0x08, 0xD1, 0x96, 0xCD, 0x24, 0xE5, 0xAF,
+	0x97, 0x49, 0x04, 0xAE, 0xD8, 0xE4, 0xCE, 0x88,
+	0x72, 0xE8, 0x69, 0x6B, 0x0B, 0x7B, 0xCA, 0x50,
+	0xE4, 0x52, 0xCD, 0x7D, 0x30, 0xEA, 0x9A, 0x4A,
+	0xDA, 0xC0, 0x31, 0x1D, 0x67, 0x2C, 0x6B, 0xDE,
+	0x84, 0x96, 0x24, 0x0B, 0x07, 0x43, 0x14, 0x63,
+	0x70, 0x88, 0x95, 0xCD, 0x9B, 0xAF, 0xC3, 0x16,
+	0x32, 0xD7, 0x39, 0x76, 0x49, 0x38, 0x8F, 0xDA,
+	0xFC, 0xBF, 0x7D, 0x30, 0x5A, 0x3D, 0xE9, 0xA4,
+	0x95, 0xEC, 0xA7, 0x43, 0x3A, 0x8F, 0x83, 0xBA,
+	0x0F, 0x0B, 0x25, 0xC4, 0x13, 0xC6, 0xE3, 0x9C,
+	0x96, 0xEB, 0x7D, 0x69, 0x1B, 0x34, 0xD3, 0x7C,
+	0xE3, 0x7F, 0x1E, 0xEA, 0xD1, 0xCF, 0x21, 0x7E,
+	0x25, 0xEF, 0x34, 0xEE, 0xCF, 0x3F, 0x7C, 0x60,
+	0xF8, 0x4B, 0x8E, 0xDF, 0xDD, 0xE8, 0x40, 0x5D,
+	0x4F, 0x83, 0x25, 0x76, 0xC6, 0x1E, 0xF9, 0x8E,
+	0x0A, 0x2F, 0x28, 0xDA, 0x18, 0x77, 0x00, 0x95,
+	0x39, 0x24, 0xF6, 0x86, 0xB9, 0x46, 0x14, 0x70,
+	0x5B, 0xCF, 0x53, 0xD3, 0x3F, 0xED, 0xD4, 0x34,
+	0x8E, 0xDD, 0xDB, 0xDF, 0x28, 0xB5, 0x06, 0x5E,
+	0x1F, 0x20, 0x77, 0x50, 0x43, 0xE8, 0x5C, 0xF9,
+	0x31, 0xF8, 0x29, 0x17, 0x93, 0x63, 0xA1, 0xA7,
+	0xE7, 0x40, 0x4A, 0x83, 0x8E, 0xC0, 0x00, 0x86,
+	0xB0, 0x97, 0x63, 0x86, 0xFE, 0x63, 0x7C, 0x98,
+	0x24, 0x47, 0x57, 0xE3, 0xF7, 0x69, 0xDD, 0xD4,
+	0x46, 0x74, 0x71, 0xBF, 0xAD, 0x67, 0x0F, 0x9A,
+	0x05, 0xF8, 0x24, 0x6E, 0xE5, 0x0A, 0x7B, 0x1E,
+	0xAF, 0x87, 0xFC, 0x40, 0x69, 0xC3, 0xAE, 0x2A,
+	0xA2, 0x03, 0x32, 0x58, 0x11, 0x77, 0x92, 0xF0,
+	0xBC, 0xD4, 0x9E, 0x08, 0x3F, 0xD1, 0xBC, 0x74,
+	0x96, 0xAB, 0xFF, 0x29, 0xCC, 0x94, 0xE4, 0x86,
+	0x8B, 0x21, 0x21, 0x4E, 0xD3, 0x16, 0x52, 0x53,
+	0x99, 0xA6, 0x10, 0xFB, 0xDD, 0x4A, 0x80, 0xE7,
+	0xC8, 0x07, 0x15, 0xF2, 0x95, 0x78, 0xE2, 0xA8,
+	0x4B, 0xB4, 0x0B, 0xDD, 0xDB, 0xD9, 0xF4, 0x7A,
+	0x11, 0xB6, 0xE7, 0xDA, 0x11, 0x8A, 0x1B, 0x65,
+	0x8D, 0x35, 0x9E, 0x8A, 0xEF, 0x55, 0xEB, 0x46,
+	0xB5, 0x37, 0x6B, 0x5B, 0x65, 0x59, 0x79, 0x98,
+	0x4A, 0x92, 0x2B, 0xEE, 0xBF, 0xC5, 0x9B, 0xCD,
+	0x60, 0x0D, 0x53, 0x09, 0xDC, 0xCD, 0x72, 0xDB,
+	0xF0, 0x78, 0x7D, 0xB8, 0xBA, 0x75, 0x7B, 0x53,
+	0x7C, 0x1E, 0xAF, 0xD5, 0xC0, 0xF5, 0x0E, 0xA4,
+	0xBC, 0x95, 0x83, 0x54, 0x9E, 0x28, 0x29, 0xA4,
+	0x2C, 0x28, 0xCA, 0xC2, 0x48, 0xC9, 0x6D, 0x78,
+	0x12, 0x4C, 0x47, 0x15, 0x9B, 0x18, 0xAE, 0xDD,
+	0x75, 0x4A, 0xBA, 0x17, 0xB1, 0x9D, 0x43, 0x0F,
+	0xB7, 0x8F, 0x63, 0x3E, 0xA9, 0xD2, 0x6F, 0x54,
+	0xA9, 0xBD, 0x50, 0xF8, 0xD8, 0xF6, 0xB7, 0x35,
+	0x94, 0xF8, 0x28, 0x97, 0x6E, 0x7E, 0xA0, 0x9C,
+	0x53, 0xBB, 0xB9, 0xF1, 0x1A, 0x56, 0xC9, 0x50,
+	0x7F, 0xB8, 0x9B, 0x9A, 0x5E, 0xBC, 0x03, 0x7A,
+	0x37, 0x26, 0x7A, 0x95, 0xF8, 0x5B, 0x8D, 0x64,
+	0xCA, 0x97, 0x19, 0x2B, 0x10, 0xA6, 0x6F, 0x41,
+	0x7B, 0x3F, 0x61, 0xFE, 0x9C, 0xA5, 0x71, 0x30,
+	0xA4, 0x8F, 0xD9, 0x25, 0xEA, 0xE2, 0xAB, 0x55,
+	0x02, 0xD5, 0x71, 0xC8, 0xA5, 0x19, 0x03, 0xC1,
+	0xD3, 0x98, 0xF4, 0xC1, 0xF7, 0x6A, 0x7E, 0x11,
+	0x74, 0x39, 0x76, 0xAF, 0xDB, 0xC6, 0x97, 0xF2,
+	0x30, 0x94, 0xA3, 0xCD, 0x76, 0x1F, 0xF9, 0x68,
+	0x5D, 0xE3, 0x2E, 0x09, 0xFB, 0x3C, 0x28, 0xAD,
+	0xD4, 0x53, 0x49, 0x03, 0x00, 0xBC, 0x7C, 0x89,
+	0xDC, 0x01, 0x78, 0x00, 0x96, 0x07, 0x17, 0x22,
+	0x94, 0x57, 0x75, 0xF2, 0x64, 0xE1, 0xB0, 0x62,
+	0x3B, 0xCF, 0x46, 0x19, 0xC7, 0x12, 0xC8, 0x38,
+	0x76, 0x12, 0x05, 0xD8, 0x76, 0x91, 0xB7, 0x5E,
+	0xF3, 0x60, 0x19, 0x6C, 0xBB, 0x9E, 0x9B, 0x92,
+	0xA0, 0xD4, 0xC4, 0xED, 0x62, 0x32, 0x6E, 0x50,
+	0x24, 0xD7, 0x75, 0x10, 0xB8, 0xEE, 0x2C, 0x74,
+	0x26, 0xCC, 0x22, 0xEA, 0xE2, 0x09, 0xDC, 0x9F,
+	0x13, 0xBD, 0xE6, 0xBF, 0x08, 0xF5, 0xE7, 0x18,
+	0x1B, 0xD3, 0xB4, 0x59, 0x45, 0x0B, 0x45, 0x1A,
+	0x51, 0x53, 0x9A, 0x71, 0x5C, 0x21, 0xD6, 0x7D,
+	0xD3, 0x30, 0xEB, 0x59, 0x70, 0xDB, 0x00, 0xD9,
+	0xED, 0xBF, 0xB2, 0x82, 0x2B, 0x03, 0x6F, 0xA1,
+	0x3B, 0xAF, 0xEB, 0x86, 0xD8, 0xDC, 0x78, 0x86,
+	0x6E, 0x3F, 0x8D, 0x43, 0xE5, 0x3D, 0x78, 0xCC,
+	0xA5, 0x59, 0x5A, 0x6F, 0xAF, 0x88, 0x6B, 0x5D,
+	0xC1, 0x12, 0xF1, 0xCF, 0x4A, 0xDC, 0xFA, 0x87,
+	0x58, 0x00, 0xD9, 0x0B, 0x48, 0x88, 0x3A, 0xF9,
+	0x73, 0x16, 0xFE, 0x15, 0x06, 0x87, 0x3F, 0xC1,
+	0x57, 0xE5, 0x70, 0xEA, 0xCB, 0xFD, 0x22, 0x28,
+	0x68, 0xD1, 0x42, 0x34, 0x10, 0x19, 0x66, 0xAF,
+	0xB6, 0xBF, 0x99, 0x40, 0x82, 0x92, 0x53, 0xA9,
+	0x53, 0xAD, 0xA8, 0x9F, 0xC7, 0x56, 0xB6, 0xA8,
+	0x49, 0xF7, 0x0A, 0xCB, 0x98, 0x38, 0xE6, 0x9F,
+	0xAA, 0x50, 0xBB, 0xA7, 0x5E, 0x3E, 0x89, 0xC2,
+	0xAD, 0xB5, 0x7E, 0x86, 0xD0, 0x88, 0xAB, 0x9B,
+	0x04, 0xA2, 0x8E, 0x67, 0x07, 0x09, 0x17, 0x22,
+	0x43, 0xEC, 0x5E, 0x00, 0x08, 0xA5, 0xCE, 0xAF,
+	0x3F, 0x87, 0x22, 0xF4, 0x87, 0x30, 0x25, 0x96,
+	0xFF, 0xD7, 0x55, 0xAD, 0x1B, 0x82, 0xA4, 0x9C,
+	0x34, 0xB3, 0x46, 0x95, 0x15, 0xB4, 0x6A, 0xA2,
+	0x90, 0xCD, 0x86, 0xEE, 0x38, 0xEA, 0x7A, 0x9B,
+	0xE3, 0xF1, 0x03, 0x61, 0x03, 0x35, 0xB5, 0x31,
+	0xCC, 0xA3, 0x33, 0xDD, 0xFE, 0x32, 0xB1, 0x45,
+	0x10, 0xF4, 0xB0, 0x7E, 0xF9, 0x5F, 0xC6, 0x68,
+	0x4E, 0x8C, 0x45, 0x4A, 0x92, 0xC1, 0x0D, 0xBB,
+	0x5D, 0x59, 0xC7, 0xA7, 0xC6, 0x3F, 0xB3, 0x05,
+	0xFE, 0x88, 0x19, 0x67, 0xD9, 0x9E, 0x66, 0x9E,
+	0xB6, 0x32, 0x84, 0x05, 0x82, 0x56, 0x0B, 0xB4,
+	0x03, 0x43, 0x1D, 0x40, 0xF7, 0x5A, 0x49, 0x54,
+	0x90, 0x84, 0x82, 0x27, 0x82, 0x92, 0x82, 0x1F,
+	0x4E, 0xA9, 0x1E, 0x42, 0xE7, 0x8F, 0xA4, 0x8C,
+	0xAE, 0xE3, 0xC8, 0x36, 0x14, 0x6D, 0xCF, 0xD7,
+	0x38, 0xD1, 0x17, 0xE9, 0x2E, 0x9A, 0x15, 0x13,
+	0x7D, 0x28, 0xE8, 0xE6, 0xA4, 0xB4, 0x62, 0x26,
+	0x50, 0xCB, 0x41, 0x35, 0x04, 0xCB, 0x3A, 0x33,
+	0x5D, 0x44, 0xBE, 0xEC, 0x57, 0x46, 0xC1, 0xC2,
+	0x94, 0xB1, 0xE8, 0xCB, 0x99, 0xCB, 0x60, 0x8D,
+	0x92, 0x8F, 0x8C, 0xE3, 0x56, 0x36, 0x32, 0xC5,
+	0x21, 0xF2, 0x3D, 0x13, 0xC6, 0x1A, 0x8F, 0x61,
+	0xC0, 0x1D, 0xF8, 0xC9, 0x6C, 0x73, 0x60, 0xDB,
+	0x4F, 0x3C, 0x68, 0xAA, 0x5D, 0x2F, 0xDD, 0x34,
+	0x2A, 0x62, 0xFF, 0x34, 0x59, 0xC1, 0x16, 0x38,
+	0x94, 0x21, 0xAB, 0x43, 0xE8, 0x58, 0x4C, 0x45,
+	0x88, 0x2B, 0x50, 0xE6, 0xE4, 0xE9, 0x6D, 0xB6,
+	0xF0, 0xB8, 0xFD, 0xE8, 0x90, 0xD5, 0xDB, 0xFA,
+	0xDC, 0xD8, 0x86, 0x90, 0xB4, 0x49, 0xE6, 0x42,
+	0x40, 0xDD, 0xB2, 0x02, 0x37, 0x47, 0xF3, 0x08,
+	0x36, 0x3E, 0x30, 0x1A, 0xA7, 0x77, 0x57, 0x16,
+	0x9F, 0xC6, 0x15, 0x06, 0x28, 0xD5, 0x92, 0x0B,
+	0x5A, 0xA1, 0xAB, 0x1C, 0x8C, 0xBF, 0x44, 0xCB,
+	0x00, 0xE0, 0x25, 0xD7, 0x87, 0x9D, 0x72, 0xB4,
+	0x79, 0xE3, 0xAF, 0x53, 0x11, 0xC7, 0x85, 0x72,
+	0x55, 0x90, 0xDA, 0x9C, 0x89, 0xB9, 0xFC, 0x3B,
+	0x84, 0x50, 0x76, 0x95, 0x54, 0xEB, 0x44, 0xD2,
+	0x03, 0xEB, 0xA2, 0xBB, 0xAE, 0xF9, 0xCA, 0xD2,
+	0x23, 0x70, 0x11, 0xC2, 0xEA, 0x44, 0xEF, 0xF0,
+	0x0F, 0x29, 0x9A, 0x48, 0xFF, 0xE2, 0x8C, 0xA9,
+	0x3D, 0xDF, 0x85, 0xF7, 0x66, 0x08, 0x24, 0x2E,
+	0xF8, 0xD6, 0xCC, 0x24, 0x61, 0x0A, 0x1E, 0x20,
+	0x78, 0xFC, 0xAC, 0x4F, 0x93, 0x85, 0xC3, 0x14,
+	0x90, 0x5E, 0xCA, 0xA8, 0x2E, 0x55, 0x39, 0x16,
+	0xD9, 0x4D, 0x1A, 0x7C, 0x1E, 0xC6, 0x52, 0xAA,
+	0x08, 0x89, 0x70, 0x83, 0xDA, 0xA2, 0xEB, 0xB1,
+	0x77, 0x5F, 0xBC, 0x47, 0x1A, 0xE2, 0x77, 0x77,
+	0xD7, 0x90, 0x4E, 0xA9, 0xF1, 0xB9, 0x2B, 0xCA,
+	0xC3, 0xD8, 0xA3, 0x15, 0x84, 0x26, 0x08, 0x7B,
+	0x64, 0x5B, 0x11, 0x08, 0xF0, 0xD6, 0x5F, 0xEC,
+	0x93, 0x78, 0x9C, 0x05, 0x37, 0x43, 0xCA, 0x14,
+	0xFD, 0x63, 0xD0, 0x5E, 0x98, 0xB6, 0x52, 0xDF,
+	0x2B, 0x9C, 0x2F, 0xF9, 0xCE, 0x05, 0xF1, 0x94,
+	0x07, 0x03, 0xFF, 0xB2, 0x73, 0xF8, 0x0E, 0x0E,
+	0x27, 0x32, 0xEC, 0xA9, 0x96, 0x0D, 0x98, 0x1B,
+	0x4C, 0xFD, 0x3B, 0x7B, 0xB8, 0x04, 0x5B, 0x3C,
+	0x38, 0x30, 0x54, 0x6B, 0x9D, 0xD8, 0xDB, 0x0D,
+};
+
+uint8_t mldsa_44_extmu[] = {
+	0x1B, 0x2A, 0xA5, 0xD5, 0xE3, 0xF3, 0xC1, 0xD4,
+	0x8D, 0x7C, 0xE6, 0x8F, 0xE9, 0xE3, 0xD1, 0xF5,
+	0x2E, 0x4B, 0x7C, 0xD6, 0x2A, 0xF4, 0x2E, 0xE5,
+	0x8F, 0xC3, 0xB1, 0xA4, 0xB9, 0xD1, 0x2C, 0x8B,
+	0x9E, 0x4D, 0x7A, 0xA9, 0x7C, 0xD3, 0xE6, 0x5A,
+	0xF4, 0x1B, 0x2A, 0xA5, 0xD5, 0xE3, 0xF3, 0xC1,
+	0xD4, 0x8D, 0x7C, 0xE6, 0x8F, 0xE9, 0xE3, 0xD1,
+	0xF5, 0x2E, 0x4B, 0x7C, 0xD6, 0x2A, 0xF4, 0x2E,
+};
+
 struct
 cperf_rsa_test_data rsa_qt_perf_data[4] = {
 	{
@@ -4292,6 +5910,49 @@ struct cperf_mlkem_test_data  mlkem_decap_perf_data[] = {
 	}
 };
 
+struct cperf_mldsa_test_data mldsa_sign_perf_data[] = {
+	{
+		.name = "mldsa_44_sign (deterministic)",
+		.type = RTE_CRYPTO_ML_DSA_44,
+		.privkey = {
+			.data = mldsa_44_privkey_noseed,
+			.length = sizeof(mldsa_44_privkey_noseed),
+		},
+		.pubkey = {
+			.data = mldsa_44_pubkey_noseed,
+			.length = sizeof(mldsa_44_pubkey_noseed),
+		},
+		.message = {
+			.data = mldsa_44_message,
+			.length = sizeof(mldsa_44_message),
+		},
+		.sign = {
+			.data = mldsa_44_sign_dtrm,
+			.length = sizeof(mldsa_44_sign_dtrm),
+		},
+		.sign_deterministic = true,
+	},
+};
+
+struct cperf_mldsa_test_data mldsa_verify_perf_data[] = {
+	{
+		.name = "mldsa_44_verify",
+		.type = RTE_CRYPTO_ML_DSA_44,
+		.pubkey = {
+			.data = mldsa_44_pubkey_noseed,
+			.length = sizeof(mldsa_44_pubkey_noseed),
+		},
+		.message = {
+			.data = mldsa_44_message,
+			.length = sizeof(mldsa_44_message),
+		},
+		.sign = {
+			.data = mldsa_44_sign_dtrm,
+			.length = sizeof(mldsa_44_sign_dtrm),
+		},
+	},
+};
+
 struct cperf_test_vector*
 cperf_test_vector_get_dummy(struct cperf_options *options)
 {
diff --git a/app/test-crypto-perf/cperf_test_vectors.h b/app/test-crypto-perf/cperf_test_vectors.h
index e498196ae3..6b4b4f22b4 100644
--- a/app/test-crypto-perf/cperf_test_vectors.h
+++ b/app/test-crypto-perf/cperf_test_vectors.h
@@ -188,6 +188,41 @@ struct cperf_sm2_test_data {
 	int curve;
 };
 
+struct cperf_mldsa_test_data {
+	const char *name;
+	enum rte_crypto_ml_dsa_type type;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} privkey;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} pubkey;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} message;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} sign;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} ctx;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} seed;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} mu;
+	enum rte_crypto_auth_algorithm hash;
+	bool sign_deterministic;
+};
+
 struct cperf_test_vector*
 cperf_test_vector_get_dummy(struct cperf_options *options);
 
@@ -215,5 +250,7 @@ extern struct cperf_rsa_test_data rsa_qt_perf_data[4];
 extern struct cperf_rsa_plaintext rsa_plaintext;
 extern struct cperf_mlkem_test_data mlkem_encap_perf_data[];
 extern struct cperf_mlkem_test_data mlkem_decap_perf_data[];
+extern struct cperf_mldsa_test_data mldsa_sign_perf_data[];
+extern struct cperf_mldsa_test_data mldsa_verify_perf_data[];
 
 #endif
diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
index 2e228201ab..c4d844d225 100644
--- a/app/test-crypto-perf/main.c
+++ b/app/test-crypto-perf/main.c
@@ -55,6 +55,7 @@ const char *cperf_op_type_strs[] = {
 	[CPERF_ASYM_SM2] = "sm2",
 	[CPERF_TLS] = "tls-record",
 	[CPERF_ASYM_MLKEM512] = "mlkem_512",
+	[CPERF_ASYM_MLDSA44] = "mldsa_44",
 };
 
 const char *cperf_rsa_priv_keytype_strs[] = {
@@ -247,6 +248,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs)
 		case CPERF_ASYM_SM2:
 		case CPERF_ASYM_RSA:
 		case CPERF_ASYM_MLKEM512:
+		case CPERF_ASYM_MLDSA44:
 		case CPERF_ASYM_MODEX:
 			conf.ff_disable |= (RTE_CRYPTODEV_FF_SECURITY |
 					    RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO);
@@ -516,6 +518,21 @@ cperf_verify_devices_capabilities(struct cperf_options *opts,
 				opts->sm2_data->sign_s.length = sm2_perf_data.sign_s.length;
 			}
 		}
+		if (opts->op_type == CPERF_ASYM_MLDSA44) {
+			asym_cap_idx.type = RTE_CRYPTO_ASYM_XFORM_ML_DSA;
+			asym_capability = rte_cryptodev_asym_capability_get(cdev_id, &asym_cap_idx);
+			if (asym_capability == NULL)
+				return -1;
+
+			if (opts->asym_op_type == RTE_CRYPTO_ASYM_OP_SIGN)
+				opts->mldsa_data = &mldsa_sign_perf_data[0];
+			else if (opts->asym_op_type == RTE_CRYPTO_ASYM_OP_VERIFY)
+				opts->mldsa_data = &mldsa_verify_perf_data[0];
+			else {
+				RTE_LOG(ERR, USER1, "Unsupported MLDSA operation type\n");
+				return -ENOTSUP;
+			}
+		}
 
 		if (opts->op_type == CPERF_ASYM_MLKEM512) {
 			asym_cap_idx.type = RTE_CRYPTO_ASYM_XFORM_ML_KEM;
diff --git a/doc/guides/tools/cryptoperf.rst b/doc/guides/tools/cryptoperf.rst
index 13f9db66f4..7a7ee5c884 100644
--- a/doc/guides/tools/cryptoperf.rst
+++ b/doc/guides/tools/cryptoperf.rst
@@ -184,6 +184,7 @@ The following are the application command-line options:
            rsa
            sm2
            mlkem_512
+           mldsa_44
            ipsec
            tls-record
 
-- 
2.43.0


^ permalink raw reply related

* [PATCH v2] crypto/openssl: fix use-after-free bug and cleanup
From: Pratik Senapati @ 2026-06-09  5:53 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji, stable

params is freed before it is used by
EVP_PKEY_decapsulate_init()
causing a use-after-free issue.

Pass NULL to EVP_PKEY_decapsulate_init()
instead of params to avoid it.

Add resource cleanup for all error paths in the
ML-KEM decapsulate and encapsulate handlers.

Consolidate cleanup into multiple goto labels;
err_decap, err_pkey, err_params for decap and
err_encap, err_pkey, err_params for encap.

Fixes: 5f761d7b605e ("crypto/openssl: support ML-KEM and ML-DSA")
Cc: stable@dpdk.org

Signed-off-by: Pratik Senapati <psenapati@marvell.com>
---
 .mailmap                                 |   1 +
 drivers/crypto/openssl/rte_openssl_pmd.c | 124 +++++++++--------------
 2 files changed, 47 insertions(+), 78 deletions(-)

diff --git a/.mailmap b/.mailmap
index 4f93307aed..b6f47c10b9 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1287,6 +1287,7 @@ Prashant Gupta <prashant.gupta_3@nxp.com>
 Prashant Upadhyaya <prashant.upadhyaya@aricent.com> <praupadhyaya@gmail.com>
 Prateek Agarwal <prateekag@cse.iitb.ac.in>
 Prathisna Padmasanan <prathisna.padmasanan@intel.com>
+Pratik Senapati <psenapati@marvell.com> 
 Praveen Kaligineedi <pkaligineedi@google.com>
 Praveen Shetty <praveen.shetty@intel.com>
 Pravin Pathak <pravin.pathak.dev@gmail.com> <pravin.pathak@intel.com>
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index 4f171f48cc..7464884fb2 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -3537,35 +3537,24 @@ mlkem_encap_op_evp(struct rte_crypto_op *cop,
 		return -1;
 	}
 
-	if (EVP_PKEY_fromdata_init(pctx) != 1) {
-		OSSL_PARAM_free(params);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
 
-	if (EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_PUBLIC_KEY, params) != 1) {
-		OSSL_PARAM_free(params);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
-	OSSL_PARAM_free(params);
+	if (EVP_PKEY_fromdata_init(pctx) != 1)
+		goto err_params;
 
-	if (pkey == NULL) {
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	if (EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_PUBLIC_KEY, params) != 1)
+		goto err_params;
+
+	if (pkey == NULL)
+		goto err_params;
 
 	cctx = EVP_PKEY_CTX_new_from_pkey(NULL, pkey, NULL);
-	if (cctx == NULL) {
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	if (cctx == NULL)
+		goto err_pkey;
 
-	if (EVP_PKEY_encapsulate_init(cctx, NULL) != 1) {
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+
+	if (EVP_PKEY_encapsulate_init(cctx, NULL) != 1)
+		goto err_encap;
 
 	if (op->encap.message.length) {
 		const OSSL_PARAM kem_params[] = {
@@ -3574,49 +3563,42 @@ mlkem_encap_op_evp(struct rte_crypto_op *cop,
 			OSSL_PARAM_END
 		};
 
-		if (EVP_PKEY_encapsulate_init(cctx, kem_params) != 1) {
-			EVP_PKEY_free(pkey);
-			cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-			return -1;
-		}
+		if (EVP_PKEY_encapsulate_init(cctx, kem_params) != 1)
+			goto err_encap;
 	}
 
 	if (EVP_PKEY_encapsulate(cctx, NULL, &outlen, NULL, &keylen) != 1) {
 		OPENSSL_LOG(ERR, "Failed to determine output length");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_encap;
 	}
 
 	if (outlen > op->encap.cipher.length) {
 		OPENSSL_LOG(ERR, "Insufficient buffer for cipher text");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_encap;
 	}
 
 	if (keylen > op->encap.sk.length) {
 		OPENSSL_LOG(ERR, "Insufficient buffer for shared key");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_encap;
 	}
 
 	if (EVP_PKEY_encapsulate(cctx, op->encap.cipher.data, &outlen,
 			op->encap.sk.data, &keylen) != 1) {
 		OPENSSL_LOG(ERR, "Failed to encapculate");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_encap;
 	}
 
 	op->encap.cipher.length = outlen;
 	op->encap.sk.length = keylen;
+	ret = 0;
+	cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
 
+err_encap:
 	EVP_PKEY_CTX_free(cctx);
+err_pkey:
 	EVP_PKEY_free(pkey);
-	ret = 0;
-	cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
+err_params:
+	OSSL_PARAM_free(params);
 	return ret;
 }
 
@@ -3664,65 +3646,51 @@ mlkem_decap_op_evp(struct rte_crypto_op *cop,
 		return -1;
 	}
 
-	if (EVP_PKEY_fromdata_init(pctx) != 1) {
-		OSSL_PARAM_free(params);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
 
-	if (EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_PRIVATE_KEY, params) != 1) {
-		OSSL_PARAM_free(params);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
-	OSSL_PARAM_free(params);
+	if (EVP_PKEY_fromdata_init(pctx) != 1)
+		goto err_params;
 
-	if (pkey == NULL) {
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	if (EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_PRIVATE_KEY, params) != 1)
+		goto err_params;
+
+	if (pkey == NULL)
+		goto err_params;
 
 	cctx = EVP_PKEY_CTX_new_from_pkey(NULL, pkey, NULL);
-	if (cctx == NULL) {
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	if (cctx == NULL)
+		goto err_pkey;
 
-	if (EVP_PKEY_decapsulate_init(cctx, params) != 1) {
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
-	}
+	if (EVP_PKEY_decapsulate_init(cctx, NULL) != 1)
+		goto err_decap;
 
 	if (EVP_PKEY_decapsulate(cctx, NULL, &keylen,
 		op->decap.cipher.data, op->decap.cipher.length) != 1) {
 		OPENSSL_LOG(ERR, "Failed to determine output length");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_decap;
 	}
 
 	if (keylen > op->decap.sk.length) {
 		OPENSSL_LOG(ERR, "Insufficient buffer for shared key");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_decap;
 	}
 
 	if (EVP_PKEY_decapsulate(cctx, op->decap.sk.data, &keylen,
 			op->decap.cipher.data, op->decap.cipher.length) != 1) {
 		OPENSSL_LOG(ERR, "Failed to decapsulate");
-		EVP_PKEY_free(pkey);
-		cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-		return -1;
+		goto err_decap;
 	}
 
 	op->decap.sk.length = keylen;
+	ret = 0;
+	cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
 
+err_decap:
 	EVP_PKEY_CTX_free(cctx);
+err_pkey:
 	EVP_PKEY_free(pkey);
-	ret = 0;
-	cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
+err_params:
+	OSSL_PARAM_free(params);
 	return ret;
 }
 
-- 
2.43.0


^ permalink raw reply related

* [PATCH v2 1/2] app/crypto-perf: support ML KEM
From: Pratik Senapati @ 2026-06-09  5:53 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji

Add ML-KEM512 support to test-crypto-perf.

Signed-off-by: Pratik Senapati <psenapati@marvell.com>
---
 app/test-crypto-perf/cperf_ops.c             |  61 +++
 app/test-crypto-perf/cperf_options.h         |   2 +
 app/test-crypto-perf/cperf_options_parsing.c |  20 +
 app/test-crypto-perf/cperf_test_common.c     |   3 +-
 app/test-crypto-perf/cperf_test_vectors.c    | 470 +++++++++++++++++++
 app/test-crypto-perf/cperf_test_vectors.h    |  27 ++
 app/test-crypto-perf/main.c                  |  21 +-
 doc/guides/tools/cryptoperf.rst              |   1 +
 8 files changed, 603 insertions(+), 2 deletions(-)

diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-perf/cperf_ops.c
index 9297b4a3d3..806265f7bf 100644
--- a/app/test-crypto-perf/cperf_ops.c
+++ b/app/test-crypto-perf/cperf_ops.c
@@ -208,6 +208,49 @@ cperf_set_ops_asym_sm2(struct rte_crypto_op **ops,
 	}
 }
 
+static void
+cperf_set_ops_asym_mlkem(struct rte_crypto_op **ops,
+		uint32_t src_buf_offset __rte_unused,
+		uint32_t dst_buf_offset __rte_unused, uint16_t nb_ops,
+		void *sess,
+		const struct cperf_options *options,
+		const struct cperf_test_vector *test_vector __rte_unused,
+		uint16_t iv_offset __rte_unused,
+		uint32_t *imix_idx __rte_unused,
+		uint64_t *tsc_start __rte_unused)
+{
+	uint16_t i;
+
+	for (i = 0; i < nb_ops; i++) {
+		struct rte_crypto_asym_op *asym_op = ops[i]->asym;
+
+		ops[i]->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;
+		rte_crypto_op_attach_asym_session(ops[i], sess);
+
+		if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT) {
+			asym_op->mlkem.op = RTE_CRYPTO_ML_KEM_OP_ENCAP;
+			asym_op->mlkem.encap.ek.data = options->mlkem_data->ek.data;
+			asym_op->mlkem.encap.ek.length = options->mlkem_data->ek.length;
+			asym_op->mlkem.encap.cipher.data = options->mlkem_data->cipher.data;
+			asym_op->mlkem.encap.cipher.length = options->mlkem_data->cipher.length;
+			asym_op->mlkem.encap.sk.data = options->mlkem_data->sk.data;
+			asym_op->mlkem.encap.sk.length = options->mlkem_data->sk.length;
+			asym_op->mlkem.encap.message.data = options->mlkem_data->message.data;
+			asym_op->mlkem.encap.message.length = options->mlkem_data->message.length;
+		} else if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_DECRYPT) {
+			asym_op->mlkem.op = RTE_CRYPTO_ML_KEM_OP_DECAP;
+			asym_op->mlkem.decap.dk.data = options->mlkem_data->dk.data;
+			asym_op->mlkem.decap.dk.length = options->mlkem_data->dk.length;
+			asym_op->mlkem.decap.cipher.data = options->mlkem_data->cipher.data;
+			asym_op->mlkem.decap.cipher.length = options->mlkem_data->cipher.length;
+			asym_op->mlkem.decap.sk.data = options->mlkem_data->sk.data;
+			asym_op->mlkem.decap.sk.length = options->mlkem_data->sk.length;
+		} else {
+			rte_panic("Unsupported ML-KEM operation type %d\n", options->asym_op_type);
+		}
+	}
+}
+
 
 #ifdef RTE_LIB_SECURITY
 static void
@@ -1226,6 +1269,21 @@ cperf_create_session(struct rte_mempool *sess_mp,
 
 		return asym_sess;
 	}
+
+	if (options->op_type == CPERF_ASYM_MLKEM512) {
+		xform.next = NULL;
+		xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ML_KEM;
+		xform.mlkem.type = RTE_CRYPTO_ML_KEM_512;
+
+		ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mp, &asym_sess);
+		if (ret < 0) {
+			RTE_LOG(ERR, USER1, "ML-KEM Asym session create failed\n");
+			return NULL;
+		}
+		return asym_sess;
+	}
+
+
 #ifdef RTE_LIB_SECURITY
 	/*
 	 * security only
@@ -1542,6 +1600,9 @@ cperf_get_op_functions(const struct cperf_options *options,
 	case CPERF_ASYM_SM2:
 		op_fns->populate_ops = cperf_set_ops_asym_sm2;
 		break;
+	case CPERF_ASYM_MLKEM512:
+		op_fns->populate_ops = cperf_set_ops_asym_mlkem;
+		break;
 #ifdef RTE_LIB_SECURITY
 	case CPERF_PDCP:
 	case CPERF_DOCSIS:
diff --git a/app/test-crypto-perf/cperf_options.h b/app/test-crypto-perf/cperf_options.h
index 428e8cb4f1..98b8eeec3e 100644
--- a/app/test-crypto-perf/cperf_options.h
+++ b/app/test-crypto-perf/cperf_options.h
@@ -101,6 +101,7 @@ enum cperf_op_type {
 	CPERF_ASYM_SECP521R1,
 	CPERF_ASYM_ED25519,
 	CPERF_ASYM_SM2,
+	CPERF_ASYM_MLKEM512,
 	CPERF_TLS,
 };
 
@@ -187,6 +188,7 @@ struct cperf_options {
 	struct cperf_ecdsa_test_data *secp521r1_data;
 	struct cperf_eddsa_test_data *eddsa_data;
 	struct cperf_sm2_test_data *sm2_data;
+	struct cperf_mlkem_test_data *mlkem_data;
 	enum rte_crypto_asym_op_type asym_op_type;
 	enum rte_crypto_auth_algorithm asym_hash_alg;
 	struct cperf_rsa_test_data *rsa_data;
diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c
index 14e731586b..34afa938c8 100644
--- a/app/test-crypto-perf/cperf_options_parsing.c
+++ b/app/test-crypto-perf/cperf_options_parsing.c
@@ -41,6 +41,7 @@ usage(char *progname)
 		" --optype cipher-only / auth-only / cipher-then-auth / auth-then-cipher /\n"
 		"        aead / pdcp / docsis / ipsec / modex / rsa / secp192r1 /\n"
 		"        secp224r1 / secp256r1 / secp384r1 / secp521r1 / eddsa / sm2 /\n"
+		"        mlkem_512 /\n"
 		"        tls-record : set operation type\n"
 		" --sessionless: enable session-less crypto operations\n"
 		" --shared-session: share 1 session across all queue pairs on crypto device\n"
@@ -559,6 +560,10 @@ parse_op_type(struct cperf_options *opts, const char *arg)
 			cperf_op_type_strs[CPERF_ASYM_SM2],
 			CPERF_ASYM_SM2
 		},
+		{
+			cperf_op_type_strs[CPERF_ASYM_MLKEM512],
+			CPERF_ASYM_MLKEM512
+		},
 		{
 			cperf_op_type_strs[CPERF_TLS],
 			CPERF_TLS
@@ -1174,6 +1179,7 @@ cperf_options_default(struct cperf_options *opts)
 	opts->secp521r1_data = &secp521r1_perf_data;
 	opts->eddsa_data = &ed25519_perf_data;
 	opts->sm2_data = &sm2_perf_data;
+	opts->mlkem_data = &mlkem_encap_perf_data[0];
 	opts->asym_op_type = RTE_CRYPTO_ASYM_OP_ENCRYPT;
 }
 
@@ -1669,6 +1675,18 @@ cperf_options_check(struct cperf_options *options)
 		}
 	}
 
+	if (options->op_type == CPERF_ASYM_MLKEM512) {
+		if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT)
+			options->mlkem_data = &mlkem_encap_perf_data[0];
+		else if (options->asym_op_type == RTE_CRYPTO_ASYM_OP_DECRYPT)
+			options->mlkem_data = &mlkem_decap_perf_data[0];
+		else {
+			RTE_LOG(ERR, USER1,
+				"ML-KEM operations only support encrypt (encapsulate) and decrypt (decapsulate)\n");
+			return -EINVAL;
+		}
+	}
+
 #ifdef RTE_LIB_SECURITY
 	if (options->op_type == CPERF_DOCSIS) {
 		if (check_docsis_buffer_length(options) < 0)
@@ -1741,6 +1759,8 @@ cperf_options_dump(struct cperf_options *opts)
 				   rte_crypto_asym_op_strings[opts->asym_op_type]);
 		if (opts->op_type == CPERF_ASYM_RSA)
 			printf("# rsa test name: %s\n", opts->rsa_data->name);
+		if (opts->op_type == CPERF_ASYM_MLKEM512)
+			printf("# mlkem test name: %s\n", opts->mlkem_data->name);
 	}
 	printf("# sessionless: %s\n", opts->sessionless ? "yes" : "no");
 	printf("# shared session: %s\n", opts->shared_session ? "yes" : "no");
diff --git a/app/test-crypto-perf/cperf_test_common.c b/app/test-crypto-perf/cperf_test_common.c
index caf429b4d9..383d4bd940 100644
--- a/app/test-crypto-perf/cperf_test_common.c
+++ b/app/test-crypto-perf/cperf_test_common.c
@@ -313,7 +313,8 @@ cperf_is_asym_test(const struct cperf_options *options)
 	    options->op_type == CPERF_ASYM_SECP384R1 ||
 	    options->op_type == CPERF_ASYM_SECP521R1 ||
 	    options->op_type == CPERF_ASYM_ED25519 ||
-	    options->op_type == CPERF_ASYM_SM2)
+	    options->op_type == CPERF_ASYM_SM2 ||
+		options->op_type == CPERF_ASYM_MLKEM512)
 		return true;
 
 	return false;
diff --git a/app/test-crypto-perf/cperf_test_vectors.c b/app/test-crypto-perf/cperf_test_vectors.c
index f4f856ff69..6e2435b004 100644
--- a/app/test-crypto-perf/cperf_test_vectors.c
+++ b/app/test-crypto-perf/cperf_test_vectors.c
@@ -3510,6 +3510,430 @@ uint8_t rsa_8192_cipher[] = {
 	0xab, 0x45, 0xa7, 0x55, 0xf5, 0xc1, 0x33, 0x3e,
 };
 
+uint8_t mlkem_512_dk[] = {
+	0xd8, 0xc8, 0x4d, 0x74, 0x57, 0x6d, 0x43, 0x65,
+	0x84, 0xe0, 0x82, 0x87, 0x2d, 0xd0, 0x0b, 0x39,
+	0x08, 0x41, 0xc8, 0x85, 0x15, 0x26, 0xfb, 0x85,
+	0x68, 0xe1, 0x30, 0x98, 0xf0, 0xb1, 0x3d, 0xea,
+	0xa5, 0x4c, 0xc4, 0x59, 0x81, 0xfb, 0x33, 0xed,
+	0x20, 0x3a, 0x7f, 0x10, 0x82, 0x3d, 0x85, 0x18,
+	0x69, 0x56, 0x6b, 0x5b, 0x7c, 0x92, 0x0f, 0x57,
+	0x37, 0xf2, 0x93, 0x38, 0x24, 0xd3, 0x1e, 0xe1,
+	0x84, 0x16, 0x39, 0x9a, 0x0d, 0xbd, 0xba, 0x22,
+	0xaa, 0xc8, 0xa1, 0xd9, 0xd8, 0x2a, 0xc7, 0xc1,
+	0x78, 0x21, 0x01, 0x85, 0x38, 0x54, 0x39, 0x34,
+	0x25, 0x8c, 0xce, 0xda, 0xa3, 0x0c, 0x66, 0x99,
+	0x39, 0xf7, 0x63, 0xb6, 0x86, 0x80, 0xe0, 0xe4,
+	0x64, 0x2a, 0xfc, 0xc2, 0xe0, 0x71, 0x6c, 0x59,
+	0x7c, 0x9a, 0x03, 0xac, 0x6f, 0x16, 0x08, 0x64,
+	0x3d, 0x4b, 0xa5, 0x83, 0xc5, 0x34, 0x27, 0x2a,
+	0x20, 0x18, 0xb8, 0x2d, 0x28, 0x61, 0x2a, 0x94,
+	0x55, 0xc7, 0xc3, 0x93, 0x91, 0x71, 0x43, 0x7f,
+	0x74, 0xb2, 0x6b, 0x55, 0xb1, 0x9d, 0xc8, 0x08,
+	0x53, 0xda, 0xb6, 0x19, 0x46, 0x5c, 0x20, 0xea,
+	0x31, 0x31, 0xfc, 0x41, 0x02, 0xe6, 0x3c, 0x3e,
+	0xd8, 0x68, 0x6f, 0xa6, 0x66, 0x1e, 0xc7, 0xc6,
+	0x0a, 0xf8, 0x02, 0x1e, 0x1e, 0xfa, 0x9a, 0x30,
+	0x18, 0x64, 0xdc, 0x30, 0x20, 0x9a, 0xb6, 0x6e,
+	0x85, 0xe8, 0xb0, 0xb3, 0xe1, 0x24, 0x4e, 0xf0,
+	0x4a, 0x9c, 0xb3, 0x0e, 0xe0, 0xd2, 0x6a, 0x6e,
+	0xc7, 0xc3, 0x15, 0x35, 0x49, 0x77, 0x07, 0x7e,
+	0x33, 0x7c, 0x97, 0x6e, 0xeb, 0xb3, 0x7c, 0x86,
+	0xb2, 0xa0, 0xe3, 0x8a, 0x13, 0x81, 0x99, 0xc6,
+	0x75, 0x41, 0xa6, 0x2a, 0x6f, 0x16, 0xe2, 0x4e,
+	0x52, 0x14, 0x0d, 0xcb, 0x74, 0x8d, 0xb4, 0x89,
+	0xcf, 0xa8, 0x4c, 0x57, 0xaa, 0x18, 0x7d, 0xd7,
+	0x19, 0x5c, 0x11, 0x04, 0xc6, 0xe2, 0x2c, 0x09,
+	0x4d, 0x78, 0x7e, 0x9e, 0x1a, 0xa2, 0xab, 0x60,
+	0x59, 0xe4, 0x30, 0xa5, 0x6d, 0x11, 0x63, 0xf9,
+	0xb1, 0xa0, 0x98, 0xe2, 0x81, 0x34, 0xa6, 0x57,
+	0xf7, 0x18, 0x3e, 0x4c, 0x36, 0x02, 0x4d, 0xda,
+	0x6e, 0xac, 0x39, 0x6c, 0x29, 0x0b, 0x8c, 0xd7,
+	0x32, 0x8e, 0x45, 0x67, 0x36, 0x41, 0x6c, 0xab,
+	0xbb, 0x04, 0x2e, 0xae, 0xd3, 0x9f, 0xee, 0xfa,
+	0x5f, 0x4a, 0x04, 0x85, 0xf7, 0xfb, 0x97, 0x95,
+	0x78, 0xc4, 0x08, 0x39, 0xb8, 0xc5, 0x17, 0x9d,
+	0x2e, 0x6c, 0x14, 0xcd, 0xf2, 0xc1, 0xc5, 0x05,
+	0x9d, 0x34, 0x12, 0xcd, 0x86, 0xbc, 0x9e, 0x1c,
+	0xf9, 0x1c, 0x05, 0xc2, 0xc3, 0x29, 0xf2, 0x9d,
+	0xf4, 0xa9, 0xcc, 0x0d, 0x38, 0xce, 0x6f, 0xb4,
+	0x06, 0x68, 0xc0, 0xcd, 0xb2, 0xb6, 0x5d, 0xdf,
+	0x89, 0x58, 0x99, 0x70, 0xbe, 0x37, 0xa8, 0xb2,
+	0xc3, 0x6c, 0x2c, 0x13, 0x8c, 0xa7, 0x8a, 0x38,
+	0x36, 0x36, 0xe0, 0x77, 0x79, 0xf6, 0x30, 0xc5,
+	0x9c, 0x8e, 0x10, 0xc0, 0x1b, 0xb4, 0xe0, 0x74,
+	0x36, 0x6c, 0x9f, 0x80, 0x73, 0x3e, 0x57, 0x69,
+	0x5a, 0x79, 0x6a, 0x44, 0xb8, 0xe8, 0x25, 0xbe,
+	0x96, 0xae, 0xd7, 0x87, 0x30, 0x7e, 0x76, 0x8e,
+	0x1c, 0x09, 0x99, 0xd9, 0x4c, 0xb3, 0xf7, 0x45,
+	0x92, 0xfa, 0x77, 0x9e, 0x18, 0x72, 0x1a, 0x23,
+	0x9c, 0x4e, 0x5e, 0xd9, 0x22, 0x2e, 0xb0, 0x16,
+	0x9d, 0x03, 0x6a, 0x0e, 0x49, 0x94, 0x97, 0xa3,
+	0x19, 0x94, 0xa1, 0x7e, 0x9d, 0x7b, 0x87, 0xc1,
+	0x6a, 0x12, 0x42, 0xc9, 0x22, 0xbe, 0xeb, 0x38,
+	0xbe, 0xfa, 0x0b, 0xac, 0x25, 0xb9, 0x78, 0xec,
+	0x33, 0xdf, 0x86, 0xcb, 0xce, 0xe1, 0xa6, 0x69,
+	0x28, 0x39, 0xd5, 0x68, 0x73, 0xcb, 0x8a, 0xcc,
+	0x3d, 0xfa, 0x0e, 0x79, 0x71, 0x3e, 0x44, 0x19,
+	0x9a, 0xac, 0xf4, 0x43, 0xa9, 0xba, 0x10, 0x7e,
+	0x49, 0xc8, 0x8f, 0xf9, 0xac, 0xd2, 0x07, 0xb1,
+	0x4b, 0x2b, 0x15, 0x65, 0x05, 0x12, 0xc3, 0xcc,
+	0x36, 0x69, 0x17, 0x78, 0xa3, 0x00, 0x6d, 0xb7,
+	0xe9, 0x03, 0x78, 0xb3, 0x33, 0xe5, 0xcc, 0x22,
+	0xc3, 0x91, 0x8f, 0x47, 0x79, 0xaf, 0x2e, 0x19,
+	0x91, 0x05, 0xab, 0x5e, 0x3e, 0x43, 0xa4, 0x34,
+	0x0b, 0x8c, 0x89, 0x75, 0xc0, 0x08, 0x44, 0x07,
+	0xdd, 0x17, 0x83, 0xc6, 0x48, 0x09, 0x12, 0xe6,
+	0x25, 0xde, 0x99, 0x00, 0x51, 0xc1, 0x65, 0x8a,
+	0x85, 0x02, 0xa8, 0xd5, 0x72, 0x41, 0x67, 0x66,
+	0x08, 0xe9, 0x10, 0xa3, 0xa2, 0x07, 0xc8, 0x06,
+	0xc6, 0x0c, 0xc6, 0x47, 0xf7, 0x35, 0x20, 0x40,
+	0x69, 0x04, 0x3c, 0xba, 0x4b, 0xd3, 0x78, 0xa2,
+	0xa4, 0x71, 0xc7, 0x83, 0x2b, 0x69, 0xf9, 0xa2,
+	0x8b, 0xf5, 0xa6, 0x87, 0x46, 0xb3, 0x9b, 0x7a,
+	0x35, 0x97, 0x0b, 0xf4, 0x68, 0x15, 0x4a, 0x87,
+	0xeb, 0x0b, 0x2b, 0xa3, 0xba, 0xcd, 0xb3, 0x28,
+	0x80, 0x38, 0x19, 0x17, 0x1f, 0x44, 0x6f, 0x7f,
+	0x50, 0x75, 0x93, 0x00, 0x4c, 0x36, 0x07, 0x07,
+	0x11, 0xec, 0x91, 0xc4, 0x99, 0x5d, 0xf8, 0xe1,
+	0x53, 0x84, 0x01, 0xca, 0x6a, 0x64, 0x8c, 0xef,
+	0x17, 0xce, 0x81, 0xf5, 0xce, 0xaa, 0x80, 0xc1,
+	0x85, 0xc6, 0x6b, 0xe2, 0xc9, 0x43, 0xc9, 0xf5,
+	0xc3, 0x3a, 0xdb, 0xcf, 0xb9, 0x29, 0x64, 0x8d,
+	0xe7, 0x98, 0x0f, 0x8b, 0xb0, 0xd2, 0x84, 0x25,
+	0x37, 0xd1, 0x80, 0x38, 0x81, 0xb9, 0xe8, 0xb4,
+	0xa7, 0xc8, 0x3a, 0x27, 0x77, 0x9b, 0x81, 0xbb,
+	0x61, 0xae, 0x59, 0x06, 0x57, 0x40, 0x69, 0x11,
+	0xb2, 0x41, 0x68, 0x2d, 0x26, 0x62, 0x93, 0x40,
+	0x4d, 0x97, 0x1c, 0xb4, 0x63, 0x65, 0x04, 0xf8,
+	0x8c, 0x2a, 0x01, 0xb9, 0x6d, 0x3d, 0x87, 0x30,
+	0x28, 0x70, 0x80, 0x1d, 0xb2, 0x24, 0xb0, 0x5c,
+	0x90, 0x95, 0xa3, 0x6c, 0xdc, 0xa6, 0x66, 0x15,
+	0x33, 0x37, 0x8c, 0xa8, 0x9f, 0x24, 0xa3, 0x52,
+	0x21, 0x06, 0xb6, 0xaf, 0x51, 0xc0, 0x1d, 0x42,
+	0xa6, 0x55, 0x93, 0x6b, 0x4a, 0x32, 0x4e, 0xec,
+	0x46, 0xbe, 0xfa, 0x4a, 0x13, 0x5a, 0xca, 0x11,
+	0x39, 0xa1, 0x81, 0x8b, 0xc4, 0x07, 0x1b, 0x43,
+	0x1e, 0xa0, 0x5b, 0x34, 0x2d, 0x10, 0x6c, 0xdd,
+	0x3b, 0x18, 0x78, 0xe1, 0x0d, 0x5b, 0x61, 0x3d,
+	0xfd, 0x51, 0x6a, 0x78, 0x88, 0x2f, 0xa7, 0x84,
+	0xa3, 0x4f, 0x30, 0x3e, 0xb0, 0xdc, 0x96, 0xa8,
+	0xd7, 0xbb, 0x4c, 0xa6, 0x95, 0xb9, 0x27, 0x3f,
+	0x70, 0x46, 0xa3, 0xd8, 0x36, 0x22, 0x3b, 0x4b,
+	0x91, 0xa4, 0xe6, 0x31, 0x0d, 0xbb, 0x27, 0x2f,
+	0x15, 0x2c, 0xa7, 0x44, 0x19, 0xa9, 0xc1, 0xc8,
+	0xb2, 0x77, 0x1a, 0xd5, 0x14, 0x29, 0xa1, 0x76,
+	0xcc, 0x81, 0x88, 0x47, 0x3c, 0xd9, 0x9e, 0xba,
+	0x99, 0x26, 0xbb, 0xf6, 0x5e, 0xbc, 0x2a, 0x8e,
+	0xa0, 0x32, 0x32, 0x2e, 0x24, 0xa1, 0xc3, 0x07,
+	0xa5, 0xd4, 0xbb, 0x95, 0x03, 0x29, 0xb5, 0x59,
+	0x5a, 0x2b, 0x6c, 0x95, 0x15, 0xba, 0xb0, 0xaf,
+	0x27, 0xa2, 0xcb, 0xef, 0x46, 0xb6, 0xb2, 0x25,
+	0x21, 0x23, 0xf8, 0x18, 0x1c, 0xb0, 0x54, 0xad,
+	0x48, 0x38, 0xf6, 0x33, 0xa2, 0x55, 0xc8, 0x63,
+	0xce, 0x56, 0x34, 0x86, 0x6a, 0x61, 0x75, 0x75,
+	0x7f, 0x75, 0x49, 0x2a, 0x57, 0x72, 0x76, 0x3e,
+	0xa7, 0x08, 0x56, 0x28, 0x0b, 0x44, 0xa9, 0x00,
+	0xc2, 0x88, 0x28, 0x02, 0x55, 0x33, 0x55, 0x43,
+	0x97, 0x97, 0x42, 0xa4, 0xfe, 0xb1, 0x95, 0xee,
+	0x9b, 0x5d, 0xa9, 0x18, 0xc1, 0x90, 0xa5, 0x65,
+	0x20, 0x99, 0x39, 0xd2, 0xea, 0x08, 0x1c, 0xda,
+	0xa8, 0xfa, 0xa3, 0x3b, 0x56, 0xf0, 0x59, 0x17,
+	0x10, 0x0b, 0x45, 0x4a, 0x86, 0x88, 0x96, 0x49,
+	0x68, 0x98, 0x26, 0x55, 0x40, 0xb7, 0x5a, 0x29,
+	0x82, 0x93, 0xa1, 0x0e, 0x7b, 0x4b, 0xa2, 0x49,
+	0x61, 0x2b, 0xaf, 0xb4, 0x2d, 0xa1, 0xdc, 0xae,
+	0x79, 0x44, 0x66, 0x20, 0x72, 0xc5, 0x01, 0x36,
+	0x10, 0xd8, 0x81, 0x36, 0xb1, 0xea, 0xb1, 0x0d,
+	0xc2, 0x05, 0x75, 0xd8, 0xad, 0xe0, 0x73, 0xc6,
+	0x82, 0x8c, 0x7e, 0x97, 0x2b, 0x87, 0xb5, 0xc9,
+	0x1e, 0xac, 0xb0, 0x2a, 0x16, 0x20, 0x88, 0xb9,
+	0x41, 0x2f, 0xc8, 0x4b, 0xce, 0xd8, 0xc4, 0xa8,
+	0xe2, 0x68, 0x35, 0xd9, 0xd0, 0xc4, 0x7a, 0xf2,
+	0x25, 0xca, 0xb8, 0x06, 0x42, 0xcb, 0xc9, 0x8f,
+	0x0a, 0x60, 0xde, 0x19, 0xa8, 0xcb, 0x90, 0x85,
+	0x74, 0x42, 0x03, 0x89, 0xf4, 0x97, 0x8e, 0x41,
+	0xc5, 0x72, 0xe3, 0x52, 0x55, 0x81, 0x73, 0xe1,
+	0x71, 0x22, 0xa2, 0xfb, 0x8a, 0x36, 0xea, 0xb3,
+	0xc3, 0x33, 0x4f, 0x23, 0x55, 0x03, 0x1c, 0xa1,
+	0x84, 0x74, 0xe1, 0x69, 0x4d, 0xb3, 0xc2, 0x1f,
+	0xbc, 0x62, 0xeb, 0xf0, 0x50, 0x45, 0xb7, 0x83,
+	0xd3, 0x28, 0x37, 0x46, 0x35, 0x79, 0x04, 0x38,
+	0x16, 0xbd, 0x72, 0x2f, 0xbc, 0xf9, 0x7d, 0xb8,
+	0x20, 0x12, 0x87, 0xa7, 0xb0, 0x82, 0x7c, 0x3e,
+	0x4d, 0xa7, 0x18, 0x04, 0x54, 0x75, 0x19, 0x52,
+	0x61, 0x80, 0x57, 0xbe, 0x06, 0x37, 0x9c, 0xde,
+	0xb0, 0x93, 0x70, 0x54, 0x3f, 0x15, 0x83, 0xb2,
+	0xd3, 0x88, 0xa6, 0xd8, 0x56, 0x9b, 0x91, 0xf3,
+	0x00, 0x01, 0x00, 0xcd, 0xcb, 0x97, 0x16, 0x27,
+	0xc7, 0xaf, 0xb1, 0xd5, 0xba, 0x90, 0xa1, 0x24,
+	0x33, 0x26, 0x95, 0xba, 0xcb, 0x63, 0xa1, 0x56,
+	0xb0, 0x23, 0x09, 0x4e, 0xa8, 0x0a, 0x75, 0x02,
+	0xd8, 0x3b, 0xc1, 0x05, 0xa0, 0x73, 0x25, 0x26,
+	0x3e, 0xb8, 0x5b, 0xca, 0x6a, 0xae, 0x41, 0x22,
+	0xc5, 0x9d, 0x88, 0x3f, 0x37, 0x8c, 0x50, 0xcd,
+	0x09, 0x32, 0x34, 0x81, 0x98, 0xc1, 0x17, 0xa5,
+	0x62, 0x94, 0x8d, 0xcd, 0xd0, 0xc3, 0x08, 0x07,
+	0x2f, 0x8d, 0x52, 0x7b, 0xee, 0x81, 0xc5, 0x95,
+	0x2c, 0x8b, 0x46, 0x45, 0x5d, 0xf2, 0x62, 0x4d,
+	0x2e, 0x22, 0x7f, 0x0d, 0xa5, 0xc8, 0xba, 0x72,
+	0xa0, 0x8f, 0xd0, 0x21, 0x45, 0x28, 0xb9, 0xad,
+	0xac, 0x96, 0xa6, 0xc7, 0x33, 0x6d, 0xf3, 0x17,
+	0xcb, 0x7a, 0x32, 0x4e, 0x4c, 0x83, 0xa7, 0x15,
+	0x55, 0x6a, 0xca, 0xc1, 0xff, 0xd8, 0x90, 0xab,
+	0xaa, 0xa4, 0x65, 0xb0, 0x25, 0xf7, 0x47, 0x00,
+	0x2d, 0x20, 0x19, 0x23, 0xb5, 0x02, 0x39, 0x5a,
+	0x69, 0x1c, 0xc4, 0xbc, 0xa3, 0x80, 0xcc, 0x82,
+	0xd8, 0x66, 0x63, 0xc5, 0x7e, 0xa3, 0x6c, 0x2a,
+	0xb0, 0x7a, 0x02, 0xc6, 0xb3, 0xb7, 0xb0, 0x29,
+	0x3f, 0xa3, 0x99, 0xbd, 0x28, 0xf2, 0x8e, 0xd6,
+	0x7b, 0xb3, 0xd5, 0x24, 0x12, 0xb9, 0xbb, 0xa5,
+	0x68, 0xba, 0x9d, 0xe3, 0x44, 0xa3, 0xeb, 0x64,
+	0x13, 0xb8, 0x8a, 0x5e, 0x72, 0x60, 0xad, 0x95,
+	0xcb, 0x9d, 0xfb, 0x54, 0x6e, 0x0e, 0x66, 0xb5,
+	0xf4, 0x68, 0x25, 0x91, 0xc5, 0x1a, 0x4f, 0x71,
+	0x61, 0x50, 0xc8, 0xcb, 0x34, 0xc5, 0xc2, 0x84,
+	0xbc, 0x4e, 0x5f, 0x28, 0x6f, 0xbf, 0xbb, 0xc8,
+	0xb1, 0xc4, 0x4a, 0x4b, 0xb7, 0x1a, 0x00, 0xa0,
+	0x2d, 0xe9, 0x07, 0x39, 0x93, 0xe9, 0x81, 0x51,
+	0xe1, 0x34, 0x83, 0xf5, 0x82, 0x9d, 0xc7, 0x47,
+	0xf1, 0x61, 0xc8, 0x29, 0x52, 0x4d, 0x51, 0xb7,
+	0xa1, 0xeb, 0x49, 0x50, 0x6e, 0xda, 0x72, 0x5d,
+	0x69, 0x27, 0x83, 0xca, 0x4c, 0x3b, 0xd4, 0xcc,
+	0x7f, 0x26, 0x44, 0x2b, 0x76, 0x41, 0xe1, 0x50,
+	0xce, 0x0f, 0x40, 0x0d, 0x8f, 0x00, 0x6e, 0x27,
+	0x95, 0x6e, 0x92, 0x1b, 0xaf, 0xe4, 0x9b, 0x5e,
+	0x96, 0xec, 0xc7, 0xbf, 0x64, 0x77, 0x75, 0x6d,
+	0xda, 0xa8, 0x9c, 0x48, 0xf3, 0x79, 0x80, 0x4e,
+	0xed, 0x6f, 0xe0, 0x20, 0x1a, 0x2b, 0x7c, 0xa1,
+	0xac, 0x74, 0x42, 0x49, 0xd7, 0xe7, 0x7f, 0x57,
+	0x5a, 0xdb, 0x69, 0xb5, 0xe2, 0x7e, 0x81, 0x8d,
+	0xa9, 0x22, 0x5c, 0xda, 0xf3, 0xad, 0xbc, 0x3e,
+	0x0b, 0xd4, 0x9d, 0x63, 0xef, 0x40, 0x34, 0x66,
+	0x80, 0x8c, 0x2d, 0x31, 0x13, 0xdb, 0x31, 0x03,
+	0xdf, 0x29, 0x92, 0x4a, 0x81, 0x76, 0x4f, 0x4d,
+	0x5a, 0x64, 0x79, 0xf2, 0x8b, 0xc8, 0x3b, 0xc9,
+	0xf3, 0x35, 0xc7, 0x18, 0xcb, 0xb1, 0xa8, 0xd2,
+	0x24, 0xdb, 0x4d, 0x6a, 0x6a, 0xf1, 0xeb, 0xd2,
+};
+
+uint8_t mlkem_512_ek[] = {
+	0x28, 0x70, 0x80, 0x1d, 0xb2, 0x24, 0xb0, 0x5c,
+	0x90, 0x95, 0xa3, 0x6c, 0xdc, 0xa6, 0x66, 0x15,
+	0x33, 0x37, 0x8c, 0xa8, 0x9f, 0x24, 0xa3, 0x52,
+	0x21, 0x06, 0xb6, 0xaf, 0x51, 0xc0, 0x1d, 0x42,
+	0xa6, 0x55, 0x93, 0x6b, 0x4a, 0x32, 0x4e, 0xec,
+	0x46, 0xbe, 0xfa, 0x4a, 0x13, 0x5a, 0xca, 0x11,
+	0x39, 0xa1, 0x81, 0x8b, 0xc4, 0x07, 0x1b, 0x43,
+	0x1e, 0xa0, 0x5b, 0x34, 0x2d, 0x10, 0x6c, 0xdd,
+	0x3b, 0x18, 0x78, 0xe1, 0x0d, 0x5b, 0x61, 0x3d,
+	0xfd, 0x51, 0x6a, 0x78, 0x88, 0x2f, 0xa7, 0x84,
+	0xa3, 0x4f, 0x30, 0x3e, 0xb0, 0xdc, 0x96, 0xa8,
+	0xd7, 0xbb, 0x4c, 0xa6, 0x95, 0xb9, 0x27, 0x3f,
+	0x70, 0x46, 0xa3, 0xd8, 0x36, 0x22, 0x3b, 0x4b,
+	0x91, 0xa4, 0xe6, 0x31, 0x0d, 0xbb, 0x27, 0x2f,
+	0x15, 0x2c, 0xa7, 0x44, 0x19, 0xa9, 0xc1, 0xc8,
+	0xb2, 0x77, 0x1a, 0xd5, 0x14, 0x29, 0xa1, 0x76,
+	0xcc, 0x81, 0x88, 0x47, 0x3c, 0xd9, 0x9e, 0xba,
+	0x99, 0x26, 0xbb, 0xf6, 0x5e, 0xbc, 0x2a, 0x8e,
+	0xa0, 0x32, 0x32, 0x2e, 0x24, 0xa1, 0xc3, 0x07,
+	0xa5, 0xd4, 0xbb, 0x95, 0x03, 0x29, 0xb5, 0x59,
+	0x5a, 0x2b, 0x6c, 0x95, 0x15, 0xba, 0xb0, 0xaf,
+	0x27, 0xa2, 0xcb, 0xef, 0x46, 0xb6, 0xb2, 0x25,
+	0x21, 0x23, 0xf8, 0x18, 0x1c, 0xb0, 0x54, 0xad,
+	0x48, 0x38, 0xf6, 0x33, 0xa2, 0x55, 0xc8, 0x63,
+	0xce, 0x56, 0x34, 0x86, 0x6a, 0x61, 0x75, 0x75,
+	0x7f, 0x75, 0x49, 0x2a, 0x57, 0x72, 0x76, 0x3e,
+	0xa7, 0x08, 0x56, 0x28, 0x0b, 0x44, 0xa9, 0x00,
+	0xc2, 0x88, 0x28, 0x02, 0x55, 0x33, 0x55, 0x43,
+	0x97, 0x97, 0x42, 0xa4, 0xfe, 0xb1, 0x95, 0xee,
+	0x9b, 0x5d, 0xa9, 0x18, 0xc1, 0x90, 0xa5, 0x65,
+	0x20, 0x99, 0x39, 0xd2, 0xea, 0x08, 0x1c, 0xda,
+	0xa8, 0xfa, 0xa3, 0x3b, 0x56, 0xf0, 0x59, 0x17,
+	0x10, 0x0b, 0x45, 0x4a, 0x86, 0x88, 0x96, 0x49,
+	0x68, 0x98, 0x26, 0x55, 0x40, 0xb7, 0x5a, 0x29,
+	0x82, 0x93, 0xa1, 0x0e, 0x7b, 0x4b, 0xa2, 0x49,
+	0x61, 0x2b, 0xaf, 0xb4, 0x2d, 0xa1, 0xdc, 0xae,
+	0x79, 0x44, 0x66, 0x20, 0x72, 0xc5, 0x01, 0x36,
+	0x10, 0xd8, 0x81, 0x36, 0xb1, 0xea, 0xb1, 0x0d,
+	0xc2, 0x05, 0x75, 0xd8, 0xad, 0xe0, 0x73, 0xc6,
+	0x82, 0x8c, 0x7e, 0x97, 0x2b, 0x87, 0xb5, 0xc9,
+	0x1e, 0xac, 0xb0, 0x2a, 0x16, 0x20, 0x88, 0xb9,
+	0x41, 0x2f, 0xc8, 0x4b, 0xce, 0xd8, 0xc4, 0xa8,
+	0xe2, 0x68, 0x35, 0xd9, 0xd0, 0xc4, 0x7a, 0xf2,
+	0x25, 0xca, 0xb8, 0x06, 0x42, 0xcb, 0xc9, 0x8f,
+	0x0a, 0x60, 0xde, 0x19, 0xa8, 0xcb, 0x90, 0x85,
+	0x74, 0x42, 0x03, 0x89, 0xf4, 0x97, 0x8e, 0x41,
+	0xc5, 0x72, 0xe3, 0x52, 0x55, 0x81, 0x73, 0xe1,
+	0x71, 0x22, 0xa2, 0xfb, 0x8a, 0x36, 0xea, 0xb3,
+	0xc3, 0x33, 0x4f, 0x23, 0x55, 0x03, 0x1c, 0xa1,
+	0x84, 0x74, 0xe1, 0x69, 0x4d, 0xb3, 0xc2, 0x1f,
+	0xbc, 0x62, 0xeb, 0xf0, 0x50, 0x45, 0xb7, 0x83,
+	0xd3, 0x28, 0x37, 0x46, 0x35, 0x79, 0x04, 0x38,
+	0x16, 0xbd, 0x72, 0x2f, 0xbc, 0xf9, 0x7d, 0xb8,
+	0x20, 0x12, 0x87, 0xa7, 0xb0, 0x82, 0x7c, 0x3e,
+	0x4d, 0xa7, 0x18, 0x04, 0x54, 0x75, 0x19, 0x52,
+	0x61, 0x80, 0x57, 0xbe, 0x06, 0x37, 0x9c, 0xde,
+	0xb0, 0x93, 0x70, 0x54, 0x3f, 0x15, 0x83, 0xb2,
+	0xd3, 0x88, 0xa6, 0xd8, 0x56, 0x9b, 0x91, 0xf3,
+	0x00, 0x01, 0x00, 0xcd, 0xcb, 0x97, 0x16, 0x27,
+	0xc7, 0xaf, 0xb1, 0xd5, 0xba, 0x90, 0xa1, 0x24,
+	0x33, 0x26, 0x95, 0xba, 0xcb, 0x63, 0xa1, 0x56,
+	0xb0, 0x23, 0x09, 0x4e, 0xa8, 0x0a, 0x75, 0x02,
+	0xd8, 0x3b, 0xc1, 0x05, 0xa0, 0x73, 0x25, 0x26,
+	0x3e, 0xb8, 0x5b, 0xca, 0x6a, 0xae, 0x41, 0x22,
+	0xc5, 0x9d, 0x88, 0x3f, 0x37, 0x8c, 0x50, 0xcd,
+	0x09, 0x32, 0x34, 0x81, 0x98, 0xc1, 0x17, 0xa5,
+	0x62, 0x94, 0x8d, 0xcd, 0xd0, 0xc3, 0x08, 0x07,
+	0x2f, 0x8d, 0x52, 0x7b, 0xee, 0x81, 0xc5, 0x95,
+	0x2c, 0x8b, 0x46, 0x45, 0x5d, 0xf2, 0x62, 0x4d,
+	0x2e, 0x22, 0x7f, 0x0d, 0xa5, 0xc8, 0xba, 0x72,
+	0xa0, 0x8f, 0xd0, 0x21, 0x45, 0x28, 0xb9, 0xad,
+	0xac, 0x96, 0xa6, 0xc7, 0x33, 0x6d, 0xf3, 0x17,
+	0xcb, 0x7a, 0x32, 0x4e, 0x4c, 0x83, 0xa7, 0x15,
+	0x55, 0x6a, 0xca, 0xc1, 0xff, 0xd8, 0x90, 0xab,
+	0xaa, 0xa4, 0x65, 0xb0, 0x25, 0xf7, 0x47, 0x00,
+	0x2d, 0x20, 0x19, 0x23, 0xb5, 0x02, 0x39, 0x5a,
+	0x69, 0x1c, 0xc4, 0xbc, 0xa3, 0x80, 0xcc, 0x82,
+	0xd8, 0x66, 0x63, 0xc5, 0x7e, 0xa3, 0x6c, 0x2a,
+	0xb0, 0x7a, 0x02, 0xc6, 0xb3, 0xb7, 0xb0, 0x29,
+	0x3f, 0xa3, 0x99, 0xbd, 0x28, 0xf2, 0x8e, 0xd6,
+	0x7b, 0xb3, 0xd5, 0x24, 0x12, 0xb9, 0xbb, 0xa5,
+	0x68, 0xba, 0x9d, 0xe3, 0x44, 0xa3, 0xeb, 0x64,
+	0x13, 0xb8, 0x8a, 0x5e, 0x72, 0x60, 0xad, 0x95,
+	0xcb, 0x9d, 0xfb, 0x54, 0x6e, 0x0e, 0x66, 0xb5,
+	0xf4, 0x68, 0x25, 0x91, 0xc5, 0x1a, 0x4f, 0x71,
+	0x61, 0x50, 0xc8, 0xcb, 0x34, 0xc5, 0xc2, 0x84,
+	0xbc, 0x4e, 0x5f, 0x28, 0x6f, 0xbf, 0xbb, 0xc8,
+	0xb1, 0xc4, 0x4a, 0x4b, 0xb7, 0x1a, 0x00, 0xa0,
+	0x2d, 0xe9, 0x07, 0x39, 0x93, 0xe9, 0x81, 0x51,
+	0xe1, 0x34, 0x83, 0xf5, 0x82, 0x9d, 0xc7, 0x47,
+	0xf1, 0x61, 0xc8, 0x29, 0x52, 0x4d, 0x51, 0xb7,
+	0xa1, 0xeb, 0x49, 0x50, 0x6e, 0xda, 0x72, 0x5d,
+	0x69, 0x27, 0x83, 0xca, 0x4c, 0x3b, 0xd4, 0xcc,
+	0x7f, 0x26, 0x44, 0x2b, 0x76, 0x41, 0xe1, 0x50,
+	0xce, 0x0f, 0x40, 0x0d, 0x8f, 0x00, 0x6e, 0x27,
+	0x95, 0x6e, 0x92, 0x1b, 0xaf, 0xe4, 0x9b, 0x5e,
+	0x96, 0xec, 0xc7, 0xbf, 0x64, 0x77, 0x75, 0x6d,
+	0xda, 0xa8, 0x9c, 0x48, 0xf3, 0x79, 0x80, 0x4e,
+	0xed, 0x6f, 0xe0, 0x20, 0x1a, 0x2b, 0x7c, 0xa1,
+	0xac, 0x74, 0x42, 0x49, 0xd7, 0xe7, 0x7f, 0x57,
+};
+
+uint8_t mlkem_512_message[] = {
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20,
+	0x66, 0x72, 0x6f, 0x6d, 0x20, 0x4d, 0x4c, 0x2d,
+	0x4b, 0x45, 0x4d, 0x20, 0x74, 0x65, 0x73, 0x74,
+	0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73,
+	0x2e
+};
+
+uint8_t mlkem_512_cipher[] = {
+	0x92, 0x98, 0x11, 0x65, 0x10, 0x78, 0xE3, 0xA4,
+	0x34, 0x94, 0xD1, 0x22, 0x56, 0xD6, 0xB1, 0xF6,
+	0xF7, 0x51, 0x2A, 0xCA, 0x8E, 0x04, 0x1D, 0x89,
+	0xBB, 0xA7, 0x84, 0xEF, 0xAA, 0x70, 0x11, 0x75,
+	0xFC, 0x48, 0xA1, 0x7E, 0x4C, 0x99, 0xBD, 0xB8,
+	0x05, 0x01, 0xA6, 0xF0, 0x0E, 0x18, 0x0D, 0x75,
+	0xF0, 0xBB, 0xBD, 0x6F, 0x28, 0xF4, 0xDC, 0x3A,
+	0x58, 0x3D, 0x83, 0x1D, 0x78, 0xF9, 0x0E, 0x06,
+	0x5C, 0x0B, 0x77, 0x4C, 0x28, 0x82, 0xE1, 0xA4,
+	0x77, 0xAD, 0x14, 0x71, 0x3D, 0x5D, 0x53, 0x41,
+	0xCE, 0x4F, 0x36, 0x32, 0x24, 0xD7, 0x09, 0xF0,
+	0xB8, 0xF2, 0x95, 0x68, 0x84, 0x5C, 0x62, 0xC3,
+	0x77, 0x9A, 0x74, 0xD3, 0x29, 0xC1, 0x88, 0x8B,
+	0xBF, 0x05, 0x73, 0x43, 0x30, 0x20, 0xB4, 0xB0,
+	0xB3, 0xE1, 0xB5, 0x91, 0xA8, 0xBD, 0x4B, 0x7F,
+	0x2E, 0x53, 0x20, 0x55, 0xDE, 0x4D, 0xDB, 0x91,
+	0x73, 0xF9, 0x2F, 0x21, 0xF6, 0xAE, 0x6D, 0xEE,
+	0x67, 0x37, 0x82, 0x11, 0xE3, 0x0A, 0x5A, 0xB8,
+	0x68, 0xC7, 0x22, 0x34, 0x2A, 0xD4, 0x37, 0xAF,
+	0x50, 0xE0, 0xDB, 0xED, 0x89, 0x6D, 0x97, 0x0C,
+	0xF6, 0x0D, 0x6D, 0x9B, 0x1D, 0x5B, 0xE1, 0xF6,
+	0x45, 0x48, 0xF0, 0x75, 0x38, 0xE0, 0x2E, 0x11,
+	0x88, 0xEC, 0x8B, 0x51, 0x47, 0x21, 0xF6, 0x6F,
+	0x13, 0x3E, 0xA4, 0x46, 0xFE, 0xB0, 0x15, 0x81,
+	0x68, 0x9C, 0x0F, 0x15, 0xCB, 0x64, 0x6D, 0x0B,
+	0x04, 0x63, 0xBA, 0x67, 0x6C, 0x86, 0xE8, 0xAC,
+	0xB3, 0xE5, 0x47, 0x88, 0x27, 0x4A, 0xBC, 0x58,
+	0x13, 0x4D, 0x6F, 0xA6, 0x2C, 0xEC, 0x83, 0xB0,
+	0x6E, 0x93, 0x7C, 0xC7, 0x6E, 0xBB, 0xBF, 0xE1,
+	0x9F, 0xD6, 0x6E, 0xD8, 0x7A, 0xC5, 0xA2, 0x4D,
+	0xA2, 0x1C, 0xDA, 0x55, 0x1E, 0xF2, 0x1C, 0x71,
+	0x3E, 0x82, 0xD7, 0x92, 0x6F, 0x89, 0x1E, 0x53,
+	0x48, 0x00, 0x9E, 0x93, 0xCB, 0xE3, 0x79, 0xB5,
+	0x87, 0xDE, 0xF7, 0x84, 0xD6, 0x25, 0x57, 0x07,
+	0x47, 0xEE, 0xDB, 0xA8, 0xC2, 0x7E, 0xE8, 0xF9,
+	0x56, 0x22, 0x34, 0xE9, 0xD0, 0xC8, 0x3F, 0xF2,
+	0xCB, 0xE7, 0x92, 0xE1, 0x03, 0xF4, 0x38, 0x88,
+	0xE4, 0xC6, 0xB2, 0x42, 0x6F, 0x08, 0x61, 0x77,
+	0x7F, 0x8A, 0xCD, 0x9D, 0x21, 0x3E, 0xE2, 0x18,
+	0x52, 0x15, 0x02, 0x62, 0x2F, 0xCA, 0xEE, 0x44,
+	0x60, 0x15, 0x6B, 0x76, 0x7D, 0x12, 0xC7, 0x0F,
+	0xA0, 0x6C, 0xA1, 0x7B, 0xAE, 0xD6, 0x40, 0x1B,
+	0x61, 0x46, 0xB4, 0x47, 0x97, 0x6C, 0xE1, 0x4C,
+	0x47, 0x35, 0x29, 0x02, 0x6D, 0x69, 0x5E, 0x32,
+	0xF7, 0x7F, 0x9C, 0xFA, 0x87, 0xD3, 0x7D, 0x33,
+	0x85, 0x53, 0xF3, 0x8F, 0x0A, 0x41, 0x3C, 0x84,
+	0x00, 0x14, 0x04, 0x63, 0xA8, 0xC3, 0xCB, 0xEB,
+	0xAF, 0xCB, 0xE1, 0x78, 0xB2, 0x30, 0xC0, 0xA6,
+	0x9D, 0x7A, 0x28, 0x0A, 0x60, 0x5F, 0x45, 0x74,
+	0x24, 0xBE, 0xD8, 0x0D, 0xCB, 0x3A, 0x1B, 0xD1,
+	0x9C, 0x2A, 0x4E, 0x9A, 0xD1, 0x27, 0xCB, 0xAB,
+	0x08, 0x72, 0x89, 0xD9, 0xBA, 0x15, 0x01, 0x92,
+	0x4F, 0xFA, 0x7A, 0xCA, 0x32, 0xD3, 0x7E, 0xB1,
+	0xEB, 0xE7, 0xDF, 0x21, 0x33, 0x4F, 0xBD, 0x5F,
+	0xCF, 0x64, 0x5D, 0x36, 0x21, 0x63, 0x34, 0x68,
+	0x90, 0x81, 0x15, 0xC7, 0xF7, 0x28, 0x46, 0x42,
+	0xC9, 0x78, 0xC0, 0xA3, 0x5F, 0xF8, 0x86, 0x01,
+	0xF4, 0x1C, 0x6A, 0x65, 0xA2, 0x0E, 0x01, 0x5B,
+	0x29, 0xF4, 0xF8, 0x9E, 0xA5, 0x5C, 0xC0, 0x4B,
+	0x74, 0x2C, 0x88, 0xA3, 0x6B, 0xC2, 0xC4, 0xDA,
+	0xEF, 0xF2, 0x02, 0xCD, 0x89, 0x0C, 0x42, 0xDA,
+	0xE6, 0xBB, 0x67, 0x51, 0x29, 0x4A, 0x32, 0x99,
+	0xAC, 0xCC, 0xDC, 0xB6, 0x35, 0x8B, 0xCC, 0xE8,
+	0x04, 0x78, 0x69, 0xA8, 0x19, 0x0E, 0xDC, 0x1E,
+	0x6C, 0xFF, 0x46, 0xDF, 0x4E, 0x7A, 0x51, 0xC5,
+	0x9F, 0x39, 0x6F, 0xC7, 0x96, 0xFE, 0x54, 0xF4,
+	0xE2, 0xD8, 0xEB, 0x5C, 0xA1, 0x28, 0x84, 0xB4,
+	0xEA, 0x34, 0xA8, 0x18, 0x86, 0x93, 0x8B, 0xE9,
+	0xA7, 0xAB, 0x5E, 0xD9, 0x1E, 0x3E, 0x89, 0x8F,
+	0x83, 0xB4, 0xEF, 0x8E, 0x21, 0x30, 0xB4, 0xAD,
+	0x07, 0xFE, 0x8A, 0x3B, 0x34, 0xAE, 0xDE, 0x5C,
+	0xCA, 0xBA, 0x9E, 0xFB, 0x1B, 0x81, 0xEC, 0xD3,
+	0x0E, 0x40, 0xED, 0x65, 0x77, 0xF3, 0xC0, 0x56,
+	0xDC, 0xD8, 0x46, 0xDB, 0x4F, 0x51, 0x4B, 0x24,
+	0x42, 0x3B, 0xC7, 0xE2, 0x32, 0xBA, 0xA7, 0xC0,
+	0xA4, 0xFA, 0x14, 0xC4, 0xB7, 0x1B, 0x84, 0x0D,
+	0xC9, 0xD1, 0x8E, 0x1C, 0x50, 0xF1, 0xBB, 0xA6,
+	0x14, 0xD4, 0x88, 0xD8, 0x6C, 0xCE, 0x44, 0x76,
+	0x3A, 0x29, 0xF8, 0x69, 0xBD, 0x5B, 0x53, 0x4B,
+	0x65, 0xB8, 0x76, 0x5F, 0xD2, 0x01, 0xE9, 0x55,
+	0x83, 0x47, 0x2C, 0xD3, 0x9B, 0xCA, 0x85, 0x75,
+	0x60, 0x14, 0x1B, 0x5D, 0x48, 0x97, 0x67, 0x18,
+	0x9F, 0x8E, 0x8C, 0x86, 0x31, 0xCF, 0x07, 0x7D,
+	0x9E, 0xEB, 0xDE, 0x06, 0x14, 0xFE, 0x00, 0x3F,
+	0x9C, 0x09, 0xDF, 0x2B, 0x99, 0x08, 0x7A, 0x4C,
+	0xD9, 0xC8, 0x3B, 0x54, 0xF0, 0x34, 0x07, 0x19,
+	0xC5, 0x4A, 0x34, 0xBF, 0xB8, 0x31, 0xBF, 0x1C,
+	0x6F, 0x5C, 0x07, 0x37, 0x76, 0xD9, 0xBD, 0x3B,
+	0xB6, 0xB6, 0x8D, 0x6A, 0x1A, 0xE6, 0xE9, 0xCB,
+	0x4D, 0xC3, 0xDC, 0x76, 0x91, 0xE7, 0x6F, 0x11,
+	0x66, 0xF7, 0x76, 0xB3, 0x40, 0xAA, 0x51, 0x09,
+	0x7C, 0xFE, 0xA2, 0x37, 0xBF, 0xC3, 0x92, 0xFA,
+	0x75, 0x44, 0x76, 0xC7, 0x54, 0xC8, 0x91, 0x89,
+	0x65, 0x84, 0x03, 0x3E, 0x46, 0x92, 0x1E, 0x67,
+	0x8D, 0x8F, 0x52, 0x0D, 0x06, 0x22, 0x18, 0xFC,
+	0x0B, 0x92, 0xCD, 0x94, 0xC2, 0x0A, 0x3F, 0x41,
+};
+
+uint8_t mlkem_512_sk[] = {
+	0x26, 0xCD, 0x28, 0x15, 0xEB, 0x3E, 0x16, 0x56,
+	0x84, 0x2D, 0x15, 0xAC, 0x32, 0x33, 0xDA, 0x01,
+	0x71, 0x21, 0x82, 0x1B, 0xC7, 0xE3, 0x44, 0xF9,
+	0x5E, 0x7A, 0xB9, 0x3A, 0x40, 0xAD, 0x38, 0x6A
+};
+
 struct
 cperf_rsa_test_data rsa_qt_perf_data[4] = {
 	{
@@ -3822,6 +4246,52 @@ cperf_rsa_test_data rsa_pub_perf_data[4] = {
 	}
 };
 
+struct cperf_mlkem_test_data mlkem_encap_perf_data[] = {
+	{
+		.name = "mlkem_512_encap (deterministic)",
+		.type = RTE_CRYPTO_ML_KEM_512,
+		.dk = {
+			.data = mlkem_512_dk,
+			.length = sizeof(mlkem_512_dk),
+		},
+		.ek = {
+			.data = mlkem_512_ek,
+			.length = sizeof(mlkem_512_ek),
+		},
+		.message = {
+			.data = mlkem_512_message,
+			.length = 32,
+		},
+		.cipher = {
+			.data = mlkem_512_cipher,
+			.length = sizeof(mlkem_512_cipher),
+		},
+		.sk = {
+			.data = mlkem_512_sk,
+			.length = sizeof(mlkem_512_sk),
+		},
+	},
+};
+
+struct cperf_mlkem_test_data  mlkem_decap_perf_data[] = {
+	{
+		.name = "mlkem_512_decap",
+		.type = RTE_CRYPTO_ML_KEM_512,
+		.cipher = {
+			.data = mlkem_512_cipher,
+			.length = sizeof(mlkem_512_cipher),
+		},
+		.dk = {
+			.data = mlkem_512_dk,
+			.length = sizeof(mlkem_512_dk),
+		},
+		.sk = {
+			.data = mlkem_512_sk,
+			.length = sizeof(mlkem_512_sk),
+		},
+	}
+};
+
 struct cperf_test_vector*
 cperf_test_vector_get_dummy(struct cperf_options *options)
 {
diff --git a/app/test-crypto-perf/cperf_test_vectors.h b/app/test-crypto-perf/cperf_test_vectors.h
index d6f18268c4..e498196ae3 100644
--- a/app/test-crypto-perf/cperf_test_vectors.h
+++ b/app/test-crypto-perf/cperf_test_vectors.h
@@ -107,6 +107,31 @@ struct cperf_modex_test_data {
 	} result;
 };
 
+struct cperf_mlkem_test_data {
+	const char *name;
+	enum rte_crypto_ml_kem_type type;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} dk;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} ek;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} message;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} cipher;
+	struct {
+		uint8_t *data;
+		uint32_t length;
+	} sk;
+};
+
 #define TEST_DATA_SIZE 4096
 struct cperf_rsa_plaintext {
 	uint8_t data[TEST_DATA_SIZE];
@@ -188,5 +213,7 @@ extern struct cperf_rsa_test_data rsa_pub_perf_data[4];
 extern struct cperf_rsa_test_data rsa_exp_perf_data[4];
 extern struct cperf_rsa_test_data rsa_qt_perf_data[4];
 extern struct cperf_rsa_plaintext rsa_plaintext;
+extern struct cperf_mlkem_test_data mlkem_encap_perf_data[];
+extern struct cperf_mlkem_test_data mlkem_decap_perf_data[];
 
 #endif
diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
index f63e892413..2e228201ab 100644
--- a/app/test-crypto-perf/main.c
+++ b/app/test-crypto-perf/main.c
@@ -53,7 +53,8 @@ const char *cperf_op_type_strs[] = {
 	[CPERF_ASYM_SECP521R1] = "ecdsa_p521r1",
 	[CPERF_ASYM_ED25519] = "eddsa_25519",
 	[CPERF_ASYM_SM2] = "sm2",
-	[CPERF_TLS] = "tls-record"
+	[CPERF_TLS] = "tls-record",
+	[CPERF_ASYM_MLKEM512] = "mlkem_512",
 };
 
 const char *cperf_rsa_priv_keytype_strs[] = {
@@ -245,6 +246,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs)
 		case CPERF_ASYM_ED25519:
 		case CPERF_ASYM_SM2:
 		case CPERF_ASYM_RSA:
+		case CPERF_ASYM_MLKEM512:
 		case CPERF_ASYM_MODEX:
 			conf.ff_disable |= (RTE_CRYPTODEV_FF_SECURITY |
 					    RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO);
@@ -515,6 +517,23 @@ cperf_verify_devices_capabilities(struct cperf_options *opts,
 			}
 		}
 
+		if (opts->op_type == CPERF_ASYM_MLKEM512) {
+			asym_cap_idx.type = RTE_CRYPTO_ASYM_XFORM_ML_KEM;
+			asym_capability = rte_cryptodev_asym_capability_get(cdev_id, &asym_cap_idx);
+			if (asym_capability == NULL)
+				return -1;
+
+			if (opts->asym_op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT)
+				opts->mlkem_data = &mlkem_encap_perf_data[0];
+			else if (opts->asym_op_type == RTE_CRYPTO_ASYM_OP_DECRYPT)
+				opts->mlkem_data = &mlkem_decap_perf_data[0];
+			else {
+				RTE_LOG(ERR, USER1, "Unsupported MLKEM operation type\n");
+				return -ENOTSUP;
+			}
+
+		}
+
 		if (opts->op_type == CPERF_AUTH_ONLY ||
 				opts->op_type == CPERF_CIPHER_THEN_AUTH ||
 				opts->op_type == CPERF_AUTH_THEN_CIPHER) {
diff --git a/doc/guides/tools/cryptoperf.rst b/doc/guides/tools/cryptoperf.rst
index d7ee468e17..13f9db66f4 100644
--- a/doc/guides/tools/cryptoperf.rst
+++ b/doc/guides/tools/cryptoperf.rst
@@ -183,6 +183,7 @@ The following are the application command-line options:
            eddsa_25519
            rsa
            sm2
+           mlkem_512
            ipsec
            tls-record
 
-- 
2.43.0


^ permalink raw reply related

* [DPDK/ethdev Bug 1953] net/iavf: TX VLAN insertion offload has no effect on E810 in Double-VLAN-Mode (kernel iavf inserts fine on same PF)
From: bugzilla @ 2026-06-09  7:49 UTC (permalink / raw)
  To: dev

http://bugs.dpdk.org/show_bug.cgi?id=1953

            Bug ID: 1953
           Summary: net/iavf: TX VLAN insertion offload has no effect on
                    E810 in Double-VLAN-Mode (kernel iavf inserts fine on
                    same PF)
           Product: DPDK
           Version: 26.03
          Hardware: x86
                OS: Linux
            Status: UNCONFIRMED
          Severity: critical
          Priority: Normal
         Component: ethdev
          Assignee: dev@dpdk.org
          Reporter: g.navinsrinivas@gmail.com
  Target Milestone: ---

Created attachment 354
  --> http://bugs.dpdk.org/attachment.cgi?id=354&action=edit
The logs, pcap for both DPDK 25.11 and 26.03 and behaviour difference with
Kernel vlan tagging

On an Intel E810 with the PF in Double‑VLAN‑Mode (DVM), an iavf VF bound to
vfio-pci does not insert a TX VLAN tag — frames egress untagged despite
tx_offload vlan_insert on + tx_vlan set (and with
insertion enabled / insertion_cap: L2TAG2). The in-tree kernel iavf on the same
PF / adjacent VF inserts the single C‑VLAN correctly (802.1Q on the wire).
Forcing inner/L2TAG1 in the PMD doesn't help
either. Reproduced with vanilla dpdk-testpmd on both DPDK 25.11 and 26.03.

Env: E810 fw 7.9.1 / nvm 4.90 / DDP "ICE OS Default Package 1.3.49.0"; host ice
on kernel 6.8.12‑pve; guest iavf 6.17. VF VLAN_V2 caps: ins_outer=0xc0000207
(TOGGLE|XOR|L2TAG2|{8100,88A8,9100}),
ins_inner=0x80000101 (TOGGLE|L2TAG1|8100), VF_OFFLOAD_VLAN(v1)=0. Logs/pcaps
attached (per-version + kernel contrast).

On an Intel E810 with the PF in Double-VLAN-Mode (DVM), an iavf VF bound to
vfio-pci does not insert a TX VLAN tag — frames egress untagged despite
tx_offload vlan_insert on + tx_vlan set (and with insertion enabled /
insertion_cap: L2TAG2). The in-tree kernel iavf on the same PF / adjacent VF
inserts the single C-VLAN correctly (802.1Q on the wire). Forcing inner/L2TAG1
in the PMD doesn't help either. Reproduced with vanilla dpdk-testpmd on both
DPDK 25.11 and 26.03.

Reproduction (testpmd):
dpdk-testpmd -a <vf_pci> --file-prefix=tp -l <cores> -- -i
--eth-peer=0,<peer_mac>
  port stop 0
  port config 0 tx_offload vlan_insert on
  tx_vlan set 0 20
  port start 0
  set fwd txonly
  start
- tcpdump on the peer: frames arrive as plain ethertype IPv4 — no 802.1Q / vlan
20.
- show port xstats: tx_good counts up (frames do leave the VF; no Tx error).

Expected: egress frames carry 802.1Q vlan 20.
Actual: egress frames are untagged; tx_good increments, no Tx error reported.

Ruled out: VF was trust on, spoofchk off, and the VLAN filter added via
rte_eth_dev_vlan_filter() (vlan offload: filter on) — no change. Same result on
25.11 and 26.03, and with the PMD forced to inner/L2TAG1. The kernel iavf on
the same PF (adjacent VF) inserts the tag correctly, so the PF/HW and VF config
are fine — only the DPDK iavf PMD insertion path produces no tag.

Environment: E810 fw 7.9.1 / nvm 4.90 / DDP "ICE OS Default Package 1.3.49.0";
host ice on kernel 6.8.12-pve; guest iavf 6.17. VF VLAN_V2 caps:
ins_outer=0xc0000207 (TOGGLE|XOR|L2TAG2|{8100,88A8,9100}), ins_inner=0x80000101
(TOGGLE|L2TAG1|8100), VF_OFFLOAD_VLAN(v1)=0. Logs/pcaps attached (per-version +
kernel contrast).

-- 
You are receiving this mail because:
You are the assignee for the bug.

^ permalink raw reply

* Re: [PATCH 1/1] buildtools: remove absolute paths from pc file
From: Bruce Richardson @ 2026-06-09  7:47 UTC (permalink / raw)
  To: Srikanth Yalavarthi; +Cc: dev
In-Reply-To: <20260609043220.930405-1-syalavarthi@marvell.com>

On Tue, Jun 09, 2026 at 10:02:20AM +0530, Srikanth Yalavarthi wrote:
> When linking with non-versioned libraries, absolute paths
> of the libraries are added to libdpdk.pc. This patch replaces
> the absolute path with correct linker flags, -l<libname>.
> 

Do we need to check if we need a "-L" flag for some of these paths that are
stripped?

> https://github.com/mesonbuild/meson/issues/7766
> 
> Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>
> ---
>  buildtools/pkg-config/set-static-linker-flags.py | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/buildtools/pkg-config/set-static-linker-flags.py b/buildtools/pkg-config/set-static-linker-flags.py
> index 2745db34c29..bd217b07fc8 100644
> --- a/buildtools/pkg-config/set-static-linker-flags.py
> +++ b/buildtools/pkg-config/set-static-linker-flags.py
> @@ -6,9 +6,16 @@
>  # Should be called from meson build itself
>  import os
>  import sys
> +import re
>  
>  
>  def fix_ldflag(f):
> +    if f.startswith('/'):
> +        libfile = os.path.basename(f)
> +        m = re.match(r'^lib(.+?)\.(a|so(?:\..*)?)$', libfile)
> +        if m:
> +            return '-l' + m.group(1)
> +
>      if not f.startswith('-lrte_'):
>          return f
>      return '-l:lib' + f[2:] + '.a'
> -- 
> 2.34.1
> 

^ permalink raw reply

* [PATCH v1 0/1] fix NBL PMD multicast reception in promiscuous mode
From: Dimon Zhao @ 2026-06-09  7:51 UTC (permalink / raw)
  To: dev; +Cc: Dimon Zhao

When promiscuous mode is enabled on NBL PMD,
the hardware does not forward multicast frames to the host,
causing the driver to fail receiving multicast packets.
This patch fixes the issue.

Dimon Zhao (1):
  net/nbl: fix multicast reception in promiscuous mode

 drivers/net/nbl/nbl_dev/nbl_dev.c             |  5 +++
 drivers/net/nbl/nbl_dispatch.c                | 45 +++++++++++++++++++
 drivers/net/nbl/nbl_include/nbl_def_channel.h |  5 +++
 .../net/nbl/nbl_include/nbl_def_resource.h    |  2 +
 4 files changed, 57 insertions(+)

-- 
2.34.1


^ permalink raw reply

* [PATCH v1 1/1] net/nbl: fix multicast reception in promiscuous mode
From: Dimon Zhao @ 2026-06-09  7:51 UTC (permalink / raw)
  To: dev; +Cc: Dimon Zhao, stable, Leon Yu, Sam Chen
In-Reply-To: <20260609075143.32695-1-dimon.zhao@nebula-matrix.com>

When promiscuous mode is enabled on NBL PMD,
the hardware does not forward multicast frames to the host,
causing the driver to fail receiving multicast packets.
This patch fixes the issue.

Fixes: 80bd3cad22c8 ("net/nbl: support promiscuous mode")
Cc: stable@dpdk.org

Signed-off-by: Dimon Zhao <dimon.zhao@nebula-matrix.com>
---
 drivers/net/nbl/nbl_dev/nbl_dev.c             |  5 +++
 drivers/net/nbl/nbl_dispatch.c                | 45 +++++++++++++++++++
 drivers/net/nbl/nbl_include/nbl_def_channel.h |  5 +++
 .../net/nbl/nbl_include/nbl_def_resource.h    |  2 +
 4 files changed, 57 insertions(+)

diff --git a/drivers/net/nbl/nbl_dev/nbl_dev.c b/drivers/net/nbl/nbl_dev/nbl_dev.c
index 35485ea691..3c0e98d687 100644
--- a/drivers/net/nbl/nbl_dev/nbl_dev.c
+++ b/drivers/net/nbl/nbl_dev/nbl_dev.c
@@ -784,6 +784,8 @@ int nbl_promiscuous_enable(struct rte_eth_dev *eth_dev)
 	struct nbl_common_info *common = &adapter->common;
 
 	if (!common->is_vf) {
+		disp_ops->cfg_multi_mcast(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt),
+					  dev_mgt->net_dev->vsi_id, 1);
 		disp_ops->set_promisc_mode(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt),
 					   dev_mgt->net_dev->vsi_id, 1);
 		dev_mgt->net_dev->promisc = 1;
@@ -802,6 +804,8 @@ int nbl_promiscuous_disable(struct rte_eth_dev *eth_dev)
 	struct nbl_common_info *common = &adapter->common;
 
 	if (!common->is_vf) {
+		disp_ops->cfg_multi_mcast(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt),
+					  dev_mgt->net_dev->vsi_id, 0);
 		disp_ops->set_promisc_mode(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt),
 					   dev_mgt->net_dev->vsi_id, 0);
 		dev_mgt->net_dev->promisc = 0;
@@ -1012,6 +1016,7 @@ static void nbl_dev_leonis_stop(void *p)
 		disp_ops->del_multi_rule(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), net_dev->vsi_id);
 		disp_ops->del_macvlan(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), mac, 0, net_dev->vsi_id);
 	}
+	disp_ops->cfg_multi_mcast(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), net_dev->vsi_id, 0);
 }
 
 static void nbl_dev_remove_ops(struct nbl_dev_ops_tbl **dev_ops_tbl)
diff --git a/drivers/net/nbl/nbl_dispatch.c b/drivers/net/nbl/nbl_dispatch.c
index 52d37ba7fe..f4f1ee4842 100644
--- a/drivers/net/nbl/nbl_dispatch.c
+++ b/drivers/net/nbl/nbl_dispatch.c
@@ -698,6 +698,47 @@ static void nbl_disp_chan_del_multi_rule_req(void *priv, u16 vsi)
 	chan_ops->send_msg(NBL_DISP_MGT_TO_CHAN_PRIV(disp_mgt), &chan_send);
 }
 
+static int nbl_disp_cfg_multi_mcast(void *priv, u16 vsi, u16 enable)
+{
+	struct nbl_dispatch_mgt *disp_mgt = (struct nbl_dispatch_mgt *)priv;
+	struct nbl_resource_ops *res_ops = NBL_DISP_MGT_TO_RES_OPS(disp_mgt);
+	int ret = 0;
+
+	if (enable)
+		ret = NBL_OPS_CALL(res_ops->add_multi_mcast,
+				   (NBL_DISP_MGT_TO_RES_PRIV(disp_mgt), vsi));
+	else
+		NBL_OPS_CALL(res_ops->del_multi_mcast, (NBL_DISP_MGT_TO_RES_PRIV(disp_mgt), vsi));
+
+	return ret;
+}
+
+static int nbl_disp_chan_cfg_multi_mcast_req(void *priv, u16 vsi, u16 enable)
+{
+	struct nbl_dispatch_mgt *disp_mgt = (struct nbl_dispatch_mgt *)priv;
+	const struct nbl_channel_ops *chan_ops = NBL_DISP_MGT_TO_CHAN_OPS(disp_mgt);
+	struct nbl_common_info *common = NBL_DISP_MGT_TO_COMMON(disp_mgt);
+	struct nbl_chan_param_cfg_multi_mcast param = {0};
+	struct nbl_chan_send_info chan_send;
+	int ret = 0;
+
+	if (NBL_IS_COEXISTENCE(common)) {
+		ret = ioctl(common->devfd, NBL_DEV_USER_SET_MCAST_MODE, &enable);
+		if (ret) {
+			NBL_LOG(ERR, "userspace send cfg_multi_mcast ioctl msg failed ret %d",
+				ret);
+			return ret;
+		}
+		return 0;
+	}
+
+	param.vsi = vsi;
+	param.enable = enable;
+	NBL_CHAN_SEND(chan_send, 0, NBL_CHAN_MSG_CFG_MULTI_MCAST_RULE,
+		      &param, sizeof(param), NULL, 0, 1);
+	return chan_ops->send_msg(NBL_DISP_MGT_TO_CHAN_PRIV(disp_mgt), &chan_send);
+}
+
 static int nbl_disp_cfg_dsch(void *priv, u16 vsi_id, bool vld)
 {
 	struct nbl_dispatch_mgt *disp_mgt = (struct nbl_dispatch_mgt *)priv;
@@ -1145,6 +1186,10 @@ do {									\
 			 NBL_DISP_CTRL_LVL_MGT,				\
 			 NBL_CHAN_MSG_DEL_MULTI_RULE,			\
 			 nbl_disp_chan_del_multi_rule_req, NULL);	\
+	NBL_DISP_SET_OPS(cfg_multi_mcast, nbl_disp_cfg_multi_mcast,	\
+			 NBL_DISP_CTRL_LVL_MGT,				\
+			 NBL_CHAN_MSG_CFG_MULTI_MCAST_RULE,		\
+			 nbl_disp_chan_cfg_multi_mcast_req, NULL);	\
 	NBL_DISP_SET_OPS(cfg_dsch, nbl_disp_cfg_dsch,			\
 			 NBL_DISP_CTRL_LVL_MGT, NBL_CHAN_MSG_CFG_DSCH,	\
 			 nbl_disp_chan_cfg_dsch_req, NULL);		\
diff --git a/drivers/net/nbl/nbl_include/nbl_def_channel.h b/drivers/net/nbl/nbl_include/nbl_def_channel.h
index 55880737f1..257c81e01e 100644
--- a/drivers/net/nbl/nbl_include/nbl_def_channel.h
+++ b/drivers/net/nbl/nbl_include/nbl_def_channel.h
@@ -371,6 +371,11 @@ struct nbl_chan_param_del_multi_rule {
 	u16 vsi;
 };
 
+struct nbl_chan_param_cfg_multi_mcast {
+	u16 vsi;
+	u16 enable;
+};
+
 struct nbl_chan_param_cfg_dsch {
 	u16 vsi_id;
 	bool vld;
diff --git a/drivers/net/nbl/nbl_include/nbl_def_resource.h b/drivers/net/nbl/nbl_include/nbl_def_resource.h
index 6935598789..a803c59dc0 100644
--- a/drivers/net/nbl/nbl_include/nbl_def_resource.h
+++ b/drivers/net/nbl/nbl_include/nbl_def_resource.h
@@ -77,6 +77,8 @@ struct nbl_resource_ops {
 	int (*add_multi_rule)(void *priv, u16 vsi_id);
 	void (*del_multi_rule)(void *priv, u16 vsi_id);
 	int (*cfg_multi_mcast)(void *priv, u16 vsi_id, u16 enable);
+	int (*add_multi_mcast)(void *priv, u16 vsi);
+	void (*del_multi_mcast)(void *priv, u16 vsi);
 	void (*clear_flow)(void *priv, u16 vsi_id);
 	int (*cfg_dsch)(void *priv, u16 vsi_id, bool vld);
 	int (*setup_cqs)(void *priv, u16 vsi_id, u16 real_qps, bool rss_indir_set);
-- 
2.34.1


^ permalink raw reply related

* [PATCH] net/crc: add 4x folding loop for x86 SSE implementation
From: Shreesh Adiga @ 2026-06-09  7:57 UTC (permalink / raw)
  To: Jasvinder Singh, Bruce Richardson, Konstantin Ananyev; +Cc: dev

Add a 64-byte loop that maintains 4 fold registers and processes
64 bytes at a time. The 4x fold registers is then reduced to 16 byte
single fold, similar to AVX512 implementation. This technique is
described in the paper by Intel:
"Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"

This results in roughly 50% performance improvement due to better ILP
for large input sizes like 1024.

Signed-off-by: Shreesh Adiga <16567adigashreesh@gmail.com>
---
 lib/net/net_crc_sse.c | 59 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 48 insertions(+), 11 deletions(-)

diff --git a/lib/net/net_crc_sse.c b/lib/net/net_crc_sse.c
index 3b6fbfecac..dfef8ecc59 100644
--- a/lib/net/net_crc_sse.c
+++ b/lib/net/net_crc_sse.c
@@ -14,6 +14,7 @@
 /** PCLMULQDQ CRC computation context structure */
 struct crc_pclmulqdq_ctx {
 	__m128i rk1_rk2;
+	__m128i rk3_rk4;
 	__m128i rk5_rk6;
 	__m128i rk7_rk8;
 };
@@ -150,9 +151,36 @@ crc32_eth_calc_pclmulqdq(
 	temp = _mm_insert_epi32(_mm_setzero_si128(), crc, 0);
 
 	/**
-	 * Folding all data into single 16 byte data block
-	 * Assumes: fold holds first 16 bytes of data
+	 * Folding all data into 4 parallel 16 byte data block
+	 * Later folds 4 parallel blocks into single fold block
 	 */
+	if (likely(data_len >= 64)) {
+		__m128i fold1, fold2, fold3, fold4;
+		__m128i temp1, temp2, temp3, temp4;
+		fold1 = _mm_loadu_si128((const __m128i *)(data +  0));
+		fold2 = _mm_loadu_si128((const __m128i *)(data + 16));
+		fold3 = _mm_loadu_si128((const __m128i *)(data + 32));
+		fold4 = _mm_loadu_si128((const __m128i *)(data + 48));
+		fold1 = _mm_xor_si128(fold1, temp);
+		k = params->rk1_rk2;
+
+		for (n = 64; (n + 64) <= data_len; n += 64) {
+			temp1 = _mm_loadu_si128((const __m128i *)&data[n]);
+			temp2 = _mm_loadu_si128((const __m128i *)&data[n + 16]);
+			temp3 = _mm_loadu_si128((const __m128i *)&data[n + 32]);
+			temp4 = _mm_loadu_si128((const __m128i *)&data[n + 48]);
+			fold1 = crcr32_folding_round(temp1, k, fold1);
+			fold2 = crcr32_folding_round(temp2, k, fold2);
+			fold3 = crcr32_folding_round(temp3, k, fold3);
+			fold4 = crcr32_folding_round(temp4, k, fold4);
+		}
+
+		k = params->rk3_rk4;
+		fold1 = crcr32_folding_round(fold2, k, fold1);
+		fold1 = crcr32_folding_round(fold3, k, fold1);
+		fold = crcr32_folding_round(fold4, k, fold1);
+		goto single_fold_loop;
+	}
 
 	if (unlikely(data_len < 32)) {
 		if (unlikely(data_len == 16)) {
@@ -182,7 +210,7 @@ crc32_eth_calc_pclmulqdq(
 		fold = _mm_loadu_si128((const __m128i *)data);
 		fold = _mm_xor_si128(fold, temp);
 		n = 16;
-		k = params->rk1_rk2;
+		k = params->rk3_rk4;
 		goto partial_bytes;
 	}
 
@@ -191,9 +219,12 @@ crc32_eth_calc_pclmulqdq(
 	fold = _mm_loadu_si128((const __m128i *)data);
 	fold = _mm_xor_si128(fold, temp);
 
-	/** Main folding loop - the last 16 bytes is processed separately */
-	k = params->rk1_rk2;
-	for (n = 16; (n + 16) <= data_len; n += 16) {
+	/** Single folding loop - the last 16 bytes is processed separately */
+	k = params->rk3_rk4;
+	n = 16;
+
+single_fold_loop:
+	for (; (n + 16) <= data_len; n += 16) {
 		temp = _mm_loadu_si128((const __m128i *)&data[n]);
 		fold = crcr32_folding_round(temp, k, fold);
 	}
@@ -236,12 +267,14 @@ crc32_eth_calc_pclmulqdq(
 void
 rte_net_crc_sse42_init(void)
 {
-	uint64_t k1, k2, k5, k6;
+	uint64_t k1, k2, k3, k4, k5, k6;
 	uint64_t p = 0, q = 0;
 
 	/** Initialize CRC16 data */
-	k1 = 0x189aeLLU;
-	k2 = 0x8e10LLU;
+	k1 = 0x14ff2LLU;
+	k2 = 0x19a3cLLU;
+	k3 = 0x189aeLLU;
+	k4 = 0x8e10LLU;
 	k5 = 0x189aeLLU;
 	k6 = 0x114aaLLU;
 	q =  0x11c581910LLU;
@@ -249,12 +282,15 @@ rte_net_crc_sse42_init(void)
 
 	/** Save the params in context structure */
 	crc16_ccitt_pclmulqdq.rk1_rk2 = _mm_set_epi64x(k2, k1);
+	crc16_ccitt_pclmulqdq.rk3_rk4 = _mm_set_epi64x(k4, k3);
 	crc16_ccitt_pclmulqdq.rk5_rk6 = _mm_set_epi64x(k6, k5);
 	crc16_ccitt_pclmulqdq.rk7_rk8 = _mm_set_epi64x(p, q);
 
 	/** Initialize CRC32 data */
-	k1 = 0xccaa009eLLU;
-	k2 = 0x1751997d0LLU;
+	k1 = 0x1c6e41596LLU;
+	k2 = 0x154442bd4LLU;
+	k3 = 0xccaa009eLLU;
+	k4 = 0x1751997d0LLU;
 	k5 = 0xccaa009eLLU;
 	k6 = 0x163cd6124LLU;
 	q =  0x1f7011640LLU;
@@ -262,6 +298,7 @@ rte_net_crc_sse42_init(void)
 
 	/** Save the params in context structure */
 	crc32_eth_pclmulqdq.rk1_rk2 = _mm_set_epi64x(k2, k1);
+	crc32_eth_pclmulqdq.rk3_rk4 = _mm_set_epi64x(k4, k3);
 	crc32_eth_pclmulqdq.rk5_rk6 = _mm_set_epi64x(k6, k5);
 	crc32_eth_pclmulqdq.rk7_rk8 = _mm_set_epi64x(p, q);
 }
-- 
2.53.0


^ permalink raw reply related

* Re: [PATCH v16 0/5] Support add/remove memory region and get-max-slots
From: Maxime Coquelin @ 2026-06-09  7:58 UTC (permalink / raw)
  To: pravin.bathija; +Cc: dev, stephen, fengchengwen, thomas
In-Reply-To: <20260606025211.1082615-1-pravin.bathija@dell.com>

On Sat, Jun 6, 2026 at 4:52 AM <pravin.bathija@dell.com> wrote:
>
> From: Pravin M Bathija <pravin.bathija@dell.com>
>
> This is version v16 of the patchset and it incorporates the
> recommendations made by Stephen Hemminger.
>
> Patch 4/5
> - Fixed use-after-free in vhost_user_add_mem_reg(): reg pointed into
>   dev->mem->regions[] but dev_invalidate_vrings() ->
>   translate_ring_addresses() -> numa_realloc() can relocate dev->mem ;
>   re-drive the region pointer from the refreshed dev before reading
>   host_user_addr for the reply.
> - Gated the ADD_MEM_REG mapping-address reply on dev->postcopy_listening
>   per the vhost-user spec (reply is postcopy-only); return
>   RTE_VHOST_MSG_RESULT_OK in non-postcopy mode,  matching SET_MEM_TABLE,
>   to avoid desyncing the channel.
>
> This implementation has been extensively tested by doing Read/Write I/O
> from multiple instances of fio + libblkio (front-end) talking to
> spdk/dpdk (back-end) based drives. Tested with qemu front-end talking to
> dpdk testpmd (back-end) performing add/removal of memory regions. Also
> tested post-copy live migration after doing add_memory_region.
>
> Version Log:
> Version v16 (Current version): Incorporate code review suggestions from
> Stephen Hemminger.
>
> Version v15: Incorporate review suggestions from Maxime Coquelin.
> Patch 4/5
> - Changed VHOST_USER_REM_MEM_REG handler declaration from
>   accepts_fd=true to accepts_fd=false, as the remove request does not
>   expect FDs in ancillary data.
> - Removed all close_msg_fds(ctx) calls from vhost_user_rem_mem_reg(), no
>   longer needed since the handler is declared as not accepting FDs.
> - Removed validate_msg_fds(dev, ctx, 0) check from
>   vhost_user_rem_mem_reg(), as FD validation is now handled generically
>   by the framework.
> - Added targeted IOTLB cache invalidation in vhost_user_rem_mem_reg()
>   using vhost_user_iotlb_cache_remove() for the removed region's GPA
>   range, instead of the nuclear iotlb_flush_all() used by set_mem_table.
>
> Version v14: Incorporate code review suggestions from Stephen Hemminger
> and Fengcheng Wen.
> Changes from Fengcheng Wen review:
> Patch 3/5
> - Moved free_all_mem_regions() call sites in vhost_user_set_mem_table()
>   from patch 4/5 to patch 3/5 so each commit compiles independently
> Patch 4/5
> - Renamed _dev_invalidate_vrings() to vhost_user_invalidate_vrings() to
>   follow vhost naming convention
> -  Added comment explaining *pdev propagation through
>    translate_ring_addresses / numa_realloc()
> - Reordered local variables in vhost_user_add_mem_reg() and
>   vhost_user_rem_mem_reg() by descending line length
> - Shortened overlap check variable names (current_region_guest_start/end
>   --> cur_start/end, proposed_region_guest_start/end -> new_start/end)
> - Fixed DMA error path in vhost_user_add_mem_reg(): added
>   free_new_region_no_dma label so async_dma_map_region(false) is not
>   called when the map itself failed.
> Changes from Stephen Hemminger review:
> Patch 4/5
> - vhost_user_add_mem_reg() now constructs a reply with the back-end's
>   host mapping address in userspace_addr and returns
>   RTE_VHOST_MSG_RESULT_REPLY per the vhost-user spec
> - Added validate_msg_fds(dev, ctx, 0) in vhost_user_rem_mem_reg() to
>   reject malformed messages with unexpected file descriptors
> - Dropped unnecessary (uint64_t) cast in vhost_user_get_max_mem_slots()
>
> Version v13: Incorporate code review suggestions from Fengcheng Wen
> Patch 2/5
> Renamed VhostUserSingleMemReg to VhostUserMemRegMsg and memory_single
> to memreg
> Patches 3/5 and 4/5
> Relocated function remove_guest_pages from patch 3/5 to 4/5
>
> Version v12: Incorporate code review suggestions from Maxime Coquelin
> and ai-code-review.
> Patch 3/5
> Refactored async_dma_map() to delegate to async_dma_map_region(),
> eliminating code duplication between the two functions.
> Restored original comments in async_dma_map_region() explaining why
> ENODEV and EINVAL errors are ignored (these were stripped in v10)
> Reverted unnecessary changes to vhost_user_postcopy_register() --
> removed the host_user_addr == 0 checks and reg_msg_index indirection
> that were added in  v10, since this function is only called from
> vhost_user_set_mem_table() where regions are always contiguous.
>
> Version v11: Incorporate code review suggestions from Stephen Hemminger.
> Patch 4/5
> Fix incomplete cleanup in vhost_user_add_mem_reg() when
> vhost_user_mmap_region() fails after the mmap succeeds (e.g.
> add_guest_pages() realloc failure) realloc failure). The error path now
> calls remove_guest_pages() and free_mem_region() to undo the mapping
> and stale guest-page entries, preventing a leaked mmap and slot reuse
> corruption. The plain close(fd) path is kept for pre-mmap failures.
>
> Version v10: Incorporate code review suggestions from Stephen Hemminger.
> Patch 4/5
> Moved dev_invalidate_vrings after free_mem_region, array compaction, and
> nregions decrement. This ensures translate_ring_addresses only sees
> surviving memory regions, preventing vring pointers from resolving into
> a region that is about to be unmapped.
>
> Version v9: Incorporate code review suggestions from Stephen Hemminger.
> Patch 3/5
> Restored max_guest_pages initial value to hardcoded 8 instead of
> VHOST_MEMORY_MAX_NREGIONS, matching upstream semantics.
> Patch 4/5
> Added close(reg->fd) and reg->fd = -1 before goto close_msg_fds in the
> mmap failure path to fix fd leak after fd was moved from ctx->fds[0].
> Converted dev_invalidate_vrings from a plain function to a macro +
> implementation function pair, accepting message ID as a parameter so
> the static_assert reports the correct handler at each call site.
> Updated dev_invalidate_vrings call in add_mem_reg to pass
> VHOST_USER_ADD_MEM_REG as message ID.
> Updated dev_invalidate_vrings call in rem_mem_reg to pass
> VHOST_USER_REM_MEM_REG as message ID.
>
> Version v8:  Incorporate code review suggestions from Stephen Hemminger.
> rewrite async_dma_map_region function to iterate guest pages by host
> address range matching
> change function dev_invalidate_vrings to accept a double pointer to
> propagate pointer updates
> new function remove_guest_pages was added
> add_mem_reg error path was narrowed to only clean up the single failed
> region instead of destroting all existing regions
>
> Version v7: Incorporate code review suggestions from Maxime Coquelin.
> Add debug messages to vhost_postcopy_register function.
>
> Version v6: Added the enablement of this feature as a final patch in
> this patch-set and other code optimizations as suggested by Maxime
> Coquelin.
>
> Version v5: removed the patch that increased the number of memory regions
> from 8 to 128. This will be submitted as a separate feature at a later
> point after incorporating additional optimizations. Also includes code
> optimizations as suggested by Feng Cheng Wen.
>
> Version v4: code optimizations as suggested by Feng Cheng Wen.
>
> Version v3: code optimizations as suggested by Maxime Coquelin
> and Thomas Monjalon.
>
> Version v2: code optimizations as suggested by Maxime Coquelin.
>
> Version v1: Initial patch set.
>
> Pravin M Bathija (5):
>   vhost: add user to mailmap and define to vhost hdr
>   vhost: header defines for add/rem mem region
>   vhost: refactor memory helper functions
>   vhost: add mem region add/remove handlers
>   vhost: enable configure memory slots
>
>  .mailmap               |   1 +
>  lib/vhost/rte_vhost.h  |   4 +
>  lib/vhost/vhost_user.c | 438 +++++++++++++++++++++++++++++++++++------
>  lib/vhost/vhost_user.h |  10 +
>  4 files changed, 391 insertions(+), 62 deletions(-)
>
> --
> 2.43.0
>

Applied to next-virtio/for-next-net.

Thanks,
Maxime


^ permalink raw reply

* Re: [PATCH v4 5/5] eal: avoid deadlock in async IPC alarm callback
From: Burakov, Anatoly @ 2026-06-09  8:04 UTC (permalink / raw)
  To: dev, Jianfeng Tan
In-Reply-To: <c5284e2f5e9fb7d664ab65115cac2634c93aa510.1780669755.git.anatoly.burakov@intel.com>

On 6/5/2026 4:29 PM, Anatoly Burakov wrote:
> async_reply_handle_thread_unsafe() can run while holding
> pending_requests.lock and currently calls rte_eal_alarm_cancel().
> 
> rte_eal_alarm_cancel() may spin-wait for an executing callback, which can
> deadlock if that callback is blocked on the same lock.
> 
> Remove callback-side alarm cancellation. It is safe to do so, because any
> callback triggered without a pending request becomes a noop.
> 
> Fixes: daf9bfca717e ("ipc: remove thread for async requests")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---

Okay, the AI review seems to keep flagging issues that are technically 
true in the patches, but are intentional and do get better once the 
complete patchset is applied.

Looks like I need to merge some of the patches or rethink the order in 
which the fixes are applied to avoid these issues.

-- 
Thanks,
Anatoly

^ permalink raw reply

* Re: [PATCH 1/1] buildtools: remove absolute paths from pc file
From: Bruce Richardson @ 2026-06-09  8:09 UTC (permalink / raw)
  To: Srikanth Yalavarthi; +Cc: dev
In-Reply-To: <aifFFS9gvRn9JYKg@bricha3-mobl1.ger.corp.intel.com>

On Tue, Jun 09, 2026 at 08:47:33AM +0100, Bruce Richardson wrote:
> On Tue, Jun 09, 2026 at 10:02:20AM +0530, Srikanth Yalavarthi wrote:
> > When linking with non-versioned libraries, absolute paths
> > of the libraries are added to libdpdk.pc. This patch replaces
> > the absolute path with correct linker flags, -l<libname>.
> > 
> 
> Do we need to check if we need a "-L" flag for some of these paths that are
> stripped?
> 
> > https://github.com/mesonbuild/meson/issues/7766
> > 
The bug report indicates that this issue only occurs for some libs which
are missing an SONAME. Checking the .pc files generated on my own system, I
don't see any libs listed with full paths. Out of interest, what libraries
are causing problems? (Alternative question - how can we reproduce this
issue to check the fix :-) )

Thanks,
/Bruce

^ permalink raw reply

* RE: [PATCH] net/iavf: fix misleading AQ failure logging
From: Loftus, Ciara @ 2026-06-09  8:13 UTC (permalink / raw)
  To: Mandal, Anurag, dev@dpdk.org
  Cc: Richardson, Bruce, Medvedkin, Vladimir, stable@dpdk.org
In-Reply-To: <20260608171559.355521-1-anurag.mandal@intel.com>

> Subject: [PATCH] net/iavf: fix misleading AQ failure logging
> 
> iavf_handle_virtchnl_msg() drains the admin receive queue in a loop
> until iavf_clean_arq_element() reports that no descriptors are
> pending. When the queue becomes empty, the base driver returns
> IAVF_ERR_ADMIN_QUEUE_NO_WORK (-57), which is the documented
> terminator for the drain loop, and is not an error.
> 
> The current loop treats every non-IAVF_SUCCESS return as a failure
> and logs it as follows:
> 
> "Failed to read msg from AdminQ, ret: -57"
> 
> This message floods the logs on every interrupt cycle and misleads
> the triage during VF reset by chasing a real virtchnl problem
> seeing these spurious -57 AQ failure lines in logs and assumes
> the admin queue is broken, when in fact it has just been drained.
> 
> This patch fixes the aforesaid issue by treating
> IAVF_ERR_ADMIN_QUEUE_NO_WORK in virtchnl message drain as a normal
> loop exit empty-queue condition and avoid logging it as an misleading
> AQ failure.
> 
> Fixes: 02d212ca3125 ("net/iavf: rename remaining avf strings")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Anurag Mandal <anurag.mandal@intel.com>
> ---
>  drivers/net/intel/iavf/iavf_vchnl.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/intel/iavf/iavf_vchnl.c
> b/drivers/net/intel/iavf/iavf_vchnl.c
> index 94ccfb5d6e..870d5c1820 100644
> --- a/drivers/net/intel/iavf/iavf_vchnl.c
> +++ b/drivers/net/intel/iavf/iavf_vchnl.c
> @@ -570,7 +570,15 @@ iavf_handle_virtchnl_msg(struct rte_eth_dev *dev)
>  	while (pending) {
>  		ret = iavf_clean_arq_element(hw, &info, &pending);
> 
> -		if (ret != IAVF_SUCCESS) {
> +		/*
> +		 * IAVF_ERR_ADMIN_QUEUE_NO_WORK (-57) means AQ is
> empty
> +		 * and is a normal way to terminate the drain loop.
> +		 * Log error only for genuine other failure codes.
> +		 * Incorrect logging like this during VF resets might
> +		 * mislead into chasing a non-existent AQ failure.
> +		 */
> +		if (ret != IAVF_SUCCESS &&
> +		    ret != IAVF_ERR_ADMIN_QUEUE_NO_WORK) {
>  			PMD_DRV_LOG(INFO, "Failed to read msg from
> AdminQ,"
>  				    "ret: %d", ret);
>  			break;
> --

I agree we should suppress the log on ret=NO_WORK but I
think we should still break instead of proceeding with the
message handling code. With your changes, in place of the
log:
	IAVF_DRIVER: iavf_handle_virtchnl_msg(): Failed to read msg from AdminQ,ret: -57
I now see:
	IAVF_DRIVER: iavf_handle_virtchnl_msg(): Request 0 is not supported yet

I think that's because we enter the message handling code
and arrive at the default case in the switch statement.


^ permalink raw reply

* Re: [PATCH v14 00/20] net/sxe2: added Linkdata sxe2 ethernet driver
From: Thomas Monjalon @ 2026-06-09  8:42 UTC (permalink / raw)
  To: Jie Liu; +Cc: stephen, dev
In-Reply-To: <20260609013951.3359199-1-liujie5@linkdatatechnology.com>

09/06/2026 03:39, liujie5@linkdatatechnology.com:
> From: Jie Liu <liujie5@linkdatatechnology.com>
> 
> This patch set implements core functionality for the SXE2 PMD,
> including basic driver framework, data path setup, and advanced
> offload features (VLAN, RSS,TM, PTP etc.).
> 
> V14:
>  - Addressed AI comments

Please could you send your new series as a reply of the v1 cover letter?
It would avoid having a large indent in mail clients.

Also I'm still waiting for a reply to my question about the need
for drivers/common/sxe2/.
I'm not going to pull any sxe2 patch into main until you explain.



^ permalink raw reply

* Re: [PATCH v8 2/4] examples/ptp_tap_relay_sw: add PTP software transparent clock relay
From: Thomas Monjalon @ 2026-06-09  8:52 UTC (permalink / raw)
  To: Rajesh Kumar; +Cc: dev, bruce.richardson, aman.deep.singh, stephen, mb
In-Reply-To: <20260509232551.2844201-3-rajesh3.kumar@intel.com>

10/05/2026 01:25, Rajesh Kumar:
> Add a new example application demonstrating a software PTP Transparent
> Clock relay between a DPDK-bound physical NIC and a Linux kernel TAP
> virtual interface.
[...]
>  doc/guides/sample_app_ug/index.rst            |   1 +
>  doc/guides/sample_app_ug/ptp_tap_relay_sw.rst | 212 +++++++++
>  examples/ptp_tap_relay_sw/Makefile            |  41 ++
>  examples/ptp_tap_relay_sw/meson.build         |  13 +
>  examples/ptp_tap_relay_sw/ptp_parse.h         | 211 +++++++++
>  examples/ptp_tap_relay_sw/ptp_tap_relay_sw.c  | 432 ++++++++++++++++++
>  6 files changed, 910 insertions(+)

You didn't update the file MAINTAINERS.
I assume you will be the maintainer for this new example?
I will update when merging.



^ permalink raw reply

* Re: [PATCH] Windows: fix core count on NUMA with more than 64 cores per node
From: David Marchand @ 2026-06-09  8:52 UTC (permalink / raw)
  To: Andre Muezerie; +Cc: Dmitry Kozlyuk, dev, Gena Tertychnyi
In-Reply-To: <20260513235518.408895-1-andremue@linux.microsoft.com>

On Thu, 14 May 2026 at 01:56, Andre Muezerie
<andremue@linux.microsoft.com> wrote:
>
> From: Gena Tertychnyi <genter@microsoft.com>
>
> Fix specific to Windows NUMA machines with more than 64 cores per node
> (e.g. 2 NUMAs with 128 cores each):
>
> - NumaNode.GroupMasks[] array is used instead of NumaNode.GroupMask.
> - RelationAll is used instead of RelationNumaNode when calling
> GetLogicalProcessorInformationEx because RelationAll returns the full
> multi-group NUMA affinity as RelationNumaNode returns only the NUMA
> node's primary group.
>
> Signed-off-by: Gena Tertychnyi <genter@microsoft.com>
> Signed-off-by: Andre Muezerie <andremue@linux.microsoft.com>

Applied with Dmitry suggestion on the Fixes: tag.
Thanks.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH] Remove redundant simpler equivalent section
From: David Marchand @ 2026-06-09  8:53 UTC (permalink / raw)
  To: Arin Kharkar; +Cc: dev
In-Reply-To: <20260512191651.126274-1-arinkharkar@gmail.com>

On Wed, 13 May 2026 at 14:35, Arin Kharkar <arinkharkar@gmail.com> wrote:
>
> Fixed outdated documentation on the hello world doc, which incorrectly stated an easier way to launch the lcore_hello function. The example program uses the simpler version and the documentation stating it as an "equivalent and simpler" alternative is moot. It is now the default.
>
> Signed-off-by: Arin Kharkar <arinkharkar@gmail.com>
> ---
>  doc/guides/sample_app_ug/hello_world.rst | 8 --------
>  examples/helloworld/main.c               | 4 +---
>  2 files changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/doc/guides/sample_app_ug/hello_world.rst b/doc/guides/sample_app_ug/hello_world.rst
> index 5bfd4b3fda..b7167aa345 100644
> --- a/doc/guides/sample_app_ug/hello_world.rst
> +++ b/doc/guides/sample_app_ug/hello_world.rst
> @@ -70,12 +70,4 @@ The code that launches the function on each lcore is as follows:
>      :end-before: >8 End of launching the function on each lcore.
>      :dedent: 1
>
> -The following code is equivalent and simpler:
> -
> -.. literalinclude:: ../../../examples/helloworld/main.c
> -    :language: c
> -    :start-after: Simpler equivalent. 8<
> -    :end-before: >8 End of simpler equivalent.
> -    :dedent: 2
> -
>  Refer to the *DPDK API Reference* for detailed information on the rte_eal_mp_remote_launch() function.
> diff --git a/examples/helloworld/main.c b/examples/helloworld/main.c
> index af509138da..8d1a959c58 100644
> --- a/examples/helloworld/main.c
> +++ b/examples/helloworld/main.c
> @@ -40,13 +40,11 @@ main(int argc, char **argv)
>
>         /* Launches the function on each lcore. 8< */
>         RTE_LCORE_FOREACH_WORKER(lcore_id) {
> -               /* Simpler equivalent. 8< */
>                 rte_eal_remote_launch(lcore_hello, NULL, lcore_id);
> -               /* >8 End of simpler equivalent. */
>         }
>
>         /* call it on main lcore too */
> -       lcore_hello(NULL);
> +        lcore_hello(NULL);

Unneeded change, which I dropped when applying.

>         /* >8 End of launching the function on each lcore. */
>
>         rte_eal_mp_wait_lcore();


Applied, thanks.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH] eal: update comment for eal_get_virtual_area()
From: David Marchand @ 2026-06-09  9:02 UTC (permalink / raw)
  To: Marcel Telka; +Cc: dev, Anatoly Burakov
In-Reply-To: <20251219191554.939982-1-marcel@telka.sk>

On Fri, 19 Dec 2025 at 20:16, Marcel Telka <marcel@telka.sk> wrote:
>
> Bugzilla ID: 1853
>
> Signed-off-by: Marcel Telka <marcel@telka.sk>

I added some commitlog based on your description in the bugzilla.
Applied, thanks.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH v3] raw/ifpga: replace printf calls with logging
From: David Marchand @ 2026-06-09  9:05 UTC (permalink / raw)
  To: Weijun Pan; +Cc: Rosen Xu, dev, Weijun Pan, Bruce Richardson
In-Reply-To: <20260410162826.15485-1-wpan36@wisc.edu>

On Sat, 11 Apr 2026 at 15:58, Weijun Pan <wpan3636@gmail.com> wrote:
>
> The ifpga rawdev driver uses printf() directly for runtime messages.
> DPDK drivers should use the logging framework instead of printing
> to standard output.
>
> Replace the remaining direct printf() calls in ifpga_rawdev.c with
> the driver logging macros.
>
> Signed-off-by: Weijun Pan <wpan36@wisc.edu>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied, thanks.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH v8 2/4] examples/ptp_tap_relay_sw: add PTP software transparent clock relay
From: Thomas Monjalon @ 2026-06-09  9:15 UTC (permalink / raw)
  To: Rajesh Kumar; +Cc: dev, bruce.richardson, aman.deep.singh, stephen, mb
In-Reply-To: <FtOw8lUNTi2iReVfgCFy-Q@monjalon.net>

09/06/2026 10:52, Thomas Monjalon:
> 10/05/2026 01:25, Rajesh Kumar:
> > Add a new example application demonstrating a software PTP Transparent
> > Clock relay between a DPDK-bound physical NIC and a Linux kernel TAP
> > virtual interface.
> [...]
> >  doc/guides/sample_app_ug/index.rst            |   1 +
> >  doc/guides/sample_app_ug/ptp_tap_relay_sw.rst | 212 +++++++++
> >  examples/ptp_tap_relay_sw/Makefile            |  41 ++
> >  examples/ptp_tap_relay_sw/meson.build         |  13 +
> >  examples/ptp_tap_relay_sw/ptp_parse.h         | 211 +++++++++
> >  examples/ptp_tap_relay_sw/ptp_tap_relay_sw.c  | 432 ++++++++++++++++++
> >  6 files changed, 910 insertions(+)
> 
> You didn't update the file MAINTAINERS.
> I assume you will be the maintainer for this new example?
> I will update when merging.

Sorry I see you did the update in the lib patch.



^ permalink raw reply

* Re: [PATCH] eal: add destructor to unregister tailq on unload
From: David Marchand @ 2026-06-09  9:18 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, stable, Neil Horman
In-Reply-To: <20260607150418.30885-1-stephen@networkplumber.org>

On Sun, 7 Jun 2026 at 17:04, Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
> Libraries that use EAL_REGISTER_TAILQ insert a pointer to a static
> struct rte_tailq_elem into the process-local tailq list via a
> constructor, but have no matching destructor. When such a library
> is loaded as a dependency of a plugin via dlopen() and later
> unloaded via dlclose(), the list retains a dangling pointer to the
> now-unmapped static. Reloading the plugin crashes in
> rte_eal_tailq_local_register() when it traverses the stale entry.
>
> Add rte_eal_tailq_unregister() and extend the EAL_REGISTER_TAILQ
> macro to emit an RTE_FINI destructor alongside the existing
> RTE_INIT constructor. Every library that uses the macro
> automatically gets both sides; no per-library changes are needed.
>
> Bugzilla ID: 1081
> Fixes: 873a61c7526b ("tailq: introduce dynamic register system")
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  lib/eal/common/eal_common_tailqs.c |  8 ++++++++
>  lib/eal/include/rte_tailq.h        | 17 +++++++++++++++++
>  2 files changed, 25 insertions(+)
>
> diff --git a/lib/eal/common/eal_common_tailqs.c b/lib/eal/common/eal_common_tailqs.c
> index c581f43b6f..714f91d0ec 100644
> --- a/lib/eal/common/eal_common_tailqs.c
> +++ b/lib/eal/common/eal_common_tailqs.c
> @@ -148,6 +148,14 @@ rte_eal_tailq_register(struct rte_tailq_elem *t)
>         return -1;
>  }
>
> +RTE_EXPORT_SYMBOL(rte_eal_tailq_unregister)
> +void
> +rte_eal_tailq_unregister(struct rte_tailq_elem *t)
> +{
> +       TAILQ_REMOVE(&rte_tailq_elem_head, t, next);
> +       t->head = NULL;
> +}

This cleans up the local storage which is good, but it leaves an entry
reserved in the mcfg->tailq_head[] array.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH v2] net/mlx5: fix counter TAILQ race between free and query callback
From: Dariusz Sosnowski @ 2026-06-09  9:22 UTC (permalink / raw)
  To: Linhu Li; +Cc: dev, stable, rasland
In-Reply-To: <20260608132555.31439-1-lilinhu618@gmail.com>

On Mon, Jun 08, 2026 at 09:25:55PM +0800, Linhu Li wrote:
> flow_dv_counter_free() inserts counters into
> pool->counters[pool->query_gen] under pool->csl. Meanwhile,
> mlx5_flow_async_pool_query_handle() moves counters from
> pool->counters[query_gen ^ 1] to the global free list via
> TAILQ_CONCAT while holding only cmng->csl, not pool->csl.
> 
> The comment in flow_dv_counter_free() claims the lock is not needed
> because the query callback and the release function operate on
> different lists. That holds only if the free path always observes
> the up-to-date query_gen. It can be violated:
> 
> 1. A counter free thread (non-PMD, e.g. OVS offload thread) reads
>    pool->query_gen == 0 and is about to insert into counters[0].
> 2. The free thread is preempted by the OS scheduler; it is a regular
>    pthread, not pinned to a core.
> 3. The eal-intr-thread alarm fires: query_gen++ (now 1) and the async
>    query is sent.
> 4. Hardware completes the query and the callback runs TAILQ_CONCAT on
>    counters[0] (= query_gen ^ 1).
> 5. The free thread resumes and runs TAILQ_INSERT_TAIL on counters[0]
>    concurrently with step 4 on another core.
> 
> Because the two paths take different locks, TAILQ_INSERT_TAIL and
> TAILQ_CONCAT run concurrently on the same list with no
> synchronization and corrupt it: the pool-local list ends up with a
> NULL head but a dangling tqh_last, and the global free list tail no
> longer points to the real tail. The just-freed counter and every
> counter inserted afterwards become unreachable and are leaked.
> 
> Non-PMD threads can be preempted for hundreds of microseconds under
> CPU pressure, which is well within the async query round-trip time,
> so the window is reachable in practice.
> 
> Fix it by taking pool->csl in the query completion callback before
> operating on pool->counters[query_gen], serializing the CONCAT with
> any concurrent INSERT. The lock is taken once per pool per query
> completion in the eal-intr-thread context, not on the datapath, so
> the cost is negligible. Lock order is pool->csl then cmng->csl,
> matching all other sites.
> 
> Also handle the error path: previously the counters accumulated in
> pool->counters[query_gen] were abandoned when a query failed. Move
> them back to the global free list to avoid a leak on persistent
> query failures.
> 
> Fixes: ac79183dc6f7 ("net/mlx5: optimize free counter lookup")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Linhu Li <lilinhu618@gmail.com>

Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>

^ permalink raw reply

* Re: [PATCH] eal: fix function versioning with LTO
From: David Marchand @ 2026-06-09  9:23 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, stable, Thomas Monjalon
In-Reply-To: <20260605111233.725bb792@phoenix.local>

On Fri, 5 Jun 2026 at 20:12, Stephen Hemminger
<stephen@networkplumber.org> wrote:
> >
> > Looking at bugzilla, we had various fixes for LTO over the years.
> > We still have one open bz btw: https://bugs.dpdk.org/show_bug.cgi?id=1709
>
> That bug was fixed a while back. It required addition of hints (__rte_assume)

I have trouble identifying the changes.
Please close the 1709 bugzilla with a mention of those changes.

> > > > LTO is kind of experimental, so it seems good enough to reply "not
> > > > expected to work in older LTS" if someone reported an issue.
> > > >
> > > > And in practice, no LTS release call the versioning macros, since a
> > > > LTS drops all compatibility.
> >
> > Just to be clear, we don't need fixing the macros in LTS: every time
> > we prepare a LTS rc0, we drop any kind of symbol compat.
>
> Agree, this is not LTS related
>
> > > >
> > > > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> > > >
> > > > I would like to reproduce, but I can't build main with LTO.
> > > > What patches did you apply locally to avoid warnings on the hash library?
> > > I use Debian testing and GCC 15 but shows up on older versions as well
> > > I get no warnings building main
> >
> > Building from scratch, I do avoid the warnings I hit yesterday.
> >
> > The fix looks correct, my problem is with the form.
> > Fixes: tags accuracy is important.
> > And I prefer we stick to "It is not broken, don't fix it".
>
> Could argue it is a GCC bug, and applying their desired workaround :-)

Indeed, but the end results is the same for me :-)

Can you send a v2?
Thanks.


-- 
David Marchand


^ permalink raw reply

* Re: [PATCH 1/2] eal: return error on devargs truncation in hotplug MP messages
From: David Marchand @ 2026-06-09  9:30 UTC (permalink / raw)
  To: Long Li; +Cc: dev, bruce.richardson, stephen, Burakov, Anatoly
In-Reply-To: <20260325014506.1866374-1-longli@microsoft.com>

On Wed, 25 Mar 2026 at 02:45, Long Li <longli@microsoft.com> wrote:
>
> The EAL hotplug multi-process messaging uses a fixed-size buffer
> (EAL_DEV_MP_DEV_ARGS_MAX_LEN, 128 bytes) for device arguments.
> When devargs exceeds this limit, strlcpy silently truncates the
> string. This causes secondary processes to receive incomplete
> devargs during hotplug re-add, leading to failed port
> re-initialization.
>
> For example, a MANA PCI device with 6 mac= arguments:
>
>   mac=AA:BB:CC:DD:EE:01,mac=AA:BB:CC:DD:EE:02,
>   mac=AA:BB:CC:DD:EE:03,mac=AA:BB:CC:DD:EE:04,
>   mac=AA:BB:CC:DD:EE:05,mac=AA:BB:CC:DD:EE:06
>
> produces a 131-byte devargs string that gets silently truncated
> to 127 bytes, losing the last MAC address.
>
> Return -E2BIG from rte_dev_probe() and rte_dev_remove() when
> devargs would be truncated, instead of silently corrupting data.
>
> Signed-off-by: Long Li <longli@microsoft.com>

Worth a Fixes: tag and Cc: stable.

> ---
>  lib/eal/common/eal_common_dev.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/lib/eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c
> index 7185de0cb9..de24d14d28 100644
> --- a/lib/eal/common/eal_common_dev.c
> +++ b/lib/eal/common/eal_common_dev.c
> @@ -250,6 +250,11 @@ rte_dev_probe(const char *devargs)
>
>         memset(&req, 0, sizeof(req));
>         req.t = EAL_DEV_REQ_TYPE_ATTACH;
> +       if (strlen(devargs) >= EAL_DEV_MP_DEV_ARGS_MAX_LEN) {
> +               EAL_LOG(ERR, "devargs truncated (len %zu, max %d)",
> +                       strlen(devargs), EAL_DEV_MP_DEV_ARGS_MAX_LEN);
> +               return -E2BIG;
> +       }
>         strlcpy(req.devargs, devargs, EAL_DEV_MP_DEV_ARGS_MAX_LEN);

Please move the check before the memset().

>
>         if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> @@ -397,6 +402,12 @@ rte_dev_remove(struct rte_device *dev)
>
>         memset(&req, 0, sizeof(req));
>         req.t = EAL_DEV_REQ_TYPE_DETACH;
> +       if (strlen(devargs) >= EAL_DEV_MP_DEV_ARGS_MAX_LEN) {
> +               EAL_LOG(ERR, "devargs truncated (len %zu, max %d)",
> +                       strlen(devargs), EAL_DEV_MP_DEV_ARGS_MAX_LEN);
> +               free(devargs);
> +               return -E2BIG;
> +       }
>         strlcpy(req.devargs, devargs, EAL_DEV_MP_DEV_ARGS_MAX_LEN);
>         free(devargs);
>

Why do we need to validate devargs on cleanup?
Its length should have been validated during probe.


-- 
David Marchand


^ permalink raw reply

* Re: Re: [PATCH v14 00/20] net/sxe2: added Linkdata sxe2 ethernet driver
From: liujie5 @ 2026-06-09  9:36 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: stephen, dev
In-Reply-To: <20260609013951.3359199-1-liujie5@linkdatatechnology.com>

[-- Attachment #1: Type: text/plain, Size: 619 bytes --]

09/06/2026 03:39, liujie5@linkdatatechnology.com:
> From: Jie Liu <liujie5@linkdatatechnology.com>
> 
> This patch set implements core functionality for the SXE2 PMD,
> including basic driver framework, data path setup, and advanced
> offload features (VLAN, RSS,TM, PTP etc.).
> 
> V14:
>  - Addressed AI comments

Please could you send your new series as a reply of the v1 cover letter?
It would avoid having a large indent in mail clients.

Also I'm still waiting for a reply to my question about the need
for drivers/common/sxe2/.
I'm not going to pull any sxe2 patch into main until you explain.


[-- Attachment #2: Type: text/html, Size: 4094 bytes --]

^ permalink raw reply

* Re: Re: [PATCH v14 00/20] net/sxe2: added Linkdata sxe2 ethernet driver
From: liujie5 @ 2026-06-09  9:48 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: stephen, dev
In-Reply-To: <T4eYjXumTvWFDg9HUrMwEA@monjalon.net>

[-- Attachment #1: Type: text/plain, Size: 2481 bytes --]

Hi Thomas Monjalon,

Thank you for your review and for guiding me on the mailing list workflow.

> Please could you send your new series as a reply of the v1 cover letter?
> It would avoid having a large indent in mail clients.

Got it. I will configure git send-email with "--in-reply-to" bound to the 
v1 cover letter Message-ID for the next version of this patch set. 
Apologies for the inconvenience caused by the deep threading.

> Also I'm still waiting for a reply to my question about the need
> for drivers/common/sxe2/.
> I'm not going to pull any sxe2 patch into main until you explain.

Regarding the necessity of the "drivers/common/sxe2/" directory, the sxe2 
hardware architecture is designed to support both standard NIC and vDPA 
(vHost Data Path Acceleration) functionalities. 

The code currently placed in "drivers/common/sxe2/" contains the foundational 
Hardware Abstraction Layer (HAL), firmware interfaces (AdminQ), and common 
register definitions. 

Apart from the "net/sxe2" PMD in this series, we are actively implementing the 
"vdpa/sxe2" driver, which will be submitted in a subsequent patch set. Both the 
"net/sxe2" and "vdpa/sxe2" drivers strictly depend on this shared common HAL 
layer to manage the same hardware core. Separating this code into "drivers/common/" 
is essential to prevent massive code duplication between the net and vdpa 
subsystems in the near future.

Please let me know if this clarifies your concern. Once confirmed, I will 
send out the updated v15 series as a reply to the v1 cover letter immediately.

Best regards,
Jie Liu (liujie5@linkdatatechnology.com)
 


liujie5@linkdatatechnology.com
 
From: Thomas Monjalon
Date: 2026-06-09 16:42
To: Jie Liu
CC: stephen; dev
Subject: Re: [PATCH v14 00/20] net/sxe2: added Linkdata sxe2 ethernet driver
09/06/2026 03:39, liujie5@linkdatatechnology.com: 
> From: Jie Liu <liujie5@linkdatatechnology.com> 
> 
> This patch set implements core functionality for the SXE2 PMD, 
> including basic driver framework, data path setup, and advanced 
> offload features (VLAN, RSS,TM, PTP etc.). 
> 
> V14: 
>  - Addressed AI comments 

Please could you send your new series as a reply of the v1 cover letter? 
It would avoid having a large indent in mail clients. 

Also I'm still waiting for a reply to my question about the need 
for drivers/common/sxe2/. 
I'm not going to pull any sxe2 patch into main until you explain. 


[-- Attachment #2: Type: text/html, Size: 4440 bytes --]

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox