From cc31e5f5b349ba47c052648f3c529225f97962c0 Mon Sep 17 00:00:00 2001 From: Nick Quarton <139178705+nquarton@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:43:01 -0700 Subject: [PATCH] Adding LMS verify service to runtime (#1420) --- Cargo.lock | 1 + api/src/mailbox.rs | 25 + error/src/lib.rs | 5 + runtime/Cargo.toml | 1 + runtime/doc/test-coverage.md | 7 + runtime/src/lib.rs | 3 +- runtime/src/verify.rs | 78 +- .../tests/runtime_integration_tests/main.rs | 1 + .../runtime_integration_tests/test_lms.rs | 921 ++++++++++++++++++ 9 files changed, 1037 insertions(+), 5 deletions(-) create mode 100644 runtime/tests/runtime_integration_tests/test_lms.rs diff --git a/Cargo.lock b/Cargo.lock index c700493d2c..07788acf8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -744,6 +744,7 @@ dependencies = [ "caliptra-image-types", "caliptra-image-verify", "caliptra-kat", + "caliptra-lms-types", "caliptra-registers", "caliptra-x509", "caliptra_common", diff --git a/api/src/mailbox.rs b/api/src/mailbox.rs index 30e5aa5d02..a0308b3702 100644 --- a/api/src/mailbox.rs +++ b/api/src/mailbox.rs @@ -16,6 +16,7 @@ impl CommandId { pub const GET_FMC_ALIAS_CERT: Self = Self(0x43455246); // "CERF" pub const GET_RT_ALIAS_CERT: Self = Self(0x43455252); // "CERR" pub const ECDSA384_VERIFY: Self = Self(0x53494756); // "SIGV" + pub const LMS_VERIFY: Self = Self(0x4C4D5356); // "LMSV" pub const STASH_MEASUREMENT: Self = Self(0x4D454153); // "MEAS" pub const INVOKE_DPE: Self = Self(0x44504543); // "DPEC" pub const DISABLE_ATTESTATION: Self = Self(0x4453424C); // "DSBL" @@ -218,6 +219,7 @@ impl Default for MailboxResp { #[allow(clippy::large_enum_variant)] pub enum MailboxReq { EcdsaVerify(EcdsaVerifyReq), + LmsVerify(LmsVerifyReq), GetLdevCert(GetLdevCertReq), StashMeasurement(StashMeasurementReq), InvokeDpeCommand(InvokeDpeReq), @@ -240,6 +242,7 @@ impl MailboxReq { pub fn as_bytes(&self) -> CaliptraResult<&[u8]> { match self { MailboxReq::EcdsaVerify(req) => Ok(req.as_bytes()), + MailboxReq::LmsVerify(req) => Ok(req.as_bytes()), MailboxReq::StashMeasurement(req) => Ok(req.as_bytes()), MailboxReq::InvokeDpeCommand(req) => req.as_bytes_partial(), MailboxReq::FipsVersion(req) => Ok(req.as_bytes()), @@ -262,6 +265,7 @@ impl MailboxReq { pub fn as_bytes_mut(&mut self) -> CaliptraResult<&mut [u8]> { match self { MailboxReq::EcdsaVerify(req) => Ok(req.as_bytes_mut()), + MailboxReq::LmsVerify(req) => Ok(req.as_bytes_mut()), MailboxReq::GetLdevCert(req) => Ok(req.as_bytes_mut()), MailboxReq::StashMeasurement(req) => Ok(req.as_bytes_mut()), MailboxReq::InvokeDpeCommand(req) => req.as_bytes_partial_mut(), @@ -284,6 +288,7 @@ impl MailboxReq { pub fn cmd_code(&self) -> CommandId { match self { MailboxReq::EcdsaVerify(_) => CommandId::ECDSA384_VERIFY, + MailboxReq::LmsVerify(_) => CommandId::LMS_VERIFY, MailboxReq::GetLdevCert(_) => CommandId::GET_LDEV_CERT, MailboxReq::StashMeasurement(_) => CommandId::STASH_MEASUREMENT, MailboxReq::InvokeDpeCommand(_) => CommandId::INVOKE_DPE, @@ -512,6 +517,26 @@ impl Request for EcdsaVerifyReq { } // No command-specific output args +// LMS_SIGNATURE_VERIFY +#[repr(C)] +#[derive(Debug, AsBytes, FromBytes, PartialEq, Eq)] +pub struct LmsVerifyReq { + pub hdr: MailboxReqHeader, + pub pub_key_tree_type: u32, + pub pub_key_ots_type: u32, + pub pub_key_id: [u8; 16], + pub pub_key_digest: [u8; 24], + pub signature_q: u32, + pub signature_ots: [u8; 1252], + pub signature_tree_type: u32, + pub signature_tree_path: [u8; 360], +} +impl Request for LmsVerifyReq { + const ID: CommandId = CommandId::LMS_VERIFY; + type Resp = MailboxRespHeader; +} +// No command-specific output args + // STASH_MEASUREMENT #[repr(C)] #[derive(Debug, AsBytes, FromBytes, PartialEq, Eq)] diff --git a/error/src/lib.rs b/error/src/lib.rs index 2ba1718d1d..1f76a97beb 100644 --- a/error/src/lib.rs +++ b/error/src/lib.rs @@ -414,6 +414,11 @@ impl CaliptraError { CaliptraError::new_const(0x000E0040); pub const RUNTIME_DPE_RESPONSE_SERIALIZATION_FAILED: CaliptraError = CaliptraError::new_const(0x000E0041); + pub const RUNTIME_LMS_VERIFY_FAILED: CaliptraError = CaliptraError::new_const(0x000E0042); + pub const RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM: CaliptraError = + CaliptraError::new_const(0x000E0043); + pub const RUNTIME_LMS_VERIFY_INVALID_LMOTS_ALGORITHM: CaliptraError = + CaliptraError::new_const(0x000E0044); /// FMC Errors pub const FMC_GLOBAL_NMI: CaliptraError = CaliptraError::new_const(0x000F0001); diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 7fbb52dff9..0c9062b250 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -14,6 +14,7 @@ caliptra-drivers = { workspace = true, features = ["runtime"] } caliptra-error = { workspace = true, default-features = false } caliptra-image-types = { workspace = true, default-features = false } caliptra-kat.workspace = true +caliptra-lms-types.workspace = true caliptra-registers.workspace = true caliptra-x509 = { workspace = true, default-features = false } dpe.workspace = true diff --git a/runtime/doc/test-coverage.md b/runtime/doc/test-coverage.md index 3f649e47ca..b7132d5c85 100644 --- a/runtime/doc/test-coverage.md +++ b/runtime/doc/test-coverage.md @@ -56,6 +56,13 @@ Test Scenario| Test Name | Runtime Error Code Tests some common ECDSA problems | **ecdsa_cmd_run_wycheproof** | N/A Streams a test message to a hashing accelerator and calls the ecdsa_verify mailbox command to verify the test signature | **test_ecdsa_verify_cmd** | N/A Checks that the ecdsa_verify mailbox command fails if provided an invalid checksum | **test_ecdsa_verify_bad_chksum** | RUNTIME_INVALID_CHECKSUM +Streams 2 different test messages to the SHA accelerator and calls the lms_signature_verify mailbox command to verify several test signatures for each message | **test_lms_verify_cmd** | N/A +Checks that the lms_signature_verify mailbox command correctly returns an error for an invalid LMS signature | **test_lms_verify_failure** | RUNTIME_LMS_VERIFY_FAILED +Checks that the correct error is returned when an unsupported LMS algorithm type is provided in the signature to the lms_signature_verify mailbox command | **test_lms_verify_invalid_sig_lms_type** | RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM +Checks that the correct error is returned when an unsupported LMS algorithm type is provided in the public key to the lms_signature_verify mailbox command | **test_lms_verify_invalid_key_lms_type** | RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM +Checks that the correct error is returned when an unsupported LMS OTS algorithm type is provided to the lms_signature_verify mailbox command | **test_lms_verify_invalid_lmots_type** | RUNTIME_LMS_VERIFY_INVALID_LMOTS_ALGORITHM + +

# **Populate IDev Tests** diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index c1c794bb04..03a1cbf9a6 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -57,7 +57,7 @@ pub use info::{FwInfoCmd, IDevIdInfoCmd}; pub use invoke_dpe::InvokeDpeCmd; pub use pcr::IncrementPcrResetCounterCmd; pub use stash_measurement::StashMeasurementCmd; -pub use verify::EcdsaVerifyCmd; +pub use verify::{EcdsaVerifyCmd, LmsVerifyCmd}; pub mod packet; use caliptra_common::mailbox_api::{CommandId, MailboxResp}; use packet::Packet; @@ -172,6 +172,7 @@ fn handle_command(drivers: &mut Drivers) -> CaliptraResult { CommandId::GET_LDEV_CERT => GetLdevCertCmd::execute(drivers), CommandId::INVOKE_DPE => InvokeDpeCmd::execute(drivers, cmd_bytes), CommandId::ECDSA384_VERIFY => EcdsaVerifyCmd::execute(drivers, cmd_bytes), + CommandId::LMS_VERIFY => LmsVerifyCmd::execute(drivers, cmd_bytes), CommandId::EXTEND_PCR => ExtendPcrCmd::execute(drivers, cmd_bytes), CommandId::STASH_MEASUREMENT => StashMeasurementCmd::execute(drivers, cmd_bytes), CommandId::DISABLE_ATTESTATION => DisableAttestationCmd::execute(drivers), diff --git a/runtime/src/verify.rs b/runtime/src/verify.rs index 3f60a26c78..23ea6b5f0e 100644 --- a/runtime/src/verify.rs +++ b/runtime/src/verify.rs @@ -14,13 +14,16 @@ Abstract: use crate::Drivers; use caliptra_cfi_derive_git::cfi_impl_fn; -use caliptra_common::mailbox_api::{EcdsaVerifyReq, MailboxResp}; +use caliptra_common::mailbox_api::{EcdsaVerifyReq, LmsVerifyReq, MailboxResp}; use caliptra_drivers::{ Array4x12, CaliptraError, CaliptraResult, Ecc384PubKey, Ecc384Result, Ecc384Scalar, - Ecc384Signature, + Ecc384Signature, LmsResult, }; - -use zerocopy::FromBytes; +use caliptra_lms_types::{ + LmotsAlgorithmType, LmotsSignature, LmsAlgorithmType, LmsPublicKey, LmsSignature, +}; +use zerocopy::AsBytes; +use zerocopy::{BigEndian, FromBytes, LittleEndian, U32}; pub struct EcdsaVerifyCmd; impl EcdsaVerifyCmd { @@ -55,3 +58,70 @@ impl EcdsaVerifyCmd { Ok(MailboxResp::default()) } } + +pub struct LmsVerifyCmd; +impl LmsVerifyCmd { + #[cfg_attr(not(feature = "no-cfi"), cfi_impl_fn)] + pub(crate) fn execute(drivers: &mut Drivers, cmd_args: &[u8]) -> CaliptraResult { + // Constants from fixed LMS param set + const LMS_N: usize = 6; + const LMS_P: usize = 51; + const LMS_H: usize = 15; + const LMS_ALGORITHM_TYPE: LmsAlgorithmType = LmsAlgorithmType::new(12); + const LMOTS_ALGORITHM_TYPE: LmotsAlgorithmType = LmotsAlgorithmType::new(7); + + if let Some(cmd) = LmsVerifyReq::read_from(cmd_args) { + // Get the digest from the SHA accelerator + let msg_digest_be = drivers.sha_acc.regs().digest().truncate::<12>().read(); + // Flip the endianness since LMS treats this as raw message bytes + let mut msg_digest = [0u8; 48]; + for (i, src_word) in msg_digest_be.iter().enumerate() { + msg_digest[i * 4..][..4].copy_from_slice(&src_word.to_be_bytes()); + } + + let lms_pub_key: LmsPublicKey = LmsPublicKey { + id: cmd.pub_key_id, + digest: <[U32; LMS_N]>::read_from(&cmd.pub_key_digest[..]) + .ok_or(CaliptraError::RUNTIME_INSUFFICIENT_MEMORY)?, + tree_type: LmsAlgorithmType::new(cmd.pub_key_tree_type), + otstype: LmotsAlgorithmType::new(cmd.pub_key_ots_type), + }; + + let lms_sig: LmsSignature = LmsSignature { + q: >::from(cmd.signature_q), + ots: >::read_from(&cmd.signature_ots[..]) + .ok_or(CaliptraError::RUNTIME_INSUFFICIENT_MEMORY)?, + tree_type: LmsAlgorithmType::new(cmd.signature_tree_type), + tree_path: <[[U32; LMS_N]; LMS_H]>::read_from( + &cmd.signature_tree_path[..], + ) + .ok_or(CaliptraError::RUNTIME_INSUFFICIENT_MEMORY)?, + }; + + // Check that fixed params are correct + if lms_pub_key.tree_type != LMS_ALGORITHM_TYPE { + return Err(CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM); + } + if lms_pub_key.otstype != LMOTS_ALGORITHM_TYPE { + return Err(CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMOTS_ALGORITHM); + } + if lms_sig.tree_type != LMS_ALGORITHM_TYPE { + return Err(CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM); + } + + let success = drivers.lms.verify_lms_signature( + &mut drivers.sha256, + &msg_digest, + &lms_pub_key, + &lms_sig, + )?; + if success != LmsResult::Success { + return Err(CaliptraError::RUNTIME_LMS_VERIFY_FAILED); + } + } else { + return Err(CaliptraError::RUNTIME_INSUFFICIENT_MEMORY); + }; + + Ok(MailboxResp::default()) + } +} diff --git a/runtime/tests/runtime_integration_tests/main.rs b/runtime/tests/runtime_integration_tests/main.rs index 741bd1790d..d4d3750b26 100644 --- a/runtime/tests/runtime_integration_tests/main.rs +++ b/runtime/tests/runtime_integration_tests/main.rs @@ -9,6 +9,7 @@ mod test_ecdsa; mod test_fips; mod test_info; mod test_invoke_dpe; +mod test_lms; mod test_mailbox; mod test_panic_missing; mod test_pauser_privilege_levels; diff --git a/runtime/tests/runtime_integration_tests/test_lms.rs b/runtime/tests/runtime_integration_tests/test_lms.rs new file mode 100644 index 0000000000..8252fb951f --- /dev/null +++ b/runtime/tests/runtime_integration_tests/test_lms.rs @@ -0,0 +1,921 @@ +// Licensed under the Apache-2.0 license. + +use crate::common::{assert_error, run_rt_test}; +use caliptra_common::mailbox_api::{ + CommandId, LmsVerifyReq, MailboxReq, MailboxReqHeader, MailboxRespHeader, +}; +use caliptra_hw_model::{HwModel, ModelError, ShaAccMode}; +use caliptra_lms_types::{LmotsAlgorithmType, LmsAlgorithmType, LmsPublicKey, LmsSignature}; +use caliptra_runtime::RtBootStatus; +use zerocopy::{AsBytes, FromBytes, LayoutVerified}; + +// Constants from fixed LMS param set +const LMS_N: usize = 6; +const LMS_P: usize = 51; +const LMS_H: usize = 15; + +// Test vectors generated using https://github.com/ericeilertson/create_lms_tests +const MSG_1: [u8; 1024] = [ + 0xdf, 0xfc, 0xf1, 0xf9, 0x30, 0xa0, 0x2a, 0x25, 0x71, 0x95, 0x5e, 0x35, 0xd8, 0x00, 0x3b, 0x2d, + 0x67, 0xff, 0x29, 0xed, 0x65, 0x54, 0x30, 0x59, 0x5f, 0x39, 0xb1, 0x15, 0x62, 0xd6, 0x05, 0x0f, + 0x9c, 0x67, 0xac, 0x2e, 0x5e, 0x42, 0x0e, 0x8d, 0xc5, 0xed, 0x67, 0x88, 0x59, 0x18, 0x96, 0xc2, + 0x99, 0xba, 0xa9, 0x6d, 0x27, 0x17, 0x85, 0xf6, 0x17, 0x8d, 0xf8, 0xf8, 0x58, 0x5d, 0xd3, 0x17, + 0x88, 0x03, 0x9d, 0x1e, 0x35, 0x2d, 0x91, 0x75, 0x2d, 0xe4, 0xfc, 0x02, 0x27, 0x28, 0xbe, 0x43, + 0xe7, 0x08, 0x48, 0x20, 0xed, 0xbe, 0x8b, 0xff, 0x44, 0x48, 0x33, 0x18, 0xc6, 0x9f, 0x2d, 0x96, + 0x35, 0xae, 0xb5, 0x5c, 0xde, 0xe8, 0x10, 0x0a, 0xb7, 0x4e, 0x71, 0xb0, 0xa1, 0xeb, 0xf0, 0xdf, + 0x12, 0x76, 0x1e, 0xeb, 0xf9, 0x66, 0x14, 0x80, 0x7e, 0x44, 0x23, 0x75, 0x3e, 0x6d, 0x93, 0xf6, + 0x0e, 0x36, 0x4d, 0xcd, 0x7b, 0x85, 0xf2, 0x8d, 0x90, 0xd9, 0x83, 0x6c, 0x46, 0x27, 0x85, 0xb2, + 0xe0, 0xdf, 0x76, 0x40, 0x88, 0x6d, 0x48, 0x6d, 0x68, 0x7b, 0x1f, 0x43, 0x9e, 0x66, 0x49, 0x4e, + 0xcf, 0x66, 0xb6, 0x74, 0x6f, 0xf0, 0x77, 0x25, 0x94, 0xb7, 0x15, 0x9c, 0x3f, 0x83, 0x0e, 0x15, + 0xa7, 0x41, 0xf9, 0x78, 0x4a, 0x7d, 0x22, 0x47, 0x56, 0xef, 0xe8, 0x51, 0x31, 0x84, 0xf6, 0xe7, + 0xb2, 0x87, 0x09, 0xce, 0x13, 0x6b, 0xf7, 0x2a, 0xc4, 0x5a, 0xae, 0x91, 0xee, 0x60, 0xe9, 0xae, + 0x6c, 0x71, 0xf4, 0x32, 0xc5, 0x1b, 0x4f, 0x87, 0x0f, 0x63, 0xbc, 0x5e, 0xcb, 0x1e, 0x17, 0xad, + 0x84, 0xea, 0x72, 0xd5, 0xc7, 0xa1, 0x0f, 0xb9, 0xda, 0x49, 0x4d, 0xf5, 0x45, 0x94, 0x96, 0x13, + 0xb9, 0x9f, 0x6a, 0x0b, 0xe3, 0xb8, 0x7b, 0x3b, 0x1c, 0x31, 0x3e, 0x5a, 0x57, 0x04, 0x41, 0xa3, + 0x8a, 0x72, 0xc4, 0xf7, 0xe4, 0x72, 0x6e, 0x99, 0xf7, 0x87, 0x7c, 0x04, 0x6d, 0x6a, 0x92, 0x57, + 0x97, 0xa8, 0x28, 0xff, 0x09, 0x2b, 0xb8, 0xfa, 0xb4, 0xa8, 0xd9, 0xdd, 0xd0, 0xca, 0x89, 0x03, + 0xfe, 0xfd, 0x46, 0xee, 0x53, 0x62, 0xe3, 0xa2, 0xf0, 0x66, 0x40, 0x4c, 0x98, 0xce, 0xb4, 0x1b, + 0x94, 0x4e, 0x86, 0x6a, 0x5f, 0x3e, 0xdb, 0x48, 0xfa, 0x5e, 0x68, 0x69, 0xea, 0x36, 0xd6, 0x0f, + 0xd4, 0x88, 0x7b, 0xf6, 0x22, 0x25, 0x08, 0x47, 0x82, 0x35, 0x84, 0x1d, 0x37, 0xae, 0xa4, 0x5c, + 0x1d, 0xd5, 0x2c, 0xd0, 0x5a, 0xd2, 0xf1, 0x51, 0xf4, 0x49, 0xea, 0x70, 0x28, 0x96, 0xde, 0x0a, + 0xed, 0xb1, 0x83, 0xb1, 0x0e, 0x92, 0x3f, 0x9f, 0xf7, 0x85, 0xbd, 0xde, 0x91, 0x09, 0xf5, 0x5a, + 0x1b, 0xab, 0x89, 0xa0, 0x70, 0xdd, 0x5f, 0x76, 0xfd, 0xcb, 0x4c, 0x6d, 0x35, 0x75, 0xd8, 0xbe, + 0x5e, 0xa7, 0xb4, 0x09, 0xf6, 0xb3, 0xcd, 0xb1, 0xbe, 0x78, 0xc4, 0x23, 0xd6, 0x55, 0xae, 0x92, + 0xc1, 0xd9, 0x97, 0x41, 0x6a, 0x7f, 0x9e, 0xbc, 0x8f, 0x96, 0x37, 0xda, 0x98, 0x70, 0x3c, 0xb8, + 0x5d, 0x98, 0xa9, 0x8a, 0x96, 0x37, 0xfd, 0x44, 0xb1, 0x11, 0xc0, 0xe9, 0xdf, 0x2e, 0x2c, 0x0c, + 0xdb, 0xa6, 0x9d, 0x7f, 0x53, 0x43, 0xe8, 0x06, 0xb6, 0x9f, 0x48, 0x2f, 0x3a, 0xcb, 0x75, 0x7b, + 0xe2, 0xba, 0x8a, 0x77, 0x63, 0x9f, 0x28, 0x2c, 0x22, 0x89, 0xbb, 0xc4, 0xe4, 0xee, 0x77, 0x9e, + 0x6b, 0x61, 0x51, 0x55, 0xb4, 0xd2, 0xbf, 0x9e, 0xe4, 0xa6, 0xac, 0xa7, 0xf1, 0xee, 0xf3, 0xf4, + 0x3a, 0x16, 0x18, 0xbe, 0x03, 0xe5, 0x27, 0xe7, 0x9e, 0xd0, 0xbc, 0x90, 0xea, 0xcc, 0xa0, 0x0c, + 0x67, 0x98, 0xb3, 0x2d, 0x05, 0xe1, 0x8d, 0xb5, 0x7d, 0xd9, 0x6f, 0xd2, 0x63, 0x90, 0x6a, 0xfe, + 0x3b, 0x72, 0x26, 0xa8, 0x8b, 0xfe, 0xb6, 0xce, 0xfc, 0x66, 0xea, 0x5b, 0x1d, 0xc8, 0x9a, 0x3c, + 0x81, 0xb4, 0x2c, 0xa8, 0xc9, 0x42, 0x6b, 0xf8, 0xcb, 0xa1, 0x1e, 0x14, 0x52, 0xe5, 0xd5, 0xe9, + 0x0e, 0xb2, 0x2c, 0x10, 0xb5, 0x2c, 0x42, 0x4a, 0x7d, 0x35, 0x81, 0x86, 0x9c, 0x00, 0x8b, 0xa8, + 0x75, 0x72, 0x3a, 0xa4, 0xa9, 0x1c, 0xa4, 0x03, 0x4c, 0xab, 0x2b, 0x41, 0x65, 0x91, 0xd2, 0xa3, + 0xfe, 0xd3, 0x63, 0x45, 0x87, 0x5e, 0x37, 0x73, 0xea, 0x38, 0xf0, 0x4c, 0x9e, 0x86, 0xa1, 0xd5, + 0x4a, 0xb6, 0xa5, 0x40, 0xe9, 0x3b, 0xf5, 0x64, 0x12, 0xa7, 0x85, 0x67, 0xf2, 0xd0, 0xc9, 0xd7, + 0x33, 0x43, 0x46, 0x0e, 0x80, 0xdf, 0xc6, 0xe7, 0x33, 0x26, 0xba, 0xc3, 0x2f, 0x4a, 0x5e, 0xdb, + 0x2a, 0x3c, 0xbc, 0x2e, 0x26, 0x32, 0x59, 0x6b, 0xfa, 0xa0, 0x1d, 0x8b, 0x22, 0x08, 0x44, 0xcc, + 0x36, 0x68, 0x73, 0xc7, 0xf6, 0x4e, 0x33, 0xae, 0x2d, 0x60, 0xec, 0xea, 0x99, 0x24, 0xcc, 0x02, + 0xf6, 0x11, 0x0c, 0x09, 0x96, 0x8e, 0xe1, 0xdb, 0xce, 0x08, 0xcd, 0xef, 0x86, 0x09, 0x73, 0x4d, + 0x88, 0x99, 0x52, 0x10, 0xbe, 0x61, 0xdc, 0x49, 0x17, 0x60, 0x89, 0x39, 0x4c, 0x99, 0x2a, 0x1f, + 0xd0, 0x55, 0xae, 0xcd, 0xca, 0x24, 0x2a, 0xc3, 0x5e, 0x0a, 0xfe, 0x54, 0xe5, 0xe0, 0x9f, 0x8f, + 0x46, 0x57, 0xe6, 0xce, 0x01, 0xee, 0xca, 0x25, 0x5f, 0xa8, 0x7b, 0x21, 0xd3, 0x9a, 0x71, 0x65, + 0x90, 0x4f, 0xaa, 0x15, 0x94, 0x63, 0xbd, 0x7d, 0x79, 0xd1, 0x44, 0x3d, 0x28, 0x6b, 0x75, 0x84, + 0x86, 0x08, 0x26, 0x4b, 0x36, 0x55, 0x1c, 0x29, 0x1a, 0xea, 0x23, 0xbd, 0x84, 0xc6, 0x37, 0xc2, + 0x3c, 0x5a, 0xf8, 0xdf, 0xf1, 0x8c, 0x83, 0xf9, 0xda, 0x63, 0x1e, 0x83, 0x26, 0x00, 0x4a, 0x2f, + 0x31, 0xc2, 0x57, 0x74, 0xce, 0x7d, 0xf6, 0x5c, 0x71, 0x82, 0x4b, 0xd5, 0xf2, 0xc2, 0x22, 0x3f, + 0xd8, 0x96, 0x7a, 0xdd, 0xda, 0xf9, 0x62, 0x93, 0xf3, 0xa9, 0xa1, 0xde, 0xfd, 0xbb, 0x63, 0x9e, + 0x5a, 0xbd, 0x25, 0x44, 0x6f, 0xd1, 0x3d, 0xc6, 0x9a, 0x7f, 0x9c, 0x19, 0x54, 0x4d, 0xdb, 0xfa, + 0xf5, 0x64, 0x7f, 0xfa, 0xa0, 0x65, 0x6d, 0x25, 0x91, 0x9c, 0x2b, 0xe7, 0xee, 0xf8, 0xe6, 0x7d, + 0x91, 0xac, 0x87, 0xe3, 0xdd, 0x8c, 0x71, 0x75, 0x16, 0xd7, 0xd1, 0x19, 0x95, 0x24, 0x48, 0xf8, + 0x0e, 0xf0, 0xce, 0xf0, 0xa5, 0x21, 0x66, 0x7a, 0x73, 0x67, 0xeb, 0x3e, 0x1b, 0xd7, 0xeb, 0x6c, + 0x06, 0x3e, 0x44, 0x25, 0x3a, 0xfb, 0x07, 0xe8, 0x81, 0x3a, 0x73, 0xf4, 0xa9, 0x9d, 0xdd, 0x7d, + 0x4a, 0x8a, 0xd7, 0x02, 0x7b, 0xdf, 0x3c, 0x01, 0x3d, 0xbe, 0x46, 0x38, 0x79, 0x36, 0x34, 0xd6, + 0x83, 0x7d, 0xb7, 0xcb, 0x39, 0x5f, 0xae, 0xd5, 0xc6, 0x5c, 0x08, 0x25, 0xa6, 0xd1, 0xe4, 0x30, + 0xce, 0xa2, 0x7e, 0xed, 0x25, 0x08, 0x50, 0xd9, 0x39, 0xb2, 0x77, 0xfa, 0x4f, 0x84, 0x2f, 0x26, + 0x41, 0x05, 0xd0, 0xcf, 0x49, 0x43, 0x3a, 0x88, 0xbb, 0x50, 0xc1, 0xeb, 0x29, 0x88, 0xf5, 0x9d, + 0x93, 0x55, 0x86, 0x1f, 0x8f, 0xdb, 0xd6, 0xb3, 0x1a, 0x0a, 0x99, 0x93, 0x00, 0xf1, 0xbd, 0xa5, + 0x5d, 0x6a, 0xac, 0xf5, 0x36, 0x30, 0x3d, 0x39, 0x77, 0x15, 0x7c, 0xa0, 0x0a, 0x2a, 0x9a, 0x46, + 0xf5, 0x63, 0x6a, 0xb3, 0x12, 0xda, 0x16, 0x0f, 0x3d, 0x31, 0x8d, 0x64, 0x24, 0xb1, 0xcf, 0xdc, + 0xd0, 0xdd, 0xe1, 0x04, 0x4f, 0x1b, 0xb8, 0x3f, 0xa2, 0xe4, 0xd9, 0x11, 0xfc, 0x87, 0xc3, 0xea, + 0xa2, 0x6a, 0x2b, 0x1f, 0x7e, 0xc5, 0xd3, 0xe0, 0xb6, 0x16, 0x5b, 0xa3, 0xbb, 0x56, 0x27, 0xec, +]; +const MSG_1_PUB_KEY_1: [u8; 48] = [ + 0, 0, 0, 12, 0, 0, 0, 7, 163, 11, 243, 114, 230, 240, 125, 173, 49, 109, 230, 124, 106, 88, + 181, 175, 254, 105, 112, 20, 129, 2, 238, 251, 83, 151, 128, 225, 160, 163, 55, 4, 179, 145, + 211, 11, 212, 124, 207, 237, +]; +const MSG_1_KEY_1_SIG_1: [u8; 1620] = [ + 0, 0, 64, 31, 0, 0, 0, 7, 243, 137, 163, 140, 24, 65, 126, 88, 197, 204, 62, 74, 66, 237, 254, + 110, 215, 17, 102, 40, 70, 219, 155, 241, 27, 87, 91, 102, 109, 18, 47, 186, 188, 124, 123, + 172, 203, 169, 59, 246, 121, 92, 26, 174, 228, 214, 195, 54, 212, 201, 200, 49, 139, 85, 124, + 165, 95, 166, 210, 125, 236, 41, 114, 252, 195, 179, 155, 6, 174, 20, 35, 81, 48, 161, 39, 23, + 120, 129, 157, 93, 24, 146, 12, 81, 8, 140, 160, 54, 31, 40, 108, 211, 242, 110, 124, 18, 69, + 90, 249, 244, 159, 208, 203, 115, 188, 108, 167, 225, 71, 20, 136, 28, 201, 242, 105, 134, 155, + 148, 156, 241, 251, 137, 100, 22, 15, 100, 185, 120, 122, 173, 15, 243, 54, 77, 9, 26, 36, 76, + 234, 84, 0, 84, 167, 165, 71, 244, 205, 208, 236, 15, 100, 177, 196, 190, 108, 221, 20, 159, + 199, 119, 73, 201, 204, 82, 44, 124, 49, 232, 142, 17, 58, 85, 185, 137, 89, 241, 251, 85, 186, + 173, 119, 33, 163, 55, 11, 241, 42, 77, 94, 84, 217, 253, 98, 170, 188, 205, 57, 249, 137, 98, + 163, 71, 121, 115, 22, 163, 226, 222, 199, 33, 21, 77, 57, 151, 92, 196, 154, 181, 189, 163, + 118, 186, 148, 201, 108, 68, 217, 149, 97, 22, 95, 61, 246, 63, 192, 109, 203, 124, 81, 38, 27, + 15, 222, 12, 144, 240, 226, 82, 234, 54, 119, 254, 191, 28, 252, 236, 205, 205, 249, 228, 77, + 101, 252, 184, 75, 47, 70, 125, 185, 102, 180, 143, 60, 168, 120, 17, 160, 191, 150, 120, 29, + 226, 135, 42, 184, 90, 0, 49, 35, 217, 91, 12, 75, 110, 40, 224, 249, 92, 169, 11, 208, 231, + 88, 114, 231, 249, 78, 41, 85, 95, 223, 52, 108, 200, 230, 6, 154, 195, 197, 209, 171, 24, 27, + 12, 0, 237, 126, 132, 97, 182, 255, 30, 45, 72, 3, 162, 114, 5, 139, 127, 8, 66, 210, 29, 116, + 174, 248, 194, 91, 173, 210, 242, 175, 175, 60, 228, 178, 178, 64, 141, 127, 149, 83, 163, 27, + 151, 51, 168, 248, 158, 19, 225, 72, 164, 144, 194, 137, 208, 65, 2, 220, 133, 112, 150, 245, + 246, 202, 11, 222, 30, 80, 158, 54, 150, 240, 39, 203, 169, 141, 13, 15, 128, 247, 224, 77, + 137, 189, 236, 7, 91, 23, 179, 73, 93, 46, 249, 101, 1, 49, 169, 240, 119, 139, 222, 232, 105, + 218, 116, 27, 137, 147, 202, 196, 98, 243, 218, 196, 61, 191, 12, 232, 107, 54, 158, 90, 58, + 200, 218, 131, 114, 120, 245, 218, 177, 69, 49, 45, 218, 20, 179, 93, 248, 227, 224, 144, 229, + 235, 192, 79, 96, 129, 121, 45, 65, 143, 181, 121, 24, 73, 252, 90, 239, 154, 46, 99, 217, 153, + 86, 147, 208, 176, 246, 146, 135, 252, 105, 186, 163, 93, 150, 107, 143, 3, 74, 3, 21, 135, + 220, 127, 201, 133, 37, 192, 242, 179, 33, 240, 90, 188, 38, 210, 227, 132, 53, 61, 105, 110, + 76, 118, 60, 224, 83, 185, 94, 21, 186, 101, 212, 6, 196, 8, 235, 155, 179, 209, 38, 95, 151, + 163, 48, 15, 139, 164, 128, 225, 201, 46, 58, 228, 74, 176, 100, 101, 6, 245, 202, 88, 210, + 148, 95, 36, 230, 2, 227, 167, 161, 17, 13, 29, 202, 80, 245, 126, 211, 86, 240, 165, 147, 36, + 62, 39, 131, 112, 1, 51, 95, 197, 118, 157, 200, 117, 110, 254, 244, 53, 161, 213, 62, 232, 17, + 91, 218, 255, 171, 190, 191, 102, 127, 73, 158, 74, 18, 57, 120, 130, 139, 218, 9, 252, 65, + 189, 207, 109, 222, 231, 155, 84, 101, 102, 90, 70, 121, 29, 6, 183, 55, 198, 36, 93, 44, 174, + 184, 45, 162, 141, 130, 224, 173, 66, 252, 191, 80, 11, 137, 222, 119, 98, 126, 182, 186, 210, + 52, 75, 232, 145, 52, 233, 92, 114, 137, 75, 48, 115, 143, 3, 248, 176, 227, 176, 44, 137, 79, + 129, 144, 82, 13, 52, 201, 231, 11, 67, 87, 111, 245, 44, 209, 224, 201, 202, 98, 33, 45, 106, + 156, 183, 25, 79, 178, 212, 5, 112, 163, 58, 169, 240, 69, 126, 170, 170, 182, 153, 10, 108, + 149, 224, 98, 83, 82, 233, 254, 195, 216, 89, 80, 97, 36, 79, 244, 228, 120, 126, 122, 155, 64, + 134, 217, 12, 3, 25, 159, 253, 37, 112, 41, 255, 62, 237, 164, 106, 71, 91, 61, 212, 143, 199, + 58, 52, 98, 167, 32, 44, 225, 102, 5, 69, 249, 172, 204, 138, 77, 11, 147, 9, 245, 48, 12, 185, + 151, 198, 28, 161, 71, 53, 59, 247, 208, 11, 130, 37, 73, 241, 190, 81, 115, 236, 120, 248, + 141, 245, 231, 199, 196, 176, 64, 116, 238, 55, 195, 67, 200, 96, 10, 132, 34, 72, 114, 225, + 127, 57, 32, 125, 190, 42, 49, 2, 38, 235, 36, 177, 236, 219, 188, 154, 82, 174, 191, 229, 155, + 105, 122, 159, 109, 233, 243, 142, 182, 226, 148, 67, 156, 232, 179, 70, 174, 114, 162, 143, + 182, 11, 135, 211, 27, 176, 176, 15, 69, 222, 147, 250, 155, 134, 234, 40, 38, 159, 175, 62, + 43, 207, 3, 186, 104, 189, 13, 143, 163, 105, 229, 185, 248, 93, 55, 118, 40, 0, 86, 217, 155, + 226, 179, 245, 163, 21, 199, 150, 2, 234, 45, 253, 200, 172, 212, 236, 49, 50, 18, 121, 165, + 210, 114, 202, 224, 84, 104, 171, 179, 245, 134, 197, 140, 138, 167, 145, 207, 226, 1, 160, 94, + 206, 201, 102, 35, 60, 223, 0, 9, 82, 238, 145, 40, 253, 249, 61, 72, 113, 72, 147, 49, 89, + 150, 121, 176, 148, 120, 59, 227, 189, 232, 26, 83, 98, 86, 59, 52, 121, 162, 9, 210, 28, 199, + 247, 165, 195, 58, 122, 121, 24, 169, 1, 91, 222, 48, 48, 102, 147, 127, 255, 199, 137, 203, + 246, 157, 99, 43, 89, 246, 27, 106, 146, 20, 25, 71, 206, 10, 141, 45, 158, 186, 219, 187, 87, + 210, 253, 204, 72, 47, 164, 221, 174, 161, 224, 204, 184, 119, 138, 10, 162, 151, 63, 112, 181, + 162, 89, 169, 224, 45, 69, 146, 19, 189, 35, 182, 193, 179, 99, 104, 190, 83, 114, 203, 204, + 90, 127, 161, 189, 147, 47, 27, 81, 12, 27, 218, 62, 224, 123, 80, 131, 140, 207, 7, 62, 107, + 99, 85, 161, 95, 67, 65, 235, 168, 183, 228, 168, 225, 62, 254, 69, 39, 233, 145, 140, 69, 51, + 174, 188, 15, 218, 52, 175, 238, 146, 172, 192, 95, 89, 48, 39, 6, 65, 59, 176, 214, 203, 148, + 10, 34, 90, 158, 88, 133, 4, 147, 198, 138, 151, 237, 121, 252, 173, 231, 195, 174, 66, 74, 88, + 228, 233, 107, 27, 164, 113, 13, 11, 70, 28, 145, 141, 124, 189, 130, 203, 35, 14, 156, 14, 32, + 230, 143, 62, 230, 132, 138, 193, 75, 12, 144, 224, 140, 36, 7, 69, 89, 202, 24, 232, 123, 241, + 48, 71, 64, 202, 85, 208, 86, 175, 94, 214, 183, 250, 30, 140, 216, 81, 31, 110, 87, 154, 42, + 200, 75, 135, 63, 222, 237, 19, 65, 110, 83, 34, 76, 153, 90, 53, 7, 133, 220, 206, 82, 0, 0, + 0, 12, 234, 34, 75, 133, 111, 32, 223, 57, 192, 92, 198, 165, 13, 75, 141, 160, 198, 199, 231, + 248, 87, 121, 95, 129, 13, 181, 104, 254, 55, 4, 28, 76, 29, 128, 85, 109, 34, 136, 26, 183, + 180, 77, 133, 50, 112, 173, 168, 125, 70, 210, 222, 135, 49, 52, 187, 135, 36, 46, 63, 90, 11, + 174, 116, 189, 218, 235, 248, 4, 102, 184, 232, 46, 55, 196, 92, 165, 22, 241, 93, 69, 123, 52, + 38, 226, 49, 215, 177, 137, 63, 44, 221, 20, 37, 61, 169, 58, 27, 55, 233, 162, 70, 33, 29, + 128, 190, 131, 175, 165, 184, 148, 188, 36, 201, 164, 227, 0, 169, 33, 209, 18, 69, 176, 152, + 175, 94, 155, 115, 166, 179, 174, 95, 243, 205, 203, 26, 38, 8, 46, 47, 67, 134, 102, 16, 183, + 86, 157, 253, 9, 47, 23, 122, 158, 212, 32, 147, 186, 66, 95, 252, 58, 251, 42, 126, 144, 51, + 237, 68, 225, 244, 139, 92, 174, 206, 42, 157, 166, 76, 16, 215, 209, 154, 180, 176, 178, 127, + 193, 182, 143, 123, 222, 149, 82, 30, 55, 22, 168, 253, 205, 72, 125, 72, 9, 21, 20, 187, 28, + 198, 84, 78, 196, 135, 75, 14, 138, 119, 215, 128, 223, 31, 183, 47, 133, 204, 95, 225, 75, + 253, 226, 27, 152, 107, 120, 223, 137, 193, 191, 216, 47, 14, 233, 126, 234, 145, 107, 178, 29, + 207, 207, 17, 195, 62, 153, 145, 61, 138, 24, 191, 138, 15, 210, 183, 89, 245, 233, 150, 112, + 193, 187, 37, 5, 241, 153, 28, 135, 204, 89, 86, 241, 229, 106, 159, 17, 235, 61, 94, 103, 50, + 213, 26, 90, 88, 5, 179, 59, 253, 100, 95, 243, 17, 43, 252, 163, 243, 24, 234, 104, 255, 78, + 112, 98, 7, 44, 120, 26, 222, 203, 101, 150, 243, 85, 19, 66, 166, 179, 60, 101, 203, 79, 91, + 30, 45, 209, 48, 22, 74, 121, 31, 181, 217, 122, 55, 102, 61, 146, 129, 231, 208, 149, 173, 19, + 110, 11, 225, 243, 218, 13, 185, 244, 165, 123, +]; +const MSG_1_KEY_1_SIG_2: [u8; 1620] = [ + 0, 0, 37, 6, 0, 0, 0, 7, 204, 243, 160, 168, 240, 81, 152, 90, 73, 218, 209, 118, 145, 251, 53, + 59, 35, 211, 185, 113, 202, 249, 92, 182, 108, 228, 50, 223, 27, 211, 208, 239, 189, 74, 173, + 148, 115, 70, 149, 37, 61, 76, 188, 189, 0, 217, 61, 155, 85, 137, 13, 5, 142, 220, 47, 29, + 214, 169, 196, 155, 157, 245, 105, 18, 208, 47, 237, 167, 97, 87, 213, 100, 63, 99, 151, 105, + 189, 142, 116, 2, 125, 148, 111, 234, 141, 95, 247, 249, 158, 182, 17, 128, 128, 224, 39, 43, + 66, 246, 86, 236, 158, 45, 151, 39, 104, 197, 118, 94, 57, 11, 163, 172, 180, 128, 209, 149, 5, + 63, 20, 22, 203, 73, 218, 188, 109, 227, 86, 17, 54, 145, 212, 170, 231, 95, 82, 71, 120, 222, + 109, 208, 46, 192, 52, 229, 28, 123, 52, 168, 105, 43, 222, 149, 111, 40, 21, 176, 36, 90, 217, + 89, 121, 222, 80, 176, 92, 79, 26, 49, 75, 213, 32, 246, 41, 171, 233, 225, 29, 48, 114, 77, + 112, 125, 244, 97, 56, 222, 195, 47, 76, 113, 75, 82, 161, 136, 167, 232, 132, 66, 241, 78, 98, + 252, 158, 141, 165, 222, 26, 105, 77, 70, 11, 72, 226, 50, 3, 63, 114, 242, 183, 23, 128, 51, + 185, 82, 167, 28, 125, 50, 139, 238, 43, 32, 171, 177, 28, 118, 213, 167, 139, 227, 197, 156, + 52, 43, 17, 34, 197, 242, 159, 104, 3, 70, 123, 108, 104, 135, 108, 16, 16, 250, 244, 89, 142, + 173, 252, 112, 49, 254, 237, 227, 254, 38, 164, 18, 233, 239, 43, 241, 201, 237, 11, 219, 183, + 208, 246, 101, 244, 62, 163, 0, 75, 34, 138, 211, 65, 51, 243, 22, 103, 62, 135, 41, 137, 36, + 112, 50, 110, 234, 131, 224, 140, 79, 213, 51, 75, 58, 21, 254, 192, 131, 162, 152, 91, 122, + 181, 241, 172, 162, 171, 184, 141, 13, 124, 142, 196, 90, 141, 13, 166, 25, 251, 249, 105, 20, + 52, 188, 113, 215, 35, 68, 225, 75, 206, 57, 244, 83, 232, 233, 238, 238, 8, 70, 185, 89, 111, + 247, 9, 49, 188, 169, 85, 35, 90, 231, 239, 52, 177, 191, 146, 21, 131, 243, 118, 201, 218, 42, + 121, 11, 192, 77, 88, 247, 3, 16, 45, 108, 79, 230, 15, 120, 140, 50, 70, 13, 110, 119, 203, + 150, 9, 182, 139, 9, 135, 228, 120, 199, 11, 147, 143, 183, 141, 246, 79, 199, 2, 249, 136, + 224, 47, 230, 155, 143, 27, 166, 202, 72, 108, 157, 192, 163, 199, 24, 227, 100, 198, 105, 113, + 139, 69, 118, 84, 95, 101, 36, 88, 15, 172, 136, 238, 188, 56, 156, 167, 194, 30, 189, 79, 208, + 212, 41, 103, 84, 126, 131, 94, 193, 21, 162, 217, 23, 140, 216, 29, 235, 162, 54, 236, 250, + 172, 104, 227, 197, 239, 126, 32, 219, 226, 52, 216, 126, 154, 44, 31, 237, 0, 80, 182, 142, + 165, 16, 100, 154, 229, 187, 41, 114, 65, 243, 132, 221, 74, 137, 113, 144, 188, 143, 86, 213, + 98, 192, 66, 121, 71, 78, 110, 12, 83, 6, 230, 71, 139, 43, 249, 218, 73, 231, 195, 50, 58, + 108, 66, 51, 84, 106, 96, 88, 205, 106, 106, 32, 9, 180, 92, 121, 168, 175, 24, 70, 147, 253, + 139, 3, 94, 196, 218, 105, 35, 5, 70, 20, 49, 242, 113, 87, 172, 70, 133, 229, 66, 163, 210, + 69, 105, 44, 189, 148, 193, 77, 242, 127, 67, 59, 208, 123, 31, 118, 17, 1, 61, 207, 4, 84, 18, + 229, 77, 205, 97, 200, 126, 14, 99, 26, 92, 150, 120, 145, 116, 36, 251, 118, 161, 179, 39, 44, + 178, 169, 111, 138, 30, 153, 243, 255, 151, 160, 122, 163, 120, 202, 147, 100, 151, 239, 91, + 200, 177, 47, 74, 188, 255, 5, 250, 69, 36, 250, 83, 249, 76, 42, 77, 223, 102, 103, 238, 196, + 136, 25, 184, 150, 6, 115, 207, 162, 169, 224, 151, 11, 226, 5, 24, 161, 152, 92, 225, 252, 11, + 121, 83, 233, 194, 22, 240, 133, 97, 91, 233, 13, 39, 93, 205, 202, 203, 132, 174, 1, 36, 182, + 46, 219, 25, 250, 177, 208, 45, 118, 116, 60, 13, 148, 30, 88, 181, 61, 244, 224, 67, 61, 33, + 119, 147, 142, 180, 83, 94, 201, 18, 187, 129, 174, 24, 21, 205, 212, 202, 172, 111, 74, 159, + 7, 129, 184, 121, 191, 213, 107, 53, 146, 101, 234, 9, 120, 173, 205, 83, 107, 134, 78, 76, + 151, 2, 135, 172, 175, 86, 75, 26, 65, 37, 160, 65, 222, 176, 202, 179, 176, 128, 204, 104, + 145, 68, 248, 170, 87, 252, 195, 72, 54, 25, 254, 253, 97, 19, 16, 104, 24, 226, 152, 179, 155, + 60, 12, 131, 68, 135, 10, 93, 235, 214, 185, 223, 67, 140, 50, 123, 77, 174, 227, 61, 185, 242, + 53, 149, 185, 126, 56, 120, 11, 169, 194, 52, 133, 238, 76, 51, 29, 141, 78, 215, 62, 198, 32, + 28, 124, 190, 16, 136, 240, 39, 112, 151, 74, 66, 205, 161, 62, 113, 133, 250, 17, 52, 235, + 185, 74, 71, 240, 198, 164, 95, 96, 159, 5, 49, 21, 140, 85, 230, 243, 242, 220, 86, 139, 86, + 207, 13, 57, 169, 133, 80, 84, 56, 242, 140, 132, 188, 248, 138, 237, 230, 51, 146, 87, 136, + 180, 126, 187, 8, 19, 205, 233, 128, 219, 208, 147, 243, 255, 181, 8, 44, 154, 251, 174, 181, + 234, 186, 120, 233, 60, 152, 132, 115, 89, 13, 237, 169, 48, 48, 117, 244, 70, 5, 36, 249, 121, + 42, 158, 246, 65, 21, 232, 134, 53, 196, 169, 105, 51, 244, 56, 64, 16, 190, 74, 88, 77, 128, + 62, 237, 167, 183, 77, 76, 106, 77, 80, 172, 109, 207, 61, 90, 90, 18, 22, 172, 97, 237, 64, + 220, 187, 92, 110, 123, 48, 253, 182, 153, 80, 4, 66, 28, 154, 235, 22, 30, 129, 210, 38, 89, + 30, 188, 65, 207, 100, 128, 173, 102, 45, 183, 19, 34, 112, 180, 3, 157, 232, 92, 111, 223, 79, + 183, 197, 92, 152, 169, 247, 206, 127, 105, 101, 170, 96, 129, 110, 131, 162, 12, 40, 231, 64, + 71, 181, 77, 3, 240, 61, 185, 60, 251, 32, 102, 126, 34, 158, 65, 110, 124, 245, 49, 167, 4, + 47, 215, 235, 34, 187, 102, 36, 105, 228, 63, 93, 246, 252, 30, 14, 118, 34, 153, 99, 146, 67, + 182, 30, 84, 153, 131, 139, 196, 232, 253, 151, 2, 36, 224, 187, 18, 221, 127, 225, 246, 220, + 169, 170, 11, 60, 206, 156, 195, 218, 52, 231, 14, 114, 53, 230, 145, 202, 223, 52, 30, 202, + 136, 235, 165, 148, 147, 217, 25, 25, 15, 43, 209, 77, 228, 220, 231, 186, 133, 247, 25, 159, + 17, 138, 71, 164, 51, 252, 253, 102, 101, 128, 27, 230, 41, 136, 88, 200, 59, 89, 69, 232, 95, + 38, 5, 199, 217, 253, 68, 37, 154, 16, 219, 183, 142, 134, 130, 90, 186, 103, 152, 35, 122, + 181, 4, 104, 48, 239, 193, 210, 179, 74, 174, 42, 81, 83, 210, 56, 246, 255, 238, 205, 141, + 112, 117, 11, 127, 88, 16, 249, 46, 102, 123, 236, 50, 236, 28, 255, 243, 170, 252, 68, 0, 0, + 0, 12, 228, 249, 110, 226, 189, 110, 35, 51, 1, 249, 77, 57, 194, 179, 37, 78, 197, 152, 251, + 21, 14, 205, 170, 90, 58, 247, 230, 171, 134, 149, 110, 227, 16, 68, 110, 104, 198, 138, 84, + 41, 80, 217, 42, 215, 253, 244, 167, 133, 230, 2, 29, 42, 190, 62, 216, 45, 5, 88, 23, 181, 36, + 120, 112, 5, 74, 48, 70, 15, 14, 116, 130, 98, 84, 169, 8, 155, 204, 199, 106, 204, 14, 19, 62, + 229, 231, 162, 79, 197, 195, 247, 41, 133, 174, 110, 140, 243, 25, 228, 10, 206, 55, 136, 60, + 109, 206, 177, 136, 96, 124, 61, 154, 148, 2, 254, 24, 185, 85, 39, 153, 117, 172, 192, 12, 97, + 182, 46, 10, 98, 110, 54, 134, 46, 39, 157, 179, 74, 199, 121, 249, 224, 171, 136, 64, 90, 92, + 75, 108, 16, 248, 0, 42, 3, 59, 153, 7, 5, 220, 221, 246, 52, 238, 105, 1, 37, 96, 242, 67, 1, + 177, 167, 184, 140, 180, 249, 0, 246, 52, 86, 47, 80, 150, 32, 82, 16, 187, 241, 242, 72, 32, + 200, 38, 83, 59, 98, 10, 88, 236, 67, 184, 242, 225, 107, 99, 161, 243, 212, 75, 218, 28, 203, + 33, 185, 103, 71, 1, 11, 211, 231, 5, 108, 122, 180, 58, 162, 43, 201, 85, 164, 219, 10, 149, + 95, 250, 152, 91, 206, 215, 36, 174, 78, 2, 98, 24, 143, 71, 178, 1, 10, 83, 149, 88, 132, 7, + 11, 161, 94, 89, 178, 219, 41, 211, 59, 105, 160, 79, 77, 41, 108, 9, 68, 6, 75, 213, 166, 50, + 157, 51, 95, 167, 45, 72, 105, 191, 163, 21, 221, 234, 194, 59, 38, 72, 229, 233, 86, 34, 100, + 200, 97, 169, 213, 98, 67, 211, 200, 52, 61, 92, 172, 233, 92, 136, 46, 166, 113, 214, 248, 67, + 24, 234, 11, 180, 113, 171, 48, 121, 162, 73, 161, 16, 231, 213, 8, 43, 94, 38, 30, 98, 113, + 57, 190, 78, 203, 96, 136, 149, 89, 75, 161, 191, 45, 48, 146, 10, 250, 179, 174, 120, 181, + 152, 193, +]; +const MSG_1_PUB_KEY_2: [u8; 48] = [ + 0, 0, 0, 12, 0, 0, 0, 7, 133, 126, 159, 249, 229, 185, 2, 229, 193, 208, 166, 14, 150, 165, 23, + 92, 243, 217, 164, 27, 214, 246, 15, 224, 110, 33, 247, 97, 140, 222, 160, 30, 248, 76, 227, + 60, 252, 179, 54, 116, +]; +const MSG_1_KEY_2_SIG_1: [u8; 1620] = [ + 0, 0, 31, 97, 0, 0, 0, 7, 49, 178, 22, 92, 253, 49, 57, 137, 42, 137, 25, 15, 250, 170, 3, 233, + 219, 225, 127, 24, 106, 241, 4, 25, 147, 82, 49, 97, 144, 88, 75, 30, 250, 107, 60, 13, 161, + 92, 223, 244, 37, 220, 11, 72, 47, 61, 111, 81, 5, 202, 223, 87, 24, 13, 82, 188, 111, 140, 53, + 140, 63, 74, 12, 214, 216, 162, 75, 29, 190, 32, 148, 40, 167, 142, 236, 23, 168, 218, 19, 6, + 126, 63, 21, 65, 109, 187, 34, 181, 251, 6, 35, 53, 245, 59, 87, 95, 91, 1, 64, 58, 126, 69, + 202, 163, 171, 8, 217, 135, 218, 231, 48, 250, 21, 45, 242, 180, 83, 240, 99, 201, 155, 68, + 227, 68, 103, 111, 98, 216, 59, 250, 198, 8, 88, 111, 139, 29, 101, 220, 84, 165, 129, 195, + 125, 135, 67, 124, 169, 4, 132, 210, 38, 197, 106, 54, 164, 70, 152, 203, 15, 205, 195, 142, + 122, 235, 211, 5, 129, 221, 80, 156, 49, 102, 181, 229, 209, 146, 228, 228, 201, 72, 240, 50, + 124, 195, 187, 13, 101, 78, 69, 245, 37, 131, 250, 83, 36, 243, 3, 110, 197, 181, 217, 41, 227, + 246, 18, 172, 171, 35, 130, 154, 158, 153, 157, 212, 207, 109, 245, 181, 85, 149, 72, 246, 177, + 45, 140, 179, 154, 174, 120, 239, 105, 71, 154, 37, 204, 157, 6, 195, 70, 60, 5, 81, 231, 25, + 12, 18, 124, 91, 111, 191, 110, 29, 58, 54, 200, 109, 182, 55, 154, 91, 15, 58, 255, 234, 220, + 107, 128, 102, 148, 205, 226, 91, 202, 220, 174, 67, 147, 102, 62, 112, 35, 215, 12, 172, 85, + 159, 16, 81, 183, 194, 193, 238, 236, 52, 44, 242, 59, 165, 49, 255, 191, 175, 206, 73, 246, 6, + 9, 170, 22, 153, 222, 154, 35, 78, 239, 233, 56, 202, 253, 223, 33, 177, 237, 161, 136, 135, + 32, 211, 174, 199, 94, 17, 30, 7, 25, 54, 227, 50, 198, 12, 128, 245, 148, 174, 69, 202, 25, + 134, 242, 94, 227, 81, 23, 80, 66, 175, 224, 69, 104, 0, 35, 127, 85, 9, 31, 243, 124, 140, + 199, 86, 242, 95, 88, 166, 98, 93, 225, 198, 209, 94, 252, 180, 14, 181, 159, 103, 85, 4, 200, + 104, 147, 66, 114, 48, 147, 104, 148, 204, 219, 62, 160, 42, 3, 205, 84, 129, 220, 67, 226, + 229, 232, 202, 23, 117, 215, 170, 37, 44, 34, 250, 10, 219, 22, 47, 222, 61, 1, 9, 68, 75, 15, + 237, 173, 100, 98, 7, 197, 249, 36, 192, 7, 240, 190, 185, 236, 133, 174, 236, 75, 223, 13, + 221, 25, 190, 253, 240, 89, 95, 240, 128, 135, 36, 110, 251, 209, 202, 101, 242, 57, 195, 185, + 131, 149, 66, 48, 27, 27, 211, 12, 156, 202, 105, 248, 232, 199, 198, 175, 12, 127, 214, 78, + 185, 192, 158, 118, 108, 13, 71, 240, 36, 132, 126, 208, 138, 40, 81, 58, 229, 77, 110, 76, 75, + 115, 220, 154, 90, 1, 38, 84, 108, 114, 163, 179, 165, 79, 46, 204, 122, 94, 233, 231, 35, 155, + 253, 208, 229, 9, 254, 92, 65, 127, 84, 18, 97, 62, 47, 22, 208, 204, 231, 113, 167, 11, 66, + 97, 195, 154, 64, 84, 204, 250, 137, 216, 72, 36, 94, 238, 94, 143, 251, 60, 243, 191, 140, + 218, 151, 146, 148, 4, 146, 183, 65, 244, 114, 143, 200, 60, 168, 233, 123, 105, 72, 57, 161, + 149, 100, 207, 108, 35, 241, 235, 131, 245, 187, 100, 128, 115, 119, 229, 0, 38, 172, 215, 220, + 114, 225, 234, 66, 54, 90, 22, 202, 103, 212, 238, 33, 143, 50, 109, 115, 147, 24, 201, 3, 136, + 23, 36, 74, 250, 130, 73, 19, 122, 188, 20, 29, 127, 192, 45, 159, 41, 139, 190, 247, 186, 47, + 242, 174, 113, 119, 87, 26, 19, 49, 212, 62, 6, 8, 74, 79, 45, 3, 190, 148, 222, 3, 101, 83, + 197, 189, 105, 216, 48, 124, 126, 39, 22, 191, 97, 66, 158, 201, 189, 100, 193, 142, 8, 154, + 226, 100, 193, 28, 219, 54, 101, 78, 19, 218, 119, 216, 214, 151, 165, 224, 167, 16, 229, 39, + 75, 240, 243, 123, 234, 103, 80, 225, 123, 136, 128, 36, 222, 138, 218, 250, 146, 174, 55, 138, + 119, 247, 215, 135, 232, 74, 82, 127, 82, 93, 232, 99, 193, 172, 252, 101, 84, 157, 208, 4, + 123, 70, 56, 126, 170, 101, 171, 211, 141, 198, 41, 151, 89, 185, 207, 202, 212, 15, 223, 29, + 189, 209, 47, 7, 64, 32, 109, 61, 5, 147, 219, 96, 40, 214, 166, 95, 202, 77, 220, 100, 38, + 233, 182, 190, 114, 245, 225, 74, 49, 198, 223, 244, 100, 104, 186, 170, 252, 46, 175, 67, 131, + 251, 29, 66, 74, 233, 127, 17, 90, 5, 182, 161, 211, 198, 251, 189, 60, 150, 18, 137, 127, 118, + 129, 47, 166, 242, 7, 191, 138, 206, 98, 87, 48, 149, 39, 43, 150, 188, 17, 234, 220, 10, 183, + 193, 251, 118, 72, 110, 163, 4, 233, 249, 173, 111, 15, 139, 161, 242, 248, 220, 233, 13, 76, + 27, 27, 156, 238, 234, 66, 149, 219, 22, 75, 188, 184, 134, 55, 5, 183, 108, 100, 125, 167, 83, + 142, 38, 17, 91, 128, 71, 33, 131, 205, 4, 228, 95, 246, 233, 207, 36, 34, 182, 95, 231, 26, + 163, 119, 49, 168, 86, 227, 28, 235, 151, 241, 218, 251, 129, 196, 22, 13, 48, 70, 162, 217, + 142, 38, 245, 144, 22, 44, 58, 153, 148, 130, 154, 196, 88, 6, 77, 94, 250, 37, 8, 248, 9, 65, + 76, 235, 1, 83, 44, 38, 111, 241, 35, 7, 73, 211, 166, 231, 175, 216, 93, 131, 231, 86, 35, 73, + 161, 112, 5, 63, 14, 122, 84, 22, 231, 177, 116, 195, 140, 28, 189, 45, 11, 46, 220, 243, 154, + 90, 48, 88, 45, 215, 102, 22, 81, 165, 114, 109, 119, 70, 23, 141, 117, 92, 149, 65, 35, 42, + 19, 199, 85, 186, 110, 223, 81, 143, 135, 226, 128, 126, 74, 78, 87, 237, 80, 70, 76, 63, 247, + 150, 65, 212, 98, 170, 182, 21, 81, 123, 173, 113, 77, 213, 49, 0, 177, 147, 188, 203, 44, 251, + 129, 55, 43, 237, 39, 239, 43, 86, 186, 252, 221, 246, 47, 65, 155, 52, 103, 45, 27, 7, 200, + 15, 34, 42, 2, 247, 228, 159, 114, 32, 57, 243, 223, 249, 124, 205, 250, 46, 244, 81, 142, 100, + 36, 232, 233, 82, 218, 108, 125, 111, 134, 223, 165, 134, 215, 227, 71, 249, 234, 181, 41, 32, + 64, 149, 102, 43, 52, 149, 64, 133, 227, 27, 195, 189, 72, 53, 221, 212, 187, 75, 236, 202, + 230, 171, 170, 255, 191, 16, 82, 204, 197, 106, 35, 222, 95, 46, 19, 204, 199, 125, 232, 22, + 114, 198, 171, 42, 152, 122, 223, 2, 7, 183, 234, 129, 174, 204, 163, 171, 74, 192, 149, 132, + 154, 15, 132, 176, 180, 23, 97, 147, 158, 161, 232, 222, 146, 206, 27, 22, 39, 35, 230, 125, + 205, 231, 222, 114, 1, 46, 144, 195, 52, 45, 241, 48, 104, 177, 26, 63, 43, 197, 93, 231, 13, + 152, 254, 158, 176, 88, 61, 193, 42, 205, 41, 43, 239, 244, 75, 0, 0, 0, 12, 207, 102, 219, + 168, 252, 158, 157, 214, 241, 218, 208, 70, 121, 76, 146, 182, 48, 54, 231, 180, 221, 210, 41, + 65, 25, 224, 190, 171, 74, 117, 206, 243, 114, 35, 222, 219, 123, 115, 248, 79, 41, 191, 44, + 45, 243, 63, 83, 195, 140, 206, 253, 142, 198, 30, 135, 35, 225, 57, 227, 14, 205, 74, 99, 215, + 255, 154, 155, 245, 158, 150, 197, 208, 39, 14, 193, 158, 147, 100, 98, 219, 20, 140, 158, 164, + 172, 38, 152, 120, 162, 10, 167, 185, 182, 164, 91, 102, 217, 90, 23, 53, 183, 43, 153, 101, + 39, 250, 117, 143, 168, 112, 107, 115, 5, 0, 138, 47, 42, 231, 210, 4, 244, 185, 75, 188, 65, + 147, 162, 244, 64, 56, 254, 231, 81, 154, 157, 119, 168, 229, 119, 36, 197, 223, 195, 169, 9, + 68, 36, 216, 42, 251, 241, 111, 217, 186, 27, 169, 31, 2, 67, 182, 45, 178, 6, 27, 136, 42, + 233, 64, 241, 189, 113, 13, 202, 225, 149, 208, 20, 160, 15, 57, 218, 199, 54, 193, 75, 106, + 142, 209, 153, 127, 65, 153, 164, 78, 195, 10, 198, 67, 37, 192, 130, 90, 177, 113, 89, 70, 5, + 136, 249, 236, 212, 230, 101, 210, 243, 98, 50, 173, 58, 170, 39, 59, 18, 109, 52, 163, 51, + 219, 10, 116, 35, 183, 154, 237, 94, 34, 187, 216, 144, 157, 108, 231, 225, 207, 65, 205, 153, + 210, 228, 177, 145, 167, 109, 172, 243, 165, 144, 140, 37, 135, 248, 87, 23, 194, 10, 89, 52, + 53, 95, 218, 65, 5, 121, 60, 67, 56, 88, 194, 4, 253, 217, 80, 35, 199, 3, 241, 90, 49, 15, + 224, 92, 226, 84, 21, 17, 64, 248, 93, 43, 129, 96, 67, 188, 135, 155, 119, 8, 5, 149, 177, 23, + 188, 47, 39, 148, 198, 134, 98, 191, 3, 25, 31, 58, 105, 116, 71, 4, 21, 201, 196, 13, 188, 89, + 213, 132, 96, 182, 240, 217, 33, 214, 168, 212, 67, 24, 106, 240, 30, 101, 151, 94, 206, 1, + 140, 99, 76, 195, 103, 6, 102, +]; +const MSG_1_KEY_2_SIG_2: [u8; 1620] = [ + 0, 0, 8, 74, 0, 0, 0, 7, 21, 85, 96, 186, 161, 84, 188, 77, 54, 213, 235, 175, 219, 135, 161, + 197, 151, 161, 187, 239, 69, 66, 11, 143, 50, 121, 159, 79, 7, 64, 73, 54, 141, 79, 83, 60, 90, + 200, 82, 121, 168, 111, 150, 128, 250, 252, 203, 32, 146, 123, 162, 14, 151, 2, 103, 237, 107, + 219, 252, 101, 217, 63, 97, 140, 104, 84, 204, 114, 250, 52, 198, 216, 95, 43, 168, 211, 149, + 133, 45, 208, 63, 138, 143, 164, 88, 137, 251, 74, 106, 218, 12, 12, 224, 20, 11, 3, 184, 206, + 87, 52, 33, 200, 85, 247, 230, 118, 238, 191, 19, 2, 192, 249, 18, 64, 229, 135, 190, 51, 202, + 165, 72, 99, 8, 146, 14, 101, 27, 124, 255, 181, 205, 70, 169, 62, 204, 85, 8, 77, 6, 9, 146, + 26, 17, 216, 76, 82, 205, 246, 147, 73, 242, 130, 10, 7, 66, 31, 162, 188, 79, 60, 152, 89, + 224, 218, 248, 174, 73, 45, 126, 85, 231, 26, 38, 210, 138, 253, 162, 27, 85, 126, 65, 46, 168, + 91, 57, 162, 204, 209, 156, 251, 187, 69, 78, 234, 202, 182, 246, 124, 250, 19, 188, 233, 57, + 91, 52, 205, 25, 12, 182, 90, 83, 102, 199, 122, 119, 7, 101, 174, 173, 143, 6, 251, 73, 136, + 5, 29, 202, 196, 159, 194, 56, 246, 33, 101, 183, 33, 155, 51, 7, 65, 133, 5, 188, 128, 110, + 194, 1, 242, 181, 203, 177, 125, 70, 196, 101, 188, 221, 171, 161, 141, 80, 20, 99, 51, 192, + 77, 129, 249, 170, 27, 38, 247, 121, 16, 231, 41, 93, 119, 180, 236, 250, 21, 249, 28, 77, 48, + 170, 220, 119, 66, 53, 54, 20, 21, 205, 133, 131, 203, 20, 15, 221, 6, 255, 116, 14, 18, 187, + 81, 102, 248, 10, 209, 20, 230, 246, 234, 86, 167, 227, 222, 160, 88, 48, 34, 77, 2, 92, 129, + 216, 54, 244, 130, 207, 98, 5, 89, 126, 147, 137, 80, 136, 196, 29, 180, 151, 228, 61, 166, + 168, 84, 133, 232, 0, 107, 227, 149, 146, 206, 35, 162, 77, 134, 85, 37, 238, 155, 37, 223, + 194, 49, 204, 126, 133, 170, 64, 156, 143, 108, 238, 80, 110, 204, 148, 244, 238, 29, 206, 128, + 88, 6, 148, 139, 9, 60, 32, 82, 178, 223, 103, 67, 213, 29, 83, 181, 20, 95, 247, 252, 114, + 119, 107, 166, 155, 73, 53, 92, 171, 164, 96, 185, 170, 9, 200, 160, 217, 134, 87, 46, 18, 29, + 73, 109, 253, 0, 143, 204, 12, 253, 134, 239, 49, 193, 183, 183, 79, 24, 232, 147, 175, 164, + 151, 132, 164, 153, 121, 18, 14, 225, 169, 83, 192, 42, 85, 29, 37, 232, 117, 224, 203, 72, + 209, 167, 221, 222, 61, 225, 227, 91, 171, 140, 4, 20, 58, 71, 249, 191, 219, 234, 86, 222, + 237, 106, 67, 114, 78, 172, 67, 22, 18, 103, 98, 20, 239, 5, 40, 24, 159, 249, 250, 148, 155, + 140, 160, 61, 140, 60, 121, 87, 205, 14, 136, 59, 68, 4, 33, 140, 224, 48, 8, 254, 213, 237, + 142, 125, 254, 226, 169, 39, 173, 175, 146, 202, 45, 219, 48, 55, 245, 10, 232, 224, 254, 32, + 153, 11, 223, 70, 10, 55, 46, 224, 249, 192, 37, 227, 70, 100, 192, 136, 147, 28, 99, 80, 229, + 209, 89, 1, 220, 64, 251, 44, 154, 136, 121, 155, 61, 102, 17, 228, 185, 31, 177, 195, 95, 223, + 57, 97, 170, 95, 117, 7, 76, 45, 123, 166, 148, 136, 50, 242, 115, 24, 71, 78, 160, 159, 232, + 65, 169, 134, 85, 4, 233, 66, 144, 147, 226, 236, 3, 76, 182, 84, 253, 178, 147, 119, 235, 73, + 190, 136, 250, 121, 5, 38, 42, 222, 188, 171, 179, 151, 166, 186, 37, 59, 34, 83, 83, 147, 171, + 240, 108, 31, 229, 74, 80, 249, 113, 159, 117, 39, 247, 196, 107, 155, 239, 191, 119, 212, 216, + 131, 100, 112, 239, 78, 216, 38, 27, 129, 52, 191, 220, 161, 231, 192, 57, 188, 168, 203, 176, + 181, 107, 110, 212, 134, 69, 7, 32, 229, 246, 3, 139, 220, 144, 92, 91, 218, 228, 207, 250, + 174, 80, 4, 95, 226, 246, 88, 224, 178, 42, 74, 105, 247, 83, 86, 71, 238, 9, 115, 69, 133, + 229, 56, 132, 205, 154, 212, 252, 87, 178, 118, 241, 102, 163, 0, 161, 143, 42, 188, 36, 213, + 205, 29, 75, 67, 156, 242, 234, 205, 244, 97, 248, 35, 152, 18, 11, 58, 210, 67, 186, 174, 123, + 117, 189, 34, 110, 158, 137, 185, 163, 179, 194, 85, 153, 42, 151, 157, 105, 237, 71, 103, 240, + 197, 103, 196, 75, 14, 29, 160, 176, 107, 154, 218, 15, 9, 20, 43, 177, 213, 149, 125, 244, 95, + 72, 228, 140, 73, 61, 96, 135, 157, 130, 48, 104, 233, 128, 72, 113, 208, 10, 206, 48, 34, 247, + 229, 220, 111, 226, 249, 199, 215, 81, 173, 162, 144, 129, 188, 29, 71, 5, 251, 157, 123, 9, + 59, 113, 226, 2, 132, 89, 29, 27, 132, 220, 28, 43, 244, 54, 5, 185, 106, 62, 90, 195, 235, + 109, 75, 221, 6, 61, 103, 16, 23, 85, 251, 166, 231, 123, 162, 32, 91, 251, 45, 255, 125, 180, + 156, 168, 135, 154, 168, 220, 227, 170, 83, 158, 98, 47, 168, 201, 224, 130, 65, 89, 74, 190, + 227, 154, 33, 7, 250, 31, 175, 219, 172, 25, 97, 239, 210, 232, 49, 191, 194, 62, 1, 13, 124, + 243, 173, 165, 178, 207, 118, 151, 187, 103, 251, 225, 100, 242, 20, 14, 14, 152, 1, 98, 164, + 180, 163, 94, 56, 187, 187, 48, 149, 118, 227, 72, 97, 16, 44, 94, 240, 65, 47, 142, 201, 169, + 207, 192, 24, 153, 141, 144, 159, 191, 234, 218, 165, 181, 34, 28, 233, 181, 110, 134, 181, 55, + 24, 195, 159, 206, 135, 134, 234, 227, 209, 77, 181, 164, 103, 210, 172, 106, 134, 9, 226, 243, + 10, 122, 87, 24, 208, 34, 55, 46, 65, 82, 6, 173, 95, 78, 23, 52, 121, 204, 228, 185, 26, 183, + 5, 60, 123, 94, 235, 61, 15, 221, 211, 45, 152, 199, 13, 31, 73, 128, 224, 185, 223, 165, 186, + 118, 178, 163, 127, 72, 235, 186, 209, 157, 242, 143, 73, 41, 59, 131, 211, 68, 50, 19, 247, + 128, 146, 148, 144, 77, 16, 54, 23, 111, 39, 109, 237, 8, 196, 5, 22, 50, 83, 136, 220, 179, + 224, 104, 226, 205, 231, 201, 149, 151, 227, 133, 49, 92, 74, 133, 249, 201, 99, 40, 183, 11, + 240, 71, 210, 46, 162, 177, 208, 111, 179, 50, 55, 88, 15, 31, 237, 103, 4, 201, 38, 84, 217, + 119, 46, 84, 184, 152, 89, 251, 99, 223, 59, 42, 89, 12, 200, 65, 201, 8, 227, 210, 130, 52, + 59, 145, 55, 150, 69, 229, 194, 40, 216, 18, 34, 92, 199, 112, 143, 57, 204, 188, 126, 186, + 191, 170, 193, 74, 43, 208, 220, 129, 187, 170, 238, 71, 119, 30, 221, 131, 34, 147, 89, 100, + 83, 57, 238, 64, 57, 11, 251, 208, 68, 20, 191, 181, 227, 196, 149, 155, 38, 83, 216, 215, 225, + 87, 46, 71, 97, 254, 191, 82, 252, 213, 79, 79, 176, 202, 86, 38, 131, 0, 0, 0, 12, 167, 183, + 33, 36, 215, 185, 233, 87, 178, 53, 87, 113, 6, 141, 196, 128, 24, 179, 231, 37, 19, 63, 64, + 129, 253, 205, 112, 179, 168, 242, 250, 143, 222, 56, 82, 119, 148, 92, 171, 229, 72, 148, 49, + 33, 80, 164, 251, 141, 215, 44, 18, 134, 81, 78, 12, 67, 218, 82, 184, 16, 172, 78, 58, 168, + 32, 64, 157, 151, 237, 203, 232, 11, 103, 160, 61, 34, 120, 167, 172, 233, 251, 128, 214, 82, + 113, 117, 166, 26, 128, 138, 25, 106, 89, 107, 230, 44, 34, 1, 38, 95, 16, 164, 121, 172, 153, + 230, 107, 101, 74, 210, 224, 70, 190, 73, 176, 151, 37, 52, 150, 40, 225, 125, 125, 4, 72, 103, + 235, 172, 76, 255, 200, 68, 92, 161, 132, 120, 60, 156, 179, 78, 39, 222, 255, 192, 17, 116, + 164, 245, 160, 56, 201, 3, 114, 160, 17, 97, 53, 175, 155, 153, 181, 12, 17, 98, 197, 163, 81, + 139, 206, 85, 87, 10, 202, 13, 63, 132, 162, 15, 150, 104, 245, 178, 157, 100, 151, 193, 77, + 47, 181, 139, 87, 137, 190, 245, 48, 43, 241, 75, 226, 168, 105, 94, 106, 142, 161, 205, 169, + 96, 5, 195, 115, 242, 35, 63, 38, 44, 244, 143, 140, 64, 154, 112, 250, 148, 127, 173, 147, 80, + 115, 108, 146, 179, 138, 253, 170, 181, 42, 78, 45, 38, 227, 2, 91, 133, 170, 73, 161, 190, + 255, 37, 36, 62, 13, 21, 54, 220, 107, 234, 137, 182, 110, 184, 161, 126, 172, 151, 30, 3, 47, + 43, 241, 116, 190, 164, 113, 253, 69, 127, 31, 112, 119, 122, 67, 55, 232, 244, 63, 140, 106, + 244, 7, 173, 164, 16, 158, 187, 201, 9, 1, 193, 138, 80, 71, 196, 148, 254, 155, 94, 36, 62, + 233, 110, 47, 39, 148, 198, 134, 98, 191, 3, 25, 31, 58, 105, 116, 71, 4, 21, 201, 196, 13, + 188, 89, 213, 132, 96, 182, 240, 217, 33, 214, 168, 212, 67, 24, 106, 240, 30, 101, 151, 94, + 206, 1, 140, 99, 76, 195, 103, 6, 102, +]; + +const MSG_2: [u8; 128] = [ + 0x43, 0x5f, 0x92, 0xc5, 0xcb, 0x4c, 0xcc, 0xd3, 0xd9, 0x4d, 0xd1, 0x7d, 0xd5, 0x03, 0x7d, 0x23, + 0x7c, 0x3a, 0x0f, 0xf8, 0x21, 0x81, 0x10, 0x99, 0xb5, 0xdf, 0x6b, 0x48, 0xc3, 0x07, 0x6e, 0x15, + 0x71, 0x88, 0xb1, 0x1a, 0xac, 0x8d, 0xcd, 0xdf, 0xf9, 0x0c, 0x3b, 0x6c, 0xe2, 0x09, 0x49, 0xfd, + 0x2a, 0x21, 0xa5, 0xcf, 0xc2, 0xe5, 0x01, 0xee, 0x6e, 0x86, 0x46, 0xcf, 0xde, 0x6c, 0x18, 0x52, + 0x16, 0x2f, 0xa9, 0x6f, 0xc8, 0x7a, 0xb3, 0x0a, 0xde, 0x8b, 0x71, 0x40, 0x21, 0x3a, 0x48, 0xef, + 0x93, 0xaf, 0x3a, 0x95, 0x7e, 0x57, 0xac, 0x7d, 0xcd, 0x17, 0x8f, 0x6c, 0x62, 0x6f, 0x0d, 0x72, + 0x19, 0xb0, 0xa1, 0x25, 0x0c, 0xe5, 0xe2, 0x6c, 0xab, 0xa4, 0xcd, 0x6f, 0x5c, 0x7e, 0x37, 0xb2, + 0xf9, 0x0a, 0xe5, 0xf4, 0x1c, 0x33, 0x56, 0x58, 0x3f, 0xf6, 0x64, 0x2a, 0xd6, 0xdc, 0x25, 0xa8, +]; +const MSG_2_PUB_KEY_1: [u8; 48] = [ + 0, 0, 0, 12, 0, 0, 0, 7, 158, 21, 216, 17, 95, 130, 236, 102, 198, 76, 158, 127, 16, 17, 231, + 253, 75, 24, 41, 77, 102, 29, 171, 76, 64, 141, 172, 11, 255, 51, 137, 27, 204, 84, 94, 236, + 169, 83, 122, 239, +]; +const MSG_2_KEY_1_SIG_1: [u8; 1620] = [ + 0, 0, 125, 153, 0, 0, 0, 7, 89, 57, 186, 220, 178, 244, 74, 106, 186, 6, 72, 106, 84, 38, 6, + 21, 83, 245, 74, 244, 246, 254, 84, 210, 188, 203, 149, 103, 192, 80, 116, 169, 131, 62, 254, + 205, 123, 240, 54, 63, 180, 189, 33, 187, 173, 37, 179, 45, 123, 35, 29, 185, 230, 204, 119, + 14, 208, 252, 84, 196, 56, 127, 90, 7, 125, 248, 238, 147, 248, 96, 199, 170, 250, 2, 221, 115, + 153, 147, 25, 143, 157, 217, 43, 184, 241, 75, 173, 46, 116, 24, 37, 74, 59, 204, 4, 55, 106, + 89, 145, 162, 85, 88, 61, 17, 167, 141, 173, 202, 208, 238, 107, 149, 52, 114, 161, 219, 119, + 84, 132, 208, 16, 186, 49, 227, 196, 171, 124, 97, 181, 7, 63, 232, 130, 125, 101, 176, 1, 209, + 62, 196, 39, 242, 154, 7, 58, 216, 148, 11, 29, 159, 78, 199, 211, 229, 114, 86, 220, 80, 66, + 235, 161, 58, 154, 81, 166, 144, 126, 75, 116, 218, 194, 158, 90, 147, 27, 244, 128, 221, 108, + 24, 129, 172, 161, 94, 30, 139, 73, 31, 86, 9, 153, 0, 165, 49, 207, 29, 110, 31, 121, 1, 139, + 184, 74, 199, 95, 62, 20, 54, 104, 146, 130, 248, 48, 129, 250, 83, 110, 52, 155, 97, 193, 71, + 147, 239, 100, 164, 228, 242, 186, 86, 252, 52, 15, 187, 37, 132, 230, 8, 204, 106, 171, 70, + 139, 20, 53, 241, 157, 13, 183, 145, 73, 127, 254, 28, 195, 66, 191, 25, 110, 104, 197, 29, + 131, 223, 70, 163, 146, 156, 214, 174, 27, 85, 58, 191, 50, 232, 144, 210, 168, 203, 146, 249, + 99, 199, 22, 40, 82, 41, 41, 184, 212, 21, 163, 87, 181, 54, 233, 203, 205, 96, 228, 20, 248, + 62, 11, 69, 12, 135, 113, 90, 68, 192, 24, 87, 50, 124, 251, 207, 197, 212, 97, 115, 115, 159, + 144, 113, 46, 5, 18, 172, 4, 70, 108, 77, 232, 200, 42, 31, 209, 147, 124, 129, 10, 48, 79, + 143, 154, 133, 148, 79, 223, 212, 189, 164, 247, 191, 220, 63, 169, 189, 123, 64, 55, 185, 214, + 231, 164, 41, 174, 34, 74, 106, 99, 21, 75, 65, 116, 142, 183, 119, 24, 217, 58, 104, 137, 158, + 20, 167, 33, 167, 120, 106, 152, 158, 115, 131, 98, 149, 107, 80, 17, 204, 173, 254, 59, 24, + 173, 69, 181, 16, 24, 41, 59, 175, 46, 45, 240, 45, 154, 138, 139, 45, 122, 18, 212, 14, 148, + 181, 111, 87, 235, 244, 171, 150, 29, 71, 185, 152, 228, 198, 77, 146, 77, 117, 131, 153, 152, + 125, 75, 89, 91, 148, 191, 243, 2, 202, 246, 170, 42, 15, 100, 62, 26, 57, 200, 60, 91, 80, + 226, 143, 162, 137, 247, 137, 232, 227, 246, 138, 44, 152, 224, 245, 44, 246, 69, 167, 40, 147, + 224, 148, 104, 54, 243, 253, 138, 161, 25, 193, 249, 122, 215, 15, 98, 129, 255, 101, 38, 1, 7, + 118, 37, 217, 4, 135, 207, 150, 201, 247, 18, 31, 6, 99, 82, 201, 229, 44, 124, 226, 166, 187, + 78, 64, 248, 35, 150, 121, 195, 225, 21, 84, 114, 235, 209, 46, 181, 199, 52, 240, 166, 67, + 234, 106, 186, 4, 145, 39, 112, 174, 181, 242, 34, 195, 51, 108, 172, 29, 160, 242, 120, 131, + 97, 222, 177, 185, 204, 131, 120, 188, 36, 149, 152, 132, 242, 84, 83, 48, 213, 85, 221, 7, + 224, 106, 116, 70, 218, 252, 199, 152, 52, 20, 58, 243, 120, 185, 198, 232, 74, 177, 61, 205, + 29, 43, 92, 128, 48, 116, 9, 163, 150, 81, 126, 190, 166, 123, 139, 100, 247, 248, 194, 210, 9, + 18, 109, 113, 167, 124, 233, 58, 201, 29, 217, 1, 61, 164, 91, 146, 142, 213, 154, 31, 156, + 216, 50, 70, 175, 26, 226, 193, 186, 23, 73, 33, 239, 233, 67, 34, 101, 197, 13, 132, 92, 25, + 75, 89, 4, 216, 119, 66, 39, 221, 70, 107, 9, 247, 183, 229, 253, 229, 172, 114, 159, 71, 140, + 137, 156, 88, 106, 63, 194, 171, 161, 86, 196, 5, 65, 44, 161, 23, 183, 66, 62, 119, 157, 110, + 108, 179, 211, 197, 68, 185, 88, 221, 51, 81, 247, 146, 157, 129, 64, 100, 76, 1, 83, 99, 16, + 146, 242, 208, 8, 145, 242, 132, 34, 129, 246, 150, 99, 234, 241, 178, 134, 241, 150, 19, 16, + 16, 91, 54, 37, 70, 37, 252, 236, 186, 104, 55, 35, 45, 113, 123, 145, 215, 112, 84, 120, 46, + 151, 90, 220, 142, 184, 219, 247, 13, 248, 89, 18, 192, 217, 111, 92, 42, 22, 244, 22, 195, + 130, 207, 170, 255, 111, 220, 90, 70, 0, 92, 120, 209, 252, 114, 111, 170, 233, 83, 169, 246, + 218, 95, 34, 9, 41, 14, 138, 189, 101, 22, 243, 116, 165, 207, 168, 234, 159, 147, 192, 204, + 96, 243, 98, 120, 181, 15, 42, 244, 109, 32, 96, 89, 128, 60, 205, 126, 184, 225, 57, 90, 42, + 199, 181, 71, 62, 192, 199, 160, 10, 61, 181, 192, 219, 157, 64, 44, 95, 238, 46, 52, 221, 27, + 10, 4, 216, 53, 249, 167, 201, 193, 0, 254, 14, 120, 93, 74, 169, 105, 74, 187, 181, 229, 138, + 182, 249, 233, 241, 204, 156, 213, 27, 48, 51, 250, 78, 189, 189, 27, 95, 161, 115, 234, 112, + 251, 0, 89, 103, 155, 243, 90, 51, 123, 155, 225, 229, 194, 184, 207, 204, 214, 136, 94, 24, + 218, 2, 77, 27, 131, 4, 172, 126, 131, 250, 159, 222, 101, 188, 157, 67, 179, 3, 186, 3, 211, + 8, 173, 33, 20, 235, 11, 195, 54, 13, 186, 129, 202, 41, 157, 181, 244, 104, 214, 59, 236, 250, + 195, 220, 242, 96, 182, 216, 185, 179, 198, 144, 35, 199, 51, 194, 164, 210, 4, 36, 84, 178, + 149, 241, 214, 192, 98, 141, 17, 71, 118, 117, 95, 7, 235, 35, 190, 162, 8, 141, 100, 131, 202, + 59, 194, 70, 201, 223, 47, 6, 68, 42, 138, 140, 165, 217, 222, 143, 58, 22, 203, 69, 155, 254, + 74, 180, 108, 178, 138, 132, 9, 43, 153, 200, 99, 172, 231, 133, 222, 109, 1, 101, 254, 59, + 234, 6, 196, 78, 140, 113, 127, 25, 90, 79, 112, 180, 4, 34, 160, 98, 173, 78, 127, 242, 255, + 118, 57, 58, 107, 95, 86, 26, 65, 117, 39, 62, 176, 118, 232, 144, 167, 195, 56, 121, 182, 176, + 207, 136, 254, 37, 216, 205, 234, 22, 156, 181, 64, 221, 56, 192, 33, 5, 121, 145, 254, 142, + 128, 168, 93, 148, 116, 93, 106, 231, 49, 123, 137, 186, 166, 148, 211, 47, 17, 212, 74, 33, + 93, 203, 72, 127, 171, 17, 161, 111, 75, 55, 23, 241, 116, 4, 58, 56, 239, 69, 230, 103, 60, + 195, 40, 144, 45, 34, 66, 37, 101, 230, 250, 94, 171, 62, 241, 36, 223, 117, 199, 116, 232, 50, + 157, 40, 21, 93, 127, 79, 253, 209, 164, 133, 173, 94, 236, 139, 128, 165, 125, 119, 216, 118, + 10, 107, 18, 227, 94, 145, 254, 195, 45, 185, 22, 141, 191, 159, 161, 175, 65, 206, 180, 223, + 158, 14, 125, 108, 99, 97, 161, 99, 13, 184, 232, 54, 115, 39, 218, 70, 29, 128, 228, 8, 92, 0, + 0, 0, 12, 44, 114, 216, 81, 191, 42, 30, 220, 218, 1, 229, 247, 92, 156, 160, 46, 7, 127, 185, + 107, 66, 31, 157, 135, 74, 226, 211, 69, 213, 228, 237, 30, 182, 200, 174, 127, 210, 57, 213, + 140, 255, 195, 1, 181, 210, 63, 13, 22, 242, 13, 177, 19, 165, 201, 248, 117, 231, 239, 67, + 137, 73, 109, 158, 79, 209, 98, 202, 229, 191, 175, 146, 129, 96, 96, 168, 90, 172, 190, 188, + 238, 243, 188, 108, 135, 163, 205, 17, 19, 117, 189, 165, 220, 198, 170, 146, 160, 228, 249, + 196, 0, 175, 143, 122, 205, 236, 196, 77, 212, 191, 241, 116, 104, 84, 207, 71, 130, 170, 121, + 42, 238, 126, 129, 67, 43, 178, 46, 21, 111, 118, 156, 113, 123, 85, 177, 50, 209, 174, 219, + 144, 151, 235, 13, 119, 217, 220, 85, 191, 10, 127, 85, 31, 112, 36, 30, 146, 220, 88, 218, 56, + 12, 35, 69, 143, 6, 147, 230, 181, 219, 118, 56, 15, 235, 218, 28, 189, 157, 209, 235, 75, 194, + 120, 204, 140, 124, 170, 236, 59, 62, 189, 77, 72, 205, 19, 243, 69, 232, 209, 73, 131, 106, + 150, 224, 245, 170, 63, 37, 164, 23, 147, 20, 63, 115, 205, 213, 48, 164, 28, 10, 89, 40, 134, + 6, 52, 230, 58, 126, 177, 108, 8, 62, 108, 57, 113, 119, 41, 91, 19, 67, 49, 144, 84, 145, 155, + 84, 24, 194, 236, 33, 156, 165, 25, 123, 163, 128, 30, 187, 198, 249, 103, 72, 254, 144, 69, + 157, 83, 186, 51, 115, 178, 41, 37, 198, 36, 117, 245, 62, 119, 248, 167, 253, 114, 62, 144, + 84, 104, 253, 92, 10, 23, 206, 55, 179, 31, 24, 155, 80, 58, 110, 90, 46, 176, 233, 52, 12, 25, + 141, 19, 207, 251, 33, 31, 214, 56, 175, 24, 227, 185, 85, 148, 175, 92, 52, 41, 110, 120, 71, + 5, 31, 82, 50, 58, 178, 133, 30, 203, 111, 4, 67, 76, 157, 46, 72, 204, 248, 31, 189, 105, 99, + 216, 3, 221, 10, 215, 32, 12, 129, 18, 18, 4, 159, +]; +const MSG_2_KEY_1_SIG_2: [u8; 1620] = [ + 0, 0, 93, 140, 0, 0, 0, 7, 2, 3, 149, 224, 98, 142, 117, 32, 54, 183, 11, 58, 199, 194, 145, + 97, 234, 187, 192, 129, 129, 20, 192, 146, 224, 125, 145, 82, 138, 77, 125, 107, 22, 148, 226, + 34, 70, 193, 255, 151, 115, 20, 57, 222, 134, 193, 115, 109, 82, 102, 93, 64, 140, 239, 5, 214, + 152, 106, 70, 63, 145, 68, 253, 127, 227, 181, 66, 71, 148, 1, 60, 45, 220, 183, 43, 103, 61, + 31, 7, 240, 172, 185, 82, 247, 15, 174, 112, 203, 218, 180, 175, 31, 243, 125, 114, 32, 66, + 125, 107, 211, 98, 140, 180, 53, 175, 100, 45, 224, 22, 199, 150, 69, 15, 14, 223, 1, 186, 22, + 119, 204, 159, 84, 218, 134, 33, 131, 144, 9, 89, 55, 93, 64, 243, 161, 169, 168, 110, 69, 127, + 5, 76, 129, 174, 35, 68, 106, 88, 112, 36, 101, 235, 212, 84, 188, 23, 98, 249, 83, 0, 117, + 175, 138, 199, 24, 254, 143, 116, 33, 132, 171, 235, 200, 233, 97, 207, 54, 195, 11, 58, 106, + 85, 71, 194, 53, 240, 45, 105, 190, 159, 149, 83, 131, 102, 235, 63, 120, 109, 252, 220, 39, + 139, 67, 126, 15, 238, 204, 108, 240, 202, 52, 116, 16, 57, 76, 40, 203, 215, 96, 164, 133, + 169, 21, 199, 177, 101, 183, 169, 196, 35, 183, 7, 230, 184, 239, 74, 119, 204, 46, 110, 119, + 11, 13, 111, 193, 135, 117, 105, 46, 144, 82, 123, 146, 82, 29, 13, 82, 120, 113, 7, 74, 226, + 72, 148, 23, 194, 223, 248, 99, 230, 202, 46, 211, 83, 161, 178, 18, 34, 26, 37, 151, 124, 133, + 98, 99, 60, 97, 168, 14, 206, 113, 206, 195, 172, 95, 5, 168, 199, 11, 216, 144, 253, 191, 111, + 159, 215, 206, 109, 73, 115, 176, 242, 57, 199, 41, 90, 215, 101, 49, 126, 142, 186, 221, 34, + 29, 188, 203, 222, 9, 219, 238, 165, 51, 132, 245, 33, 199, 17, 166, 43, 108, 41, 109, 89, 169, + 109, 8, 145, 220, 97, 104, 18, 57, 103, 190, 221, 121, 23, 229, 146, 117, 211, 49, 214, 244, + 141, 82, 18, 114, 162, 139, 211, 251, 136, 48, 178, 127, 135, 121, 26, 3, 253, 178, 111, 114, + 136, 215, 44, 56, 90, 151, 31, 43, 48, 240, 198, 187, 131, 131, 66, 30, 115, 124, 20, 99, 210, + 18, 48, 178, 1, 185, 240, 209, 49, 92, 191, 249, 107, 158, 110, 239, 226, 50, 66, 212, 204, + 163, 82, 234, 103, 14, 115, 162, 25, 46, 205, 146, 214, 20, 74, 240, 80, 79, 147, 50, 247, 7, + 158, 188, 21, 27, 36, 139, 118, 143, 7, 218, 16, 44, 209, 177, 224, 96, 101, 81, 228, 83, 51, + 36, 50, 74, 186, 22, 184, 168, 100, 139, 138, 133, 23, 141, 215, 234, 28, 204, 87, 210, 60, 52, + 160, 41, 184, 119, 61, 206, 40, 31, 44, 202, 4, 148, 209, 187, 154, 17, 94, 47, 1, 88, 144, + 116, 190, 69, 129, 147, 202, 27, 192, 105, 182, 106, 207, 9, 2, 114, 228, 132, 46, 4, 96, 4, + 21, 106, 140, 16, 106, 131, 151, 138, 176, 113, 13, 175, 89, 228, 148, 110, 16, 87, 11, 26, 31, + 120, 117, 119, 146, 218, 194, 17, 83, 222, 163, 208, 62, 48, 162, 253, 82, 90, 95, 167, 48, + 220, 226, 70, 209, 121, 242, 82, 162, 101, 252, 4, 218, 240, 12, 70, 194, 91, 14, 232, 187, + 102, 209, 144, 73, 194, 40, 22, 142, 230, 77, 74, 86, 87, 176, 29, 105, 190, 19, 81, 109, 234, + 136, 233, 139, 217, 8, 162, 145, 95, 41, 37, 198, 121, 116, 32, 100, 56, 143, 69, 44, 136, 141, + 239, 130, 191, 228, 209, 89, 200, 168, 237, 39, 227, 236, 154, 212, 126, 102, 35, 59, 111, 29, + 108, 5, 44, 8, 253, 123, 117, 62, 209, 28, 166, 68, 104, 242, 156, 15, 160, 77, 173, 214, 1, + 96, 85, 150, 209, 177, 123, 255, 36, 208, 153, 79, 22, 32, 246, 57, 193, 40, 26, 43, 48, 102, + 58, 3, 67, 61, 139, 87, 151, 255, 40, 100, 220, 198, 240, 225, 138, 16, 89, 140, 217, 188, 252, + 188, 6, 7, 99, 56, 105, 73, 22, 196, 183, 32, 183, 66, 93, 45, 217, 83, 34, 26, 154, 94, 251, + 36, 168, 149, 121, 81, 88, 58, 105, 229, 38, 247, 244, 204, 236, 166, 109, 139, 180, 47, 52, + 19, 166, 79, 152, 237, 213, 200, 244, 232, 170, 179, 221, 121, 152, 118, 250, 7, 233, 95, 157, + 97, 247, 88, 182, 202, 25, 139, 64, 37, 4, 106, 154, 251, 172, 19, 116, 25, 15, 83, 199, 6, 61, + 222, 243, 126, 205, 240, 217, 241, 129, 82, 121, 55, 223, 56, 42, 44, 155, 93, 90, 227, 116, + 72, 63, 184, 150, 97, 207, 143, 61, 76, 194, 41, 200, 17, 31, 206, 249, 173, 69, 153, 163, 87, + 43, 72, 196, 93, 14, 202, 81, 40, 17, 220, 249, 245, 182, 10, 188, 246, 135, 108, 68, 15, 240, + 183, 101, 10, 214, 90, 233, 244, 120, 190, 113, 208, 31, 28, 54, 248, 193, 207, 153, 249, 151, + 88, 242, 171, 51, 169, 240, 73, 226, 73, 228, 64, 92, 10, 120, 131, 127, 222, 24, 67, 149, 150, + 166, 243, 74, 238, 53, 161, 138, 71, 31, 229, 0, 50, 57, 40, 243, 161, 114, 176, 155, 252, 247, + 231, 160, 30, 12, 86, 129, 254, 198, 67, 70, 143, 8, 184, 143, 221, 73, 238, 140, 182, 182, + 189, 212, 183, 95, 183, 0, 112, 35, 160, 212, 60, 156, 34, 107, 171, 127, 122, 164, 39, 133, + 36, 253, 252, 233, 153, 3, 100, 99, 52, 33, 189, 228, 34, 75, 100, 151, 179, 75, 94, 59, 5, + 255, 188, 24, 5, 115, 242, 98, 112, 127, 100, 217, 34, 106, 159, 80, 152, 198, 253, 162, 41, + 103, 134, 106, 249, 158, 209, 64, 39, 10, 84, 211, 35, 165, 136, 187, 177, 217, 176, 238, 68, + 66, 49, 17, 240, 198, 81, 179, 206, 21, 131, 118, 9, 236, 21, 93, 163, 173, 141, 112, 223, 43, + 38, 44, 15, 169, 53, 107, 254, 142, 53, 98, 82, 14, 114, 64, 157, 7, 158, 169, 241, 196, 17, 9, + 35, 152, 4, 115, 78, 146, 224, 17, 218, 1, 185, 59, 18, 17, 106, 224, 15, 125, 69, 121, 157, + 167, 100, 31, 169, 60, 154, 52, 253, 251, 233, 86, 53, 122, 253, 113, 231, 160, 8, 235, 189, + 250, 238, 14, 18, 80, 111, 144, 91, 155, 75, 98, 84, 226, 131, 172, 223, 65, 199, 253, 209, 58, + 168, 99, 81, 237, 157, 96, 12, 36, 213, 27, 11, 129, 74, 57, 138, 218, 195, 65, 70, 122, 133, + 1, 18, 27, 243, 126, 227, 19, 72, 90, 45, 57, 215, 48, 29, 11, 134, 206, 217, 131, 118, 92, + 124, 225, 94, 119, 64, 88, 7, 221, 142, 160, 136, 150, 171, 87, 150, 19, 248, 255, 27, 207, + 145, 83, 82, 133, 120, 191, 117, 150, 173, 81, 168, 28, 178, 242, 32, 42, 58, 225, 233, 242, 9, + 66, 106, 252, 168, 196, 163, 18, 127, 186, 233, 159, 210, 212, 45, 149, 120, 203, 26, 153, 145, + 115, 4, 50, 249, 202, 136, 251, 189, 217, 89, 98, 77, 40, 243, 35, 0, 0, 0, 12, 104, 155, 6, + 113, 111, 149, 251, 215, 247, 27, 141, 39, 10, 226, 38, 31, 205, 163, 164, 8, 240, 107, 135, + 111, 31, 45, 15, 232, 213, 101, 124, 212, 143, 164, 80, 95, 132, 8, 194, 249, 96, 97, 244, 40, + 24, 45, 21, 227, 253, 167, 236, 53, 148, 34, 172, 59, 94, 18, 81, 132, 39, 91, 234, 223, 76, + 118, 7, 22, 236, 208, 111, 2, 4, 9, 22, 163, 139, 33, 22, 40, 10, 6, 32, 199, 73, 16, 93, 154, + 231, 25, 200, 184, 154, 56, 99, 62, 218, 15, 84, 240, 165, 13, 179, 168, 54, 189, 85, 7, 156, + 230, 215, 172, 100, 207, 7, 170, 192, 87, 201, 59, 197, 42, 15, 193, 149, 107, 97, 212, 225, + 170, 117, 202, 15, 156, 208, 242, 212, 81, 14, 172, 204, 5, 186, 22, 178, 139, 55, 226, 241, + 86, 230, 21, 82, 71, 71, 24, 55, 134, 184, 87, 159, 174, 175, 122, 46, 109, 71, 183, 83, 244, + 190, 79, 59, 132, 130, 253, 230, 184, 139, 43, 113, 217, 117, 217, 238, 154, 165, 146, 168, + 230, 218, 165, 102, 109, 186, 21, 150, 146, 135, 230, 60, 159, 57, 200, 205, 119, 110, 9, 182, + 212, 32, 61, 222, 244, 245, 71, 34, 173, 227, 155, 20, 166, 115, 216, 165, 47, 78, 65, 186, 86, + 79, 236, 177, 114, 78, 124, 100, 3, 11, 163, 193, 193, 145, 107, 79, 7, 200, 222, 13, 132, 184, + 192, 3, 179, 99, 189, 88, 106, 46, 67, 36, 144, 171, 49, 249, 63, 70, 95, 84, 36, 10, 104, 232, + 108, 80, 116, 179, 154, 60, 186, 48, 34, 221, 25, 5, 158, 175, 99, 75, 70, 249, 132, 206, 50, + 115, 179, 13, 220, 176, 18, 55, 160, 248, 106, 234, 223, 252, 166, 70, 117, 149, 15, 32, 198, + 100, 143, 249, 161, 114, 91, 67, 65, 12, 81, 165, 41, 213, 254, 181, 215, 125, 85, 29, 249, + 240, 84, 4, 67, 76, 157, 46, 72, 204, 248, 31, 189, 105, 99, 216, 3, 221, 10, 215, 32, 12, 129, + 18, 18, 4, 159, +]; +const MSG_2_PUB_KEY_2: [u8; 48] = [ + 0, 0, 0, 12, 0, 0, 0, 7, 103, 22, 39, 191, 251, 221, 29, 16, 189, 212, 105, 129, 49, 122, 86, + 224, 209, 175, 92, 209, 119, 179, 176, 198, 119, 190, 140, 47, 101, 0, 161, 145, 145, 154, 14, + 37, 180, 167, 226, 230, +]; +const MSG_2_KEY_2_SIG_1: [u8; 1620] = [ + 0, 0, 83, 133, 0, 0, 0, 7, 251, 252, 82, 210, 191, 95, 217, 251, 226, 37, 120, 212, 2, 128, + 247, 222, 43, 32, 255, 173, 193, 168, 52, 214, 84, 133, 47, 81, 155, 92, 64, 235, 63, 236, 131, + 138, 75, 127, 51, 102, 46, 181, 78, 247, 136, 215, 66, 2, 117, 49, 206, 114, 157, 61, 150, 173, + 221, 154, 2, 242, 165, 80, 72, 226, 189, 0, 75, 247, 37, 17, 5, 101, 182, 145, 7, 244, 18, 238, + 210, 191, 113, 249, 147, 214, 92, 54, 133, 31, 13, 246, 24, 135, 96, 109, 53, 243, 250, 170, + 213, 95, 75, 160, 7, 131, 205, 85, 144, 130, 102, 201, 167, 73, 211, 191, 206, 81, 60, 86, 164, + 159, 59, 219, 216, 193, 111, 135, 207, 71, 74, 102, 193, 157, 69, 17, 84, 226, 144, 138, 199, + 115, 94, 158, 141, 166, 194, 156, 125, 187, 229, 182, 131, 196, 139, 154, 45, 239, 236, 117, + 234, 170, 246, 238, 234, 207, 123, 131, 4, 60, 252, 218, 113, 250, 36, 233, 12, 7, 1, 179, 118, + 253, 138, 74, 51, 177, 91, 59, 249, 80, 5, 1, 108, 73, 151, 128, 90, 237, 122, 143, 57, 148, + 166, 53, 76, 174, 34, 125, 203, 239, 238, 215, 33, 237, 39, 121, 38, 40, 186, 107, 83, 44, 32, + 161, 246, 63, 194, 96, 207, 166, 196, 46, 237, 246, 55, 206, 146, 109, 162, 207, 190, 209, 121, + 213, 136, 69, 102, 208, 78, 238, 32, 114, 8, 205, 230, 11, 58, 128, 171, 192, 183, 100, 229, + 173, 60, 5, 233, 5, 89, 229, 125, 95, 145, 128, 37, 88, 117, 26, 202, 96, 152, 45, 119, 156, + 120, 114, 95, 120, 23, 38, 129, 31, 20, 46, 95, 191, 212, 245, 99, 225, 142, 17, 195, 109, 252, + 138, 11, 173, 190, 0, 34, 30, 27, 247, 61, 147, 30, 117, 68, 162, 2, 4, 136, 62, 53, 159, 0, + 98, 137, 136, 54, 245, 41, 138, 115, 56, 96, 1, 201, 53, 194, 241, 170, 102, 64, 145, 196, 178, + 114, 41, 15, 48, 11, 163, 44, 32, 168, 72, 155, 16, 185, 160, 145, 177, 31, 248, 110, 62, 187, + 128, 202, 216, 129, 71, 192, 249, 51, 206, 176, 84, 168, 237, 97, 217, 173, 69, 225, 218, 8, + 229, 46, 236, 236, 132, 30, 238, 81, 148, 167, 57, 34, 101, 6, 192, 71, 8, 255, 51, 250, 83, + 122, 101, 8, 30, 138, 47, 229, 85, 184, 245, 218, 7, 170, 245, 242, 143, 2, 209, 175, 126, 183, + 25, 213, 252, 149, 194, 170, 68, 158, 121, 167, 14, 164, 69, 242, 209, 95, 241, 183, 71, 111, + 200, 41, 227, 139, 24, 180, 189, 227, 79, 47, 68, 117, 204, 111, 206, 47, 128, 11, 184, 252, + 78, 55, 129, 214, 150, 194, 21, 48, 173, 222, 34, 50, 152, 178, 82, 232, 209, 2, 33, 106, 204, + 28, 214, 65, 181, 186, 27, 152, 20, 178, 240, 212, 109, 65, 217, 81, 198, 66, 118, 124, 82, + 203, 23, 244, 105, 228, 195, 220, 41, 81, 197, 213, 43, 233, 71, 246, 173, 211, 218, 53, 246, + 9, 22, 157, 124, 81, 194, 231, 83, 131, 195, 138, 196, 75, 183, 68, 113, 97, 153, 218, 205, 77, + 129, 136, 234, 194, 99, 9, 145, 19, 188, 134, 99, 7, 177, 89, 28, 133, 141, 37, 99, 18, 250, + 87, 108, 232, 93, 59, 93, 10, 249, 39, 129, 7, 167, 63, 215, 28, 253, 142, 189, 77, 136, 121, + 125, 156, 27, 223, 238, 181, 249, 144, 22, 142, 73, 155, 90, 78, 121, 191, 127, 183, 32, 198, + 212, 154, 202, 235, 151, 91, 224, 6, 185, 69, 117, 238, 100, 142, 3, 108, 141, 91, 13, 92, 151, + 35, 114, 17, 49, 215, 134, 3, 181, 221, 127, 252, 156, 55, 15, 229, 237, 145, 167, 202, 103, + 54, 143, 220, 228, 75, 228, 128, 117, 41, 181, 114, 215, 9, 23, 171, 59, 114, 227, 38, 43, 70, + 235, 24, 62, 142, 247, 161, 174, 247, 130, 72, 209, 176, 148, 124, 220, 220, 99, 81, 235, 189, + 6, 165, 139, 250, 137, 47, 121, 187, 99, 81, 0, 130, 73, 219, 60, 45, 41, 47, 99, 90, 128, 149, + 153, 202, 181, 22, 82, 158, 170, 156, 102, 136, 113, 38, 199, 253, 133, 150, 139, 47, 70, 218, + 92, 23, 192, 220, 233, 56, 152, 186, 146, 49, 188, 14, 64, 162, 208, 233, 44, 14, 244, 227, 1, + 170, 41, 85, 163, 157, 231, 151, 53, 89, 190, 172, 227, 161, 8, 122, 209, 162, 159, 249, 171, + 239, 218, 132, 45, 4, 155, 108, 222, 52, 10, 99, 217, 31, 206, 122, 18, 186, 238, 158, 45, 89, + 250, 95, 116, 251, 172, 156, 211, 201, 1, 180, 16, 161, 73, 42, 249, 248, 103, 14, 81, 177, + 105, 137, 5, 66, 225, 47, 131, 50, 114, 7, 206, 96, 254, 129, 70, 249, 255, 242, 68, 15, 17, + 58, 58, 75, 177, 227, 104, 17, 159, 249, 198, 154, 92, 201, 107, 84, 167, 129, 196, 163, 2, 14, + 148, 254, 115, 189, 165, 146, 191, 184, 33, 134, 171, 102, 64, 188, 101, 200, 16, 254, 183, + 198, 246, 71, 115, 228, 106, 201, 151, 49, 203, 161, 5, 76, 211, 184, 235, 163, 189, 193, 73, + 204, 83, 97, 161, 113, 77, 179, 240, 71, 124, 232, 199, 238, 174, 246, 27, 29, 50, 74, 81, 126, + 198, 164, 41, 221, 150, 113, 43, 52, 134, 96, 177, 163, 250, 39, 43, 161, 119, 206, 107, 45, + 13, 42, 49, 2, 142, 90, 232, 119, 135, 190, 124, 107, 52, 119, 38, 60, 182, 162, 181, 226, 11, + 224, 88, 234, 194, 255, 228, 13, 68, 116, 255, 94, 6, 198, 137, 249, 0, 19, 228, 221, 183, 184, + 59, 55, 124, 83, 24, 104, 87, 204, 198, 98, 111, 203, 32, 252, 222, 32, 208, 253, 6, 148, 30, + 183, 31, 105, 146, 5, 61, 180, 90, 82, 6, 228, 180, 202, 133, 130, 160, 253, 231, 17, 202, 114, + 37, 254, 246, 234, 80, 104, 239, 237, 32, 106, 4, 149, 74, 240, 12, 54, 14, 137, 64, 94, 127, + 169, 80, 113, 228, 231, 248, 27, 92, 141, 171, 166, 10, 185, 248, 214, 63, 0, 18, 52, 191, 106, + 167, 255, 166, 236, 26, 4, 205, 140, 182, 85, 51, 147, 133, 117, 129, 140, 225, 160, 185, 95, + 196, 113, 232, 70, 226, 14, 229, 235, 150, 151, 100, 44, 21, 179, 52, 133, 240, 24, 9, 37, 154, + 114, 73, 87, 144, 126, 8, 239, 190, 74, 116, 141, 56, 179, 41, 174, 201, 235, 247, 197, 163, + 36, 20, 134, 115, 57, 214, 202, 196, 87, 179, 9, 203, 73, 194, 155, 180, 30, 20, 106, 134, 91, + 44, 212, 220, 72, 226, 114, 148, 209, 221, 156, 31, 153, 141, 117, 75, 190, 55, 145, 204, 128, + 19, 0, 162, 173, 175, 241, 71, 78, 65, 169, 189, 169, 60, 77, 163, 170, 234, 143, 150, 152, + 121, 197, 137, 111, 92, 121, 205, 46, 126, 201, 34, 141, 119, 220, 149, 38, 67, 164, 60, 21, + 163, 46, 24, 219, 191, 219, 34, 176, 151, 56, 102, 242, 151, 5, 78, 125, 93, 100, 95, 213, 98, + 100, 234, 28, 77, 210, 63, 124, 108, 66, 20, 32, 235, 227, 123, 133, 234, 109, 51, 0, 0, 0, 12, + 151, 122, 134, 21, 117, 134, 21, 78, 176, 146, 6, 57, 78, 10, 34, 221, 112, 126, 31, 74, 68, 0, + 145, 17, 202, 192, 60, 218, 35, 161, 237, 191, 207, 180, 200, 18, 148, 220, 63, 108, 227, 210, + 23, 172, 136, 238, 18, 55, 57, 198, 227, 247, 89, 245, 172, 72, 143, 162, 222, 103, 254, 157, + 244, 128, 205, 222, 227, 203, 168, 235, 94, 208, 212, 58, 185, 174, 130, 145, 157, 194, 180, + 157, 113, 48, 83, 232, 53, 250, 158, 26, 4, 89, 107, 89, 9, 9, 130, 44, 61, 63, 137, 208, 180, + 85, 104, 95, 31, 224, 91, 169, 72, 175, 47, 214, 107, 142, 242, 91, 48, 252, 219, 215, 58, 240, + 31, 113, 52, 144, 133, 209, 232, 121, 118, 86, 36, 235, 113, 94, 8, 20, 97, 212, 40, 88, 126, + 78, 170, 186, 229, 97, 189, 253, 30, 28, 82, 188, 62, 231, 192, 50, 218, 7, 46, 79, 123, 0, 31, + 172, 76, 7, 13, 251, 11, 15, 89, 141, 177, 180, 175, 104, 138, 6, 187, 168, 10, 225, 226, 105, + 33, 229, 237, 129, 106, 17, 159, 88, 211, 1, 71, 109, 135, 192, 211, 88, 247, 119, 192, 197, + 105, 109, 161, 249, 84, 38, 160, 215, 247, 174, 210, 43, 90, 238, 117, 160, 250, 122, 227, 42, + 5, 248, 125, 219, 25, 161, 12, 161, 104, 169, 113, 118, 154, 174, 124, 175, 227, 151, 201, 117, + 128, 104, 136, 37, 149, 85, 63, 111, 39, 122, 251, 25, 133, 48, 189, 159, 135, 70, 64, 14, 209, + 230, 235, 18, 32, 163, 123, 120, 182, 147, 223, 15, 14, 17, 127, 128, 215, 97, 164, 84, 128, + 70, 102, 19, 118, 229, 29, 238, 115, 61, 41, 147, 155, 177, 131, 54, 96, 237, 97, 107, 224, + 237, 140, 218, 113, 176, 253, 164, 50, 255, 184, 205, 145, 44, 166, 93, 140, 9, 212, 45, 250, + 227, 205, 209, 44, 217, 49, 63, 171, 166, 243, 166, 10, 154, 204, 121, 40, 182, 251, 149, 59, + 109, 194, 186, 93, 156, 246, 26, 213, 252, 169, 150, +]; +const MSG_2_KEY_2_SIG_2: [u8; 1620] = [ + 0, 0, 8, 130, 0, 0, 0, 7, 53, 146, 126, 78, 20, 127, 203, 200, 237, 203, 126, 69, 177, 195, + 183, 36, 233, 100, 147, 30, 241, 213, 119, 67, 243, 23, 219, 186, 220, 68, 66, 43, 44, 32, 211, + 145, 169, 143, 69, 45, 189, 207, 126, 252, 125, 173, 127, 94, 191, 236, 211, 207, 54, 110, 108, + 250, 65, 110, 120, 44, 162, 206, 17, 27, 15, 32, 147, 124, 88, 167, 180, 10, 53, 26, 20, 80, + 238, 179, 186, 112, 207, 36, 244, 66, 121, 0, 254, 15, 187, 50, 41, 147, 111, 126, 93, 123, + 210, 200, 47, 46, 59, 155, 117, 204, 235, 21, 234, 207, 17, 80, 151, 24, 68, 220, 34, 9, 8, + 145, 195, 156, 153, 28, 237, 125, 199, 142, 220, 9, 88, 13, 83, 202, 37, 31, 221, 64, 213, 251, + 105, 9, 121, 112, 84, 116, 147, 182, 70, 220, 235, 125, 107, 214, 118, 192, 64, 173, 102, 249, + 69, 0, 199, 216, 235, 224, 95, 125, 149, 230, 239, 23, 217, 163, 204, 252, 53, 154, 136, 134, + 164, 84, 51, 251, 68, 90, 212, 5, 81, 230, 133, 59, 4, 175, 70, 42, 50, 196, 189, 24, 179, 115, + 27, 26, 244, 229, 227, 101, 138, 35, 21, 169, 137, 59, 238, 123, 81, 57, 103, 196, 174, 99, + 165, 158, 4, 156, 164, 89, 240, 205, 96, 101, 131, 141, 226, 207, 231, 81, 36, 188, 83, 175, + 233, 153, 167, 110, 211, 182, 202, 15, 204, 68, 99, 114, 216, 129, 101, 73, 27, 233, 122, 184, + 105, 253, 42, 105, 109, 254, 40, 81, 36, 174, 176, 155, 145, 214, 159, 70, 237, 235, 156, 109, + 191, 49, 83, 88, 103, 242, 20, 84, 236, 138, 101, 79, 5, 128, 27, 180, 246, 44, 61, 110, 21, + 98, 133, 65, 43, 192, 104, 74, 106, 92, 184, 186, 167, 237, 247, 28, 129, 40, 173, 51, 141, + 171, 11, 48, 44, 251, 170, 133, 101, 37, 116, 219, 169, 44, 207, 157, 152, 102, 54, 160, 182, + 21, 16, 78, 64, 107, 156, 246, 241, 125, 249, 236, 118, 163, 91, 177, 63, 251, 104, 45, 112, + 79, 2, 197, 135, 249, 187, 136, 207, 175, 47, 136, 221, 82, 205, 119, 139, 136, 67, 146, 164, + 176, 172, 235, 112, 29, 196, 127, 22, 9, 170, 133, 23, 36, 65, 154, 105, 163, 40, 227, 120, + 102, 148, 11, 78, 8, 230, 104, 9, 165, 122, 83, 251, 200, 113, 216, 211, 210, 78, 62, 182, 121, + 160, 101, 224, 182, 113, 135, 156, 141, 140, 162, 136, 60, 114, 136, 141, 253, 204, 192, 224, + 76, 218, 93, 40, 221, 150, 116, 98, 83, 62, 26, 230, 170, 46, 214, 36, 235, 171, 169, 33, 200, + 100, 168, 114, 19, 50, 1, 205, 233, 11, 223, 72, 51, 48, 103, 122, 175, 198, 206, 102, 189, + 113, 124, 197, 222, 43, 194, 111, 191, 186, 140, 53, 23, 36, 238, 42, 122, 140, 182, 8, 98, 84, + 128, 221, 227, 64, 50, 94, 180, 4, 228, 135, 67, 168, 64, 228, 211, 183, 144, 223, 233, 208, + 46, 129, 93, 171, 155, 25, 190, 52, 112, 45, 167, 217, 84, 225, 174, 209, 228, 185, 213, 153, + 52, 108, 225, 78, 211, 42, 129, 233, 214, 129, 185, 180, 160, 182, 178, 33, 194, 181, 129, 134, + 80, 115, 38, 83, 226, 66, 73, 136, 215, 6, 35, 113, 64, 20, 123, 226, 7, 12, 222, 46, 221, 193, + 186, 206, 179, 149, 73, 2, 34, 209, 98, 236, 212, 43, 165, 95, 68, 60, 170, 88, 23, 80, 118, + 186, 167, 112, 79, 142, 117, 136, 151, 214, 155, 214, 210, 26, 125, 16, 24, 107, 102, 121, 187, + 163, 239, 38, 240, 49, 101, 33, 208, 4, 174, 228, 68, 96, 69, 42, 23, 239, 229, 97, 121, 2, + 245, 78, 32, 252, 224, 78, 90, 190, 181, 196, 1, 113, 145, 208, 96, 94, 88, 206, 81, 122, 39, + 187, 198, 105, 62, 84, 181, 180, 195, 64, 95, 51, 167, 142, 222, 188, 151, 3, 21, 127, 95, 231, + 96, 144, 102, 134, 122, 223, 143, 177, 208, 61, 136, 85, 13, 205, 20, 198, 216, 63, 156, 151, + 36, 66, 10, 191, 1, 5, 159, 12, 188, 37, 52, 9, 22, 26, 236, 124, 94, 212, 205, 173, 202, 23, + 205, 154, 77, 111, 58, 7, 92, 215, 224, 175, 81, 182, 248, 161, 172, 121, 10, 222, 104, 29, 63, + 16, 119, 145, 48, 35, 190, 42, 22, 115, 187, 253, 64, 173, 84, 11, 107, 6, 32, 121, 93, 255, + 49, 68, 107, 23, 47, 142, 76, 142, 20, 192, 228, 8, 41, 98, 26, 152, 222, 70, 241, 205, 252, + 195, 159, 104, 224, 92, 61, 61, 117, 217, 158, 142, 86, 164, 167, 209, 17, 211, 168, 220, 232, + 31, 2, 102, 245, 78, 149, 96, 114, 188, 161, 248, 24, 157, 9, 212, 66, 231, 42, 209, 197, 183, + 50, 71, 11, 106, 99, 74, 83, 104, 214, 227, 169, 216, 18, 140, 49, 70, 106, 238, 32, 212, 173, + 39, 210, 168, 63, 68, 230, 117, 132, 11, 105, 27, 246, 254, 48, 233, 165, 35, 20, 192, 89, 25, + 191, 171, 80, 70, 137, 186, 117, 57, 29, 231, 102, 12, 84, 239, 71, 247, 107, 208, 98, 110, + 161, 28, 17, 232, 151, 88, 32, 245, 171, 175, 186, 86, 201, 116, 168, 247, 167, 248, 110, 225, + 71, 13, 13, 105, 247, 51, 0, 114, 37, 37, 196, 255, 181, 216, 239, 88, 29, 187, 190, 60, 29, + 20, 234, 152, 217, 108, 134, 223, 217, 151, 175, 137, 136, 179, 6, 6, 177, 222, 194, 32, 162, + 226, 87, 179, 55, 100, 131, 29, 177, 74, 105, 250, 239, 155, 79, 161, 72, 143, 187, 56, 107, + 77, 188, 228, 72, 236, 193, 229, 179, 132, 23, 39, 34, 137, 203, 211, 67, 139, 59, 52, 77, 38, + 165, 118, 92, 245, 249, 169, 213, 167, 199, 18, 106, 236, 219, 156, 123, 166, 2, 189, 178, 150, + 117, 125, 51, 33, 62, 119, 241, 185, 180, 5, 60, 83, 31, 12, 215, 39, 197, 26, 139, 250, 121, + 116, 111, 151, 62, 175, 252, 147, 169, 212, 92, 81, 45, 87, 166, 136, 64, 132, 48, 175, 207, + 180, 242, 62, 116, 144, 222, 111, 254, 49, 25, 164, 96, 117, 182, 187, 1, 189, 89, 160, 98, 71, + 0, 5, 7, 61, 190, 248, 166, 77, 232, 222, 183, 152, 92, 19, 70, 59, 246, 78, 68, 133, 125, 9, + 114, 206, 75, 40, 216, 165, 13, 146, 237, 86, 91, 164, 200, 255, 250, 3, 61, 240, 19, 144, 149, + 228, 14, 228, 236, 34, 220, 131, 90, 187, 209, 210, 238, 4, 181, 7, 185, 80, 13, 165, 227, 46, + 27, 50, 21, 148, 244, 141, 2, 10, 18, 168, 56, 48, 160, 127, 104, 36, 249, 53, 9, 99, 74, 74, + 123, 37, 240, 233, 114, 213, 172, 29, 221, 255, 113, 218, 88, 254, 206, 6, 228, 203, 214, 92, + 253, 114, 230, 15, 223, 162, 24, 104, 254, 28, 76, 218, 55, 85, 49, 225, 49, 75, 26, 183, 153, + 114, 236, 140, 71, 84, 254, 122, 247, 140, 117, 31, 92, 237, 152, 196, 157, 246, 81, 134, 192, + 18, 14, 24, 118, 69, 17, 43, 250, 164, 193, 64, 47, 218, 205, 138, 24, 87, 210, 229, 25, 0, 0, + 0, 12, 43, 37, 215, 69, 17, 163, 239, 83, 4, 130, 1, 96, 235, 229, 34, 76, 200, 126, 247, 73, + 187, 204, 239, 58, 11, 207, 191, 245, 76, 138, 194, 223, 27, 42, 233, 65, 236, 169, 14, 160, + 166, 171, 6, 111, 197, 131, 47, 78, 90, 141, 9, 24, 231, 11, 218, 235, 77, 92, 222, 252, 166, + 246, 86, 246, 118, 76, 125, 207, 24, 91, 226, 30, 120, 171, 157, 181, 209, 164, 51, 96, 247, + 248, 163, 181, 48, 100, 246, 210, 145, 106, 207, 146, 28, 84, 23, 119, 71, 201, 225, 152, 231, + 14, 94, 76, 176, 188, 133, 188, 58, 6, 185, 193, 15, 221, 58, 76, 78, 235, 151, 20, 229, 226, + 0, 217, 248, 171, 88, 185, 68, 139, 241, 231, 154, 59, 232, 111, 159, 191, 52, 43, 146, 90, + 167, 78, 206, 53, 239, 68, 15, 253, 163, 7, 254, 239, 127, 51, 32, 37, 120, 186, 217, 145, 49, + 13, 7, 198, 219, 120, 125, 15, 62, 2, 56, 110, 81, 97, 6, 168, 247, 24, 139, 223, 202, 187, + 241, 12, 148, 37, 27, 240, 36, 129, 34, 32, 140, 246, 32, 152, 214, 198, 150, 85, 4, 100, 137, + 102, 16, 220, 251, 64, 8, 97, 121, 153, 199, 76, 25, 193, 29, 135, 39, 127, 62, 139, 128, 38, + 112, 100, 225, 12, 54, 103, 233, 46, 144, 207, 150, 72, 92, 117, 127, 214, 45, 254, 36, 11, + 221, 189, 232, 115, 99, 63, 198, 126, 113, 71, 179, 248, 240, 173, 142, 227, 165, 248, 27, 173, + 251, 71, 14, 218, 79, 174, 0, 228, 160, 204, 41, 207, 135, 222, 108, 58, 149, 162, 86, 222, + 213, 3, 174, 35, 141, 172, 176, 208, 115, 221, 3, 32, 188, 162, 167, 4, 128, 152, 216, 124, + 100, 136, 74, 146, 119, 222, 146, 64, 30, 231, 8, 153, 87, 51, 134, 76, 178, 16, 27, 137, 249, + 205, 41, 98, 37, 255, 95, 39, 82, 8, 210, 48, 70, 174, 92, 240, 237, 35, 202, 67, 141, 83, 160, + 91, 92, 253, 234, 176, 199, 233, 166, 221, 39, 227, +]; + +fn execute_lms_cmd( + model: &mut T, + message: &[u8], + pub_key_bytes: &[u8], + signature_bytes: &[u8], +) -> Result<(), ModelError> { + let pub_key = >::read_from(pub_key_bytes).unwrap(); + let signature = >::read_from(signature_bytes).unwrap(); + + let mut cmd = MailboxReq::LmsVerify(LmsVerifyReq { + hdr: MailboxReqHeader { chksum: 0 }, + pub_key_tree_type: u32::from(pub_key.tree_type.0), + pub_key_ots_type: u32::from(pub_key.otstype.0), + pub_key_id: pub_key.id, + pub_key_digest: (*(pub_key.digest.as_bytes())).try_into().unwrap(), + signature_q: u32::from(signature.q), + signature_ots: (*(signature.ots.as_bytes())).try_into().unwrap(), + signature_tree_type: u32::from(signature.tree_type.0), + signature_tree_path: (*(signature.tree_path.as_bytes())).try_into().unwrap(), + }); + + cmd.populate_chksum().unwrap(); + + // Stream message to SHA ACC + model + .compute_sha512_acc_digest(message, ShaAccMode::Sha384Stream) + .unwrap(); + + // Send LMS verify command + let resp = model + .mailbox_execute(u32::from(CommandId::LMS_VERIFY), cmd.as_bytes().unwrap())? + .expect("We should have received a response"); + + let resp_hdr: &MailboxRespHeader = + LayoutVerified::<&[u8], MailboxRespHeader>::new(resp.as_bytes()) + .unwrap() + .into_ref(); + + assert_eq!( + resp_hdr.fips_status, + MailboxRespHeader::FIPS_STATUS_APPROVED + ); + // Checksum is just going to be 0 because FIPS_STATUS_APPROVED is 0 + assert_eq!(resp_hdr.chksum, 0); + assert_eq!(model.soc_ifc().cptra_fw_error_non_fatal().read(), 0); + + Ok(()) +} + +#[test] +fn test_lms_verify_cmd() { + let mut model = run_rt_test(None, None, None); + + model.step_until(|m| { + m.soc_ifc().cptra_boot_status().read() == u32::from(RtBootStatus::RtReadyForCommands) + }); + + // Message 1, key 1 + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_1, &MSG_1_KEY_1_SIG_1).unwrap(); + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_1, &MSG_1_KEY_1_SIG_2).unwrap(); + + // Message 1, key 2 + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_2, &MSG_1_KEY_2_SIG_1).unwrap(); + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_2, &MSG_1_KEY_2_SIG_2).unwrap(); + + // Message 2, key 1 + execute_lms_cmd(&mut model, &MSG_2, &MSG_2_PUB_KEY_1, &MSG_2_KEY_1_SIG_1).unwrap(); + execute_lms_cmd(&mut model, &MSG_2, &MSG_2_PUB_KEY_1, &MSG_2_KEY_1_SIG_2).unwrap(); + + // Message 2, key 2 + execute_lms_cmd(&mut model, &MSG_2, &MSG_2_PUB_KEY_2, &MSG_2_KEY_2_SIG_1).unwrap(); + execute_lms_cmd(&mut model, &MSG_2, &MSG_2_PUB_KEY_2, &MSG_2_KEY_2_SIG_2).unwrap(); +} + +#[test] +fn test_lms_verify_failure() { + let mut model = run_rt_test(None, None, None); + + model.step_until(|m| { + m.soc_ifc().cptra_boot_status().read() == u32::from(RtBootStatus::RtReadyForCommands) + }); + + let resp = + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_1, &MSG_1_KEY_2_SIG_1).unwrap_err(); + + assert_error( + &mut model, + caliptra_drivers::CaliptraError::RUNTIME_LMS_VERIFY_FAILED, + resp, + ); +} + +#[test] +fn test_lms_verify_invalid_sig_lms_type() { + let mut model = run_rt_test(None, None, None); + + model.step_until(|m| { + m.soc_ifc().cptra_boot_status().read() == u32::from(RtBootStatus::RtReadyForCommands) + }); + + // Select an invalid LMS type + let mut signature = + >::read_from(&MSG_1_KEY_1_SIG_1[..]).unwrap(); + signature.tree_type = LmsAlgorithmType::new(10); + + let resp = + execute_lms_cmd(&mut model, &MSG_1, &MSG_1_PUB_KEY_1, signature.as_bytes()).unwrap_err(); + + assert_error( + &mut model, + caliptra_drivers::CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM, + resp, + ); +} + +#[test] +fn test_lms_verify_invalid_key_lms_type() { + let mut model = run_rt_test(None, None, None); + + model.step_until(|m| { + m.soc_ifc().cptra_boot_status().read() == u32::from(RtBootStatus::RtReadyForCommands) + }); + + // Select an invalid LMS type + let mut pub_key = >::read_from(&MSG_1_PUB_KEY_1[..]).unwrap(); + pub_key.tree_type = LmsAlgorithmType::new(10); + + let resp = + execute_lms_cmd(&mut model, &MSG_1, pub_key.as_bytes(), &MSG_1_KEY_1_SIG_1).unwrap_err(); + + assert_error( + &mut model, + caliptra_drivers::CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMS_ALGORITHM, + resp, + ); +} + +#[test] +fn test_lms_verify_invalid_lmots_type() { + let mut model = run_rt_test(None, None, None); + + model.step_until(|m| { + m.soc_ifc().cptra_boot_status().read() == u32::from(RtBootStatus::RtReadyForCommands) + }); + + // Select an invalid otstype + let mut pub_key = >::read_from(&MSG_1_PUB_KEY_1[..]).unwrap(); + pub_key.otstype = LmotsAlgorithmType::new(6); + + let resp = + execute_lms_cmd(&mut model, &MSG_1, pub_key.as_bytes(), &MSG_1_KEY_1_SIG_1).unwrap_err(); + + assert_error( + &mut model, + caliptra_drivers::CaliptraError::RUNTIME_LMS_VERIFY_INVALID_LMOTS_ALGORITHM, + resp, + ); +}