diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..ba37a7890 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,40 @@ +# Use the latest 2.1 version of CircleCI pipeline process engine. +# See: https://circleci.com/docs/2.0/configuration-reference +version: 2.1 + +orbs: + slack: circleci/slack@4.1 + +# Define a job to be invoked later in a workflow. +# See: https://circleci.com/docs/2.0/configuration-reference/#jobs +jobs: + cargo-test: + # Specify the execution environment. You can specify an image from Dockerhub or use one of our Convenience Images from CircleCI's Developer Hub. + # See: https://circleci.com/docs/2.0/configuration-reference/#docker-machine-macos-windows-executor + docker: + - image: cimg/rust:1.59.0 + # Add steps to the job + # See: https://circleci.com/docs/2.0/configuration-reference/#steps + steps: + - checkout + - run: + name: "cargo test" + command: | + sudo apt update && sudo apt-get install libfontconfig libfontconfig1-dev libfreetype6-dev; + cargo version; + cargo test --all --all-features; + - slack/notify: + event: fail + template: basic_fail_1 + - slack/notify: + event: pass + template: basic_success_1 + + +# Invoke jobs via workflows +# See: https://circleci.com/docs/2.0/configuration-reference/#workflows +workflows: + build-and-test: + jobs: + - cargo-test: + context: CI-Orchard-slack diff --git a/.gitignore b/.gitignore index 173b95142..d7f36bd31 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ **/*.rs.bk Cargo.lock .vscode +.idea +action-circuit-layout.png +proptest-regressions/*.txt diff --git a/benches/circuit.rs b/benches/circuit.rs index 3140a90a4..6400513e2 100644 --- a/benches/circuit.rs +++ b/benches/circuit.rs @@ -6,6 +6,7 @@ use criterion::{BenchmarkId, Criterion}; #[cfg(unix)] use pprof::criterion::{Output, PProfProfiler}; +use orchard::note::NoteType; use orchard::{ builder::Builder, bundle::Flags, @@ -32,7 +33,13 @@ fn criterion_benchmark(c: &mut Criterion) { ); for _ in 0..num_recipients { builder - .add_recipient(None, recipient, NoteValue::from_raw(10), None) + .add_recipient( + None, + recipient, + NoteValue::from_raw(10), + NoteType::native(), + None, + ) .unwrap(); } let bundle: Bundle<_, i64> = builder.build(rng).unwrap(); diff --git a/benches/note_decryption.rs b/benches/note_decryption.rs index cab432fe3..73d4fcaea 100644 --- a/benches/note_decryption.rs +++ b/benches/note_decryption.rs @@ -4,6 +4,7 @@ use orchard::{ bundle::Flags, circuit::ProvingKey, keys::{FullViewingKey, Scope, SpendingKey}, + note::NoteType, note_encryption::{CompactAction, OrchardDomain}, value::NoteValue, Anchor, Bundle, @@ -51,10 +52,22 @@ fn bench_note_decryption(c: &mut Criterion) { // The builder pads to two actions, and shuffles their order. Add two recipients // so the first action is always decryptable. builder - .add_recipient(None, recipient, NoteValue::from_raw(10), None) + .add_recipient( + None, + recipient, + NoteValue::from_raw(10), + NoteType::native(), + None, + ) .unwrap(); builder - .add_recipient(None, recipient, NoteValue::from_raw(10), None) + .add_recipient( + None, + recipient, + NoteValue::from_raw(10), + NoteType::native(), + None, + ) .unwrap(); let bundle: Bundle<_, i64> = builder.build(rng).unwrap(); bundle diff --git a/src/action.rs b/src/action.rs index d0b73f23e..b1eda4819 100644 --- a/src/action.rs +++ b/src/action.rs @@ -126,6 +126,7 @@ pub(crate) mod testing { use proptest::prelude::*; + use crate::note::note_type::testing::arb_note_type; use crate::{ note::{ commitment::ExtractedNoteCommitment, nullifier::testing::arb_nullifier, @@ -146,11 +147,13 @@ pub(crate) mod testing { nf in arb_nullifier(), rk in arb_spendauth_verification_key(), note in arb_note(output_value), + note_type in arb_note_type() ) -> Action<()> { let cmx = ExtractedNoteCommitment::from(note.commitment()); let cv_net = ValueCommitment::derive( spend_value - output_value, - ValueCommitTrapdoor::zero() + ValueCommitTrapdoor::zero(), + note_type ); // FIXME: make a real one from the note. let encrypted_note = TransmittedNoteCiphertext { @@ -177,11 +180,13 @@ pub(crate) mod testing { note in arb_note(output_value), rng_seed in prop::array::uniform32(prop::num::u8::ANY), fake_sighash in prop::array::uniform32(prop::num::u8::ANY), + note_type in arb_note_type() ) -> Action> { let cmx = ExtractedNoteCommitment::from(note.commitment()); let cv_net = ValueCommitment::derive( spend_value - output_value, - ValueCommitTrapdoor::zero() + ValueCommitTrapdoor::zero(), + note_type ); // FIXME: make a real one from the note. diff --git a/src/builder.rs b/src/builder.rs index fd1e9fd5f..9f5d98f0f 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,6 +2,7 @@ use core::fmt; use core::iter; +use std::collections::HashMap; use ff::Field; use halo2_proofs::circuit::Value; @@ -9,6 +10,7 @@ use nonempty::NonEmpty; use pasta_curves::pallas; use rand::{prelude::SliceRandom, CryptoRng, RngCore}; +use crate::note::NoteType; use crate::{ action::Action, address::Address, @@ -57,21 +59,23 @@ impl From for Error { } /// Information about a specific note to be spent in an [`Action`]. -#[derive(Debug)] +#[derive(Debug, Clone)] struct SpendInfo { dummy_sk: Option, fvk: FullViewingKey, scope: Scope, note: Note, merkle_path: MerklePath, + // a flag to indicate whether the value of the note will be counted in the value sum of the action. + split_flag: bool, } impl SpendInfo { /// Defined in [Zcash Protocol Spec § 4.8.3: Dummy Notes (Orchard)][orcharddummynotes]. /// /// [orcharddummynotes]: https://zips.z.cash/protocol/nu5.pdf#orcharddummynotes - fn dummy(rng: &mut impl RngCore) -> Self { - let (sk, fvk, note) = Note::dummy(rng, None); + fn dummy(note_type: NoteType, rng: &mut impl RngCore) -> Self { + let (sk, fvk, note) = Note::dummy(rng, None, note_type); let merkle_path = MerklePath::dummy(rng); SpendInfo { @@ -82,16 +86,25 @@ impl SpendInfo { scope: Scope::External, note, merkle_path, + split_flag: false, } } + + /// Duplicates the spend info and set the split flag to `true`. + fn create_split_spend(&self) -> Self { + let mut split_spend = self.clone(); + split_spend.split_flag = true; + split_spend + } } /// Information about a specific recipient to receive funds in an [`Action`]. -#[derive(Debug)] +#[derive(Debug, Clone)] struct RecipientInfo { ovk: Option, recipient: Address, value: NoteValue, + note_type: NoteType, memo: Option<[u8; 512]>, } @@ -107,6 +120,7 @@ impl RecipientInfo { ovk: None, recipient, value: NoteValue::zero(), + note_type: NoteType::native(), memo: None, } } @@ -130,7 +144,17 @@ impl ActionInfo { } /// Returns the value sum for this action. + /// Split notes does not contribute to the value sum. fn value_sum(&self) -> ValueSum { + // TODO: Aurel, uncomment when circuit for split flag is implemented. + // let spent_value = self + // .spend + // .split_flag + // .then(|| self.spend.note.value()) + // .unwrap_or_else(NoteValue::zero); + // + // spent_value - self.output.value + self.spend.note.value() - self.output.value } @@ -140,8 +164,15 @@ impl ActionInfo { /// /// [orchardsend]: https://zips.z.cash/protocol/nu5.pdf#orchardsend fn build(self, mut rng: impl RngCore) -> (Action, Circuit) { + assert_eq!( + self.output.note_type, + self.spend.note.note_type(), + "spend and recipient note types must be equal" + ); + let v_net = self.value_sum(); - let cv_net = ValueCommitment::derive(v_net, self.rcv.clone()); + let note_type = self.output.note_type; + let cv_net = ValueCommitment::derive(v_net, self.rcv, note_type); let nf_old = self.spend.note.nullifier(&self.spend.fvk); let sender_address = self.spend.note.recipient(); @@ -151,8 +182,15 @@ impl ActionInfo { let ak: SpendValidatingKey = self.spend.fvk.clone().into(); let alpha = pallas::Scalar::random(&mut rng); let rk = ak.randomize(&alpha); + let note_type = self.spend.note.note_type(); - let note = Note::new(self.output.recipient, self.output.value, nf_old, &mut rng); + let note = Note::new( + self.output.recipient, + self.output.value, + note_type, + nf_old, + &mut rng, + ); let cm_new = note.commitment(); let cmx = cm_new.into(); @@ -194,6 +232,7 @@ impl ActionInfo { g_d_old: Value::known(sender_address.g_d()), pk_d_old: Value::known(*sender_address.pk_d()), v_old: Value::known(self.spend.note.value()), + // split_flag: Value::known(self.spend.split_flag), rho_old: Value::known(rho_old), psi_old: Value::known(psi_old), rcm_old: Value::known(rcm_old), @@ -275,6 +314,7 @@ impl Builder { scope, note, merkle_path, + split_flag: false, }); Ok(()) @@ -286,6 +326,7 @@ impl Builder { ovk: Option, recipient: Address, value: NoteValue, + note_type: NoteType, memo: Option<[u8; 512]>, ) -> Result<(), &'static str> { if !self.flags.outputs_enabled() { @@ -296,6 +337,7 @@ impl Builder { ovk, recipient, value, + note_type, memo, }); @@ -307,23 +349,31 @@ impl Builder { /// The returned bundle will have no proof or signatures; these can be applied with /// [`Bundle::create_proof`] and [`Bundle::apply_signatures`] respectively. pub fn build>( - mut self, + self, mut rng: impl RngCore, ) -> Result, V>, Error> { + let mut pre_actions: Vec<_> = Vec::new(); + // Pair up the spends and recipients, extending with dummy values as necessary. - let pre_actions: Vec<_> = { - let num_spends = self.spends.len(); - let num_recipients = self.recipients.len(); + for (note_type, (mut spends, mut recipients)) in partition(&self.spends, &self.recipients) { + let num_spends = spends.len(); + let num_recipients = recipients.len(); let num_actions = [num_spends, num_recipients, MIN_ACTIONS] .iter() .max() .cloned() .unwrap(); - self.spends.extend( - iter::repeat_with(|| SpendInfo::dummy(&mut rng)).take(num_actions - num_spends), + // use the first spend to create split spend(s) or create a dummy if empty. + let dummy_spend = spends.first().map_or_else( + || SpendInfo::dummy(note_type, &mut rng), + |s| s.create_split_spend(), ); - self.recipients.extend( + + // Extend the spends and recipients with dummy values. + spends.extend(iter::repeat_with(|| dummy_spend.clone()).take(num_actions - num_spends)); + + recipients.extend( iter::repeat_with(|| RecipientInfo::dummy(&mut rng)) .take(num_actions - num_recipients), ); @@ -331,15 +381,16 @@ impl Builder { // Shuffle the spends and recipients, so that learning the position of a // specific spent note or output note doesn't reveal anything on its own about // the meaning of that note in the transaction context. - self.spends.shuffle(&mut rng); - self.recipients.shuffle(&mut rng); - - self.spends - .into_iter() - .zip(self.recipients.into_iter()) - .map(|(spend, recipient)| ActionInfo::new(spend, recipient, &mut rng)) - .collect() - }; + spends.shuffle(&mut rng); + recipients.shuffle(&mut rng); + + pre_actions.extend( + spends + .into_iter() + .zip(recipients.into_iter()) + .map(|(spend, recipient)| ActionInfo::new(spend, recipient, &mut rng)), + ); + } // Move some things out of self that we will need. let flags = self.flags; @@ -370,7 +421,11 @@ impl Builder { // Verify that bsk and bvk are consistent. let bvk = (actions.iter().map(|a| a.cv_net()).sum::() - - ValueCommitment::derive(value_balance, ValueCommitTrapdoor::zero())) + - ValueCommitment::derive( + value_balance, + ValueCommitTrapdoor::zero(), + NoteType::native(), + )) .into_bvk(); assert_eq!(redpallas::VerificationKey::from(&bsk), bvk); @@ -387,6 +442,30 @@ impl Builder { } } +/// partition a list of spends and recipients by note types. +fn partition( + spends: &[SpendInfo], + recipients: &[RecipientInfo], +) -> HashMap, Vec)> { + let mut hm = HashMap::new(); + + for s in spends.iter() { + hm.entry(s.note.note_type()) + .or_insert((vec![], vec![])) + .0 + .push(s.clone()); + } + + for r in recipients.iter() { + hm.entry(r.note_type) + .or_insert((vec![], vec![])) + .1 + .push(r.clone()) + } + + hm +} + /// Marker trait representing bundle signatures in the process of being created. pub trait InProgressSignatures: fmt::Debug { /// The authorization type of an Orchard action in the process of being authorized. @@ -651,6 +730,7 @@ pub mod testing { use proptest::collection::vec; use proptest::prelude::*; + use crate::note::NoteType; use crate::{ address::testing::arb_address, bundle::{Authorized, Bundle, Flags}, @@ -678,7 +758,7 @@ pub mod testing { sk: SpendingKey, anchor: Anchor, notes: Vec<(Note, MerklePath)>, - recipient_amounts: Vec<(Address, NoteValue)>, + recipient_amounts: Vec<(Address, NoteValue, NoteType)>, } impl ArbitraryBundleInputs { @@ -692,12 +772,12 @@ pub mod testing { builder.add_spend(fvk.clone(), note, path).unwrap(); } - for (addr, value) in self.recipient_amounts.into_iter() { + for (addr, value, note_type) in self.recipient_amounts.into_iter() { let scope = fvk.scope_for_address(&addr).unwrap(); let ovk = fvk.to_ovk(scope); builder - .add_recipient(Some(ovk.clone()), addr, value, None) + .add_recipient(Some(ovk.clone()), addr, value, note_type, None) .unwrap(); } @@ -731,9 +811,11 @@ pub mod testing { recipient_amounts in vec( arb_address().prop_flat_map(move |a| { arb_positive_note_value(MAX_NOTE_VALUE / n_recipients as u64) - .prop_map(move |v| (a, v)) + .prop_map(move |v| { + (a,v, NoteType::native()) + }) }), - n_recipients as usize + n_recipients as usize, ), rng_seed in prop::array::uniform32(prop::num::u8::ANY) ) -> ArbitraryBundleInputs { @@ -781,6 +863,7 @@ mod tests { use rand::rngs::OsRng; use super::Builder; + use crate::note::NoteType; use crate::{ bundle::{Authorized, Bundle, Flags}, circuit::ProvingKey, @@ -805,8 +888,15 @@ mod tests { ); builder - .add_recipient(None, recipient, NoteValue::from_raw(5000), None) + .add_recipient( + None, + recipient, + NoteValue::from_raw(5000), + NoteType::native(), + None, + ) .unwrap(); + let bundle: Bundle = builder .build(&mut rng) .unwrap() diff --git a/src/bundle.rs b/src/bundle.rs index c70ca6350..01b61d791 100644 --- a/src/bundle.rs +++ b/src/bundle.rs @@ -12,6 +12,7 @@ use memuse::DynamicUsage; use nonempty::NonEmpty; use zcash_note_encryption::{try_note_decryption, try_output_recovery_with_ovk}; +use crate::note::NoteType; use crate::{ action::Action, address::Address, @@ -379,6 +380,7 @@ impl> Bundle { - ValueCommitment::derive( ValueSum::from_raw(self.value_balance.into()), ValueCommitTrapdoor::zero(), + NoteType::native(), )) .into_bvk() } diff --git a/src/bundle/commitments.rs b/src/bundle/commitments.rs index ef440a272..40808b57f 100644 --- a/src/bundle/commitments.rs +++ b/src/bundle/commitments.rs @@ -3,12 +3,15 @@ use blake2b_simd::{Hash as Blake2bHash, Params, State}; use crate::bundle::{Authorization, Authorized, Bundle}; +use crate::issuance::{IssueAuth, IssueBundle, Signed}; const ZCASH_ORCHARD_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxIdOrchardHash"; const ZCASH_ORCHARD_ACTIONS_COMPACT_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxIdOrcActCHash"; const ZCASH_ORCHARD_ACTIONS_MEMOS_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxIdOrcActMHash"; const ZCASH_ORCHARD_ACTIONS_NONCOMPACT_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxIdOrcActNHash"; const ZCASH_ORCHARD_SIGS_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxAuthOrchaHash"; +const ZCASH_ORCHARD_ZSA_ISSUE_PERSONALIZATION: &[u8; 16] = b"ZTxIdOrcZSAIssue"; +const ZCASH_ORCHARD_ZSA_ISSUE_SIG_PERSONALIZATION: &[u8; 16] = b"ZTxAuthZSAOrHash"; fn hasher(personal: &[u8; 16]) -> State { Params::new().hash_length(32).personal(personal).to_state() @@ -90,3 +93,30 @@ pub(crate) fn hash_bundle_auth_data(bundle: &Bundle) -> Blake2 pub fn hash_bundle_auth_empty() -> Blake2bHash { hasher(ZCASH_ORCHARD_SIGS_HASH_PERSONALIZATION).finalize() } + +/// Construct the commitment for the issue bundle +pub(crate) fn hash_issue_bundle_txid_data(bundle: &IssueBundle) -> Blake2bHash { + let mut h = hasher(ZCASH_ORCHARD_ZSA_ISSUE_PERSONALIZATION); + + for action in bundle.actions().iter() { + for note in action.notes().iter() { + h.update(¬e.recipient().to_raw_address_bytes()); + h.update(¬e.value().to_bytes()); + h.update(¬e.note_type().to_bytes()); + h.update(¬e.rho().to_bytes()); + h.update(note.rseed().as_bytes()); + } + h.update(action.asset_desc().as_bytes()); + h.update(&[u8::from(action.is_finalized())]); + } + h.update(&bundle.ik().to_bytes()); + h.finalize() +} + +/// Construct the commitment to the authorizing data of an +/// authorized issue bundle +pub(crate) fn hash_issue_bundle_auth_data(bundle: &IssueBundle) -> Blake2bHash { + let mut h = hasher(ZCASH_ORCHARD_ZSA_ISSUE_SIG_PERSONALIZATION); + h.update(&<[u8; 64]>::from(bundle.authorization().signature())); + h.finalize() +} diff --git a/src/circuit.rs b/src/circuit.rs index b61ccb296..346ae9b33 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -900,6 +900,7 @@ mod tests { use rand::{rngs::OsRng, RngCore}; use super::{Circuit, Instance, Proof, ProvingKey, VerifyingKey, K}; + use crate::note::NoteType; use crate::{ keys::SpendValidatingKey, note::Note, @@ -908,7 +909,7 @@ mod tests { }; fn generate_circuit_instance(mut rng: R) -> (Circuit, Instance) { - let (_, fvk, spent_note) = Note::dummy(&mut rng, None); + let (_, fvk, spent_note) = Note::dummy(&mut rng, None, NoteType::native()); let sender_address = spent_note.recipient(); let nk = *fvk.nk(); @@ -918,12 +919,12 @@ mod tests { let alpha = pallas::Scalar::random(&mut rng); let rk = ak.randomize(&alpha); - let (_, _, output_note) = Note::dummy(&mut rng, Some(nf_old)); + let (_, _, output_note) = Note::dummy(&mut rng, Some(nf_old), NoteType::native()); let cmx = output_note.commitment().into(); let value = spent_note.value() - output_note.value(); let rcv = ValueCommitTrapdoor::random(&mut rng); - let cv_net = ValueCommitment::derive(value, rcv.clone()); + let cv_net = ValueCommitment::derive(value, rcv, NoteType::native()); let path = MerklePath::dummy(&mut rng); let anchor = path.root(spent_note.commitment().into()); diff --git a/src/constants/fixed_bases.rs b/src/constants/fixed_bases.rs index af11e335f..bd58a90c2 100644 --- a/src/constants/fixed_bases.rs +++ b/src/constants/fixed_bases.rs @@ -19,8 +19,12 @@ pub mod value_commit_v; pub const ORCHARD_PERSONALIZATION: &str = "z.cash:Orchard"; /// SWU hash-to-curve personalization for the value commitment generator +/// TODO: should we change to "NOTE_TYPE_PERSONALIZATION"? pub const VALUE_COMMITMENT_PERSONALIZATION: &str = "z.cash:Orchard-cv"; +/// SWU hash-to-curve personalization for the note type generator +// pub const NOTE_TYPE_PERSONALIZATION: &str = "z.cash:Orchard-NoteType"; + /// SWU hash-to-curve value for the value commitment generator pub const VALUE_COMMITMENT_V_BYTES: [u8; 1] = *b"v"; @@ -30,6 +34,9 @@ pub const VALUE_COMMITMENT_R_BYTES: [u8; 1] = *b"r"; /// SWU hash-to-curve personalization for the note commitment generator pub const NOTE_COMMITMENT_PERSONALIZATION: &str = "z.cash:Orchard-NoteCommit"; +/// SWU hash-to-curve personalization for the ZSA note commitment generator +pub const NOTE_ZSA_COMMITMENT_PERSONALIZATION: &str = "z.cash:ZSA-NoteCommit"; + /// SWU hash-to-curve personalization for the IVK commitment generator pub const COMMIT_IVK_PERSONALIZATION: &str = "z.cash:Orchard-CommitIvk"; diff --git a/src/issuance.rs b/src/issuance.rs new file mode 100644 index 000000000..b5ac7aaa3 --- /dev/null +++ b/src/issuance.rs @@ -0,0 +1,1094 @@ +//! Structs related to issuance bundles and the associated logic. +use blake2b_simd::Hash as Blake2bHash; +use nonempty::NonEmpty; +use rand::{CryptoRng, RngCore}; +use std::collections::HashSet; +use std::fmt; + +use crate::bundle::commitments::{hash_issue_bundle_auth_data, hash_issue_bundle_txid_data}; +use crate::issuance::Error::{ + IssueActionAlreadyFinalized, IssueActionIncorrectNoteType, IssueActionNotFound, + IssueActionPreviouslyFinalizedNoteType, IssueBundleIkMismatchNoteType, + IssueBundleInvalidSignature, WrongAssetDescSize, +}; +use crate::keys::{IssuerAuthorizingKey, IssuerValidatingKey}; +use crate::note::note_type::MAX_ASSET_DESCRIPTION_SIZE; +use crate::note::{NoteType, Nullifier}; +use crate::value::NoteValue; +use crate::{ + primitives::redpallas::{self, SpendAuth}, + Address, Note, +}; + +/// A bundle of actions to be applied to the ledger. +#[derive(Debug)] +pub struct IssueBundle { + /// The issuer key for the note being created. + ik: IssuerValidatingKey, + /// The list of issue actions that make up this bundle. + actions: Vec, + /// The authorization for this action. + authorization: T, +} + +/// An issue action applied to the global ledger. +/// +/// Externally, this creates new zsa notes (adding a commitment to the global ledger). +#[derive(Debug, Clone)] +pub struct IssueAction { + /// Asset description for verification. + asset_desc: String, + /// The newly issued notes. + notes: NonEmpty, + /// `finalize` will prevent further issuance of the same asset type. + finalize: bool, +} + +impl IssueAction { + /// Constructs a new `IssueAction`. + pub fn new(asset_desc: String, note: &Note) -> Self { + IssueAction { + asset_desc, + notes: NonEmpty { + head: *note, + tail: vec![], + }, + finalize: false, + } + } + + /// Constructs an `IssueAction` from its constituent parts. + pub fn from_parts(asset_desc: String, notes: NonEmpty, finalize: bool) -> Self { + IssueAction { + asset_desc, + notes, + finalize, + } + } + + /// Returns the asset description for the note being created. + pub fn asset_desc(&self) -> &str { + &self.asset_desc + } + + /// Returns the issued notes. + pub fn notes(&self) -> &NonEmpty { + &self.notes + } + + /// Returns whether the asset type was finalized in this action. + pub fn is_finalized(&self) -> bool { + self.finalize + } + + /// Return the `NoteType` if the provided `ik` is used to derive the `note_type` for **all** internal notes. + fn are_note_types_derived_correctly( + &self, + ik: &IssuerValidatingKey, + ) -> Result { + match self + .notes + .iter() + .try_fold(self.notes().head.note_type(), |note_type, ¬e| { + // Fail if not all note types are equal + note.note_type() + .eq(¬e_type) + .then(|| note_type) + .ok_or(IssueActionIncorrectNoteType) + }) { + Ok(note_type) => note_type // check that the note_type was properly derived. + .eq(&NoteType::derive(ik, &self.asset_desc)) + .then(|| note_type) + .ok_or(IssueBundleIkMismatchNoteType), + Err(e) => Err(e), + } + } +} + +/// Defines the authorization type of an Issue bundle. +pub trait IssueAuth: fmt::Debug {} + +/// Marker for an unauthorized bundle with no proofs or signatures. +#[derive(Debug)] +pub struct Unauthorized; + +/// Marker for an unauthorized bundle with injected sighash. +#[derive(Debug)] +pub struct Prepared { + sighash: [u8; 32], +} + +/// Marker for an authorized bundle. +#[derive(Debug)] +pub struct Signed { + signature: redpallas::Signature, +} + +impl Signed { + /// Returns the signature for this authorization. + pub fn signature(&self) -> &redpallas::Signature { + &self.signature + } +} + +impl IssueAuth for Unauthorized {} +impl IssueAuth for Prepared {} +impl IssueAuth for Signed {} + +impl IssueBundle { + /// Returns the issuer verification key for the bundle. + pub fn ik(&self) -> &IssuerValidatingKey { + &self.ik + } + /// Return the actions for a given `IssueBundle`. + pub fn actions(&self) -> &Vec { + &self.actions + } + + /// Returns the authorization for this action. + pub fn authorization(&self) -> &T { + &self.authorization + } + + /// Find an action by `ik` and `asset_desc` for a given `IssueBundle`. + pub fn get_action(&self, asset_desc: String) -> Option<&IssueAction> { + self.actions.iter().find(|a| a.asset_desc.eq(&asset_desc)) + } + + /// Find an action by `note_type` for a given `IssueBundle`. + pub fn get_action_by_type(&self, note_type: NoteType) -> Option<&IssueAction> { + let action = self + .actions + .iter() + .find(|a| NoteType::derive(&self.ik, &a.asset_desc).eq(¬e_type)); + action + } + + /// Computes a commitment to the effects of this bundle, suitable for inclusion within + /// a transaction ID. + pub fn commitment(&self) -> IssueBundleCommitment { + IssueBundleCommitment(hash_issue_bundle_txid_data(self)) + } +} + +impl IssueBundle { + /// Constructs a new `IssueBundle`. + pub fn new(ik: IssuerValidatingKey) -> IssueBundle { + IssueBundle { + ik, + actions: Vec::new(), + authorization: Unauthorized, + } + } + + /// Add a new note to the `IssueBundle`. + /// + /// Rho will be randomly sampled, similar to dummy note generation. + /// + /// # Panics + /// + /// Panics if `asset_desc` is empty or longer than 512 bytes. + pub fn add_recipient( + &mut self, + asset_desc: String, + recipient: Address, + value: NoteValue, + finalize: bool, + mut rng: impl RngCore, + ) -> Result { + if !is_asset_desc_valid(&asset_desc) { + return Err(WrongAssetDescSize); + } + + let note_type = NoteType::derive(&self.ik, &asset_desc); + + let note = Note::new( + recipient, + value, + note_type, + Nullifier::dummy(&mut rng), + &mut rng, + ); + + match self + .actions + .iter_mut() + .find(|issue_action| issue_action.asset_desc.eq(&asset_desc)) + { + // Append to an existing IssueAction. + Some(action) => { + if action.finalize { + return Err(IssueActionAlreadyFinalized); + }; + action.notes.push(note); + finalize.then(|| action.finalize = true); + } + // Insert a new IssueAction. + None => { + let mut action = IssueAction::new(asset_desc, ¬e); + finalize.then(|| action.finalize = true); + self.actions.push(action); + } + } + + Ok(note_type) + } + + /// Finalizes a given `IssueAction` + /// + /// # Panics + /// + /// Panics if `asset_desc` is empty or longer than 512 bytes. + pub fn finalize_action(&mut self, asset_desc: String) -> Result<(), Error> { + if !is_asset_desc_valid(&asset_desc) { + return Err(WrongAssetDescSize); + } + + match self + .actions + .iter_mut() + .find(|issue_action| issue_action.asset_desc.eq(&asset_desc)) + { + Some(issue_action) => { + issue_action.finalize = true; + } + None => { + return Err(IssueActionNotFound); + } + } + + Ok(()) + } + + /// Loads the sighash into the bundle, as preparation for signing. + pub fn prepare(self, sighash: [u8; 32]) -> IssueBundle { + IssueBundle { + ik: self.ik, + actions: self.actions, + authorization: Prepared { sighash }, + } + } +} + +impl IssueBundle { + /// Sign the `IssueBundle`. + /// The call makes sure that the provided `isk` matches the `ik` and the driven `note_type` for each note in the bundle. + pub fn sign( + self, + mut rng: R, + isk: &IssuerAuthorizingKey, + ) -> Result, Error> { + let expected_ik: IssuerValidatingKey = (isk).into(); + + // Make sure the `expected_ik` matches the note_type for all notes. + self.actions.iter().try_for_each(|action| { + action + .are_note_types_derived_correctly(&expected_ik) + .map(|_| ()) // Transform Result into Result<(),Error)>. + })?; + + Ok(IssueBundle { + ik: self.ik, + actions: self.actions, + authorization: Signed { + signature: isk.sign(&mut rng, &self.authorization.sighash), + }, + }) + } +} + +/// A commitment to a bundle of actions. +/// +/// This commitment is non-malleable, in the sense that a bundle's commitment will only +/// change if the effects of the bundle are altered. +#[derive(Debug)] +pub struct IssueBundleCommitment(pub Blake2bHash); + +impl From for [u8; 32] { + /// Serializes issue bundle commitment as byte array + fn from(commitment: IssueBundleCommitment) -> Self { + // The commitment uses BLAKE2b-256. + commitment.0.as_bytes().try_into().unwrap() + } +} + +/// A commitment to the authorizing data within a bundle of actions. +#[derive(Debug)] +pub struct IssueBundleAuthorizingCommitment(pub Blake2bHash); + +impl IssueBundle { + /// Computes a commitment to the authorizing data within for this bundle. + /// + /// This together with `IssueBundle::commitment` bind the entire bundle. + pub fn authorizing_commitment(&self) -> IssueBundleAuthorizingCommitment { + IssueBundleAuthorizingCommitment(hash_issue_bundle_auth_data(self)) + } +} + +fn is_asset_desc_valid(asset_desc: &str) -> bool { + !asset_desc.is_empty() && asset_desc.bytes().len() <= MAX_ASSET_DESCRIPTION_SIZE +} + +/// Validation for Orchard IssueBundles +/// +/// A set of previously finalized asset types must be provided. +/// In case of success, the `Result` will contain a set of the provided **and** the newly finalized `NoteType`s +/// +/// The following checks are performed: +/// * For the `IssueBundle`: +/// * the Signature on top of the provided `sighash` verifies correctly. +/// * For each `IssueAction`: +/// * Asset description size is collect. +/// * `NoteType` for the `IssueAction` has not been previously finalized. +/// * For each `Note` inside an `IssueAction`: +/// * All notes have the same, correct `NoteType` +pub fn verify_issue_bundle<'a>( + bundle: &IssueBundle, + sighash: [u8; 32], + previously_finalized: &'a mut HashSet, // The current note_type finalization set. +) -> Result<&'a mut HashSet, Error> { + if let Err(e) = bundle.ik.verify(&sighash, &bundle.authorization.signature) { + return Err(IssueBundleInvalidSignature(e)); + }; + + // Any IssueAction could have just one properly derived NoteType. + bundle + .actions() + .iter() + .try_fold(previously_finalized, |acc, action| { + if !is_asset_desc_valid(action.asset_desc()) { + return Err(WrongAssetDescSize); + } + + // Fail if any note in the IssueAction has incorrect note type. + let note_type = action.are_note_types_derived_correctly(bundle.ik())?; + + // Fail if the current note_type was previously finalized. + if acc.contains(¬e_type) { + return Err(IssueActionPreviouslyFinalizedNoteType(note_type)); + } + + // Add to finalization set, if needed. + if action.is_finalized() { + acc.insert(note_type); + } + + // Proceed with the new accumulated note_type finalization set. + Ok(acc) + }) + + // The iterator will return the the new accumulated note_type finalization set or fail. +} + +/// Errors produced during the issuance process +#[derive(Debug, PartialEq, Eq)] +pub enum Error { + /// Unable to add note to the IssueAction since it has already been finalized. + IssueActionAlreadyFinalized, + /// The requested IssueAction not exists in the bundle. + IssueActionNotFound, + /// Not all `NoteType`s are the same inside the action. + IssueActionIncorrectNoteType, + /// The provided `isk` and the driven `ik` does not match at least one note type. + IssueBundleIkMismatchNoteType, + /// `asset_desc` should be between 1 and 512 bytes. + WrongAssetDescSize, + + /// Verification errors: + /// Invalid signature. + IssueBundleInvalidSignature(reddsa::Error), + /// The provided `NoteType` has been previously finalized. + IssueActionPreviouslyFinalizedNoteType(NoteType), +} + +impl std::error::Error for Error {} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + IssueActionAlreadyFinalized => { + write!( + f, + "unable to add note to the IssueAction since it has already been finalized" + ) + } + IssueActionNotFound => { + write!(f, "the requested IssueAction not exists in the bundle.") + } + IssueActionIncorrectNoteType => { + write!(f, "not all `NoteType`s are the same inside the action") + } + IssueBundleIkMismatchNoteType => { + write!( + f, + "the provided `isk` and the driven `ik` does not match at least one note type" + ) + } + WrongAssetDescSize => { + write!(f, "`asset_desc` should be between 1 and 512 bytes") + } + IssueBundleInvalidSignature(_) => { + write!(f, "invalid signature") + } + IssueActionPreviouslyFinalizedNoteType(_) => { + write!(f, "the provided `NoteType` has been previously finalized") + } + } + } +} + +#[cfg(test)] +mod tests { + use super::IssueBundle; + use crate::issuance::Error::{ + IssueActionAlreadyFinalized, IssueActionIncorrectNoteType, IssueActionNotFound, + IssueActionPreviouslyFinalizedNoteType, IssueBundleIkMismatchNoteType, + IssueBundleInvalidSignature, WrongAssetDescSize, + }; + use crate::issuance::{verify_issue_bundle, IssueAction, Signed}; + use crate::keys::{ + FullViewingKey, IssuerAuthorizingKey, IssuerValidatingKey, Scope, SpendingKey, + }; + use crate::note::{NoteType, Nullifier}; + use crate::value::NoteValue; + use crate::{Address, Note}; + use nonempty::NonEmpty; + use rand::rngs::OsRng; + use rand::RngCore; + use reddsa::Error::InvalidSignature; + use std::borrow::BorrowMut; + use std::collections::HashSet; + + fn setup_params() -> ( + OsRng, + IssuerAuthorizingKey, + IssuerValidatingKey, + Address, + [u8; 32], + ) { + let mut rng = OsRng; + let sk = SpendingKey::random(&mut rng); + let isk: IssuerAuthorizingKey = (&sk).into(); + let ik: IssuerValidatingKey = (&isk).into(); + + let fvk = FullViewingKey::from(&sk); + let recipient = fvk.address_at(0u32, Scope::External); + + let mut sighash = [0u8; 32]; + rng.fill_bytes(&mut sighash); + + (rng, isk, ik, recipient, sighash) + } + + #[test] + fn issue_bundle_basic() { + let (rng, _, ik, recipient, _) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + let str = String::from("Halo"); + let str2 = String::from("Halo2"); + + assert_eq!( + bundle + .add_recipient( + String::from_utf8(vec![b'X'; 513]).unwrap(), + recipient, + NoteValue::unsplittable(), + true, + rng, + ) + .unwrap_err(), + WrongAssetDescSize + ); + + assert_eq!( + bundle + .add_recipient( + "".to_string(), + recipient, + NoteValue::unsplittable(), + true, + rng, + ) + .unwrap_err(), + WrongAssetDescSize + ); + + let note_type = bundle + .add_recipient(str.clone(), recipient, NoteValue::from_raw(5), false, rng) + .unwrap(); + + let another_note_type = bundle + .add_recipient(str, recipient, NoteValue::from_raw(10), false, rng) + .unwrap(); + assert_eq!(note_type, another_note_type); + + let third_note_type = bundle + .add_recipient(str2.clone(), recipient, NoteValue::from_raw(15), false, rng) + .unwrap(); + assert_ne!(note_type, third_note_type); + + let actions = bundle.actions(); + assert_eq!(actions.len(), 2); + + let action = bundle.get_action_by_type(note_type).unwrap(); + assert_eq!(action.notes.len(), 2); + assert_eq!(action.notes.first().value().inner(), 5); + assert_eq!(action.notes.first().note_type(), note_type); + assert_eq!(action.notes.first().recipient(), recipient); + + assert_eq!(action.notes.tail().first().unwrap().value().inner(), 10); + assert_eq!(action.notes.tail().first().unwrap().note_type(), note_type); + assert_eq!(action.notes.tail().first().unwrap().recipient(), recipient); + + let action2 = bundle.get_action(str2).unwrap(); + assert_eq!(action2.notes.len(), 1); + assert_eq!(action2.notes().first().value().inner(), 15); + assert_eq!(action2.notes().first().note_type(), third_note_type); + } + + #[test] + fn issue_bundle_finalize_asset() { + let (rng, _, ik, recipient, _) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Precious NFT"), + recipient, + NoteValue::from_raw(u64::MIN), + false, + rng, + ) + .expect("Should properly add recipient"); + + bundle + .finalize_action(String::from("Precious NFT")) + .expect("Should finalize properly"); + + assert_eq!( + bundle + .add_recipient( + String::from("Precious NFT"), + recipient, + NoteValue::unsplittable(), + false, + rng, + ) + .unwrap_err(), + IssueActionAlreadyFinalized + ); + + assert_eq!( + bundle + .finalize_action(String::from("Another precious NFT")) + .unwrap_err(), + IssueActionNotFound + ); + + assert_eq!( + bundle + .finalize_action(String::from_utf8(vec![b'X'; 513]).unwrap()) + .unwrap_err(), + WrongAssetDescSize + ); + + assert_eq!( + bundle.finalize_action("".to_string()).unwrap_err(), + WrongAssetDescSize + ); + + bundle + .add_recipient( + String::from("Another precious NFT"), + recipient, + NoteValue::unsplittable(), + true, + rng, + ) + .expect("should add and finalize"); + + assert_eq!( + bundle + .add_recipient( + String::from("Another precious NFT"), + recipient, + NoteValue::unsplittable(), + true, + rng, + ) + .unwrap_err(), + IssueActionAlreadyFinalized + ); + } + + #[test] + fn issue_bundle_prepare() { + let (rng, _, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Frost"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let prepared = bundle.prepare(sighash); + assert_eq!(prepared.authorization().sighash, sighash); + } + + #[test] + fn issue_bundle_sign() { + let (rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik.clone()); + + bundle + .add_recipient( + String::from("Sign"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + ik.verify(&sighash, &signed.authorization.signature) + .expect("signature should be valid"); + } + + #[test] + fn issue_bundle_invalid_isk_for_signature() { + let (rng, _, ik, recipient, _) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("IssueBundle"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let wrong_isk: IssuerAuthorizingKey = (&SpendingKey::random(&mut OsRng)).into(); + + let err = bundle + .prepare([0; 32]) + .sign(rng, &wrong_isk) + .expect_err("should not be able to sign"); + + assert_eq!(err, IssueBundleIkMismatchNoteType); + } + + #[test] + fn issue_bundle_incorrect_note_type_for_signature() { + let (mut rng, isk, ik, recipient, _) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + // Add "normal" note + bundle + .add_recipient( + String::from("IssueBundle"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + // Add "bad" note + let note = Note::new( + recipient, + NoteValue::from_raw(5), + NoteType::derive(bundle.ik(), "Poisoned pill"), + Nullifier::dummy(&mut rng), + &mut rng, + ); + bundle + .actions + .first_mut() + .unwrap() + .notes + .borrow_mut() + .push(note); + + let err = bundle + .prepare([0; 32]) + .sign(rng, &isk) + .expect_err("should not be able to sign"); + + assert_eq!(err, IssueActionIncorrectNoteType); + } + + #[test] + fn issue_bundle_verify() { + let (rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Verify"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + let prev_finalized = &mut HashSet::new(); + + let finalized = verify_issue_bundle(&signed, sighash, prev_finalized); + assert!(finalized.unwrap().is_empty()); + } + + #[test] + fn issue_bundle_verify_with_finalize() { + let (rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik.clone()); + + bundle + .add_recipient( + String::from("verify_with_finalize"), + recipient, + NoteValue::from_raw(7), + true, + rng, + ) + .unwrap(); + + let signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + let prev_finalized = &mut HashSet::new(); + + let finalized = verify_issue_bundle(&signed, sighash, prev_finalized).unwrap(); + assert!(finalized.contains(&NoteType::derive( + &ik, + &String::from("verify_with_finalize") + ))); + assert_eq!(finalized.len(), 1); + } + + #[test] + fn issue_bundle_verify_fail_previously_finalized() { + let (rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik.clone()); + + bundle + .add_recipient( + String::from("already final"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + let prev_finalized = &mut HashSet::new(); + + let final_type = NoteType::derive(&ik, &String::from("already final")); + + prev_finalized.insert(final_type); + + let finalized = verify_issue_bundle(&signed, sighash, prev_finalized); + assert_eq!( + finalized.unwrap_err(), + IssueActionPreviouslyFinalizedNoteType(final_type) + ); + } + + #[test] + fn issue_bundle_verify_fail_bad_signature() { + // we want to inject "bad" signatures for test purposes. + impl IssueBundle { + pub fn set_authorization(&mut self, authorization: Signed) { + self.authorization = authorization; + } + } + + let (mut rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("bad sig"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let wrong_isk: IssuerAuthorizingKey = (&SpendingKey::random(&mut rng)).into(); + + let mut signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + signed.set_authorization(Signed { + signature: wrong_isk.sign(&mut rng, &sighash), + }); + + let prev_finalized = &mut HashSet::new(); + + assert_eq!( + verify_issue_bundle(&signed, sighash, prev_finalized).unwrap_err(), + IssueBundleInvalidSignature(InvalidSignature) + ); + } + + #[test] + fn issue_bundle_verify_fail_wrong_sighash() { + let (rng, isk, ik, recipient, random_sighash) = setup_params(); + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Good description"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let sighash: [u8; 32] = bundle.commitment().into(); + let signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + let prev_finalized = &mut HashSet::new(); + + // 2. Try empty description + let finalized = verify_issue_bundle(&signed, random_sighash, prev_finalized); + + assert_eq!( + finalized.unwrap_err(), + IssueBundleInvalidSignature(InvalidSignature) + ); + } + + #[test] + fn issue_bundle_verify_fail_incorrect_asset_description() { + let (mut rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Good description"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let mut signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + // Add "bad" note + let note = Note::new( + recipient, + NoteValue::from_raw(5), + NoteType::derive(signed.ik(), "Poisoned pill"), + Nullifier::dummy(&mut rng), + &mut rng, + ); + + signed + .actions + .first_mut() + .unwrap() + .notes + .borrow_mut() + .push(note); + + let prev_finalized = &mut HashSet::new(); + let err = verify_issue_bundle(&signed, sighash, prev_finalized).unwrap_err(); + + assert_eq!(err, IssueActionIncorrectNoteType); + } + + #[test] + fn issue_bundle_verify_fail_incorrect_ik() { + let asset_description = "asset"; + + let (mut rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from(asset_description), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let mut signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + + let incorrect_sk = SpendingKey::random(&mut rng); + let incorrect_isk: IssuerAuthorizingKey = (&incorrect_sk).into(); + let incorrect_ik: IssuerValidatingKey = (&incorrect_isk).into(); + + // Add "bad" note + let note = Note::new( + recipient, + NoteValue::from_raw(55), + NoteType::derive(&incorrect_ik, asset_description), + Nullifier::dummy(&mut rng), + &mut rng, + ); + + signed.actions.first_mut().unwrap().notes = NonEmpty::new(note); + + let prev_finalized = &mut HashSet::new(); + let err = verify_issue_bundle(&signed, sighash, prev_finalized).unwrap_err(); + + assert_eq!(err, IssueBundleIkMismatchNoteType); + } + + #[test] + fn issue_bundle_verify_fail_wrong_asset_descr_size() { + // we want to inject "bad" description for test purposes. + impl IssueAction { + pub fn modify_descr(&mut self, new_descr: String) { + self.asset_desc = new_descr; + } + } + + let (rng, isk, ik, recipient, sighash) = setup_params(); + + let mut bundle = IssueBundle::new(ik); + + bundle + .add_recipient( + String::from("Good description"), + recipient, + NoteValue::from_raw(5), + false, + rng, + ) + .unwrap(); + + let mut signed = bundle.prepare(sighash).sign(rng, &isk).unwrap(); + let prev_finalized = &mut HashSet::new(); + + // 1. Try too long description + signed + .actions + .first_mut() + .unwrap() + .modify_descr(String::from_utf8(vec![b'X'; 513]).unwrap()); + let finalized = verify_issue_bundle(&signed, sighash, prev_finalized); + + assert_eq!(finalized.unwrap_err(), WrongAssetDescSize); + + // 2. Try empty description + signed + .actions + .first_mut() + .unwrap() + .modify_descr("".to_string()); + let finalized = verify_issue_bundle(&signed, sighash, prev_finalized); + + assert_eq!(finalized.unwrap_err(), WrongAssetDescSize); + } +} + +/// Generators for property testing. +#[cfg(any(test, feature = "test-dependencies"))] +#[cfg_attr(docsrs, doc(cfg(feature = "test-dependencies")))] +pub mod testing { + use crate::issuance::{IssueAction, IssueBundle, Prepared, Signed, Unauthorized}; + use crate::keys::testing::{arb_issuer_authorizing_key, arb_issuer_validating_key}; + use crate::note::testing::arb_zsa_note; + use proptest::collection::vec; + use proptest::prelude::*; + use proptest::prop_compose; + use proptest::string::string_regex; + use rand::{rngs::StdRng, SeedableRng}; + + prop_compose! { + /// Generate an issue action given note value + pub fn arb_issue_action()( + note in arb_zsa_note(), + asset_descr in string_regex(".{1,512}").unwrap() + ) -> IssueAction { + IssueAction::new(asset_descr, ¬e) + } + } + + prop_compose! { + /// Generate an arbitrary issue bundle with fake authorization data. This bundle does not + /// necessarily respect consensus rules; for that use + /// [`crate::builder::testing::arb_issue_bundle`] + pub fn arb_unathorized_issue_bundle(n_actions: usize) + ( + actions in vec(arb_issue_action(), n_actions), + ik in arb_issuer_validating_key() + ) -> IssueBundle { + IssueBundle { + ik, + actions, + authorization: Unauthorized + } + } + } + + prop_compose! { + /// Generate an arbitrary issue bundle with fake authorization data. This bundle does not + /// necessarily respect consensus rules; for that use + /// [`crate::builder::testing::arb_issue_bundle`] + pub fn arb_prepared_issue_bundle(n_actions: usize) + ( + actions in vec(arb_issue_action(), n_actions), + ik in arb_issuer_validating_key(), + fake_sighash in prop::array::uniform32(prop::num::u8::ANY) + ) -> IssueBundle { + IssueBundle { + ik, + actions, + authorization: Prepared { sighash: fake_sighash } + } + } + } + + prop_compose! { + /// Generate an arbitrary issue bundle with fake authorization data. This bundle does not + /// necessarily respect consensus rules; for that use + /// [`crate::builder::testing::arb_issue_bundle`] + pub fn arb_signed_issue_bundle(n_actions: usize) + ( + actions in vec(arb_issue_action(), n_actions), + ik in arb_issuer_validating_key(), + isk in arb_issuer_authorizing_key(), + rng_seed in prop::array::uniform32(prop::num::u8::ANY), + fake_sighash in prop::array::uniform32(prop::num::u8::ANY) + ) -> IssueBundle { + let rng = StdRng::from_seed(rng_seed); + + IssueBundle { + ik, + actions, + authorization: Prepared { sighash: fake_sighash }, + }.sign(rng, &isk).unwrap() + } + } +} diff --git a/src/keys.rs b/src/keys.rs index 0504dfa44..1cae7f294 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -12,13 +12,13 @@ use group::{ Curve, GroupEncoding, }; use pasta_curves::pallas; -use rand::RngCore; +use rand::{CryptoRng, RngCore}; use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; use zcash_note_encryption::EphemeralKeyBytes; use crate::{ address::Address, - primitives::redpallas::{self, SpendAuth}, + primitives::redpallas::{self, SpendAuth, VerificationKey}, spec::{ commit_ivk, diversify_hash, extract_p, ka_orchard, prf_nf, to_base, to_scalar, NonIdentityPallasPoint, NonZeroPallasBase, NonZeroPallasScalar, PrfExpand, @@ -188,21 +188,122 @@ impl SpendValidatingKey { pub(crate) fn from_bytes(bytes: &[u8]) -> Option { <[u8; 32]>::try_from(bytes) .ok() - .and_then(|b| { - // Structural validity checks for ak_P: - // - The point must not be the identity - // (which for Pallas is canonically encoded as all-zeroes). - // - The sign of the y-coordinate must be positive. - if b != [0; 32] && b[31] & 0x80 == 0 { - >::try_from(b).ok() - } else { - None - } - }) + .and_then(check_structural_validity) .map(SpendValidatingKey) } } +/// An issuer authorizing key, used to create issuer authorization signatures. +/// This type enforces that the corresponding public point (ik^ℙ) has ỹ = 0. +/// +/// $\mathsf{isk}$ as defined in +/// [Zcash Protocol Spec § 4.2.3: Orchard Key Components][orchardkeycomponents]. +/// +/// [orchardkeycomponents]: https://zips.z.cash/protocol/nu5.pdf#orchardkeycomponents +#[derive(Clone, Debug)] +pub struct IssuerAuthorizingKey(redpallas::SigningKey); + +impl IssuerAuthorizingKey { + /// Derives isk from sk. Internal use only, does not enforce all constraints. + fn derive_inner(sk: &SpendingKey) -> pallas::Scalar { + to_scalar(PrfExpand::ZsaIsk.expand(&sk.0)) + } + + /// Sign the provided message using the `IssuerAuthorizingKey`. + pub fn sign( + &self, + rng: &mut (impl RngCore + CryptoRng), + msg: &[u8], + ) -> redpallas::Signature { + self.0.sign(rng, msg) + } +} + +impl From<&SpendingKey> for IssuerAuthorizingKey { + fn from(sk: &SpendingKey) -> Self { + let isk = Self::derive_inner(sk); + // IssuerSigningKey cannot be constructed such that this assertion would fail. + assert!(!bool::from(isk.is_zero())); + let ret = IssuerAuthorizingKey(isk.to_repr().try_into().unwrap()); + // If the last bit of repr_P(ik) is 1, negate isk. + if (<[u8; 32]>::from(IssuerValidatingKey::from(&ret).0)[31] >> 7) == 1 { + IssuerAuthorizingKey((-isk).to_repr().try_into().unwrap()) + } else { + ret + } + } +} + +/// A key used to validate issuer authorization signatures. +/// +/// Defined in [Zcash Protocol Spec § 4.2.3: Orchard Key Components][orchardkeycomponents]. +/// Note that this is $\mathsf{ik}^\mathbb{P}$, which by construction is equivalent to +/// $\mathsf{ik}$ but stored here as a RedPallas verification key. +/// +/// [orchardkeycomponents]: https://zips.z.cash/protocol/nu5.pdf#orchardkeycomponents +#[derive(Debug, Clone, PartialOrd, Ord)] +pub struct IssuerValidatingKey(redpallas::VerificationKey); +impl From<&IssuerAuthorizingKey> for IssuerValidatingKey { + fn from(isk: &IssuerAuthorizingKey) -> Self { + IssuerValidatingKey((&isk.0).into()) + } +} + +impl From<&IssuerValidatingKey> for pallas::Point { + fn from(issuer_validating_key: &IssuerValidatingKey) -> pallas::Point { + pallas::Point::from_bytes(&(&issuer_validating_key.0).into()).unwrap() + } +} + +impl PartialEq for IssuerValidatingKey { + fn eq(&self, other: &Self) -> bool { + <[u8; 32]>::from(&self.0).eq(&<[u8; 32]>::from(&other.0)) + } +} + +impl Eq for IssuerValidatingKey {} + +impl IssuerValidatingKey { + /// Converts this spend validating key to its serialized form, + /// I2LEOSP_256(ik). + pub(crate) fn to_bytes(&self) -> [u8; 32] { + // This is correct because the wrapped point must have ỹ = 0, and + // so the point repr is the same as I2LEOSP of its x-coordinate. + <[u8; 32]>::from(&self.0) + } + + pub(crate) fn from_bytes(bytes: &[u8]) -> Option { + <[u8; 32]>::try_from(bytes) + .ok() + .and_then(check_structural_validity) + .map(IssuerValidatingKey) + } + + /// Verifies a purported `signature` over `msg` made by this verification key. + pub fn verify( + &self, + msg: &[u8], + signature: &redpallas::Signature, + ) -> Result<(), reddsa::Error> { + self.0.verify(msg, signature) + } +} + +/// A function to check structural validity of the validating keys for authorizing transfers and +/// issuing assets +/// Structural validity checks for ik_P: +/// - The point must not be the identity (which for Pallas is canonically encoded as all-zeroes). +/// - The sign of the y-coordinate must be positive. +fn check_structural_validity( + verification_key_bytes: [u8; 32], +) -> Option> { + if verification_key_bytes != [0; 32] && verification_key_bytes[31] & 0x80 == 0 { + >::try_from(verification_key_bytes).ok() + } else { + None + } +} + /// A key used to derive [`Nullifier`]s from [`Note`]s. /// /// $\mathsf{nk}$ as defined in [Zcash Protocol Spec § 4.2.3: Orchard Key Components][orchardkeycomponents]. @@ -902,9 +1003,12 @@ impl SharedSecret { #[cfg(any(test, feature = "test-dependencies"))] #[cfg_attr(docsrs, doc(cfg(feature = "test-dependencies")))] pub mod testing { + use super::{ + DiversifierIndex, DiversifierKey, EphemeralSecretKey, IssuerAuthorizingKey, + IssuerValidatingKey, SpendingKey, + }; use proptest::prelude::*; - - use super::{DiversifierIndex, DiversifierKey, EphemeralSecretKey, SpendingKey}; + use rand::{rngs::StdRng, SeedableRng}; prop_compose! { /// Generate a uniformly distributed Orchard spending key. @@ -951,6 +1055,21 @@ pub mod testing { DiversifierIndex::from(d_bytes) } } + + prop_compose! { + /// Generate a uniformly distributed RedDSA issuer authorizing key. + pub fn arb_issuer_authorizing_key()(rng_seed in prop::array::uniform32(prop::num::u8::ANY)) -> IssuerAuthorizingKey { + let mut rng = StdRng::from_seed(rng_seed); + IssuerAuthorizingKey::from(&SpendingKey::random(&mut rng)) + } + } + + prop_compose! { + /// Generate a uniformly distributed RedDSA issuer validating key. + pub fn arb_issuer_validating_key()(isk in arb_issuer_authorizing_key()) -> IssuerValidatingKey { + IssuerValidatingKey::from(&isk) + } + } } #[cfg(test)] @@ -962,6 +1081,7 @@ mod tests { testing::{arb_diversifier_index, arb_diversifier_key, arb_esk, arb_spending_key}, *, }; + use crate::note::NoteType; use crate::{ note::{ExtractedNoteCommitment, Nullifier, RandomSeed}, value::NoteValue, @@ -1021,9 +1141,15 @@ mod tests { let ask: SpendAuthorizingKey = (&sk).into(); assert_eq!(<[u8; 32]>::from(&ask.0), tv.ask); + let isk: IssuerAuthorizingKey = (&sk).into(); + assert_eq!(<[u8; 32]>::from(&isk.0), tv.isk); + let ak: SpendValidatingKey = (&ask).into(); assert_eq!(<[u8; 32]>::from(ak.0), tv.ak); + let ik: IssuerValidatingKey = (&isk).into(); + assert_eq!(<[u8; 32]>::from(ik.0), tv.ik); + let nk: NullifierDerivingKey = (&sk).into(); assert_eq!(nk.0.to_repr(), tv.nk); @@ -1047,6 +1173,7 @@ mod tests { let note = Note::from_parts( addr, NoteValue::from_raw(tv.note_v), + NoteType::native(), rho, RandomSeed::from_bytes(tv.note_rseed, &rho).unwrap(), ); diff --git a/src/lib.rs b/src/lib.rs index d30e9c834..c0e63ce9b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,7 @@ pub mod builder; pub mod bundle; pub mod circuit; mod constants; +pub mod issuance; pub mod keys; pub mod note; pub mod note_encryption; diff --git a/src/note.rs b/src/note.rs index 6bd3f7783..2b4e611d7 100644 --- a/src/note.rs +++ b/src/note.rs @@ -19,6 +19,9 @@ pub use self::commitment::{ExtractedNoteCommitment, NoteCommitment}; pub(crate) mod nullifier; pub use self::nullifier::Nullifier; +pub(crate) mod note_type; +pub use self::note_type::NoteType; + /// The ZIP 212 seed randomness for a note. #[derive(Copy, Clone, Debug)] pub(crate) struct RandomSeed([u8; 32]); @@ -86,6 +89,8 @@ pub struct Note { recipient: Address, /// The value of this note. value: NoteValue, + /// The type of this note. + note_type: NoteType, /// A unique creation ID for this note. /// /// This is set to the nullifier of the note that was spent in the [`Action`] that @@ -111,12 +116,14 @@ impl Note { pub(crate) fn from_parts( recipient: Address, value: NoteValue, + note_type: NoteType, rho: Nullifier, rseed: RandomSeed, ) -> Self { Note { recipient, value, + note_type, rho, rseed, } @@ -130,6 +137,7 @@ impl Note { pub(crate) fn new( recipient: Address, value: NoteValue, + note_type: NoteType, rho: Nullifier, mut rng: impl RngCore, ) -> Self { @@ -137,6 +145,7 @@ impl Note { let note = Note { recipient, value, + note_type, rho, rseed: RandomSeed::random(&mut rng, &rho), }; @@ -151,9 +160,11 @@ impl Note { /// Defined in [Zcash Protocol Spec § 4.8.3: Dummy Notes (Orchard)][orcharddummynotes]. /// /// [orcharddummynotes]: https://zips.z.cash/protocol/nu5.pdf#orcharddummynotes + /// TODO zsa: remove note_type pub(crate) fn dummy( rng: &mut impl RngCore, rho: Option, + note_type: NoteType, ) -> (SpendingKey, FullViewingKey, Self) { let sk = SpendingKey::random(rng); let fvk: FullViewingKey = (&sk).into(); @@ -162,6 +173,7 @@ impl Note { let note = Note::new( recipient, NoteValue::zero(), + note_type, rho.unwrap_or_else(|| Nullifier::dummy(rng)), rng, ); @@ -179,6 +191,11 @@ impl Note { self.value } + /// Returns the note type of this note. + pub fn note_type(&self) -> NoteType { + self.note_type + } + /// Returns the rseed value of this note. pub(crate) fn rseed(&self) -> &RandomSeed { &self.rseed @@ -220,6 +237,7 @@ impl Note { g_d.to_bytes(), self.recipient.pk_d().to_bytes(), self.value, + self.note_type, self.rho.0, self.rseed.psi(&self.rho), self.rseed.rcm(&self.rho), @@ -265,6 +283,9 @@ impl fmt::Debug for TransmittedNoteCiphertext { pub mod testing { use proptest::prelude::*; + use crate::note::note_type::testing::arb_note_type; + use crate::note::note_type::testing::zsa_note_type; + use crate::value::testing::arb_note_value; use crate::{ address::testing::arb_address, note::nullifier::testing::arb_nullifier, value::NoteValue, }; @@ -279,15 +300,36 @@ pub mod testing { } prop_compose! { - /// Generate an action without authorization data. + /// Generate an arbitrary note pub fn arb_note(value: NoteValue)( recipient in arb_address(), rho in arb_nullifier(), rseed in arb_rseed(), + note_type in arb_note_type(), + ) -> Note { + Note { + recipient, + value, + note_type, + rho, + rseed, + } + } + } + + prop_compose! { + /// Generate an arbitrary ZSA note + pub fn arb_zsa_note()( + recipient in arb_address(), + value in arb_note_value(), + rho in arb_nullifier(), + rseed in arb_rseed(), + note_type in zsa_note_type(), ) -> Note { Note { recipient, value, + note_type, rho, rseed, } diff --git a/src/note/commitment.rs b/src/note/commitment.rs index 9de51d28e..95dc92a2c 100644 --- a/src/note/commitment.rs +++ b/src/note/commitment.rs @@ -7,7 +7,11 @@ use pasta_curves::pallas; use subtle::{ConstantTimeEq, CtOption}; use crate::{ - constants::{fixed_bases::NOTE_COMMITMENT_PERSONALIZATION, L_ORCHARD_BASE}, + constants::{ + fixed_bases::{NOTE_COMMITMENT_PERSONALIZATION, NOTE_ZSA_COMMITMENT_PERSONALIZATION}, + L_ORCHARD_BASE, + }, + note::note_type::NoteType, spec::extract_p, value::NoteValue, }; @@ -41,22 +45,46 @@ impl NoteCommitment { g_d: [u8; 32], pk_d: [u8; 32], v: NoteValue, + note_type: NoteType, rho: pallas::Base, psi: pallas::Base, rcm: NoteCommitTrapdoor, ) -> CtOption { - let domain = sinsemilla::CommitDomain::new(NOTE_COMMITMENT_PERSONALIZATION); - domain - .commit( - iter::empty() - .chain(BitArray::<_, Lsb0>::new(g_d).iter().by_vals()) - .chain(BitArray::<_, Lsb0>::new(pk_d).iter().by_vals()) - .chain(v.to_le_bits().iter().by_vals()) - .chain(rho.to_le_bits().iter().by_vals().take(L_ORCHARD_BASE)) - .chain(psi.to_le_bits().iter().by_vals().take(L_ORCHARD_BASE)), - &rcm.0, - ) - .map(NoteCommitment) + let g_d_bits = BitArray::<_, Lsb0>::new(g_d); + let pk_d_bits = BitArray::<_, Lsb0>::new(pk_d); + let v_bits = v.to_le_bits(); + let rho_bits = rho.to_le_bits(); + let psi_bits = psi.to_le_bits(); + + let zec_note_bits = iter::empty() + .chain(g_d_bits.iter().by_vals()) + .chain(pk_d_bits.iter().by_vals()) + .chain(v_bits.iter().by_vals()) + .chain(rho_bits.iter().by_vals().take(L_ORCHARD_BASE)) + .chain(psi_bits.iter().by_vals().take(L_ORCHARD_BASE)); + + // TODO: make this constant-time. + if note_type.is_native().into() { + // Commit to ZEC notes as per the Orchard protocol. + Self::commit(NOTE_COMMITMENT_PERSONALIZATION, zec_note_bits, rcm) + } else { + // Commit to non-ZEC notes as per the ZSA protocol. + // Append the note type to the Orchard note encoding. + let type_bits = BitArray::<_, Lsb0>::new(note_type.to_bytes()); + let zsa_note_bits = zec_note_bits.chain(type_bits.iter().by_vals()); + + // Commit in a different domain than Orchard notes. + Self::commit(NOTE_ZSA_COMMITMENT_PERSONALIZATION, zsa_note_bits, rcm) + } + } + + fn commit( + personalization: &str, + bits: impl Iterator, + rcm: NoteCommitTrapdoor, + ) -> CtOption { + let domain = sinsemilla::CommitDomain::new(personalization); + domain.commit(bits, &rcm.0).map(NoteCommitment) } } diff --git a/src/note/note_type.rs b/src/note/note_type.rs new file mode 100644 index 000000000..45e0b532b --- /dev/null +++ b/src/note/note_type.rs @@ -0,0 +1,124 @@ +use group::GroupEncoding; +use halo2_proofs::arithmetic::CurveExt; +use pasta_curves::pallas; +use std::hash::{Hash, Hasher}; + +use subtle::{Choice, ConstantTimeEq, CtOption}; + +use crate::constants::fixed_bases::{VALUE_COMMITMENT_PERSONALIZATION, VALUE_COMMITMENT_V_BYTES}; +use crate::keys::IssuerValidatingKey; + +/// Note type identifier. +#[derive(Clone, Copy, Debug, Eq)] +pub struct NoteType(pallas::Point); + +pub const MAX_ASSET_DESCRIPTION_SIZE: usize = 512; + +// the hasher used to derive the assetID +#[allow(non_snake_case)] +fn assetID_hasher(msg: Vec) -> pallas::Point { + // TODO(zsa) replace personalization + pallas::Point::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION)(&msg) +} + +impl NoteType { + /// Deserialize the note_type from a byte array. + pub fn from_bytes(bytes: &[u8; 32]) -> CtOption { + pallas::Point::from_bytes(bytes).map(NoteType) + } + + /// Serialize the note_type to its canonical byte representation. + pub fn to_bytes(self) -> [u8; 32] { + self.0.to_bytes() + } + + /// $DeriveNoteType$. + /// + /// Defined in [Zcash Protocol Spec § TBD: Note Types][notetypes]. + /// + /// [notetypes]: https://zips.z.cash/protocol/nu5.pdf#notetypes + #[allow(non_snake_case)] + pub fn derive(ik: &IssuerValidatingKey, asset_desc: &str) -> Self { + assert!(!asset_desc.is_empty() && asset_desc.len() <= MAX_ASSET_DESCRIPTION_SIZE); + + let mut s = vec![]; + s.extend(ik.to_bytes()); + s.extend(asset_desc.as_bytes()); + + NoteType(assetID_hasher(s)) + } + + /// Note type for the "native" currency (zec), maintains backward compatibility with Orchard untyped notes. + pub fn native() -> Self { + NoteType(assetID_hasher(VALUE_COMMITMENT_V_BYTES.to_vec())) + } + + /// The base point used in value commitments. + pub fn cv_base(&self) -> pallas::Point { + self.0 + } + + /// Whether this note represents a native or ZSA asset. + pub fn is_native(&self) -> Choice { + self.0.ct_eq(&Self::native().0) + } +} + +impl Hash for NoteType { + fn hash(&self, h: &mut H) { + h.write(&self.to_bytes()); + h.finish(); + } +} + +impl PartialEq for NoteType { + fn eq(&self, other: &Self) -> bool { + bool::from(self.0.ct_eq(&other.0)) + } +} + +/// Generators for property testing. +#[cfg(any(test, feature = "test-dependencies"))] +#[cfg_attr(docsrs, doc(cfg(feature = "test-dependencies")))] +pub mod testing { + use super::NoteType; + + use proptest::prelude::*; + + use crate::keys::{testing::arb_spending_key, IssuerAuthorizingKey, IssuerValidatingKey}; + + prop_compose! { + /// Generate a uniformly distributed note type + pub fn arb_note_type()( + is_native in prop::bool::ANY, + sk in arb_spending_key(), + str in "[A-Za-z]{255}", + ) -> NoteType { + if is_native { + NoteType::native() + } else { + let isk = IssuerAuthorizingKey::from(&sk); + NoteType::derive(&IssuerValidatingKey::from(&isk), &str) + } + } + } + + prop_compose! { + /// Generate the native note type + pub fn native_note_type()(_i in 0..10) -> NoteType { + // TODO: remove _i + NoteType::native() + } + } + + prop_compose! { + /// Generate the ZSA note type + pub fn zsa_note_type()( + sk in arb_spending_key(), + str in "[A-Za-z]{255}" + ) -> NoteType { + let isk = IssuerAuthorizingKey::from(&sk); + NoteType::derive(&IssuerValidatingKey::from(&isk), &str) + } + } +} diff --git a/src/note_encryption.rs b/src/note_encryption.rs index 5113cf7e1..eeeacf575 100644 --- a/src/note_encryption.rs +++ b/src/note_encryption.rs @@ -1,8 +1,7 @@ //! In-band secret distribution for Orchard bundles. -use core::fmt; - use blake2b_simd::{Hash, Params}; +use core::fmt; use group::ff::PrimeField; use zcash_note_encryption::{ BatchDomain, Domain, EphemeralKeyBytes, NotePlaintextBytes, OutPlaintextBytes, @@ -10,6 +9,7 @@ use zcash_note_encryption::{ OUT_PLAINTEXT_SIZE, }; +use crate::note::NoteType; use crate::{ action::Action, keys::{ @@ -24,6 +24,15 @@ use crate::{ const PRF_OCK_ORCHARD_PERSONALIZATION: &[u8; 16] = b"Zcash_Orchardock"; +/// The size of the encoding of a ZSA asset type. +const ZSA_TYPE_SIZE: usize = 32; +/// The size of the ZSA variant of COMPACT_NOTE_SIZE. +const COMPACT_ZSA_NOTE_SIZE: usize = COMPACT_NOTE_SIZE + ZSA_TYPE_SIZE; +/// The size of the memo. +const MEMO_SIZE: usize = NOTE_PLAINTEXT_SIZE - COMPACT_NOTE_SIZE; +/// The size of the ZSA variant of the memo. +const ZSA_MEMO_SIZE: usize = NOTE_PLAINTEXT_SIZE - COMPACT_ZSA_NOTE_SIZE; + /// Defined in [Zcash Protocol Spec § 5.4.2: Pseudo Random Functions][concreteprfs]. /// /// [concreteprfs]: https://zips.z.cash/protocol/nu5.pdf#concreteprfs @@ -49,6 +58,8 @@ pub(crate) fn prf_ock_orchard( ) } +/// Domain-specific requirements: +/// - If the note version is 3, the `plaintext` must contain a valid encoding of a ZSA asset type. fn orchard_parse_note_plaintext_without_memo( domain: &OrchardDomain, plaintext: &[u8], @@ -60,9 +71,8 @@ where assert!(plaintext.len() >= COMPACT_NOTE_SIZE); // Check note plaintext version - if plaintext[0] != 0x02 { - return None; - } + // and parse the asset type accordingly. + let note_type = parse_version_and_asset_type(plaintext)?; // The unwraps below are guaranteed to succeed by the assertion above let diversifier = Diversifier::from_bytes(plaintext[1..12].try_into().unwrap()); @@ -75,10 +85,25 @@ where let pk_d = get_validated_pk_d(&diversifier)?; let recipient = Address::from_parts(diversifier, pk_d); - let note = Note::from_parts(recipient, value, domain.rho, rseed); + + let note = Note::from_parts(recipient, value, note_type, domain.rho, rseed); Some((note, recipient)) } +fn parse_version_and_asset_type(plaintext: &[u8]) -> Option { + // TODO: make this constant-time? + match plaintext[0] { + 0x02 => Some(NoteType::native()), + 0x03 if plaintext.len() >= COMPACT_ZSA_NOTE_SIZE => { + let bytes = &plaintext[COMPACT_NOTE_SIZE..COMPACT_ZSA_NOTE_SIZE] + .try_into() + .unwrap(); + NoteType::from_bytes(bytes).into() + } + _ => None, + } +} + /// Orchard-specific note encryption logic. #[derive(Debug)] pub struct OrchardDomain { @@ -112,7 +137,7 @@ impl Domain for OrchardDomain { type ValueCommitment = ValueCommitment; type ExtractedCommitment = ExtractedNoteCommitment; type ExtractedCommitmentBytes = [u8; 32]; - type Memo = [u8; 512]; // TODO use a more interesting type + type Memo = [u8; MEMO_SIZE]; // TODO use a more interesting type fn derive_esk(note: &Self::Note) -> Option { Some(note.esk()) @@ -152,12 +177,23 @@ impl Domain for OrchardDomain { _: &Self::Recipient, memo: &Self::Memo, ) -> NotePlaintextBytes { + let is_native: bool = note.note_type().is_native().into(); + let mut np = [0; NOTE_PLAINTEXT_SIZE]; - np[0] = 0x02; + np[0] = if is_native { 0x02 } else { 0x03 }; np[1..12].copy_from_slice(note.recipient().diversifier().as_array()); np[12..20].copy_from_slice(¬e.value().to_bytes()); + // todo: add note_type np[20..52].copy_from_slice(note.rseed().as_bytes()); - np[52..].copy_from_slice(memo); + if is_native { + np[52..].copy_from_slice(memo); + } else { + let zsa_type = note.note_type().to_bytes(); + np[52..84].copy_from_slice(&zsa_type); + let short_memo = &memo[0..memo.len() - ZSA_TYPE_SIZE]; + np[84..].copy_from_slice(short_memo); + // TODO: handle full-size memo or make short_memo explicit. + }; NotePlaintextBytes(np) } @@ -224,9 +260,20 @@ impl Domain for OrchardDomain { } fn extract_memo(&self, plaintext: &NotePlaintextBytes) -> Self::Memo { - plaintext.0[COMPACT_NOTE_SIZE..NOTE_PLAINTEXT_SIZE] - .try_into() - .unwrap() + let mut memo = [0; MEMO_SIZE]; + match get_note_version(plaintext) { + 0x02 => { + let full_memo = &plaintext.0[COMPACT_NOTE_SIZE..NOTE_PLAINTEXT_SIZE]; + memo.copy_from_slice(full_memo); + } + 0x03 => { + // ZSA note plaintext have a shorter memo. + let short_memo = &plaintext.0[COMPACT_ZSA_NOTE_SIZE..NOTE_PLAINTEXT_SIZE]; + memo[..ZSA_MEMO_SIZE].copy_from_slice(short_memo); + } + _ => {} + }; + memo } fn extract_pk_d(out_plaintext: &OutPlaintextBytes) -> Option { @@ -254,6 +301,10 @@ impl BatchDomain for OrchardDomain { } } +fn get_note_version(plaintext: &NotePlaintextBytes) -> u8 { + plaintext.0[0] +} + /// Implementation of in-band secret distribution for Orchard bundles. pub type OrchardNoteEncryption = zcash_note_encryption::NoteEncryption; @@ -276,7 +327,7 @@ pub struct CompactAction { nullifier: Nullifier, cmx: ExtractedNoteCommitment, ephemeral_key: EphemeralKeyBytes, - enc_ciphertext: [u8; 52], + enc_ciphertext: [u8; COMPACT_NOTE_SIZE], } impl fmt::Debug for CompactAction { @@ -291,7 +342,7 @@ impl From<&Action> for CompactAction { nullifier: *action.nullifier(), cmx: *action.cmx(), ephemeral_key: action.ephemeral_key(), - enc_ciphertext: action.encrypted_note().enc_ciphertext[..52] + enc_ciphertext: action.encrypted_note().enc_ciphertext[..COMPACT_NOTE_SIZE] .try_into() .unwrap(), } @@ -336,25 +387,70 @@ impl CompactAction { #[cfg(test)] mod tests { + use proptest::prelude::*; use rand::rngs::OsRng; use zcash_note_encryption::{ - try_compact_note_decryption, try_note_decryption, try_output_recovery_with_ovk, + try_compact_note_decryption, try_note_decryption, try_output_recovery_with_ovk, Domain, EphemeralKeyBytes, }; use super::{prf_ock_orchard, CompactAction, OrchardDomain, OrchardNoteEncryption}; + use crate::note::NoteType; use crate::{ action::Action, keys::{ DiversifiedTransmissionKey, Diversifier, EphemeralSecretKey, IncomingViewingKey, OutgoingViewingKey, }, - note::{ExtractedNoteCommitment, Nullifier, RandomSeed, TransmittedNoteCiphertext}, + note::{ + testing::arb_note, ExtractedNoteCommitment, Nullifier, RandomSeed, + TransmittedNoteCiphertext, + }, primitives::redpallas, value::{NoteValue, ValueCommitment}, Address, Note, }; + use super::{get_note_version, orchard_parse_note_plaintext_without_memo}; + + proptest! { + #[test] + fn test_encoding_roundtrip( + note in arb_note(NoteValue::from_raw(10)), + ) { + let memo = &crate::test_vectors::note_encryption::test_vectors()[0].memo; + + // Encode. + let plaintext = OrchardDomain::note_plaintext_bytes(¬e, ¬e.recipient(), memo); + + // Decode. + let domain = OrchardDomain { rho: note.rho() }; + let parsed_version = get_note_version(&plaintext); + let parsed_memo = domain.extract_memo(&plaintext); + + let (parsed_note, parsed_recipient) = orchard_parse_note_plaintext_without_memo(&domain, &plaintext.0, + |diversifier| { + assert_eq!(diversifier, ¬e.recipient().diversifier()); + Some(*note.recipient().pk_d()) + } + ).expect("Plaintext parsing failed"); + + // Check. + assert_eq!(parsed_note, note); + assert_eq!(parsed_recipient, note.recipient()); + + if parsed_note.note_type().is_native().into() { + assert_eq!(parsed_version, 0x02); + assert_eq!(&parsed_memo, memo); + } else { + assert_eq!(parsed_version, 0x03); + let mut short_memo = *memo; + short_memo[512 - 32..].copy_from_slice(&[0; 32]); + assert_eq!(parsed_memo, short_memo); + } + } + } + #[test] fn test_vectors() { let test_vectors = crate::test_vectors::note_encryption::test_vectors(); @@ -396,7 +492,13 @@ mod tests { assert_eq!(ock.as_ref(), tv.ock); let recipient = Address::from_parts(d, pk_d); - let note = Note::from_parts(recipient, value, rho, rseed); + + let note_type = match tv.note_type { + None => NoteType::native(), + Some(type_bytes) => NoteType::from_bytes(&type_bytes).unwrap(), + }; + + let note = Note::from_parts(recipient, value, note_type, rho, rseed); assert_eq!(ExtractedNoteCommitment::from(note.commitment()), cmx); let action = Action::from_parts( @@ -435,7 +537,8 @@ mod tests { assert_eq!(decrypted_note, note); assert_eq!(decrypted_to, recipient); } - None => panic!("Compact note decryption failed"), + None => assert!(tv.note_type.is_some(), "Compact note decryption failed"), + // Ignore that ZSA notes are not detected in compact decryption. } match try_output_recovery_with_ovk(&domain, &ovk, &action, &cv_net, &tv.c_out) { diff --git a/src/spec/prf_expand.rs b/src/spec/prf_expand.rs index e2f95e7ff..fa7881889 100644 --- a/src/spec/prf_expand.rs +++ b/src/spec/prf_expand.rs @@ -10,6 +10,7 @@ pub(crate) enum PrfExpand { OrchardNk, OrchardRivk, Psi, + ZsaIsk, OrchardZip32Child, OrchardDkOvk, OrchardRivkInternal, @@ -24,6 +25,7 @@ impl PrfExpand { Self::OrchardNk => 0x07, Self::OrchardRivk => 0x08, Self::Psi => 0x09, + Self::ZsaIsk => 0x0a, Self::OrchardZip32Child => 0x81, Self::OrchardDkOvk => 0x82, Self::OrchardRivkInternal => 0x83, diff --git a/src/test_vectors/keys.rs b/src/test_vectors/keys.rs index 39d7dc00d..35cc1acbf 100644 --- a/src/test_vectors/keys.rs +++ b/src/test_vectors/keys.rs @@ -4,6 +4,8 @@ pub(crate) struct TestVector { pub(crate) sk: [u8; 32], pub(crate) ask: [u8; 32], pub(crate) ak: [u8; 32], + pub(crate) isk: [u8; 32], + pub(crate) ik: [u8; 32], pub(crate) nk: [u8; 32], pub(crate) rivk: [u8; 32], pub(crate) ivk: [u8; 32], @@ -41,6 +43,16 @@ pub(crate) fn test_vectors() -> Vec { 0x12, 0x8b, 0x9a, 0x14, 0x0d, 0x5e, 0x07, 0xc1, 0x51, 0x72, 0x1d, 0xc1, 0x6d, 0x25, 0xd4, 0xe2, 0x0f, 0x15, ], + isk: [ + 0x95, 0x4a, 0x86, 0xc7, 0xa7, 0x15, 0x53, 0xfa, 0x6c, 0x8b, 0x67, 0x58, 0x54, 0x26, + 0x8e, 0xa5, 0x4c, 0x51, 0xfb, 0x17, 0xd8, 0x3d, 0x80, 0xee, 0x71, 0xd4, 0xae, 0x42, + 0xa1, 0xf8, 0xc8, 0x16, + ], + ik: [ + 0x2e, 0x4f, 0xd4, 0xa6, 0xec, 0x39, 0x94, 0x87, 0xd3, 0x78, 0xb4, 0xc7, 0x25, 0xfb, + 0x9b, 0xaf, 0xbc, 0x01, 0xa5, 0xe2, 0xb7, 0xf3, 0x68, 0x2e, 0xf4, 0x53, 0x95, 0x91, + 0xbc, 0xf0, 0x59, 0x02, + ], nk: [ 0x9f, 0x2f, 0x82, 0x67, 0x38, 0x94, 0x5a, 0xd0, 0x1f, 0x47, 0xf7, 0x0d, 0xb0, 0xc3, 0x67, 0xc2, 0x46, 0xc2, 0x0c, 0x61, 0xff, 0x55, 0x83, 0x94, 0x8c, 0x39, 0xde, 0xa9, @@ -132,6 +144,16 @@ pub(crate) fn test_vectors() -> Vec { 0x2a, 0xd6, 0x43, 0x23, 0x62, 0x9c, 0xfe, 0xd1, 0xe3, 0xaa, 0x24, 0xef, 0x05, 0x2f, 0x56, 0xe4, 0x00, 0x2a, ], + isk: [ + 0xee, 0xf5, 0xe9, 0x1b, 0x36, 0xb8, 0x06, 0x86, 0x72, 0x3d, 0x14, 0xdc, 0xc7, 0x04, + 0xad, 0x59, 0x67, 0x08, 0x0b, 0x7d, 0x6e, 0x49, 0xaf, 0x97, 0x03, 0x0e, 0x4f, 0xa0, + 0xbf, 0x5a, 0xd9, 0x0b, + ], + ik: [ + 0x2e, 0xde, 0xfb, 0x15, 0x8e, 0xa4, 0x48, 0x82, 0x57, 0x2b, 0xcd, 0xb2, 0x35, 0xca, + 0x36, 0xab, 0x39, 0xc7, 0x47, 0xbb, 0x71, 0xfe, 0x0f, 0x10, 0xfa, 0xa3, 0x9b, 0xfd, + 0x62, 0x0a, 0xcc, 0x04, + ], nk: [ 0xa8, 0xb7, 0x3d, 0x97, 0x9b, 0x6e, 0xaa, 0xda, 0x89, 0x24, 0xbc, 0xbd, 0xc6, 0x3a, 0x9e, 0xf4, 0xe8, 0x73, 0x46, 0xf2, 0x30, 0xab, 0xa6, 0xbb, 0xe1, 0xe2, 0xb4, 0x3c, @@ -223,6 +245,16 @@ pub(crate) fn test_vectors() -> Vec { 0xed, 0xb4, 0x26, 0x65, 0x7b, 0x2d, 0x07, 0x40, 0x66, 0x64, 0xd8, 0x95, 0x31, 0x2e, 0xa1, 0xc3, 0xb3, 0x34, ], + isk: [ + 0x5b, 0x1f, 0xc4, 0x57, 0xae, 0x71, 0x38, 0x3c, 0x53, 0xf4, 0x69, 0x41, 0xb7, 0xcb, + 0x4c, 0xec, 0x3d, 0xea, 0xc0, 0xc6, 0x03, 0xe2, 0xcd, 0xd0, 0xd1, 0x8d, 0x94, 0x01, + 0x9e, 0x43, 0xe2, 0x07, + ], + ik: [ + 0x4f, 0x43, 0xeb, 0x7d, 0x9e, 0x03, 0x6f, 0xa6, 0x15, 0xfd, 0x04, 0xa5, 0xef, 0x6a, + 0xeb, 0x21, 0x6e, 0x06, 0x9b, 0xe9, 0x2d, 0x30, 0xe8, 0xf7, 0x16, 0x3e, 0xe3, 0x15, + 0x11, 0x6f, 0x18, 0x32, + ], nk: [ 0x04, 0x51, 0x4e, 0xa0, 0x48, 0xb9, 0x43, 0x63, 0xde, 0xa7, 0xcb, 0x3b, 0xe8, 0xd6, 0x25, 0x82, 0xac, 0x52, 0x92, 0x2e, 0x08, 0x65, 0xf6, 0x62, 0x74, 0x3b, 0x05, 0xea, @@ -314,6 +346,16 @@ pub(crate) fn test_vectors() -> Vec { 0xe7, 0x2c, 0x3b, 0x64, 0x00, 0x06, 0xff, 0x08, 0x50, 0x52, 0x80, 0xe4, 0xf0, 0x0f, 0xad, 0xf7, 0x63, 0x28, ], + isk: [ + 0x71, 0xd0, 0x64, 0xaa, 0xa0, 0x82, 0x63, 0xb8, 0xe4, 0xc3, 0xed, 0x70, 0x3c, 0x6f, + 0x54, 0x25, 0x4a, 0x88, 0x8c, 0x36, 0xec, 0x69, 0x86, 0x62, 0xf7, 0x1f, 0xbb, 0xf4, + 0x26, 0xd9, 0x09, 0x28, + ], + ik: [ + 0x12, 0xb3, 0xab, 0xff, 0x96, 0x75, 0x20, 0x9e, 0x94, 0x54, 0x07, 0x0c, 0x14, 0xac, + 0x15, 0x54, 0x65, 0xae, 0x83, 0xbe, 0x2c, 0x39, 0x46, 0x63, 0x5e, 0x38, 0x77, 0xba, + 0x67, 0xdf, 0x49, 0x12, + ], nk: [ 0xcf, 0x36, 0xad, 0x6a, 0x06, 0x6c, 0xd2, 0x13, 0xe1, 0xd7, 0x67, 0xab, 0x07, 0x1d, 0xc1, 0x16, 0x78, 0x85, 0xc4, 0x16, 0x8b, 0xc2, 0xe2, 0x17, 0x54, 0x48, 0x56, 0x3a, @@ -405,6 +447,16 @@ pub(crate) fn test_vectors() -> Vec { 0xf5, 0x6d, 0x83, 0x20, 0x09, 0xf7, 0x24, 0x2e, 0x1f, 0x7c, 0x77, 0x0a, 0x12, 0x24, 0x1d, 0xfa, 0x28, 0x07, ], + isk: [ + 0x44, 0x36, 0x1a, 0x7b, 0xa6, 0xa1, 0xaa, 0x17, 0x8e, 0x72, 0xaf, 0x47, 0xbd, 0xc1, + 0x60, 0x40, 0xce, 0x1c, 0x54, 0xdd, 0x4b, 0x56, 0x33, 0x21, 0x55, 0xba, 0x9d, 0x04, + 0x09, 0x71, 0xd0, 0x07, + ], + ik: [ + 0x1f, 0x17, 0x2d, 0x79, 0xae, 0xdc, 0xc2, 0x06, 0x8c, 0x3a, 0x09, 0x08, 0x93, 0xe1, + 0xa1, 0x75, 0xd9, 0xb5, 0x78, 0xf8, 0x91, 0xaf, 0x9a, 0xb6, 0x8d, 0x4f, 0xe1, 0xe9, + 0x05, 0xa3, 0xb2, 0x11, + ], nk: [ 0x51, 0xba, 0xf3, 0x33, 0xcf, 0xf1, 0xf2, 0xd0, 0xc7, 0xe3, 0xcf, 0xf4, 0xd3, 0x01, 0x29, 0x9d, 0xc1, 0xef, 0xe9, 0x83, 0x00, 0x31, 0x4a, 0x54, 0x19, 0x38, 0x02, 0x9b, @@ -496,6 +548,16 @@ pub(crate) fn test_vectors() -> Vec { 0xdf, 0x28, 0xbb, 0x0f, 0x10, 0x21, 0xea, 0x84, 0x3f, 0x86, 0x7f, 0x8a, 0x17, 0x0f, 0x5c, 0x33, 0x90, 0x1f, ], + isk: [ + 0xdc, 0x93, 0x72, 0x9f, 0x3f, 0x28, 0x30, 0xed, 0x79, 0x1c, 0x21, 0xbe, 0xbe, 0x45, + 0x0f, 0xcf, 0x1f, 0x8f, 0xef, 0x49, 0x81, 0x39, 0xc7, 0x99, 0xd1, 0x63, 0x66, 0x5a, + 0x8c, 0x51, 0xe5, 0x2d, + ], + ik: [ + 0x1d, 0xb6, 0x1c, 0x29, 0x3e, 0x3a, 0x93, 0x34, 0x5d, 0x06, 0xb9, 0x0b, 0xd7, 0x1f, + 0xd3, 0x21, 0x5c, 0x2c, 0x1c, 0x29, 0x53, 0x5a, 0x10, 0xde, 0x9d, 0x31, 0x40, 0xb7, + 0x4d, 0xb6, 0x1d, 0x07, + ], nk: [ 0x9e, 0x99, 0x7d, 0x9d, 0x26, 0x97, 0x87, 0x26, 0x8e, 0x09, 0x2a, 0x7c, 0x85, 0x41, 0x7d, 0xa5, 0x30, 0xea, 0x42, 0xfa, 0xc6, 0x68, 0xa7, 0x49, 0xaf, 0x55, 0xdf, 0xb7, @@ -587,6 +649,16 @@ pub(crate) fn test_vectors() -> Vec { 0x65, 0x43, 0x46, 0x2a, 0x13, 0x7f, 0xfe, 0xa3, 0x7b, 0xaf, 0x41, 0xef, 0x28, 0x6b, 0xb7, 0x32, 0xbe, 0x2c, ], + isk: [ + 0xf2, 0x34, 0x52, 0x32, 0xc9, 0x19, 0xc1, 0x29, 0xe0, 0x4b, 0x0c, 0x46, 0xac, 0x2c, + 0xa8, 0x50, 0x65, 0xd9, 0x54, 0x85, 0xb9, 0x02, 0xab, 0x0f, 0x98, 0xf9, 0x3a, 0xee, + 0x59, 0x4b, 0x5f, 0x02, + ], + ik: [ + 0x2c, 0x83, 0xd9, 0x20, 0xe9, 0xf6, 0x6d, 0xa5, 0x04, 0x86, 0x37, 0xad, 0x9a, 0xa2, + 0xcc, 0xe6, 0xe1, 0x6e, 0xf4, 0x8f, 0x86, 0x50, 0xea, 0x00, 0xd8, 0xc2, 0xd7, 0x68, + 0x61, 0x8a, 0xe3, 0x36, + ], nk: [ 0xfd, 0x31, 0x64, 0xc6, 0x32, 0xbe, 0xc9, 0x4c, 0xe9, 0xfb, 0x2f, 0x30, 0x22, 0x63, 0xb8, 0x84, 0xab, 0xb9, 0xc1, 0x0e, 0x55, 0xe4, 0x48, 0x64, 0x7f, 0x67, 0x98, 0x49, @@ -678,6 +750,16 @@ pub(crate) fn test_vectors() -> Vec { 0xb3, 0x65, 0x1f, 0xfa, 0x1c, 0x69, 0x69, 0x15, 0xac, 0x00, 0xa2, 0x5e, 0xa3, 0xac, 0x7d, 0xff, 0x99, 0x01, ], + isk: [ + 0x3d, 0xa9, 0x08, 0x88, 0xba, 0x18, 0x24, 0xc8, 0x16, 0x29, 0x2d, 0x7f, 0x17, 0x33, + 0xac, 0x4c, 0xbe, 0x72, 0x2c, 0x6a, 0x12, 0x1c, 0xc7, 0x80, 0x17, 0x06, 0x26, 0xb7, + 0x0a, 0x26, 0x95, 0x28, + ], + ik: [ + 0x16, 0xa8, 0xff, 0x29, 0xb5, 0x17, 0xb5, 0xa8, 0xf7, 0xd0, 0x9b, 0x4e, 0x5e, 0x71, + 0x3a, 0x9a, 0x78, 0x4c, 0x74, 0x04, 0xd6, 0x1e, 0x3a, 0xf5, 0x30, 0x19, 0xc3, 0x47, + 0x0e, 0x90, 0x95, 0x22, + ], nk: [ 0x02, 0xab, 0x99, 0x5c, 0xe9, 0x8f, 0x63, 0x02, 0x5f, 0xb6, 0x24, 0x28, 0xa0, 0xfb, 0xf5, 0x2f, 0x25, 0x22, 0xe6, 0xa2, 0x72, 0x61, 0x07, 0x8a, 0x9f, 0x4d, 0x6a, 0x36, @@ -769,6 +851,16 @@ pub(crate) fn test_vectors() -> Vec { 0x3b, 0x02, 0xd2, 0x5c, 0xc1, 0x0c, 0x90, 0x71, 0xfc, 0x02, 0x19, 0xe9, 0x7f, 0x93, 0x92, 0xd0, 0x67, 0x0c, ], + isk: [ + 0x01, 0x65, 0x33, 0x68, 0x4f, 0xb9, 0x81, 0x15, 0xa4, 0x05, 0xc9, 0xc7, 0xad, 0x47, + 0x72, 0x76, 0xab, 0x7c, 0x72, 0xfd, 0x67, 0x1a, 0x27, 0xe3, 0x6c, 0x0a, 0x7a, 0xbe, + 0x0a, 0x76, 0x90, 0x09, + ], + ik: [ + 0xff, 0xd7, 0x5f, 0x6f, 0x9e, 0xf4, 0x27, 0xf3, 0x26, 0xcd, 0xbf, 0x3a, 0x98, 0xbc, + 0xb5, 0x93, 0x63, 0x5a, 0x2c, 0x1a, 0xd7, 0x2b, 0x39, 0x99, 0x12, 0x61, 0xe2, 0x75, + 0xa9, 0xec, 0x6f, 0x10, + ], nk: [ 0x25, 0x91, 0xed, 0xf7, 0xef, 0x4c, 0xf2, 0x18, 0x4c, 0x34, 0xbe, 0x93, 0xfc, 0xf6, 0x12, 0x91, 0x50, 0x42, 0xf1, 0x5a, 0xb5, 0x08, 0x4b, 0x14, 0xe1, 0x66, 0x79, 0x5b, @@ -860,6 +952,16 @@ pub(crate) fn test_vectors() -> Vec { 0x8d, 0x4b, 0x02, 0x5f, 0x8c, 0xc1, 0x60, 0xe1, 0xf4, 0xe9, 0x5f, 0x0a, 0x85, 0x3e, 0xbc, 0x41, 0x6a, 0x2b, ], + isk: [ + 0x76, 0x08, 0x32, 0x9d, 0xfa, 0x77, 0xc4, 0x2c, 0x4f, 0xc7, 0x6a, 0xc2, 0x95, 0x94, + 0xa2, 0x72, 0x83, 0x93, 0x4f, 0x5a, 0x93, 0x40, 0x71, 0xb9, 0xf8, 0xcd, 0x34, 0x4e, + 0x1f, 0x98, 0x45, 0x0e, + ], + ik: [ + 0x72, 0xa0, 0xac, 0x97, 0x8a, 0x2d, 0xa1, 0x61, 0xf4, 0x1f, 0x5b, 0x7a, 0x40, 0xbd, + 0x83, 0xc0, 0x58, 0x41, 0xf8, 0x1b, 0xc5, 0x11, 0x40, 0x67, 0xb8, 0x85, 0x98, 0x7f, + 0x48, 0xca, 0x52, 0x2d, + ], nk: [ 0x3e, 0x88, 0xf2, 0x07, 0x1f, 0xd9, 0xa2, 0xbb, 0x26, 0xcd, 0xa2, 0xea, 0x85, 0x6a, 0xa0, 0xfb, 0x3a, 0x80, 0xa8, 0x7d, 0x2f, 0xb6, 0x13, 0x6f, 0xab, 0x85, 0xe3, 0x6c, diff --git a/src/test_vectors/note_encryption.rs b/src/test_vectors/note_encryption.rs index 10ac4f5e0..7d2b7c960 100644 --- a/src/test_vectors/note_encryption.rs +++ b/src/test_vectors/note_encryption.rs @@ -1,4 +1,4 @@ -//! Test vectors for Orchard key components. +// From https://github.com/zcash-hackworks/zcash-test-vectors/ (orchard_note_encryption) pub(crate) struct TestVector { pub(crate) incoming_viewing_key: [u8; 64], @@ -20,10 +20,10 @@ pub(crate) struct TestVector { pub(crate) ock: [u8; 32], pub(crate) op: [u8; 64], pub(crate) c_out: [u8; 80], + pub(crate) note_type: Option<[u8; 32]>, } pub(crate) fn test_vectors() -> Vec { - // From https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/orchard_note_encryption.py vec![ TestVector { incoming_viewing_key: [ @@ -97,34 +97,34 @@ pub(crate) fn test_vectors() -> Vec { 0xc1, 0x3e, 0x71, 0x01, ], rho: [ - 0xc5, 0x96, 0xfb, 0xd3, 0x2e, 0xbb, 0xcb, 0xad, 0xae, 0x60, 0xd2, 0x85, 0xc7, 0xd7, - 0x5f, 0xa8, 0x36, 0xf9, 0xd2, 0xfa, 0x86, 0x10, 0x0a, 0xb8, 0x58, 0xea, 0x2d, 0xe1, - 0xf1, 0x1c, 0x83, 0x06, + 0xca, 0x1f, 0xeb, 0x30, 0xca, 0x11, 0x17, 0x76, 0xc0, 0x41, 0x74, 0x66, 0xbd, 0x69, + 0xb3, 0xd2, 0x13, 0x88, 0x2e, 0xef, 0x55, 0xe6, 0x0b, 0x6d, 0x9e, 0x2a, 0x98, 0xe7, + 0x05, 0xee, 0xf3, 0x27, ], cmx: [ - 0xa5, 0x70, 0x6f, 0x3d, 0x1b, 0x68, 0x8e, 0x9d, 0xc6, 0x34, 0xee, 0xe4, 0xe6, 0x5b, - 0x02, 0x8a, 0x43, 0xee, 0xae, 0xd2, 0x43, 0x5b, 0xea, 0x2a, 0xe3, 0xd5, 0x16, 0x05, - 0x75, 0xc1, 0x1a, 0x3b, + 0x23, 0x75, 0x7c, 0x51, 0x58, 0x21, 0xcb, 0xc1, 0x84, 0x3c, 0x9a, 0x45, 0x7b, 0x7e, + 0x6a, 0xe6, 0x01, 0xad, 0xd2, 0xea, 0x10, 0xb9, 0xc8, 0x6d, 0x6b, 0x31, 0x7c, 0xe2, + 0xf1, 0x7b, 0xd9, 0x21, ], esk: [ - 0x56, 0x66, 0x9d, 0x64, 0x3f, 0x78, 0x0b, 0x6a, 0xd8, 0xb3, 0xd3, 0x5a, 0xd7, 0x46, - 0x8a, 0xaa, 0x73, 0x27, 0x66, 0x57, 0x5f, 0x84, 0xa9, 0x5d, 0x20, 0xa6, 0x25, 0xff, - 0x38, 0x77, 0xea, 0x3f, + 0x5b, 0xfe, 0x46, 0x9c, 0x33, 0xe4, 0x47, 0xba, 0x45, 0x6b, 0x8b, 0xfe, 0x9b, 0x38, + 0x5b, 0x39, 0x31, 0xb4, 0xba, 0xeb, 0x8f, 0x70, 0x23, 0xfe, 0x8e, 0x33, 0x35, 0x4f, + 0xff, 0xf1, 0xbd, 0x1a, ], ephemeral_key: [ - 0xad, 0xdb, 0x47, 0xb6, 0xac, 0x5d, 0xfc, 0x16, 0x55, 0x89, 0x23, 0xd3, 0xa8, 0xf3, - 0x76, 0x09, 0x5c, 0x69, 0x5c, 0x04, 0x7c, 0x4e, 0x32, 0x66, 0xae, 0x67, 0x69, 0x87, - 0xf7, 0xe3, 0x13, 0x81, + 0x8a, 0x5e, 0x13, 0x2c, 0x3a, 0x07, 0x04, 0xf2, 0x45, 0x6f, 0xbd, 0x77, 0x7a, 0x13, + 0xd6, 0xec, 0x57, 0x65, 0x56, 0x71, 0xdb, 0x07, 0x2a, 0x7d, 0x27, 0x6a, 0xd9, 0x69, + 0xf5, 0xec, 0x45, 0x17, ], shared_secret: [ - 0x30, 0x3c, 0x1c, 0x3f, 0x2b, 0xcb, 0xb9, 0xd8, 0x49, 0x70, 0x15, 0xa6, 0xdf, 0xca, - 0x95, 0x4e, 0xce, 0x0d, 0x3b, 0x6c, 0xf1, 0x0a, 0xb9, 0xf7, 0x19, 0xeb, 0x89, 0x19, - 0x9e, 0xdf, 0xe9, 0x89, + 0x36, 0xd5, 0x4c, 0xab, 0xc6, 0x7f, 0x6c, 0xc7, 0x26, 0xa7, 0x30, 0xf3, 0xa0, 0xce, + 0xed, 0x58, 0x53, 0xf0, 0x8c, 0xd3, 0x81, 0x46, 0xc8, 0x34, 0x25, 0x98, 0x98, 0x7c, + 0x21, 0x50, 0x48, 0xa5, ], k_enc: [ - 0xef, 0x9d, 0x62, 0x25, 0x68, 0x7c, 0x2c, 0x91, 0x7b, 0x5c, 0xad, 0xa1, 0x75, 0x23, - 0xe8, 0xfb, 0xdb, 0x08, 0x82, 0x25, 0xaf, 0x2d, 0xb5, 0x72, 0xbb, 0x40, 0x0e, 0x44, - 0x8b, 0x5e, 0xa8, 0x71, + 0x82, 0xc4, 0x32, 0x65, 0x33, 0x7f, 0x1a, 0xb3, 0x7b, 0x18, 0xdf, 0x27, 0x75, 0x48, + 0x61, 0x82, 0x63, 0xb8, 0x02, 0x4d, 0x9b, 0x14, 0x5a, 0x05, 0xad, 0xe2, 0xeb, 0x54, + 0x79, 0x18, 0x03, 0x20, ], p_enc: [ 0x02, 0x56, 0xe8, 0x4b, 0x1a, 0xdc, 0x94, 0x23, 0xc3, 0x67, 0x6c, 0x04, 0x8d, 0x5f, @@ -170,69 +170,70 @@ pub(crate) fn test_vectors() -> Vec { 0xee, 0xcc, 0x40, 0xa9, ], c_enc: [ - 0x1a, 0x9a, 0xdb, 0x14, 0x24, 0x98, 0xe3, 0xdc, 0xc7, 0x6f, 0xed, 0x77, 0x86, 0x14, - 0xdd, 0x31, 0x6c, 0x02, 0xfb, 0xb8, 0xba, 0x92, 0x44, 0xae, 0x4c, 0x2e, 0x32, 0xa0, - 0x7d, 0xae, 0xec, 0xa4, 0x12, 0x26, 0xb9, 0x8b, 0xfe, 0x74, 0xf9, 0xfc, 0xb2, 0x28, - 0xcf, 0xc1, 0x00, 0xf3, 0x18, 0x0f, 0x57, 0x75, 0xec, 0xe3, 0x8b, 0xe7, 0xed, 0x45, - 0xd9, 0x40, 0x21, 0xf4, 0x40, 0x1b, 0x2a, 0x4d, 0x75, 0x82, 0xb4, 0x28, 0xd4, 0x9e, - 0xc7, 0xf5, 0xb5, 0xa4, 0x98, 0x97, 0x3e, 0x60, 0xe3, 0x8e, 0x74, 0xf5, 0xc3, 0xe5, - 0x77, 0x82, 0x7c, 0x38, 0x28, 0x57, 0xd8, 0x16, 0x6b, 0x54, 0xe6, 0x4f, 0x66, 0xef, - 0x5c, 0x7e, 0x8c, 0x9b, 0xaa, 0x2a, 0x3f, 0xa9, 0xe3, 0x7d, 0x08, 0x77, 0x17, 0xd5, - 0xe9, 0x6b, 0xc2, 0xf7, 0x3d, 0x03, 0x14, 0x50, 0xdc, 0x24, 0x32, 0xba, 0x49, 0xd8, - 0xb7, 0x4d, 0xb2, 0x13, 0x09, 0x9e, 0xa9, 0xba, 0x04, 0xeb, 0x63, 0xb6, 0x57, 0x4d, - 0x46, 0xc0, 0x3c, 0xe7, 0x90, 0x0d, 0x4a, 0xc4, 0xbb, 0x18, 0x8e, 0xe9, 0x03, 0x0d, - 0x7f, 0x69, 0xc8, 0x95, 0xa9, 0x4f, 0xc1, 0x82, 0xf2, 0x25, 0xa9, 0x4f, 0x0c, 0xde, - 0x1b, 0x49, 0x88, 0x68, 0x71, 0xa3, 0x76, 0x34, 0x1e, 0xa9, 0x41, 0x71, 0xbe, 0xfd, - 0x95, 0xa8, 0x30, 0xfa, 0x18, 0x40, 0x70, 0x97, 0xdc, 0xa5, 0x11, 0x02, 0x54, 0x63, - 0xd4, 0x37, 0xe9, 0x69, 0x5c, 0xaa, 0x07, 0x9a, 0x2f, 0x68, 0xcd, 0xc7, 0xf2, 0xc1, - 0x32, 0x67, 0xbf, 0xf4, 0x19, 0x51, 0x37, 0xfa, 0x89, 0x53, 0x25, 0x2a, 0x81, 0xb2, - 0xaf, 0xa1, 0x58, 0x2b, 0x9b, 0xfb, 0x4a, 0xc9, 0x60, 0x37, 0xed, 0x29, 0x91, 0xd3, - 0xcb, 0xc7, 0xd5, 0x4a, 0xff, 0x6e, 0x62, 0x1b, 0x06, 0xa7, 0xb2, 0xb9, 0xca, 0xf2, - 0x95, 0x5e, 0xfa, 0xf4, 0xea, 0x8e, 0xfc, 0xfd, 0x02, 0x3a, 0x3c, 0x17, 0x48, 0xdf, - 0x3c, 0xbd, 0x43, 0xe0, 0xb9, 0xa8, 0xb0, 0x94, 0x56, 0x88, 0xd5, 0x20, 0x56, 0xc1, - 0xd1, 0x6e, 0xea, 0x37, 0xe7, 0x98, 0xba, 0x31, 0xdc, 0x3e, 0x5d, 0x49, 0x52, 0xbd, - 0x51, 0xec, 0x76, 0x9d, 0x57, 0x88, 0xb6, 0xe3, 0x5f, 0xe9, 0x04, 0x2b, 0x95, 0xd4, - 0xd2, 0x17, 0x81, 0x40, 0x0e, 0xaf, 0xf5, 0x86, 0x16, 0xad, 0x56, 0x27, 0x96, 0x63, - 0x6a, 0x50, 0xb8, 0xed, 0x6c, 0x7f, 0x98, 0x1d, 0xc7, 0xba, 0x81, 0x4e, 0xff, 0x15, - 0x2c, 0xb2, 0x28, 0xa2, 0xea, 0xd2, 0xf8, 0x32, 0x66, 0x2f, 0xa4, 0xa4, 0xa5, 0x07, - 0x97, 0xb0, 0xf8, 0x5b, 0x62, 0xd0, 0x8b, 0x1d, 0xd2, 0xd8, 0xe4, 0x3b, 0x4a, 0x5b, - 0xfb, 0xb1, 0x59, 0xed, 0x57, 0x8e, 0xf7, 0x47, 0x5d, 0xe0, 0xad, 0xa1, 0x3e, 0x17, - 0xad, 0x87, 0xcc, 0x23, 0x05, 0x67, 0x2b, 0xcc, 0x55, 0xa8, 0x88, 0x13, 0x17, 0xfd, - 0xc1, 0xbf, 0xc4, 0x59, 0xb6, 0x8b, 0x2d, 0xf7, 0x0c, 0xad, 0x37, 0x70, 0xed, 0x0f, - 0xd0, 0x2d, 0x64, 0xb9, 0x6f, 0x2b, 0xbf, 0x6f, 0x8f, 0x63, 0x2e, 0x86, 0x6c, 0xa5, - 0xd1, 0x96, 0xd2, 0x48, 0xad, 0x05, 0xc3, 0xde, 0x64, 0x41, 0x48, 0xa8, 0x0b, 0x51, - 0xad, 0xa9, 0x5b, 0xd0, 0x8d, 0x73, 0xcd, 0xbb, 0x45, 0x26, 0x4f, 0x3b, 0xd1, 0x13, - 0x83, 0x5b, 0x46, 0xf9, 0xbe, 0x7b, 0x6d, 0x23, 0xa4, 0x3b, 0xdd, 0xfe, 0x1e, 0x74, - 0x08, 0xc9, 0x70, 0x31, 0xe1, 0xa8, 0x21, 0x4b, 0xab, 0x46, 0x39, 0x10, 0x44, 0xb7, - 0x00, 0xd3, 0x8f, 0x51, 0x92, 0xc5, 0x7f, 0xe6, 0xf8, 0x71, 0x59, 0xb5, 0x55, 0x12, - 0x09, 0x4e, 0x29, 0xd2, 0xce, 0xba, 0xb8, 0x68, 0xc8, 0xf1, 0xad, 0xba, 0xd5, 0x70, - 0x77, 0xcb, 0xeb, 0x5e, 0x69, 0x65, 0x85, 0x82, 0xbf, 0x98, 0xd1, 0x9d, 0x64, 0xf4, - 0x4b, 0x0d, 0x50, 0xc7, 0xe2, 0x20, 0x9a, 0xb3, 0xfc, 0x56, 0xb4, 0xf4, 0x09, 0x12, - 0x3a, 0xae, 0xb0, 0x26, 0x3a, 0x22, 0x45, 0x1b, 0xc1, 0x4e, 0xd7, 0x56, 0xd0, 0x48, - 0x38, 0x5a, 0xed, 0xbb, 0x86, 0xa8, 0x46, 0x77, 0xbb, 0x2d, 0x21, 0xc5, 0x2c, 0xc9, - 0x49, 0x41, 0x47, 0xbf, 0x0f, 0xb1, 0x02, 0x74, 0x52, 0x82, 0x99, 0x09, 0x09, 0x72, - 0x62, 0x28, 0x18, 0x6e, 0x02, 0xc8, + 0x93, 0xe0, 0x48, 0x74, 0xb5, 0x83, 0x7c, 0x26, 0x1d, 0xaf, 0x1a, 0x27, 0xb7, 0x83, + 0xec, 0x48, 0x65, 0xd3, 0xbb, 0x72, 0x8e, 0xb1, 0x61, 0xda, 0xed, 0xb8, 0x44, 0x6a, + 0xb3, 0x8f, 0x07, 0x8e, 0xa8, 0x66, 0x2e, 0x4d, 0x2e, 0x9d, 0x00, 0xa3, 0x95, 0x27, + 0xdc, 0xde, 0x51, 0x7a, 0xc3, 0xdb, 0xf9, 0xd2, 0x7e, 0x3c, 0x79, 0xfa, 0x88, 0x1a, + 0xbb, 0x48, 0xb7, 0x0d, 0xbc, 0x28, 0xdd, 0xf4, 0xaf, 0x81, 0xae, 0xed, 0x2a, 0x29, + 0x86, 0x00, 0x51, 0x08, 0x48, 0xed, 0xbd, 0xc4, 0x2e, 0x88, 0x95, 0x48, 0x70, 0xd5, + 0xd6, 0x01, 0xcd, 0xf2, 0x90, 0x18, 0x1b, 0x53, 0x91, 0x05, 0xb9, 0xf6, 0x13, 0x86, + 0xcb, 0x07, 0x84, 0x6b, 0xc8, 0xe3, 0x19, 0xdf, 0xab, 0x8e, 0x10, 0x97, 0x66, 0xa2, + 0x8c, 0x1e, 0x0b, 0xbf, 0x91, 0x32, 0x02, 0xce, 0xcd, 0x1b, 0x48, 0x17, 0xa2, 0x28, + 0x2f, 0xc2, 0x9e, 0xd4, 0x4d, 0x9b, 0x04, 0x04, 0x9d, 0xe5, 0x5a, 0xcf, 0x54, 0x99, + 0xe5, 0xf5, 0x65, 0xd4, 0x8b, 0x8f, 0x19, 0x72, 0xc0, 0x43, 0x84, 0x77, 0x96, 0x23, + 0x0d, 0xc6, 0x8f, 0x32, 0x57, 0xc0, 0x85, 0x29, 0x14, 0x8c, 0x8e, 0x0c, 0x32, 0x7b, + 0x25, 0xb4, 0x59, 0x87, 0x7c, 0xde, 0xd9, 0x8f, 0xf7, 0x8e, 0x81, 0xfa, 0x69, 0x2e, + 0x14, 0xf8, 0xfd, 0xa1, 0xfe, 0x52, 0x4f, 0xf1, 0x50, 0x18, 0x1f, 0x73, 0x6e, 0xd3, + 0xa8, 0x8e, 0xc7, 0x89, 0xdc, 0x15, 0x95, 0x4a, 0x02, 0x63, 0x9a, 0x8a, 0x20, 0xca, + 0x38, 0xd8, 0x99, 0xbf, 0xd1, 0xc5, 0x73, 0xb0, 0x41, 0xee, 0x7b, 0xf2, 0x2b, 0x96, + 0x75, 0xbd, 0xa8, 0xc4, 0xb0, 0x58, 0xa0, 0x5a, 0x49, 0x33, 0x03, 0xb1, 0x1f, 0x35, + 0x81, 0xc1, 0x9d, 0x2d, 0xa9, 0x96, 0x6a, 0x71, 0x06, 0x6e, 0xc1, 0x7d, 0xcc, 0xd3, + 0x48, 0x20, 0x7e, 0xb3, 0x14, 0xf6, 0xcf, 0xc9, 0xd0, 0x6a, 0x62, 0x14, 0xc6, 0x72, + 0x10, 0x97, 0xa5, 0x2e, 0x27, 0x76, 0x66, 0x7c, 0x6b, 0xe9, 0xc8, 0x86, 0x2b, 0x17, + 0x3d, 0xb0, 0xe8, 0x04, 0xb1, 0x2c, 0xaa, 0xe9, 0xd9, 0xfa, 0x09, 0xf3, 0xf4, 0x8c, + 0xaf, 0x4b, 0xf7, 0x56, 0xa2, 0x78, 0x95, 0x0a, 0x25, 0x4e, 0xc4, 0x14, 0x76, 0x77, + 0xaa, 0xca, 0x21, 0x42, 0x96, 0x08, 0x1a, 0x2f, 0x62, 0x4a, 0x92, 0x78, 0x94, 0x6e, + 0x68, 0x9d, 0xd9, 0x14, 0x02, 0x90, 0x92, 0xe7, 0xfa, 0x8f, 0xbc, 0x8a, 0x04, 0x46, + 0x7d, 0x60, 0xed, 0xff, 0x5d, 0x97, 0xcb, 0x65, 0x09, 0xa0, 0xc7, 0x2c, 0xed, 0x77, + 0xac, 0xa8, 0x71, 0x30, 0x8e, 0x7d, 0xe2, 0xbe, 0xb1, 0x52, 0x0a, 0x34, 0x17, 0xd7, + 0x21, 0x3a, 0x9a, 0xbd, 0x47, 0x35, 0x8c, 0x4f, 0x32, 0x9f, 0x0f, 0x64, 0x41, 0x92, + 0x10, 0xa9, 0x9d, 0xb2, 0xde, 0x6e, 0x6d, 0x89, 0x21, 0xb0, 0xf4, 0xf9, 0x9f, 0xd6, + 0x45, 0xfa, 0xe0, 0xd6, 0x29, 0xce, 0x22, 0x11, 0x90, 0x5f, 0x25, 0xf4, 0x0d, 0x12, + 0x0b, 0x63, 0x27, 0x93, 0x75, 0xb5, 0x43, 0xc3, 0x1e, 0x3b, 0x55, 0x7e, 0x57, 0xa7, + 0xa8, 0x7c, 0x61, 0x79, 0xeb, 0xd3, 0x4f, 0x6d, 0xbb, 0x92, 0x0e, 0xc5, 0xe0, 0x5d, + 0x6a, 0x77, 0xec, 0xdf, 0x36, 0xb4, 0x57, 0xba, 0xb4, 0x56, 0x6c, 0x40, 0x8f, 0xb5, + 0x7d, 0xfc, 0xdd, 0xda, 0xa4, 0x2c, 0x51, 0x34, 0xaf, 0x3e, 0x97, 0x8d, 0xbf, 0xd0, + 0xdf, 0xb0, 0xca, 0x4f, 0xfa, 0xf1, 0x65, 0x0a, 0xbe, 0xe1, 0x62, 0x5f, 0x7f, 0x4b, + 0xf8, 0x25, 0x06, 0x01, 0x00, 0x64, 0x5b, 0x54, 0xc0, 0x04, 0x1f, 0xbf, 0xbd, 0xef, + 0xf7, 0xb9, 0x38, 0x04, 0xe9, 0xcc, 0x0c, 0xcd, 0x6f, 0x27, 0xbe, 0x40, 0x01, 0x6c, + 0x32, 0xd4, 0x2f, 0xe3, 0x66, 0xfa, 0xaa, 0x86, 0x87, 0xc2, 0xd1, 0x92, 0x61, 0x9f, + 0x56, 0x5b, 0x0c, 0x70, 0xea, 0x6a, 0x3f, 0x79, 0xd5, 0x3a, 0x52, 0x41, 0xe6, 0x9c, + 0x3c, 0xa6, 0x87, 0xa1, 0x12, 0xfb, 0x16, 0xc2, 0x5c, 0xc0, 0x83, 0x17, 0xdb, 0xa4, + 0x23, 0x97, 0x0c, 0x32, 0xdf, 0xb4, 0xbd, 0x69, 0x22, 0xe3, 0x36, 0xab, 0xf2, 0xfd, + 0xe2, 0xc3, 0xaa, 0x5d, 0xb2, 0x93, 0xef, 0x27, 0x47, 0x87, 0x6c, 0x8b, 0xd8, 0x6e, + 0xa1, 0x87, 0xcb, 0x60, 0x1a, 0xf7, ], ock: [ - 0x4e, 0x9d, 0x45, 0x94, 0x6b, 0x3e, 0xea, 0xe7, 0xfe, 0x30, 0x5d, 0x5b, 0x90, 0x50, - 0x36, 0x14, 0x1f, 0x9f, 0x40, 0x09, 0xa6, 0x29, 0x4b, 0x96, 0xc7, 0x22, 0xa4, 0xa0, - 0xbe, 0x68, 0x5d, 0xff, + 0xb3, 0x25, 0xeb, 0xe5, 0x7a, 0x2c, 0x40, 0xa8, 0xb2, 0x11, 0xcf, 0xdf, 0x72, 0xa1, + 0xa2, 0x44, 0xf1, 0x53, 0x42, 0x85, 0x98, 0x88, 0xa3, 0x64, 0x52, 0x3e, 0xfd, 0x2a, + 0xc6, 0x6a, 0x1a, 0xd6, ], op: [ 0x63, 0xf7, 0x12, 0x5d, 0xf4, 0x83, 0x6f, 0xd2, 0x81, 0x6b, 0x02, 0x4e, 0xe7, 0x0e, 0xfe, 0x09, 0xfb, 0x9a, 0x7b, 0x38, 0x63, 0xc6, 0xea, 0xcd, 0xf9, 0x5e, 0x03, 0x89, - 0x49, 0x50, 0x69, 0x2c, 0x56, 0x66, 0x9d, 0x64, 0x3f, 0x78, 0x0b, 0x6a, 0xd8, 0xb3, - 0xd3, 0x5a, 0xd7, 0x46, 0x8a, 0xaa, 0x73, 0x27, 0x66, 0x57, 0x5f, 0x84, 0xa9, 0x5d, - 0x20, 0xa6, 0x25, 0xff, 0x38, 0x77, 0xea, 0x3f, + 0x49, 0x50, 0x69, 0x2c, 0x5b, 0xfe, 0x46, 0x9c, 0x33, 0xe4, 0x47, 0xba, 0x45, 0x6b, + 0x8b, 0xfe, 0x9b, 0x38, 0x5b, 0x39, 0x31, 0xb4, 0xba, 0xeb, 0x8f, 0x70, 0x23, 0xfe, + 0x8e, 0x33, 0x35, 0x4f, 0xff, 0xf1, 0xbd, 0x1a, ], c_out: [ - 0xcb, 0xdf, 0x68, 0xa5, 0x7f, 0xb4, 0xa4, 0x6f, 0x34, 0x60, 0xff, 0x22, 0x7b, 0xc6, - 0x18, 0xda, 0xe1, 0x12, 0x29, 0x45, 0xb3, 0x80, 0xc7, 0xe5, 0x49, 0xcf, 0x4a, 0x6e, - 0x8b, 0xf3, 0x75, 0x49, 0xba, 0xe1, 0x89, 0x1f, 0xd8, 0xd1, 0xa4, 0x94, 0x4f, 0xdf, - 0x41, 0x0f, 0x07, 0x02, 0xed, 0xa5, 0x44, 0x2f, 0x0e, 0xa0, 0x1a, 0x5d, 0xf0, 0x12, - 0xa0, 0xae, 0x4d, 0x84, 0xed, 0x79, 0x80, 0x33, 0x28, 0xbd, 0x1f, 0xd5, 0xfa, 0xc7, - 0x19, 0x21, 0x6a, 0x77, 0x6d, 0xe6, 0x4f, 0xd1, 0x67, 0xdb, - ], + 0x55, 0xb8, 0x90, 0x7c, 0x6d, 0x45, 0x4b, 0x83, 0x63, 0x4f, 0x1b, 0x9a, 0x1a, 0xa3, + 0xc3, 0xc9, 0x8a, 0xdc, 0x77, 0xd9, 0x6c, 0x2f, 0x62, 0x49, 0xec, 0x66, 0xdb, 0xae, + 0x4d, 0x0c, 0xc9, 0x40, 0xd7, 0x26, 0xbc, 0xd1, 0xec, 0x91, 0x18, 0x9f, 0xd3, 0x04, + 0x9a, 0x33, 0xf2, 0xea, 0x7d, 0x8b, 0x74, 0xaa, 0xc1, 0x7c, 0xda, 0x38, 0x83, 0x80, + 0x2d, 0xb5, 0x96, 0x9d, 0x8d, 0x2f, 0x32, 0x25, 0x91, 0x9c, 0xe3, 0x88, 0x26, 0x41, + 0x5c, 0xc6, 0xb3, 0x38, 0x94, 0x4b, 0x48, 0x99, 0x54, 0x8b, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -306,34 +307,34 @@ pub(crate) fn test_vectors() -> Vec { 0x25, 0x7a, 0xd8, 0xb3, ], rho: [ - 0x33, 0x88, 0xda, 0x05, 0x06, 0xda, 0x9e, 0xa2, 0xd5, 0x16, 0x73, 0x9b, 0x95, 0x1c, - 0x7c, 0xc0, 0x58, 0x53, 0x36, 0xb4, 0x4d, 0xf9, 0xb3, 0xb5, 0x0e, 0x48, 0x93, 0xe4, - 0xb1, 0x84, 0x92, 0x11, + 0xc1, 0xe1, 0x59, 0x5b, 0x8d, 0xe7, 0x55, 0x97, 0x66, 0xe5, 0xa6, 0x72, 0x5f, 0x5b, + 0xe5, 0x74, 0x2f, 0x43, 0xbf, 0x40, 0x62, 0x3b, 0x71, 0x49, 0xca, 0xe2, 0x67, 0x5c, + 0x4d, 0xb2, 0xc7, 0x31, ], cmx: [ - 0x9e, 0x04, 0x32, 0xb2, 0xb3, 0x33, 0xcd, 0xe8, 0xce, 0x92, 0x1b, 0x77, 0xca, 0x7e, - 0x9e, 0x41, 0x51, 0xe3, 0x74, 0xd5, 0x16, 0xcd, 0xa1, 0x17, 0x63, 0x83, 0x6a, 0xf3, - 0xb6, 0x6f, 0x5b, 0x15, + 0x59, 0xb6, 0xf3, 0xd4, 0x03, 0x22, 0x3d, 0x6c, 0xe4, 0x3d, 0xed, 0xae, 0xe2, 0x35, + 0xfc, 0xa9, 0x5c, 0xc8, 0xb2, 0x49, 0x94, 0x1c, 0xcd, 0xb6, 0x6f, 0x3f, 0x61, 0x1c, + 0xc5, 0xe9, 0xf9, 0x0f, ], esk: [ - 0x68, 0x65, 0x87, 0xce, 0x53, 0xc3, 0x39, 0xf9, 0xce, 0xcf, 0x4d, 0x80, 0x4a, 0x17, - 0x09, 0x39, 0x2b, 0x6a, 0xb1, 0x08, 0xea, 0x2c, 0x57, 0x79, 0x92, 0x1c, 0xd5, 0xda, - 0x8a, 0x6e, 0x1a, 0x08, + 0x10, 0x87, 0x4a, 0x74, 0x22, 0x7a, 0xc7, 0x99, 0x5e, 0xdd, 0xdd, 0x73, 0x4d, 0x0e, + 0x00, 0xdc, 0xc9, 0xf4, 0x8a, 0x01, 0xdd, 0x5c, 0x4c, 0xb1, 0x22, 0xc0, 0x61, 0xe0, + 0xbd, 0xc9, 0xce, 0x14, ], ephemeral_key: [ - 0x91, 0x92, 0x3e, 0xd8, 0x2b, 0x76, 0xd7, 0x97, 0x30, 0x7c, 0xaa, 0x23, 0x02, 0xc0, - 0xcf, 0x75, 0x56, 0x12, 0x17, 0x24, 0x98, 0x67, 0x53, 0x2a, 0xe5, 0x1c, 0x2e, 0xa0, - 0x05, 0xed, 0xad, 0xb6, + 0xd2, 0x9e, 0x0d, 0x00, 0x1e, 0xe7, 0x1e, 0x05, 0x99, 0x08, 0x65, 0x04, 0xd8, 0x62, + 0xc7, 0xf5, 0x2b, 0x08, 0x60, 0x77, 0x0d, 0x8a, 0x4b, 0x42, 0xa8, 0x68, 0x11, 0xac, + 0x31, 0x69, 0x85, 0x8c, ], shared_secret: [ - 0x53, 0xd7, 0xe4, 0x84, 0x3a, 0x36, 0xd5, 0x79, 0xb5, 0xa7, 0xc1, 0x04, 0x11, 0x96, - 0xbd, 0x4c, 0x85, 0x80, 0x5c, 0xcd, 0x0a, 0x3f, 0x95, 0xbc, 0x9e, 0x71, 0x06, 0x90, - 0xd1, 0x1b, 0x7a, 0xaa, + 0x11, 0xa0, 0xac, 0x79, 0x9a, 0x29, 0xb0, 0xed, 0x19, 0x5e, 0xd8, 0x7b, 0x13, 0x83, + 0x22, 0x26, 0x3b, 0xbb, 0x9c, 0x31, 0x00, 0x8c, 0x29, 0x59, 0xaf, 0x2f, 0xc6, 0x36, + 0x68, 0x7e, 0xd9, 0xb0, ], k_enc: [ - 0xc2, 0xe3, 0x38, 0x9d, 0x6f, 0xc3, 0xcd, 0x06, 0x7f, 0x59, 0x0a, 0x93, 0x73, 0x05, - 0x04, 0xad, 0x9b, 0x63, 0xc4, 0x55, 0x45, 0x69, 0xb9, 0x62, 0x0f, 0x3e, 0xf0, 0xb0, - 0x65, 0x94, 0xde, 0xd6, + 0x4b, 0xbf, 0x80, 0xe7, 0xa1, 0x70, 0x3a, 0xc1, 0x4a, 0xd7, 0xb5, 0x44, 0x8a, 0x2e, + 0x8e, 0x79, 0x49, 0x30, 0x49, 0xd1, 0x9a, 0x6a, 0x51, 0x31, 0x67, 0xd5, 0x5b, 0xdd, + 0x58, 0x6a, 0xc0, 0xd9, ], p_enc: [ 0x02, 0x55, 0x6e, 0x5e, 0x1b, 0xf5, 0x1b, 0xc6, 0xa6, 0x11, 0x58, 0xf7, 0x40, 0x50, @@ -379,69 +380,70 @@ pub(crate) fn test_vectors() -> Vec { 0x8b, 0x1e, 0x88, 0x6f, ], c_enc: [ - 0x6d, 0x21, 0x18, 0x0a, 0xc4, 0x74, 0x94, 0x57, 0x8a, 0x90, 0x06, 0xaf, 0x5b, 0xeb, - 0x4e, 0x34, 0x55, 0x59, 0xab, 0xdb, 0x0e, 0x23, 0xed, 0x52, 0x65, 0xaf, 0x79, 0xce, - 0x0c, 0xc5, 0x96, 0x71, 0xea, 0x31, 0x7b, 0x3e, 0xb1, 0x52, 0x93, 0xd1, 0xe0, 0x4a, - 0x9a, 0xd8, 0x39, 0x69, 0xab, 0x9e, 0x17, 0x08, 0xf2, 0x28, 0x85, 0x3a, 0x28, 0x1f, - 0xcf, 0x6c, 0x97, 0x60, 0xae, 0x71, 0x96, 0x5b, 0xb1, 0xd4, 0x45, 0x2e, 0x5e, 0xd0, - 0x06, 0x00, 0xab, 0x58, 0x94, 0x27, 0x75, 0xb7, 0x4e, 0x12, 0x62, 0xb4, 0x22, 0x5d, - 0x3b, 0x61, 0x9c, 0x31, 0x65, 0x96, 0xd7, 0xcf, 0x9c, 0x93, 0xbd, 0xb5, 0x2a, 0xfa, - 0x77, 0x8a, 0xa1, 0x20, 0x8d, 0x56, 0xd0, 0x69, 0xe5, 0x6e, 0x27, 0x79, 0x61, 0x4d, - 0x56, 0xf4, 0x36, 0x10, 0x72, 0xbc, 0x15, 0x16, 0xa9, 0xb4, 0x56, 0x2a, 0x4f, 0x54, - 0x63, 0xa5, 0x13, 0xc4, 0x59, 0x42, 0x15, 0x70, 0xf3, 0x34, 0xef, 0xb6, 0xbc, 0xd2, - 0x08, 0xf8, 0xf8, 0x05, 0x0e, 0x15, 0x3d, 0x4e, 0x61, 0xf3, 0x1e, 0xdd, 0xbb, 0x5a, - 0x98, 0xf1, 0x70, 0xd3, 0xd0, 0x80, 0xe8, 0xec, 0x3f, 0x65, 0x20, 0xb6, 0xa2, 0xd6, - 0x08, 0x83, 0xa5, 0x87, 0xff, 0x0e, 0x98, 0x21, 0x1c, 0x73, 0x45, 0x16, 0xb5, 0xdc, - 0xc7, 0x5e, 0xf2, 0x3c, 0xfb, 0x9f, 0x55, 0xf1, 0xde, 0xed, 0xf1, 0x26, 0xc2, 0xce, - 0x17, 0x27, 0x3f, 0x41, 0xdb, 0xbb, 0xbd, 0x2f, 0x49, 0xe3, 0x55, 0x77, 0x6e, 0xc0, - 0x46, 0x98, 0x35, 0xf7, 0x9d, 0x94, 0x80, 0x42, 0xf8, 0x42, 0x0f, 0x11, 0xe1, 0xab, - 0xd7, 0x45, 0x06, 0xb7, 0x8b, 0x5e, 0x41, 0xcb, 0xe0, 0xc7, 0x07, 0x17, 0xf4, 0x6e, - 0x7e, 0xb9, 0xac, 0xdc, 0x35, 0x1c, 0x94, 0x98, 0x83, 0x3a, 0xfd, 0xed, 0x93, 0x06, - 0xa0, 0x43, 0x5b, 0x10, 0xb8, 0x3a, 0xe3, 0x95, 0xd5, 0x7f, 0x5b, 0x0a, 0x5d, 0x41, - 0xa9, 0x34, 0x2d, 0x02, 0xec, 0x58, 0xb6, 0xee, 0x16, 0x87, 0x77, 0x50, 0x16, 0xb8, - 0x74, 0x9b, 0x28, 0x7a, 0xbd, 0xd3, 0xed, 0x1a, 0x83, 0x5e, 0xa8, 0xf3, 0xb1, 0x4d, - 0x08, 0x18, 0xfe, 0x0d, 0x5d, 0x9a, 0x48, 0xeb, 0x02, 0x13, 0x64, 0x0e, 0xec, 0xc1, - 0x9a, 0x5d, 0x16, 0x61, 0xdb, 0x82, 0x2b, 0x77, 0x9b, 0x08, 0x0c, 0xd8, 0xba, 0x7f, - 0x3a, 0x27, 0x23, 0x21, 0xee, 0x5d, 0xa2, 0x27, 0x8c, 0x53, 0x85, 0x67, 0xd0, 0xd9, - 0xbb, 0x28, 0xce, 0x64, 0x21, 0x31, 0x15, 0x03, 0xa4, 0xa0, 0x17, 0x14, 0xcf, 0x91, - 0x01, 0x55, 0x2b, 0xa5, 0xef, 0xc8, 0x5c, 0x94, 0xd5, 0xe5, 0x09, 0x72, 0x7e, 0x5e, - 0x01, 0x1c, 0x15, 0xb1, 0xb2, 0xec, 0xdf, 0xf3, 0x99, 0xc0, 0xbe, 0x33, 0x42, 0xab, - 0x6e, 0xdd, 0xa8, 0xe3, 0xed, 0x81, 0x1a, 0x7d, 0x9c, 0x9c, 0xa4, 0xbb, 0x71, 0xa5, - 0x63, 0xe1, 0x59, 0x78, 0xbf, 0x8e, 0x64, 0x04, 0xac, 0x79, 0x6e, 0xb7, 0x81, 0xfd, - 0x2c, 0xf2, 0x19, 0x1b, 0x2f, 0x4d, 0x40, 0x76, 0xd9, 0x3c, 0xcc, 0x80, 0xf7, 0xe5, - 0x92, 0xfa, 0x66, 0x9b, 0x72, 0x26, 0x57, 0x82, 0xee, 0x8f, 0x5c, 0xe3, 0x03, 0x12, - 0xd3, 0x51, 0x2b, 0x35, 0x49, 0x0a, 0xfe, 0x00, 0x6b, 0xad, 0xb1, 0x62, 0x0d, 0x1b, - 0x0c, 0x79, 0xfb, 0xc4, 0xbe, 0xc5, 0x65, 0xd7, 0x46, 0x1d, 0x68, 0xef, 0x72, 0x27, - 0x79, 0x11, 0x77, 0x6c, 0xd5, 0xa7, 0xb5, 0xfc, 0x6f, 0xa8, 0xb3, 0xee, 0xfd, 0x7a, - 0x39, 0xe8, 0xe5, 0xb4, 0xf6, 0xa5, 0x0c, 0x7d, 0x58, 0xd9, 0xeb, 0x08, 0x38, 0x0d, - 0x32, 0x0b, 0x36, 0xea, 0x04, 0x37, 0x00, 0xac, 0xa7, 0x64, 0xb4, 0x8c, 0x3d, 0xa4, - 0x93, 0x67, 0xfa, 0x93, 0x35, 0x6a, 0xaa, 0x4f, 0x87, 0x08, 0xea, 0x6e, 0x34, 0x59, - 0x81, 0x84, 0x5b, 0xe7, 0x37, 0x6d, 0xa7, 0x98, 0x40, 0x53, 0xef, 0x7d, 0xd4, 0xb6, - 0xa7, 0x27, 0x92, 0x35, 0x6a, 0x6c, 0x34, 0x62, 0x68, 0x88, 0xcc, 0x70, 0xde, 0x49, - 0x9e, 0xf9, 0x10, 0x26, 0x95, 0xd9, 0xdb, 0x12, 0xaf, 0x29, 0x62, 0xfc, 0x75, 0xd4, - 0x36, 0x56, 0x19, 0xdb, 0x0e, 0x87, 0x6c, 0xdb, 0x82, 0x02, 0xe8, 0x16, 0xfd, 0xc2, - 0xcd, 0xf3, 0x7a, 0xd3, 0xbe, 0x3b, + 0x1b, 0x42, 0x34, 0x80, 0xbf, 0x37, 0x67, 0xf5, 0xeb, 0xfc, 0x40, 0xb8, 0xc8, 0x9c, + 0xc5, 0x34, 0xf1, 0x65, 0xc3, 0x5d, 0x19, 0xc8, 0xda, 0x6c, 0x32, 0x10, 0xe9, 0x52, + 0xca, 0xd8, 0x23, 0xa7, 0x84, 0x60, 0x21, 0xc3, 0xde, 0x4a, 0x86, 0x93, 0xb7, 0x1e, + 0x28, 0x7f, 0x46, 0x86, 0xac, 0x0a, 0xdd, 0xce, 0xd9, 0x4e, 0xba, 0x81, 0x0a, 0x99, + 0x8b, 0x82, 0x3a, 0x4a, 0xd2, 0x41, 0xaa, 0x9f, 0x4a, 0x3a, 0xe4, 0x82, 0x5d, 0xe9, + 0x95, 0xdd, 0x58, 0x73, 0x56, 0x62, 0x44, 0xbb, 0xd8, 0x75, 0xd0, 0x1b, 0xf3, 0x28, + 0xe8, 0x22, 0xca, 0xfd, 0xb8, 0x3e, 0xd7, 0x75, 0x3a, 0x88, 0x85, 0xd7, 0xae, 0xf2, + 0x45, 0x5a, 0x15, 0x2e, 0x23, 0xdf, 0xa2, 0xd6, 0x99, 0xb3, 0x5c, 0x33, 0xd3, 0x61, + 0x07, 0x2a, 0xe5, 0xc5, 0x12, 0x43, 0x4d, 0x34, 0x6f, 0x6c, 0x56, 0xfb, 0x5f, 0x11, + 0xb0, 0xb6, 0x47, 0xcb, 0xca, 0xfe, 0x02, 0xd8, 0x84, 0x55, 0xa6, 0x30, 0xa3, 0x50, + 0x86, 0x2b, 0x3c, 0xd1, 0x51, 0x3b, 0x6d, 0x6e, 0x41, 0x17, 0xc7, 0x5e, 0xc4, 0xb1, + 0x2f, 0xd7, 0x5a, 0x90, 0xf8, 0x2d, 0xce, 0xa1, 0xc7, 0x71, 0xfd, 0xda, 0x24, 0xec, + 0xf0, 0xa3, 0xe5, 0xb2, 0xe8, 0xa2, 0x24, 0x23, 0x6e, 0xf0, 0x9a, 0x93, 0xab, 0x59, + 0xe5, 0x9b, 0xdf, 0xb8, 0x72, 0x86, 0x0c, 0xc2, 0xd9, 0x11, 0x34, 0xca, 0xf2, 0x13, + 0x98, 0x48, 0xe3, 0x9a, 0xa6, 0x4b, 0xa2, 0xe6, 0xd7, 0x25, 0x20, 0x54, 0xf3, 0x7a, + 0xd5, 0x5c, 0x2c, 0xe5, 0xf8, 0x1b, 0x33, 0xcc, 0xb6, 0x8a, 0x94, 0x73, 0x71, 0x24, + 0x3a, 0x77, 0xe8, 0x43, 0x67, 0xd9, 0xd3, 0x5b, 0x11, 0x68, 0x14, 0x10, 0xea, 0x79, + 0x8b, 0x03, 0x87, 0xb8, 0xf1, 0x0b, 0x1f, 0x89, 0xc6, 0x8a, 0xd1, 0xcc, 0xa9, 0xa3, + 0xe0, 0x32, 0xf3, 0x49, 0x98, 0x79, 0xc8, 0x9a, 0xe6, 0x38, 0x2f, 0x38, 0x97, 0x22, + 0x01, 0x1f, 0x49, 0x25, 0x14, 0x3e, 0xa8, 0x50, 0x73, 0xe4, 0xff, 0x0c, 0xcf, 0x6d, + 0x77, 0x9b, 0xc3, 0xbf, 0x4c, 0x1b, 0x95, 0xfc, 0x7c, 0xf7, 0xf9, 0x91, 0xa2, 0x16, + 0x2a, 0xb9, 0x45, 0x41, 0xf3, 0x99, 0x8e, 0xf6, 0xbc, 0x3f, 0xe8, 0x02, 0x54, 0xab, + 0xa4, 0x1f, 0x15, 0x23, 0x15, 0x03, 0x45, 0x1b, 0x15, 0xe1, 0x08, 0x52, 0xf8, 0x5b, + 0xd2, 0xd1, 0x15, 0x93, 0x53, 0x14, 0xcd, 0x80, 0xc1, 0x23, 0xbe, 0x0b, 0x53, 0x0f, + 0xaa, 0xd6, 0xb5, 0x07, 0x49, 0x68, 0x22, 0x1d, 0xa0, 0x4b, 0x54, 0x6d, 0x96, 0x21, + 0x63, 0x29, 0x9d, 0x52, 0xce, 0xf4, 0x1e, 0x29, 0x6d, 0xa5, 0x9c, 0xb0, 0x76, 0xdb, + 0xe8, 0x99, 0x70, 0x4b, 0x61, 0x73, 0x0c, 0x19, 0xbd, 0x22, 0x1a, 0xd2, 0xbd, 0x29, + 0x81, 0xea, 0x95, 0x1b, 0xe0, 0x2c, 0x9f, 0x5b, 0xdf, 0x92, 0xd9, 0x87, 0x07, 0x46, + 0xb2, 0xa5, 0x8c, 0x3d, 0x18, 0xa7, 0xd3, 0xe5, 0xe2, 0xc6, 0x3a, 0xc2, 0x61, 0x58, + 0x37, 0xbe, 0x1c, 0x6f, 0xe0, 0x03, 0x65, 0x6c, 0x1b, 0x3d, 0x71, 0x50, 0x5f, 0x5e, + 0x21, 0x88, 0x10, 0x4e, 0x98, 0x91, 0x1b, 0x6a, 0x5e, 0x3f, 0x52, 0x82, 0xfa, 0xc0, + 0xc8, 0xfa, 0x1b, 0xa3, 0x6f, 0xfc, 0x07, 0xdc, 0x7a, 0x40, 0x9d, 0xf2, 0xeb, 0xa8, + 0xc7, 0x5f, 0x70, 0xbd, 0x59, 0xa6, 0xf0, 0x65, 0x1d, 0xc1, 0xb1, 0xb5, 0x96, 0xde, + 0x6a, 0xce, 0xc7, 0x78, 0xe2, 0xe3, 0x2f, 0x1e, 0xd4, 0x6d, 0xf7, 0xa9, 0xae, 0xf5, + 0x1d, 0xfe, 0x5a, 0xa5, 0x24, 0x36, 0xea, 0x07, 0xf5, 0x05, 0xd3, 0x39, 0xf2, 0x03, + 0x45, 0x86, 0x61, 0xc8, 0x3a, 0x9a, 0x5a, 0x27, 0xaa, 0x48, 0xb5, 0xec, 0x47, 0xf8, + 0xd6, 0x0d, 0x2a, 0x41, 0x00, 0x1f, 0xce, 0x30, 0xff, 0x75, 0x3a, 0x8a, 0x8c, 0xe4, + 0x92, 0xef, 0xcd, 0x1f, 0x75, 0x3b, 0x7f, 0x4a, 0xd7, 0x36, 0x62, 0x64, 0x47, 0xd1, + 0xb6, 0xf0, 0x7a, 0x61, 0x7d, 0x4b, 0xfc, 0xdb, 0x48, 0xaf, 0xef, 0x08, 0x2d, 0xae, + 0x1d, 0x76, 0x54, 0x4e, 0x8b, 0x63, 0xad, 0xcb, 0xb6, 0x0e, 0x14, 0x96, 0x69, 0x32, + 0x60, 0xc7, 0x20, 0xe6, 0x72, 0x1e, 0x00, 0x20, 0xef, 0xa3, 0xf8, 0xd8, 0x8d, 0x15, + 0xb5, 0xaa, 0x48, 0xa1, 0xb2, 0x2c, ], ock: [ - 0x91, 0x36, 0x59, 0x30, 0x9e, 0xcf, 0xcd, 0xfd, 0x7e, 0x0c, 0xef, 0x23, 0xf8, 0x80, - 0xae, 0x4c, 0xf4, 0xd8, 0xcf, 0x67, 0x78, 0xb9, 0xc4, 0xe6, 0xf4, 0xc7, 0x71, 0x7b, - 0xf5, 0xca, 0xf0, 0x9e, + 0xab, 0xd0, 0xc2, 0x46, 0x97, 0xe4, 0x5b, 0x8b, 0xc4, 0x83, 0x0f, 0xb1, 0x46, 0x53, + 0x2e, 0xa0, 0xac, 0x84, 0x55, 0x81, 0xca, 0x35, 0x39, 0xd3, 0x41, 0x24, 0x73, 0x54, + 0x09, 0xd0, 0x15, 0xac, ], op: [ 0xb4, 0xca, 0xc5, 0x6f, 0x06, 0x2b, 0xfb, 0x2e, 0x27, 0x15, 0xea, 0xf9, 0xc8, 0xfc, 0xdb, 0xc2, 0x0c, 0x86, 0x79, 0x3f, 0x23, 0x57, 0xdd, 0xd0, 0x4a, 0xad, 0x39, 0xf9, - 0x4a, 0xd7, 0xc7, 0x84, 0x68, 0x65, 0x87, 0xce, 0x53, 0xc3, 0x39, 0xf9, 0xce, 0xcf, - 0x4d, 0x80, 0x4a, 0x17, 0x09, 0x39, 0x2b, 0x6a, 0xb1, 0x08, 0xea, 0x2c, 0x57, 0x79, - 0x92, 0x1c, 0xd5, 0xda, 0x8a, 0x6e, 0x1a, 0x08, + 0x4a, 0xd7, 0xc7, 0x84, 0x10, 0x87, 0x4a, 0x74, 0x22, 0x7a, 0xc7, 0x99, 0x5e, 0xdd, + 0xdd, 0x73, 0x4d, 0x0e, 0x00, 0xdc, 0xc9, 0xf4, 0x8a, 0x01, 0xdd, 0x5c, 0x4c, 0xb1, + 0x22, 0xc0, 0x61, 0xe0, 0xbd, 0xc9, 0xce, 0x14, ], c_out: [ - 0x4d, 0xf8, 0xda, 0x22, 0xec, 0x17, 0xf4, 0x16, 0xe0, 0x59, 0x1a, 0xac, 0xc1, 0x6b, - 0x6d, 0xd2, 0xbb, 0xbf, 0x47, 0xbe, 0x04, 0x30, 0x3d, 0xc8, 0x85, 0xd3, 0x5a, 0xc3, - 0xf9, 0x92, 0x3e, 0xea, 0x41, 0xf3, 0x6b, 0x3a, 0x4a, 0x5c, 0x5e, 0x73, 0x3e, 0x32, - 0x6e, 0x96, 0xdb, 0xe5, 0x5e, 0xf9, 0xe7, 0xe8, 0x42, 0x27, 0x0c, 0xbf, 0x46, 0x7c, - 0xdc, 0x16, 0x0e, 0xbf, 0x4f, 0x10, 0x9a, 0xd6, 0x92, 0x0a, 0x6a, 0xed, 0x4a, 0x01, - 0x71, 0xd9, 0x06, 0xe3, 0xe8, 0x13, 0x32, 0xe6, 0xc5, 0x61, - ], + 0xea, 0xdf, 0x7e, 0xeb, 0x10, 0x2d, 0xb1, 0x88, 0x58, 0x54, 0xc2, 0x9e, 0xb7, 0xb0, + 0x5c, 0x7c, 0x96, 0xbb, 0xb8, 0x90, 0x00, 0x2c, 0x4e, 0xd1, 0x14, 0xed, 0x62, 0xf5, + 0xf9, 0xcc, 0xb4, 0x41, 0x6b, 0x5e, 0xdd, 0xd9, 0xad, 0xb5, 0x5c, 0xe9, 0xc7, 0xa0, + 0xd8, 0x44, 0x2b, 0xbc, 0x8a, 0xfa, 0x5c, 0x77, 0xb9, 0x90, 0xad, 0x6d, 0x46, 0x12, + 0x4d, 0xde, 0x70, 0x49, 0x48, 0x72, 0xb2, 0x20, 0x8a, 0x7c, 0x58, 0x02, 0xdf, 0xe9, + 0xbd, 0x1c, 0xa1, 0x9b, 0xef, 0x4b, 0x37, 0xc6, 0x13, 0xb2, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -515,34 +517,34 @@ pub(crate) fn test_vectors() -> Vec { 0xc5, 0xb3, 0x73, 0x3e, ], rho: [ - 0xbe, 0xf8, 0xcf, 0x16, 0x98, 0xe4, 0x78, 0x47, 0xd3, 0x8e, 0x1a, 0xaa, 0x88, 0x86, - 0x10, 0x77, 0xcd, 0xb5, 0xad, 0x4c, 0xf6, 0x6f, 0xe4, 0x2f, 0xd6, 0x52, 0x57, 0x81, - 0xb6, 0xd3, 0x4f, 0x1e, + 0xc8, 0x8d, 0x00, 0x84, 0x84, 0xc5, 0xd7, 0x98, 0x20, 0xab, 0x68, 0xc6, 0x7d, 0x08, + 0x36, 0x72, 0xb0, 0x7f, 0x72, 0x7d, 0x44, 0xd0, 0xcd, 0x14, 0x73, 0x88, 0x00, 0xf8, + 0x25, 0xb9, 0xff, 0x16, ], cmx: [ - 0xd8, 0x19, 0xa6, 0x37, 0x7a, 0xce, 0x33, 0xf9, 0x21, 0xf2, 0x29, 0xf9, 0x32, 0x86, - 0x6d, 0x9f, 0xcd, 0xb9, 0xd0, 0x42, 0x6a, 0xfa, 0xca, 0x9e, 0x60, 0x50, 0xb4, 0x7a, - 0x83, 0x19, 0xd6, 0x0d, + 0x0b, 0x74, 0x59, 0x61, 0x6f, 0xc6, 0x93, 0x95, 0xe6, 0x44, 0x36, 0xcf, 0x4a, 0xe9, + 0x44, 0x1d, 0x37, 0x4b, 0x29, 0x04, 0x9e, 0x4c, 0x86, 0x22, 0x3a, 0x03, 0x83, 0xf4, + 0xe0, 0x24, 0x69, 0x05, ], esk: [ - 0x59, 0xd1, 0x0a, 0x5b, 0x94, 0x15, 0x8a, 0x3f, 0x3a, 0x78, 0xb3, 0x5d, 0xa9, 0xc6, - 0x27, 0xbe, 0xdf, 0x7c, 0xfb, 0x84, 0x7e, 0x3e, 0x59, 0x86, 0xec, 0x8a, 0xd7, 0xf7, - 0x4c, 0xd9, 0xb2, 0x1b, + 0xc4, 0x92, 0x42, 0xce, 0xe7, 0xe0, 0x86, 0x8f, 0x2a, 0x75, 0xa1, 0xc4, 0x12, 0xbc, + 0x44, 0xd5, 0x4c, 0x97, 0x09, 0xf6, 0x59, 0xde, 0xd3, 0x26, 0x95, 0x72, 0x92, 0x93, + 0x59, 0xe0, 0x4c, 0x3a, ], ephemeral_key: [ - 0x5b, 0xcb, 0xf9, 0xf1, 0xd7, 0xdd, 0x68, 0xe7, 0xcc, 0x6d, 0x6c, 0x78, 0x49, 0x50, - 0xd1, 0xc2, 0xe0, 0xbe, 0x6a, 0x84, 0xa7, 0xa8, 0x8d, 0x6f, 0x7a, 0x20, 0x98, 0xc3, - 0xdc, 0xae, 0x3f, 0x2f, + 0x0e, 0x04, 0xd8, 0x52, 0x5d, 0xd6, 0x8f, 0x7a, 0xe8, 0x68, 0xca, 0x81, 0x1e, 0x88, + 0x33, 0xa7, 0xf4, 0x7d, 0x7a, 0xad, 0xd3, 0x76, 0x03, 0xac, 0xe6, 0x07, 0xee, 0x6c, + 0x86, 0x6b, 0xce, 0x23, ], shared_secret: [ - 0x37, 0x35, 0x1c, 0xe2, 0x57, 0xb2, 0x79, 0x4d, 0x86, 0xa5, 0x3d, 0x26, 0x8d, 0xc9, - 0x00, 0x06, 0x40, 0xc2, 0x76, 0xf3, 0xf4, 0x65, 0xe1, 0xaa, 0x70, 0xbf, 0xde, 0xf4, - 0x99, 0xa3, 0xd7, 0xaa, + 0x4a, 0x7a, 0x54, 0xac, 0x00, 0x41, 0x95, 0x98, 0xb0, 0x76, 0x01, 0x53, 0xe2, 0x6a, + 0xcc, 0xd2, 0x15, 0x05, 0x24, 0x16, 0x65, 0x17, 0x13, 0xee, 0xa1, 0x89, 0x19, 0xf3, + 0xe2, 0x62, 0xd3, 0xb6, ], k_enc: [ - 0xea, 0x22, 0x99, 0x65, 0x39, 0xd3, 0x74, 0xda, 0x6a, 0x75, 0x34, 0x39, 0x5a, 0xe9, - 0x23, 0x36, 0xfc, 0xa7, 0x85, 0x11, 0x20, 0xdd, 0x1a, 0xe4, 0x9e, 0x45, 0xb3, 0x3e, - 0x0b, 0xed, 0xe9, 0xac, + 0x30, 0x62, 0x6d, 0x92, 0xeb, 0x62, 0x0f, 0xd4, 0xa9, 0x28, 0xb4, 0x3f, 0xd5, 0x50, + 0x69, 0x74, 0x71, 0x76, 0x7d, 0xe4, 0x49, 0x6c, 0xfd, 0xad, 0xb1, 0xda, 0x18, 0xfc, + 0x0c, 0xdd, 0x5a, 0xa6, ], p_enc: [ 0x02, 0x08, 0xab, 0x2e, 0xe9, 0x9d, 0x4d, 0x9b, 0x98, 0x3d, 0xdd, 0x22, 0x47, 0xee, @@ -588,69 +590,70 @@ pub(crate) fn test_vectors() -> Vec { 0x55, 0x21, 0x93, 0xb1, ], c_enc: [ - 0x12, 0xd6, 0x64, 0xed, 0x05, 0xd6, 0x46, 0x26, 0x89, 0xd4, 0xf2, 0x4a, 0xee, 0x5a, - 0x4f, 0x0f, 0x32, 0x35, 0xff, 0x11, 0x0b, 0x2d, 0xf9, 0x9f, 0x67, 0xd8, 0xc5, 0xb3, - 0x68, 0xdd, 0x47, 0x69, 0xd8, 0x44, 0xd3, 0xdd, 0xa0, 0x3f, 0x58, 0xc5, 0x48, 0x63, - 0x62, 0xe8, 0x90, 0x81, 0xa5, 0xdf, 0xd0, 0xa6, 0x06, 0xa3, 0x91, 0x26, 0x4b, 0x56, - 0xca, 0x3a, 0xfc, 0x4f, 0xe0, 0xe4, 0xc3, 0x05, 0xf3, 0x07, 0x78, 0x09, 0x4a, 0x00, - 0xb7, 0x33, 0x4b, 0xdd, 0x82, 0x45, 0xac, 0x56, 0x0e, 0xf3, 0x29, 0xbc, 0x68, 0x97, - 0xd4, 0xd7, 0xba, 0x31, 0xac, 0x84, 0x54, 0x44, 0x1a, 0x15, 0xc8, 0xd3, 0xce, 0xcc, - 0x71, 0x32, 0xdf, 0x0d, 0x9d, 0x0e, 0xcf, 0x92, 0x84, 0x34, 0xa0, 0xd2, 0x8c, 0x1b, - 0x00, 0x48, 0x52, 0x01, 0xec, 0x33, 0xbe, 0x9a, 0x28, 0x74, 0xb4, 0x29, 0x6c, 0x04, - 0x22, 0xc7, 0xe7, 0xa0, 0xa3, 0xa2, 0x2e, 0xc7, 0xe7, 0x21, 0xa4, 0x79, 0x22, 0x8d, - 0xa2, 0x8b, 0x47, 0x37, 0xaf, 0x52, 0x06, 0xdf, 0x7d, 0x74, 0xe4, 0x84, 0xc4, 0xf7, - 0xa8, 0x56, 0xbe, 0x8c, 0xd0, 0x4b, 0x21, 0x26, 0xb5, 0x27, 0x11, 0xe7, 0xb0, 0xaf, - 0x75, 0xc7, 0x52, 0x84, 0xa1, 0x57, 0x20, 0x40, 0xe8, 0xad, 0xe5, 0x85, 0xe8, 0xa4, - 0x82, 0x80, 0x03, 0x59, 0x67, 0x46, 0xc4, 0x0c, 0x9d, 0x76, 0x0d, 0x92, 0x74, 0xb1, - 0x25, 0x42, 0x2b, 0x63, 0x48, 0x1a, 0x17, 0xff, 0xba, 0xb8, 0xc2, 0xde, 0x13, 0xb2, - 0x19, 0xf5, 0x8a, 0x35, 0x95, 0x2d, 0x88, 0x7a, 0xed, 0xe8, 0xe0, 0x2f, 0x10, 0x33, - 0x8c, 0x23, 0x98, 0x23, 0xfb, 0x43, 0x49, 0x51, 0x84, 0x47, 0x12, 0xf6, 0x8d, 0x6e, - 0x4f, 0xef, 0xae, 0x2b, 0x79, 0x5b, 0xa9, 0x78, 0xe9, 0x81, 0xc1, 0x09, 0x27, 0xab, - 0xbc, 0x16, 0x30, 0x66, 0xa0, 0xe9, 0x60, 0xb3, 0xb8, 0xa3, 0x26, 0xc0, 0x39, 0x85, - 0x81, 0x10, 0x93, 0x99, 0xf6, 0xed, 0x60, 0x44, 0x9a, 0xa8, 0x58, 0xd5, 0xdd, 0x27, - 0xdb, 0xf8, 0x89, 0x9f, 0x9c, 0x9a, 0x50, 0x20, 0x5f, 0x25, 0xd0, 0xcc, 0x50, 0xb2, - 0xde, 0xe3, 0x63, 0x54, 0xc5, 0xe4, 0x48, 0x4d, 0x36, 0xf6, 0x3c, 0x97, 0x63, 0xd8, - 0x41, 0xad, 0x5e, 0x00, 0x21, 0x63, 0x6a, 0x85, 0x7c, 0xfb, 0x79, 0xa5, 0x12, 0x3c, - 0x3d, 0xfb, 0x77, 0x3d, 0x0c, 0x1b, 0xeb, 0x9f, 0x90, 0xa9, 0x72, 0xd0, 0xfc, 0x80, - 0x5f, 0x65, 0x5d, 0x69, 0x40, 0x85, 0x23, 0xb9, 0x9b, 0x62, 0xa8, 0xfa, 0xbe, 0xf0, - 0xc0, 0x24, 0xf2, 0x1f, 0x50, 0xe4, 0xc1, 0x12, 0xe2, 0xfe, 0xdd, 0x58, 0xca, 0xe9, - 0x60, 0x9a, 0xc6, 0xf7, 0xcc, 0x79, 0x83, 0x86, 0xc9, 0xd9, 0x06, 0x42, 0x1c, 0xa5, - 0x7c, 0xf8, 0x1b, 0x09, 0x6b, 0xba, 0xda, 0x64, 0xd0, 0xee, 0x76, 0x95, 0x18, 0x9d, - 0x5f, 0xb1, 0x7a, 0xe2, 0x53, 0x1d, 0xbb, 0x2c, 0x00, 0x58, 0x5a, 0x26, 0xa6, 0x8c, - 0x27, 0xf9, 0x77, 0x77, 0x84, 0x1a, 0x3e, 0x39, 0x30, 0xc7, 0x0f, 0xc3, 0xfa, 0x8e, - 0x2b, 0x7f, 0xc2, 0x1e, 0x87, 0xcf, 0x9f, 0x63, 0xb3, 0x63, 0xb8, 0x8d, 0xaa, 0x1f, - 0xb6, 0x7b, 0xda, 0xe8, 0xe5, 0x5b, 0x68, 0x51, 0x6d, 0x19, 0xdf, 0xef, 0xec, 0x9b, - 0x3d, 0x38, 0xe6, 0xe1, 0xd0, 0xa6, 0xe4, 0x51, 0xd6, 0xd1, 0xf5, 0x2d, 0x1f, 0x96, - 0xdd, 0x0d, 0x53, 0x6d, 0x68, 0xd2, 0x69, 0x86, 0x70, 0x9f, 0x41, 0xe7, 0x60, 0x74, - 0x05, 0x5b, 0xf7, 0x52, 0xbf, 0x38, 0x86, 0x92, 0xc8, 0x2c, 0xfd, 0xa1, 0xeb, 0xb0, - 0x17, 0x8b, 0x8e, 0x0c, 0x85, 0xad, 0x7b, 0x15, 0x99, 0x14, 0x42, 0x8e, 0x30, 0x21, - 0xda, 0xe3, 0x01, 0x0d, 0x65, 0x6c, 0x10, 0x36, 0xf4, 0xa5, 0x7e, 0x7f, 0xad, 0xe0, - 0xfc, 0x32, 0x2a, 0xa6, 0xfd, 0xde, 0x71, 0x4a, 0x8c, 0x53, 0x78, 0x79, 0xe7, 0x04, - 0x41, 0x6f, 0x51, 0x04, 0xdb, 0xbc, 0x8f, 0xf2, 0x42, 0xc1, 0x6d, 0x2d, 0xf4, 0xa8, - 0x41, 0xeb, 0x6b, 0x45, 0x3a, 0x12, 0x83, 0xf6, 0x5f, 0xe1, 0x0d, 0x70, 0xc8, 0x76, - 0x41, 0x8e, 0x44, 0x4a, 0xb3, 0x1b, 0x93, 0x71, 0xa2, 0x7d, 0x36, 0xd8, 0x6e, 0x8f, - 0x1c, 0x32, 0x77, 0xca, 0xfd, 0xf8, + 0x81, 0x56, 0x2d, 0xbe, 0xf7, 0xbb, 0x35, 0x3a, 0x62, 0xe7, 0xc8, 0x1e, 0xbe, 0x68, + 0x15, 0x6c, 0xb7, 0x5c, 0x5c, 0x7e, 0x3d, 0x96, 0xbb, 0xcd, 0x7d, 0xaf, 0xf5, 0x0c, + 0xb0, 0x95, 0x7d, 0x33, 0xdd, 0x99, 0x77, 0x9f, 0x7d, 0x3d, 0x72, 0xb1, 0x8d, 0xeb, + 0x7a, 0x69, 0x75, 0x10, 0xe0, 0x13, 0x5b, 0x8d, 0xf4, 0x83, 0xa4, 0xd7, 0x1d, 0x1a, + 0xb1, 0x08, 0x09, 0x6e, 0x76, 0x08, 0x91, 0xd5, 0x31, 0x07, 0xf0, 0x3d, 0xea, 0x4a, + 0xe8, 0xe4, 0xd3, 0xfe, 0xbd, 0x98, 0x77, 0xf8, 0x57, 0x0a, 0xa3, 0x09, 0xd0, 0x97, + 0xd4, 0x23, 0xbb, 0x76, 0x3f, 0xb3, 0xe7, 0xe9, 0xbe, 0x3c, 0x8f, 0xa0, 0x34, 0xc0, + 0x1d, 0x66, 0x4f, 0x47, 0xa0, 0xe7, 0x13, 0x3c, 0xa1, 0x1a, 0x48, 0xcd, 0x0e, 0xea, + 0x46, 0x35, 0xfa, 0x77, 0x25, 0x0a, 0x17, 0xbd, 0xf7, 0xb7, 0x32, 0xc8, 0x98, 0x46, + 0x51, 0x57, 0x4f, 0xd4, 0xf9, 0x9f, 0x7a, 0xa0, 0xdb, 0x28, 0xc2, 0x97, 0x31, 0x52, + 0xbf, 0x42, 0x6e, 0xe9, 0xa4, 0xd8, 0x41, 0xa9, 0x1d, 0x5d, 0x33, 0x57, 0x18, 0xee, + 0xcb, 0xc9, 0xc8, 0xb2, 0xa2, 0x00, 0x15, 0x70, 0xfe, 0x8b, 0x77, 0x91, 0x43, 0xdf, + 0x22, 0x95, 0x98, 0xa5, 0xbe, 0x25, 0x48, 0xcf, 0x35, 0x84, 0x25, 0x18, 0xcc, 0x1d, + 0xbc, 0x78, 0xcc, 0x2f, 0x0f, 0xc8, 0xea, 0x35, 0x7c, 0xe6, 0xc1, 0x7e, 0xb9, 0x7c, + 0x61, 0x38, 0xd5, 0x3e, 0x6c, 0x8e, 0x00, 0xf0, 0x7f, 0x80, 0x01, 0x25, 0x18, 0x2b, + 0x25, 0xa5, 0xe8, 0x75, 0xc5, 0x37, 0x72, 0x09, 0x52, 0x72, 0x22, 0x37, 0x1f, 0x72, + 0xbf, 0xbd, 0x46, 0x28, 0x44, 0xab, 0x06, 0xf3, 0xb3, 0xa1, 0xeb, 0xa3, 0x44, 0x23, + 0xb6, 0x9a, 0xbf, 0x5d, 0xe6, 0x64, 0xba, 0x83, 0xcd, 0x43, 0xb6, 0xa8, 0xe9, 0xd5, + 0xb7, 0xc5, 0x2a, 0xdb, 0x86, 0x15, 0x04, 0x1b, 0x90, 0xd9, 0x08, 0x83, 0x1a, 0x6f, + 0xf9, 0x2d, 0xb4, 0x8a, 0x14, 0xac, 0x4d, 0xfa, 0x67, 0xd0, 0x2c, 0x72, 0xe0, 0xc8, + 0x63, 0x15, 0x7d, 0x98, 0xf8, 0xf5, 0x45, 0x37, 0x92, 0x97, 0x43, 0xc9, 0x69, 0xbc, + 0x91, 0xc2, 0xc1, 0x37, 0x52, 0x04, 0x98, 0x3c, 0x99, 0x99, 0x97, 0x5f, 0xfa, 0x5e, + 0xe5, 0xfe, 0x1f, 0x69, 0x71, 0x99, 0x40, 0x5f, 0x09, 0x66, 0xe3, 0x1f, 0x34, 0xe1, + 0x52, 0x38, 0x44, 0x38, 0x18, 0x44, 0x98, 0x2b, 0x2c, 0x3b, 0x49, 0xa2, 0x09, 0xff, + 0xa3, 0xce, 0xe9, 0x79, 0xa8, 0x5b, 0x19, 0xb8, 0x50, 0xf4, 0x1d, 0xcc, 0xc4, 0x63, + 0xe2, 0x2e, 0x24, 0xa3, 0x04, 0x9d, 0x37, 0xb1, 0xfb, 0x37, 0x0d, 0xeb, 0xdd, 0xf4, + 0xde, 0x05, 0x46, 0x24, 0x5e, 0x4f, 0x02, 0xa9, 0x84, 0x98, 0xaf, 0x53, 0x2e, 0x27, + 0xac, 0xae, 0x5c, 0x7e, 0xd1, 0x43, 0xe6, 0xe9, 0xcc, 0xfa, 0x74, 0x35, 0x16, 0x02, + 0x16, 0x57, 0xac, 0xb2, 0x5e, 0x44, 0x47, 0x84, 0x5c, 0x5f, 0x9c, 0x59, 0x64, 0x60, + 0x7c, 0x4a, 0x78, 0x72, 0x1d, 0x98, 0x1a, 0x7f, 0xf2, 0xfd, 0xf6, 0xc0, 0x33, 0x62, + 0x8b, 0xff, 0xd6, 0xf0, 0xb8, 0xde, 0x0c, 0xd6, 0x35, 0xec, 0x22, 0xf8, 0xb5, 0x0e, + 0xd6, 0x37, 0xfe, 0x4e, 0x00, 0xf9, 0xd3, 0xc3, 0xd4, 0xf1, 0x81, 0x0b, 0x09, 0xb7, + 0x5c, 0x96, 0xe2, 0xfc, 0xf1, 0x11, 0x85, 0x31, 0x7e, 0xdf, 0xa3, 0x9d, 0x19, 0x25, + 0xde, 0xd8, 0x14, 0xdd, 0xe0, 0xef, 0x00, 0xa3, 0xfb, 0x47, 0xaf, 0x5d, 0x81, 0x20, + 0x94, 0xaf, 0x13, 0xd0, 0x1c, 0x98, 0x56, 0x9f, 0xf7, 0x73, 0x57, 0x87, 0xfa, 0x9b, + 0xd0, 0x1f, 0xa0, 0x69, 0x28, 0x27, 0x5f, 0xdd, 0x10, 0x38, 0x96, 0x5f, 0xb0, 0x6f, + 0xb3, 0x5e, 0xdb, 0x73, 0x80, 0xdd, 0x3c, 0x42, 0x41, 0x9e, 0x0c, 0x0e, 0xde, 0x4c, + 0x48, 0x6a, 0x9d, 0xb4, 0x95, 0x38, 0x86, 0xae, 0xc6, 0xad, 0x30, 0x70, 0x28, 0xeb, + 0x26, 0xa3, 0x7e, 0xf4, 0x71, 0x56, 0x7a, 0xd4, 0xbd, 0x4e, 0xaa, 0xb7, 0xa8, 0x2c, + 0xb0, 0xd6, 0xb5, 0xf0, 0x5e, 0x89, 0x4e, 0x53, 0x25, 0x82, 0x1d, 0x92, 0xbe, 0xd2, + 0xb8, 0x6f, 0xb2, 0x43, 0x37, 0xd5, 0x79, 0x28, 0x8f, 0x6d, 0xf7, 0x34, 0x77, 0x1d, + 0x9e, 0xf8, 0x35, 0x8b, 0xa9, 0x1a, ], ock: [ - 0xca, 0x6f, 0x98, 0xe6, 0xcf, 0x9f, 0xc3, 0x6a, 0xf5, 0xf6, 0x98, 0x82, 0x74, 0x2d, - 0x06, 0xec, 0x5d, 0x29, 0xac, 0x2a, 0x02, 0x89, 0x44, 0xa2, 0x01, 0x89, 0xd5, 0x1c, - 0x8a, 0x9b, 0xdc, 0xd6, + 0xb6, 0x36, 0xc3, 0x9a, 0x6b, 0xad, 0x22, 0x63, 0xb2, 0x44, 0x1e, 0xd5, 0xbb, 0xdb, + 0x01, 0x35, 0x88, 0xfb, 0x46, 0x27, 0x01, 0xe6, 0xf8, 0x76, 0x64, 0x6c, 0x8c, 0x17, + 0xfa, 0x2e, 0xfd, 0xe8, ], op: [ 0x82, 0xfe, 0xf6, 0x43, 0xdb, 0xf4, 0x2d, 0xca, 0x51, 0x56, 0xfb, 0x51, 0xd4, 0xc4, 0xee, 0x00, 0x8a, 0x72, 0xf0, 0xdb, 0xc3, 0xf3, 0x1e, 0xfa, 0xb0, 0x75, 0xf2, 0x75, - 0x15, 0x37, 0x14, 0x0d, 0x59, 0xd1, 0x0a, 0x5b, 0x94, 0x15, 0x8a, 0x3f, 0x3a, 0x78, - 0xb3, 0x5d, 0xa9, 0xc6, 0x27, 0xbe, 0xdf, 0x7c, 0xfb, 0x84, 0x7e, 0x3e, 0x59, 0x86, - 0xec, 0x8a, 0xd7, 0xf7, 0x4c, 0xd9, 0xb2, 0x1b, + 0x15, 0x37, 0x14, 0x0d, 0xc4, 0x92, 0x42, 0xce, 0xe7, 0xe0, 0x86, 0x8f, 0x2a, 0x75, + 0xa1, 0xc4, 0x12, 0xbc, 0x44, 0xd5, 0x4c, 0x97, 0x09, 0xf6, 0x59, 0xde, 0xd3, 0x26, + 0x95, 0x72, 0x92, 0x93, 0x59, 0xe0, 0x4c, 0x3a, ], c_out: [ - 0xa9, 0x5e, 0x1a, 0x22, 0x45, 0x65, 0x29, 0x5e, 0x9b, 0x55, 0x3a, 0xdd, 0xe8, 0xb0, - 0x14, 0x47, 0x5c, 0x68, 0x7b, 0x5d, 0x13, 0x49, 0xc1, 0xdf, 0x8a, 0xd4, 0xb7, 0xcf, - 0xd3, 0xdf, 0xc1, 0x00, 0x6c, 0x7c, 0x37, 0xde, 0x67, 0x6d, 0x6f, 0xde, 0x31, 0x8e, - 0x2f, 0xdf, 0xcc, 0x2e, 0x2e, 0x23, 0x2c, 0xc5, 0xf8, 0x85, 0x28, 0x39, 0xe7, 0xef, - 0xab, 0x8b, 0x20, 0x0e, 0xbc, 0x6a, 0x4d, 0xf8, 0x2a, 0x75, 0x21, 0xce, 0x0f, 0x38, - 0x4f, 0xe2, 0x7a, 0x0d, 0xec, 0x59, 0xe9, 0xd2, 0xc0, 0xe3, - ], + 0x46, 0xba, 0x14, 0xf8, 0x3f, 0xf5, 0xab, 0x76, 0x0f, 0x14, 0x20, 0xeb, 0xde, 0xd9, + 0x86, 0xfd, 0x93, 0x78, 0x27, 0xbc, 0x05, 0x69, 0x2e, 0xca, 0xdb, 0x65, 0x2e, 0xbb, + 0xc8, 0xf6, 0xd9, 0xb5, 0x2e, 0xc3, 0x97, 0x87, 0xd8, 0xeb, 0xdd, 0x50, 0x6c, 0xa1, + 0xa8, 0x5d, 0xc3, 0xd5, 0xba, 0x4c, 0x5b, 0x41, 0x52, 0x61, 0xb0, 0x75, 0x3a, 0xc1, + 0x0e, 0x01, 0x86, 0x45, 0x32, 0xa3, 0x57, 0x2c, 0x68, 0xaf, 0xe4, 0x0a, 0xc3, 0xc0, + 0x95, 0x7b, 0x7a, 0xfc, 0x23, 0xfd, 0x5e, 0x05, 0x17, 0xaa, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -724,34 +727,34 @@ pub(crate) fn test_vectors() -> Vec { 0x32, 0xb5, 0x0e, 0x96, ], rho: [ - 0x18, 0x89, 0x8e, 0x75, 0x21, 0x7b, 0x32, 0x9b, 0x3a, 0x56, 0x7b, 0x09, 0x37, 0x89, - 0xa4, 0xd8, 0x19, 0xcd, 0xb0, 0x34, 0x88, 0xb8, 0x10, 0xda, 0x22, 0x0c, 0x3f, 0x59, - 0xba, 0x03, 0x39, 0x26, + 0xa9, 0x0a, 0x9b, 0x8a, 0xb1, 0x35, 0x9d, 0xc9, 0x6b, 0xda, 0xe9, 0x0e, 0x52, 0x74, + 0x78, 0x8c, 0xb0, 0xc4, 0x26, 0xef, 0xf2, 0x60, 0x43, 0x61, 0x85, 0x39, 0x8b, 0xff, + 0xf5, 0x0e, 0x92, 0x37, ], cmx: [ - 0x23, 0xad, 0xc3, 0xbf, 0x35, 0x0e, 0xb0, 0x84, 0xbd, 0x28, 0xbc, 0x2d, 0xcf, 0xb7, - 0x98, 0x3f, 0xf6, 0xb3, 0xb6, 0xf2, 0xeb, 0x2d, 0x6f, 0x12, 0x4f, 0xfc, 0x46, 0x85, - 0xab, 0xe8, 0xde, 0x3a, + 0x05, 0xb5, 0xe3, 0x20, 0x76, 0xda, 0xe0, 0x94, 0x83, 0x35, 0xac, 0x3d, 0x65, 0x1c, + 0x6d, 0xbe, 0xa6, 0x4c, 0xe9, 0x11, 0x42, 0x3e, 0x2f, 0x2c, 0x7c, 0x1b, 0xdf, 0xa6, + 0xb1, 0x41, 0x41, 0x30, ], esk: [ - 0x34, 0x39, 0x22, 0x52, 0xc9, 0xcc, 0x9f, 0x45, 0x4b, 0x54, 0x2c, 0xf1, 0xb8, 0x88, - 0xb3, 0xab, 0x02, 0xe6, 0x05, 0xa8, 0xda, 0x26, 0x10, 0x7d, 0x98, 0x02, 0xf1, 0x53, - 0x6a, 0x9e, 0x9f, 0x2b, + 0x8b, 0x14, 0x62, 0x2d, 0x2f, 0x91, 0xf1, 0x69, 0x8d, 0x53, 0xfe, 0x47, 0x9a, 0x1e, + 0x5c, 0x00, 0x64, 0x98, 0xb9, 0x8b, 0x85, 0xb4, 0x50, 0xbd, 0x92, 0x3a, 0x5d, 0x00, + 0xcb, 0x52, 0xa6, 0x13, ], ephemeral_key: [ - 0x91, 0xaf, 0x13, 0x8e, 0xd9, 0x95, 0x44, 0x66, 0x95, 0x16, 0x1b, 0x14, 0x2d, 0xc2, - 0xde, 0x59, 0xac, 0x23, 0x05, 0xec, 0xbe, 0xc6, 0x29, 0x33, 0xf5, 0x2f, 0x2a, 0xa1, - 0xf9, 0xb2, 0x71, 0x86, + 0x86, 0xee, 0x66, 0xa6, 0xc7, 0xd9, 0xb5, 0xc4, 0xf0, 0xe2, 0xd2, 0xa0, 0xe1, 0x56, + 0x1e, 0x2a, 0xfa, 0x55, 0x41, 0xa7, 0x24, 0xee, 0x02, 0x7f, 0xc7, 0x0b, 0xb7, 0xe8, + 0x0a, 0x2c, 0x60, 0x98, ], shared_secret: [ - 0xe1, 0xd3, 0xaf, 0x73, 0x6a, 0xb9, 0xc6, 0x11, 0x6f, 0x46, 0x8f, 0x91, 0x66, 0x80, - 0x63, 0x20, 0x35, 0x0f, 0x7e, 0x73, 0x51, 0x3b, 0xa6, 0x05, 0x50, 0xeb, 0x2d, 0xf0, - 0x1f, 0xf7, 0x83, 0x2d, + 0x88, 0xd1, 0x38, 0x2c, 0x14, 0x42, 0x02, 0xd0, 0xd7, 0x55, 0x75, 0x87, 0xb0, 0xd5, + 0xd0, 0x21, 0x69, 0x29, 0x2a, 0x25, 0x05, 0x43, 0xcb, 0x0a, 0x06, 0xc3, 0x4f, 0x45, + 0x2f, 0x7b, 0x3b, 0x36, ], k_enc: [ - 0xb4, 0x3e, 0x43, 0x3e, 0x16, 0x45, 0xeb, 0x51, 0x5e, 0x4a, 0x4c, 0x7d, 0x10, 0xc9, - 0x3d, 0x08, 0xf2, 0xf1, 0xc3, 0x30, 0x95, 0xbf, 0x8c, 0x80, 0x0a, 0x04, 0x17, 0x62, - 0xab, 0x5c, 0xf8, 0x2c, + 0xe3, 0x73, 0xd8, 0x6e, 0xc9, 0xdd, 0xdd, 0x64, 0x5d, 0x9a, 0x6d, 0x06, 0xef, 0xce, + 0x22, 0xb8, 0x96, 0x42, 0x1d, 0x57, 0xa4, 0x4d, 0x37, 0xa6, 0x50, 0x4a, 0x5d, 0x19, + 0xdf, 0x21, 0x73, 0x73, ], p_enc: [ 0x02, 0xaa, 0x14, 0x92, 0x9c, 0x57, 0x89, 0x85, 0x85, 0xce, 0x66, 0x5a, 0xfa, 0x3f, @@ -797,69 +800,70 @@ pub(crate) fn test_vectors() -> Vec { 0x72, 0x65, 0x57, 0x53, ], c_enc: [ - 0x27, 0x62, 0x0d, 0xf5, 0xdb, 0x17, 0x76, 0x6e, 0xbd, 0x9a, 0x99, 0xd6, 0x9a, 0x9a, - 0x49, 0x38, 0x73, 0x21, 0xf0, 0xc9, 0x47, 0x25, 0x23, 0x57, 0xb5, 0xb7, 0x48, 0x49, - 0x38, 0xe3, 0xf5, 0xff, 0x9f, 0x32, 0x0e, 0x80, 0x6c, 0x4b, 0x54, 0xc3, 0x6e, 0x41, - 0x2e, 0x8a, 0x6e, 0xad, 0xe3, 0x5b, 0x83, 0x01, 0xf7, 0x34, 0xf3, 0x71, 0x2e, 0x6a, - 0xac, 0xe6, 0x99, 0xf5, 0x9e, 0x11, 0x2a, 0x7b, 0xf5, 0x44, 0x59, 0xdc, 0x5d, 0x9f, - 0x7b, 0xbf, 0x3b, 0x9f, 0x74, 0x6c, 0x45, 0xbb, 0xed, 0x69, 0xa4, 0x25, 0x1b, 0x29, - 0xf3, 0xd2, 0x15, 0xc2, 0x9f, 0x76, 0x1c, 0x7d, 0x05, 0x88, 0x19, 0xf0, 0xdd, 0x4e, - 0x70, 0x71, 0xb0, 0x77, 0xcb, 0x00, 0xcb, 0x93, 0x62, 0xa4, 0x98, 0x16, 0x88, 0x0d, - 0x49, 0xb7, 0x11, 0xf9, 0x20, 0x65, 0xf1, 0x53, 0x2e, 0x58, 0x18, 0x0b, 0xbd, 0xb4, - 0x91, 0xdb, 0xbb, 0x96, 0x8a, 0x09, 0xb5, 0x63, 0xce, 0x1d, 0x29, 0x87, 0x6f, 0xd0, - 0x52, 0x6d, 0x65, 0xda, 0x67, 0x27, 0xad, 0x40, 0xf9, 0x64, 0x02, 0xf9, 0x9a, 0xa5, - 0xac, 0x06, 0x42, 0x51, 0xc4, 0x65, 0xe3, 0xc7, 0xdb, 0x1f, 0xfe, 0xef, 0xac, 0xd7, - 0xf5, 0x1b, 0xa4, 0xf1, 0x9c, 0x6c, 0x17, 0x87, 0xa0, 0xff, 0xb4, 0x9d, 0xbb, 0x7b, - 0x0a, 0x2b, 0x15, 0x64, 0x03, 0xd6, 0x6c, 0x22, 0x13, 0xe5, 0x1d, 0x58, 0xea, 0xef, - 0xe8, 0x6d, 0x5d, 0xef, 0x0d, 0x24, 0xb7, 0xf2, 0xf8, 0xc1, 0x10, 0x32, 0x9a, 0x3a, - 0x73, 0xcb, 0x33, 0x50, 0x14, 0x0e, 0x6b, 0xf7, 0x2c, 0xb6, 0xaa, 0x22, 0x2d, 0xef, - 0x5a, 0x47, 0xe2, 0x1a, 0xf0, 0xb9, 0xae, 0xeb, 0x74, 0x8c, 0x01, 0xc6, 0x7a, 0xb6, - 0xc9, 0xfd, 0x6e, 0x53, 0x6a, 0x0d, 0x92, 0x76, 0x61, 0x51, 0xb1, 0xac, 0x7c, 0xc9, - 0x85, 0x5c, 0xa9, 0x8d, 0xea, 0x74, 0x85, 0x14, 0xef, 0xee, 0x89, 0xe8, 0x9a, 0x01, - 0x68, 0xf5, 0xdd, 0xf4, 0xac, 0x2b, 0x7c, 0xe1, 0xc9, 0xc2, 0x92, 0xfb, 0xef, 0x2f, - 0x45, 0x51, 0xa8, 0x88, 0xc3, 0x34, 0x5c, 0x65, 0x92, 0x30, 0x39, 0xfc, 0x21, 0xf7, - 0x31, 0x55, 0x9b, 0xd9, 0x24, 0xbc, 0x2c, 0x15, 0x5b, 0xc0, 0xbe, 0x80, 0x38, 0x4a, - 0x9e, 0x49, 0xbd, 0xa6, 0x9a, 0x70, 0x6b, 0x1a, 0xd6, 0xa2, 0x62, 0xab, 0xc6, 0x26, - 0x50, 0x77, 0x2f, 0xd7, 0xea, 0xbc, 0x3f, 0x75, 0xa9, 0xac, 0xca, 0xa2, 0x8b, 0xcd, - 0xea, 0x65, 0xf9, 0x4e, 0x16, 0xcc, 0x3d, 0x05, 0x38, 0xe5, 0x49, 0x86, 0x0a, 0x60, - 0x12, 0x5b, 0xb4, 0xbc, 0x0c, 0x23, 0xe3, 0x22, 0x27, 0x68, 0x2c, 0x09, 0xb5, 0xaa, - 0x30, 0x4a, 0x16, 0x09, 0x2a, 0xd4, 0xa3, 0xe2, 0xf6, 0x28, 0x3c, 0x38, 0x51, 0x80, - 0x6e, 0x72, 0x17, 0x3f, 0x7d, 0x32, 0x97, 0xed, 0x92, 0xe5, 0x32, 0x40, 0x39, 0xa7, - 0x31, 0x4f, 0x5f, 0xb7, 0x38, 0x6e, 0x09, 0x94, 0xf5, 0x2f, 0x8c, 0xcc, 0xf1, 0x87, - 0xd6, 0x20, 0x41, 0x0c, 0xce, 0x9d, 0x0b, 0x91, 0x93, 0xac, 0xec, 0x6d, 0x4c, 0x9b, - 0xd3, 0x4e, 0x08, 0x80, 0x58, 0x0a, 0xbe, 0xae, 0xd9, 0x7c, 0xb7, 0x80, 0x0f, 0x6a, - 0xbc, 0x67, 0xc2, 0x5c, 0x49, 0x19, 0x2e, 0x37, 0xdc, 0xf3, 0x3d, 0x1a, 0x59, 0x16, - 0x47, 0x5a, 0xe9, 0x99, 0x90, 0xd8, 0x29, 0xc1, 0xd5, 0x9e, 0x69, 0x2f, 0x47, 0x36, - 0x93, 0xbc, 0xe3, 0x58, 0x5a, 0xec, 0xd3, 0xc1, 0x3b, 0xae, 0x15, 0xcb, 0xef, 0xf2, - 0x98, 0x52, 0x2a, 0xab, 0xf4, 0x6b, 0xea, 0x3a, 0xbf, 0x63, 0x30, 0xa5, 0x6e, 0x37, - 0x24, 0x51, 0x81, 0x32, 0xce, 0x94, 0x39, 0x41, 0x6a, 0x28, 0xe9, 0x52, 0x0d, 0xdf, - 0x64, 0x17, 0x00, 0xb4, 0x6f, 0x37, 0x49, 0x50, 0xf3, 0x27, 0xaf, 0x3d, 0x0b, 0x3d, - 0x3b, 0x3f, 0x61, 0xa8, 0x84, 0xcf, 0x4f, 0x82, 0x02, 0x56, 0xfb, 0x91, 0x65, 0xdc, - 0xa0, 0xe4, 0x32, 0x60, 0xfc, 0xb5, 0x63, 0xef, 0x1a, 0xb4, 0xe7, 0x12, 0xef, 0x07, - 0x23, 0xd6, 0x75, 0x90, 0xa4, 0xff, 0xc3, 0x66, 0xc4, 0xa7, 0x92, 0x50, 0x29, 0x93, - 0x1b, 0xf0, 0x87, 0x3d, 0xac, 0xaa, 0xe9, 0x38, 0x5d, 0x9a, 0xd9, 0x1a, 0xed, 0x75, - 0x93, 0x9d, 0x8b, 0xd1, 0xaf, 0x5d, + 0xe7, 0x67, 0x81, 0xae, 0x63, 0x84, 0x1f, 0xff, 0xea, 0x30, 0x21, 0x96, 0x15, 0x94, + 0xc2, 0x2a, 0x87, 0x20, 0xc7, 0xd8, 0xaa, 0x80, 0x8b, 0xc8, 0x6e, 0x71, 0xa3, 0x6a, + 0xd7, 0xf8, 0x6f, 0xf8, 0x7c, 0x07, 0xd3, 0xc6, 0x50, 0xa0, 0x8e, 0x23, 0xe9, 0xb5, + 0x4f, 0x00, 0xb4, 0x0b, 0xa0, 0x15, 0x91, 0x69, 0xdf, 0xca, 0x34, 0xc1, 0x40, 0xce, + 0x93, 0x40, 0x19, 0xb2, 0xea, 0xa8, 0xea, 0x84, 0x35, 0x80, 0xb3, 0x5f, 0x14, 0xea, + 0x51, 0x92, 0xde, 0x8a, 0x12, 0xf9, 0xab, 0xc9, 0x06, 0x10, 0x15, 0xe1, 0x47, 0x9e, + 0xf9, 0x8d, 0x19, 0xa5, 0x34, 0xe9, 0xe4, 0x61, 0x64, 0xc3, 0xca, 0xc4, 0xeb, 0x54, + 0x26, 0x4c, 0xed, 0xcd, 0x83, 0xaf, 0xc2, 0xac, 0x2e, 0x08, 0x7e, 0x39, 0xdf, 0xba, + 0xe7, 0x6b, 0xd5, 0x50, 0xcc, 0x64, 0xa4, 0x04, 0xd2, 0x0c, 0x22, 0xca, 0x00, 0x3b, + 0xf7, 0x5b, 0x12, 0xfb, 0xb8, 0xc7, 0x15, 0x13, 0x72, 0x70, 0x0b, 0x43, 0x9b, 0x3e, + 0x06, 0x57, 0xec, 0xc3, 0x07, 0x70, 0x8f, 0xc3, 0x74, 0x94, 0xbd, 0x06, 0x39, 0xe8, + 0xe1, 0xea, 0xea, 0x37, 0x8f, 0x27, 0xa1, 0x35, 0x74, 0xb7, 0x1f, 0xa4, 0x88, 0x3b, + 0x80, 0x71, 0x2c, 0x7b, 0xeb, 0x5c, 0x30, 0x5f, 0x8d, 0x67, 0xe9, 0x19, 0x97, 0xf8, + 0x03, 0x19, 0xdd, 0xb1, 0x15, 0xb9, 0x51, 0x23, 0x89, 0x7a, 0xae, 0x5f, 0x2d, 0x14, + 0xff, 0xcf, 0xac, 0x7f, 0x65, 0x49, 0xca, 0x54, 0x8f, 0x6e, 0xab, 0xdf, 0x74, 0x81, + 0x70, 0x27, 0xd4, 0x2d, 0x92, 0xd5, 0xcd, 0xf8, 0x8e, 0xd8, 0xd5, 0x11, 0xd1, 0xb5, + 0xc4, 0x32, 0x2f, 0x77, 0x79, 0x74, 0x88, 0x6c, 0x0e, 0xd0, 0x13, 0x99, 0x18, 0x0a, + 0xfa, 0x59, 0x7d, 0xd2, 0xb7, 0x7c, 0x58, 0xb2, 0x7c, 0x8a, 0x61, 0x20, 0x69, 0xe3, + 0x86, 0xad, 0x63, 0x4c, 0xb0, 0x17, 0xa8, 0xe9, 0xf4, 0x8e, 0x37, 0xc4, 0x3e, 0xe8, + 0x73, 0x3a, 0x0a, 0xcb, 0x69, 0xf8, 0xed, 0x9f, 0x6f, 0x30, 0x5f, 0x3b, 0xd1, 0xe9, + 0x82, 0xb9, 0x4b, 0x1e, 0x51, 0xf4, 0xba, 0x98, 0x5b, 0x20, 0xec, 0x97, 0x4a, 0xc9, + 0xa7, 0x93, 0xaa, 0x26, 0x4d, 0x61, 0x5b, 0x9d, 0xea, 0x48, 0x59, 0xa4, 0xd4, 0xca, + 0xa7, 0x0d, 0x7a, 0x6b, 0x65, 0x30, 0x76, 0x85, 0xab, 0x53, 0x4e, 0x54, 0x55, 0x63, + 0x1f, 0x6d, 0x68, 0xa4, 0x51, 0xd8, 0xaf, 0x2d, 0x41, 0x82, 0x52, 0x80, 0x0f, 0x68, + 0x42, 0x31, 0xaf, 0xc2, 0x6d, 0x1f, 0xef, 0xc4, 0x03, 0xd7, 0x5f, 0x2e, 0x12, 0x0f, + 0x5b, 0xe2, 0xb6, 0x74, 0x48, 0x60, 0x09, 0x26, 0x7c, 0xbc, 0x0c, 0xb0, 0x01, 0xbb, + 0x47, 0xf0, 0xff, 0x46, 0x97, 0xea, 0xf5, 0x3d, 0xc9, 0x9c, 0x10, 0x77, 0x3a, 0x38, + 0xcd, 0x06, 0xb4, 0x8b, 0xa3, 0x91, 0x19, 0xdb, 0x49, 0x84, 0xd0, 0x9a, 0x5b, 0xde, + 0x13, 0x89, 0x0e, 0xa0, 0x61, 0x3d, 0x0c, 0xe0, 0x04, 0x3e, 0xae, 0x9a, 0x20, 0x89, + 0x14, 0x1f, 0xd9, 0x46, 0x59, 0x13, 0xc1, 0xcc, 0x33, 0x27, 0xa5, 0x59, 0x42, 0xb9, + 0xfd, 0x8f, 0xb8, 0x1c, 0x84, 0x7d, 0x8f, 0xdd, 0xf8, 0xbd, 0xba, 0xcf, 0xa0, 0xfb, + 0x05, 0x52, 0xc1, 0xfe, 0x4c, 0xc4, 0xc0, 0x7f, 0x4d, 0xcf, 0x15, 0x1c, 0x5e, 0x74, + 0xe8, 0xd6, 0x9b, 0x2b, 0x8b, 0xf7, 0xfd, 0x95, 0xec, 0xeb, 0x65, 0x5e, 0x00, 0x53, + 0x58, 0x16, 0xd3, 0x8b, 0x4a, 0x28, 0xd4, 0xa9, 0xae, 0xeb, 0xb6, 0x9a, 0xb4, 0xdd, + 0x12, 0xbf, 0x13, 0xfd, 0x5a, 0x45, 0x9b, 0x6b, 0xb6, 0x83, 0xff, 0xd9, 0xdd, 0x7b, + 0x0d, 0x0c, 0xe7, 0x29, 0x67, 0x75, 0x80, 0x8a, 0x84, 0x3f, 0x3b, 0x8c, 0xc7, 0x89, + 0xfd, 0x5f, 0x43, 0xe0, 0x84, 0xd8, 0x7d, 0x6a, 0xda, 0x8d, 0x1f, 0x28, 0xc2, 0x64, + 0xe6, 0x44, 0xe9, 0xad, 0x96, 0x5c, 0x28, 0x08, 0x8a, 0x52, 0xe4, 0xb3, 0x56, 0x42, + 0xf9, 0xb5, 0xe0, 0x66, 0x49, 0x90, 0x96, 0x3b, 0xc2, 0x3b, 0x9b, 0xb4, 0x8f, 0x46, + 0x74, 0x73, 0x53, 0x58, 0x0e, 0xcc, 0x45, 0x20, 0xcf, 0xf1, 0xfa, 0x7f, 0x8f, 0xbc, + 0x03, 0x0e, 0x64, 0x7d, 0xf1, 0x44, 0xee, 0x6c, 0xa5, 0xb3, 0x16, 0xb3, 0xaf, 0x90, + 0x48, 0x9a, 0x80, 0x9d, 0x9c, 0x9f, ], ock: [ - 0x2a, 0xec, 0x11, 0xd4, 0xae, 0x79, 0x84, 0xe1, 0x69, 0xd1, 0xdf, 0xf1, 0xff, 0x0f, - 0x9a, 0xf5, 0x19, 0x96, 0x34, 0x51, 0xa4, 0x1c, 0x9f, 0x5a, 0xdc, 0x58, 0xe4, 0xf9, - 0x0a, 0xf3, 0x8d, 0x47, + 0x85, 0x6e, 0x1a, 0x97, 0x09, 0xb0, 0xc4, 0x16, 0x93, 0x3f, 0x59, 0x70, 0x71, 0x5c, + 0x56, 0xe2, 0xe0, 0x5c, 0x2e, 0xa9, 0x7d, 0x81, 0x51, 0x25, 0x70, 0x14, 0x79, 0xc3, + 0x3a, 0x5d, 0x91, 0xcb, ], op: [ 0x78, 0xa4, 0xe3, 0x39, 0x88, 0xd7, 0x1d, 0x71, 0x8e, 0x59, 0x55, 0x55, 0x28, 0x4c, 0x24, 0x9a, 0x62, 0xb7, 0x12, 0x88, 0x06, 0xa5, 0x4c, 0x3b, 0x36, 0xa3, 0xaa, 0x57, - 0x14, 0x93, 0x16, 0x36, 0x34, 0x39, 0x22, 0x52, 0xc9, 0xcc, 0x9f, 0x45, 0x4b, 0x54, - 0x2c, 0xf1, 0xb8, 0x88, 0xb3, 0xab, 0x02, 0xe6, 0x05, 0xa8, 0xda, 0x26, 0x10, 0x7d, - 0x98, 0x02, 0xf1, 0x53, 0x6a, 0x9e, 0x9f, 0x2b, + 0x14, 0x93, 0x16, 0x36, 0x8b, 0x14, 0x62, 0x2d, 0x2f, 0x91, 0xf1, 0x69, 0x8d, 0x53, + 0xfe, 0x47, 0x9a, 0x1e, 0x5c, 0x00, 0x64, 0x98, 0xb9, 0x8b, 0x85, 0xb4, 0x50, 0xbd, + 0x92, 0x3a, 0x5d, 0x00, 0xcb, 0x52, 0xa6, 0x13, ], c_out: [ - 0xe6, 0xeb, 0x22, 0x47, 0xc9, 0x33, 0xe2, 0x4c, 0x9d, 0xf1, 0x28, 0xb1, 0xe0, 0x4e, - 0x8b, 0xc0, 0x5c, 0x65, 0xeb, 0x31, 0x97, 0xdf, 0x9b, 0xa8, 0x70, 0xd8, 0xa0, 0xa1, - 0x8d, 0x9c, 0x24, 0xb7, 0xc9, 0x78, 0xc3, 0x4d, 0x3c, 0x7b, 0xbd, 0x21, 0xe8, 0x7b, - 0x22, 0x39, 0x21, 0x87, 0x54, 0xd9, 0x67, 0x3a, 0x56, 0xa2, 0x73, 0x58, 0x0f, 0x6b, - 0x41, 0xc6, 0x91, 0xe5, 0xfd, 0x30, 0x9c, 0xd5, 0xd1, 0xd2, 0x6d, 0x57, 0x63, 0xa9, - 0xe8, 0xd2, 0x71, 0xc9, 0x77, 0x05, 0x0e, 0x05, 0xdc, 0x96, - ], + 0x72, 0x36, 0xea, 0xb9, 0xf0, 0x12, 0x98, 0xc8, 0x4f, 0x38, 0x28, 0xf6, 0xac, 0x15, + 0x42, 0x76, 0xb5, 0xb7, 0x64, 0x62, 0xf5, 0x74, 0x2d, 0x69, 0xdc, 0x47, 0x7a, 0x10, + 0x5d, 0xc2, 0x71, 0x1b, 0x12, 0xe9, 0xb5, 0x82, 0x8c, 0x01, 0x76, 0xfe, 0xf4, 0x4a, + 0x54, 0x0f, 0x60, 0x95, 0x8e, 0x5a, 0x3e, 0xd6, 0xa2, 0xcc, 0x5e, 0xdd, 0xe9, 0x13, + 0xd1, 0x4c, 0xf8, 0xe8, 0xe2, 0x8e, 0xa2, 0x5c, 0x18, 0x62, 0x7a, 0x84, 0xa2, 0xbe, + 0x96, 0x1f, 0x44, 0x72, 0x67, 0x67, 0xe9, 0xf8, 0x43, 0x1b, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -933,34 +937,34 @@ pub(crate) fn test_vectors() -> Vec { 0xd2, 0x50, 0x21, 0x17, ], rho: [ - 0x23, 0x39, 0xa8, 0x95, 0x29, 0xcf, 0x35, 0x7b, 0x06, 0x7d, 0xd2, 0x8b, 0xe4, 0x06, - 0x6e, 0x16, 0x23, 0x6d, 0xc5, 0xd7, 0x87, 0x06, 0x14, 0x9a, 0x72, 0x8c, 0x3e, 0x3d, - 0x9d, 0xc1, 0x08, 0x1c, + 0x8d, 0x67, 0xe3, 0xba, 0x4d, 0xbc, 0x9d, 0xa5, 0xe8, 0x38, 0x23, 0xa1, 0x23, 0x11, + 0x63, 0x96, 0x51, 0xa4, 0xff, 0xa9, 0x5f, 0x27, 0xc1, 0x83, 0x0d, 0x91, 0xd8, 0xb7, + 0x3c, 0xfb, 0xf1, 0x31, ], cmx: [ - 0xe3, 0x04, 0xcf, 0x08, 0xc7, 0x86, 0xaf, 0xcb, 0x1d, 0x65, 0x2f, 0x7a, 0x94, 0x17, - 0x29, 0x32, 0x01, 0x51, 0x71, 0x37, 0x93, 0x82, 0x89, 0x42, 0xcb, 0x88, 0xd0, 0x1f, - 0x68, 0x60, 0x4e, 0x1f, + 0xea, 0x7c, 0x13, 0xf7, 0xe1, 0x20, 0x5e, 0x78, 0xc8, 0xce, 0x4e, 0xe4, 0xfd, 0xcd, + 0xb7, 0xee, 0x76, 0x92, 0x8d, 0xdf, 0x6d, 0xbe, 0x1b, 0x2d, 0x6f, 0x69, 0x81, 0xb7, + 0xc9, 0x65, 0x79, 0x10, ], esk: [ - 0x0f, 0xba, 0x68, 0x76, 0xb3, 0x76, 0x5d, 0xff, 0x4f, 0x4c, 0x40, 0xaf, 0x89, 0x3e, - 0x4b, 0xd1, 0x34, 0x3a, 0x53, 0x4c, 0xdf, 0x50, 0x20, 0x15, 0x6b, 0x5e, 0xd1, 0xf6, - 0xbf, 0x62, 0xbe, 0x3c, + 0x85, 0x7b, 0xa2, 0x47, 0xd4, 0x68, 0xe1, 0x8d, 0xfe, 0x96, 0x73, 0xe9, 0x05, 0x99, + 0x23, 0xc2, 0x2e, 0x9b, 0x70, 0x0d, 0x56, 0x3d, 0xf8, 0xa9, 0x89, 0xcc, 0x63, 0x00, + 0x06, 0x15, 0xb2, 0x0d, ], ephemeral_key: [ - 0xdf, 0xe0, 0xf0, 0x0e, 0xb2, 0xb2, 0xf7, 0x08, 0x04, 0x19, 0x1b, 0x5b, 0x2d, 0xdf, - 0x57, 0x8f, 0x6a, 0xda, 0x21, 0x1b, 0x8b, 0x41, 0x7d, 0x95, 0xd2, 0xb7, 0x34, 0xff, - 0xa2, 0x2d, 0x81, 0x30, + 0x89, 0xfd, 0x2c, 0xf3, 0x79, 0x56, 0xba, 0xaf, 0x11, 0x27, 0xbb, 0x0e, 0x33, 0x40, + 0x01, 0x09, 0xdb, 0x03, 0x50, 0xf4, 0xab, 0xb7, 0xd6, 0xd8, 0x1f, 0xa5, 0x84, 0x8e, + 0x1b, 0xb1, 0x69, 0x26, ], shared_secret: [ - 0x0e, 0xc6, 0x82, 0xc8, 0xdc, 0x66, 0x41, 0x41, 0x02, 0x4f, 0x92, 0x9d, 0x1a, 0xe5, - 0xd3, 0x9c, 0x39, 0x4d, 0x05, 0xa2, 0x4d, 0xad, 0x0e, 0x4a, 0x6f, 0x94, 0x98, 0xed, - 0x5f, 0x87, 0xd4, 0x88, + 0xdb, 0xa6, 0x37, 0x94, 0xb6, 0x7c, 0x49, 0x6d, 0x01, 0x1c, 0xfb, 0x6b, 0xba, 0x29, + 0x7c, 0xa5, 0x7d, 0x18, 0xc7, 0xa9, 0xad, 0xdf, 0xfb, 0xc8, 0x37, 0x17, 0x6a, 0xcf, + 0x3a, 0x30, 0x1e, 0x23, ], k_enc: [ - 0xb1, 0x24, 0x5f, 0xb6, 0x37, 0x47, 0xc0, 0x13, 0x39, 0xcd, 0xe8, 0xf9, 0x35, 0x98, - 0xdf, 0xb2, 0xd3, 0x99, 0xec, 0x5e, 0x03, 0xbe, 0xa1, 0x3f, 0x3d, 0xbf, 0x01, 0xca, - 0xdb, 0x93, 0xc9, 0xba, + 0x80, 0xe7, 0x52, 0x2c, 0xb0, 0x32, 0x51, 0xc8, 0x55, 0x34, 0x1f, 0x06, 0xf9, 0x41, + 0x33, 0x41, 0xe1, 0x6e, 0x83, 0xb4, 0x89, 0xe1, 0x5a, 0x0a, 0x00, 0x65, 0xc3, 0x3b, + 0xf3, 0x81, 0x58, 0xc4, ], p_enc: [ 0x02, 0xe0, 0x66, 0xb5, 0xe7, 0x96, 0x86, 0xe9, 0xf3, 0x6e, 0xce, 0xc7, 0x7e, 0x65, @@ -1006,69 +1010,70 @@ pub(crate) fn test_vectors() -> Vec { 0xd7, 0x6b, 0xa4, 0x80, ], c_enc: [ - 0x31, 0xec, 0x78, 0xd4, 0x02, 0x14, 0xc1, 0xbc, 0x7b, 0x25, 0x94, 0x7b, 0x42, 0xf3, - 0x54, 0x34, 0x60, 0x72, 0x90, 0x27, 0x7c, 0x44, 0xc4, 0x89, 0xe9, 0x38, 0x72, 0x2f, - 0x7c, 0x12, 0xff, 0x55, 0xc4, 0xf1, 0xdf, 0xbe, 0x0f, 0x1a, 0x65, 0xb1, 0x5c, 0x0c, - 0xc4, 0x7a, 0x46, 0xc9, 0xbb, 0x33, 0x5b, 0xd1, 0xa3, 0xe7, 0xe6, 0x62, 0xee, 0x85, - 0x84, 0x57, 0x6b, 0x6f, 0x42, 0x81, 0x95, 0xc9, 0x8c, 0x72, 0xfb, 0x99, 0x75, 0xc7, - 0x17, 0x9c, 0x4c, 0xab, 0x58, 0x66, 0xf5, 0xb4, 0x85, 0x42, 0x8b, 0x50, 0x8e, 0x2e, - 0x05, 0xbe, 0x0c, 0x98, 0x41, 0xa3, 0xa2, 0x91, 0x12, 0x80, 0x2c, 0x52, 0x15, 0xe2, - 0x51, 0x37, 0xcf, 0xdd, 0x13, 0x8c, 0x99, 0x39, 0x0e, 0xfb, 0xce, 0xb7, 0x52, 0x4e, - 0x84, 0x7c, 0x36, 0xb4, 0x3f, 0x3e, 0xde, 0x32, 0xf2, 0x3b, 0x39, 0x81, 0xf6, 0xd3, - 0xc3, 0x2b, 0x17, 0xbb, 0xbe, 0x65, 0xf2, 0xfd, 0x01, 0xab, 0xdd, 0x99, 0x87, 0xf1, - 0xb8, 0x88, 0xeb, 0xef, 0x41, 0xef, 0x45, 0x55, 0xc9, 0xfb, 0x0c, 0x8a, 0xee, 0x9b, - 0x6d, 0xd0, 0x85, 0xb9, 0xfb, 0xc7, 0x4f, 0xe4, 0x6a, 0x1e, 0x36, 0x3d, 0x68, 0x32, - 0xb5, 0x08, 0x20, 0x0e, 0x50, 0x0d, 0xa6, 0x95, 0x13, 0xb7, 0x9e, 0x81, 0xf7, 0x33, - 0xb6, 0x6c, 0x3f, 0x24, 0x3a, 0x28, 0x5b, 0xf8, 0x6f, 0xfe, 0xef, 0x4f, 0xfd, 0x1c, - 0xac, 0xa7, 0x83, 0x07, 0x26, 0x63, 0xbf, 0x9b, 0x48, 0x7f, 0xbc, 0x3e, 0x7f, 0x5a, - 0xd2, 0xf7, 0xac, 0xbf, 0x2b, 0x6e, 0x00, 0x8e, 0x3e, 0x4d, 0x6f, 0x31, 0xe1, 0x14, - 0x75, 0xe1, 0x96, 0x98, 0x9d, 0xb9, 0x62, 0x8a, 0x5d, 0x56, 0x39, 0x7c, 0x9a, 0x04, - 0x2a, 0xab, 0x55, 0xe1, 0xec, 0xc4, 0x92, 0xfe, 0x94, 0x27, 0xd4, 0x90, 0xf2, 0x73, - 0xb6, 0x01, 0xd6, 0x51, 0x05, 0x56, 0x82, 0xd3, 0x5b, 0x30, 0x75, 0xfa, 0xda, 0x85, - 0x25, 0x84, 0x48, 0x14, 0x95, 0x7f, 0xfc, 0x9b, 0xc7, 0xfb, 0x39, 0x39, 0x73, 0x7b, - 0x01, 0x50, 0x2e, 0x0b, 0x6f, 0x1f, 0x9b, 0x88, 0xf2, 0x71, 0x54, 0x80, 0xae, 0x42, - 0x2e, 0x9b, 0xb7, 0xb7, 0x6e, 0x5d, 0x22, 0xde, 0x0d, 0x3d, 0x7a, 0xea, 0x58, 0x10, - 0x01, 0xdc, 0xf4, 0x6a, 0x62, 0x2f, 0x08, 0x03, 0x10, 0xbe, 0x50, 0xdf, 0x07, 0x75, - 0x21, 0x92, 0xd4, 0xe4, 0x1a, 0xc5, 0x18, 0xe4, 0x24, 0x1e, 0x06, 0x67, 0x76, 0xa8, - 0xea, 0xec, 0xc7, 0x42, 0xfd, 0x2c, 0x1b, 0xf0, 0x6f, 0xc5, 0x8b, 0xd2, 0x8d, 0x1d, - 0x6c, 0x60, 0x1f, 0x91, 0x5d, 0x75, 0x2e, 0x7c, 0xc3, 0xd9, 0x76, 0x3c, 0x8b, 0x9e, - 0xec, 0x14, 0x2c, 0x84, 0x81, 0xf9, 0xc5, 0x23, 0x59, 0xbf, 0xbf, 0x51, 0x24, 0x36, - 0x67, 0x84, 0xe1, 0x71, 0xd7, 0xa4, 0xaa, 0x01, 0x5e, 0x85, 0x56, 0x47, 0x4a, 0x6d, - 0x0f, 0xee, 0x69, 0xb0, 0xd5, 0x3e, 0xe7, 0xf4, 0xed, 0xf5, 0xea, 0x59, 0xfa, 0x55, - 0x97, 0xf4, 0x8d, 0xd6, 0xaa, 0x88, 0x51, 0x84, 0x29, 0xac, 0x8c, 0x18, 0xc4, 0x73, - 0x8d, 0xb8, 0x01, 0x09, 0xa5, 0xe4, 0xbc, 0x81, 0xbb, 0x84, 0xb3, 0x7d, 0x9b, 0x2a, - 0xd4, 0xb1, 0xd2, 0x6b, 0x36, 0x3d, 0x16, 0x60, 0x72, 0xf0, 0x8c, 0x56, 0x70, 0x62, - 0x27, 0xa9, 0xf8, 0x32, 0x97, 0x03, 0x70, 0x12, 0xd1, 0xf6, 0xda, 0x24, 0xa8, 0x69, - 0xeb, 0x32, 0x97, 0xbc, 0xbc, 0xcc, 0x8d, 0x7d, 0xed, 0x03, 0x0a, 0x3d, 0x60, 0xdf, - 0x88, 0x82, 0xe0, 0x62, 0x9e, 0x36, 0x14, 0x3c, 0x09, 0xca, 0x05, 0x21, 0x43, 0xcb, - 0x56, 0x62, 0x93, 0x8f, 0xa9, 0xf1, 0x15, 0xdd, 0xc0, 0x96, 0x65, 0x4c, 0x0b, 0x40, - 0x59, 0x4c, 0xba, 0x19, 0xee, 0xd4, 0x99, 0x53, 0x2b, 0x70, 0x8a, 0xde, 0xbe, 0x47, - 0x72, 0x6a, 0x83, 0xaf, 0x46, 0x3c, 0x80, 0xba, 0x2a, 0x1f, 0xe0, 0x71, 0xe1, 0x66, - 0xc4, 0x4d, 0x70, 0xdd, 0xbb, 0xba, 0x67, 0x06, 0xa1, 0xdc, 0x43, 0x27, 0x26, 0xfe, - 0x0f, 0xdb, 0xc6, 0x28, 0x21, 0xb5, 0x04, 0xea, 0x11, 0x66, 0xda, 0x48, 0xa8, 0x1b, - 0x63, 0x5e, 0x37, 0x63, 0x33, 0xd9, 0xbe, 0xfe, 0xc4, 0x93, 0xa0, 0x7d, 0xf4, 0x7b, - 0xba, 0x0a, 0x2e, 0x2f, 0x65, 0xe7, + 0x3f, 0x4e, 0x9b, 0x18, 0x56, 0xe7, 0xbf, 0xba, 0x7a, 0xbb, 0xc9, 0x4a, 0x72, 0xb4, + 0xab, 0xb1, 0xd8, 0x46, 0x26, 0x79, 0x30, 0x77, 0xe8, 0x37, 0xda, 0xf3, 0x3f, 0xff, + 0xa2, 0x7c, 0x7a, 0x33, 0x97, 0x8a, 0x54, 0x32, 0x51, 0x0d, 0x99, 0x3c, 0x7d, 0x92, + 0x24, 0xc0, 0x97, 0xac, 0xc5, 0x25, 0x88, 0x1c, 0x76, 0x08, 0x3c, 0x1b, 0x65, 0x1a, + 0x9d, 0xe1, 0xb5, 0xc1, 0xa6, 0xe0, 0x48, 0x2f, 0xae, 0x8f, 0x98, 0x6a, 0xb5, 0x9f, + 0xa7, 0xcd, 0x43, 0x98, 0x99, 0x6e, 0x2b, 0xc0, 0x3a, 0xdc, 0xa9, 0x90, 0x32, 0x3b, + 0xaa, 0xbd, 0xda, 0xae, 0x40, 0xb0, 0x56, 0xb7, 0xac, 0x17, 0xf8, 0x20, 0xd1, 0x1c, + 0x0d, 0xec, 0xba, 0x14, 0xf2, 0x57, 0xa6, 0xcf, 0x09, 0x18, 0x19, 0x8f, 0x38, 0x9c, + 0xdb, 0x29, 0x55, 0x77, 0x25, 0x96, 0x92, 0x7c, 0xbf, 0x55, 0x88, 0x56, 0x13, 0x35, + 0xe7, 0xd6, 0x2e, 0x6a, 0x8a, 0xf7, 0xbc, 0x33, 0xb9, 0x9a, 0x55, 0xaf, 0xa1, 0xb7, + 0xef, 0x20, 0xeb, 0x4e, 0xd6, 0xde, 0x89, 0x69, 0xd2, 0x9f, 0x04, 0x21, 0xcd, 0x4d, + 0x99, 0x06, 0x66, 0xfd, 0xcf, 0x1e, 0xbd, 0x09, 0x06, 0x57, 0x02, 0x13, 0x4d, 0x31, + 0xc3, 0x29, 0x26, 0xa3, 0x8b, 0x6b, 0x6b, 0x48, 0xfd, 0xc9, 0xb3, 0xc7, 0x64, 0xc3, + 0xcd, 0x95, 0xb9, 0x72, 0xe7, 0x68, 0xeb, 0xd8, 0xaa, 0xe9, 0x0d, 0x6a, 0x4a, 0x98, + 0xb2, 0xd9, 0x2f, 0xd9, 0xdf, 0xa2, 0xa2, 0x99, 0xd0, 0x60, 0xe8, 0x5e, 0xf5, 0x68, + 0x3f, 0x51, 0xd0, 0x51, 0x4a, 0x6e, 0xba, 0x72, 0x57, 0x3f, 0x7b, 0xae, 0x84, 0xa2, + 0xfd, 0x92, 0xbe, 0x64, 0x24, 0x1c, 0x27, 0xa6, 0xe5, 0xce, 0xac, 0xbf, 0x37, 0xb2, + 0xd9, 0xa9, 0x75, 0xdf, 0x7a, 0xee, 0xbb, 0xa1, 0x4d, 0x8c, 0x81, 0x15, 0x8e, 0xcf, + 0x5a, 0x0a, 0x25, 0xe1, 0x2f, 0x98, 0x5d, 0x08, 0xfb, 0xb4, 0xa1, 0xc1, 0x3f, 0x76, + 0x1f, 0x3f, 0xfe, 0xe8, 0xd5, 0x38, 0xe3, 0x93, 0xf3, 0x58, 0x0b, 0x73, 0x82, 0xcd, + 0x0b, 0xf5, 0x17, 0xce, 0x78, 0x87, 0x1c, 0x19, 0xac, 0xf8, 0xca, 0x06, 0x5d, 0x7c, + 0x83, 0x87, 0xce, 0xcd, 0x0d, 0x37, 0xae, 0x21, 0x7f, 0x44, 0x06, 0x94, 0x77, 0x2a, + 0xbd, 0x4b, 0x36, 0x55, 0x56, 0x85, 0x4b, 0xaa, 0x8b, 0xcc, 0xa9, 0xc4, 0xfe, 0xf7, + 0x18, 0x99, 0x12, 0xf9, 0x8a, 0x25, 0x27, 0x68, 0x92, 0x76, 0xa4, 0x00, 0x8c, 0x83, + 0x8f, 0xe7, 0x4f, 0x7c, 0x2b, 0x75, 0x9f, 0xc2, 0xab, 0x7a, 0xfe, 0x37, 0x82, 0x80, + 0x6e, 0x31, 0xb1, 0xc5, 0x30, 0xcc, 0x46, 0x20, 0x3b, 0xb3, 0xa5, 0x66, 0xca, 0xf4, + 0xd1, 0x5b, 0x99, 0x40, 0xb4, 0x3f, 0x33, 0xa8, 0x6a, 0x65, 0xd4, 0x9d, 0xa8, 0xb6, + 0x78, 0x7d, 0xe0, 0x96, 0x38, 0xb4, 0x81, 0xf3, 0xa8, 0x10, 0x8a, 0x96, 0x9e, 0xca, + 0xdf, 0x90, 0x98, 0xbf, 0xf2, 0x14, 0x0c, 0x4b, 0x42, 0xe2, 0xb0, 0xfb, 0x10, 0xb9, + 0x02, 0x89, 0xb0, 0xc6, 0xdb, 0x8b, 0xc0, 0x85, 0xe8, 0xaf, 0xe9, 0x5d, 0xd3, 0x6a, + 0x45, 0x36, 0xea, 0xd7, 0xe9, 0x5c, 0x99, 0x66, 0x2c, 0xd9, 0x28, 0xc2, 0x2c, 0x3e, + 0xbf, 0x39, 0x79, 0x15, 0x78, 0xbc, 0x66, 0xfe, 0xa3, 0x01, 0x4d, 0x22, 0x92, 0x94, + 0x30, 0x83, 0xe7, 0x46, 0x81, 0x24, 0x52, 0xb0, 0x0b, 0xc2, 0xf3, 0xe4, 0x7c, 0x49, + 0x47, 0x46, 0xce, 0xd5, 0x57, 0xb1, 0x3a, 0xe3, 0x03, 0x0d, 0x8a, 0x95, 0x78, 0x10, + 0x2b, 0xba, 0xd2, 0xfc, 0x3b, 0x84, 0x5f, 0x31, 0xae, 0x16, 0xf8, 0xd8, 0x0b, 0x77, + 0xf8, 0x43, 0x15, 0x84, 0xa3, 0x7e, 0x8f, 0x30, 0xb0, 0xb9, 0x5c, 0xc4, 0x55, 0x5a, + 0xbc, 0x05, 0x3a, 0x0b, 0x4f, 0xf9, 0x13, 0xb0, 0x03, 0x69, 0xf1, 0x74, 0x7b, 0x1f, + 0x1c, 0x0a, 0xc8, 0x75, 0x4f, 0x01, 0x7e, 0x99, 0x47, 0xca, 0x63, 0x25, 0x5b, 0x3c, + 0x23, 0xf4, 0x56, 0xe2, 0x3f, 0x96, 0x76, 0x13, 0x99, 0x60, 0x1f, 0xd8, 0xda, 0xdb, + 0x5e, 0x3f, 0x90, 0xab, 0x1b, 0x20, 0x13, 0x81, 0x80, 0xed, 0x69, 0x73, 0x22, 0x39, + 0xc8, 0xc2, 0x15, 0xd9, 0xcc, 0x8a, 0xc8, 0x05, 0x9b, 0xde, 0x81, 0x63, 0x27, 0xd2, + 0x20, 0xb9, 0xa8, 0xec, 0xba, 0x5d, ], ock: [ - 0xec, 0xa3, 0x70, 0x7a, 0x74, 0x5d, 0x5d, 0x58, 0x65, 0x86, 0xb2, 0x35, 0xf2, 0x92, - 0xad, 0x20, 0x48, 0x93, 0x14, 0xc4, 0x58, 0x80, 0xd9, 0x83, 0x2b, 0x7f, 0x47, 0xee, - 0xbb, 0xd4, 0x5c, 0xfe, + 0xe6, 0xb7, 0x05, 0x50, 0xe1, 0xd7, 0xa2, 0xbe, 0x73, 0x04, 0x39, 0x64, 0x41, 0xec, + 0x6a, 0xc0, 0x47, 0x45, 0x99, 0xf9, 0xea, 0xd7, 0x55, 0xc2, 0xcf, 0x27, 0x6b, 0x87, + 0x50, 0xc5, 0xcf, 0x2d, ], op: [ 0x3b, 0x3e, 0x88, 0x3e, 0x95, 0x8c, 0xd6, 0xe0, 0x75, 0x4d, 0x74, 0xca, 0xae, 0x1e, 0x5a, 0x43, 0x98, 0xab, 0xeb, 0x7d, 0x10, 0xee, 0x5f, 0x75, 0xa4, 0xab, 0x8e, 0xf7, - 0x03, 0x8e, 0x3d, 0xb3, 0x0f, 0xba, 0x68, 0x76, 0xb3, 0x76, 0x5d, 0xff, 0x4f, 0x4c, - 0x40, 0xaf, 0x89, 0x3e, 0x4b, 0xd1, 0x34, 0x3a, 0x53, 0x4c, 0xdf, 0x50, 0x20, 0x15, - 0x6b, 0x5e, 0xd1, 0xf6, 0xbf, 0x62, 0xbe, 0x3c, + 0x03, 0x8e, 0x3d, 0xb3, 0x85, 0x7b, 0xa2, 0x47, 0xd4, 0x68, 0xe1, 0x8d, 0xfe, 0x96, + 0x73, 0xe9, 0x05, 0x99, 0x23, 0xc2, 0x2e, 0x9b, 0x70, 0x0d, 0x56, 0x3d, 0xf8, 0xa9, + 0x89, 0xcc, 0x63, 0x00, 0x06, 0x15, 0xb2, 0x0d, ], c_out: [ - 0xd0, 0x65, 0x9a, 0x03, 0xc5, 0x3e, 0x15, 0xdc, 0x11, 0x01, 0xa6, 0x6e, 0xa8, 0x0d, - 0xf4, 0x14, 0x4d, 0x5e, 0xe0, 0x1c, 0x3d, 0xbf, 0x20, 0x2c, 0xe6, 0x08, 0x7e, 0x96, - 0xa8, 0x5a, 0xe1, 0x39, 0xdd, 0x46, 0xfc, 0x82, 0xa1, 0xc3, 0x7d, 0x06, 0x05, 0xf8, - 0x49, 0x98, 0x53, 0x13, 0x16, 0xf1, 0xf0, 0xcb, 0xc0, 0x4e, 0xa2, 0x0a, 0xa4, 0x04, - 0xb3, 0xd5, 0xb0, 0x42, 0x96, 0x01, 0x49, 0x81, 0x6d, 0x9b, 0x8f, 0x06, 0x2a, 0xfc, - 0xc1, 0x93, 0x89, 0x43, 0x82, 0x7a, 0x1b, 0x43, 0xfc, 0xbd, - ], + 0x02, 0xb1, 0x37, 0x3e, 0xb1, 0x89, 0x56, 0x32, 0x2b, 0x47, 0xa1, 0x70, 0x0d, 0xb7, + 0x43, 0x31, 0x6e, 0xde, 0x46, 0x44, 0xd6, 0x59, 0x3c, 0xd7, 0x94, 0x22, 0xd7, 0x51, + 0x3d, 0x1b, 0x80, 0xe6, 0x85, 0x05, 0xdf, 0xe9, 0xd6, 0x86, 0x2e, 0x79, 0x4e, 0x30, + 0x28, 0x8b, 0xae, 0xa8, 0xb0, 0xbc, 0xb3, 0x8b, 0x35, 0x49, 0x77, 0xaa, 0xee, 0x57, + 0x2e, 0xe8, 0x86, 0x8b, 0x2d, 0xa0, 0x7d, 0xa2, 0x99, 0x2c, 0x6d, 0x9f, 0xb8, 0xbd, + 0x59, 0x0b, 0x8d, 0xa0, 0x28, 0x11, 0xb5, 0x09, 0xe8, 0xc6, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -1142,34 +1147,34 @@ pub(crate) fn test_vectors() -> Vec { 0xda, 0x6b, 0x15, 0x14, ], rho: [ - 0xe5, 0xd0, 0x8c, 0x40, 0x26, 0x3e, 0x4a, 0x2a, 0x56, 0x96, 0xda, 0x21, 0x0d, 0x8e, - 0x9a, 0x77, 0xf0, 0xaf, 0xc4, 0xc6, 0x8a, 0x6d, 0xda, 0x38, 0xe2, 0x85, 0xf4, 0xe3, - 0xef, 0x13, 0xb8, 0x17, + 0x9a, 0x09, 0xe4, 0x72, 0xe8, 0xe9, 0x96, 0xfc, 0xc3, 0x0e, 0xd5, 0x23, 0x72, 0x08, + 0xdb, 0xb0, 0x01, 0x71, 0x32, 0x0e, 0x6b, 0xea, 0x43, 0x91, 0x86, 0x00, 0x9d, 0xad, + 0x21, 0x38, 0xab, 0x29, ], cmx: [ - 0xad, 0xc2, 0x44, 0x3a, 0xf9, 0x57, 0x67, 0x47, 0xca, 0x4f, 0x10, 0x4b, 0x1f, 0x5a, - 0x7a, 0xdc, 0x80, 0x5a, 0xc5, 0x5a, 0xcc, 0x56, 0x33, 0xa0, 0xb3, 0xc2, 0xdc, 0x7a, - 0xad, 0xff, 0x21, 0x26, + 0x18, 0xfc, 0xbd, 0x40, 0xac, 0xf1, 0xa7, 0xf4, 0xd6, 0x09, 0x87, 0x9a, 0x5f, 0x5e, + 0x3b, 0x39, 0x70, 0x09, 0x4f, 0xf8, 0xbe, 0x84, 0x18, 0x60, 0x70, 0x16, 0xc6, 0xa6, + 0x97, 0xf8, 0x9c, 0x20, ], esk: [ - 0x24, 0x75, 0x30, 0x5c, 0x35, 0xcf, 0x37, 0xeb, 0xd2, 0x77, 0x82, 0x35, 0x16, 0x58, - 0x5a, 0xfa, 0x06, 0x05, 0x78, 0x52, 0x17, 0x1e, 0x0c, 0xe4, 0xb0, 0x52, 0xd5, 0xb4, - 0x20, 0x41, 0xd8, 0x1c, + 0x3b, 0xc1, 0x7a, 0x58, 0x0d, 0x53, 0x0f, 0x89, 0x30, 0xa3, 0x6b, 0x8d, 0x6f, 0xea, + 0x67, 0x85, 0x7f, 0x7b, 0x85, 0x20, 0xfd, 0x2e, 0x0a, 0xb5, 0xd5, 0xcb, 0xab, 0x1a, + 0xcc, 0xd5, 0x4e, 0x3a, ], ephemeral_key: [ - 0x00, 0x5d, 0x31, 0x5b, 0xd1, 0x80, 0xa2, 0x94, 0x0b, 0xd7, 0xfb, 0x34, 0xa7, 0x0e, - 0x90, 0xe8, 0x32, 0x6c, 0xb1, 0x34, 0x30, 0x66, 0x05, 0x46, 0x53, 0xd2, 0x64, 0x4d, - 0x20, 0x45, 0xe3, 0x0f, + 0xcf, 0xe0, 0x3e, 0xb2, 0xd3, 0x36, 0x76, 0xb7, 0x73, 0x83, 0x7d, 0xa8, 0x39, 0x17, + 0x2d, 0x33, 0x33, 0x31, 0x88, 0xc9, 0xdf, 0xef, 0x05, 0xc8, 0x32, 0xa2, 0x5c, 0x86, + 0xd3, 0xbf, 0x0e, 0x8f, ], shared_secret: [ - 0x8e, 0x59, 0x0d, 0x06, 0x3f, 0x7e, 0xc3, 0x8e, 0xb2, 0x00, 0x84, 0x70, 0xf9, 0xbb, - 0x42, 0x29, 0x04, 0xfc, 0x0b, 0xaf, 0x97, 0x80, 0xf8, 0xfd, 0x1f, 0x54, 0x22, 0xea, - 0x30, 0x8c, 0x47, 0xba, + 0xd2, 0xc2, 0x88, 0x9e, 0x03, 0x7e, 0xac, 0x60, 0x60, 0x58, 0x68, 0x2b, 0xaa, 0x38, + 0x86, 0xa4, 0xc2, 0xdd, 0x44, 0xea, 0xdf, 0x8b, 0x2c, 0xe4, 0x39, 0x95, 0xde, 0xd7, + 0x61, 0xfd, 0xaf, 0xb5, ], k_enc: [ - 0xeb, 0xb2, 0xff, 0x9b, 0x1f, 0x29, 0x0d, 0xa5, 0x63, 0x27, 0xa9, 0x67, 0x71, 0xb2, - 0x5f, 0x71, 0x29, 0xff, 0x10, 0x2e, 0xe6, 0xd2, 0xb2, 0x0d, 0xa0, 0x9a, 0x06, 0x25, - 0xf8, 0xbb, 0x26, 0x07, + 0xfe, 0xe3, 0xe3, 0xb5, 0xfd, 0x6c, 0xd8, 0x54, 0x44, 0x2b, 0x2a, 0xc2, 0x97, 0x70, + 0xfb, 0x0e, 0x39, 0x32, 0xf4, 0x71, 0x52, 0x43, 0x26, 0xda, 0x4a, 0x57, 0xc2, 0x56, + 0x18, 0x06, 0x9e, 0x99, ], p_enc: [ 0x02, 0x1c, 0xa7, 0xb6, 0x49, 0x39, 0x9e, 0x13, 0xe4, 0x39, 0x44, 0x62, 0x91, 0x20, @@ -1215,69 +1220,70 @@ pub(crate) fn test_vectors() -> Vec { 0x34, 0x1e, 0x4e, 0x6f, ], c_enc: [ - 0x96, 0x3b, 0xe3, 0x6e, 0xdc, 0xa4, 0x8b, 0x7c, 0x4a, 0x1c, 0xd6, 0xa1, 0x37, 0x2e, - 0x84, 0xc0, 0x54, 0x54, 0x83, 0x4c, 0x5e, 0xe1, 0x92, 0x5e, 0xed, 0xeb, 0x48, 0xda, - 0x16, 0x77, 0x79, 0xe3, 0x99, 0x83, 0x58, 0xcb, 0x92, 0x7a, 0x0a, 0x0b, 0x36, 0x9c, - 0x85, 0xee, 0xb3, 0x30, 0xf7, 0x00, 0x5c, 0x26, 0x9d, 0x0b, 0xe4, 0xf2, 0x38, 0x09, - 0x57, 0xb1, 0x62, 0x97, 0x7c, 0xae, 0x7a, 0x7b, 0x1d, 0x0b, 0xe5, 0xd0, 0xb7, 0x03, - 0xd3, 0x92, 0xac, 0xae, 0xd2, 0x4f, 0x52, 0x5b, 0x83, 0xcf, 0xdd, 0x7f, 0x35, 0xc1, - 0xf1, 0x74, 0xbf, 0x06, 0x6b, 0x7a, 0xfd, 0xb7, 0x45, 0xed, 0xbe, 0xdc, 0x0b, 0x46, - 0xa5, 0x91, 0x36, 0x21, 0x47, 0x61, 0x9d, 0x6b, 0xd3, 0xf3, 0xce, 0x6b, 0x45, 0x23, - 0xf0, 0x64, 0x9a, 0x7c, 0x65, 0x32, 0x2d, 0x05, 0xfa, 0xe2, 0x22, 0x70, 0x1a, 0x8c, - 0xd6, 0xca, 0xbf, 0x8d, 0xc3, 0x2f, 0x05, 0x5f, 0xeb, 0x14, 0x1e, 0x55, 0x6d, 0xdf, - 0xb1, 0x98, 0x30, 0xb7, 0x20, 0x4c, 0x30, 0x98, 0x4e, 0xdd, 0xf4, 0x34, 0xec, 0xc5, - 0xf0, 0xea, 0x82, 0x5c, 0xf8, 0xd9, 0xd5, 0x03, 0x8f, 0x28, 0xe2, 0x3e, 0xf3, 0x6b, - 0xa9, 0x38, 0x52, 0xe5, 0x8e, 0x85, 0xf8, 0x90, 0xb1, 0x77, 0x5c, 0x6d, 0x4c, 0x13, - 0x5b, 0xef, 0x0e, 0x2a, 0x19, 0x33, 0x02, 0xd9, 0x0a, 0x80, 0x4c, 0x85, 0x31, 0x25, - 0xaa, 0x5b, 0x11, 0x6f, 0x8c, 0x58, 0x0e, 0xb6, 0x54, 0xfe, 0x35, 0xe6, 0x73, 0x79, - 0x9e, 0x93, 0xcf, 0x58, 0xfe, 0x1e, 0x70, 0xcd, 0xe1, 0x19, 0xab, 0x58, 0x6c, 0x12, - 0xc4, 0x95, 0x75, 0xe6, 0x1a, 0xc4, 0xb7, 0x71, 0xfa, 0x8e, 0xbf, 0x76, 0xca, 0x95, - 0xd6, 0x51, 0xa4, 0xba, 0x87, 0x3b, 0x24, 0xcf, 0x97, 0xff, 0x75, 0x5b, 0xc7, 0x49, - 0xf4, 0x09, 0x6d, 0x2d, 0xa1, 0x5c, 0xf8, 0x30, 0x36, 0xcc, 0x22, 0x0f, 0x0a, 0x68, - 0x93, 0x43, 0x21, 0xc9, 0xae, 0x33, 0x4e, 0x2d, 0x99, 0xa9, 0x95, 0xe9, 0x29, 0x04, - 0xc1, 0x45, 0x23, 0x33, 0x19, 0x00, 0xcb, 0xca, 0x20, 0x4a, 0xdc, 0xb6, 0x93, 0x9d, - 0xc1, 0x71, 0x87, 0x53, 0x53, 0xa1, 0x1e, 0x12, 0xba, 0xcb, 0x2a, 0xab, 0x0f, 0x57, - 0x17, 0x9f, 0x1b, 0x67, 0xea, 0xcc, 0x7e, 0x7b, 0x6c, 0x5c, 0xc8, 0xa3, 0x78, 0x64, - 0x9b, 0x62, 0xb8, 0x52, 0xfa, 0x47, 0x6f, 0x93, 0x37, 0x88, 0x59, 0xd0, 0xd9, 0xa3, - 0x03, 0x3d, 0xa1, 0x31, 0x28, 0x17, 0x57, 0xad, 0x98, 0x5c, 0x86, 0xfe, 0x03, 0x7a, - 0x4e, 0xdd, 0x0a, 0x4a, 0x49, 0xee, 0x5c, 0x4f, 0x48, 0x15, 0xf0, 0x14, 0x73, 0xb9, - 0x60, 0xa1, 0x8a, 0x3b, 0x7f, 0x75, 0x07, 0xee, 0x3d, 0x8b, 0x39, 0x5a, 0x76, 0x68, - 0x40, 0x95, 0x5b, 0xaa, 0xdd, 0x0a, 0xbb, 0xf4, 0xf5, 0x91, 0x4e, 0x92, 0x10, 0xf5, - 0x9e, 0x4c, 0xd1, 0x3c, 0x82, 0xe0, 0xac, 0xf8, 0x79, 0x51, 0x78, 0x02, 0x91, 0xd0, - 0xa9, 0xa7, 0x0f, 0x6b, 0x4f, 0xf5, 0x0d, 0x81, 0x0d, 0x50, 0x90, 0x20, 0x45, 0x30, - 0xad, 0x69, 0x44, 0xb1, 0x3d, 0x23, 0x83, 0xab, 0xca, 0x42, 0x0c, 0xb6, 0xd9, 0xfc, - 0xd8, 0xfd, 0xcb, 0xe9, 0xb3, 0xb5, 0xf4, 0x2f, 0x0a, 0xf5, 0xdf, 0x36, 0x37, 0x8c, - 0xe7, 0x3d, 0xc9, 0x06, 0x16, 0x7d, 0xd4, 0xb3, 0x80, 0x41, 0x8f, 0x17, 0xe4, 0x50, - 0x61, 0x18, 0x57, 0x23, 0xda, 0xbb, 0x6f, 0xfd, 0xbb, 0xd5, 0xa4, 0x18, 0xc3, 0xc6, - 0xfd, 0x33, 0x70, 0x34, 0x09, 0x94, 0x27, 0x7b, 0x88, 0x8e, 0xe4, 0x9b, 0x08, 0x91, - 0xbb, 0xb9, 0x4b, 0x6b, 0x8b, 0x06, 0x5f, 0xd1, 0x92, 0x00, 0xdc, 0x3a, 0x68, 0x1c, - 0xa5, 0xff, 0x2a, 0x98, 0x8f, 0xa6, 0x6d, 0x02, 0x9d, 0xdd, 0xf9, 0xb0, 0x3a, 0x5e, - 0x6c, 0x6e, 0x99, 0xb6, 0x35, 0x41, 0x15, 0x6a, 0x09, 0x51, 0xd9, 0x08, 0x7d, 0xd8, - 0x83, 0xd5, 0x13, 0x9e, 0xe6, 0x7a, 0x8c, 0xe5, 0xdd, 0x6e, 0xf1, 0x4c, 0x9a, 0x10, - 0xdb, 0x81, 0x8b, 0x93, 0x69, 0x02, 0xc7, 0x99, 0x93, 0x90, 0xf9, 0x72, 0xba, 0xfa, - 0x5a, 0x57, 0x2f, 0xc8, 0x73, 0x42, 0xe2, 0xc5, 0x1c, 0xeb, 0x80, 0x30, 0xe0, 0x6b, - 0x72, 0x40, 0x95, 0xf9, 0x8d, 0x7b, + 0xbe, 0x1d, 0xff, 0xd3, 0x37, 0x0c, 0x67, 0x56, 0x69, 0xcc, 0x9a, 0xe1, 0xd0, 0x30, + 0x2d, 0x7f, 0x90, 0x6d, 0x25, 0x23, 0x09, 0x3c, 0x24, 0xf4, 0x25, 0x7a, 0x83, 0xbc, + 0x4f, 0x36, 0x62, 0x3a, 0x08, 0x2c, 0xe6, 0xeb, 0x45, 0x21, 0x95, 0x71, 0x91, 0xd5, + 0x7e, 0x14, 0x11, 0xed, 0xe7, 0x1d, 0x44, 0xb5, 0x6c, 0x57, 0xcb, 0x22, 0x81, 0x4a, + 0x04, 0x69, 0x39, 0xd2, 0xff, 0xf9, 0x2b, 0x46, 0x62, 0x76, 0x2d, 0x4f, 0x21, 0xc0, + 0x78, 0x42, 0x74, 0x72, 0xb9, 0x18, 0x10, 0x10, 0x55, 0x56, 0xf4, 0xde, 0x0a, 0x27, + 0xe7, 0x70, 0x08, 0x47, 0x72, 0xcb, 0xfe, 0xbf, 0x87, 0xdb, 0x33, 0x14, 0xab, 0x70, + 0xf2, 0x6d, 0x11, 0xea, 0x5d, 0xe2, 0x67, 0xc3, 0xa9, 0xa8, 0xf4, 0x6b, 0xad, 0x13, + 0xc7, 0x36, 0x26, 0x10, 0xbd, 0xba, 0x81, 0x02, 0xd4, 0xb7, 0x26, 0xef, 0x26, 0xec, + 0x79, 0x4a, 0x15, 0x66, 0x57, 0x1b, 0xfd, 0xc1, 0x02, 0x47, 0x7d, 0xa5, 0xb4, 0x9b, + 0xbf, 0x9f, 0xe4, 0xb1, 0xa4, 0x4e, 0xd0, 0xb3, 0xbc, 0xed, 0x99, 0xba, 0x81, 0x9a, + 0x4f, 0x30, 0x22, 0x65, 0x49, 0x44, 0x5b, 0xc6, 0x1c, 0xff, 0x5c, 0x33, 0x16, 0x33, + 0x5f, 0x6b, 0xd4, 0xa9, 0xa4, 0x24, 0xc9, 0x4a, 0xe0, 0xb5, 0xcb, 0xe4, 0x8a, 0xfb, + 0x2b, 0x94, 0xd0, 0xc7, 0xe4, 0x4e, 0x32, 0x30, 0x95, 0xa7, 0x2e, 0x42, 0x64, 0xe9, + 0x1c, 0x48, 0x94, 0xb9, 0xe8, 0x45, 0xaf, 0x32, 0x35, 0x02, 0xda, 0xe8, 0xc1, 0x86, + 0x78, 0xa4, 0xf7, 0x40, 0xe5, 0xa6, 0x3a, 0x4c, 0x70, 0x29, 0x92, 0xfa, 0xcd, 0xd3, + 0x57, 0x35, 0xb1, 0xd1, 0x34, 0x8b, 0x91, 0x9c, 0x70, 0x0c, 0x42, 0xd3, 0x30, 0xd3, + 0x86, 0xaf, 0xb8, 0x73, 0xfa, 0xba, 0xd8, 0xcb, 0x32, 0x18, 0x15, 0x1b, 0x40, 0x18, + 0x01, 0xe3, 0x69, 0x34, 0x4f, 0xf2, 0x0a, 0xaa, 0x66, 0x73, 0x47, 0x4f, 0x4b, 0xfc, + 0x98, 0xd0, 0x7e, 0x36, 0x7b, 0xc4, 0x2e, 0xf1, 0xa0, 0x4f, 0xa1, 0xbc, 0x12, 0x52, + 0x18, 0x8d, 0xd9, 0xd3, 0xe0, 0x00, 0xe3, 0xf5, 0xe9, 0xdf, 0xc9, 0xe1, 0x3e, 0xe9, + 0xdb, 0x55, 0x04, 0x0d, 0x17, 0x22, 0x7d, 0xa4, 0x4a, 0x3e, 0x08, 0xfd, 0x5e, 0xc8, + 0x58, 0xc4, 0x9c, 0x2e, 0x6a, 0x71, 0x1f, 0x8e, 0x68, 0xd0, 0xa1, 0xdf, 0x88, 0xef, + 0x09, 0x40, 0xf7, 0x2e, 0xd7, 0x3e, 0xf4, 0x9e, 0x8a, 0x45, 0xae, 0x2e, 0x5e, 0x1b, + 0xf1, 0x37, 0xba, 0x58, 0xcf, 0xb9, 0x25, 0x79, 0xab, 0xb2, 0xa4, 0x93, 0x13, 0xa2, + 0xff, 0x3d, 0xb6, 0x16, 0x93, 0xd2, 0xb7, 0x58, 0xaf, 0x20, 0x47, 0x2a, 0xc6, 0x40, + 0x6b, 0xa3, 0x55, 0xb4, 0x8c, 0xee, 0x22, 0xe7, 0x0f, 0xb8, 0xf9, 0xd4, 0x8e, 0xa3, + 0x93, 0x4b, 0x62, 0x24, 0xac, 0xe2, 0x69, 0xb9, 0xef, 0x54, 0x6d, 0xbf, 0xc5, 0x2a, + 0xbe, 0xcf, 0xac, 0x59, 0x40, 0xf0, 0x40, 0xbd, 0x21, 0xe9, 0x0e, 0xfa, 0x82, 0x75, + 0x56, 0x1a, 0x88, 0xbc, 0x18, 0xe2, 0x6b, 0x98, 0x8d, 0x11, 0x79, 0xb7, 0xa2, 0xc3, + 0xaf, 0xd8, 0x6e, 0xf2, 0xa0, 0x90, 0x62, 0x52, 0x23, 0x23, 0x4b, 0x39, 0xc9, 0xe2, + 0x06, 0x8d, 0x94, 0x5d, 0xd7, 0x76, 0x3b, 0x01, 0x0c, 0x28, 0xc8, 0x9b, 0x72, 0xe2, + 0x55, 0x13, 0xb3, 0x9c, 0x3c, 0xe1, 0x17, 0x73, 0x42, 0x8a, 0xd3, 0x44, 0xe1, 0xd5, + 0xd5, 0x1b, 0x92, 0x00, 0x14, 0xf9, 0x17, 0x06, 0xff, 0xae, 0x3d, 0x86, 0x36, 0x14, + 0x77, 0xfd, 0x5d, 0xe0, 0x13, 0x42, 0x2c, 0x06, 0xa3, 0x32, 0xe3, 0x45, 0x79, 0x75, + 0xcf, 0x9b, 0xe9, 0xf9, 0xab, 0x3a, 0x06, 0x87, 0x2e, 0xf0, 0x71, 0x7d, 0x39, 0x08, + 0xbd, 0xeb, 0xf8, 0x41, 0x8c, 0xe5, 0x57, 0xd5, 0x2d, 0x51, 0xa2, 0x50, 0xc0, 0x8c, + 0x5b, 0x79, 0x3a, 0xd4, 0xbc, 0x0f, 0x16, 0xc6, 0x27, 0x89, 0xfe, 0xa2, 0xca, 0xb3, + 0x9c, 0xcc, 0xa4, 0x07, 0xee, 0x9e, 0x47, 0xf5, 0x6d, 0x20, 0xa7, 0x41, 0x91, 0x2c, + 0x6b, 0xad, 0xdb, 0xd7, 0xfa, 0x7b, 0x97, 0xe5, 0x46, 0x33, 0x61, 0x28, 0x74, 0x5a, + 0xe7, 0xd7, 0x30, 0xa5, 0x5a, 0x6a, 0xc7, 0xb8, 0xfc, 0xbd, 0x72, 0xce, 0x78, 0x95, + 0x9c, 0x7a, 0x79, 0x75, 0x21, 0x2c, ], ock: [ - 0x5b, 0x5b, 0x20, 0xfc, 0x46, 0xba, 0x14, 0xbd, 0x18, 0x43, 0xb6, 0xc7, 0x7e, 0xc3, - 0xf4, 0x55, 0xb7, 0x65, 0xb4, 0xd1, 0x2d, 0xb6, 0x52, 0xeb, 0x34, 0x20, 0x0c, 0x41, - 0x48, 0x88, 0x1f, 0xfc, + 0xeb, 0x3e, 0xd9, 0xfc, 0xb3, 0xaa, 0x91, 0xc4, 0xf5, 0xec, 0xfd, 0x43, 0xdb, 0xda, + 0x40, 0x33, 0x06, 0x93, 0xc3, 0xa6, 0x56, 0x75, 0x45, 0xfd, 0x23, 0x6a, 0xf1, 0x90, + 0x8e, 0x29, 0x42, 0xa3, ], op: [ 0x3f, 0xeb, 0x34, 0x5a, 0xec, 0xd3, 0x42, 0x9a, 0x16, 0xe1, 0x0f, 0x3d, 0x13, 0x20, 0xbc, 0x99, 0x71, 0xb5, 0x9e, 0x63, 0x9d, 0x62, 0xb6, 0x96, 0x1a, 0xea, 0x78, 0x15, - 0x67, 0xa8, 0x60, 0x9e, 0x24, 0x75, 0x30, 0x5c, 0x35, 0xcf, 0x37, 0xeb, 0xd2, 0x77, - 0x82, 0x35, 0x16, 0x58, 0x5a, 0xfa, 0x06, 0x05, 0x78, 0x52, 0x17, 0x1e, 0x0c, 0xe4, - 0xb0, 0x52, 0xd5, 0xb4, 0x20, 0x41, 0xd8, 0x1c, + 0x67, 0xa8, 0x60, 0x9e, 0x3b, 0xc1, 0x7a, 0x58, 0x0d, 0x53, 0x0f, 0x89, 0x30, 0xa3, + 0x6b, 0x8d, 0x6f, 0xea, 0x67, 0x85, 0x7f, 0x7b, 0x85, 0x20, 0xfd, 0x2e, 0x0a, 0xb5, + 0xd5, 0xcb, 0xab, 0x1a, 0xcc, 0xd5, 0x4e, 0x3a, ], c_out: [ - 0xe0, 0x1b, 0x5c, 0x1e, 0x01, 0x90, 0x0f, 0xf7, 0x9b, 0xf7, 0x27, 0xf5, 0x37, 0xc4, - 0xac, 0x36, 0xf8, 0x06, 0x7a, 0x0c, 0xc5, 0xc8, 0xe9, 0xc8, 0x20, 0x44, 0x28, 0x43, - 0x69, 0x35, 0x30, 0x91, 0x8a, 0xea, 0x67, 0x2c, 0x4c, 0xd8, 0xfa, 0x3f, 0x6f, 0x2c, - 0xb6, 0x8b, 0x87, 0x17, 0x22, 0xe7, 0x78, 0xf6, 0xe2, 0x5e, 0x78, 0xae, 0x00, 0xa8, - 0x43, 0x28, 0xc4, 0xc2, 0xbf, 0x1c, 0x79, 0xb2, 0xc9, 0xd8, 0x69, 0x72, 0x60, 0xcd, - 0x44, 0x7e, 0x2e, 0xff, 0x31, 0x5d, 0x74, 0xb5, 0xb1, 0xfd, - ], + 0x60, 0xf3, 0xe8, 0x94, 0xe3, 0x86, 0x4e, 0xfb, 0x48, 0xcc, 0xae, 0x50, 0xe1, 0x0d, + 0xa7, 0x73, 0xdc, 0xcf, 0x85, 0x62, 0x45, 0x5d, 0x1b, 0x73, 0x1a, 0xad, 0x44, 0xe1, + 0x5e, 0x3e, 0x40, 0x18, 0x31, 0xce, 0x6f, 0x92, 0xf4, 0x53, 0x2d, 0x90, 0x83, 0x92, + 0x59, 0xce, 0x9c, 0xb1, 0x44, 0x62, 0x1f, 0x12, 0x01, 0x77, 0x8f, 0x61, 0x5d, 0x09, + 0x87, 0x01, 0x0c, 0x8d, 0x13, 0x5c, 0x32, 0xd5, 0x6e, 0xe2, 0x84, 0x68, 0x65, 0xa2, + 0x61, 0xde, 0x14, 0x25, 0xd2, 0x3b, 0xcc, 0x51, 0xb8, 0xa0, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -1351,34 +1357,34 @@ pub(crate) fn test_vectors() -> Vec { 0x88, 0xff, 0xee, 0x2f, ], rho: [ - 0xe9, 0x16, 0x93, 0xc3, 0x7d, 0x04, 0x37, 0x5e, 0x67, 0xc5, 0x71, 0x5a, 0x39, 0xc9, - 0x79, 0x4a, 0x4e, 0xcd, 0x08, 0x38, 0xe2, 0x35, 0x1f, 0xd7, 0xcd, 0x93, 0xa1, 0x55, - 0x7f, 0x01, 0x02, 0x3e, + 0x54, 0x3e, 0xa7, 0x11, 0x56, 0xc9, 0xa6, 0xf8, 0x04, 0x1f, 0xa7, 0x7e, 0xc1, 0xc5, + 0xaf, 0x90, 0x28, 0x8f, 0x27, 0x20, 0xf1, 0x3f, 0xf0, 0x93, 0xc6, 0x86, 0x26, 0x6b, + 0x92, 0xd7, 0xa0, 0x24, ], cmx: [ - 0xcc, 0x29, 0x41, 0xe0, 0xf6, 0x38, 0x25, 0x7f, 0xb6, 0x51, 0x6a, 0x27, 0xc3, 0x0e, - 0xaa, 0xe0, 0xb4, 0x6d, 0x2f, 0xf0, 0x6a, 0x73, 0x50, 0x70, 0x41, 0x74, 0x6c, 0xdc, - 0x23, 0x07, 0x61, 0x25, + 0x1d, 0x51, 0xea, 0x92, 0xfa, 0x43, 0x55, 0x0a, 0x0e, 0xdd, 0xea, 0x23, 0x6e, 0x17, + 0xa0, 0x16, 0x93, 0xc2, 0x2d, 0x8d, 0xd8, 0x1c, 0x9c, 0x9e, 0xc8, 0x76, 0xa2, 0x4e, + 0x67, 0xd4, 0x93, 0x0b, ], esk: [ - 0xec, 0x99, 0xeb, 0x6f, 0x67, 0x1d, 0x0a, 0x9e, 0x84, 0x5a, 0xbf, 0xb7, 0x8a, 0xec, - 0xe9, 0x32, 0xeb, 0x13, 0xf5, 0xae, 0xd6, 0x4f, 0x20, 0xa7, 0x77, 0xc9, 0x46, 0xe9, - 0xcd, 0x7a, 0x24, 0x23, + 0x19, 0xe0, 0x26, 0x4b, 0x82, 0x88, 0xf7, 0x3e, 0xbf, 0x97, 0x14, 0xb0, 0xdf, 0x85, + 0x8e, 0xf7, 0xab, 0x39, 0xec, 0x50, 0x2c, 0xd2, 0x98, 0xf2, 0xc4, 0x84, 0xa9, 0xf4, + 0xc7, 0xda, 0x74, 0x36, ], ephemeral_key: [ - 0xad, 0xa7, 0x60, 0x27, 0xdc, 0xae, 0xb5, 0xf1, 0x58, 0xac, 0x6c, 0x5c, 0x6d, 0x7f, - 0x05, 0x31, 0x8f, 0xec, 0x26, 0xd5, 0xc7, 0x94, 0xf2, 0xe9, 0x00, 0xcb, 0x96, 0x29, - 0x92, 0x49, 0xe0, 0xb5, + 0x8f, 0xbe, 0xb6, 0xb3, 0x03, 0x8e, 0x69, 0x49, 0x91, 0x6a, 0x2c, 0x06, 0x0e, 0xf9, + 0xa4, 0xb1, 0xfe, 0xf1, 0x3a, 0xce, 0x2f, 0xee, 0x00, 0x25, 0xda, 0x32, 0xc3, 0x6d, + 0x23, 0x1a, 0x61, 0x34, ], shared_secret: [ - 0xc2, 0x5c, 0xf1, 0xd6, 0x53, 0x2e, 0x06, 0xcb, 0x8b, 0x15, 0x22, 0x14, 0x76, 0x6e, - 0xee, 0xd7, 0x5a, 0x17, 0x8c, 0x82, 0x2a, 0x11, 0x51, 0xf6, 0x9e, 0x92, 0xe9, 0xcf, - 0xfa, 0x47, 0xcb, 0x19, + 0x67, 0xd6, 0x8a, 0x5a, 0x05, 0x93, 0xfd, 0x16, 0x7d, 0x38, 0x08, 0x2e, 0x49, 0xd2, + 0x30, 0x30, 0x86, 0xe5, 0x5a, 0x43, 0xc1, 0x24, 0xd5, 0xaa, 0xa8, 0x20, 0xab, 0x0c, + 0x3f, 0x5c, 0xc5, 0x37, ], k_enc: [ - 0xd4, 0xef, 0x89, 0xc4, 0x64, 0xbe, 0x8f, 0x42, 0xf6, 0xb7, 0xf2, 0x6d, 0x89, 0x37, - 0x8b, 0x73, 0xa3, 0x55, 0xa4, 0xfe, 0x24, 0x6c, 0x2e, 0xc8, 0xe8, 0x14, 0x6b, 0xef, - 0x7d, 0xdd, 0x14, 0x19, + 0x6b, 0x8d, 0x83, 0xf2, 0xf1, 0xfd, 0x1e, 0xad, 0x7d, 0x45, 0x42, 0xb3, 0x63, 0x09, + 0x34, 0x07, 0xc5, 0x0a, 0x20, 0xed, 0x7f, 0x0e, 0x8c, 0xf2, 0xdb, 0x53, 0x6d, 0xb1, + 0xbe, 0x25, 0xe9, 0x8d, ], p_enc: [ 0x02, 0x56, 0x4f, 0xc3, 0x81, 0xfc, 0x4d, 0xc8, 0x11, 0x8d, 0xe4, 0x7c, 0x10, 0xb8, @@ -1424,69 +1430,70 @@ pub(crate) fn test_vectors() -> Vec { 0x1a, 0x81, 0xa3, 0x59, ], c_enc: [ - 0xea, 0x86, 0x7e, 0x07, 0xac, 0xb7, 0xfa, 0x03, 0xe7, 0x36, 0xce, 0xdd, 0xed, 0x82, - 0x3d, 0x19, 0x91, 0x30, 0xfb, 0x3f, 0xef, 0x62, 0xcc, 0x3e, 0xa9, 0xa0, 0xc9, 0x35, - 0xdf, 0x05, 0xc5, 0xad, 0x5e, 0x67, 0xf7, 0x4f, 0xcb, 0xa6, 0x67, 0xe0, 0x81, 0x1c, - 0xdc, 0x0c, 0xa9, 0xf3, 0xd7, 0x81, 0x76, 0x43, 0x75, 0x56, 0x47, 0xbe, 0x59, 0xdf, - 0x09, 0x6e, 0x46, 0x5e, 0xc1, 0x11, 0x24, 0x36, 0x3c, 0x98, 0x1c, 0x55, 0xd5, 0x5f, - 0x8d, 0x8a, 0xc8, 0xb6, 0x54, 0x0a, 0x98, 0xcf, 0xcc, 0x29, 0x4a, 0xa7, 0xcc, 0x62, - 0x95, 0x50, 0x85, 0x3a, 0x25, 0xbf, 0x6b, 0x32, 0x35, 0x16, 0xe1, 0x58, 0x2b, 0x4e, - 0x8b, 0x82, 0x95, 0xe2, 0x7f, 0x6b, 0x99, 0x94, 0x80, 0x2e, 0xfe, 0xf5, 0x43, 0x1f, - 0x03, 0x7d, 0x22, 0x09, 0xa0, 0x88, 0x07, 0x34, 0x6f, 0xb3, 0x9c, 0xad, 0xd8, 0x93, - 0xd6, 0x5f, 0x64, 0xc7, 0xfe, 0x92, 0xec, 0xbc, 0xdf, 0xe5, 0x55, 0x54, 0xca, 0xff, - 0xb0, 0xcf, 0x41, 0xeb, 0x5c, 0x55, 0x72, 0xba, 0x44, 0x39, 0x90, 0x00, 0xe9, 0xfa, - 0x9a, 0xaf, 0x6e, 0xb7, 0x6c, 0x2a, 0x8a, 0x5d, 0x7b, 0x6b, 0x52, 0xb9, 0xa9, 0xef, - 0x6e, 0xc3, 0xed, 0xa6, 0x65, 0xfe, 0x8a, 0xa8, 0x07, 0x48, 0xb8, 0x1f, 0x7d, 0x55, - 0x96, 0xf1, 0x94, 0x2f, 0xf7, 0x1d, 0x29, 0xc6, 0x78, 0xa3, 0xb6, 0xc6, 0x6b, 0xa7, - 0x0f, 0x45, 0xb1, 0xfc, 0xf2, 0x22, 0x38, 0x84, 0x50, 0x68, 0xf3, 0x60, 0xb0, 0x99, - 0xae, 0xe9, 0xf2, 0xf0, 0xef, 0x22, 0x33, 0x3f, 0xd6, 0x4f, 0xf1, 0x1e, 0x48, 0x15, - 0x43, 0xa5, 0x2b, 0xb3, 0x3f, 0x52, 0x3d, 0xe2, 0xec, 0x92, 0x3a, 0xe9, 0x86, 0x58, - 0x57, 0x71, 0x7b, 0x65, 0xd4, 0x4c, 0x3d, 0x9d, 0xb7, 0xb3, 0xec, 0xb2, 0xff, 0x02, - 0x25, 0x29, 0x7d, 0xeb, 0x83, 0xdd, 0x1b, 0x9a, 0x39, 0x4d, 0x69, 0x7c, 0x09, 0xd7, - 0xfe, 0xc6, 0x1e, 0xac, 0xee, 0x39, 0xa2, 0xf1, 0xce, 0xd9, 0xe6, 0xfd, 0xa5, 0xc0, - 0xf3, 0x27, 0x71, 0xc6, 0xce, 0x3f, 0x17, 0xbe, 0x0e, 0xef, 0x81, 0x10, 0x99, 0xc1, - 0x09, 0xe4, 0xfb, 0x6a, 0xec, 0x30, 0xdf, 0x04, 0x5b, 0x43, 0xda, 0x89, 0x30, 0x8b, - 0xc8, 0x37, 0x68, 0x8b, 0xb0, 0xf4, 0xa2, 0xc6, 0x04, 0xa1, 0x54, 0xa8, 0x47, 0xc5, - 0xd7, 0x87, 0x27, 0xf0, 0xe1, 0xab, 0x11, 0xe3, 0x40, 0xcf, 0xd4, 0xc7, 0xe8, 0xc6, - 0xba, 0xff, 0xfe, 0xfc, 0x74, 0xef, 0x55, 0x3d, 0x4b, 0x29, 0x26, 0x9f, 0x38, 0xb4, - 0xb7, 0xfe, 0x6e, 0x07, 0x3a, 0x70, 0xae, 0xf2, 0x0d, 0x6c, 0x23, 0x8b, 0x9f, 0xfd, - 0x24, 0x1f, 0xf6, 0x99, 0x99, 0x92, 0x30, 0xf0, 0xb3, 0x9c, 0x96, 0x3e, 0xfa, 0x00, - 0xef, 0x7f, 0x09, 0x2d, 0x76, 0x0c, 0x40, 0x9a, 0x2b, 0x6c, 0x26, 0xb4, 0x97, 0x82, - 0x9b, 0x81, 0xcb, 0xa4, 0xc8, 0x3b, 0x11, 0x44, 0xc6, 0x5a, 0x2d, 0x31, 0x78, 0xbb, - 0x28, 0xc1, 0xd8, 0xe3, 0x30, 0xd3, 0xf4, 0xaf, 0x90, 0x10, 0xad, 0x49, 0xa5, 0xdb, - 0x70, 0xd6, 0x6a, 0xf5, 0x70, 0x19, 0x21, 0x49, 0x80, 0x5f, 0xe1, 0xca, 0x61, 0xc6, - 0xd4, 0xec, 0xaf, 0xa7, 0x97, 0x51, 0x7f, 0x33, 0x06, 0xaf, 0x2a, 0x32, 0x27, 0x3b, - 0xf3, 0xd6, 0x98, 0xaa, 0x55, 0xa5, 0x72, 0xb2, 0xdf, 0x80, 0x36, 0xd9, 0x7c, 0xf5, - 0x8c, 0x12, 0x9f, 0x82, 0x85, 0xd0, 0xd7, 0xea, 0x04, 0xc1, 0x88, 0xa8, 0x39, 0x6e, - 0x73, 0x8b, 0xd4, 0x48, 0x46, 0x5e, 0x7b, 0x9a, 0x64, 0xb7, 0x96, 0x7b, 0xcb, 0x25, - 0xf8, 0xaa, 0x85, 0x9e, 0xa5, 0xca, 0x06, 0xc3, 0xdf, 0x39, 0x0f, 0xac, 0x8a, 0xc6, - 0x06, 0x05, 0x03, 0x1a, 0x02, 0x09, 0xbb, 0x80, 0x24, 0x0d, 0x05, 0x45, 0xf4, 0x11, - 0x77, 0xea, 0xb4, 0x40, 0x2e, 0x8a, 0x42, 0x3a, 0x40, 0xcc, 0xff, 0x58, 0x6b, 0x2e, - 0xdd, 0x6a, 0xcf, 0xb8, 0xf1, 0xd8, 0x0d, 0x8c, 0x60, 0x5f, 0x49, 0x05, 0x2e, 0x7a, - 0x30, 0x82, 0x6e, 0x1f, 0x03, 0x09, 0x9c, 0x71, 0x43, 0xad, 0x0b, 0x51, 0xfc, 0x63, - 0x6f, 0x1d, 0x87, 0x05, 0x83, 0xd6, 0xed, 0xce, 0xcd, 0xe9, 0x42, 0x38, 0x9e, 0x6c, - 0x01, 0x00, 0x66, 0x78, 0xda, 0xad, + 0x77, 0xc6, 0xef, 0xc8, 0xb5, 0x42, 0xa7, 0x07, 0xc0, 0xa5, 0xcf, 0x5c, 0xe3, 0xf3, + 0xb9, 0x6d, 0xe1, 0x91, 0x95, 0x7c, 0x9f, 0xa6, 0xe9, 0xbb, 0x4b, 0x8d, 0x89, 0x9e, + 0x1f, 0x19, 0xe0, 0x20, 0xba, 0x7b, 0xb3, 0xfe, 0xf1, 0x67, 0x81, 0xc8, 0x8c, 0xc5, + 0xd4, 0x4a, 0x5e, 0xf8, 0x17, 0x31, 0x47, 0xdc, 0x3d, 0x1b, 0x51, 0x6a, 0xf6, 0xdd, + 0x77, 0xdd, 0xb6, 0xee, 0x67, 0xaa, 0xf5, 0x42, 0xce, 0xe2, 0xbe, 0xd3, 0xe4, 0xa0, + 0x7e, 0xce, 0x42, 0x8f, 0x22, 0xa8, 0x01, 0xcf, 0x01, 0xba, 0xad, 0x18, 0x27, 0xfd, + 0x42, 0x57, 0x46, 0xc5, 0x45, 0x00, 0x1c, 0x35, 0x6d, 0x0a, 0xbe, 0xaa, 0xa5, 0xa4, + 0x22, 0xdf, 0xff, 0x0e, 0xe2, 0x18, 0xac, 0x37, 0xef, 0x83, 0x97, 0xc6, 0x2c, 0xa8, + 0x6f, 0xab, 0xeb, 0xb6, 0x88, 0xb3, 0x8f, 0xb4, 0xa6, 0x54, 0x29, 0x11, 0xbe, 0x1c, + 0x5e, 0x71, 0x77, 0x8b, 0x5e, 0xb5, 0x3a, 0xf1, 0xc4, 0xcb, 0x4d, 0xd9, 0x94, 0x72, + 0x4f, 0x61, 0x0f, 0x38, 0x72, 0x4a, 0x73, 0xdf, 0x09, 0x2b, 0xea, 0xe8, 0xb8, 0x7f, + 0x7f, 0x6a, 0x2b, 0xc0, 0x9d, 0xf2, 0xaa, 0x18, 0xc2, 0xf8, 0xee, 0xba, 0x63, 0xee, + 0x0d, 0x31, 0x35, 0x3b, 0x6f, 0x28, 0x3e, 0xf5, 0x9a, 0xc1, 0x53, 0x60, 0x73, 0xda, + 0x7a, 0x6d, 0x82, 0xbf, 0xdc, 0x09, 0x74, 0x02, 0x08, 0x0f, 0xa1, 0x03, 0xcb, 0x8b, + 0x3e, 0xfb, 0x94, 0x1e, 0xe5, 0x01, 0xf6, 0x41, 0x2c, 0xfb, 0xc2, 0x50, 0xaf, 0xad, + 0xbe, 0x54, 0x4a, 0xc5, 0x1f, 0xce, 0x41, 0x5a, 0x24, 0x93, 0xba, 0x83, 0x9e, 0x38, + 0x18, 0xb0, 0xfe, 0x30, 0x18, 0xbf, 0xa4, 0x37, 0xf0, 0x6e, 0x31, 0x86, 0x14, 0x8a, + 0xa4, 0x05, 0xba, 0xb8, 0x21, 0xa2, 0x6e, 0xa0, 0x7f, 0x93, 0xcf, 0xe7, 0x56, 0x8f, + 0xe3, 0xef, 0x08, 0xfa, 0x0b, 0x80, 0xfc, 0xec, 0x5b, 0xd5, 0x91, 0x5f, 0x68, 0x8c, + 0xf5, 0x99, 0x31, 0x5e, 0x79, 0xaa, 0xea, 0x34, 0xd5, 0x18, 0xd9, 0x55, 0xfe, 0xef, + 0x30, 0x3f, 0x69, 0xb2, 0x87, 0xc6, 0xd0, 0x51, 0x6d, 0xa2, 0x39, 0xfb, 0xbd, 0xdb, + 0xaf, 0x25, 0x56, 0xeb, 0xce, 0x77, 0xa3, 0xd5, 0x97, 0x23, 0x5c, 0x22, 0xd3, 0x8c, + 0x5b, 0x5e, 0xeb, 0x98, 0xc7, 0xc0, 0x8d, 0xa8, 0xd3, 0x76, 0xbb, 0xa1, 0xb5, 0x07, + 0x85, 0xbe, 0x82, 0xbf, 0xe0, 0x9a, 0xe7, 0x1c, 0xcc, 0xaf, 0x31, 0xa2, 0xf0, 0xcf, + 0xa0, 0x76, 0xd1, 0xe4, 0xd1, 0xb5, 0x2f, 0xee, 0x45, 0xc8, 0xed, 0x23, 0xdf, 0x33, + 0xa8, 0x1c, 0xb1, 0xa8, 0xac, 0xec, 0x9f, 0x53, 0x5d, 0xa4, 0x96, 0x70, 0xf9, 0x98, + 0x6d, 0x5c, 0x92, 0xc8, 0x2b, 0x0a, 0xd2, 0x20, 0xf8, 0x5f, 0x3b, 0x38, 0x72, 0xeb, + 0xe0, 0x53, 0xcd, 0xeb, 0x96, 0x1b, 0xd2, 0xd3, 0xab, 0x3b, 0xcd, 0x67, 0x6e, 0x6f, + 0xd7, 0xcb, 0xe9, 0x79, 0x5e, 0x1f, 0x2d, 0x82, 0x87, 0x00, 0x7c, 0x91, 0x0e, 0x7b, + 0x43, 0x01, 0x69, 0xe4, 0x51, 0xf0, 0xb2, 0xd7, 0x63, 0xe5, 0x43, 0x03, 0x3b, 0xc6, + 0xc7, 0x38, 0x9f, 0xa1, 0x61, 0x5b, 0xa1, 0x9d, 0x1f, 0x27, 0x48, 0xb2, 0x17, 0xc9, + 0x60, 0xfe, 0x05, 0x04, 0x07, 0xc8, 0xf4, 0x73, 0x35, 0x6b, 0xaa, 0x6e, 0x0c, 0x7d, + 0x77, 0xfa, 0xc6, 0xc7, 0xdb, 0x45, 0x12, 0xaf, 0x57, 0x96, 0xb3, 0xbc, 0xf1, 0x23, + 0xe0, 0x90, 0xb9, 0x80, 0xeb, 0xc2, 0xd6, 0x4b, 0x86, 0xdd, 0x24, 0xcb, 0x9a, 0x6d, + 0xab, 0x1d, 0xb4, 0x13, 0x04, 0x75, 0x38, 0x90, 0x2e, 0x2e, 0x49, 0x0e, 0x4f, 0xc8, + 0x78, 0xaa, 0x04, 0xdb, 0xef, 0x66, 0x99, 0x63, 0x9c, 0x3d, 0xab, 0x17, 0xc5, 0x14, + 0x70, 0x48, 0xac, 0x6d, 0x48, 0x49, 0x0d, 0xc4, 0x88, 0x5e, 0xd9, 0x86, 0x70, 0x63, + 0x35, 0xf4, 0x1b, 0xa4, 0x15, 0x59, 0x65, 0x9e, 0x1b, 0x53, 0xda, 0x76, 0x51, 0x4c, + 0xc4, 0x0a, 0xdb, 0x66, 0xc3, 0x5c, 0xe5, 0x6f, 0x3a, 0xbe, 0x39, 0xe1, 0xae, 0xe5, + 0x84, 0x9f, 0xff, 0xcc, 0x6e, 0x1f, 0x1b, 0xf8, 0x11, 0xce, 0xb6, 0x65, 0xa6, 0xfc, + 0xf8, 0x80, 0x6b, 0xbb, 0xba, 0x4a, 0x5b, 0x87, 0x38, 0xa1, 0x17, 0xdc, 0xaf, 0xfb, + 0x4f, 0xdf, 0x10, 0x08, 0x00, 0x6f, ], ock: [ - 0xf9, 0x59, 0x87, 0xcc, 0x0c, 0x73, 0x57, 0xc7, 0x20, 0x26, 0x27, 0xa5, 0xa5, 0x50, - 0x09, 0xef, 0xd7, 0x17, 0x55, 0x3e, 0x9d, 0x34, 0xc1, 0x5f, 0xad, 0xf5, 0xc9, 0x46, - 0xa9, 0xa0, 0x72, 0x17, + 0xb4, 0xf8, 0x8a, 0x29, 0x2d, 0x09, 0xd9, 0x35, 0xb4, 0x77, 0x5a, 0x29, 0x30, 0xeb, + 0x38, 0xce, 0xbd, 0x5a, 0xf6, 0xff, 0x3f, 0x39, 0xef, 0x5b, 0xb2, 0x4c, 0xd5, 0x72, + 0x81, 0xf0, 0x8c, 0xfb, ], op: [ 0xae, 0xee, 0xa5, 0x0c, 0x6b, 0xb0, 0x2e, 0x5e, 0x22, 0x4d, 0xc2, 0x95, 0x9c, 0x22, 0x9d, 0x0e, 0x3b, 0xb8, 0x79, 0xc4, 0xab, 0x00, 0xaa, 0x0a, 0xb2, 0x5a, 0x40, 0x10, - 0x6b, 0x80, 0xbb, 0xb7, 0xec, 0x99, 0xeb, 0x6f, 0x67, 0x1d, 0x0a, 0x9e, 0x84, 0x5a, - 0xbf, 0xb7, 0x8a, 0xec, 0xe9, 0x32, 0xeb, 0x13, 0xf5, 0xae, 0xd6, 0x4f, 0x20, 0xa7, - 0x77, 0xc9, 0x46, 0xe9, 0xcd, 0x7a, 0x24, 0x23, + 0x6b, 0x80, 0xbb, 0xb7, 0x19, 0xe0, 0x26, 0x4b, 0x82, 0x88, 0xf7, 0x3e, 0xbf, 0x97, + 0x14, 0xb0, 0xdf, 0x85, 0x8e, 0xf7, 0xab, 0x39, 0xec, 0x50, 0x2c, 0xd2, 0x98, 0xf2, + 0xc4, 0x84, 0xa9, 0xf4, 0xc7, 0xda, 0x74, 0x36, ], c_out: [ - 0x28, 0x9d, 0x00, 0xd4, 0x62, 0x78, 0x0b, 0xdb, 0xb6, 0xcd, 0x6c, 0xec, 0x93, 0x6b, - 0xe6, 0x5e, 0x63, 0x0d, 0x4a, 0x3c, 0x2a, 0xf7, 0x6e, 0x10, 0x4b, 0x17, 0x4e, 0x3d, - 0x5b, 0x71, 0x66, 0x39, 0xb0, 0x68, 0xb3, 0x85, 0x00, 0xd8, 0x04, 0x00, 0xee, 0x64, - 0x2f, 0x8e, 0x08, 0xc8, 0xdb, 0x29, 0xff, 0xd5, 0xa9, 0xda, 0xde, 0x84, 0xa5, 0x49, - 0x5d, 0x57, 0x7b, 0x2f, 0x56, 0xd3, 0x2b, 0x07, 0x96, 0xca, 0x23, 0xf0, 0x0f, 0x0f, - 0x8e, 0xf9, 0x93, 0x07, 0x4f, 0x88, 0x0d, 0x6a, 0xeb, 0xcb, - ], + 0x94, 0xe3, 0x7f, 0xd6, 0x62, 0x82, 0xc0, 0x2e, 0x90, 0xe7, 0x69, 0x91, 0x4c, 0xaf, + 0x95, 0xa4, 0x95, 0xf4, 0x89, 0x7f, 0x55, 0xa5, 0xae, 0x95, 0xad, 0xe8, 0xbf, 0x67, + 0x61, 0xe3, 0x1b, 0xa5, 0xd1, 0xcf, 0xeb, 0x30, 0x6f, 0x4e, 0x22, 0x01, 0x42, 0x51, + 0xcb, 0xe3, 0xf8, 0x72, 0x4b, 0xe7, 0x69, 0x21, 0xe2, 0xad, 0xa4, 0x6e, 0x3b, 0x14, + 0x5d, 0x1b, 0x04, 0x3e, 0xb1, 0x2a, 0x0e, 0xfa, 0xb5, 0x16, 0x09, 0x34, 0xbc, 0x75, + 0x9e, 0x02, 0x01, 0xd8, 0x66, 0xad, 0xa7, 0x44, 0x35, 0x71, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -1560,34 +1567,34 @@ pub(crate) fn test_vectors() -> Vec { 0xe2, 0x3c, 0x39, 0x11, ], rho: [ - 0x35, 0x6f, 0xc7, 0x2e, 0x1b, 0xf1, 0xe3, 0xa2, 0xa5, 0x9a, 0xa9, 0xe4, 0x75, 0x15, - 0x5c, 0xf7, 0x43, 0xf8, 0xfd, 0xf0, 0xd1, 0x5b, 0x4c, 0xc4, 0x02, 0x60, 0xd0, 0xd0, - 0x9a, 0xda, 0x04, 0x08, + 0xbd, 0xda, 0xe8, 0xdf, 0xf1, 0x20, 0x5e, 0x04, 0x96, 0x8f, 0xae, 0x1f, 0xd9, 0xbe, + 0x51, 0xd8, 0x25, 0xf5, 0xd8, 0x78, 0x1d, 0x93, 0x3d, 0x0f, 0x5b, 0xce, 0x9c, 0xa8, + 0x3e, 0xe8, 0xed, 0x20, ], cmx: [ - 0xca, 0xa2, 0x8a, 0x69, 0x04, 0x54, 0x66, 0x37, 0xa7, 0xd4, 0xe5, 0xfb, 0xc2, 0x65, - 0x4c, 0xbf, 0x24, 0x4d, 0x18, 0x77, 0x9d, 0x35, 0x62, 0x25, 0x6c, 0x14, 0xd5, 0xb1, - 0x00, 0x5d, 0xc6, 0x0f, + 0xbe, 0x43, 0xee, 0x84, 0x70, 0x70, 0x75, 0xac, 0x48, 0x08, 0xd0, 0x97, 0x54, 0x07, + 0xc0, 0x27, 0x36, 0xd7, 0x66, 0x64, 0xf4, 0xe7, 0xae, 0xce, 0x01, 0xd9, 0xcc, 0x68, + 0x32, 0x4a, 0xe9, 0x04, ], esk: [ - 0x01, 0xa3, 0x66, 0x1e, 0xa9, 0xaa, 0xb8, 0xf4, 0x32, 0x53, 0x42, 0x0e, 0xff, 0xd7, - 0xa4, 0x83, 0xc2, 0x79, 0xd4, 0x18, 0x18, 0xbc, 0xb3, 0xee, 0x91, 0x90, 0x01, 0xf8, - 0x66, 0xa8, 0xe9, 0x2c, + 0xf9, 0xf7, 0xa0, 0x10, 0x5e, 0xa9, 0xf4, 0x45, 0xfb, 0x7a, 0x14, 0x49, 0x72, 0x62, + 0xc6, 0xe4, 0xd7, 0x32, 0x89, 0x32, 0x7b, 0x8a, 0x2d, 0xf5, 0xe2, 0x63, 0xf3, 0xe3, + 0x99, 0x07, 0xea, 0x0c, ], ephemeral_key: [ - 0x00, 0x62, 0x7e, 0x29, 0xc1, 0x83, 0x3e, 0x4e, 0x8f, 0xad, 0xe0, 0x82, 0x52, 0xf3, - 0x83, 0x67, 0x78, 0xb9, 0x39, 0x4c, 0x1f, 0xfe, 0xab, 0x70, 0xbf, 0x35, 0x93, 0xd5, - 0x9a, 0x81, 0xa0, 0xa5, + 0xfa, 0x19, 0xa1, 0x52, 0x7b, 0x76, 0x04, 0x8f, 0xf3, 0x7f, 0xa4, 0xf8, 0x27, 0x89, + 0xfe, 0x80, 0xb0, 0xcd, 0xd3, 0x5d, 0x5d, 0xa9, 0xc2, 0xec, 0x3f, 0xe3, 0x04, 0x38, + 0x05, 0xc0, 0x61, 0x23, ], shared_secret: [ - 0xa9, 0x93, 0x34, 0x1f, 0x99, 0xeb, 0xa8, 0x2d, 0xb6, 0xec, 0x5e, 0x71, 0x3e, 0xe2, - 0x9c, 0x01, 0xf4, 0xce, 0x2a, 0x8b, 0xb6, 0xb5, 0xeb, 0xb6, 0x0b, 0xa6, 0xeb, 0xa9, - 0x6b, 0xa4, 0x17, 0x9b, + 0x2d, 0xb5, 0xb8, 0x92, 0xb6, 0x1b, 0x9c, 0x55, 0x3b, 0x6c, 0x9b, 0x7a, 0xcc, 0x7d, + 0x71, 0x05, 0xc1, 0xdd, 0x4c, 0x28, 0xc6, 0x7f, 0x97, 0x8b, 0x6d, 0x79, 0xc7, 0x1b, + 0x98, 0xa0, 0xd0, 0x00, ], k_enc: [ - 0x35, 0x81, 0x19, 0x19, 0x3c, 0x9d, 0x2a, 0xb6, 0xd4, 0x95, 0xe0, 0x19, 0xf9, 0x7a, - 0x1c, 0x41, 0x30, 0xae, 0xe6, 0x3d, 0xae, 0xc6, 0xbb, 0xa2, 0xf2, 0x74, 0x40, 0x0f, - 0xd3, 0x4f, 0xad, 0x28, + 0x16, 0xe3, 0xf9, 0x85, 0xc0, 0x7f, 0xef, 0xe5, 0x30, 0xd9, 0xe6, 0x94, 0x5e, 0xde, + 0xc1, 0x90, 0x3b, 0xb1, 0xca, 0x8d, 0xa5, 0xa2, 0x5b, 0xe9, 0x59, 0x78, 0x63, 0x7a, + 0x40, 0x8c, 0x2e, 0xfe, ], p_enc: [ 0x02, 0xc6, 0xe8, 0xf0, 0xd5, 0x0a, 0xe8, 0x05, 0x87, 0x91, 0xdc, 0x0e, 0x46, 0x49, @@ -1633,69 +1640,70 @@ pub(crate) fn test_vectors() -> Vec { 0x84, 0x37, 0x3f, 0x4f, ], c_enc: [ - 0x31, 0xac, 0xda, 0xa6, 0xc1, 0x76, 0xbb, 0x7a, 0x2c, 0x7d, 0x66, 0x09, 0xdc, 0x2c, - 0x5e, 0x7b, 0x2e, 0xe7, 0x1d, 0xa9, 0x3c, 0x73, 0x87, 0x52, 0x74, 0xfa, 0x6c, 0x2a, - 0xd6, 0x26, 0x13, 0xc7, 0x18, 0x9b, 0x35, 0x33, 0xec, 0xf0, 0x34, 0xd8, 0x76, 0xc7, - 0x26, 0xf1, 0xed, 0x99, 0x43, 0xd4, 0x45, 0x07, 0x87, 0x52, 0x75, 0xa8, 0xe3, 0x71, - 0x0a, 0x11, 0x8d, 0x91, 0x64, 0x72, 0x91, 0x28, 0x6c, 0xf8, 0x80, 0xa7, 0x82, 0xab, - 0xea, 0xa8, 0xa6, 0xc3, 0x2f, 0xdf, 0x6f, 0x30, 0x4b, 0x0e, 0xe5, 0xbc, 0xb1, 0x4b, - 0x82, 0x79, 0x2a, 0xa3, 0xaf, 0xd7, 0x24, 0x3f, 0x57, 0xb7, 0xdc, 0xa7, 0x93, 0x52, - 0x19, 0xdf, 0x98, 0x2c, 0xe1, 0x28, 0xae, 0xa6, 0xf6, 0xbd, 0x18, 0xe1, 0x30, 0x7e, - 0xba, 0x0e, 0x3d, 0xb0, 0x06, 0x14, 0xc2, 0x65, 0xc6, 0xf2, 0x8b, 0xfe, 0x58, 0xc1, - 0x1d, 0x4a, 0xc9, 0x6d, 0x49, 0x02, 0x96, 0x7b, 0x54, 0xbc, 0x5d, 0xd1, 0x5c, 0x14, - 0x3f, 0xf4, 0x2b, 0xbb, 0x62, 0xb9, 0x34, 0xb0, 0x9e, 0x79, 0xb6, 0x1e, 0xaf, 0xe7, - 0x9a, 0xbc, 0x86, 0x94, 0x47, 0x5b, 0x6c, 0x8e, 0x19, 0x94, 0xba, 0x05, 0x5e, 0xa3, - 0xc1, 0x82, 0x93, 0xb0, 0x3c, 0x42, 0x49, 0x50, 0x1d, 0xfd, 0xc0, 0x14, 0x60, 0xcf, - 0x78, 0xcd, 0x97, 0x51, 0x30, 0xae, 0x34, 0x05, 0xba, 0x7d, 0xdc, 0x71, 0x30, 0xcb, - 0xdb, 0xb9, 0x8c, 0x7a, 0xaf, 0x6b, 0x1d, 0x0b, 0x44, 0xa5, 0x16, 0x79, 0xaa, 0x63, - 0x0a, 0x43, 0xae, 0x23, 0xb3, 0xd2, 0x2f, 0x73, 0x4c, 0xe1, 0xdb, 0xed, 0xea, 0x17, - 0x5a, 0x00, 0x62, 0xb0, 0x6e, 0x23, 0xf4, 0xd0, 0x6d, 0x2a, 0xd0, 0x45, 0xae, 0x98, - 0x2d, 0xb4, 0x34, 0x8f, 0x20, 0xc8, 0x9b, 0xf9, 0x67, 0x0e, 0x2f, 0xda, 0x47, 0x2e, - 0x55, 0xce, 0x4c, 0x35, 0x82, 0xb7, 0x64, 0x43, 0xe0, 0xab, 0xbb, 0x77, 0x8a, 0xec, - 0xa0, 0xf3, 0x9c, 0x55, 0xb6, 0xab, 0xbe, 0xd8, 0x1f, 0xde, 0x89, 0xad, 0x2c, 0x56, - 0x7d, 0xfe, 0x27, 0x7b, 0xb2, 0x69, 0xac, 0x6a, 0xe0, 0xe1, 0x88, 0x39, 0x8d, 0xea, - 0x24, 0xad, 0xcc, 0xe1, 0x82, 0xe7, 0xfd, 0xdc, 0x80, 0xeb, 0xd7, 0x69, 0xd0, 0xf0, - 0x76, 0xf9, 0xaf, 0x2d, 0xd9, 0x83, 0x07, 0xa5, 0x27, 0xc6, 0x99, 0x42, 0xdf, 0xa3, - 0xe7, 0xf4, 0x86, 0x76, 0x10, 0x1a, 0x47, 0xeb, 0x07, 0x80, 0xb6, 0x90, 0xb1, 0xaf, - 0x10, 0xfc, 0xfb, 0x5e, 0xe2, 0xbd, 0x40, 0xd2, 0x7d, 0x10, 0x9b, 0xa1, 0x5a, 0xb0, - 0xb1, 0xe9, 0x55, 0x4f, 0xdd, 0xfa, 0x81, 0x6b, 0x99, 0xcd, 0x8f, 0xdd, 0xe6, 0x81, - 0xae, 0x6b, 0x6c, 0xbb, 0xfb, 0xf0, 0x2c, 0x36, 0x32, 0x68, 0xd0, 0xf3, 0xc6, 0xa7, - 0x26, 0x1b, 0x6d, 0x00, 0x87, 0xbc, 0xad, 0xb6, 0xfb, 0x9b, 0xf3, 0x93, 0x04, 0xfc, - 0x08, 0x41, 0x5d, 0x83, 0x6f, 0xe4, 0x09, 0xa4, 0x3f, 0xaf, 0x9e, 0x28, 0xfb, 0x48, - 0x3f, 0x4a, 0x47, 0xaa, 0xd7, 0xe1, 0xf7, 0x97, 0x30, 0xb3, 0x21, 0x53, 0x60, 0x80, - 0xdb, 0x35, 0x12, 0x48, 0xb2, 0x66, 0x9b, 0x6e, 0x74, 0x48, 0x90, 0x87, 0xae, 0x72, - 0xba, 0x15, 0xd2, 0xae, 0xdd, 0x0c, 0x1e, 0x7e, 0xb1, 0x5a, 0x2f, 0x5a, 0x77, 0x31, - 0xeb, 0x45, 0xa6, 0x17, 0x8a, 0x44, 0x87, 0x09, 0x31, 0xec, 0x8e, 0x34, 0x8c, 0x19, - 0x2b, 0xc8, 0x87, 0xc8, 0x63, 0x60, 0x56, 0x67, 0x6f, 0x58, 0xd0, 0xc6, 0x34, 0xfc, - 0x99, 0xea, 0x7b, 0x07, 0xfa, 0x1b, 0x62, 0x99, 0xae, 0x5d, 0xbf, 0xe0, 0x84, 0x45, - 0xad, 0x99, 0x9f, 0x45, 0xdf, 0x00, 0xf1, 0xa4, 0x7a, 0xa5, 0xef, 0x6f, 0x88, 0xcd, - 0xba, 0x80, 0xc8, 0x8f, 0x94, 0x01, 0xe6, 0xe9, 0x09, 0xca, 0x2c, 0x5d, 0xe2, 0xcf, - 0x8f, 0x6a, 0x98, 0x44, 0xca, 0x32, 0xfe, 0x91, 0xf7, 0x13, 0xfe, 0x10, 0xa0, 0x69, - 0x8a, 0x1b, 0x3b, 0xfd, 0xf4, 0x47, 0x43, 0x75, 0xb4, 0x79, 0x1d, 0xc8, 0x50, 0x50, - 0xc9, 0x28, 0x90, 0x0e, 0x73, 0x1f, 0x7c, 0x4a, 0x12, 0x9d, 0x8e, 0x21, 0xfc, 0xf4, - 0x17, 0x62, 0x7c, 0x47, 0xdd, 0xc9, 0xf5, 0x88, 0x40, 0x38, 0x41, 0x31, 0x7a, 0x9a, - 0xc2, 0x6e, 0xef, 0x6c, 0xda, 0x23, + 0x2d, 0x40, 0x4a, 0x68, 0x81, 0xa6, 0xee, 0x76, 0x0c, 0xb5, 0x3b, 0x9c, 0xc2, 0x71, + 0x5c, 0xa7, 0x6a, 0x3a, 0x2f, 0xc9, 0x69, 0x3b, 0x1a, 0xbb, 0xcd, 0xc7, 0x5c, 0xb6, + 0xd6, 0xc3, 0x6e, 0xcf, 0x84, 0xd6, 0x93, 0x67, 0x2c, 0x53, 0xce, 0xd8, 0x79, 0x8c, + 0xc8, 0xf1, 0xe5, 0x3b, 0x8a, 0x9d, 0xe7, 0xbb, 0xb5, 0xe8, 0xc5, 0xa4, 0x6c, 0x3a, + 0x74, 0x12, 0xdf, 0x11, 0xc5, 0xda, 0x16, 0xb4, 0xdd, 0x22, 0x90, 0x1a, 0x59, 0x2b, + 0x0e, 0x93, 0x29, 0x77, 0xba, 0x06, 0x67, 0x3d, 0x6f, 0xd0, 0x38, 0xac, 0xba, 0xa9, + 0xbf, 0x79, 0xc1, 0x5b, 0xa6, 0x2b, 0x6e, 0x30, 0x74, 0xef, 0x95, 0x3b, 0x81, 0x4c, + 0xf1, 0xbd, 0xf0, 0x15, 0x77, 0xed, 0x3e, 0x3f, 0xae, 0xf4, 0x71, 0x55, 0xc9, 0x1c, + 0x68, 0xee, 0x32, 0x88, 0x1b, 0x73, 0x74, 0x94, 0xb3, 0xb4, 0x76, 0x08, 0x3b, 0x3b, + 0xd1, 0x77, 0x93, 0xc4, 0x98, 0x93, 0x1e, 0xaa, 0x92, 0xb1, 0x7c, 0x7d, 0x10, 0x47, + 0x58, 0xfc, 0x8b, 0x34, 0x93, 0xd2, 0x47, 0x41, 0x7f, 0x5e, 0xc1, 0x97, 0x9a, 0x35, + 0x28, 0x93, 0xe9, 0x95, 0x63, 0xb6, 0xc3, 0xab, 0x95, 0xcc, 0x5a, 0xfa, 0x37, 0x32, + 0xef, 0xae, 0xce, 0x9e, 0x74, 0x32, 0xc8, 0x04, 0x15, 0xe2, 0x5f, 0x55, 0x56, 0x53, + 0xc7, 0xda, 0x5d, 0xb0, 0xcc, 0x61, 0x08, 0x74, 0x21, 0x95, 0x9b, 0xb1, 0xdf, 0x80, + 0x03, 0xb7, 0x3d, 0xa0, 0xbe, 0xf0, 0x60, 0xf3, 0xa8, 0x4c, 0x8b, 0xc2, 0x4c, 0xc7, + 0x6d, 0x0d, 0x9e, 0x9c, 0x33, 0x76, 0x5c, 0x20, 0xf0, 0x7d, 0x80, 0xe2, 0x0f, 0xdf, + 0x27, 0x81, 0x5d, 0xbd, 0x9d, 0x71, 0x7c, 0x09, 0x66, 0xf8, 0x0b, 0x94, 0xb9, 0x59, + 0x15, 0x08, 0x1e, 0xa4, 0x55, 0x37, 0xa5, 0xa0, 0x74, 0xb9, 0xc9, 0x4b, 0x43, 0xdd, + 0xf4, 0xa9, 0xcb, 0xad, 0xe9, 0x04, 0x51, 0x0e, 0xaa, 0x96, 0x9e, 0x66, 0x6c, 0x94, + 0x34, 0xb9, 0xf6, 0x3e, 0xae, 0x62, 0xad, 0x58, 0x27, 0x99, 0x62, 0xe9, 0x41, 0x33, + 0x05, 0x5c, 0xbc, 0xc4, 0xb1, 0x55, 0xc0, 0x0f, 0x1b, 0x83, 0xff, 0x41, 0x28, 0xa8, + 0xab, 0xb4, 0xce, 0x68, 0xe9, 0xf1, 0xe3, 0x08, 0xe6, 0xf9, 0x7e, 0x51, 0x3a, 0xf5, + 0x95, 0x47, 0x1a, 0x16, 0x77, 0xef, 0x78, 0xe9, 0x77, 0x0f, 0x43, 0xad, 0xde, 0x1a, + 0x64, 0x58, 0x6d, 0xe6, 0xa5, 0x87, 0xc3, 0xd6, 0x93, 0xfe, 0xa8, 0xfc, 0xc6, 0xac, + 0xc8, 0x94, 0x96, 0x1e, 0x2f, 0x47, 0xb2, 0x02, 0xe8, 0x6a, 0x57, 0x38, 0x79, 0xb5, + 0xbf, 0xd7, 0x29, 0xda, 0x2f, 0xbe, 0xfc, 0x64, 0x5c, 0xfa, 0xb1, 0x88, 0x0d, 0x51, + 0x76, 0x40, 0xdf, 0x5f, 0x53, 0xe5, 0x7c, 0x72, 0xd6, 0x5a, 0x63, 0x3a, 0xa5, 0x36, + 0xb2, 0x98, 0x34, 0xbf, 0x28, 0x16, 0xb1, 0xf7, 0x16, 0xbf, 0x43, 0x6d, 0x6b, 0x2b, + 0x6e, 0x47, 0x73, 0x28, 0xc9, 0x58, 0xa6, 0xb8, 0xcf, 0x73, 0xb9, 0x5d, 0x22, 0xf6, + 0x99, 0x3b, 0x3f, 0xc5, 0x25, 0xdb, 0x62, 0x7f, 0x6f, 0x38, 0xd0, 0x77, 0x9a, 0x1d, + 0x39, 0xaf, 0x05, 0xed, 0x74, 0xfd, 0xfe, 0xff, 0x98, 0x7a, 0x95, 0x88, 0xd8, 0x0b, + 0x7e, 0x79, 0x69, 0x4a, 0xe4, 0x55, 0x29, 0x29, 0x88, 0x1c, 0x5b, 0xfe, 0x20, 0x49, + 0x2f, 0xd6, 0xf3, 0x37, 0xca, 0x88, 0xdf, 0xb5, 0x01, 0xe5, 0x45, 0xd2, 0x36, 0x73, + 0xac, 0xac, 0xbc, 0x3d, 0x33, 0x14, 0xa8, 0xbb, 0xf5, 0xec, 0x70, 0xb7, 0x05, 0xcc, + 0x9d, 0x26, 0x57, 0xbd, 0xd5, 0xa7, 0x09, 0x15, 0xbe, 0xf6, 0xd0, 0xf0, 0x39, 0xd3, + 0xeb, 0xa6, 0xbb, 0x71, 0x5b, 0xe5, 0x1e, 0xbf, 0x6e, 0xf6, 0x59, 0xea, 0x32, 0xff, + 0x80, 0xc8, 0x2c, 0x04, 0x21, 0x67, 0x5f, 0xe3, 0x71, 0xef, 0x49, 0xf1, 0xb9, 0xe3, + 0x8f, 0x43, 0x7b, 0x4a, 0x76, 0x55, 0xdc, 0x29, 0x16, 0xaa, 0x30, 0x86, 0xde, 0x6c, + 0x62, 0xa8, 0x2b, 0x36, 0x1c, 0x05, 0x3f, 0xc6, 0x34, 0x54, 0xcc, 0xd0, 0x2c, 0x22, + 0xd4, 0x1f, 0xf5, 0xbb, 0x83, 0x62, 0xde, 0xaa, 0x70, 0x82, 0x5a, 0xd2, 0xf9, 0x93, + 0x63, 0x9f, 0xc4, 0x46, 0x06, 0x9d, 0x78, 0xa6, 0x1d, 0x33, 0x8d, 0xf5, 0x8f, 0x77, + 0x63, 0xe3, 0x55, 0xe6, 0xa9, 0xff, ], ock: [ - 0x9c, 0x10, 0x3d, 0xd5, 0xd6, 0x38, 0x6c, 0xdd, 0x67, 0x69, 0x51, 0xe6, 0x56, 0x4b, - 0x16, 0x6b, 0xc5, 0xc5, 0x72, 0x32, 0xcf, 0xc3, 0x1e, 0x0e, 0x69, 0xce, 0x84, 0xda, - 0xe8, 0x32, 0x76, 0xbe, + 0x8b, 0x0d, 0x29, 0x8e, 0xe8, 0xb4, 0x25, 0x34, 0xa4, 0x2f, 0xb9, 0x63, 0x5b, 0xa7, + 0x58, 0xea, 0x9f, 0x91, 0x8b, 0x83, 0x16, 0xc0, 0xe8, 0x94, 0xa9, 0x08, 0x48, 0x89, + 0x01, 0xd9, 0xfb, 0xa3, ], op: [ 0x8e, 0x66, 0xb7, 0x92, 0xec, 0xb1, 0x56, 0xef, 0x68, 0x5e, 0xe8, 0xea, 0x35, 0xd3, 0x82, 0x75, 0x8b, 0xa4, 0x15, 0x97, 0xa3, 0x3a, 0x93, 0xba, 0xf3, 0x81, 0xd6, 0x3c, - 0x17, 0x5b, 0xa9, 0x8b, 0x01, 0xa3, 0x66, 0x1e, 0xa9, 0xaa, 0xb8, 0xf4, 0x32, 0x53, - 0x42, 0x0e, 0xff, 0xd7, 0xa4, 0x83, 0xc2, 0x79, 0xd4, 0x18, 0x18, 0xbc, 0xb3, 0xee, - 0x91, 0x90, 0x01, 0xf8, 0x66, 0xa8, 0xe9, 0x2c, + 0x17, 0x5b, 0xa9, 0x8b, 0xf9, 0xf7, 0xa0, 0x10, 0x5e, 0xa9, 0xf4, 0x45, 0xfb, 0x7a, + 0x14, 0x49, 0x72, 0x62, 0xc6, 0xe4, 0xd7, 0x32, 0x89, 0x32, 0x7b, 0x8a, 0x2d, 0xf5, + 0xe2, 0x63, 0xf3, 0xe3, 0x99, 0x07, 0xea, 0x0c, ], c_out: [ - 0xdf, 0x6b, 0xb6, 0x2e, 0x3b, 0x64, 0xf7, 0xe9, 0x37, 0xc1, 0xde, 0x38, 0xaa, 0xc5, - 0xe6, 0xb1, 0x61, 0x35, 0xba, 0x2f, 0x9d, 0xbe, 0xed, 0xb0, 0x7a, 0x45, 0xb6, 0xf0, - 0x9d, 0xf3, 0xeb, 0xec, 0xac, 0x04, 0x6c, 0x61, 0x92, 0xfb, 0xe8, 0x95, 0xd2, 0x31, - 0x02, 0x77, 0xb3, 0xe0, 0x3a, 0x90, 0xfd, 0xc8, 0x53, 0x48, 0x4a, 0x01, 0x5c, 0x88, - 0xd6, 0x63, 0x2e, 0x97, 0xba, 0x98, 0xad, 0xca, 0x9e, 0x49, 0xf5, 0x38, 0xc3, 0xa7, - 0xcb, 0x6d, 0x77, 0x23, 0xbd, 0xcc, 0x9c, 0x03, 0xae, 0x88, - ], + 0xf3, 0xbf, 0x90, 0x76, 0xf3, 0xdb, 0x66, 0x32, 0x6d, 0xa6, 0x0c, 0xc7, 0x94, 0x3c, + 0x85, 0x4d, 0x8d, 0xe9, 0x9f, 0x57, 0x53, 0xf7, 0x0c, 0x32, 0xed, 0x01, 0xfb, 0x2e, + 0x84, 0x9c, 0x9d, 0xc7, 0x3f, 0x80, 0xb5, 0xcb, 0xaa, 0xb4, 0x99, 0x2d, 0xd7, 0xe7, + 0x38, 0xb9, 0x61, 0xfd, 0x75, 0x3f, 0x7c, 0x5b, 0x29, 0x24, 0xd1, 0xd9, 0x63, 0x06, + 0x61, 0x33, 0x92, 0x59, 0x28, 0x3e, 0x3a, 0x95, 0x3c, 0x57, 0xdf, 0x3a, 0x48, 0xca, + 0x82, 0x71, 0xfc, 0x5f, 0x26, 0x4d, 0x6f, 0x15, 0xb6, 0xb3, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -1769,34 +1777,34 @@ pub(crate) fn test_vectors() -> Vec { 0x87, 0xe5, 0x05, 0xad, ], rho: [ - 0x32, 0x91, 0x87, 0x35, 0x66, 0x3f, 0x34, 0xad, 0xa0, 0x22, 0x8a, 0xea, 0x4a, 0xcc, - 0x19, 0x2a, 0x12, 0x3f, 0xcf, 0xa0, 0x60, 0x46, 0x89, 0xf9, 0x1a, 0xcb, 0xe9, 0x38, - 0x31, 0xe4, 0x8c, 0x0c, + 0xc2, 0x79, 0xfa, 0x9d, 0x1c, 0x84, 0x11, 0x93, 0xd3, 0x32, 0xf8, 0xcc, 0xf4, 0xd0, + 0xb1, 0xe4, 0x56, 0x01, 0xa8, 0xaf, 0x66, 0x76, 0xd7, 0x62, 0xfb, 0xa7, 0x31, 0x33, + 0x45, 0x89, 0x35, 0x14, ], cmx: [ - 0xde, 0x7b, 0xf1, 0x55, 0x08, 0x29, 0x51, 0x96, 0x0a, 0x10, 0xbb, 0x8b, 0x75, 0x41, - 0x02, 0x43, 0x0f, 0x89, 0xf5, 0x32, 0x67, 0x24, 0x04, 0x36, 0x81, 0xf5, 0x06, 0xf7, - 0x48, 0xe2, 0x6f, 0x07, + 0x6d, 0x29, 0x97, 0xd1, 0xce, 0x0a, 0x94, 0x9a, 0x63, 0x70, 0x0f, 0x46, 0x1b, 0x57, + 0x12, 0xae, 0xeb, 0x43, 0xd4, 0x55, 0x04, 0xe3, 0x5b, 0xda, 0x16, 0x52, 0x97, 0x77, + 0xc7, 0x4d, 0x19, 0x1b, ], esk: [ - 0x1d, 0xb6, 0x79, 0x07, 0x9a, 0xcd, 0xef, 0xe9, 0xfc, 0x1e, 0x59, 0xa1, 0x33, 0xf3, - 0x7b, 0x6d, 0x1f, 0xfb, 0xed, 0x78, 0x8c, 0xce, 0x3b, 0x0c, 0xdd, 0x63, 0xe0, 0x62, - 0x83, 0x05, 0x47, 0x08, + 0x9d, 0xc4, 0xc8, 0xc0, 0x32, 0xd3, 0xbe, 0x66, 0xd2, 0x63, 0x6b, 0xa0, 0x02, 0x0c, + 0x63, 0xf4, 0x26, 0x53, 0x29, 0xff, 0xac, 0x2a, 0xe6, 0x35, 0x57, 0x32, 0x63, 0xf4, + 0x99, 0xbd, 0x4c, 0x13, ], ephemeral_key: [ - 0x18, 0x20, 0x84, 0x5b, 0x2d, 0x90, 0xe5, 0x45, 0x76, 0x0f, 0xca, 0x4d, 0xab, 0x30, - 0xa6, 0x78, 0x3e, 0x03, 0x1c, 0x0e, 0x54, 0x28, 0xcc, 0x22, 0x6f, 0x3f, 0x40, 0x1d, - 0xec, 0x20, 0x0b, 0x11, + 0xe4, 0x76, 0x95, 0x86, 0x30, 0x4a, 0x6a, 0x9b, 0x3a, 0x2a, 0xef, 0x3a, 0xf5, 0x8b, + 0x97, 0xda, 0xc2, 0xcc, 0x4a, 0xeb, 0x38, 0x9f, 0x68, 0xc1, 0x28, 0x87, 0x73, 0x1e, + 0x0e, 0x12, 0xbc, 0x1e, ], shared_secret: [ - 0x79, 0x38, 0x77, 0xa1, 0xae, 0xda, 0xe9, 0xac, 0x6d, 0xa3, 0xd7, 0xe8, 0x02, 0xb5, - 0xbc, 0x77, 0x3c, 0x0d, 0x93, 0x1c, 0x79, 0x6d, 0x17, 0x0c, 0x59, 0x7f, 0x22, 0xba, - 0x6f, 0xcc, 0xa2, 0x06, + 0xf6, 0xba, 0x4b, 0x1f, 0xbe, 0x01, 0xfa, 0x2f, 0x1d, 0xd4, 0x09, 0x3c, 0x5c, 0xc4, + 0x85, 0xa9, 0xbf, 0xd9, 0xef, 0x0f, 0x57, 0x89, 0x49, 0xd6, 0xe1, 0x00, 0xb0, 0x05, + 0x5c, 0xb8, 0xf3, 0x31, ], k_enc: [ - 0x28, 0x20, 0xb9, 0x38, 0xd6, 0xfc, 0xea, 0x99, 0xa7, 0x23, 0x37, 0x50, 0xa0, 0xf0, - 0x9a, 0x32, 0x10, 0xad, 0x91, 0x73, 0x46, 0x16, 0x6a, 0xea, 0xdc, 0x89, 0xbb, 0x50, - 0xf4, 0x54, 0x50, 0xa3, + 0xd3, 0xc2, 0x20, 0x51, 0x00, 0x3e, 0x88, 0x2a, 0x5d, 0xdd, 0xfb, 0x48, 0x23, 0xd6, + 0x77, 0x26, 0x96, 0xa7, 0xe9, 0x9f, 0x26, 0xb1, 0xa6, 0xac, 0xd2, 0x4b, 0xee, 0xd5, + 0xf2, 0x2f, 0x9f, 0xf8, ], p_enc: [ 0x02, 0x81, 0xf2, 0x75, 0x7c, 0x53, 0x2e, 0xd3, 0xb6, 0x2e, 0x89, 0x01, 0x22, 0x92, @@ -1842,69 +1850,70 @@ pub(crate) fn test_vectors() -> Vec { 0x3e, 0xcc, 0xc6, 0x23, ], c_enc: [ - 0xd9, 0x6a, 0xe8, 0x2f, 0xba, 0xff, 0xb9, 0xe4, 0xbd, 0x36, 0x47, 0x57, 0x96, 0x33, - 0xbc, 0x8a, 0x89, 0x66, 0xae, 0x4e, 0x18, 0x85, 0x99, 0xdc, 0x3c, 0xf0, 0x30, 0x41, - 0xd2, 0x64, 0x4f, 0x60, 0x3c, 0xe5, 0x56, 0x2e, 0x7f, 0xa1, 0xd3, 0x83, 0x12, 0x79, - 0xb6, 0x32, 0x60, 0x4d, 0x06, 0x5e, 0xd2, 0x46, 0xad, 0x2d, 0x4f, 0x73, 0xf3, 0xa4, - 0x1b, 0x2a, 0x27, 0x99, 0xe5, 0xba, 0xf8, 0x6e, 0x7d, 0x9f, 0xcc, 0x64, 0xd5, 0x6b, - 0xde, 0x56, 0xcb, 0xb0, 0x01, 0xeb, 0x7c, 0x7c, 0x0c, 0xf1, 0xe2, 0xae, 0xc3, 0xce, - 0xb1, 0x49, 0x2d, 0xdf, 0x4e, 0x35, 0x20, 0x76, 0x1f, 0x70, 0xf6, 0xa9, 0x5c, 0x9e, - 0xde, 0xed, 0x51, 0x43, 0x6d, 0xca, 0xcf, 0x71, 0x1e, 0xb5, 0x53, 0x24, 0xd3, 0xf0, - 0x1d, 0xcc, 0xa0, 0x1b, 0xca, 0x15, 0xba, 0xf2, 0x8f, 0xed, 0x81, 0x4c, 0xc3, 0x3a, - 0x43, 0x6b, 0xbc, 0x08, 0x60, 0x56, 0x78, 0x55, 0xa4, 0x9f, 0x5e, 0xfd, 0x49, 0xea, - 0x78, 0x30, 0xc2, 0xf6, 0x00, 0x61, 0xd8, 0x13, 0xa8, 0x49, 0xb4, 0x40, 0xb1, 0x2e, - 0x8f, 0x31, 0xe2, 0xdc, 0x0c, 0x39, 0x4c, 0xeb, 0x92, 0x4f, 0x0d, 0xc6, 0xd5, 0x7b, - 0xcc, 0x39, 0x1d, 0x4a, 0x5f, 0x56, 0x9f, 0x34, 0x74, 0x6b, 0x9d, 0x92, 0x08, 0x82, - 0x25, 0xb1, 0xaa, 0x3e, 0x90, 0x6f, 0x6d, 0xe4, 0xa7, 0x92, 0x2a, 0xc1, 0x16, 0xac, - 0xb2, 0x78, 0xe8, 0xef, 0xbb, 0xf6, 0xf1, 0xe3, 0xe0, 0x8d, 0x66, 0xb3, 0x4d, 0x6e, - 0xde, 0x34, 0xae, 0x78, 0x40, 0xa8, 0x80, 0x2b, 0x7c, 0x10, 0x0f, 0xa7, 0x98, 0x46, - 0x4d, 0xb5, 0x29, 0x45, 0xdb, 0xbe, 0x35, 0xe7, 0x7a, 0x77, 0x21, 0xb2, 0xe0, 0xf8, - 0xb9, 0xa1, 0x0f, 0x6b, 0xf9, 0xa2, 0x80, 0x8f, 0xa5, 0x85, 0xff, 0x21, 0xb0, 0xa3, - 0xaf, 0xfd, 0x5f, 0x3c, 0xb2, 0x30, 0x63, 0x4e, 0x2e, 0x43, 0xff, 0xde, 0x6d, 0x09, - 0x0a, 0xfc, 0xc6, 0x70, 0x4d, 0x7b, 0x3f, 0xc6, 0x15, 0x44, 0x85, 0x3b, 0xcd, 0xa7, - 0xa1, 0x06, 0xd8, 0x5b, 0xd8, 0xd8, 0x6c, 0x6f, 0x8c, 0xe0, 0x34, 0x01, 0x6e, 0xd9, - 0xa3, 0x69, 0x46, 0xf8, 0x52, 0x8b, 0x6f, 0x1e, 0x1a, 0x19, 0x82, 0xd6, 0x8d, 0x38, - 0x86, 0xe5, 0xea, 0xe6, 0xc1, 0xe3, 0x88, 0xf3, 0xde, 0xad, 0x0d, 0x35, 0x3b, 0x6c, - 0x0c, 0xbf, 0x57, 0xc2, 0xe4, 0x7d, 0x30, 0x72, 0x3e, 0xac, 0x95, 0x7b, 0x4a, 0xec, - 0x82, 0xc8, 0xa1, 0x00, 0x9e, 0x3d, 0x71, 0x96, 0x92, 0xb2, 0xfc, 0xbd, 0xda, 0xae, - 0x62, 0x5a, 0x89, 0x6a, 0x47, 0x29, 0x85, 0xb7, 0x9e, 0xb6, 0x2b, 0x1f, 0xe3, 0x3d, - 0x6e, 0x27, 0xbc, 0x1f, 0x10, 0xe4, 0xfe, 0x5c, 0x06, 0xb2, 0x4c, 0x59, 0x7f, 0x72, - 0x3c, 0x67, 0x13, 0x36, 0x13, 0xae, 0x8e, 0x15, 0x4d, 0x81, 0x69, 0x78, 0xb8, 0xfc, - 0xa6, 0x50, 0xc0, 0x1d, 0x77, 0x1a, 0x62, 0x69, 0x2a, 0x84, 0x82, 0x94, 0x2e, 0x28, - 0xfe, 0xf0, 0x45, 0x19, 0x9e, 0xd1, 0xa6, 0x64, 0x99, 0xeb, 0xa1, 0xee, 0xc1, 0x9a, - 0xc8, 0x4a, 0x12, 0xe4, 0x10, 0x29, 0xd2, 0x2f, 0x21, 0x87, 0x6e, 0xd7, 0x4a, 0x76, - 0xef, 0x39, 0xa0, 0x57, 0xce, 0x0a, 0x15, 0x8e, 0x68, 0x51, 0xec, 0x35, 0x6d, 0x97, - 0x7b, 0x1a, 0xa6, 0x8d, 0xcf, 0x70, 0x88, 0xa9, 0xf0, 0xf9, 0xe4, 0x75, 0xa2, 0xbb, - 0xc1, 0xc4, 0x49, 0x5b, 0x54, 0x6f, 0xff, 0xed, 0xaa, 0x66, 0xc4, 0xf9, 0x51, 0x74, - 0xc6, 0x2f, 0x56, 0x5a, 0x3c, 0xc0, 0xac, 0xaf, 0x85, 0x4a, 0xde, 0xd4, 0xb4, 0x25, - 0xa0, 0xc7, 0xdb, 0xcd, 0x37, 0x42, 0xa7, 0xe0, 0x59, 0x2e, 0x83, 0x73, 0x41, 0xf8, - 0x95, 0x32, 0x90, 0x99, 0xe1, 0x70, 0xb6, 0xff, 0xb1, 0x05, 0xfd, 0xbc, 0x77, 0x29, - 0x8e, 0x8c, 0x0f, 0x5e, 0xeb, 0x9e, 0x99, 0xc6, 0x58, 0x4b, 0xcf, 0xf1, 0x20, 0x20, - 0x9d, 0x69, 0x22, 0xb5, 0x34, 0xbe, 0xc9, 0xfa, 0xc1, 0xd7, 0xd2, 0x74, 0xdb, 0xcb, - 0x4a, 0x12, 0xea, 0x5a, 0x99, 0x21, 0x39, 0x2f, 0x00, 0x96, 0x60, 0x29, 0xff, 0x26, - 0x0e, 0xd2, 0x4c, 0x32, 0x78, 0x58, 0xe0, 0x34, 0x64, 0x0a, 0x8c, 0xfb, 0x28, 0xad, - 0x97, 0xe5, 0x3d, 0x80, 0xe1, 0xc9, + 0x72, 0x29, 0xa0, 0xa5, 0x6a, 0x14, 0x4b, 0x04, 0x2c, 0x1e, 0xad, 0x91, 0x80, 0xac, + 0x54, 0xda, 0xc6, 0xc5, 0x5c, 0xf4, 0xc2, 0x2f, 0xbe, 0x7c, 0xde, 0x99, 0x96, 0x0b, + 0xc6, 0x20, 0xd4, 0xdd, 0x60, 0xe4, 0xbf, 0x18, 0xa0, 0xea, 0x7a, 0xd9, 0x09, 0x3b, + 0xcd, 0x3f, 0xf6, 0xd1, 0x61, 0x1c, 0x56, 0x5f, 0x88, 0xe7, 0x35, 0xef, 0x4c, 0x51, + 0x8c, 0x77, 0xd6, 0x22, 0x28, 0xe1, 0xe4, 0xa1, 0x35, 0xca, 0x6c, 0xb4, 0xed, 0x5a, + 0xbb, 0xdf, 0x3e, 0x81, 0xd0, 0x96, 0x50, 0xa8, 0xfa, 0x9b, 0x5c, 0x3d, 0x05, 0xb6, + 0xda, 0xcf, 0x3c, 0x3d, 0xb3, 0xb3, 0x63, 0xe4, 0x10, 0x57, 0x23, 0x70, 0x0c, 0x69, + 0x13, 0x9f, 0x81, 0xec, 0xc4, 0x8d, 0x88, 0x3d, 0xa0, 0x39, 0xdd, 0xed, 0x5e, 0xf6, + 0x04, 0x0a, 0xb2, 0x12, 0x0e, 0x53, 0x3b, 0x1f, 0xfd, 0x06, 0x74, 0xdb, 0x5b, 0x92, + 0x6e, 0x58, 0x7f, 0x16, 0xe7, 0xe8, 0x96, 0x2b, 0x12, 0x48, 0x35, 0xbd, 0x56, 0xcf, + 0xd8, 0xe7, 0x5b, 0xf6, 0xaa, 0x4d, 0xcd, 0x4d, 0x6f, 0x0b, 0x55, 0x61, 0x71, 0x9c, + 0x80, 0xaa, 0x82, 0xb3, 0xbc, 0xea, 0x16, 0x7a, 0x31, 0xc6, 0x69, 0x87, 0x61, 0xe2, + 0xd2, 0x6c, 0xb5, 0x6d, 0xd3, 0x04, 0x16, 0x72, 0x1c, 0x93, 0x37, 0x32, 0x92, 0x85, + 0x33, 0x58, 0xfa, 0xfe, 0x74, 0x95, 0x55, 0x8d, 0xb9, 0x9e, 0x47, 0xa3, 0xa1, 0x6e, + 0xd2, 0x2c, 0xdb, 0x9d, 0x7d, 0x16, 0xcf, 0xd9, 0xa7, 0xbb, 0x55, 0x9c, 0x72, 0x86, + 0xed, 0x84, 0xf8, 0x89, 0x9c, 0xb0, 0x52, 0x2e, 0x8a, 0x49, 0x7f, 0x3e, 0x14, 0x45, + 0x2b, 0xa8, 0xa9, 0x4a, 0x7f, 0x58, 0xe5, 0xde, 0x37, 0x1d, 0x76, 0xec, 0xc9, 0xef, + 0xe2, 0x0a, 0xe7, 0x9b, 0xee, 0x12, 0xbc, 0xe4, 0xe4, 0xb6, 0xf2, 0x35, 0x35, 0xe5, + 0xc3, 0xc4, 0x3a, 0x4c, 0xa2, 0x07, 0x6f, 0xd6, 0x73, 0xf0, 0x80, 0x6f, 0xa9, 0x85, + 0xc5, 0x88, 0xd1, 0x14, 0xc0, 0x7d, 0x8c, 0xe3, 0xa2, 0x33, 0xe5, 0x4d, 0x77, 0x11, + 0x6c, 0x8a, 0x2a, 0x56, 0xa6, 0x82, 0xe7, 0xa4, 0x85, 0xdf, 0x71, 0xb3, 0x02, 0xa0, + 0x36, 0xdd, 0xab, 0x21, 0x4d, 0xee, 0x77, 0x62, 0x19, 0xcc, 0x24, 0x25, 0x94, 0xf7, + 0x5b, 0x8e, 0xbd, 0x56, 0x6d, 0x74, 0xb1, 0x6c, 0x9e, 0xc0, 0x05, 0x8b, 0xca, 0x28, + 0x81, 0xb7, 0x9b, 0x10, 0xe8, 0xa8, 0x01, 0x08, 0x20, 0x61, 0x8a, 0xc6, 0x52, 0x6c, + 0xf9, 0x4b, 0x13, 0xd9, 0x75, 0x9f, 0x37, 0x33, 0x93, 0x34, 0xe8, 0xb2, 0xc6, 0xbd, + 0xd1, 0xd0, 0xf5, 0xe2, 0x46, 0x3c, 0xff, 0x2b, 0x8d, 0xa6, 0xd2, 0xc6, 0x86, 0xaa, + 0x98, 0x7c, 0xd1, 0xf0, 0x7e, 0x9a, 0xa2, 0x60, 0xdd, 0x04, 0x28, 0xa4, 0xff, 0x78, + 0xaa, 0x8f, 0xda, 0x47, 0x7a, 0xb3, 0x8a, 0xcf, 0xcc, 0xb1, 0x90, 0x91, 0x77, 0xb5, + 0x27, 0xe9, 0x38, 0xf1, 0xf9, 0xdc, 0xf3, 0x1f, 0x4f, 0x40, 0xa9, 0x62, 0x89, 0x51, + 0xfc, 0x2a, 0x7a, 0xbc, 0x04, 0x1e, 0x8c, 0x93, 0x36, 0x08, 0xbb, 0x47, 0xb4, 0x50, + 0xb2, 0x8f, 0xee, 0xe0, 0x41, 0x58, 0xa8, 0x17, 0x4b, 0xff, 0xe4, 0x97, 0x06, 0x02, + 0x48, 0x86, 0x42, 0xc1, 0x9e, 0x61, 0xd4, 0x73, 0xf3, 0xde, 0x0c, 0xb0, 0xb6, 0x4a, + 0x30, 0xd6, 0xf1, 0x46, 0x68, 0xd1, 0xb0, 0x17, 0x77, 0x56, 0x6f, 0xb5, 0xac, 0xc2, + 0xe9, 0x2e, 0x64, 0xd9, 0x75, 0x7f, 0xba, 0x13, 0xc1, 0xee, 0x9c, 0xd0, 0x3a, 0xbe, + 0x98, 0xbd, 0x7e, 0x8a, 0xd7, 0x04, 0x1c, 0x3f, 0xea, 0xe7, 0xc1, 0xa7, 0x24, 0x3a, + 0xe3, 0x61, 0x0a, 0xac, 0x64, 0xfe, 0xc6, 0xc9, 0xfc, 0x94, 0x3d, 0x6a, 0xbc, 0xe9, + 0x10, 0xad, 0xbe, 0x23, 0xb5, 0x46, 0xb4, 0xc2, 0x4a, 0xa9, 0xf2, 0xce, 0x5d, 0x97, + 0x06, 0x2e, 0xe0, 0xd1, 0xcc, 0xc4, 0x8c, 0xfd, 0x1f, 0xdb, 0xa7, 0xfd, 0xac, 0x0b, + 0x04, 0xd1, 0xb3, 0xdc, 0x7a, 0x70, 0x78, 0x1c, 0xdd, 0xa2, 0xa2, 0x70, 0x3d, 0xe0, + 0x03, 0xcd, 0x01, 0x51, 0xec, 0x65, 0xbf, 0x7d, 0x1a, 0xc6, 0x3b, 0xb7, 0x35, 0xbc, + 0x2b, 0xb6, 0x7a, 0xd2, 0xb0, 0x1e, 0xd6, 0xb9, 0xae, 0x2e, 0xbb, 0xd3, 0x7a, 0x8f, + 0x8e, 0xc1, 0xa6, 0x53, 0xa8, 0x7e, ], ock: [ - 0x28, 0xcf, 0x3b, 0xea, 0xc3, 0xbd, 0xe2, 0xe9, 0x63, 0xaa, 0x60, 0x91, 0x3f, 0x10, - 0x5d, 0x25, 0x67, 0xcd, 0xaf, 0xbb, 0x66, 0x09, 0x08, 0x5a, 0x84, 0x3f, 0x75, 0x68, - 0xe4, 0x92, 0xd4, 0x4e, + 0x1b, 0xa4, 0xac, 0xd7, 0x75, 0x10, 0xc4, 0xf0, 0xc7, 0x66, 0xad, 0xf7, 0xc7, 0xdf, + 0x1d, 0x1c, 0x54, 0xd5, 0xbc, 0xe3, 0xd6, 0x0a, 0xf3, 0x5e, 0x8d, 0xd4, 0x8f, 0xdd, + 0x04, 0xa7, 0x8c, 0x0b, ], op: [ 0x55, 0xdb, 0x72, 0x90, 0x07, 0x3b, 0xa0, 0x06, 0x66, 0xe8, 0x7d, 0x25, 0x61, 0xb8, 0x88, 0x3c, 0x66, 0x2c, 0x56, 0x78, 0xff, 0x27, 0x30, 0x2a, 0x82, 0xe2, 0x0a, 0x72, - 0x01, 0x70, 0x89, 0x1a, 0x1d, 0xb6, 0x79, 0x07, 0x9a, 0xcd, 0xef, 0xe9, 0xfc, 0x1e, - 0x59, 0xa1, 0x33, 0xf3, 0x7b, 0x6d, 0x1f, 0xfb, 0xed, 0x78, 0x8c, 0xce, 0x3b, 0x0c, - 0xdd, 0x63, 0xe0, 0x62, 0x83, 0x05, 0x47, 0x08, + 0x01, 0x70, 0x89, 0x1a, 0x9d, 0xc4, 0xc8, 0xc0, 0x32, 0xd3, 0xbe, 0x66, 0xd2, 0x63, + 0x6b, 0xa0, 0x02, 0x0c, 0x63, 0xf4, 0x26, 0x53, 0x29, 0xff, 0xac, 0x2a, 0xe6, 0x35, + 0x57, 0x32, 0x63, 0xf4, 0x99, 0xbd, 0x4c, 0x13, ], c_out: [ - 0x0b, 0x2c, 0xc0, 0xa2, 0x2d, 0x06, 0xfc, 0x36, 0xa0, 0x8a, 0x7d, 0x82, 0x33, 0x8d, - 0x4a, 0xd0, 0x95, 0xa3, 0x93, 0xa1, 0xc2, 0x4a, 0x78, 0x8d, 0x45, 0x24, 0x35, 0x94, - 0x4a, 0xcc, 0xe6, 0x38, 0x1e, 0xcc, 0x69, 0x37, 0xf2, 0xc3, 0x8c, 0x89, 0xa5, 0xf5, - 0x1a, 0xa6, 0x0c, 0xa6, 0x58, 0xfe, 0x71, 0x37, 0x1c, 0x2a, 0x83, 0xf4, 0x96, 0xca, - 0x2e, 0x62, 0x49, 0x79, 0x2e, 0x09, 0xeb, 0x79, 0xea, 0x3a, 0x13, 0x80, 0x32, 0x18, - 0xff, 0x20, 0x88, 0x9d, 0x8c, 0x59, 0xc8, 0x5e, 0x90, 0x99, - ], + 0x43, 0x0d, 0xaa, 0x6b, 0x75, 0x63, 0x22, 0x80, 0xd5, 0xe6, 0xda, 0xcb, 0xd2, 0xa0, + 0xff, 0xe2, 0xaf, 0x98, 0x60, 0xc8, 0x3a, 0x3d, 0x2a, 0x87, 0xf1, 0x79, 0x62, 0x88, + 0xeb, 0xed, 0x64, 0xd0, 0xcd, 0xc4, 0x60, 0xe2, 0xc8, 0x61, 0xc4, 0xf9, 0x38, 0x7d, + 0x92, 0x59, 0xfc, 0x60, 0x01, 0xac, 0xd0, 0xe7, 0x6f, 0x3b, 0x0f, 0xdb, 0x5d, 0xac, + 0x97, 0x4c, 0x26, 0xb5, 0x1b, 0x85, 0x9f, 0xab, 0xe0, 0x2e, 0xab, 0xae, 0x96, 0x8a, + 0xab, 0x2e, 0x5e, 0x61, 0xef, 0xc2, 0xd4, 0x46, 0x2c, 0x1e, + ], + note_type: None, }, TestVector { incoming_viewing_key: [ @@ -1978,34 +1987,34 @@ pub(crate) fn test_vectors() -> Vec { 0x71, 0x55, 0x00, 0xb5, ], rho: [ - 0x3b, 0x37, 0x96, 0x78, 0x0c, 0x0a, 0xec, 0x14, 0xed, 0x28, 0x74, 0xb5, 0x23, 0x06, - 0xe1, 0xc3, 0xd5, 0xde, 0x45, 0x93, 0xc6, 0x69, 0xaf, 0x1c, 0xaf, 0x11, 0xbc, 0xb4, - 0xd3, 0x5c, 0x60, 0x12, + 0xea, 0x38, 0x44, 0x75, 0x9a, 0x9a, 0x1c, 0xc5, 0x28, 0xb2, 0x95, 0xce, 0x70, 0x13, + 0x7a, 0x85, 0xf9, 0xf0, 0x8e, 0x41, 0xa5, 0xc7, 0xc1, 0xca, 0xc1, 0x55, 0xa6, 0x69, + 0xa3, 0x18, 0x53, 0x3e, ], cmx: [ - 0x4d, 0xa9, 0xdf, 0xdc, 0x70, 0x8c, 0xe8, 0xa0, 0x77, 0xa0, 0x6e, 0xc0, 0x67, 0x79, - 0x24, 0xcf, 0x37, 0x70, 0xed, 0xc2, 0x07, 0xfd, 0x5e, 0x7d, 0x69, 0x5f, 0x71, 0xb0, - 0x15, 0xbb, 0x03, 0x05, + 0x6a, 0xba, 0x28, 0x10, 0x5b, 0xc0, 0x72, 0xc5, 0x2a, 0xb8, 0xa3, 0x14, 0x79, 0x7f, + 0xf8, 0x66, 0x66, 0xdf, 0xb7, 0xcd, 0x8a, 0x2a, 0xe1, 0x7c, 0x58, 0x5f, 0xb7, 0xb6, + 0x51, 0x5b, 0x97, 0x1c, ], esk: [ - 0xae, 0xec, 0x0d, 0xb9, 0x0e, 0x55, 0x83, 0x3c, 0x8b, 0xaf, 0x52, 0x6d, 0x66, 0x54, - 0xa1, 0x74, 0x5b, 0xa4, 0x4c, 0xad, 0x3c, 0xf9, 0xa6, 0x2c, 0xfb, 0xee, 0x5d, 0xe3, - 0x99, 0xca, 0x31, 0x26, + 0x03, 0xfb, 0x79, 0x43, 0x75, 0x27, 0x5d, 0x23, 0xd1, 0x58, 0xd5, 0x64, 0x6b, 0xc4, + 0x63, 0xa8, 0xb7, 0x38, 0xbc, 0x79, 0x38, 0xf6, 0x0d, 0xfb, 0x15, 0x5b, 0xef, 0x4d, + 0x46, 0x1e, 0xec, 0x29, ], ephemeral_key: [ - 0x2d, 0xa0, 0x59, 0x4c, 0xd8, 0x74, 0x91, 0x46, 0x52, 0x67, 0xe7, 0x2c, 0x61, 0x89, - 0x07, 0x91, 0xfe, 0xb4, 0x25, 0xa2, 0xbb, 0xcd, 0xda, 0xcf, 0xe4, 0x5a, 0x66, 0x62, - 0x2f, 0x49, 0xef, 0x35, + 0x95, 0x9b, 0xea, 0x8e, 0x11, 0x96, 0x8b, 0x0f, 0x34, 0x3c, 0x04, 0xcd, 0x6d, 0x50, + 0x16, 0xfc, 0xd4, 0x33, 0x90, 0x75, 0x36, 0xa2, 0x46, 0xba, 0x1c, 0x5d, 0x3e, 0x88, + 0x97, 0xf3, 0x23, 0x1c, ], shared_secret: [ - 0xe0, 0xb1, 0x52, 0x67, 0xfd, 0x21, 0x08, 0xeb, 0xbd, 0xd4, 0x16, 0x3f, 0x83, 0xad, - 0xef, 0xb6, 0x1c, 0x3e, 0xdf, 0x56, 0x6d, 0x94, 0x6f, 0xa1, 0xc1, 0x5e, 0x96, 0x46, - 0x43, 0xb1, 0x9c, 0x8e, + 0xe2, 0x69, 0x19, 0xb4, 0x0c, 0x70, 0xaf, 0x74, 0x1d, 0xf9, 0x04, 0x51, 0x72, 0x55, + 0x03, 0x58, 0x89, 0xee, 0x5a, 0x44, 0x42, 0x6d, 0x6a, 0xb8, 0x5c, 0x07, 0x4b, 0x86, + 0x2b, 0xa0, 0x63, 0x08, ], k_enc: [ - 0x28, 0x48, 0xae, 0x53, 0xaa, 0xce, 0xbe, 0x7c, 0xab, 0x58, 0x73, 0x1d, 0xc2, 0x21, - 0x88, 0x1b, 0x60, 0x2c, 0xc5, 0xa5, 0x3b, 0xcc, 0x1f, 0x76, 0xc8, 0x20, 0xb0, 0xea, - 0x13, 0x55, 0x68, 0x8e, + 0x09, 0xda, 0xc6, 0x51, 0x1c, 0x38, 0x44, 0x58, 0x7f, 0x82, 0x9c, 0x2f, 0x1e, 0xa0, + 0x37, 0xa8, 0x1a, 0x8d, 0x54, 0x85, 0xed, 0x04, 0xea, 0xf2, 0x75, 0x80, 0x05, 0xb3, + 0x2a, 0x20, 0x47, 0x0b, ], p_enc: [ 0x02, 0xdd, 0xb7, 0xc5, 0xbc, 0x4d, 0xe9, 0xdf, 0x52, 0x1b, 0xb0, 0x4b, 0xad, 0x95, @@ -2051,69 +2060,2210 @@ pub(crate) fn test_vectors() -> Vec { 0xf5, 0xc6, 0x38, 0xbf, ], c_enc: [ - 0xf1, 0x42, 0xc4, 0xe5, 0x0e, 0xef, 0x2c, 0x64, 0x44, 0xcc, 0xd4, 0x0b, 0x8c, 0x99, - 0xe5, 0x6a, 0x72, 0xec, 0x4e, 0x30, 0xcf, 0x73, 0x68, 0x75, 0xf0, 0xaa, 0x6b, 0x8e, - 0x6d, 0x9c, 0xc3, 0x67, 0x73, 0x2d, 0xbc, 0x9a, 0xf0, 0xb3, 0x7d, 0x1f, 0xca, 0x6d, - 0x5b, 0xdd, 0x1d, 0xc1, 0x23, 0x79, 0x29, 0x66, 0x99, 0x9d, 0x62, 0xea, 0xf8, 0xc5, - 0xfe, 0x8d, 0x99, 0x91, 0x84, 0xf2, 0x8b, 0x99, 0xec, 0xef, 0xcc, 0x8f, 0x14, 0x8d, - 0xbd, 0x52, 0x02, 0x6f, 0xdb, 0x48, 0xdf, 0xda, 0x7b, 0xad, 0xb6, 0xd1, 0xfc, 0xd2, - 0x9a, 0xd2, 0x19, 0xea, 0xbf, 0xbb, 0x44, 0x3f, 0x5d, 0x0f, 0x98, 0xb6, 0x6a, 0x3a, - 0x25, 0x73, 0x1b, 0x52, 0xd7, 0xf2, 0xdf, 0x70, 0x01, 0x4b, 0x4a, 0xc6, 0x99, 0x34, - 0x32, 0xf8, 0x98, 0x1e, 0x9c, 0xbf, 0xe1, 0x69, 0x13, 0xf6, 0x8a, 0x93, 0x5d, 0x2d, - 0xd0, 0x06, 0xd4, 0x28, 0xf1, 0x45, 0x53, 0xe7, 0x29, 0x86, 0xc7, 0x0f, 0xb4, 0x43, - 0x18, 0xd2, 0x7c, 0x4d, 0x6f, 0x6f, 0xd3, 0x92, 0x3a, 0xb0, 0xf6, 0x28, 0x9a, 0x02, - 0x48, 0x5e, 0x87, 0x17, 0xe5, 0x7d, 0xa0, 0x24, 0xeb, 0xe1, 0x6e, 0x9c, 0xf8, 0x35, - 0xcf, 0x53, 0xd2, 0x19, 0x4f, 0xd4, 0x25, 0x50, 0x06, 0xb8, 0x1b, 0xfd, 0x51, 0xd1, - 0xef, 0x5a, 0xe9, 0xf9, 0xef, 0x6a, 0xf6, 0x57, 0x41, 0x81, 0xe2, 0xe2, 0x26, 0x50, - 0xcb, 0x91, 0x2a, 0x6b, 0x89, 0x88, 0xa0, 0x28, 0x86, 0x32, 0xbc, 0x73, 0x62, 0xbb, - 0xe1, 0x87, 0x23, 0xd8, 0x27, 0xf7, 0x94, 0x58, 0x62, 0x26, 0x0d, 0xf7, 0x8e, 0x95, - 0xd7, 0xd5, 0xe3, 0x31, 0x3f, 0x5a, 0xff, 0x72, 0xe2, 0x1c, 0xe2, 0xdf, 0x00, 0xee, - 0x7e, 0x81, 0x5a, 0xba, 0x17, 0xcc, 0xde, 0x15, 0xc2, 0x7e, 0xee, 0x08, 0x5f, 0x52, - 0xf3, 0x6c, 0x02, 0xec, 0xd6, 0x6c, 0xe1, 0x8b, 0x40, 0x15, 0xbe, 0xb6, 0x09, 0x23, - 0x3f, 0x6e, 0xb2, 0x8e, 0x4a, 0xd5, 0xcd, 0xbe, 0x6f, 0xdc, 0xab, 0x68, 0xbf, 0xbb, - 0x6f, 0xfd, 0x87, 0xd3, 0x86, 0xd8, 0x7e, 0xb1, 0xfe, 0x00, 0x34, 0x27, 0x0f, 0x41, - 0x27, 0x1e, 0xa0, 0x1f, 0x9e, 0xae, 0xa9, 0xe8, 0x9f, 0x78, 0x35, 0x9e, 0x41, 0x73, - 0x94, 0xbb, 0x9d, 0xf5, 0xb6, 0x1c, 0x36, 0xe3, 0x0b, 0xc1, 0xce, 0x4a, 0xb1, 0xbd, - 0xd7, 0x9f, 0xa4, 0x08, 0x3e, 0x82, 0x8d, 0xd1, 0x04, 0xe4, 0x73, 0x80, 0xcd, 0x83, - 0xcd, 0x65, 0x9d, 0xf4, 0x4d, 0xb9, 0x43, 0xdc, 0x07, 0xbc, 0xc8, 0x07, 0x05, 0x04, - 0xa1, 0xc6, 0x55, 0x23, 0x02, 0xe7, 0x4b, 0xe4, 0xb9, 0xc4, 0x32, 0x75, 0xec, 0xc2, - 0x88, 0xce, 0xda, 0x41, 0x59, 0xa9, 0xcc, 0x55, 0x7c, 0x18, 0x19, 0x5c, 0xec, 0x92, - 0x62, 0x24, 0xd8, 0xd6, 0x9e, 0x98, 0xe1, 0x83, 0x5a, 0x2e, 0x29, 0x05, 0x63, 0xef, - 0x20, 0xd0, 0x83, 0xd1, 0x4e, 0x93, 0xcc, 0x1f, 0x3f, 0x76, 0x3e, 0xf5, 0x58, 0x0e, - 0x13, 0x5f, 0xae, 0x1b, 0xb8, 0x54, 0x4a, 0x0c, 0x5c, 0x6d, 0x88, 0x17, 0x41, 0xe4, - 0x51, 0x34, 0x47, 0xac, 0xeb, 0x09, 0x33, 0xe6, 0xeb, 0xaf, 0x0c, 0xe3, 0x13, 0xc1, - 0x8c, 0x9a, 0xf9, 0x5b, 0xa5, 0x61, 0x31, 0xf7, 0x8f, 0x42, 0x72, 0x41, 0x22, 0x65, - 0xbc, 0xf4, 0xc5, 0xf6, 0x80, 0x89, 0x3c, 0xcd, 0xa5, 0x73, 0x7d, 0xa8, 0x23, 0xb7, - 0x63, 0x6e, 0x98, 0xdb, 0xa5, 0x62, 0x44, 0xf2, 0xb9, 0x6a, 0x10, 0x90, 0xa6, 0x60, - 0x38, 0x15, 0xc0, 0xef, 0x54, 0x97, 0x50, 0xf2, 0x47, 0x06, 0x19, 0x0b, 0x55, 0x76, - 0x6e, 0x8a, 0x62, 0x09, 0xa1, 0xc2, 0x2f, 0x67, 0xe8, 0x77, 0x62, 0x66, 0xb6, 0xfa, - 0xe4, 0x5b, 0xf7, 0x94, 0x90, 0x7f, 0x64, 0x71, 0x4f, 0xbe, 0x26, 0xc3, 0x0a, 0xc4, - 0x04, 0x11, 0xf5, 0xe6, 0x4f, 0xc1, 0x66, 0xc8, 0x4f, 0x28, 0xb8, 0x23, 0xfd, 0xaa, - 0x68, 0x32, 0xa3, 0x25, 0x63, 0x31, 0x7d, 0x25, 0x4c, 0x53, 0x16, 0x9b, 0x9f, 0xfb, - 0x24, 0x53, 0xa1, 0x12, 0x2f, 0xa4, 0x4c, 0x7f, 0x17, 0xc1, 0x36, 0xb5, 0x7e, 0x20, - 0xad, 0x17, 0x7a, 0x7e, 0xee, 0xbf, 0x9f, 0x56, 0xfb, 0x0b, 0x55, 0xcc, 0xcf, 0x68, - 0x2b, 0x8a, 0x5b, 0xd8, 0xa7, 0x45, + 0x7b, 0x59, 0x87, 0x78, 0xa7, 0x28, 0x4d, 0x52, 0xa7, 0x47, 0x77, 0x4c, 0x54, 0xbd, + 0x92, 0x57, 0xb3, 0xf1, 0x7a, 0xf1, 0x3e, 0xcc, 0x72, 0xc0, 0xe3, 0xcd, 0x95, 0xeb, + 0xfa, 0xfa, 0xa3, 0x7d, 0x16, 0x65, 0x15, 0x53, 0xdd, 0x27, 0xf0, 0x1c, 0x9c, 0xf2, + 0x4b, 0x62, 0xd7, 0xdc, 0xfd, 0x52, 0xfa, 0x4b, 0x2b, 0x3b, 0x4a, 0x8c, 0xa9, 0xeb, + 0xfc, 0xe7, 0xf4, 0xfc, 0xec, 0x27, 0xe6, 0x05, 0x8e, 0x44, 0x68, 0xc1, 0x50, 0x10, + 0xd0, 0x17, 0xcb, 0x90, 0x1a, 0xbf, 0xb2, 0x2e, 0xad, 0x86, 0x99, 0x83, 0xf6, 0x9a, + 0xed, 0xf2, 0xda, 0x7d, 0x6a, 0xaf, 0xd1, 0x30, 0x6e, 0xe7, 0x36, 0xf2, 0xdb, 0x33, + 0xbc, 0xe4, 0xb0, 0x9f, 0xca, 0x74, 0x69, 0x2a, 0x52, 0x09, 0xa7, 0x39, 0x2b, 0x7e, + 0xa9, 0x68, 0x5b, 0xe9, 0xec, 0x43, 0x1f, 0xfe, 0x50, 0xf7, 0x0f, 0x90, 0x22, 0x74, + 0x05, 0x03, 0x45, 0x2a, 0xb5, 0x14, 0x92, 0xb1, 0xf7, 0x47, 0x7e, 0xda, 0x42, 0x7b, + 0x42, 0x3a, 0x93, 0x1b, 0x26, 0x38, 0x6c, 0x56, 0xe4, 0x27, 0x86, 0x3d, 0x46, 0xb1, + 0x99, 0xff, 0xa0, 0x8c, 0x52, 0x9f, 0xa5, 0x72, 0x1f, 0x68, 0xe9, 0x14, 0xf6, 0xea, + 0x6a, 0x8a, 0xe6, 0xae, 0xcb, 0xf7, 0x37, 0x47, 0x1e, 0xbd, 0x83, 0xdb, 0xa9, 0xa7, + 0xcd, 0x89, 0x75, 0x66, 0x20, 0x4e, 0x2b, 0xae, 0x63, 0xe3, 0x4e, 0x70, 0x32, 0x51, + 0x02, 0x96, 0x92, 0x0d, 0x7e, 0x7a, 0x7c, 0xcf, 0x0f, 0xeb, 0xe7, 0xa8, 0x33, 0x69, + 0x6a, 0x4b, 0x67, 0x41, 0x88, 0x5e, 0x9b, 0x94, 0x0c, 0x61, 0xdd, 0x8d, 0x44, 0x38, + 0x54, 0x74, 0x15, 0x31, 0x0b, 0x15, 0xcf, 0x18, 0xdc, 0x19, 0x90, 0x07, 0x8c, 0x70, + 0x8b, 0xea, 0xc3, 0x32, 0xa8, 0xe0, 0x81, 0x46, 0xa6, 0x95, 0x8e, 0xa6, 0xf4, 0x3f, + 0xd0, 0xc2, 0xc8, 0xe9, 0x99, 0xaa, 0x4f, 0xdf, 0x1e, 0x77, 0xef, 0xde, 0x54, 0xfd, + 0x65, 0xc6, 0x7a, 0x3f, 0x07, 0xda, 0xf5, 0xf6, 0x04, 0x49, 0x60, 0xa0, 0xb6, 0xdd, + 0x84, 0x1f, 0xf8, 0xb8, 0xa5, 0x92, 0xc7, 0xb1, 0x09, 0x34, 0x2c, 0x73, 0x5c, 0x2a, + 0x0e, 0x37, 0xb3, 0x0b, 0x8b, 0xaa, 0x5c, 0x77, 0x01, 0xeb, 0xc7, 0xa8, 0xf8, 0x20, + 0xc0, 0x22, 0x7c, 0xa5, 0x00, 0x3f, 0x36, 0xee, 0x68, 0xf7, 0xb2, 0x89, 0x81, 0xc2, + 0x73, 0x32, 0x03, 0x9d, 0xd6, 0xa4, 0x94, 0xf0, 0xcd, 0x02, 0xbd, 0xd2, 0x8f, 0x68, + 0x3e, 0xca, 0x1b, 0x03, 0x2a, 0xfc, 0x09, 0xdd, 0x0c, 0xd8, 0x56, 0xcb, 0xc1, 0xa3, + 0x5e, 0x74, 0xd4, 0x0c, 0x24, 0x53, 0xdf, 0xe2, 0x42, 0xc8, 0x6a, 0x7a, 0x60, 0xbc, + 0xbd, 0xdb, 0x17, 0x96, 0x6c, 0x7d, 0xba, 0x76, 0x9e, 0xab, 0xd1, 0xc1, 0x67, 0xb7, + 0xe8, 0x19, 0x78, 0xf9, 0x12, 0x8b, 0xac, 0x26, 0xa2, 0x8d, 0x77, 0x21, 0x30, 0x79, + 0xcb, 0x56, 0xc0, 0x95, 0xa7, 0xc0, 0x60, 0xde, 0x0e, 0x77, 0x5c, 0xa8, 0xac, 0x8e, + 0x6c, 0xa9, 0x4d, 0x19, 0xc6, 0x16, 0x2e, 0x44, 0xf7, 0xa8, 0xf0, 0x14, 0x9d, 0x31, + 0xd3, 0x46, 0x3d, 0x01, 0xb6, 0x1a, 0x14, 0x63, 0xa9, 0xde, 0x3d, 0x8a, 0xb7, 0x40, + 0x04, 0x0a, 0x76, 0xe0, 0x5b, 0x37, 0x64, 0x28, 0x86, 0x29, 0x87, 0x59, 0x5b, 0x87, + 0xce, 0xa6, 0x94, 0xfe, 0x92, 0x0a, 0x06, 0x7e, 0x81, 0x6b, 0x4f, 0x29, 0xa3, 0xa2, + 0x24, 0x50, 0x14, 0x0f, 0x13, 0x5d, 0x71, 0x9a, 0x97, 0x1b, 0x81, 0xfc, 0x19, 0x16, + 0x98, 0x0a, 0x55, 0xdd, 0xf8, 0xd9, 0x87, 0x30, 0x57, 0x36, 0x35, 0xa0, 0x70, 0x85, + 0xc4, 0xe7, 0x7c, 0x7e, 0x1c, 0xdb, 0xb6, 0x85, 0x42, 0x6e, 0xe4, 0x62, 0xcc, 0x30, + 0x83, 0xa3, 0xf5, 0xa3, 0xb9, 0x17, 0xc0, 0x6f, 0x9a, 0x96, 0xf9, 0xf7, 0xbd, 0x81, + 0xac, 0xa4, 0x9b, 0xef, 0x95, 0xb9, 0x28, 0x06, 0xc4, 0x2d, 0x09, 0x12, 0x01, 0x31, + 0x42, 0xb2, 0x2a, 0x7b, 0xad, 0x72, 0x12, 0x11, 0x46, 0x91, 0xf1, 0xdc, 0x72, 0x64, + 0xc6, 0x7e, 0x76, 0x34, 0xf5, 0xd7, 0x95, 0xc9, 0x75, 0x30, 0x62, 0xe3, 0x06, 0xc0, + 0x6b, 0xc1, 0x03, 0xaa, 0x01, 0xc1, 0x0d, 0x1f, 0x5d, 0xd4, 0xcd, 0x59, 0xf6, 0x53, + 0x2c, 0xb7, 0x23, 0xe3, 0xa0, 0x26, ], ock: [ - 0x06, 0x3c, 0x83, 0xa4, 0x95, 0x74, 0xe7, 0x80, 0x35, 0x89, 0xcc, 0x3d, 0x34, 0xb4, - 0x38, 0x90, 0xf3, 0xd7, 0x63, 0x87, 0x35, 0xe7, 0xbd, 0x5e, 0xbd, 0xd1, 0xa5, 0xea, - 0xb9, 0xd9, 0xc5, 0xd6, + 0x4a, 0x25, 0x25, 0x4c, 0xcc, 0x44, 0x4e, 0xc6, 0x1c, 0x2b, 0xac, 0xeb, 0x2e, 0xe3, + 0x97, 0x7a, 0x63, 0x32, 0x44, 0x9a, 0x3a, 0x53, 0xad, 0xd2, 0x31, 0xab, 0xf3, 0xd1, + 0x8b, 0xb3, 0x29, 0x3d, ], op: [ 0x65, 0x3d, 0x07, 0xc9, 0x07, 0x94, 0x6a, 0xc3, 0x02, 0x0e, 0xbd, 0xe1, 0xb4, 0xf6, 0x10, 0x21, 0x0c, 0x30, 0xc4, 0x50, 0xe4, 0x27, 0x12, 0x65, 0xa0, 0x5d, 0x6e, 0xce, - 0x44, 0x6d, 0xf4, 0x39, 0xae, 0xec, 0x0d, 0xb9, 0x0e, 0x55, 0x83, 0x3c, 0x8b, 0xaf, - 0x52, 0x6d, 0x66, 0x54, 0xa1, 0x74, 0x5b, 0xa4, 0x4c, 0xad, 0x3c, 0xf9, 0xa6, 0x2c, - 0xfb, 0xee, 0x5d, 0xe3, 0x99, 0xca, 0x31, 0x26, + 0x44, 0x6d, 0xf4, 0x39, 0x03, 0xfb, 0x79, 0x43, 0x75, 0x27, 0x5d, 0x23, 0xd1, 0x58, + 0xd5, 0x64, 0x6b, 0xc4, 0x63, 0xa8, 0xb7, 0x38, 0xbc, 0x79, 0x38, 0xf6, 0x0d, 0xfb, + 0x15, 0x5b, 0xef, 0x4d, 0x46, 0x1e, 0xec, 0x29, + ], + c_out: [ + 0x7b, 0xf4, 0x12, 0x7d, 0x22, 0xcc, 0x57, 0x35, 0x87, 0x51, 0x2f, 0xf8, 0x1e, 0x55, + 0x3e, 0x3c, 0x98, 0x23, 0x5f, 0x51, 0xc7, 0x23, 0x7e, 0x9e, 0x76, 0x1a, 0x08, 0xf2, + 0xe1, 0xe8, 0x0d, 0x04, 0x26, 0x98, 0xfc, 0x3b, 0x1d, 0x03, 0x18, 0xf1, 0xfd, 0xca, + 0x8e, 0x41, 0xa3, 0x16, 0xd6, 0xaf, 0x3a, 0xc0, 0xc4, 0x0c, 0xe1, 0x99, 0x47, 0xa2, + 0xba, 0xfe, 0x80, 0x4d, 0x46, 0x6e, 0xd0, 0x79, 0x82, 0x7f, 0xc1, 0x41, 0x91, 0xeb, + 0xb5, 0x99, 0x17, 0x87, 0x49, 0xe9, 0xc4, 0x06, 0xaf, 0x26, + ], + note_type: None, + }, + TestVector { + incoming_viewing_key: [ + 0xdc, 0x10, 0x95, 0x20, 0x57, 0xc4, 0xbe, 0xaa, 0xd8, 0xaf, 0x37, 0xce, 0x4e, 0xee, + 0x9b, 0x10, 0xed, 0x84, 0xf4, 0x6b, 0xad, 0xd4, 0x8e, 0x0a, 0x22, 0x9b, 0xe8, 0x41, + 0x54, 0xa9, 0xbf, 0x75, 0x6b, 0xe0, 0x2e, 0xcf, 0xa9, 0xad, 0x6d, 0x9c, 0x02, 0xc8, + 0xf9, 0x54, 0xcb, 0x15, 0x71, 0x7b, 0x79, 0x46, 0x1f, 0x00, 0x4b, 0xf1, 0xbc, 0x5c, + 0x7e, 0x3f, 0xda, 0x73, 0x53, 0x7c, 0x1a, 0x0a, + ], + ovk: [ + 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, 0x79, 0x94, 0x7a, + 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, 0x29, 0x80, 0x99, 0xf2, + 0x0f, 0x26, 0x3b, 0x35, + ], + default_d: [ + 0xf6, 0xb0, 0x18, 0xdf, 0xa7, 0x26, 0x31, 0x5b, 0x44, 0xcf, 0x9e, + ], + default_pk_d: [ + 0x05, 0x82, 0x53, 0xd4, 0x85, 0x76, 0x44, 0x88, 0x5e, 0x26, 0xa9, 0x09, 0xc8, 0x38, + 0x59, 0x25, 0x23, 0x5a, 0x75, 0x29, 0x85, 0x44, 0x6e, 0x11, 0x69, 0x5f, 0x36, 0xc2, + 0xe6, 0x84, 0x45, 0xbb, + ], + v: 2111628168871420429, + rseed: [ + 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, + 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, + 0x3b, 0xd5, 0xbc, 0x87, + ], + memo: [ + 0xff, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, + 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, + 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, + 0x5a, 0xc9, 0xab, 0xe8, 0xdb, 0x22, 0x56, 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, + 0x39, 0x50, 0x38, 0x70, 0x59, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, + 0xa2, 0xd4, 0x2e, 0xc9, 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, + 0x2a, 0xa1, 0xe7, 0x4f, 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, 0xac, + 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, + 0x49, 0x6b, 0xea, 0xb4, 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, + 0xa2, 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, + 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, 0xa3, + 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, 0x77, 0x74, + 0xa8, 0x1e, 0x05, 0xb7, 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, 0xc9, 0xde, 0x64, + 0xe1, 0xb1, 0x1d, 0xcf, 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, 0x48, 0x75, 0x5a, 0x9f, + 0xc6, 0xf2, 0xa0, 0x0b, 0x10, 0xc3, 0x65, 0x7e, 0xba, 0xc0, 0x3b, 0xfc, 0x0b, 0x58, + 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0xcd, 0xaa, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, + 0xb9, 0x14, 0x2c, 0x61, 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, + 0x49, 0x5b, 0x51, 0xe4, 0xd2, 0x84, 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, + 0x6c, 0x6f, 0xae, 0x35, 0x9f, 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, + 0xaf, 0x18, 0x77, 0x00, 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, + 0xbb, 0x59, 0xfb, 0x35, 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, 0xeb, + 0xf9, 0x4e, 0x51, 0x5e, 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, 0x8d, 0x64, + 0xe7, 0x78, 0x9f, 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, 0x32, 0x6a, 0x5b, + 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x76, 0x17, + 0x0e, 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, 0x9c, 0x2d, 0xbd, 0x0e, 0xed, 0xee, + 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, 0xb8, 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, + 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, + 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, + 0x9b, 0xca, 0xc9, 0xaa, 0xa1, 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, + 0x6d, 0xa0, 0x30, 0x20, 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, + 0x37, 0xf5, 0x5a, 0x46, 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, + 0x92, 0x7d, 0x1b, 0xd8, 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, + 0xe1, 0xd0, 0x01, 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, + 0xc3, 0x70, 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, + 0xd8, 0x02, 0xf7, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x09, 0xee, 0x7e, 0xf6, 0x3a, 0xb1, 0xcf, 0x24, 0x2b, 0xaa, 0x76, 0xfc, 0xbf, 0xfb, + 0xe5, 0x75, 0x5f, 0x13, 0x14, 0x2b, 0x38, 0xb1, 0xa0, 0x40, 0x4d, 0x7d, 0x5a, 0x3f, + 0x4f, 0x22, 0x1e, 0x96, + ], + rho: [ + 0xf6, 0x5d, 0x22, 0x96, 0x09, 0x58, 0xd7, 0x28, 0x59, 0x60, 0x9c, 0x99, 0x46, 0xd8, + 0xa9, 0x4a, 0x06, 0x04, 0xb8, 0x00, 0x6c, 0xc7, 0x94, 0xbc, 0xab, 0x57, 0x73, 0x49, + 0xbc, 0xf8, 0x63, 0x37, + ], + cmx: [ + 0x85, 0xec, 0x16, 0xe8, 0x78, 0x77, 0x33, 0x37, 0x07, 0x9a, 0xec, 0xf3, 0x2c, 0x45, + 0x5e, 0xbf, 0x16, 0x96, 0x8d, 0xa1, 0xd4, 0x34, 0x51, 0xb7, 0xa3, 0x06, 0x87, 0x6c, + 0xa3, 0x08, 0xea, 0x3c, + ], + esk: [ + 0x05, 0x18, 0xdd, 0xc0, 0xc4, 0x7b, 0x7f, 0x77, 0xed, 0xcd, 0x39, 0x16, 0x0f, 0xe5, + 0x67, 0x75, 0x1e, 0xb8, 0x4a, 0xa2, 0x1d, 0x33, 0xa6, 0x90, 0xe0, 0xd2, 0x9b, 0x35, + 0x9a, 0xc4, 0xfa, 0x2c, + ], + ephemeral_key: [ + 0x10, 0x0d, 0xf0, 0x1d, 0x49, 0x86, 0x01, 0x21, 0x8a, 0x28, 0x6b, 0x8f, 0x4e, 0x54, + 0xda, 0x9b, 0x3f, 0x14, 0x5c, 0x34, 0x70, 0xa9, 0xdb, 0xc4, 0x14, 0x48, 0x0a, 0xa8, + 0xf2, 0xf4, 0x90, 0x9c, + ], + shared_secret: [ + 0x93, 0x68, 0xdd, 0x4f, 0x2a, 0xf6, 0x23, 0x34, 0xb8, 0x85, 0xb9, 0x6b, 0xc4, 0xc3, + 0x8f, 0x10, 0x3a, 0xec, 0x25, 0x6b, 0xed, 0xc2, 0x8b, 0x5e, 0x2e, 0x10, 0x36, 0x4c, + 0xdd, 0xf3, 0x84, 0xa4, + ], + k_enc: [ + 0x7a, 0xff, 0xfc, 0x6e, 0xae, 0x5d, 0x56, 0xb2, 0x7b, 0x86, 0xdb, 0x9e, 0xc8, 0xae, + 0xc2, 0x70, 0xbb, 0x0a, 0xb7, 0x31, 0x23, 0xfd, 0x2a, 0x0b, 0x83, 0xf4, 0xef, 0x84, + 0xc6, 0x98, 0xe1, 0x67, + ], + p_enc: [ + 0x03, 0xf6, 0xb0, 0x18, 0xdf, 0xa7, 0x26, 0x31, 0x5b, 0x44, 0xcf, 0x9e, 0x0d, 0x22, + 0x4a, 0xb7, 0xa1, 0x02, 0x4e, 0x1d, 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, + 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, + 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0xa9, 0x71, 0x5e, 0x65, + 0xaf, 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, + 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, + 0xff, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, + 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, + 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, + 0x5a, 0xc9, 0xab, 0xe8, 0xdb, 0x22, 0x56, 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, + 0x39, 0x50, 0x38, 0x70, 0x59, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, + 0xa2, 0xd4, 0x2e, 0xc9, 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, + 0x2a, 0xa1, 0xe7, 0x4f, 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, 0xac, + 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, + 0x49, 0x6b, 0xea, 0xb4, 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, + 0xa2, 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, + 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, 0xa3, + 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, 0x77, 0x74, + 0xa8, 0x1e, 0x05, 0xb7, 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, 0xc9, 0xde, 0x64, + 0xe1, 0xb1, 0x1d, 0xcf, 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, 0x48, 0x75, 0x5a, 0x9f, + 0xc6, 0xf2, 0xa0, 0x0b, 0x10, 0xc3, 0x65, 0x7e, 0xba, 0xc0, 0x3b, 0xfc, 0x0b, 0x58, + 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0xcd, 0xaa, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, + 0xb9, 0x14, 0x2c, 0x61, 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, + 0x49, 0x5b, 0x51, 0xe4, 0xd2, 0x84, 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, + 0x6c, 0x6f, 0xae, 0x35, 0x9f, 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, + 0xaf, 0x18, 0x77, 0x00, 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, + 0xbb, 0x59, 0xfb, 0x35, 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, 0xeb, + 0xf9, 0x4e, 0x51, 0x5e, 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, 0x8d, 0x64, + 0xe7, 0x78, 0x9f, 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, 0x32, 0x6a, 0x5b, + 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x76, 0x17, + 0x0e, 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, 0x9c, 0x2d, 0xbd, 0x0e, 0xed, 0xee, + 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, 0xb8, 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, + 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, + 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, + 0x9b, 0xca, 0xc9, 0xaa, 0xa1, 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, + 0x6d, 0xa0, 0x30, 0x20, 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, + 0x37, 0xf5, 0x5a, 0x46, 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, + 0x92, 0x7d, 0x1b, 0xd8, 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, + 0xe1, 0xd0, 0x01, 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, + 0xc3, 0x70, 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, + 0xd8, 0x02, 0xf7, 0x73, + ], + c_enc: [ + 0x45, 0x6b, 0x2b, 0xb8, 0x03, 0xc7, 0xdf, 0xf7, 0xac, 0x82, 0xe6, 0x42, 0xf4, 0xd8, + 0x46, 0x1e, 0x0b, 0x7a, 0x3b, 0x3c, 0x95, 0xa4, 0xcb, 0xf1, 0xc0, 0x6f, 0xeb, 0x93, + 0xa1, 0x8b, 0xeb, 0xa2, 0x9f, 0x2b, 0x8f, 0x12, 0x1a, 0x61, 0x5c, 0xa5, 0x3f, 0xc2, + 0xa7, 0x60, 0x63, 0xb8, 0x0d, 0xaa, 0x71, 0x01, 0x8b, 0x66, 0x3b, 0x7c, 0x46, 0x6d, + 0xb2, 0x63, 0xf9, 0x04, 0x27, 0xd0, 0x11, 0x7f, 0x0b, 0x89, 0x90, 0x6e, 0x98, 0x41, + 0x7f, 0x3e, 0xe8, 0x5a, 0xcc, 0xed, 0xb1, 0x41, 0xfb, 0x10, 0x26, 0xa3, 0xb3, 0xf7, + 0xa4, 0xfd, 0x10, 0x24, 0xf9, 0xc8, 0x08, 0x9a, 0x2e, 0xbe, 0x1a, 0x27, 0x82, 0xf8, + 0xb0, 0xbf, 0x5c, 0x40, 0xb6, 0xd5, 0x2f, 0xfe, 0x38, 0x37, 0xf4, 0xe4, 0x42, 0x52, + 0x13, 0x41, 0xc2, 0x4d, 0x3e, 0x89, 0x55, 0x95, 0x08, 0x86, 0x27, 0x85, 0xea, 0x63, + 0x56, 0xb4, 0xe4, 0x66, 0xc3, 0x25, 0x9c, 0xeb, 0x0d, 0x28, 0x2e, 0x07, 0xbb, 0x35, + 0xdc, 0xf2, 0xd9, 0xa8, 0x62, 0xc7, 0x47, 0x58, 0xd3, 0x83, 0xaa, 0xa2, 0x82, 0xfa, + 0xc4, 0xfa, 0xcf, 0xe5, 0x39, 0xe4, 0xe1, 0xbb, 0xd5, 0x46, 0x8a, 0xcf, 0x25, 0xec, + 0x2b, 0x4b, 0xa5, 0x11, 0x9d, 0xea, 0xed, 0x01, 0x1d, 0x4f, 0x30, 0xb0, 0xc5, 0x82, + 0x01, 0xfe, 0xe1, 0xc6, 0xe4, 0xf6, 0xb5, 0x2e, 0x41, 0xad, 0xfa, 0x5d, 0x6f, 0xda, + 0x94, 0xa5, 0x23, 0x20, 0xe8, 0x3b, 0x80, 0xc6, 0xfc, 0xee, 0xb8, 0x97, 0x89, 0xd8, + 0x79, 0x94, 0xb7, 0xa0, 0x16, 0xec, 0x64, 0xe4, 0x70, 0x78, 0x07, 0xf8, 0xf2, 0xd2, + 0x30, 0x63, 0x10, 0x74, 0x10, 0x9f, 0xc5, 0x9d, 0xe3, 0xe4, 0x37, 0x10, 0xca, 0xe8, + 0x9c, 0xb1, 0x89, 0xa0, 0xa4, 0x64, 0x8b, 0x37, 0x54, 0x5d, 0x25, 0x49, 0x47, 0x95, + 0xa8, 0xdf, 0x3f, 0xfc, 0x7a, 0x3a, 0x21, 0xe3, 0xb9, 0x1c, 0x95, 0x96, 0xe0, 0xd5, + 0x10, 0x5d, 0xf8, 0xad, 0xa9, 0xcf, 0xe9, 0x31, 0x10, 0xb1, 0x9f, 0xf2, 0xaf, 0x83, + 0x03, 0xb5, 0xd2, 0x79, 0x3f, 0xff, 0xd0, 0x4d, 0x8e, 0x02, 0xf7, 0xb9, 0x30, 0x14, + 0x80, 0xdf, 0xd9, 0x35, 0x50, 0x2d, 0x98, 0xe2, 0xf3, 0xc3, 0xe9, 0xe9, 0x5e, 0x64, + 0xe4, 0x96, 0xeb, 0x7d, 0x15, 0xcf, 0x2c, 0x70, 0x11, 0x94, 0xe6, 0x25, 0xde, 0x52, + 0x1a, 0x02, 0x55, 0x20, 0xdf, 0x67, 0xac, 0x2b, 0xa4, 0x3b, 0x9c, 0x4a, 0x6d, 0x77, + 0xb8, 0x6a, 0x40, 0x18, 0x2d, 0x70, 0x31, 0x8b, 0x8f, 0xa3, 0x48, 0xb1, 0x86, 0x47, + 0xd8, 0x4e, 0x0e, 0xe5, 0xf0, 0x56, 0x07, 0xa2, 0xb8, 0xf2, 0x69, 0xe1, 0x86, 0xc7, + 0x94, 0x28, 0xbe, 0xa6, 0x7c, 0xbf, 0x71, 0xda, 0xcc, 0x98, 0xe9, 0xcc, 0x72, 0x5e, + 0x50, 0x53, 0xa4, 0x40, 0xca, 0xa6, 0xca, 0xd2, 0x41, 0xa5, 0x06, 0x28, 0x18, 0x3a, + 0xe9, 0xef, 0x9f, 0x0c, 0xbd, 0xfe, 0xf7, 0x0a, 0x42, 0xe5, 0xb7, 0x97, 0xbc, 0x99, + 0xd9, 0x22, 0xfc, 0xc2, 0x81, 0x37, 0x84, 0xea, 0xe4, 0x48, 0x60, 0x18, 0x0e, 0xf8, + 0xe8, 0x1f, 0x7b, 0x94, 0xf2, 0xad, 0x62, 0x12, 0x8b, 0xb6, 0x1f, 0x10, 0xd5, 0x0c, + 0x9c, 0xad, 0x9d, 0x80, 0x48, 0xd9, 0x78, 0x01, 0x8a, 0x1f, 0x3b, 0xc9, 0x24, 0x28, + 0xf8, 0x9d, 0x7d, 0xdc, 0xe5, 0x45, 0x4b, 0xc4, 0x49, 0x1f, 0xb4, 0xc2, 0xcb, 0x66, + 0x88, 0x35, 0xb2, 0x2f, 0xcc, 0x4d, 0xf2, 0x08, 0xf2, 0x16, 0x64, 0xf7, 0x12, 0x94, + 0xc5, 0xce, 0xd3, 0x3c, 0x8e, 0x11, 0xd4, 0x25, 0xd1, 0x39, 0x85, 0x23, 0xc2, 0x79, + 0x88, 0x3a, 0x38, 0x2f, 0x70, 0xfe, 0xfe, 0xc8, 0x25, 0xc5, 0xe3, 0x50, 0x85, 0xaf, + 0x82, 0xd0, 0xa0, 0xa9, 0xbf, 0x45, 0x11, 0x65, 0x0a, 0x2b, 0xfb, 0xf0, 0xb2, 0x18, + 0x82, 0x10, 0x5e, 0xc6, 0xe5, 0x99, 0x74, 0xd8, 0xd6, 0xce, 0x73, 0x07, 0x8f, 0xb4, + 0xb5, 0x63, 0x4e, 0x85, 0xd7, 0xe2, 0x0a, 0x97, 0xff, 0xb6, 0x5d, 0x4f, 0x5e, 0xaf, + 0x42, 0x63, 0x9b, 0x09, 0xf5, 0xed, 0xa5, 0x9a, 0xb1, 0x04, 0x97, 0x69, 0x95, 0x41, + 0xd1, 0xc8, 0x22, 0x8e, 0xb5, 0xdf, 0x47, 0xa6, 0x67, 0xc4, 0x6d, 0x4c, 0xff, 0xeb, + 0xfe, 0x3f, 0xbb, 0x0a, 0x4e, 0x48, + ], + ock: [ + 0x17, 0xeb, 0xb4, 0x82, 0xdf, 0x8d, 0x13, 0xc2, 0x0d, 0x9b, 0x4a, 0x03, 0x9f, 0x40, + 0x5a, 0x93, 0x69, 0x8a, 0xc2, 0x24, 0xf3, 0xea, 0x03, 0xfb, 0x55, 0x8d, 0x5b, 0x53, + 0x11, 0x46, 0xfb, 0xea, + ], + op: [ + 0x05, 0x82, 0x53, 0xd4, 0x85, 0x76, 0x44, 0x88, 0x5e, 0x26, 0xa9, 0x09, 0xc8, 0x38, + 0x59, 0x25, 0x23, 0x5a, 0x75, 0x29, 0x85, 0x44, 0x6e, 0x11, 0x69, 0x5f, 0x36, 0xc2, + 0xe6, 0x84, 0x45, 0xbb, 0x05, 0x18, 0xdd, 0xc0, 0xc4, 0x7b, 0x7f, 0x77, 0xed, 0xcd, + 0x39, 0x16, 0x0f, 0xe5, 0x67, 0x75, 0x1e, 0xb8, 0x4a, 0xa2, 0x1d, 0x33, 0xa6, 0x90, + 0xe0, 0xd2, 0x9b, 0x35, 0x9a, 0xc4, 0xfa, 0x2c, + ], + c_out: [ + 0x2d, 0x76, 0x57, 0x79, 0x67, 0x44, 0x5f, 0xb9, 0x17, 0xee, 0x72, 0xd3, 0x2d, 0x4b, + 0x75, 0x3b, 0x25, 0x10, 0xd8, 0x05, 0x5d, 0xec, 0x8b, 0xf1, 0x22, 0x0a, 0x75, 0xf0, + 0x65, 0xbd, 0x47, 0xe2, 0xcc, 0xb6, 0x03, 0x98, 0x84, 0x50, 0x23, 0x1b, 0xd3, 0x1c, + 0x15, 0x6f, 0xf2, 0xa7, 0x2a, 0xfd, 0x4a, 0x96, 0x0b, 0x6f, 0x6a, 0x78, 0x84, 0x65, + 0x13, 0x51, 0xe2, 0x4b, 0x47, 0x02, 0x87, 0xd5, 0x83, 0xba, 0x69, 0x71, 0x18, 0xec, + 0x07, 0xf6, 0x59, 0x2c, 0x4c, 0xd7, 0xcd, 0x6a, 0xc7, 0x7e, + ], + note_type: Some([ + 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, + 0x84, 0xef, 0xd9, 0x2c, 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, + 0x4f, 0x95, 0x22, 0xb2, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0xb6, 0x6c, 0x73, 0x33, 0x75, 0xda, 0xc6, 0xff, 0xcc, 0x98, 0xf5, 0x0f, 0x3a, 0xf0, + 0xb0, 0x76, 0x05, 0x53, 0xfe, 0x98, 0xed, 0x61, 0xff, 0xa4, 0x93, 0xea, 0xe6, 0x8d, + 0xf0, 0xb3, 0x33, 0x4e, 0xe8, 0xd4, 0x39, 0x37, 0xb7, 0xdb, 0x8e, 0xbb, 0xfe, 0xbd, + 0x54, 0x8a, 0x28, 0x02, 0x51, 0xea, 0x87, 0xaa, 0x5d, 0x8c, 0xa5, 0x36, 0x86, 0x1b, + 0x38, 0x4f, 0x20, 0x86, 0x9f, 0x8f, 0xe8, 0x01, + ], + ovk: [ + 0xe9, 0x4c, 0x15, 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, 0x3f, 0x38, 0x0a, 0x4d, + 0x20, 0xf1, 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x3d, 0x73, 0x45, 0x9a, + 0xfe, 0x24, 0x1f, 0x72, + ], + default_d: [ + 0x7c, 0x51, 0xbe, 0xc6, 0xee, 0x28, 0x46, 0xfd, 0x85, 0x12, 0x64, + ], + default_pk_d: [ + 0x7a, 0xfc, 0xa0, 0x5d, 0x04, 0x2c, 0x84, 0x3e, 0xec, 0xdc, 0x37, 0x24, 0x10, 0x52, + 0xc4, 0x6f, 0x93, 0xd4, 0xaf, 0xd5, 0xc9, 0xb0, 0x4d, 0x2b, 0x26, 0x4e, 0x81, 0x0f, + 0x25, 0xc8, 0xd6, 0xae, + ], + v: 16065731808124965111, + rseed: [ + 0x26, 0xf2, 0x84, 0x38, 0xe5, 0x78, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, 0xf5, + 0xed, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, + 0x71, 0x8c, 0x29, 0xdd, + ], + memo: [ + 0xff, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, + 0x90, 0x17, 0xdc, 0x3a, 0x97, 0xed, 0x75, 0x43, 0x67, 0x72, 0x30, 0x98, 0xe5, 0x76, + 0x58, 0x40, 0xb0, 0x22, 0x89, 0x72, 0x44, 0x74, 0x5f, 0xbb, 0xbb, 0x30, 0xa7, 0xcb, + 0x54, 0xfa, 0x05, 0x11, 0x16, 0x6e, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, + 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, 0x8d, + 0x23, 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, 0x07, 0x34, + 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, 0xab, 0x56, 0x6f, + 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, 0x0f, 0x08, 0x2b, 0x47, + 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, + 0x6d, 0xdf, 0x18, 0x65, 0xf7, 0x66, 0x70, 0x2e, 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, + 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, + 0xbe, 0x32, 0xc6, 0x75, 0xbe, 0x18, 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, + 0x08, 0x9c, 0x28, 0x3f, 0x19, 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, + 0x00, 0x43, 0x4f, 0x28, 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, + 0xa4, 0xc6, 0xa0, 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, + 0x60, 0xad, 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, + 0x33, 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, 0x7e, + 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, + 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, 0x87, 0x40, + 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, 0xae, 0x0f, 0x07, + 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, 0x49, 0xdb, 0x1d, 0x7e, + 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, 0x0e, 0xd9, 0xe3, 0xf7, 0x43, + 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, + 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, + 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, + 0x47, 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, + 0x67, 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, + 0x56, 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, + 0xda, 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, + 0x65, 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, + 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, + 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, + 0x1e, 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, + 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, 0x8c, + 0xb6, 0x50, 0x82, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x54, 0xb6, 0x99, 0x64, 0x13, 0x6b, 0x63, 0xd1, 0x7d, 0x62, 0x44, 0x1a, 0x69, 0x37, + 0x13, 0x9d, 0x2c, 0xe1, 0x4b, 0xb5, 0x5c, 0x42, 0x07, 0xfe, 0x74, 0xd7, 0x70, 0x83, + 0x53, 0x51, 0x5b, 0xa8, + ], + rho: [ + 0x27, 0x3c, 0x68, 0xd1, 0x9c, 0xda, 0xa8, 0x62, 0x8b, 0xac, 0x37, 0xa2, 0xd4, 0x2c, + 0x51, 0x1c, 0x9b, 0xab, 0x65, 0xb6, 0xd8, 0xd5, 0xc5, 0xbd, 0x1e, 0x32, 0x77, 0x1a, + 0xb6, 0xf6, 0x4c, 0x26, + ], + cmx: [ + 0x40, 0x8f, 0x59, 0x4f, 0xdd, 0xc5, 0x0c, 0x67, 0xf5, 0x47, 0xe1, 0xeb, 0x3e, 0xa2, + 0x99, 0xa3, 0x1f, 0x69, 0xf5, 0x7f, 0xc9, 0x92, 0x03, 0x01, 0x42, 0x90, 0x35, 0xa6, + 0xc2, 0x49, 0x79, 0x1a, + ], + esk: [ + 0xcb, 0xfc, 0x51, 0x10, 0xff, 0x2f, 0xe9, 0xc5, 0xd5, 0x9e, 0xef, 0x08, 0xbd, 0xf6, + 0xf8, 0x57, 0xe7, 0x1a, 0xab, 0x45, 0x0e, 0x6c, 0xd6, 0x13, 0xf5, 0x3b, 0x57, 0xc3, + 0x45, 0xa9, 0x87, 0x2f, + ], + ephemeral_key: [ + 0xa5, 0xc8, 0x0a, 0x29, 0xf2, 0xec, 0xdd, 0xd7, 0x01, 0x96, 0xef, 0x45, 0x9e, 0xd5, + 0x03, 0xc4, 0xb3, 0xc2, 0x22, 0x8d, 0x10, 0xcc, 0xbc, 0xad, 0x9a, 0x28, 0x23, 0x30, + 0x07, 0x7b, 0xca, 0x0c, + ], + shared_secret: [ + 0x37, 0x14, 0x15, 0xfc, 0x1e, 0x98, 0x42, 0xa1, 0x26, 0xa3, 0x7a, 0xa7, 0x7b, 0x8f, + 0x0f, 0x1a, 0xb6, 0x48, 0xa3, 0xf7, 0x43, 0x57, 0x34, 0x89, 0x6f, 0x07, 0x59, 0x52, + 0xe7, 0xd1, 0x60, 0x17, + ], + k_enc: [ + 0xd7, 0x36, 0xf0, 0x3c, 0x81, 0x2d, 0x9b, 0xf9, 0x54, 0xff, 0xd2, 0x41, 0x84, 0x07, + 0xf3, 0x36, 0xa5, 0xf9, 0x69, 0x8b, 0x62, 0x85, 0x23, 0x2f, 0x5c, 0x85, 0xf0, 0xd1, + 0x1d, 0x5e, 0x9d, 0x0a, + ], + p_enc: [ + 0x03, 0x7c, 0x51, 0xbe, 0xc6, 0xee, 0x28, 0x46, 0xfd, 0x85, 0x12, 0x64, 0xf7, 0x90, + 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0xf2, 0x84, 0x38, 0xe5, 0x78, 0x2f, 0x45, + 0xac, 0x1d, 0x07, 0xf6, 0xf6, 0xf5, 0xed, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, + 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0xdf, 0xfd, 0x79, 0xa9, + 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, + 0x53, 0xa5, 0xcd, 0x2a, 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, + 0xff, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, + 0x90, 0x17, 0xdc, 0x3a, 0x97, 0xed, 0x75, 0x43, 0x67, 0x72, 0x30, 0x98, 0xe5, 0x76, + 0x58, 0x40, 0xb0, 0x22, 0x89, 0x72, 0x44, 0x74, 0x5f, 0xbb, 0xbb, 0x30, 0xa7, 0xcb, + 0x54, 0xfa, 0x05, 0x11, 0x16, 0x6e, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, + 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, 0x8d, + 0x23, 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, 0x07, 0x34, + 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, 0xab, 0x56, 0x6f, + 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, 0x0f, 0x08, 0x2b, 0x47, + 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, + 0x6d, 0xdf, 0x18, 0x65, 0xf7, 0x66, 0x70, 0x2e, 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, + 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, + 0xbe, 0x32, 0xc6, 0x75, 0xbe, 0x18, 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, + 0x08, 0x9c, 0x28, 0x3f, 0x19, 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, + 0x00, 0x43, 0x4f, 0x28, 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, + 0xa4, 0xc6, 0xa0, 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, + 0x60, 0xad, 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, + 0x33, 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, 0x7e, + 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, + 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, 0x87, 0x40, + 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, 0xae, 0x0f, 0x07, + 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, 0x49, 0xdb, 0x1d, 0x7e, + 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, 0x0e, 0xd9, 0xe3, 0xf7, 0x43, + 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, + 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, + 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, + 0x47, 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, + 0x67, 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, + 0x56, 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, + 0xda, 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, + 0x65, 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, + 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, + 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, + 0x1e, 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, + 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, 0x8c, + 0xb6, 0x50, 0x82, 0xa6, + ], + c_enc: [ + 0xfc, 0x90, 0xcb, 0xe1, 0xcd, 0x9f, 0x59, 0x9a, 0x1a, 0x24, 0xc7, 0xa3, 0xea, 0xf6, + 0x07, 0xd9, 0x13, 0xbf, 0x48, 0xbd, 0xc1, 0xa4, 0x6d, 0xf7, 0xb1, 0x74, 0x7f, 0x12, + 0x60, 0x64, 0x49, 0x4b, 0xf5, 0x39, 0x61, 0xe9, 0xa5, 0xa2, 0xb9, 0x69, 0x80, 0x57, + 0x63, 0x44, 0x2e, 0x2c, 0x38, 0x8d, 0x21, 0x2d, 0x74, 0x84, 0x6e, 0x57, 0x27, 0x87, + 0x2d, 0x06, 0x3f, 0xc9, 0x94, 0xa4, 0x4f, 0x9e, 0xb6, 0x55, 0x25, 0xd6, 0x8f, 0x98, + 0x24, 0xa6, 0x03, 0x75, 0xfe, 0x43, 0xc0, 0x5f, 0x08, 0xfe, 0x45, 0x42, 0xa7, 0xe4, + 0x0c, 0x03, 0x8d, 0xe7, 0x10, 0x85, 0x01, 0x17, 0x95, 0x1b, 0x9a, 0x32, 0x1e, 0xea, + 0x4f, 0x8c, 0x91, 0xc0, 0x1d, 0x39, 0xdb, 0xb5, 0xd4, 0x12, 0x40, 0xf8, 0xb1, 0xb1, + 0xdb, 0xb3, 0x3f, 0x45, 0x87, 0x87, 0xdb, 0x8c, 0xda, 0x06, 0x9b, 0x64, 0x5a, 0x76, + 0x38, 0xc2, 0xec, 0xca, 0xd3, 0xd9, 0xa7, 0x39, 0xd6, 0x4c, 0x9a, 0xd5, 0xd5, 0xb3, + 0xa0, 0x24, 0x55, 0xa4, 0xec, 0xd6, 0x96, 0x7c, 0xf3, 0xb3, 0x3b, 0xf0, 0x4e, 0xf6, + 0xdd, 0x88, 0x10, 0xe1, 0x0c, 0x25, 0x86, 0xf7, 0x89, 0x32, 0x44, 0xea, 0x72, 0x80, + 0xd1, 0x34, 0xcf, 0x37, 0xb3, 0xdc, 0x0c, 0x32, 0x82, 0x3b, 0x1a, 0x29, 0xc5, 0x0c, + 0xa6, 0x48, 0x31, 0xd8, 0x4e, 0xbd, 0xf5, 0xe0, 0x1c, 0x14, 0xca, 0x36, 0x05, 0xbe, + 0x02, 0xf1, 0x5f, 0x31, 0x57, 0x90, 0xf7, 0x4e, 0x20, 0x57, 0x7f, 0x92, 0x39, 0x51, + 0x2f, 0xbd, 0xdd, 0x67, 0x63, 0x77, 0xae, 0x50, 0xc3, 0xfe, 0x71, 0xc9, 0x30, 0xa8, + 0x29, 0x57, 0xd1, 0x54, 0x70, 0xeb, 0x1b, 0x55, 0xb2, 0x0c, 0xe5, 0x02, 0x35, 0x64, + 0xfe, 0xa7, 0xe1, 0x81, 0xbe, 0x04, 0xa9, 0x33, 0xa7, 0xa3, 0xa1, 0x11, 0x89, 0x4d, + 0xec, 0xf7, 0x2a, 0x56, 0x54, 0xcb, 0x4e, 0xac, 0x32, 0xe1, 0xd5, 0x96, 0xad, 0x99, + 0x1a, 0x2f, 0x4c, 0x62, 0xe8, 0xe2, 0x82, 0x57, 0x13, 0x7b, 0xcb, 0xa5, 0x03, 0xdc, + 0x91, 0xed, 0x9e, 0x90, 0xb3, 0x08, 0xcd, 0xa5, 0xcc, 0xcc, 0xc9, 0xd1, 0x4e, 0xa6, + 0xd0, 0x3b, 0x3d, 0xec, 0xa1, 0x57, 0xd5, 0x30, 0xde, 0x63, 0x1e, 0x1e, 0x45, 0x8f, + 0x6a, 0x60, 0x8e, 0x1f, 0x9d, 0x57, 0x9b, 0x6e, 0xe6, 0x00, 0x5c, 0xd0, 0xa8, 0xc3, + 0xe2, 0xdf, 0x89, 0x46, 0x8a, 0xcf, 0xb4, 0x36, 0xcb, 0x59, 0x84, 0x56, 0xf0, 0x38, + 0x95, 0x5d, 0xc6, 0xb4, 0x07, 0xec, 0x33, 0x00, 0xa5, 0xcf, 0xcd, 0xc8, 0x45, 0x47, + 0xe3, 0xef, 0xe9, 0xfc, 0xa1, 0x7e, 0xd2, 0xc2, 0x74, 0xf0, 0x03, 0x0b, 0x63, 0xcc, + 0x42, 0xe2, 0x38, 0x94, 0xa5, 0xf2, 0x53, 0x66, 0xcb, 0xc3, 0xbf, 0xcb, 0x77, 0x2d, + 0x04, 0x17, 0xf6, 0x24, 0x4b, 0x2f, 0xd8, 0x17, 0xc4, 0xc6, 0x79, 0x06, 0xc3, 0x38, + 0x4d, 0x69, 0xd7, 0x93, 0xef, 0xca, 0x6e, 0x5d, 0x6a, 0xf2, 0x5e, 0x4e, 0xbc, 0x0f, + 0x53, 0x56, 0xeb, 0x74, 0x28, 0x85, 0x19, 0xe8, 0xf4, 0x49, 0x38, 0xeb, 0xf9, 0xb2, + 0x5b, 0xe5, 0x85, 0xe1, 0x35, 0x1f, 0x62, 0x59, 0x6c, 0x31, 0x79, 0xca, 0xe4, 0x5e, + 0x75, 0x49, 0xd7, 0xfb, 0xb5, 0x91, 0x3b, 0xe9, 0xc3, 0xba, 0xa5, 0x7c, 0xab, 0x7c, + 0xd4, 0xb5, 0x67, 0x12, 0x8d, 0x1b, 0xa5, 0x20, 0x31, 0xd7, 0xd5, 0xa5, 0xbd, 0x69, + 0xde, 0x61, 0x4a, 0xbb, 0x8c, 0xa3, 0x8a, 0x94, 0x51, 0xcd, 0x1b, 0xad, 0xd9, 0x71, + 0xb3, 0xf1, 0xb0, 0xb5, 0x0c, 0x7f, 0x21, 0xbf, 0xc4, 0x23, 0x04, 0xa4, 0xa5, 0x3e, + 0x0d, 0x55, 0x92, 0x0d, 0xa0, 0x53, 0x27, 0x14, 0x79, 0x13, 0x45, 0xfb, 0x07, 0x4c, + 0x66, 0xc4, 0xb7, 0xc9, 0x89, 0x28, 0x30, 0xf9, 0x62, 0x09, 0xb8, 0x1c, 0x26, 0xd1, + 0x74, 0xf8, 0xa9, 0x33, 0xc3, 0x77, 0x9d, 0x97, 0x88, 0x55, 0x3f, 0x6e, 0xeb, 0x21, + 0xf7, 0xdb, 0x57, 0x78, 0xf4, 0xf8, 0x17, 0x4c, 0xb4, 0x6f, 0x71, 0xfd, 0xdc, 0x4b, + 0xe4, 0xd8, 0x70, 0x3e, 0xbf, 0xbc, 0xd2, 0xa7, 0x72, 0x89, 0xee, 0xfa, 0x72, 0x76, + 0x56, 0x74, 0xdb, 0xf0, 0xe0, 0x65, 0xff, 0xcb, 0xf6, 0xbb, 0xa0, 0x18, 0x09, 0x1e, + 0x49, 0xaa, 0x90, 0xe6, 0x02, 0xc8, + ], + ock: [ + 0x59, 0xf9, 0xcc, 0x26, 0x38, 0x4c, 0x6f, 0x73, 0xce, 0xa9, 0xb9, 0xe0, 0x94, 0x40, + 0xf8, 0xf0, 0x4c, 0x40, 0x25, 0xb5, 0x59, 0x04, 0x42, 0x3c, 0x35, 0x39, 0xc6, 0x6c, + 0x75, 0x11, 0x31, 0x23, + ], + op: [ + 0x7a, 0xfc, 0xa0, 0x5d, 0x04, 0x2c, 0x84, 0x3e, 0xec, 0xdc, 0x37, 0x24, 0x10, 0x52, + 0xc4, 0x6f, 0x93, 0xd4, 0xaf, 0xd5, 0xc9, 0xb0, 0x4d, 0x2b, 0x26, 0x4e, 0x81, 0x0f, + 0x25, 0xc8, 0xd6, 0xae, 0xcb, 0xfc, 0x51, 0x10, 0xff, 0x2f, 0xe9, 0xc5, 0xd5, 0x9e, + 0xef, 0x08, 0xbd, 0xf6, 0xf8, 0x57, 0xe7, 0x1a, 0xab, 0x45, 0x0e, 0x6c, 0xd6, 0x13, + 0xf5, 0x3b, 0x57, 0xc3, 0x45, 0xa9, 0x87, 0x2f, + ], + c_out: [ + 0x21, 0xe3, 0xf8, 0x97, 0xe1, 0xb1, 0x36, 0xe1, 0x74, 0xd7, 0xae, 0x88, 0xd7, 0x85, + 0xa0, 0x61, 0xe6, 0x71, 0xef, 0xf1, 0x81, 0x98, 0x0a, 0x6f, 0xf5, 0x19, 0xb3, 0xbb, + 0x6b, 0xbd, 0xaf, 0xea, 0x9d, 0xf9, 0x92, 0xbc, 0xaa, 0xc0, 0x2b, 0xdb, 0xcd, 0x4d, + 0xb1, 0xc1, 0xd3, 0xf3, 0x2d, 0xef, 0xcd, 0xf7, 0xf4, 0xad, 0x54, 0x1b, 0x6b, 0xee, + 0xe8, 0x27, 0xdd, 0x43, 0x89, 0xb8, 0x57, 0xd1, 0x6d, 0xb8, 0x24, 0xe7, 0x72, 0xba, + 0x5a, 0xb5, 0xe2, 0x8d, 0xd6, 0xe9, 0x80, 0x82, 0x6b, 0xed, + ], + note_type: Some([ + 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, + 0x01, 0xe2, 0x99, 0x0a, 0x53, 0xa5, 0xcd, 0x2a, 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, + 0xfd, 0x7d, 0x05, 0x8a, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0x8c, 0x45, 0x43, 0xe1, 0x1f, 0x9f, 0x30, 0x7e, 0xc9, 0x04, 0x31, 0x61, 0x29, 0x46, + 0xfb, 0x01, 0x81, 0xb3, 0x6e, 0x1b, 0x52, 0xdb, 0x43, 0x1e, 0x6d, 0xf9, 0x38, 0x8c, + 0xac, 0xd3, 0x08, 0xe8, 0x99, 0xd9, 0x3f, 0x70, 0xad, 0x2a, 0xea, 0xec, 0x99, 0x5e, + 0xcc, 0xe1, 0x80, 0x1c, 0x61, 0x56, 0xe2, 0x3e, 0xc4, 0x1b, 0x1a, 0xe1, 0xcd, 0x2f, + 0xd6, 0xe3, 0x9b, 0x69, 0x98, 0x2f, 0x46, 0x33, + ], + ovk: [ + 0x01, 0x76, 0xae, 0x33, 0x93, 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, + 0x5b, 0xab, 0x7c, 0x82, 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, + 0xe8, 0x55, 0xf6, 0x5a, + ], + default_d: [ + 0x4e, 0x42, 0x6d, 0xf1, 0xad, 0x32, 0x48, 0x94, 0xbc, 0xa2, 0xc1, + ], + default_pk_d: [ + 0x84, 0xda, 0x49, 0x6b, 0x16, 0x0a, 0x81, 0x72, 0xc4, 0x8d, 0x76, 0xb4, 0xfb, 0x08, + 0xbc, 0xab, 0xf4, 0x0f, 0xf1, 0xe4, 0x2c, 0x48, 0x66, 0x77, 0x57, 0x4f, 0x9e, 0xf8, + 0x36, 0x34, 0xb0, 0x23, + ], + v: 3775288302605163507, + rseed: [ + 0x49, 0x56, 0xbb, 0xb1, 0x95, 0xa4, 0xfa, 0x66, 0xdc, 0x9c, 0xd5, 0x42, 0xc7, 0x6b, + 0x91, 0x50, 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, 0x42, 0xf5, 0x5c, 0x20, 0x0b, 0x77, + 0x3e, 0xcd, 0xd7, 0x99, + ], + memo: [ + 0xff, 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, 0x0e, 0x68, 0xae, + 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, + 0x7d, 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, 0xd6, 0x01, 0xae, 0x90, 0x49, + 0x54, 0x37, 0xc3, 0xc2, 0xd4, 0x8a, 0x3d, 0x96, 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, + 0x7a, 0x84, 0xea, 0xa7, 0xaa, 0xb7, 0x40, 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, + 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, 0x9c, 0x54, 0x50, 0x73, 0xa1, 0x5d, 0x5c, 0xd0, + 0xfc, 0xc5, 0x74, 0x39, 0xa4, 0x35, 0x0e, 0xaf, 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, + 0xea, 0x8a, 0x4a, 0xf6, 0xfa, 0x83, 0x81, 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, + 0xf6, 0x5b, 0x32, 0x5d, 0x5a, 0xed, 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, + 0x18, 0x66, 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, + 0x83, 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, + 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, 0x05, + 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, 0x9e, 0x33, + 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0xd5, 0x1c, + 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0x99, 0x18, 0x39, 0xc3, 0xd0, 0xd3, + 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, 0xa4, 0x15, 0x09, 0x21, 0x7d, 0x0e, 0x7d, 0x2c, + 0xa1, 0xa0, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, + 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, 0x74, + 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, 0x89, + 0x3d, 0x77, 0xcb, 0x7f, 0x29, 0xb8, 0xc8, 0x47, 0xc5, 0x83, 0xf2, 0xd0, 0x71, 0xa6, + 0x86, 0x61, 0x6e, 0x20, 0x67, 0x19, 0xf7, 0x61, 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, + 0x06, 0x16, 0x3d, 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, 0x9e, + 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, 0xf4, 0x6e, + 0x64, 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, + 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, 0x63, + 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, 0x3e, 0x6d, + 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, 0xa0, 0x9a, 0x32, + 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, 0xcf, 0x9a, 0x7d, 0xee, + 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, 0xfd, 0xcb, 0x42, 0x20, 0x90, + 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, + 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, + 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, 0x27, + 0xa3, 0xef, 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, 0xd2, 0x06, + 0x2a, 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, + 0x6e, 0x67, 0x57, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x10, 0xb2, 0x33, 0xd2, 0x49, 0x94, 0x68, 0xe0, 0xb0, 0xdf, 0x47, 0x3d, 0x5a, 0x21, + 0xb9, 0x3f, 0x7d, 0x2b, 0x5d, 0x5f, 0x09, 0x95, 0xa9, 0x55, 0xd0, 0x86, 0x8a, 0x27, + 0x45, 0x3f, 0x96, 0x82, + ], + rho: [ + 0xea, 0x1d, 0x9d, 0x26, 0x5e, 0xf4, 0x8a, 0x18, 0x97, 0x89, 0x70, 0xb1, 0x76, 0x7b, + 0xe0, 0xe8, 0x14, 0x11, 0x94, 0x7e, 0x9e, 0x69, 0xb7, 0x19, 0xfa, 0xb7, 0x41, 0x72, + 0x1d, 0x40, 0x9b, 0x33, + ], + cmx: [ + 0x9e, 0x3d, 0x61, 0x35, 0x6b, 0x0d, 0x88, 0x95, 0x9e, 0x3f, 0x0f, 0xcc, 0x4a, 0x93, + 0x2e, 0x93, 0x2e, 0xac, 0xbc, 0x80, 0x1d, 0x48, 0xc0, 0x19, 0x5b, 0x9c, 0x8b, 0xd1, + 0x05, 0x5a, 0x8e, 0x2e, + ], + esk: [ + 0x1b, 0x52, 0x63, 0x2d, 0x2a, 0x8d, 0x58, 0xd1, 0x63, 0x57, 0xa9, 0x19, 0xa2, 0x06, + 0x31, 0xe2, 0x91, 0x14, 0xc8, 0x60, 0x07, 0xa2, 0xb1, 0x8b, 0x25, 0xec, 0xff, 0x47, + 0x72, 0x16, 0x8c, 0x05, + ], + ephemeral_key: [ + 0xc1, 0xce, 0x25, 0xfb, 0x89, 0xe5, 0xca, 0x89, 0x97, 0xf9, 0xb4, 0xbb, 0x0e, 0x1e, + 0xfb, 0xcc, 0x1a, 0x8c, 0xbf, 0x44, 0xec, 0xfd, 0x33, 0x2c, 0x6c, 0x5c, 0x17, 0x3b, + 0xb1, 0x1f, 0xb5, 0x87, + ], + shared_secret: [ + 0x2e, 0xe5, 0x69, 0xce, 0xb3, 0xfd, 0xb8, 0x67, 0xa5, 0xd8, 0x4c, 0x92, 0x68, 0x24, + 0xef, 0x54, 0x9f, 0x2d, 0xd2, 0x8f, 0x8b, 0x04, 0x8d, 0x67, 0xd0, 0x28, 0x81, 0x7d, + 0xbf, 0xf5, 0xd2, 0xb1, + ], + k_enc: [ + 0x41, 0x4d, 0x80, 0x67, 0xc9, 0xfe, 0xbd, 0x5e, 0xbc, 0xd9, 0xae, 0x8c, 0x05, 0x99, + 0x4e, 0x3b, 0x06, 0x85, 0xc8, 0x86, 0x6f, 0x88, 0x95, 0x94, 0xc3, 0x74, 0xb3, 0x75, + 0xac, 0x2c, 0x6d, 0x24, + ], + p_enc: [ + 0x03, 0x4e, 0x42, 0x6d, 0xf1, 0xad, 0x32, 0x48, 0x94, 0xbc, 0xa2, 0xc1, 0xf3, 0xdb, + 0x77, 0x79, 0xb5, 0x84, 0x64, 0x34, 0x49, 0x56, 0xbb, 0xb1, 0x95, 0xa4, 0xfa, 0x66, + 0xdc, 0x9c, 0xd5, 0x42, 0xc7, 0x6b, 0x91, 0x50, 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, + 0x42, 0xf5, 0x5c, 0x20, 0x0b, 0x77, 0x3e, 0xcd, 0xd7, 0x99, 0xa6, 0x33, 0x05, 0x44, + 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, 0xc4, 0x5a, 0x31, 0xf6, 0x2e, + 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, 0xab, 0x79, 0xb4, 0x42, 0x68, 0x3c, + 0xff, 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, 0x0e, 0x68, 0xae, + 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, + 0x7d, 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, 0xd6, 0x01, 0xae, 0x90, 0x49, + 0x54, 0x37, 0xc3, 0xc2, 0xd4, 0x8a, 0x3d, 0x96, 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, + 0x7a, 0x84, 0xea, 0xa7, 0xaa, 0xb7, 0x40, 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, + 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, 0x9c, 0x54, 0x50, 0x73, 0xa1, 0x5d, 0x5c, 0xd0, + 0xfc, 0xc5, 0x74, 0x39, 0xa4, 0x35, 0x0e, 0xaf, 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, + 0xea, 0x8a, 0x4a, 0xf6, 0xfa, 0x83, 0x81, 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, + 0xf6, 0x5b, 0x32, 0x5d, 0x5a, 0xed, 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, + 0x18, 0x66, 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, + 0x83, 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, + 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, 0x05, + 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, 0x9e, 0x33, + 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0xd5, 0x1c, + 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0x99, 0x18, 0x39, 0xc3, 0xd0, 0xd3, + 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, 0xa4, 0x15, 0x09, 0x21, 0x7d, 0x0e, 0x7d, 0x2c, + 0xa1, 0xa0, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, + 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, 0x74, + 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, 0x89, + 0x3d, 0x77, 0xcb, 0x7f, 0x29, 0xb8, 0xc8, 0x47, 0xc5, 0x83, 0xf2, 0xd0, 0x71, 0xa6, + 0x86, 0x61, 0x6e, 0x20, 0x67, 0x19, 0xf7, 0x61, 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, + 0x06, 0x16, 0x3d, 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, 0x9e, + 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, 0xf4, 0x6e, + 0x64, 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, + 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, 0x63, + 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, 0x3e, 0x6d, + 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, 0xa0, 0x9a, 0x32, + 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, 0xcf, 0x9a, 0x7d, 0xee, + 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, 0xfd, 0xcb, 0x42, 0x20, 0x90, + 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, + 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, + 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, 0x27, + 0xa3, 0xef, 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, 0xd2, 0x06, + 0x2a, 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, + 0x6e, 0x67, 0x57, 0x61, + ], + c_enc: [ + 0xbc, 0x8a, 0x16, 0xfd, 0x57, 0xbc, 0x03, 0x60, 0x59, 0xe5, 0x4d, 0xc2, 0xbc, 0xfa, + 0xad, 0x9c, 0xc1, 0xfa, 0xe8, 0xcb, 0x2b, 0xe2, 0xa0, 0xc8, 0x5e, 0x81, 0x6c, 0x67, + 0xfd, 0xcd, 0x0b, 0x93, 0xe6, 0xa1, 0xed, 0xc8, 0x3b, 0xfa, 0xc4, 0x1e, 0xb4, 0x19, + 0x1c, 0x56, 0x4b, 0xac, 0x58, 0x01, 0x62, 0x92, 0x2d, 0x88, 0x25, 0x30, 0x28, 0xeb, + 0x88, 0xed, 0x46, 0xbf, 0x24, 0x2d, 0x82, 0x28, 0x6c, 0xb0, 0xa5, 0x66, 0xce, 0x01, + 0x18, 0x09, 0x4c, 0x90, 0x8f, 0xc2, 0x68, 0xb3, 0x2b, 0xcb, 0xdc, 0x4c, 0x22, 0x82, + 0xc5, 0x24, 0x2a, 0x65, 0x15, 0x48, 0x8b, 0x83, 0x3d, 0x29, 0x8e, 0x49, 0xda, 0x33, + 0x3a, 0xdd, 0x96, 0xc9, 0x9b, 0x98, 0xac, 0x06, 0x7f, 0x21, 0x41, 0x28, 0x9a, 0xcd, + 0x89, 0x49, 0x64, 0xfc, 0xf8, 0x94, 0xc9, 0x26, 0xf1, 0x81, 0xb1, 0x19, 0x85, 0x68, + 0xb1, 0xdd, 0x6f, 0x5e, 0xd1, 0x22, 0xdc, 0x70, 0x44, 0xad, 0x96, 0x76, 0xa7, 0xc5, + 0xae, 0x8e, 0xa9, 0x0f, 0x64, 0xbc, 0x59, 0x09, 0x36, 0xe0, 0xdf, 0x53, 0x1c, 0x1b, + 0x94, 0xb7, 0x35, 0xcd, 0x7b, 0x18, 0x73, 0xc8, 0x51, 0x6f, 0xea, 0x83, 0x64, 0x91, + 0x40, 0xbc, 0xbb, 0x9b, 0x42, 0xea, 0x6c, 0xb7, 0xaf, 0x67, 0xdc, 0x2d, 0xdb, 0xb4, + 0x7a, 0xb2, 0x25, 0xe7, 0x98, 0x29, 0xcd, 0xaf, 0x77, 0x04, 0xfb, 0x56, 0x5b, 0x43, + 0x91, 0x76, 0xf3, 0x35, 0xe4, 0x2b, 0x64, 0xc1, 0x6d, 0xdf, 0xe0, 0x88, 0x45, 0x38, + 0xbf, 0x43, 0x33, 0xe3, 0x2c, 0xa1, 0xe6, 0x27, 0x41, 0xc3, 0xe7, 0x4c, 0x8f, 0xaa, + 0xde, 0x0d, 0x89, 0xfa, 0x10, 0x30, 0xcd, 0x8e, 0xfd, 0x20, 0x22, 0x3e, 0x41, 0xc3, + 0xfc, 0xca, 0xaa, 0xe7, 0x76, 0xe6, 0x8e, 0xe8, 0x40, 0x56, 0x6f, 0x4d, 0x13, 0xc1, + 0xc9, 0xd5, 0xcb, 0xbe, 0xcf, 0xa7, 0x49, 0x9d, 0x43, 0x12, 0x7c, 0xe8, 0xfd, 0x83, + 0xdb, 0x6e, 0x89, 0x67, 0x90, 0x32, 0x25, 0x24, 0x87, 0x21, 0x40, 0x0d, 0x5e, 0x3e, + 0xc0, 0xc1, 0x8e, 0x10, 0xf5, 0xe6, 0x6e, 0x10, 0x17, 0x0c, 0xb3, 0x74, 0x48, 0x22, + 0x4a, 0xde, 0x39, 0x9f, 0x1d, 0x74, 0xa2, 0x16, 0x7d, 0x9f, 0xdb, 0xfe, 0x36, 0xe1, + 0x28, 0xe4, 0x8c, 0x01, 0x62, 0x61, 0x16, 0xc1, 0xa2, 0xdf, 0x3c, 0xb0, 0x23, 0xd8, + 0x0a, 0xed, 0x9b, 0xfc, 0x02, 0x71, 0xb8, 0x1f, 0xf9, 0x79, 0x81, 0x01, 0x6f, 0xff, + 0x19, 0x61, 0x08, 0x88, 0x8b, 0xcb, 0xca, 0x84, 0x5b, 0x5d, 0x97, 0x1b, 0xd5, 0x4f, + 0x49, 0x7d, 0x3f, 0x3a, 0x09, 0x29, 0x9e, 0x56, 0x50, 0xd3, 0x26, 0xd8, 0x9b, 0x9a, + 0x5e, 0xff, 0x3e, 0xbd, 0x27, 0x39, 0x34, 0xc4, 0x9f, 0x81, 0x46, 0x7e, 0xb8, 0x4f, + 0x56, 0x98, 0x90, 0xcf, 0x89, 0x05, 0xb7, 0x4c, 0xd3, 0xed, 0xa6, 0x3c, 0x53, 0x88, + 0xd5, 0x51, 0x5e, 0x3f, 0xd8, 0x1c, 0x70, 0xc1, 0x5e, 0x2a, 0x98, 0x2d, 0x59, 0x0e, + 0x87, 0xb8, 0x64, 0x45, 0x4b, 0xcd, 0xf5, 0xf8, 0x4d, 0x9f, 0x11, 0xcb, 0x9c, 0xf2, + 0xb5, 0xde, 0x3c, 0x5e, 0x0e, 0x2a, 0x6c, 0x48, 0x16, 0x61, 0x64, 0x96, 0x6f, 0xb9, + 0x0d, 0xac, 0xf8, 0x67, 0x4f, 0x9f, 0x1a, 0x34, 0xd2, 0xcd, 0xc7, 0xc9, 0x48, 0xab, + 0x99, 0xc3, 0x58, 0xa1, 0x95, 0x47, 0x0a, 0xdd, 0x06, 0x5e, 0xaf, 0x79, 0x24, 0xfa, + 0xed, 0x63, 0x27, 0xa6, 0x10, 0xf5, 0x2e, 0xd5, 0xd3, 0xa8, 0x7e, 0x11, 0xb5, 0x97, + 0x4f, 0xa0, 0x60, 0x45, 0xa4, 0x08, 0x95, 0xcd, 0xad, 0x60, 0x1c, 0xae, 0x01, 0xed, + 0xda, 0x17, 0x52, 0x81, 0x62, 0xd7, 0x21, 0x24, 0xf2, 0x05, 0x6b, 0x9a, 0xb8, 0xc0, + 0xc0, 0xf5, 0xc6, 0xdd, 0xaa, 0x0f, 0x5e, 0x33, 0xfb, 0x04, 0x23, 0x0b, 0x61, 0x1b, + 0xff, 0xd8, 0xbd, 0xdc, 0x63, 0x4c, 0x79, 0x60, 0xa3, 0xd4, 0xe6, 0x8f, 0x21, 0xe7, + 0x83, 0x04, 0xe4, 0xc4, 0xd2, 0xdc, 0xd6, 0xa1, 0x9c, 0xfc, 0x04, 0x57, 0x97, 0x09, + 0xf0, 0x33, 0xf1, 0x95, 0x78, 0xae, 0x7f, 0x0b, 0xc6, 0x46, 0x32, 0xa6, 0xd7, 0xda, + 0x40, 0xdc, 0x0c, 0x38, 0x3b, 0xca, 0xa8, 0x68, 0x6a, 0xc8, 0x49, 0x3b, 0x2c, 0xb8, + 0xf1, 0xd7, 0xd3, 0x95, 0x8a, 0x54, + ], + ock: [ + 0xdb, 0x1e, 0xf1, 0x9a, 0xf6, 0xdd, 0x1b, 0x7b, 0xf0, 0x64, 0x89, 0xe7, 0xdb, 0x86, + 0xca, 0xae, 0x27, 0xf6, 0x70, 0x1e, 0x09, 0x16, 0x8c, 0x6e, 0x0d, 0x2b, 0x89, 0x78, + 0xdf, 0x14, 0xe0, 0x96, + ], + op: [ + 0x84, 0xda, 0x49, 0x6b, 0x16, 0x0a, 0x81, 0x72, 0xc4, 0x8d, 0x76, 0xb4, 0xfb, 0x08, + 0xbc, 0xab, 0xf4, 0x0f, 0xf1, 0xe4, 0x2c, 0x48, 0x66, 0x77, 0x57, 0x4f, 0x9e, 0xf8, + 0x36, 0x34, 0xb0, 0x23, 0x1b, 0x52, 0x63, 0x2d, 0x2a, 0x8d, 0x58, 0xd1, 0x63, 0x57, + 0xa9, 0x19, 0xa2, 0x06, 0x31, 0xe2, 0x91, 0x14, 0xc8, 0x60, 0x07, 0xa2, 0xb1, 0x8b, + 0x25, 0xec, 0xff, 0x47, 0x72, 0x16, 0x8c, 0x05, + ], + c_out: [ + 0x55, 0xdd, 0xba, 0xc4, 0x35, 0x64, 0x19, 0x54, 0xbd, 0xb1, 0xc9, 0x43, 0x4c, 0x36, + 0x79, 0x32, 0x19, 0x18, 0xbc, 0x1f, 0x29, 0x90, 0x7a, 0xc4, 0x24, 0x43, 0x55, 0x2d, + 0xfb, 0xe7, 0x05, 0xab, 0x26, 0x19, 0x1b, 0x4e, 0x2b, 0xae, 0xa4, 0xaa, 0xe0, 0x6d, + 0xa9, 0xf1, 0x38, 0x4e, 0x23, 0x7b, 0xee, 0xab, 0xb1, 0xa2, 0xd8, 0x22, 0x99, 0x5e, + 0xe7, 0xb9, 0x41, 0x0d, 0x6b, 0xe7, 0x59, 0x2a, 0xed, 0xa9, 0xf5, 0x2d, 0x56, 0xd8, + 0xc9, 0xf9, 0x3a, 0x0b, 0xe3, 0x8c, 0xfc, 0x8d, 0xc2, 0x94, + ], + note_type: Some([ + 0xa6, 0x33, 0x05, 0x44, 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, 0xc4, + 0x5a, 0x31, 0xf6, 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, 0xab, 0x79, + 0xb4, 0x42, 0x68, 0x3c, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0x47, 0x30, 0x68, 0xbf, 0x68, 0xe5, 0x0b, 0xe3, 0x85, 0x7d, 0xec, 0xb2, 0xef, 0xd5, + 0xde, 0x20, 0xea, 0xc8, 0x1b, 0x37, 0x5b, 0xd0, 0xbb, 0xe8, 0x36, 0x86, 0x6e, 0x99, + 0x36, 0x3b, 0x37, 0x50, 0x9d, 0x53, 0x8f, 0xcc, 0xa9, 0x33, 0x37, 0xad, 0xbc, 0x24, + 0x81, 0xe2, 0x70, 0x26, 0x18, 0x4c, 0x3f, 0x4f, 0x48, 0xcc, 0x5d, 0x5a, 0x0e, 0x4a, + 0x4c, 0xfa, 0x4d, 0x6a, 0x24, 0x7f, 0x2e, 0x39, + ], + ovk: [ + 0x25, 0xb4, 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, 0x46, 0x61, 0x9a, 0xf0, 0x24, 0x56, + 0xae, 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, + 0xd3, 0x33, 0xe1, 0x84, + ], + default_d: [ + 0x61, 0x5f, 0x53, 0x89, 0x1a, 0x18, 0xe0, 0x52, 0x17, 0x2d, 0x81, + ], + default_pk_d: [ + 0x04, 0x47, 0x12, 0x42, 0xe1, 0xf4, 0x2b, 0xf0, 0x81, 0xf0, 0x8e, 0x9d, 0x71, 0xfe, + 0x4f, 0x3a, 0x65, 0x91, 0xa7, 0xc0, 0x1e, 0xe2, 0xcf, 0x35, 0x30, 0x2f, 0x38, 0xd3, + 0x34, 0xeb, 0x90, 0x2c, + ], + v: 15119422206032203650, + rseed: [ + 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, 0xf6, 0xcb, 0x0c, 0x9c, 0xa0, 0x39, + 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, 0xcd, 0x59, 0xfc, 0xb6, 0x11, 0xfb, + 0x2d, 0x9b, 0x4c, 0x8f, + ], + memo: [ + 0xff, 0xa6, 0x01, 0xbb, 0x1c, 0xb8, 0xd0, 0x7d, 0x79, 0x7b, 0xf5, 0xde, 0x52, 0xbc, + 0xee, 0xb0, 0x23, 0x01, 0xc8, 0x96, 0x2a, 0xc1, 0xfc, 0x04, 0x91, 0xdc, 0x81, 0xaf, + 0xfd, 0x6c, 0x1e, 0xbf, 0x89, 0xa1, 0x3d, 0x6f, 0x29, 0x0e, 0xda, 0x5d, 0x5c, 0xef, + 0x38, 0x22, 0x15, 0xc5, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, + 0x26, 0xd0, 0xe6, 0x62, 0x90, 0x5f, 0x12, 0x50, 0x92, 0x6f, 0x6a, 0x22, 0x99, 0x90, + 0xe3, 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, + 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0xd6, 0x93, 0x00, 0x83, 0xf1, 0x84, + 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, 0xa2, 0xc6, 0xd2, 0x3d, 0x67, 0x36, + 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, 0xd1, 0xbe, 0x8f, 0x3d, 0xc4, 0xa7, + 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0x03, 0xd2, 0x49, 0x23, 0x06, + 0x7a, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, 0x50, 0x4e, 0x6f, 0xd5, 0x57, + 0x53, 0x40, 0x94, 0x56, 0x01, 0xfe, 0x80, 0x6f, 0x57, 0x56, 0xac, 0xb5, 0x62, 0xf1, + 0x3c, 0x0c, 0xa1, 0xd8, 0x03, 0xa1, 0x95, 0xc2, 0xeb, 0xb2, 0xef, 0x02, 0xac, 0x33, + 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, + 0x94, 0xd3, 0xa1, 0x9d, 0x3d, 0xca, 0x53, 0x1b, 0xeb, 0x50, 0xd4, 0x32, 0x7c, 0x5c, + 0x0c, 0x23, 0xcb, 0x7c, 0xfd, 0xb0, 0x8c, 0xa7, 0xcf, 0x2c, 0xac, 0x6b, 0xc1, 0x39, + 0xd0, 0x74, 0x14, 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, 0x6b, 0xf0, 0x54, 0x55, + 0x7c, 0xe2, 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, 0xec, 0x89, 0x09, 0xff, 0x51, + 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, + 0x73, 0x96, 0xa1, 0xbf, 0x57, 0xa9, 0x94, 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, 0x45, + 0xde, 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, 0x95, 0x55, + 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, 0x04, 0x7a, 0xf1, + 0x52, 0x50, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, 0x99, 0xac, + 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, 0xe7, 0x14, 0xef, + 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, + 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, + 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, + 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, + 0xda, 0x00, 0x75, 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, + 0xd9, 0x13, 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, + 0x06, 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, + 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, + 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, + 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, + 0x08, 0x74, 0x86, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x7e, 0xfd, 0xf4, 0x17, 0xcf, 0xd6, 0x44, 0x7d, 0x96, 0x58, 0x1d, 0xd1, 0x7b, 0x82, + 0x12, 0xee, 0x53, 0x7b, 0x13, 0x4b, 0x05, 0xa5, 0x58, 0x67, 0x4a, 0x39, 0xe6, 0x66, + 0x97, 0xe6, 0x3a, 0x29, + ], + rho: [ + 0x9a, 0xd0, 0x7f, 0x1c, 0x28, 0x7b, 0xdd, 0x53, 0x4f, 0x6f, 0x7e, 0xae, 0x08, 0xf7, + 0x85, 0x72, 0xa3, 0x05, 0xfa, 0x3b, 0x70, 0x68, 0xa3, 0x78, 0x38, 0x27, 0xaf, 0xe2, + 0x14, 0x7a, 0x27, 0x10, + ], + cmx: [ + 0xf2, 0x04, 0x22, 0x51, 0xa0, 0x59, 0xa2, 0xf5, 0x8a, 0xb8, 0xe9, 0x0b, 0x52, 0x64, + 0xd0, 0xa4, 0x3f, 0x96, 0xd7, 0x7e, 0xdd, 0x54, 0xf8, 0x0f, 0xf4, 0x9d, 0x43, 0x86, + 0x81, 0x4d, 0x73, 0x2e, + ], + esk: [ + 0xb5, 0x9a, 0x18, 0x4d, 0x24, 0xe6, 0x1b, 0x9f, 0x9d, 0x37, 0x1d, 0xa4, 0xb1, 0x44, + 0x01, 0x72, 0x02, 0x9a, 0x2e, 0xbc, 0x0a, 0x2a, 0xbe, 0xb8, 0xaf, 0x2b, 0xd1, 0xa0, + 0x8c, 0x67, 0xd9, 0x3f, + ], + ephemeral_key: [ + 0x46, 0x73, 0x1f, 0xff, 0xc5, 0x9a, 0xf4, 0xc1, 0x28, 0x82, 0xbc, 0xca, 0xea, 0xa7, + 0xb8, 0xed, 0x39, 0x0b, 0x14, 0x66, 0x72, 0xe1, 0x36, 0x51, 0xc3, 0x2e, 0x57, 0x80, + 0x62, 0x68, 0x65, 0xa7, + ], + shared_secret: [ + 0x9d, 0x56, 0xbd, 0x96, 0x00, 0x39, 0x62, 0x5e, 0x11, 0x7d, 0x7b, 0xfe, 0xd4, 0x3a, + 0x57, 0x3b, 0x11, 0x51, 0x7f, 0xfa, 0x76, 0x14, 0xea, 0x2d, 0xa7, 0x7e, 0xdf, 0x62, + 0x7f, 0x6f, 0x13, 0xaa, + ], + k_enc: [ + 0x04, 0x2f, 0x92, 0x82, 0x13, 0x44, 0xde, 0x97, 0x7c, 0xee, 0x89, 0x9e, 0xd2, 0x1b, + 0xc8, 0x48, 0xf5, 0xc4, 0xfe, 0xdc, 0x39, 0xf2, 0xdf, 0xed, 0xad, 0x62, 0xcc, 0x7a, + 0x92, 0x7f, 0x74, 0xfd, + ], + p_enc: [ + 0x03, 0x61, 0x5f, 0x53, 0x89, 0x1a, 0x18, 0xe0, 0x52, 0x17, 0x2d, 0x81, 0x82, 0xcf, + 0xb3, 0xe7, 0x63, 0xfa, 0xd2, 0xd1, 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, + 0xf6, 0xcb, 0x0c, 0x9c, 0xa0, 0x39, 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, + 0xcd, 0x59, 0xfc, 0xb6, 0x11, 0xfb, 0x2d, 0x9b, 0x4c, 0x8f, 0x61, 0x16, 0xcf, 0xec, + 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, 0x6a, 0xe8, 0xf7, 0xcc, + 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, 0x38, 0xe1, 0x73, 0x29, + 0xff, 0xa6, 0x01, 0xbb, 0x1c, 0xb8, 0xd0, 0x7d, 0x79, 0x7b, 0xf5, 0xde, 0x52, 0xbc, + 0xee, 0xb0, 0x23, 0x01, 0xc8, 0x96, 0x2a, 0xc1, 0xfc, 0x04, 0x91, 0xdc, 0x81, 0xaf, + 0xfd, 0x6c, 0x1e, 0xbf, 0x89, 0xa1, 0x3d, 0x6f, 0x29, 0x0e, 0xda, 0x5d, 0x5c, 0xef, + 0x38, 0x22, 0x15, 0xc5, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, + 0x26, 0xd0, 0xe6, 0x62, 0x90, 0x5f, 0x12, 0x50, 0x92, 0x6f, 0x6a, 0x22, 0x99, 0x90, + 0xe3, 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, + 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0xd6, 0x93, 0x00, 0x83, 0xf1, 0x84, + 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, 0xa2, 0xc6, 0xd2, 0x3d, 0x67, 0x36, + 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, 0xd1, 0xbe, 0x8f, 0x3d, 0xc4, 0xa7, + 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0x03, 0xd2, 0x49, 0x23, 0x06, + 0x7a, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, 0x50, 0x4e, 0x6f, 0xd5, 0x57, + 0x53, 0x40, 0x94, 0x56, 0x01, 0xfe, 0x80, 0x6f, 0x57, 0x56, 0xac, 0xb5, 0x62, 0xf1, + 0x3c, 0x0c, 0xa1, 0xd8, 0x03, 0xa1, 0x95, 0xc2, 0xeb, 0xb2, 0xef, 0x02, 0xac, 0x33, + 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, + 0x94, 0xd3, 0xa1, 0x9d, 0x3d, 0xca, 0x53, 0x1b, 0xeb, 0x50, 0xd4, 0x32, 0x7c, 0x5c, + 0x0c, 0x23, 0xcb, 0x7c, 0xfd, 0xb0, 0x8c, 0xa7, 0xcf, 0x2c, 0xac, 0x6b, 0xc1, 0x39, + 0xd0, 0x74, 0x14, 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, 0x6b, 0xf0, 0x54, 0x55, + 0x7c, 0xe2, 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, 0xec, 0x89, 0x09, 0xff, 0x51, + 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, + 0x73, 0x96, 0xa1, 0xbf, 0x57, 0xa9, 0x94, 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, 0x45, + 0xde, 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, 0x95, 0x55, + 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, 0x04, 0x7a, 0xf1, + 0x52, 0x50, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, 0x99, 0xac, + 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, 0xe7, 0x14, 0xef, + 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, + 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, + 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, + 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, + 0xda, 0x00, 0x75, 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, + 0xd9, 0x13, 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, + 0x06, 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, + 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, + 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, + 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, + 0x08, 0x74, 0x86, 0x9c, + ], + c_enc: [ + 0x16, 0x76, 0x72, 0x3a, 0x18, 0xff, 0x58, 0x77, 0x70, 0x15, 0x8d, 0x6b, 0x85, 0x09, + 0x3c, 0x49, 0x20, 0x16, 0xf8, 0x7e, 0xc3, 0xfa, 0xe8, 0xb0, 0xb4, 0x7c, 0xd9, 0x29, + 0x8f, 0xa2, 0x07, 0xc4, 0xb6, 0x09, 0xc6, 0x92, 0xdd, 0xb9, 0x10, 0x19, 0x72, 0xc9, + 0x4c, 0x71, 0x87, 0x84, 0x85, 0x42, 0x1e, 0xfb, 0x70, 0x1c, 0xf5, 0x15, 0xa2, 0x3f, + 0xbf, 0x36, 0xfe, 0x93, 0x54, 0x0d, 0x82, 0xd6, 0x9a, 0x72, 0x62, 0x4e, 0x25, 0x4f, + 0xe3, 0xa0, 0x11, 0xc5, 0xdb, 0xdb, 0xd2, 0xbd, 0xff, 0xb8, 0x83, 0x8a, 0xf3, 0x7d, + 0x03, 0xce, 0x69, 0x12, 0x6b, 0x2f, 0x68, 0x21, 0x25, 0xb7, 0xa9, 0xb2, 0xa3, 0xee, + 0x11, 0x8a, 0xe5, 0xad, 0xb4, 0x60, 0xa4, 0x68, 0x7c, 0x24, 0x30, 0x18, 0x7b, 0xfd, + 0x0f, 0x6c, 0x2a, 0x3d, 0x5d, 0x74, 0x30, 0x1c, 0xbd, 0x8f, 0xd0, 0x26, 0xc8, 0x64, + 0x4f, 0xbf, 0xa2, 0x65, 0x69, 0x88, 0xe9, 0x58, 0x59, 0x0b, 0x81, 0x6a, 0x1e, 0x64, + 0x0e, 0x46, 0x71, 0x0e, 0x46, 0xfa, 0x15, 0x94, 0xff, 0x2a, 0x61, 0xd6, 0xf6, 0xe7, + 0xb4, 0xa9, 0xf6, 0xe0, 0xde, 0x68, 0x3d, 0x95, 0xe5, 0x9d, 0x43, 0x57, 0xf7, 0x9a, + 0xc4, 0x93, 0x86, 0x6d, 0xab, 0x06, 0x57, 0x76, 0xc0, 0xb1, 0x43, 0x6b, 0x8e, 0x04, + 0x47, 0x68, 0x43, 0xc2, 0x8b, 0x48, 0x45, 0xea, 0xff, 0x17, 0x83, 0xa8, 0x50, 0xc2, + 0x4a, 0x90, 0x65, 0xc3, 0x36, 0x51, 0xc4, 0xb3, 0xdd, 0x19, 0x92, 0xf4, 0xf2, 0x08, + 0xb8, 0x51, 0xbf, 0xff, 0xe9, 0xb7, 0xbb, 0x7a, 0xad, 0x76, 0x7c, 0x23, 0x60, 0xb0, + 0x5c, 0x11, 0x23, 0x09, 0x66, 0xda, 0x55, 0x7e, 0x31, 0x3a, 0xe6, 0x1c, 0x95, 0x42, + 0x97, 0x66, 0x10, 0x6b, 0x4b, 0x1b, 0x35, 0x47, 0x64, 0xe4, 0xe1, 0xe4, 0xdf, 0x90, + 0xc1, 0x2d, 0x24, 0x37, 0x9d, 0x67, 0xba, 0xc6, 0x66, 0x97, 0xaf, 0x23, 0x44, 0x97, + 0xf2, 0xd6, 0xf9, 0xa6, 0x12, 0x85, 0x0d, 0xd7, 0x1d, 0x1c, 0x98, 0xce, 0x65, 0xd8, + 0x50, 0x7f, 0xa3, 0x46, 0x35, 0x83, 0x12, 0x39, 0xe2, 0x10, 0xf7, 0xdb, 0xb3, 0x05, + 0x04, 0x2d, 0x47, 0x50, 0xd9, 0x5a, 0xdf, 0xff, 0xc9, 0x8d, 0xeb, 0x0f, 0x17, 0x13, + 0xbc, 0x01, 0xaf, 0x5d, 0xb5, 0x99, 0x29, 0x89, 0x76, 0xab, 0xba, 0xdb, 0x0f, 0x4d, + 0xed, 0x1a, 0x2f, 0xe4, 0xcf, 0x90, 0x60, 0x0e, 0x0d, 0x28, 0xd3, 0x07, 0xc6, 0x41, + 0xf7, 0x52, 0x3c, 0x16, 0x66, 0x40, 0x1d, 0x78, 0x6f, 0xd2, 0x4a, 0xe1, 0x68, 0x0f, + 0xe9, 0x26, 0x70, 0x4c, 0xb6, 0xe2, 0xaf, 0x80, 0x1a, 0x0d, 0x82, 0x75, 0x9d, 0xd8, + 0x7a, 0x8c, 0xd8, 0x7b, 0x85, 0xbb, 0x07, 0x51, 0xa7, 0x08, 0xc9, 0xf4, 0xa7, 0xd3, + 0x24, 0xe5, 0xc9, 0x3a, 0xd2, 0x2b, 0x86, 0x43, 0xdf, 0xfa, 0x5f, 0x50, 0x79, 0xfc, + 0x6f, 0x01, 0x6d, 0x94, 0x3c, 0x99, 0x09, 0x27, 0x5c, 0x96, 0xf5, 0xfe, 0x7b, 0x56, + 0x33, 0x3c, 0x24, 0x01, 0x99, 0x73, 0xd9, 0x4f, 0x06, 0xeb, 0xf6, 0xc0, 0xf6, 0xef, + 0xdd, 0x42, 0xea, 0xb0, 0x63, 0x49, 0xd5, 0xe8, 0xb9, 0x60, 0xba, 0x8c, 0x68, 0xee, + 0xfd, 0x44, 0x49, 0x99, 0xf6, 0xfa, 0x3d, 0x6a, 0x3a, 0xe3, 0x1a, 0xe8, 0x54, 0x6e, + 0xdc, 0x62, 0x78, 0x25, 0x63, 0x7e, 0x1e, 0x86, 0x39, 0x8d, 0x0e, 0xd3, 0xd8, 0x8b, + 0xfa, 0xea, 0x8b, 0x4b, 0x08, 0x50, 0xd8, 0xa8, 0x28, 0x6e, 0xa9, 0xf3, 0xd1, 0x3f, + 0xa8, 0xf4, 0x16, 0x53, 0x45, 0x1b, 0x97, 0xb3, 0x8b, 0x06, 0x3a, 0x5f, 0xc6, 0xdb, + 0xe4, 0xe9, 0x19, 0x94, 0x87, 0xc9, 0x73, 0xef, 0x8f, 0x2c, 0x26, 0x3f, 0x85, 0x05, + 0xf4, 0xc3, 0xbe, 0xc9, 0xd1, 0x79, 0xbb, 0xd6, 0x5d, 0x1e, 0xdc, 0x58, 0x95, 0xa1, + 0x6c, 0xc7, 0x98, 0x6b, 0xcf, 0xc4, 0xba, 0xe8, 0x7e, 0xc0, 0xb2, 0x9b, 0xf1, 0xb3, + 0x97, 0x61, 0x5c, 0x95, 0x13, 0xfa, 0x52, 0xeb, 0xe1, 0xe9, 0xfc, 0xfb, 0xf1, 0x92, + 0xed, 0x49, 0x26, 0x27, 0x27, 0xa0, 0x8a, 0xd3, 0xc2, 0x95, 0x5b, 0x3d, 0xf2, 0xee, + 0xad, 0x30, 0x24, 0x3e, 0x06, 0x66, 0xf2, 0x3c, 0x7f, 0x97, 0xe7, 0x84, 0xbe, 0x68, + 0xcc, 0x22, 0xca, 0x1d, 0x09, 0xd5, + ], + ock: [ + 0xcf, 0x22, 0xd2, 0x83, 0x95, 0x98, 0x5d, 0x31, 0x6a, 0xf9, 0x50, 0x19, 0x21, 0xba, + 0xc1, 0x52, 0x57, 0x11, 0xbb, 0x3f, 0x3c, 0xc3, 0xc3, 0xc2, 0x82, 0xa3, 0xd1, 0x8e, + 0x43, 0xd4, 0x78, 0x05, + ], + op: [ + 0x04, 0x47, 0x12, 0x42, 0xe1, 0xf4, 0x2b, 0xf0, 0x81, 0xf0, 0x8e, 0x9d, 0x71, 0xfe, + 0x4f, 0x3a, 0x65, 0x91, 0xa7, 0xc0, 0x1e, 0xe2, 0xcf, 0x35, 0x30, 0x2f, 0x38, 0xd3, + 0x34, 0xeb, 0x90, 0x2c, 0xb5, 0x9a, 0x18, 0x4d, 0x24, 0xe6, 0x1b, 0x9f, 0x9d, 0x37, + 0x1d, 0xa4, 0xb1, 0x44, 0x01, 0x72, 0x02, 0x9a, 0x2e, 0xbc, 0x0a, 0x2a, 0xbe, 0xb8, + 0xaf, 0x2b, 0xd1, 0xa0, 0x8c, 0x67, 0xd9, 0x3f, + ], + c_out: [ + 0x7a, 0xe6, 0x91, 0xd9, 0xbc, 0xd5, 0x38, 0x42, 0x7b, 0x4f, 0x07, 0xe2, 0x38, 0x81, + 0x94, 0x18, 0xbb, 0xb8, 0x18, 0x31, 0x88, 0x89, 0x93, 0x08, 0xfd, 0x6a, 0xab, 0x2b, + 0xf4, 0xf0, 0x69, 0x9c, 0xc5, 0x61, 0x9c, 0x8d, 0x4f, 0xc9, 0x95, 0xc2, 0x11, 0x76, + 0xbf, 0xea, 0x13, 0xee, 0x04, 0x03, 0xc0, 0xce, 0x57, 0x4f, 0xc8, 0xfa, 0x16, 0x81, + 0xb3, 0x76, 0xcf, 0x33, 0xc9, 0xff, 0x27, 0xa5, 0xaa, 0x01, 0x58, 0x24, 0xe6, 0x78, + 0x6e, 0x16, 0xe3, 0x7b, 0x35, 0x5c, 0xf7, 0x54, 0x52, 0xdb, + ], + note_type: Some([ + 0x61, 0x16, 0xcf, 0xec, 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, + 0x6a, 0xe8, 0xf7, 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, + 0x38, 0xe1, 0x73, 0x29, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0xfc, 0x8c, 0x64, 0x1c, 0x0b, 0x28, 0xbe, 0xbf, 0x85, 0x24, 0x25, 0xae, 0x95, 0x5f, + 0xe6, 0x40, 0x1c, 0xfd, 0x9e, 0x60, 0x63, 0xf2, 0x50, 0x11, 0x3d, 0xa0, 0xb5, 0x8b, + 0x2a, 0x0f, 0x49, 0xb9, 0x12, 0x0b, 0x89, 0x9f, 0x08, 0x10, 0x6b, 0x30, 0x86, 0xb2, + 0xf4, 0x11, 0x63, 0x6f, 0x50, 0xab, 0x48, 0x7c, 0xfb, 0x28, 0x81, 0x89, 0x77, 0x8f, + 0xe4, 0xe5, 0xa1, 0x91, 0x8b, 0x98, 0xd5, 0x0a, + ], + ovk: [ + 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, 0x17, 0xdb, 0xbc, + 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x2c, + 0xe2, 0x1c, 0x02, 0x14, + ], + default_d: [ + 0xd2, 0xf7, 0x5f, 0x7c, 0xe7, 0x1b, 0xa4, 0xa7, 0xab, 0x69, 0xb8, + ], + default_pk_d: [ + 0x49, 0x19, 0x01, 0x2e, 0x40, 0x43, 0x82, 0xeb, 0xee, 0x8e, 0x60, 0xe9, 0xd4, 0xf1, + 0x30, 0x79, 0xc0, 0x8d, 0x9c, 0x6d, 0x50, 0xf9, 0x35, 0x86, 0x7d, 0x33, 0x01, 0xf6, + 0x89, 0xcf, 0xf9, 0x1e, + ], + v: 7555450289479839818, + rseed: [ + 0x13, 0xeb, 0x7c, 0xea, 0xa5, 0xff, 0x12, 0x90, 0xb0, 0x3e, 0xc9, 0x1c, 0xe6, 0xdd, + 0x28, 0x13, 0x0c, 0x3a, 0xb0, 0xb2, 0x3b, 0x60, 0x2b, 0xd5, 0xbe, 0x5d, 0xc2, 0x60, + 0x03, 0xaa, 0xe0, 0x4b, + ], + memo: [ + 0xff, 0x33, 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, 0x8c, 0x38, 0x8e, 0xa7, 0x95, 0x51, + 0x22, 0xdb, 0xac, 0xa6, 0x7b, 0x30, 0x39, 0x5a, 0x92, 0x8b, 0x57, 0xb8, 0x57, 0x51, + 0x23, 0x20, 0x5a, 0xe1, 0x91, 0x52, 0xe4, 0x1e, 0x00, 0x29, 0x31, 0xb4, 0x57, 0x46, + 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, 0xd4, 0x23, 0xff, 0x27, 0x98, + 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, 0x3f, 0xb8, 0x2c, 0x56, 0x58, 0xe2, + 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, 0xd0, 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, + 0xa7, 0x17, 0x79, 0xa7, 0x30, 0x32, 0x98, 0x5a, 0x3d, 0x1f, 0xd0, 0x3d, 0xd4, 0xd0, + 0x6e, 0x05, 0x56, 0x6f, 0x3b, 0x84, 0x36, 0x7c, 0xf0, 0xfa, 0xee, 0x9b, 0xc3, 0xbd, + 0x7a, 0x3a, 0x60, 0x6a, 0x9f, 0xdb, 0x84, 0x9c, 0x5d, 0x82, 0xd0, 0xa6, 0x19, 0x23, + 0xc2, 0xe5, 0xd8, 0xaa, 0x63, 0xa8, 0xa5, 0x0c, 0x38, 0xbd, 0x03, 0x87, 0x72, 0xc4, + 0x14, 0x3d, 0x8b, 0x7a, 0xcf, 0xd7, 0x4e, 0x72, 0xc0, 0x4d, 0x89, 0x24, 0x8d, 0xff, + 0x20, 0xfe, 0x8d, 0xc5, 0xec, 0x21, 0x49, 0x05, 0x4e, 0xa2, 0x41, 0x64, 0xe8, 0x5f, + 0x67, 0x44, 0xad, 0x0c, 0xac, 0xf1, 0xa8, 0xb7, 0x01, 0x26, 0xf4, 0x82, 0xc0, 0x92, + 0xed, 0x9f, 0x61, 0x27, 0xd2, 0x05, 0x0d, 0x12, 0xe8, 0x78, 0xa7, 0x96, 0x53, 0xa1, + 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, + 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x46, 0xe8, 0xed, 0xf2, 0xf2, 0xbc, 0xe0, 0x5a, + 0x03, 0x7c, 0x82, 0x6f, 0x22, 0xca, 0xad, 0x12, 0x61, 0x46, 0x7d, 0xcf, 0xb7, 0xd6, + 0xb6, 0x13, 0x3d, 0xc2, 0x1e, 0x80, 0x96, 0xc7, 0xe9, 0xf8, 0xe9, 0xe1, 0x0c, 0x1e, + 0x3f, 0xac, 0x40, 0x58, 0xb6, 0x82, 0xc6, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, + 0xdd, 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, + 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, + 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x09, 0x70, 0x71, 0x31, + 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, + 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, 0x0a, + 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, 0xae, 0x25, 0x15, 0xd5, 0xf7, + 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, + 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, + 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, + 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, + 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, + 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, + 0x24, 0x5f, 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, + 0x96, 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, + 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, + 0x6b, 0x21, 0x43, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0xf5, 0xc1, 0xcf, 0xbc, 0xb9, 0x2d, 0x34, 0xe4, 0x66, 0x1d, 0x58, 0x25, 0x42, 0xf7, + 0x0d, 0x05, 0x99, 0x09, 0x15, 0x20, 0xfe, 0x2a, 0xfa, 0xd8, 0xe8, 0x75, 0xca, 0x3b, + 0xcc, 0x70, 0x8a, 0x11, + ], + rho: [ + 0x31, 0x70, 0x5e, 0xfb, 0xf8, 0x0c, 0x7a, 0x7a, 0xb7, 0x81, 0xdf, 0x53, 0x77, 0xf8, + 0x4d, 0x4b, 0x32, 0x36, 0xdb, 0x1f, 0x32, 0xac, 0xa7, 0x94, 0x5c, 0xf2, 0x6e, 0xc8, + 0xb9, 0xd0, 0xb7, 0x32, + ], + cmx: [ + 0xe1, 0xc7, 0x67, 0xf3, 0x30, 0x15, 0xb5, 0xe2, 0x4a, 0x9a, 0xa5, 0x8b, 0x64, 0x7b, + 0x6b, 0x61, 0x32, 0x3c, 0xd3, 0x47, 0xe7, 0x21, 0x4c, 0x29, 0x1d, 0x09, 0x95, 0xc0, + 0xf5, 0xa6, 0x93, 0x2f, + ], + esk: [ + 0xc0, 0xdb, 0x43, 0x69, 0x10, 0x03, 0x45, 0x7d, 0x61, 0xfb, 0x58, 0x93, 0x20, 0x26, + 0xf9, 0xdd, 0x2c, 0x35, 0xb9, 0x05, 0x7f, 0xad, 0x50, 0xd8, 0x44, 0x72, 0x83, 0xf9, + 0x4e, 0xd5, 0x95, 0x3d, + ], + ephemeral_key: [ + 0xce, 0x67, 0x94, 0x31, 0x5f, 0x46, 0x2d, 0xed, 0xf3, 0xc5, 0x77, 0x4a, 0xac, 0x7f, + 0x3c, 0x7b, 0x70, 0xba, 0x7d, 0x72, 0x43, 0xbb, 0x0c, 0xc3, 0xb0, 0x67, 0xdc, 0x28, + 0x38, 0xf1, 0x11, 0xa3, + ], + shared_secret: [ + 0xea, 0x22, 0x6b, 0x69, 0xec, 0x2d, 0x9f, 0xcf, 0x91, 0x9c, 0xe5, 0x70, 0x06, 0x09, + 0x89, 0x94, 0xf7, 0x14, 0xb3, 0x9c, 0x34, 0x61, 0x52, 0xbc, 0x11, 0x51, 0xa0, 0xc6, + 0x9e, 0xe0, 0x04, 0x06, + ], + k_enc: [ + 0xb4, 0x56, 0x1b, 0xdb, 0xe0, 0xea, 0x44, 0x20, 0x75, 0xe7, 0xe6, 0x6f, 0xb3, 0xc0, + 0xfa, 0xd3, 0xaf, 0xc2, 0x85, 0x6e, 0xf4, 0xf3, 0x61, 0xb4, 0xac, 0x33, 0xaa, 0xe0, + 0x15, 0x52, 0xfd, 0x49, + ], + p_enc: [ + 0x03, 0xd2, 0xf7, 0x5f, 0x7c, 0xe7, 0x1b, 0xa4, 0xa7, 0xab, 0x69, 0xb8, 0x4a, 0x70, + 0x91, 0xfe, 0x01, 0x5a, 0xda, 0x68, 0x13, 0xeb, 0x7c, 0xea, 0xa5, 0xff, 0x12, 0x90, + 0xb0, 0x3e, 0xc9, 0x1c, 0xe6, 0xdd, 0x28, 0x13, 0x0c, 0x3a, 0xb0, 0xb2, 0x3b, 0x60, + 0x2b, 0xd5, 0xbe, 0x5d, 0xc2, 0x60, 0x03, 0xaa, 0xe0, 0x4b, 0x29, 0x8a, 0xc0, 0xaf, + 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, 0xa0, + 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, 0x28, 0xdf, 0x76, 0xe2, 0x82, 0x1a, 0x41, 0x84, + 0xff, 0x33, 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, 0x8c, 0x38, 0x8e, 0xa7, 0x95, 0x51, + 0x22, 0xdb, 0xac, 0xa6, 0x7b, 0x30, 0x39, 0x5a, 0x92, 0x8b, 0x57, 0xb8, 0x57, 0x51, + 0x23, 0x20, 0x5a, 0xe1, 0x91, 0x52, 0xe4, 0x1e, 0x00, 0x29, 0x31, 0xb4, 0x57, 0x46, + 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, 0xd4, 0x23, 0xff, 0x27, 0x98, + 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, 0x3f, 0xb8, 0x2c, 0x56, 0x58, 0xe2, + 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, 0xd0, 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, + 0xa7, 0x17, 0x79, 0xa7, 0x30, 0x32, 0x98, 0x5a, 0x3d, 0x1f, 0xd0, 0x3d, 0xd4, 0xd0, + 0x6e, 0x05, 0x56, 0x6f, 0x3b, 0x84, 0x36, 0x7c, 0xf0, 0xfa, 0xee, 0x9b, 0xc3, 0xbd, + 0x7a, 0x3a, 0x60, 0x6a, 0x9f, 0xdb, 0x84, 0x9c, 0x5d, 0x82, 0xd0, 0xa6, 0x19, 0x23, + 0xc2, 0xe5, 0xd8, 0xaa, 0x63, 0xa8, 0xa5, 0x0c, 0x38, 0xbd, 0x03, 0x87, 0x72, 0xc4, + 0x14, 0x3d, 0x8b, 0x7a, 0xcf, 0xd7, 0x4e, 0x72, 0xc0, 0x4d, 0x89, 0x24, 0x8d, 0xff, + 0x20, 0xfe, 0x8d, 0xc5, 0xec, 0x21, 0x49, 0x05, 0x4e, 0xa2, 0x41, 0x64, 0xe8, 0x5f, + 0x67, 0x44, 0xad, 0x0c, 0xac, 0xf1, 0xa8, 0xb7, 0x01, 0x26, 0xf4, 0x82, 0xc0, 0x92, + 0xed, 0x9f, 0x61, 0x27, 0xd2, 0x05, 0x0d, 0x12, 0xe8, 0x78, 0xa7, 0x96, 0x53, 0xa1, + 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, + 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x46, 0xe8, 0xed, 0xf2, 0xf2, 0xbc, 0xe0, 0x5a, + 0x03, 0x7c, 0x82, 0x6f, 0x22, 0xca, 0xad, 0x12, 0x61, 0x46, 0x7d, 0xcf, 0xb7, 0xd6, + 0xb6, 0x13, 0x3d, 0xc2, 0x1e, 0x80, 0x96, 0xc7, 0xe9, 0xf8, 0xe9, 0xe1, 0x0c, 0x1e, + 0x3f, 0xac, 0x40, 0x58, 0xb6, 0x82, 0xc6, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, + 0xdd, 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, + 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, + 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x09, 0x70, 0x71, 0x31, + 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, + 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, 0x0a, + 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, 0xae, 0x25, 0x15, 0xd5, 0xf7, + 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, + 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, + 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, + 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, + 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, + 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, + 0x24, 0x5f, 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, + 0x96, 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, + 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, + 0x6b, 0x21, 0x43, 0x0f, + ], + c_enc: [ + 0x59, 0x9a, 0x4d, 0x9f, 0x53, 0x3c, 0x46, 0xa9, 0x6f, 0x92, 0xaf, 0x8c, 0x08, 0xae, + 0x59, 0x71, 0x10, 0x23, 0x0e, 0xb8, 0x41, 0xc2, 0xf7, 0xc9, 0xd4, 0xf1, 0x45, 0x87, + 0x76, 0x36, 0xc8, 0x9d, 0xd8, 0xf3, 0x84, 0xa9, 0x40, 0xdc, 0x89, 0x72, 0x55, 0x53, + 0x57, 0xbc, 0x07, 0x48, 0x2a, 0x0a, 0x32, 0x3d, 0x87, 0xae, 0x10, 0xeb, 0x99, 0x82, + 0x5a, 0xe4, 0xe0, 0x06, 0x0e, 0x25, 0x6c, 0x3c, 0x3b, 0xeb, 0xa3, 0x2f, 0xa2, 0xb2, + 0xd2, 0x7f, 0x04, 0x6f, 0x7a, 0x93, 0x6d, 0xf8, 0xa9, 0x61, 0xc8, 0x18, 0x4e, 0xe3, + 0xc6, 0x8e, 0xbc, 0xe9, 0x80, 0x64, 0x45, 0xb4, 0x3e, 0x66, 0x67, 0x19, 0x95, 0xa2, + 0x43, 0x7a, 0x7f, 0x70, 0x91, 0x47, 0x14, 0x8a, 0x76, 0x03, 0x6d, 0x25, 0x5e, 0xba, + 0xc4, 0xd0, 0xd8, 0x34, 0x82, 0x93, 0x23, 0x9a, 0x78, 0x64, 0xe7, 0x9b, 0xef, 0xf7, + 0x6f, 0x61, 0x50, 0xe0, 0xc4, 0xf4, 0x7a, 0x85, 0x26, 0xe3, 0xed, 0x06, 0x75, 0xfa, + 0xc6, 0xac, 0xcc, 0x30, 0xa4, 0xd6, 0x73, 0xca, 0x80, 0x85, 0x95, 0x96, 0xfe, 0xc9, + 0xcd, 0x6a, 0x93, 0xfb, 0xa0, 0xe8, 0x9e, 0xf5, 0x3f, 0x3e, 0x26, 0x74, 0xd3, 0x2a, + 0x4b, 0x43, 0xf9, 0xa4, 0x38, 0x7d, 0xce, 0x33, 0xac, 0xa1, 0xe4, 0xff, 0xdc, 0x6d, + 0x2d, 0x31, 0x89, 0xc6, 0x23, 0xca, 0x56, 0x4d, 0x03, 0xac, 0x5b, 0x35, 0xb1, 0xa7, + 0x47, 0xff, 0x44, 0x6b, 0xc2, 0x5e, 0xd2, 0x2d, 0x09, 0x68, 0x2c, 0xef, 0x3a, 0x30, + 0xff, 0xa5, 0xc4, 0x0e, 0x27, 0x70, 0xf1, 0x84, 0x98, 0xb1, 0x2f, 0x86, 0x8b, 0xa9, + 0x2a, 0x13, 0xaa, 0x4f, 0xa2, 0x14, 0xb0, 0x62, 0xe3, 0x64, 0x9c, 0xf9, 0xc8, 0x5e, + 0x7a, 0x8a, 0x55, 0xf5, 0xf3, 0xdd, 0x68, 0x84, 0x2a, 0xea, 0x7c, 0x92, 0x79, 0x2a, + 0x52, 0x60, 0x0f, 0x86, 0x6c, 0x34, 0xa1, 0x0c, 0x51, 0x14, 0x13, 0x62, 0x02, 0x24, + 0xfb, 0x85, 0xaf, 0xc6, 0x06, 0xdd, 0x4f, 0x7b, 0x2f, 0x76, 0xbe, 0x76, 0x0c, 0xa1, + 0x94, 0xb6, 0xd4, 0x88, 0x2e, 0x5a, 0x4a, 0x76, 0x3d, 0x75, 0x0d, 0xb7, 0xe1, 0x68, + 0xa4, 0x18, 0x11, 0x92, 0x35, 0xda, 0xf9, 0xcb, 0x1b, 0xdb, 0x07, 0xff, 0x46, 0x83, + 0x3a, 0x87, 0xa3, 0x92, 0x6b, 0x14, 0xa5, 0x26, 0x4f, 0x10, 0x4f, 0x7f, 0x89, 0xf7, + 0x6f, 0x10, 0x10, 0x8f, 0x2b, 0x6e, 0xa5, 0x05, 0xd4, 0xf0, 0xd2, 0x6d, 0x58, 0x31, + 0x1c, 0xc7, 0x21, 0x9c, 0x6b, 0xc4, 0x38, 0xd0, 0xe1, 0xb3, 0x17, 0x60, 0x18, 0x73, + 0x9e, 0x6f, 0x75, 0xd0, 0x73, 0x59, 0xf5, 0xe8, 0x95, 0x7e, 0x12, 0xc3, 0x03, 0xaa, + 0x52, 0x9b, 0x11, 0xa1, 0x81, 0x66, 0x25, 0xa1, 0x20, 0xf3, 0x6d, 0xcd, 0xdd, 0xff, + 0x9c, 0x65, 0xbc, 0xac, 0x8f, 0x10, 0x67, 0xc7, 0xfe, 0x88, 0xf6, 0x44, 0x85, 0x94, + 0xcf, 0x1d, 0xff, 0x8e, 0x29, 0x00, 0xae, 0x84, 0xd2, 0xa7, 0xc8, 0x1b, 0x90, 0x6d, + 0xd0, 0xbc, 0x86, 0x96, 0xe3, 0x70, 0x98, 0x07, 0x4b, 0x75, 0xd8, 0x38, 0xd8, 0xab, + 0xdc, 0x90, 0x46, 0x08, 0x2b, 0xe4, 0xa6, 0x09, 0x95, 0xc4, 0xf4, 0xed, 0x80, 0xe2, + 0xd7, 0x87, 0x38, 0x25, 0x77, 0x3b, 0xa6, 0x3e, 0xe4, 0xcb, 0x97, 0x36, 0x9a, 0x50, + 0x70, 0xb5, 0x72, 0x5c, 0x5f, 0xeb, 0x32, 0x62, 0x45, 0x87, 0x80, 0x1e, 0x5a, 0xc0, + 0x30, 0xe6, 0x45, 0xbd, 0xf2, 0xe5, 0x86, 0xcf, 0x98, 0x66, 0xea, 0xfb, 0x76, 0xf5, + 0x59, 0x76, 0xa3, 0x3d, 0x62, 0xae, 0xdc, 0x76, 0x27, 0x78, 0x3b, 0x48, 0x48, 0x93, + 0x61, 0xf9, 0x9c, 0xae, 0xb1, 0xb1, 0x9c, 0x55, 0x22, 0x58, 0x9f, 0xd2, 0x1d, 0x51, + 0x45, 0x49, 0xd7, 0x4a, 0xb1, 0x92, 0x25, 0xed, 0x6e, 0x4c, 0x20, 0x3a, 0xdd, 0xfa, + 0x55, 0xfc, 0x9e, 0xc9, 0x89, 0xb6, 0x69, 0x02, 0x3c, 0xf3, 0x05, 0xb4, 0x2b, 0x33, + 0x0f, 0xc2, 0x30, 0x80, 0xab, 0xe4, 0x25, 0x01, 0xe5, 0x9c, 0x85, 0x1c, 0x54, 0xc7, + 0x49, 0x66, 0xf6, 0x0b, 0xe9, 0xdc, 0x56, 0x1a, 0x2d, 0x91, 0xf5, 0xd3, 0x2a, 0xdd, + 0x19, 0xb8, 0x9a, 0xca, 0x7a, 0x73, 0x85, 0x39, 0x59, 0x33, 0x48, 0x6f, 0xab, 0x00, + 0xcc, 0x53, 0x03, 0xc5, 0xf3, 0xf0, + ], + ock: [ + 0xe3, 0xf2, 0x74, 0x2e, 0xa1, 0x97, 0x55, 0xa7, 0x99, 0x73, 0x1a, 0xcf, 0xe9, 0x98, + 0x86, 0xfb, 0x9f, 0xbb, 0x80, 0x48, 0xb5, 0x3a, 0x77, 0x72, 0xa2, 0x80, 0xd8, 0x17, + 0x19, 0xff, 0xfd, 0x28, + ], + op: [ + 0x49, 0x19, 0x01, 0x2e, 0x40, 0x43, 0x82, 0xeb, 0xee, 0x8e, 0x60, 0xe9, 0xd4, 0xf1, + 0x30, 0x79, 0xc0, 0x8d, 0x9c, 0x6d, 0x50, 0xf9, 0x35, 0x86, 0x7d, 0x33, 0x01, 0xf6, + 0x89, 0xcf, 0xf9, 0x1e, 0xc0, 0xdb, 0x43, 0x69, 0x10, 0x03, 0x45, 0x7d, 0x61, 0xfb, + 0x58, 0x93, 0x20, 0x26, 0xf9, 0xdd, 0x2c, 0x35, 0xb9, 0x05, 0x7f, 0xad, 0x50, 0xd8, + 0x44, 0x72, 0x83, 0xf9, 0x4e, 0xd5, 0x95, 0x3d, + ], + c_out: [ + 0x92, 0xe7, 0x7c, 0x9b, 0x69, 0x92, 0xee, 0x85, 0x06, 0x30, 0x6a, 0x96, 0xc8, 0xa5, + 0x1c, 0xc9, 0xa8, 0x96, 0x18, 0xc6, 0x36, 0x6f, 0xce, 0x78, 0xb2, 0x9a, 0xdb, 0x10, + 0x9b, 0x4a, 0x3b, 0x17, 0x48, 0x49, 0x13, 0x4f, 0x7a, 0xa2, 0x9c, 0x79, 0x1b, 0x91, + 0x5f, 0xd7, 0x5a, 0x6f, 0xfc, 0x57, 0x42, 0x78, 0xef, 0x50, 0x2b, 0x84, 0x02, 0x46, + 0x9a, 0xb5, 0xa7, 0xce, 0x77, 0x2b, 0x52, 0x2c, 0x4b, 0xaa, 0x12, 0x95, 0xd8, 0x8f, + 0x15, 0xdc, 0x75, 0x1d, 0xdf, 0x7d, 0x20, 0x8d, 0xd5, 0x17, + ], + note_type: Some([ + 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, 0x5a, + 0x62, 0xcd, 0x1c, 0xa0, 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, 0x28, 0xdf, 0x76, 0xe2, + 0x82, 0x1a, 0x41, 0x84, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0x53, 0x3d, 0xc3, 0xd4, 0x93, 0xf2, 0xb8, 0x7a, 0x03, 0x3d, 0xf5, 0x07, 0x05, 0xf2, + 0x90, 0x54, 0x16, 0x38, 0xe9, 0x08, 0x7d, 0xcd, 0xbc, 0xfe, 0x52, 0x7e, 0x77, 0x5a, + 0xaf, 0x09, 0x30, 0x29, 0xac, 0xec, 0x74, 0xdd, 0xe6, 0x02, 0xfc, 0x7c, 0x73, 0xcb, + 0x38, 0x50, 0xbd, 0xfb, 0xf2, 0x61, 0x79, 0x4c, 0x9c, 0x29, 0x9d, 0x0b, 0x98, 0xee, + 0x0f, 0x20, 0x71, 0xd6, 0xd4, 0xe3, 0x7b, 0x05, + ], + ovk: [ + 0x32, 0x4d, 0xce, 0x2a, 0x1e, 0xa1, 0xe4, 0x30, 0x4f, 0x49, 0xe4, 0x3a, 0xe0, 0x65, + 0xe3, 0xfb, 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, + 0x8d, 0xea, 0x5f, 0xb6, + ], + default_d: [ + 0x20, 0x8c, 0x6d, 0x90, 0x6c, 0xfa, 0x93, 0xf1, 0x2d, 0x6a, 0x7e, + ], + default_pk_d: [ + 0x64, 0xce, 0xac, 0xec, 0x3c, 0x2e, 0xa7, 0x9c, 0x4c, 0xd3, 0xe2, 0xf0, 0xfb, 0xb9, + 0xe1, 0xd4, 0x39, 0x55, 0xae, 0x66, 0xd8, 0x93, 0x92, 0xbf, 0x48, 0xaf, 0xb6, 0xc4, + 0xab, 0x00, 0xa0, 0x28, + ], + v: 12711846894898776584, + rseed: [ + 0x7b, 0xdc, 0x8b, 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, + 0xe8, 0x7a, 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, + 0xad, 0xe8, 0x24, 0xf3, + ], + memo: [ + 0xff, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, + 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, + 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, + 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, + 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, + 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, + 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, + 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, + 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, + 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, + 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, + 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, + 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, + 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, + 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, + 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, + 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, + 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, + 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, + 0x60, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, + 0x82, 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, + 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, + 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, + 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, + 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, + 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, + 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, + 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, 0x75, 0x79, 0x65, 0xc2, + 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, + 0x1d, 0x11, 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, + 0x26, 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, + 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, 0x5d, + 0x3b, 0x52, 0x6e, 0x0b, 0x02, 0xc5, 0xca, 0x17, 0x22, 0xba, 0xde, 0xee, 0x23, 0xd1, + 0x45, 0xe8, 0xeb, 0x22, 0x13, 0xfc, 0x4a, 0xf1, 0xe4, 0x50, 0xe4, 0xd5, 0x21, 0x7c, + 0x66, 0x17, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x65, 0x73, 0x3c, 0x9d, 0x97, 0xea, 0x82, 0xf6, 0xde, 0xf3, 0xde, 0x1f, 0xe8, 0x7e, + 0x12, 0x37, 0x6a, 0x92, 0x49, 0xdc, 0x86, 0x14, 0x67, 0x2d, 0x5e, 0xda, 0x15, 0xf3, + 0xca, 0xf4, 0x5b, 0x8c, + ], + rho: [ + 0x56, 0xbc, 0x48, 0x21, 0xa5, 0x3d, 0x5e, 0x9e, 0x6d, 0x7a, 0x04, 0x44, 0x44, 0x45, + 0x4f, 0xfb, 0xc2, 0x36, 0x9c, 0xb1, 0x48, 0xeb, 0x76, 0xf1, 0xed, 0xf1, 0xb5, 0xc7, + 0x41, 0x84, 0x28, 0x2a, + ], + cmx: [ + 0xd7, 0x60, 0xac, 0xdb, 0xca, 0xda, 0xd1, 0x88, 0x08, 0x4f, 0xe4, 0x1a, 0x5c, 0x03, + 0xc2, 0xc8, 0xce, 0x34, 0xe1, 0x5f, 0x9d, 0xf4, 0x7b, 0x86, 0x9c, 0x44, 0xc7, 0x21, + 0x13, 0xa4, 0x0c, 0x3d, + ], + esk: [ + 0x9b, 0x32, 0x77, 0x19, 0x3b, 0x63, 0x60, 0x8e, 0x6a, 0x3d, 0xdf, 0x7c, 0xe2, 0xd2, + 0x33, 0x58, 0x4e, 0x66, 0x17, 0xd6, 0xf6, 0xa2, 0x1c, 0xdc, 0x86, 0x48, 0x56, 0x2c, + 0xbd, 0x86, 0x3f, 0x09, + ], + ephemeral_key: [ + 0x5a, 0x48, 0x58, 0x15, 0xc4, 0xa7, 0x47, 0x06, 0xe9, 0xde, 0x87, 0xfa, 0x60, 0xa2, + 0x81, 0x6f, 0x89, 0x0b, 0xe3, 0xdb, 0x54, 0xeb, 0x3f, 0x4b, 0xaf, 0x37, 0xdb, 0xc9, + 0xbd, 0xe5, 0xfe, 0x9d, + ], + shared_secret: [ + 0x96, 0x8d, 0xf2, 0xe8, 0x5d, 0x7b, 0xd1, 0x08, 0xf5, 0x72, 0x12, 0x53, 0x93, 0x76, + 0xaf, 0x25, 0x83, 0x2e, 0xf4, 0xdb, 0xd6, 0x40, 0x2a, 0x41, 0x4d, 0x73, 0xc5, 0x6b, + 0xee, 0xe4, 0xf2, 0xa8, + ], + k_enc: [ + 0xf7, 0x73, 0x91, 0x24, 0x3f, 0xdb, 0x35, 0xb2, 0x26, 0x94, 0xdb, 0x91, 0xde, 0xbd, + 0x78, 0x55, 0x79, 0x3c, 0xa7, 0x1e, 0x82, 0xbd, 0xc2, 0xee, 0x74, 0xc9, 0xb7, 0xb6, + 0x97, 0xc0, 0x24, 0x71, + ], + p_enc: [ + 0x03, 0x20, 0x8c, 0x6d, 0x90, 0x6c, 0xfa, 0x93, 0xf1, 0x2d, 0x6a, 0x7e, 0x08, 0x0a, + 0x98, 0x91, 0x66, 0x8d, 0x69, 0xb0, 0x7b, 0xdc, 0x8b, 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, + 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, 0x7a, 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, + 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, 0xad, 0xe8, 0x24, 0xf3, 0xf9, 0x78, 0x1e, 0xbe, + 0x31, 0x7a, 0x07, 0x10, 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, + 0x4e, 0x67, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, + 0xff, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, + 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, + 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, + 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, + 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, + 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, + 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, + 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, + 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, + 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, + 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, + 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, + 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, + 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, + 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, + 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, + 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, + 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, + 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, + 0x60, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, + 0x82, 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, + 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, + 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, + 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, + 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, + 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, + 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, + 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, 0x75, 0x79, 0x65, 0xc2, + 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, + 0x1d, 0x11, 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, + 0x26, 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, + 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, 0x5d, + 0x3b, 0x52, 0x6e, 0x0b, 0x02, 0xc5, 0xca, 0x17, 0x22, 0xba, 0xde, 0xee, 0x23, 0xd1, + 0x45, 0xe8, 0xeb, 0x22, 0x13, 0xfc, 0x4a, 0xf1, 0xe4, 0x50, 0xe4, 0xd5, 0x21, 0x7c, + 0x66, 0x17, 0x00, 0x8c, + ], + c_enc: [ + 0xf9, 0x09, 0x97, 0x73, 0x8b, 0x14, 0xd8, 0xa8, 0x4e, 0x32, 0x74, 0xbb, 0x70, 0x76, + 0x31, 0x15, 0xb7, 0x2e, 0x0a, 0x3d, 0xde, 0x8e, 0xa4, 0x70, 0x91, 0x1f, 0xb4, 0x58, + 0x70, 0xb0, 0x14, 0x8e, 0x7d, 0x37, 0x2b, 0xf2, 0x26, 0x8b, 0x3e, 0xe8, 0xda, 0xe5, + 0xfd, 0xe5, 0xea, 0x9b, 0x61, 0x59, 0x8e, 0xf1, 0x1b, 0x73, 0x14, 0x4f, 0x75, 0x53, + 0xb2, 0x13, 0xa0, 0x4c, 0x85, 0xf2, 0x5c, 0x54, 0x6c, 0x8a, 0x38, 0xa6, 0x0e, 0x50, + 0x86, 0x08, 0xb9, 0xca, 0x59, 0x3b, 0x94, 0xd8, 0x68, 0x8d, 0x6e, 0xff, 0xa5, 0x36, + 0x04, 0xd4, 0xdb, 0xc0, 0xf3, 0x45, 0x03, 0xaa, 0xe4, 0x6f, 0x3c, 0x8a, 0x8d, 0x2e, + 0x46, 0xa8, 0x1f, 0x09, 0x12, 0x6c, 0x45, 0x36, 0xfd, 0x02, 0x58, 0xf5, 0x97, 0x40, + 0xad, 0x0d, 0xb8, 0x02, 0xcc, 0x02, 0x42, 0x53, 0x4d, 0xdf, 0x52, 0xa6, 0xbf, 0x6a, + 0x03, 0x4d, 0xe6, 0x26, 0xf0, 0x18, 0x84, 0x4a, 0xdc, 0xb2, 0x6d, 0xcd, 0xc2, 0x85, + 0x16, 0x37, 0x16, 0xdd, 0x54, 0x65, 0x1c, 0x88, 0x73, 0x53, 0xf1, 0xff, 0xef, 0xa0, + 0x37, 0x71, 0x2a, 0xc0, 0xdf, 0x3a, 0x92, 0x98, 0x19, 0x06, 0x87, 0x54, 0x9d, 0x79, + 0xc6, 0xa3, 0x60, 0x0c, 0xc1, 0xc7, 0x29, 0xa3, 0x93, 0xd4, 0x4f, 0xec, 0xe5, 0x7f, + 0xd4, 0xcb, 0x0c, 0x0f, 0xb0, 0xc7, 0x86, 0x1b, 0x92, 0x5b, 0x94, 0xcd, 0x6a, 0x26, + 0x90, 0xf0, 0x02, 0xc4, 0x3a, 0x16, 0x6e, 0x56, 0x77, 0x72, 0x9f, 0x35, 0x52, 0xae, + 0xe0, 0xf2, 0xc1, 0x95, 0xaa, 0x91, 0xb2, 0xdd, 0xe3, 0x65, 0xdd, 0x14, 0xf2, 0xf0, + 0x7b, 0x3c, 0x38, 0x34, 0x7f, 0x6c, 0x0d, 0xab, 0x82, 0x84, 0x1e, 0xba, 0xde, 0x1e, + 0xf8, 0x13, 0xf2, 0xcd, 0x88, 0x5b, 0x57, 0x84, 0x37, 0x44, 0x45, 0x24, 0x93, 0x6a, + 0x65, 0x46, 0xc4, 0x55, 0xd6, 0xc9, 0x2e, 0x6d, 0x3d, 0xc5, 0x38, 0xb6, 0xcd, 0x9f, + 0x6d, 0x4c, 0xc0, 0xd7, 0x4d, 0x7b, 0xc2, 0x46, 0x7e, 0x21, 0x5b, 0xe8, 0xc3, 0xd4, + 0xff, 0x91, 0x8a, 0x2d, 0x98, 0x71, 0x00, 0xff, 0x34, 0x02, 0x4c, 0x88, 0x62, 0x79, + 0xd6, 0x4c, 0xaf, 0xdf, 0xd9, 0x0f, 0x1c, 0x04, 0xc4, 0x6b, 0xc9, 0xd5, 0xe9, 0xe2, + 0xaf, 0xd0, 0x3a, 0xb7, 0x55, 0xe4, 0x0f, 0x08, 0x7e, 0xb5, 0x1e, 0xe3, 0xd1, 0x02, + 0xb6, 0xb0, 0x69, 0xb6, 0x50, 0xf5, 0xd8, 0x55, 0x03, 0x35, 0x47, 0x1b, 0x24, 0x46, + 0x5d, 0x93, 0x4d, 0x63, 0x34, 0x39, 0xb1, 0x08, 0xd9, 0x04, 0x2b, 0x37, 0xf9, 0xf7, + 0x2e, 0x74, 0xfd, 0x6b, 0xa0, 0x01, 0x58, 0x5b, 0x08, 0x62, 0xdb, 0x99, 0x4a, 0x5e, + 0xc1, 0x2d, 0xc9, 0x1e, 0x01, 0x48, 0x6a, 0x8d, 0xc6, 0x8a, 0xb9, 0xa3, 0x41, 0x93, + 0x52, 0x61, 0x73, 0xec, 0xc0, 0xd1, 0x55, 0xb5, 0xcd, 0xd6, 0xbc, 0x07, 0xe6, 0x3e, + 0x41, 0xaf, 0x9e, 0x52, 0x4c, 0xd3, 0xe6, 0x55, 0x5d, 0x38, 0xb4, 0x6d, 0xb2, 0xd9, + 0x9e, 0x5b, 0xa4, 0xa4, 0x95, 0xff, 0x30, 0xfe, 0xf2, 0x54, 0xc9, 0xfe, 0x7b, 0x79, + 0x0c, 0xe5, 0x6a, 0x40, 0xf4, 0x00, 0x27, 0xbb, 0x62, 0x05, 0x86, 0x38, 0xc4, 0x94, + 0x17, 0x7b, 0x7f, 0x5c, 0x8f, 0x29, 0x44, 0x9e, 0x9e, 0xc3, 0xbd, 0xb3, 0xab, 0x04, + 0x16, 0x0d, 0x96, 0xd0, 0xd4, 0x04, 0x79, 0x5d, 0x54, 0x28, 0x40, 0x82, 0xb6, 0x35, + 0x7d, 0x58, 0x1d, 0xc2, 0x64, 0x81, 0x13, 0x67, 0xbb, 0xb1, 0x31, 0x9a, 0x31, 0xf7, + 0x66, 0x4a, 0x4e, 0xca, 0x93, 0x2a, 0xbb, 0xd7, 0x33, 0xa7, 0x1a, 0x31, 0xaf, 0x23, + 0x11, 0xc4, 0x9a, 0xc9, 0xaf, 0x22, 0xf8, 0x16, 0x7b, 0x25, 0x51, 0xac, 0xf5, 0x73, + 0xd9, 0x1b, 0x40, 0x98, 0xc4, 0xde, 0xa8, 0xa9, 0x79, 0x9d, 0x9d, 0x54, 0x52, 0x0c, + 0xc6, 0x3e, 0x55, 0x71, 0x8a, 0x24, 0x85, 0xbf, 0x6f, 0x63, 0x16, 0x30, 0x7c, 0xea, + 0x21, 0x5e, 0x22, 0x22, 0x8d, 0x45, 0x34, 0x9a, 0x03, 0x50, 0x31, 0xa4, 0xcb, 0x67, + 0x7b, 0x52, 0x3a, 0x3a, 0x51, 0x25, 0x2c, 0x6c, 0x61, 0xd0, 0xe2, 0x43, 0x2b, 0x94, + 0xac, 0x9c, 0x0d, 0xb5, 0x40, 0xf3, 0x5b, 0x1d, 0xde, 0x91, 0xa3, 0xaf, 0x37, 0xa6, + 0x71, 0xb8, 0xaa, 0x9f, 0x69, 0xf0, + ], + ock: [ + 0x42, 0x46, 0x14, 0xa3, 0xb5, 0x79, 0x96, 0xef, 0xb1, 0x24, 0xb7, 0xf4, 0x50, 0xae, + 0x2a, 0xf7, 0xf6, 0xdc, 0x8c, 0x8c, 0xee, 0xa9, 0x4f, 0x17, 0x74, 0x77, 0x72, 0x1b, + 0x84, 0x61, 0x3b, 0x23, + ], + op: [ + 0x64, 0xce, 0xac, 0xec, 0x3c, 0x2e, 0xa7, 0x9c, 0x4c, 0xd3, 0xe2, 0xf0, 0xfb, 0xb9, + 0xe1, 0xd4, 0x39, 0x55, 0xae, 0x66, 0xd8, 0x93, 0x92, 0xbf, 0x48, 0xaf, 0xb6, 0xc4, + 0xab, 0x00, 0xa0, 0x28, 0x9b, 0x32, 0x77, 0x19, 0x3b, 0x63, 0x60, 0x8e, 0x6a, 0x3d, + 0xdf, 0x7c, 0xe2, 0xd2, 0x33, 0x58, 0x4e, 0x66, 0x17, 0xd6, 0xf6, 0xa2, 0x1c, 0xdc, + 0x86, 0x48, 0x56, 0x2c, 0xbd, 0x86, 0x3f, 0x09, ], c_out: [ - 0xca, 0xb7, 0x8d, 0xd1, 0x83, 0xf3, 0xe1, 0x6a, 0xf7, 0x6e, 0x9a, 0x90, 0x3d, 0xd4, - 0x2a, 0x96, 0x67, 0xbf, 0xe7, 0x08, 0xce, 0x88, 0x79, 0xb8, 0x38, 0x6e, 0x62, 0xac, - 0x9f, 0x66, 0x74, 0xf4, 0x93, 0x59, 0x5d, 0xa5, 0x06, 0xe9, 0xef, 0x06, 0xbb, 0xa2, - 0x4a, 0x93, 0x80, 0x60, 0xe5, 0xd3, 0x82, 0xcc, 0x75, 0xdf, 0xab, 0x97, 0xe0, 0xf8, - 0x49, 0x4b, 0x47, 0x6a, 0xdf, 0x4f, 0xfd, 0x96, 0xff, 0x7f, 0x1b, 0x4f, 0x16, 0xf8, - 0x59, 0x4b, 0x7c, 0x5a, 0x21, 0x9c, 0x7a, 0x00, 0xad, 0x15, + 0x8b, 0x94, 0x8b, 0x33, 0xf5, 0x55, 0xcd, 0x45, 0x5f, 0xaa, 0x36, 0x51, 0x7b, 0x8e, + 0xab, 0x29, 0xe1, 0xa5, 0x1f, 0x6c, 0xec, 0x21, 0x79, 0xd9, 0xea, 0xe4, 0xea, 0xca, + 0x92, 0x50, 0xbb, 0x9b, 0x55, 0xe4, 0xb5, 0x49, 0x49, 0x15, 0xc1, 0xf0, 0x01, 0x65, + 0xf8, 0x9d, 0x7c, 0x02, 0xa0, 0x25, 0x45, 0xb9, 0xd5, 0x98, 0x08, 0x6e, 0xeb, 0x96, + 0x1e, 0x58, 0x7e, 0x43, 0xfd, 0xfc, 0x65, 0xfe, 0x52, 0xf1, 0xe0, 0xc6, 0xa0, 0x46, + 0x46, 0x48, 0xcd, 0x1f, 0xc8, 0x9e, 0x80, 0xbd, 0x78, 0x0f, + ], + note_type: Some([ + 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, 0x10, 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, + 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, + 0xe3, 0x81, 0x93, 0xbc, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0x77, 0x5c, 0x7f, 0x5c, 0xab, 0x43, 0x86, 0x88, 0x64, 0x3d, 0xdd, 0x15, 0x8d, 0xda, + 0xed, 0xf9, 0xa0, 0xea, 0xef, 0x61, 0x4b, 0x54, 0x90, 0x60, 0xf1, 0xe4, 0xd7, 0xcc, + 0x3e, 0x7e, 0x8b, 0x64, 0x49, 0x9a, 0x81, 0x8a, 0x6d, 0x0e, 0x33, 0x57, 0x68, 0x6e, + 0x65, 0xbc, 0x27, 0x4e, 0x3f, 0x7d, 0x45, 0x5b, 0x91, 0x1f, 0x13, 0x9f, 0x19, 0xf0, + 0x81, 0x61, 0x57, 0x51, 0x91, 0x3e, 0xb4, 0x12, ], + ovk: [ + 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, 0x0c, + 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, 0x42, 0x8e, 0x8a, 0xba, 0x43, 0x64, 0xe8, + 0x4b, 0xac, 0x37, 0x92, + ], + default_d: [ + 0x2d, 0x0e, 0x22, 0xbe, 0xb8, 0x62, 0xfe, 0x52, 0xc1, 0x4c, 0xf5, + ], + default_pk_d: [ + 0x9a, 0xe4, 0x94, 0xa9, 0xfc, 0xff, 0x9b, 0x74, 0x49, 0x14, 0x53, 0x31, 0x04, 0x4f, + 0x9a, 0x02, 0x53, 0xe5, 0x24, 0xa0, 0x2c, 0x77, 0x95, 0xe9, 0x8f, 0x83, 0xec, 0x7d, + 0x96, 0xdc, 0xe6, 0xb7, + ], + v: 10238534295395242511, + rseed: [ + 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, + 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, + 0xa5, 0xfa, 0x38, 0x5d, + ], + memo: [ + 0xff, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, + 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, + 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, + 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, + 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, + 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, + 0x73, 0xde, 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, + 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, + 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, 0x59, + 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, 0x6b, 0xd2, + 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, 0x9a, 0x7f, 0xfe, + 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, 0x39, 0x22, 0xf7, + 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, 0xb5, 0xae, 0x2d, + 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, 0x6b, 0x5b, 0xc9, + 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, 0xca, 0xd0, 0xd9, 0x74, + 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, 0x33, 0x15, 0x6d, 0xad, 0xd5, + 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, + 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, + 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, + 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, + 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, + 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, 0x60, + 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, 0xbb, 0x78, + 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, 0x3c, 0x1e, 0x2d, + 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, 0xe7, 0x48, 0x76, 0xc5, + 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, 0xe0, 0x0d, 0xde, 0x23, 0x6a, + 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, 0xaf, 0xde, 0x5c, 0x42, 0x36, 0x40, + 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x11, 0xa2, 0xe1, 0xd1, 0x84, 0xc6, 0x7c, + 0x52, 0x8d, 0xf9, 0x2d, 0x53, 0xae, 0xc4, 0x4a, 0x40, 0xa4, 0xea, 0x2a, 0x13, 0x1b, + 0x47, 0x33, 0xcf, 0xe4, 0x5c, 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, 0xba, + 0xae, 0xcb, 0x02, 0x32, 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, 0x34, 0x94, + 0x62, 0xec, 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, + 0xfc, 0xf3, 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0xd8, + 0x17, 0x85, 0x60, 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, 0x42, 0x3e, + 0xee, 0xfc, 0x52, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x81, 0xa8, 0xbb, 0x76, 0xf2, 0x62, 0x73, 0x62, 0x8b, 0x9f, 0x9b, 0x66, 0x04, 0x94, + 0xb3, 0x45, 0xb7, 0x9d, 0x45, 0x16, 0x3c, 0x7b, 0x4c, 0xc5, 0x5a, 0x49, 0xff, 0x3f, + 0xc6, 0xb8, 0x1d, 0xaa, + ], + rho: [ + 0xd6, 0xff, 0xc4, 0x74, 0x88, 0xad, 0x05, 0x93, 0x89, 0x70, 0xc4, 0xb1, 0x56, 0xd0, + 0x53, 0xb9, 0x3b, 0xcb, 0xb4, 0x37, 0x57, 0x1c, 0x62, 0xf3, 0x75, 0x60, 0x7e, 0x90, + 0x4e, 0xb3, 0xa2, 0x08, + ], + cmx: [ + 0x8f, 0x56, 0xd1, 0x3f, 0xd9, 0xc8, 0x3e, 0xb7, 0x1b, 0x95, 0x87, 0x7a, 0x4f, 0x29, + 0x39, 0x64, 0xbf, 0x3f, 0x73, 0x1d, 0x8d, 0xf2, 0x04, 0x32, 0x2c, 0xed, 0xcb, 0x38, + 0x68, 0x21, 0x90, 0x3c, + ], + esk: [ + 0x24, 0x50, 0xae, 0xde, 0xb9, 0x7e, 0x62, 0xd7, 0x9c, 0xcb, 0x44, 0xb0, 0xb0, 0x4f, + 0xe7, 0x93, 0x92, 0x5d, 0x49, 0xc4, 0xc0, 0x1f, 0x49, 0x2e, 0xa9, 0xec, 0x88, 0x17, + 0x18, 0x65, 0x40, 0x33, + ], + ephemeral_key: [ + 0x51, 0x66, 0x26, 0x31, 0x6e, 0xea, 0x63, 0xa6, 0x45, 0xae, 0x56, 0x23, 0x81, 0x5a, + 0x31, 0x74, 0xb3, 0xed, 0x36, 0x64, 0xc3, 0x3e, 0x6a, 0x51, 0x81, 0xa9, 0xf5, 0xb5, + 0x42, 0x76, 0x7a, 0x2d, + ], + shared_secret: [ + 0xf6, 0x04, 0x23, 0x98, 0x7f, 0x0e, 0x67, 0x6d, 0x1a, 0x3b, 0xb6, 0xef, 0xe0, 0x39, + 0x42, 0x1d, 0xbb, 0xc8, 0x24, 0xb6, 0x90, 0xc1, 0x94, 0xa4, 0x90, 0xe4, 0x17, 0x1d, + 0xde, 0x21, 0x58, 0x19, + ], + k_enc: [ + 0x20, 0x98, 0x25, 0x7e, 0x2b, 0x9b, 0x7f, 0xc0, 0x62, 0x82, 0x38, 0x03, 0x38, 0x59, + 0x7d, 0xcb, 0x62, 0x7d, 0xdf, 0x47, 0x3e, 0x83, 0xa7, 0x2e, 0x61, 0xb0, 0xf2, 0x2c, + 0xcf, 0xaf, 0xbe, 0x4e, + ], + p_enc: [ + 0x03, 0x2d, 0x0e, 0x22, 0xbe, 0xb8, 0x62, 0xfe, 0x52, 0xc1, 0x4c, 0xf5, 0x0f, 0x12, + 0xb0, 0x11, 0xb2, 0x94, 0x16, 0x8e, 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, + 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, + 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0x76, 0xba, 0x24, 0x3f, + 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, + 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, + 0xff, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, + 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, + 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, + 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, + 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, + 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, + 0x73, 0xde, 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, + 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, + 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, 0x59, + 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, 0x6b, 0xd2, + 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, 0x9a, 0x7f, 0xfe, + 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, 0x39, 0x22, 0xf7, + 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, 0xb5, 0xae, 0x2d, + 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, 0x6b, 0x5b, 0xc9, + 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, 0xca, 0xd0, 0xd9, 0x74, + 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, 0x33, 0x15, 0x6d, 0xad, 0xd5, + 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, + 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, + 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, + 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, + 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, + 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, 0x60, + 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, 0xbb, 0x78, + 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, 0x3c, 0x1e, 0x2d, + 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, 0xe7, 0x48, 0x76, 0xc5, + 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, 0xe0, 0x0d, 0xde, 0x23, 0x6a, + 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, 0xaf, 0xde, 0x5c, 0x42, 0x36, 0x40, + 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x11, 0xa2, 0xe1, 0xd1, 0x84, 0xc6, 0x7c, + 0x52, 0x8d, 0xf9, 0x2d, 0x53, 0xae, 0xc4, 0x4a, 0x40, 0xa4, 0xea, 0x2a, 0x13, 0x1b, + 0x47, 0x33, 0xcf, 0xe4, 0x5c, 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, 0xba, + 0xae, 0xcb, 0x02, 0x32, 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, 0x34, 0x94, + 0x62, 0xec, 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, + 0xfc, 0xf3, 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0xd8, + 0x17, 0x85, 0x60, 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, 0x42, 0x3e, + 0xee, 0xfc, 0x52, 0x7b, + ], + c_enc: [ + 0xa4, 0x01, 0xab, 0x60, 0x1f, 0x8d, 0x69, 0xd9, 0x38, 0x0c, 0x3d, 0xef, 0x1f, 0x1a, + 0x34, 0xbe, 0x6c, 0xfa, 0x4d, 0x83, 0x8b, 0xf8, 0x7f, 0x00, 0xe3, 0x6b, 0xe6, 0xbe, + 0x68, 0x60, 0xbe, 0xa8, 0x3d, 0xab, 0xdd, 0x00, 0xab, 0xe7, 0xe0, 0xd1, 0x21, 0x90, + 0xfb, 0x54, 0xb0, 0xf2, 0xad, 0xcf, 0xef, 0x9e, 0xf4, 0x2b, 0xa2, 0x31, 0x77, 0x6a, + 0xd3, 0xee, 0x09, 0x86, 0xdb, 0x3f, 0x4f, 0xc0, 0xa8, 0xa1, 0xc6, 0xa7, 0xfe, 0x54, + 0xa6, 0x6b, 0xd7, 0x68, 0xa9, 0xde, 0xd2, 0x5b, 0xb1, 0x89, 0xd5, 0x87, 0x1c, 0xaf, + 0x4d, 0xf8, 0x95, 0x6c, 0x2f, 0x30, 0x70, 0x15, 0x89, 0xa4, 0xdc, 0xdb, 0x68, 0x11, + 0x6d, 0x0f, 0x50, 0x9b, 0x34, 0x1e, 0x8f, 0x25, 0x8e, 0x17, 0x38, 0xb5, 0x51, 0x9c, + 0x99, 0xf1, 0xdb, 0xd0, 0x86, 0x31, 0x56, 0x2f, 0x90, 0xd1, 0x5e, 0x72, 0x8a, 0x85, + 0x25, 0xa1, 0x1b, 0xfe, 0x53, 0x95, 0x24, 0x5d, 0x71, 0x79, 0xcf, 0x8e, 0x97, 0xa8, + 0x3f, 0xaa, 0x4c, 0xf3, 0xb2, 0xa8, 0xb5, 0xef, 0x62, 0x13, 0xe3, 0x30, 0x89, 0xb4, + 0xeb, 0x03, 0xe7, 0xc2, 0xf0, 0x12, 0x11, 0xfc, 0x53, 0xbc, 0x01, 0x16, 0x40, 0x05, + 0x01, 0x5d, 0xbf, 0x33, 0xc6, 0x50, 0xa3, 0xf8, 0x33, 0xba, 0x67, 0x77, 0xcf, 0xf1, + 0xd7, 0x38, 0xe2, 0x1c, 0x58, 0xdc, 0x05, 0xc3, 0xb4, 0xec, 0xb9, 0x7a, 0x6c, 0xe0, + 0xb0, 0xc5, 0xee, 0x94, 0x4c, 0x24, 0xb3, 0x3b, 0xb0, 0xce, 0x32, 0xbe, 0x02, 0x3e, + 0x21, 0x3f, 0xf7, 0xc9, 0xd4, 0x12, 0x4f, 0xc9, 0xdc, 0x4a, 0xa7, 0xca, 0x47, 0x13, + 0x86, 0x48, 0xe2, 0xbb, 0x80, 0x7c, 0xea, 0x7a, 0x58, 0xe7, 0x67, 0xd3, 0x27, 0x07, + 0x4a, 0xe5, 0xe3, 0x9c, 0x3c, 0x17, 0xb7, 0x7c, 0x09, 0x0a, 0xf9, 0x42, 0x5b, 0xc6, + 0x40, 0xd2, 0x1d, 0xd6, 0x81, 0xa6, 0x37, 0x45, 0xe9, 0x02, 0x59, 0xe2, 0xd1, 0x09, + 0x0c, 0x88, 0x48, 0x8e, 0x21, 0x48, 0xb9, 0xee, 0x24, 0x31, 0xc5, 0xae, 0xf5, 0x10, + 0x95, 0xb3, 0x5a, 0x37, 0x7c, 0xfa, 0x76, 0x5d, 0x82, 0x24, 0x98, 0x83, 0x00, 0x04, + 0x71, 0x79, 0xa5, 0x09, 0x40, 0x28, 0xbe, 0x52, 0x7d, 0x5d, 0xe1, 0xc2, 0x69, 0xff, + 0x45, 0x2c, 0x0a, 0xaf, 0x5a, 0x47, 0x7e, 0x93, 0x90, 0xa0, 0xf0, 0xa8, 0x68, 0x11, + 0x3c, 0x7c, 0xd1, 0x9e, 0x2e, 0xac, 0x54, 0x0d, 0xc6, 0x59, 0xda, 0x29, 0x60, 0x06, + 0x77, 0x6e, 0xda, 0x0d, 0xf9, 0x81, 0xc4, 0x11, 0xc1, 0x50, 0x01, 0xa9, 0x8b, 0x6a, + 0xd6, 0x58, 0xd9, 0xa6, 0x4c, 0x12, 0x6a, 0xbe, 0xfc, 0x73, 0x9a, 0xa1, 0xf4, 0x44, + 0xbb, 0x83, 0xf3, 0xf1, 0x4d, 0x11, 0x3d, 0x02, 0x8f, 0xae, 0x10, 0xe4, 0xc5, 0xdb, + 0xe7, 0x78, 0x51, 0x96, 0x83, 0xcd, 0xf4, 0xc2, 0xf4, 0x6c, 0x4a, 0x52, 0xae, 0x12, + 0x09, 0xe1, 0x12, 0x7f, 0x9d, 0xc4, 0xed, 0x86, 0x7d, 0x8e, 0xda, 0x02, 0x4a, 0x68, + 0x9f, 0x6b, 0x15, 0xb8, 0x05, 0x38, 0x03, 0x02, 0x44, 0x02, 0xa1, 0xce, 0x6f, 0x1c, + 0x63, 0x6f, 0x2e, 0xfc, 0xf9, 0xd0, 0x60, 0x51, 0x5c, 0xd6, 0x14, 0x71, 0x8d, 0x51, + 0x52, 0x7d, 0x26, 0x7a, 0xd8, 0x95, 0xfa, 0xd8, 0xec, 0xfb, 0x23, 0x51, 0xf8, 0x92, + 0x45, 0x0d, 0xc8, 0x74, 0xe8, 0x74, 0x39, 0x2c, 0x91, 0xed, 0x3a, 0xf1, 0x18, 0x38, + 0xc4, 0xb5, 0x48, 0x2e, 0x8c, 0x92, 0xeb, 0xc7, 0xa0, 0x08, 0x8e, 0x49, 0xd2, 0xb0, + 0xb4, 0xa1, 0xbd, 0x33, 0x3b, 0x38, 0x7f, 0x49, 0xe3, 0x0f, 0xd2, 0x1a, 0x6e, 0xdc, + 0x89, 0x94, 0x83, 0x4f, 0x28, 0xe9, 0xf2, 0x52, 0x9a, 0x7e, 0x27, 0x24, 0x21, 0x6d, + 0x9e, 0x1a, 0xe5, 0xb4, 0x6e, 0xb1, 0x9a, 0x53, 0xea, 0x2b, 0x97, 0x99, 0x65, 0xf7, + 0x5b, 0x83, 0xf6, 0x86, 0xed, 0xc0, 0x1d, 0x25, 0x7a, 0x06, 0x58, 0xd7, 0x4e, 0x25, + 0xc0, 0xe1, 0xa8, 0xb0, 0x65, 0x60, 0x43, 0x1f, 0x85, 0x10, 0x5c, 0xf9, 0x8a, 0x1f, + 0xfe, 0x28, 0x40, 0x8a, 0x64, 0xf4, 0xc0, 0x27, 0x8d, 0x36, 0xed, 0xea, 0x76, 0x40, + 0xa2, 0x18, 0x26, 0xc3, 0x5d, 0x13, 0x20, 0x25, 0x08, 0x07, 0x2b, 0x68, 0x82, 0xf4, + 0xd8, 0x2e, 0x93, 0x3c, 0x89, 0xe1, + ], + ock: [ + 0x71, 0x5c, 0x9a, 0x01, 0x87, 0xab, 0x90, 0xb2, 0x4d, 0x3c, 0xbb, 0xa3, 0xf1, 0xab, + 0x30, 0x67, 0xc5, 0x63, 0x06, 0x04, 0x48, 0xc0, 0x0e, 0xf2, 0x74, 0xb7, 0xea, 0x66, + 0x11, 0x13, 0x0d, 0x26, + ], + op: [ + 0x9a, 0xe4, 0x94, 0xa9, 0xfc, 0xff, 0x9b, 0x74, 0x49, 0x14, 0x53, 0x31, 0x04, 0x4f, + 0x9a, 0x02, 0x53, 0xe5, 0x24, 0xa0, 0x2c, 0x77, 0x95, 0xe9, 0x8f, 0x83, 0xec, 0x7d, + 0x96, 0xdc, 0xe6, 0xb7, 0x24, 0x50, 0xae, 0xde, 0xb9, 0x7e, 0x62, 0xd7, 0x9c, 0xcb, + 0x44, 0xb0, 0xb0, 0x4f, 0xe7, 0x93, 0x92, 0x5d, 0x49, 0xc4, 0xc0, 0x1f, 0x49, 0x2e, + 0xa9, 0xec, 0x88, 0x17, 0x18, 0x65, 0x40, 0x33, + ], + c_out: [ + 0x22, 0xce, 0xb6, 0x94, 0x21, 0xab, 0x9e, 0xd0, 0x29, 0x97, 0x3f, 0xf2, 0x2e, 0xc9, + 0x5f, 0x23, 0x36, 0x56, 0xbe, 0x41, 0xd2, 0x25, 0x1a, 0x76, 0x77, 0xce, 0xb0, 0xd3, + 0x14, 0x22, 0x11, 0x6f, 0x8c, 0xa5, 0xf0, 0xae, 0x23, 0x12, 0xd4, 0xec, 0x60, 0x0c, + 0x5d, 0x7c, 0x56, 0x44, 0x5b, 0x6d, 0x8d, 0xc4, 0xb8, 0x0b, 0x47, 0x0b, 0xb1, 0xf6, + 0x51, 0xa5, 0x38, 0x28, 0x0d, 0xaa, 0x94, 0x20, 0x3a, 0xb5, 0x02, 0xa8, 0x15, 0x09, + 0xe4, 0x3a, 0x61, 0xa6, 0x98, 0x56, 0x57, 0xd9, 0xe8, 0x4e, + ], + note_type: Some([ + 0x76, 0xba, 0x24, 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, + 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, + 0xf6, 0x99, 0x03, 0x18, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0x9c, 0xe9, 0x20, 0x37, 0x6a, 0x6a, 0x54, 0x1e, 0x6a, 0xad, 0x66, 0x0e, 0xfa, 0x09, + 0x8d, 0xc5, 0x4c, 0x18, 0xfc, 0xeb, 0x13, 0xd0, 0x99, 0x9f, 0xbc, 0xc7, 0xfd, 0x45, + 0xa5, 0x7c, 0xcc, 0x10, 0xb8, 0xaa, 0x86, 0xc4, 0x54, 0x0d, 0x0a, 0x9f, 0xc6, 0x6d, + 0xf8, 0x5d, 0xad, 0xd6, 0x21, 0x56, 0x36, 0x5e, 0x28, 0xa3, 0xe9, 0x80, 0xb9, 0x8d, + 0x13, 0x1b, 0x50, 0x3a, 0xa0, 0x6a, 0x6c, 0x19, + ], + ovk: [ + 0xf8, 0x1a, 0xd6, 0x17, 0xfa, 0x26, 0xf0, 0xdf, 0xb8, 0x36, 0x55, 0xb8, 0xa2, 0x9a, + 0x7f, 0x83, 0x42, 0x32, 0x42, 0x5e, 0x8c, 0x47, 0x45, 0x88, 0xf1, 0x8d, 0xd3, 0x26, + 0xaa, 0x39, 0x6c, 0x3e, + ], + default_d: [ + 0xfb, 0x8e, 0xa2, 0xcc, 0x0a, 0xd2, 0x30, 0x91, 0x32, 0xfd, 0x11, + ], + default_pk_d: [ + 0xcc, 0x18, 0xe4, 0xb6, 0x5f, 0x89, 0x34, 0x06, 0x31, 0x5d, 0xb7, 0x1f, 0xac, 0x06, + 0x5d, 0x71, 0xd0, 0xea, 0xba, 0x7c, 0xf3, 0xc2, 0xba, 0x94, 0x77, 0x12, 0x32, 0x75, + 0x43, 0x4b, 0x1e, 0xb0, + ], + v: 2690686290017047047, + rseed: [ + 0x0b, 0x39, 0x05, 0xa4, 0xe3, 0xbd, 0x01, 0xc5, 0x4d, 0xf8, 0x64, 0x34, 0x43, 0xbe, + 0x0f, 0x88, 0x90, 0x32, 0xea, 0x32, 0x5b, 0xf0, 0x71, 0x07, 0xfd, 0x41, 0xd6, 0x73, + 0xee, 0xba, 0xe6, 0xfa, + ], + memo: [ + 0xff, 0x63, 0x7b, 0x70, 0xcc, 0x0e, 0xd3, 0xf0, 0x09, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, + 0x0e, 0x85, 0xa1, 0xd0, 0xa6, 0xa8, 0x90, 0x81, 0x40, 0xc2, 0xf4, 0x34, 0xc2, 0xe2, + 0x60, 0xef, 0xb0, 0xbc, 0xa2, 0x00, 0x35, 0x04, 0xc9, 0x99, 0x93, 0xa9, 0xe1, 0xc0, + 0xff, 0x9c, 0xef, 0xe6, 0xa6, 0x65, 0xd7, 0x91, 0x42, 0x86, 0x90, 0xe4, 0x7e, 0xf8, + 0xc1, 0x31, 0xa8, 0xe9, 0xbf, 0xb4, 0xc3, 0x08, 0x02, 0x35, 0x03, 0x2d, 0x73, 0x1b, + 0x0d, 0x38, 0x41, 0x22, 0x5f, 0x1c, 0x11, 0xe2, 0xc2, 0x8e, 0xe8, 0x4d, 0x35, 0xf9, + 0x22, 0x61, 0x00, 0x56, 0x59, 0x72, 0xeb, 0x26, 0x9d, 0x27, 0x8e, 0xf6, 0x49, 0x79, + 0xbf, 0x65, 0x15, 0xed, 0x4a, 0x68, 0x40, 0xb0, 0x88, 0x3a, 0x9e, 0x6e, 0xf6, 0x4a, + 0x0e, 0xfc, 0xae, 0x1c, 0xf2, 0x1d, 0xfe, 0x74, 0x85, 0x4e, 0x84, 0xc2, 0x74, 0x9f, + 0xac, 0x03, 0x82, 0x52, 0x75, 0xc9, 0xb6, 0x30, 0x21, 0x84, 0xc7, 0x2d, 0xf4, 0xc4, + 0xbb, 0x28, 0x62, 0xe4, 0xe8, 0xa7, 0xd9, 0xa4, 0xa2, 0x82, 0x86, 0x6f, 0x9a, 0x7b, + 0x2c, 0xfc, 0x9a, 0x56, 0x31, 0x3d, 0xa0, 0xc4, 0x7a, 0x34, 0xb7, 0xb9, 0xcd, 0xa3, + 0xac, 0xe8, 0x18, 0x5f, 0x07, 0xdf, 0x36, 0xe4, 0x48, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, + 0x24, 0xd8, 0x7a, 0x07, 0x4f, 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, 0x28, + 0xf0, 0x81, 0x91, 0x44, 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, 0x23, 0x3c, + 0xa6, 0x15, 0x5d, 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, 0xc2, 0x10, 0x6e, + 0x66, 0xa2, 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, 0xb4, 0x34, 0xa7, 0x4f, + 0x8c, 0xe8, 0x06, 0x00, 0x50, 0xb0, 0x82, 0xa7, 0x9b, 0x61, 0xbb, 0x5d, 0x34, 0x4e, + 0xb5, 0xa1, 0x15, 0x83, 0x26, 0xce, 0xd9, 0xa9, 0xd9, 0xf5, 0x4f, 0xb2, 0xfe, 0x8f, + 0x9f, 0x05, 0xcd, 0x11, 0x1e, 0xe4, 0x6c, 0x47, 0x10, 0xf6, 0xf6, 0x3a, 0x62, 0x69, + 0x45, 0x57, 0xef, 0x1b, 0x12, 0xc8, 0x80, 0x06, 0xb6, 0x78, 0x72, 0x50, 0x5f, 0x4e, + 0x88, 0x3b, 0x58, 0x59, 0x07, 0x92, 0x9a, 0x2f, 0x3f, 0xdb, 0x0d, 0x8f, 0x79, 0x14, + 0xc4, 0x2d, 0xde, 0x2d, 0x20, 0x00, 0xf5, 0xae, 0x02, 0xd4, 0x18, 0x21, 0xc8, 0xe1, + 0xee, 0x01, 0x38, 0xeb, 0xcb, 0x72, 0x8d, 0x7c, 0x6c, 0x3c, 0x80, 0x02, 0x7e, 0x43, + 0x75, 0x94, 0xc6, 0x70, 0xfd, 0x6f, 0x39, 0x08, 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, + 0xf8, 0x27, 0x1a, 0xbe, 0x66, 0x0e, 0x39, 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, + 0x22, 0x76, 0xe2, 0xba, 0xa0, 0xfe, 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0x34, + 0x9c, 0x8d, 0x15, 0x4b, 0xb7, 0xee, 0x28, 0x21, 0x2c, 0x1b, 0xaa, 0x70, 0x5d, 0x82, + 0x07, 0x0d, 0x70, 0x32, 0xf2, 0x69, 0x5d, 0x17, 0x96, 0x80, 0x9f, 0xab, 0x41, 0x24, + 0x69, 0x26, 0xaf, 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, 0xc4, 0x56, 0x2c, + 0x5f, 0x2f, 0x1b, 0x19, 0x54, 0x95, 0x00, 0x37, 0x2e, 0x7a, 0xd5, 0x79, 0xa6, 0xd6, + 0xd7, 0x8b, 0x33, 0x15, 0x31, 0x30, 0xfb, 0x44, 0x8f, 0xb7, 0x9e, 0x8a, 0x66, 0x9d, + 0xb8, 0xa0, 0xf3, 0x5c, 0xdf, 0x9a, 0xe5, 0xd3, 0x2d, 0x73, 0x2f, 0xc7, 0x94, 0x18, + 0xe2, 0x3b, 0x45, 0x1d, 0xdc, 0x95, 0xa2, 0x2a, 0xba, 0xbb, 0x05, 0x6e, 0xc6, 0xb5, + 0xe8, 0xba, 0x4f, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x40, 0x21, 0x95, 0x68, 0x0e, 0x02, 0x27, 0x30, 0x2c, 0x3a, 0x75, 0x6a, 0x34, 0xdf, + 0xdb, 0x13, 0x6b, 0xbd, 0x28, 0x7d, 0x7d, 0xc1, 0x25, 0x81, 0xd0, 0x8e, 0x2a, 0x63, + 0xb9, 0xc3, 0x92, 0x3e, + ], + rho: [ + 0x85, 0x2f, 0x5c, 0x39, 0xd3, 0xf3, 0x55, 0xa3, 0x85, 0xe2, 0xab, 0xd2, 0x54, 0x3a, + 0xa5, 0xed, 0x09, 0xc6, 0xee, 0x3b, 0x7f, 0x39, 0x34, 0x14, 0xe1, 0x1c, 0xd4, 0x20, + 0x4c, 0x3f, 0x8d, 0x26, + ], + cmx: [ + 0x69, 0x4b, 0x6f, 0x3a, 0xb8, 0x37, 0xa9, 0x26, 0xd6, 0x77, 0x3e, 0xc4, 0xa6, 0x76, + 0x5d, 0xef, 0x82, 0x89, 0x33, 0x74, 0x2d, 0x93, 0x29, 0xfc, 0x88, 0x67, 0x1c, 0xcd, + 0x81, 0x21, 0xa4, 0x23, + ], + esk: [ + 0xaa, 0x84, 0x16, 0x79, 0xd4, 0xd2, 0x40, 0xb0, 0xab, 0xc4, 0xa5, 0xd8, 0x9a, 0xa8, + 0xd6, 0xb3, 0xb0, 0x86, 0x92, 0x23, 0xed, 0x76, 0x3b, 0x67, 0x6a, 0x72, 0xcb, 0x74, + 0xfb, 0x18, 0xd1, 0x17, + ], + ephemeral_key: [ + 0x3c, 0x04, 0xbe, 0x6e, 0x42, 0xa6, 0xca, 0x7f, 0x5d, 0xda, 0x0d, 0x82, 0xdf, 0x30, + 0x7b, 0xd9, 0x6b, 0xb7, 0xb1, 0xae, 0x8d, 0x62, 0x31, 0x87, 0xe3, 0x9c, 0x00, 0xa4, + 0x8c, 0x25, 0xaa, 0x9d, + ], + shared_secret: [ + 0x3a, 0x60, 0x2b, 0xaf, 0xb8, 0xa2, 0x66, 0x5a, 0x74, 0xdf, 0x34, 0xab, 0x6e, 0x3c, + 0x48, 0x8b, 0x09, 0xe2, 0x28, 0x4e, 0xa1, 0x7d, 0x56, 0x02, 0x62, 0xe2, 0x1f, 0x7f, + 0x3c, 0xba, 0xa3, 0x95, + ], + k_enc: [ + 0x1b, 0x6d, 0xd1, 0x03, 0x49, 0x63, 0x67, 0xc9, 0x2b, 0x36, 0x8f, 0xc2, 0xf1, 0xc6, + 0x2e, 0x56, 0xc8, 0xc9, 0xfb, 0xe3, 0x4a, 0x35, 0x84, 0x1f, 0xe1, 0xa3, 0x70, 0x96, + 0x43, 0xe1, 0x35, 0xe1, + ], + p_enc: [ + 0x03, 0xfb, 0x8e, 0xa2, 0xcc, 0x0a, 0xd2, 0x30, 0x91, 0x32, 0xfd, 0x11, 0x07, 0xd2, + 0x7a, 0xc6, 0xec, 0x3c, 0x57, 0x25, 0x0b, 0x39, 0x05, 0xa4, 0xe3, 0xbd, 0x01, 0xc5, + 0x4d, 0xf8, 0x64, 0x34, 0x43, 0xbe, 0x0f, 0x88, 0x90, 0x32, 0xea, 0x32, 0x5b, 0xf0, + 0x71, 0x07, 0xfd, 0x41, 0xd6, 0x73, 0xee, 0xba, 0xe6, 0xfa, 0x64, 0xd0, 0x87, 0x40, + 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x4f, 0xea, 0x9a, 0x23, 0xc3, 0x93, 0x11, 0x78, + 0x2f, 0x86, 0xca, 0xbf, 0xf9, 0x45, 0x5e, 0x4c, 0xf6, 0x99, 0xe5, 0xf5, 0xd4, 0xbc, + 0xff, 0x63, 0x7b, 0x70, 0xcc, 0x0e, 0xd3, 0xf0, 0x09, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, + 0x0e, 0x85, 0xa1, 0xd0, 0xa6, 0xa8, 0x90, 0x81, 0x40, 0xc2, 0xf4, 0x34, 0xc2, 0xe2, + 0x60, 0xef, 0xb0, 0xbc, 0xa2, 0x00, 0x35, 0x04, 0xc9, 0x99, 0x93, 0xa9, 0xe1, 0xc0, + 0xff, 0x9c, 0xef, 0xe6, 0xa6, 0x65, 0xd7, 0x91, 0x42, 0x86, 0x90, 0xe4, 0x7e, 0xf8, + 0xc1, 0x31, 0xa8, 0xe9, 0xbf, 0xb4, 0xc3, 0x08, 0x02, 0x35, 0x03, 0x2d, 0x73, 0x1b, + 0x0d, 0x38, 0x41, 0x22, 0x5f, 0x1c, 0x11, 0xe2, 0xc2, 0x8e, 0xe8, 0x4d, 0x35, 0xf9, + 0x22, 0x61, 0x00, 0x56, 0x59, 0x72, 0xeb, 0x26, 0x9d, 0x27, 0x8e, 0xf6, 0x49, 0x79, + 0xbf, 0x65, 0x15, 0xed, 0x4a, 0x68, 0x40, 0xb0, 0x88, 0x3a, 0x9e, 0x6e, 0xf6, 0x4a, + 0x0e, 0xfc, 0xae, 0x1c, 0xf2, 0x1d, 0xfe, 0x74, 0x85, 0x4e, 0x84, 0xc2, 0x74, 0x9f, + 0xac, 0x03, 0x82, 0x52, 0x75, 0xc9, 0xb6, 0x30, 0x21, 0x84, 0xc7, 0x2d, 0xf4, 0xc4, + 0xbb, 0x28, 0x62, 0xe4, 0xe8, 0xa7, 0xd9, 0xa4, 0xa2, 0x82, 0x86, 0x6f, 0x9a, 0x7b, + 0x2c, 0xfc, 0x9a, 0x56, 0x31, 0x3d, 0xa0, 0xc4, 0x7a, 0x34, 0xb7, 0xb9, 0xcd, 0xa3, + 0xac, 0xe8, 0x18, 0x5f, 0x07, 0xdf, 0x36, 0xe4, 0x48, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, + 0x24, 0xd8, 0x7a, 0x07, 0x4f, 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, 0x28, + 0xf0, 0x81, 0x91, 0x44, 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, 0x23, 0x3c, + 0xa6, 0x15, 0x5d, 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, 0xc2, 0x10, 0x6e, + 0x66, 0xa2, 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, 0xb4, 0x34, 0xa7, 0x4f, + 0x8c, 0xe8, 0x06, 0x00, 0x50, 0xb0, 0x82, 0xa7, 0x9b, 0x61, 0xbb, 0x5d, 0x34, 0x4e, + 0xb5, 0xa1, 0x15, 0x83, 0x26, 0xce, 0xd9, 0xa9, 0xd9, 0xf5, 0x4f, 0xb2, 0xfe, 0x8f, + 0x9f, 0x05, 0xcd, 0x11, 0x1e, 0xe4, 0x6c, 0x47, 0x10, 0xf6, 0xf6, 0x3a, 0x62, 0x69, + 0x45, 0x57, 0xef, 0x1b, 0x12, 0xc8, 0x80, 0x06, 0xb6, 0x78, 0x72, 0x50, 0x5f, 0x4e, + 0x88, 0x3b, 0x58, 0x59, 0x07, 0x92, 0x9a, 0x2f, 0x3f, 0xdb, 0x0d, 0x8f, 0x79, 0x14, + 0xc4, 0x2d, 0xde, 0x2d, 0x20, 0x00, 0xf5, 0xae, 0x02, 0xd4, 0x18, 0x21, 0xc8, 0xe1, + 0xee, 0x01, 0x38, 0xeb, 0xcb, 0x72, 0x8d, 0x7c, 0x6c, 0x3c, 0x80, 0x02, 0x7e, 0x43, + 0x75, 0x94, 0xc6, 0x70, 0xfd, 0x6f, 0x39, 0x08, 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, + 0xf8, 0x27, 0x1a, 0xbe, 0x66, 0x0e, 0x39, 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, + 0x22, 0x76, 0xe2, 0xba, 0xa0, 0xfe, 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0x34, + 0x9c, 0x8d, 0x15, 0x4b, 0xb7, 0xee, 0x28, 0x21, 0x2c, 0x1b, 0xaa, 0x70, 0x5d, 0x82, + 0x07, 0x0d, 0x70, 0x32, 0xf2, 0x69, 0x5d, 0x17, 0x96, 0x80, 0x9f, 0xab, 0x41, 0x24, + 0x69, 0x26, 0xaf, 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, 0xc4, 0x56, 0x2c, + 0x5f, 0x2f, 0x1b, 0x19, 0x54, 0x95, 0x00, 0x37, 0x2e, 0x7a, 0xd5, 0x79, 0xa6, 0xd6, + 0xd7, 0x8b, 0x33, 0x15, 0x31, 0x30, 0xfb, 0x44, 0x8f, 0xb7, 0x9e, 0x8a, 0x66, 0x9d, + 0xb8, 0xa0, 0xf3, 0x5c, 0xdf, 0x9a, 0xe5, 0xd3, 0x2d, 0x73, 0x2f, 0xc7, 0x94, 0x18, + 0xe2, 0x3b, 0x45, 0x1d, 0xdc, 0x95, 0xa2, 0x2a, 0xba, 0xbb, 0x05, 0x6e, 0xc6, 0xb5, + 0xe8, 0xba, 0x4f, 0x52, + ], + c_enc: [ + 0xb4, 0x15, 0x88, 0x23, 0x1d, 0x6b, 0xa2, 0x9c, 0xc5, 0xb9, 0xaa, 0xf0, 0xc1, 0xf0, + 0xba, 0x44, 0x16, 0x6e, 0xdb, 0x8a, 0x27, 0x29, 0xca, 0xba, 0x53, 0x71, 0xe7, 0xac, + 0x36, 0x90, 0x0f, 0xaa, 0x64, 0xf5, 0x76, 0x0d, 0xce, 0x55, 0x20, 0xda, 0x82, 0x8d, + 0x5e, 0x25, 0xbd, 0x83, 0x51, 0x95, 0x11, 0x64, 0x12, 0x11, 0x80, 0x9d, 0xff, 0xd8, + 0xcf, 0xeb, 0xff, 0xf3, 0xcd, 0xdc, 0xd2, 0x75, 0x88, 0x1e, 0x39, 0xb6, 0x3d, 0xac, + 0x4d, 0x98, 0x6b, 0x10, 0xc0, 0xe4, 0xc5, 0x52, 0x63, 0xde, 0x3e, 0x02, 0x54, 0x94, + 0x81, 0x8a, 0x38, 0x08, 0xd9, 0xab, 0xc6, 0xec, 0x38, 0x8f, 0x95, 0x26, 0x73, 0x95, + 0x0a, 0xa2, 0xd0, 0xe4, 0xba, 0x00, 0x53, 0x75, 0xac, 0x60, 0x5d, 0xc8, 0x25, 0xde, + 0x4d, 0xd8, 0x93, 0x8b, 0x94, 0x7f, 0xf7, 0x19, 0x4c, 0xfe, 0x7c, 0x1d, 0x79, 0xa1, + 0x27, 0x15, 0x5d, 0x11, 0xcb, 0xe3, 0x43, 0xf3, 0x2f, 0xd1, 0x0c, 0x7d, 0xae, 0x39, + 0x1f, 0x00, 0xb4, 0x4f, 0xbe, 0x30, 0x1c, 0x63, 0xfd, 0x4b, 0xf1, 0xc0, 0xdf, 0xb6, + 0xc9, 0xec, 0xb4, 0xc3, 0xf3, 0xfe, 0xf5, 0x40, 0xb6, 0x7e, 0xb9, 0x23, 0x13, 0x71, + 0x9c, 0x5a, 0x30, 0x7a, 0xd3, 0x95, 0x6b, 0xb9, 0x4e, 0x29, 0x86, 0x85, 0x2a, 0x64, + 0x5a, 0x95, 0xd6, 0xdc, 0x75, 0xaa, 0x27, 0x4c, 0xcf, 0xd2, 0x71, 0xd0, 0xea, 0xe2, + 0x65, 0x81, 0xf5, 0xf5, 0x5d, 0x64, 0x74, 0xaa, 0xad, 0x37, 0x4c, 0x86, 0x45, 0x05, + 0xe6, 0x92, 0x37, 0xf6, 0x66, 0x99, 0xee, 0x39, 0xe9, 0xfc, 0xf5, 0xb1, 0xb7, 0x03, + 0x35, 0x1e, 0x71, 0xf6, 0x3b, 0x02, 0x33, 0x40, 0x82, 0xee, 0xbe, 0xd8, 0x68, 0xb5, + 0x61, 0x2a, 0x33, 0x95, 0x78, 0x5a, 0x33, 0x2a, 0x52, 0x43, 0xe4, 0x98, 0x6e, 0x1f, + 0xf5, 0xb4, 0x2d, 0x06, 0x69, 0xc1, 0x5c, 0x45, 0xff, 0x81, 0xe2, 0x2e, 0xea, 0xe4, + 0xde, 0x7d, 0x9a, 0x4f, 0x57, 0x24, 0xc8, 0x96, 0x03, 0x94, 0x92, 0x5b, 0xa1, 0xa1, + 0x90, 0x0f, 0xa2, 0xb5, 0x59, 0x3d, 0x55, 0x45, 0x5e, 0x0b, 0xe0, 0x31, 0x8c, 0x80, + 0x23, 0x81, 0xec, 0x9c, 0x0a, 0x83, 0xc2, 0xe5, 0xf9, 0x33, 0x9f, 0x02, 0x9c, 0x44, + 0x24, 0x72, 0x8f, 0x91, 0x9d, 0x18, 0x4f, 0x36, 0x16, 0x50, 0xba, 0x65, 0xd6, 0x98, + 0xa8, 0xd1, 0x67, 0xbe, 0xd9, 0xdd, 0x01, 0xfa, 0x70, 0x74, 0xe4, 0x6a, 0xf6, 0x57, + 0x16, 0xdd, 0xd9, 0x7e, 0x7b, 0xb6, 0x00, 0x13, 0x05, 0x96, 0x8c, 0xd5, 0xb4, 0x87, + 0x0d, 0xf2, 0x00, 0x42, 0xe7, 0x69, 0xe0, 0x2d, 0xf1, 0x8b, 0x9f, 0xde, 0x9f, 0xda, + 0xa7, 0x6b, 0x00, 0xca, 0x26, 0x45, 0x9d, 0x54, 0x37, 0x19, 0x19, 0x72, 0xd7, 0x08, + 0xde, 0xda, 0xbf, 0x1d, 0x61, 0x7f, 0x73, 0x3a, 0x60, 0xeb, 0xfe, 0xc6, 0xac, 0xf0, + 0x0b, 0xb1, 0xdf, 0xbf, 0x11, 0x2d, 0x3a, 0xaa, 0xc9, 0xfb, 0xd2, 0x30, 0xcc, 0xaa, + 0x9c, 0xf3, 0x58, 0x45, 0x93, 0x54, 0xac, 0x5b, 0x29, 0xbd, 0xb7, 0x3a, 0x45, 0x27, + 0x1b, 0x1f, 0x9e, 0xd0, 0x0e, 0x3e, 0x20, 0xb1, 0x2f, 0xed, 0x5c, 0xd5, 0x6a, 0xbb, + 0xb0, 0xb9, 0x4a, 0x9e, 0xee, 0x5f, 0xf8, 0xf9, 0x36, 0x1d, 0xfd, 0x6c, 0x94, 0x08, + 0x5d, 0x28, 0x98, 0xe5, 0x46, 0xeb, 0x92, 0xe6, 0xdb, 0xe9, 0xf0, 0x2e, 0xb5, 0xbf, + 0x7d, 0x12, 0x67, 0x5d, 0x3c, 0x6a, 0xc7, 0x18, 0x4b, 0x26, 0x01, 0xe4, 0xf4, 0x05, + 0x37, 0x3a, 0x4f, 0x1c, 0x5d, 0xf7, 0x6b, 0x3c, 0xb5, 0x29, 0x99, 0xd8, 0x0f, 0x59, + 0xb3, 0x94, 0xbc, 0xed, 0x9f, 0x66, 0xbc, 0xf7, 0xdc, 0x37, 0xc2, 0xb4, 0xc6, 0xf7, + 0x74, 0x5b, 0xc6, 0xf0, 0x37, 0x74, 0xfa, 0xc6, 0x24, 0x5d, 0x7c, 0x63, 0x6d, 0xfc, + 0x5f, 0x76, 0x58, 0xb2, 0xd2, 0xfd, 0x84, 0xac, 0xa9, 0xe0, 0xef, 0xcd, 0xe0, 0x09, + 0x3e, 0x62, 0x29, 0x38, 0xb7, 0x5d, 0xae, 0x66, 0xcf, 0x63, 0xf6, 0xd2, 0x35, 0x17, + 0x2e, 0x5a, 0x0b, 0xbe, 0xcd, 0x15, 0x56, 0x6c, 0x61, 0xfe, 0x5a, 0x58, 0x94, 0x7c, + 0x18, 0xb9, 0xb5, 0xa1, 0x21, 0x11, 0x25, 0x94, 0x3b, 0x09, 0x32, 0x24, 0x96, 0x7b, + 0x7e, 0x44, 0x16, 0x70, 0x64, 0xc9, + ], + ock: [ + 0xbc, 0x1b, 0xa7, 0xae, 0x73, 0xe7, 0x39, 0x7a, 0x64, 0xe0, 0xbd, 0x98, 0x63, 0xf1, + 0x33, 0x95, 0xdc, 0x0b, 0x15, 0xd4, 0x4e, 0x86, 0x70, 0xf1, 0x85, 0x5b, 0x68, 0xc2, + 0x9f, 0x97, 0x9a, 0xd2, + ], + op: [ + 0xcc, 0x18, 0xe4, 0xb6, 0x5f, 0x89, 0x34, 0x06, 0x31, 0x5d, 0xb7, 0x1f, 0xac, 0x06, + 0x5d, 0x71, 0xd0, 0xea, 0xba, 0x7c, 0xf3, 0xc2, 0xba, 0x94, 0x77, 0x12, 0x32, 0x75, + 0x43, 0x4b, 0x1e, 0xb0, 0xaa, 0x84, 0x16, 0x79, 0xd4, 0xd2, 0x40, 0xb0, 0xab, 0xc4, + 0xa5, 0xd8, 0x9a, 0xa8, 0xd6, 0xb3, 0xb0, 0x86, 0x92, 0x23, 0xed, 0x76, 0x3b, 0x67, + 0x6a, 0x72, 0xcb, 0x74, 0xfb, 0x18, 0xd1, 0x17, + ], + c_out: [ + 0xe2, 0x76, 0x3c, 0x2c, 0xd3, 0x04, 0x29, 0x45, 0x25, 0xf6, 0x6d, 0x17, 0xcd, 0xb4, + 0x2a, 0x6d, 0xaf, 0xd7, 0x47, 0x38, 0x37, 0x71, 0x52, 0x35, 0x62, 0xb2, 0x71, 0xbb, + 0xf5, 0xb2, 0x88, 0x41, 0xb5, 0xca, 0x65, 0xfd, 0xd3, 0x42, 0xee, 0x80, 0x2f, 0xee, + 0x12, 0x12, 0x47, 0x22, 0xcf, 0xf5, 0xe1, 0x99, 0xd6, 0xd9, 0x5c, 0x2f, 0x88, 0xc4, + 0xe2, 0x31, 0x31, 0xf4, 0xe7, 0x6b, 0xa7, 0x6b, 0x9d, 0x64, 0x66, 0x78, 0xd8, 0x53, + 0xd1, 0xdc, 0xaf, 0x81, 0xb8, 0x0e, 0x2e, 0xfd, 0xf0, 0x60, + ], + note_type: Some([ + 0x64, 0xd0, 0x87, 0x40, 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x4f, 0xea, 0x9a, 0x23, + 0xc3, 0x93, 0x11, 0x78, 0x2f, 0x86, 0xca, 0xbf, 0xf9, 0x45, 0x5e, 0x4c, 0xf6, 0x99, + 0xe5, 0xf5, 0xd4, 0xbc, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0xb4, 0x9e, 0x3c, 0x5b, 0xb9, 0x9e, 0x47, 0xc5, 0x3d, 0x6e, 0x5c, 0x34, 0x7c, 0x99, + 0x8f, 0x30, 0x2d, 0x3f, 0xf4, 0x75, 0x23, 0xe7, 0xc3, 0xd7, 0xb6, 0x4c, 0x82, 0x98, + 0xdc, 0x7b, 0x10, 0xe9, 0x54, 0xdf, 0x06, 0x00, 0x0b, 0xc0, 0xcc, 0x30, 0xec, 0xf6, + 0x75, 0x5d, 0x92, 0x7e, 0xee, 0xce, 0xe6, 0xec, 0x9e, 0x8e, 0x0c, 0xba, 0xa3, 0x1b, + 0x71, 0xe0, 0xa4, 0x33, 0x4a, 0xd6, 0x42, 0x1b, + ], + ovk: [ + 0x97, 0x9f, 0x06, 0x58, 0x66, 0x73, 0xbc, 0x6f, 0xf1, 0xc5, 0xd3, 0xb3, 0x20, 0xf3, + 0x49, 0xa5, 0xb3, 0xa8, 0xb3, 0x55, 0x59, 0x22, 0x96, 0xaa, 0xf6, 0x1c, 0x5b, 0x72, + 0x52, 0xf7, 0x3e, 0xc0, + ], + default_d: [ + 0x8d, 0xb1, 0x31, 0xa6, 0x5b, 0xa6, 0xca, 0x91, 0xc9, 0xe9, 0x7b, + ], + default_pk_d: [ + 0x6f, 0xce, 0x26, 0xab, 0xe6, 0xc0, 0xb6, 0x84, 0x37, 0x36, 0x96, 0x46, 0xee, 0xe1, + 0xe9, 0xdc, 0xa5, 0x1a, 0x42, 0x58, 0xf3, 0xae, 0x72, 0x23, 0x87, 0xf6, 0xd0, 0xdf, + 0xf4, 0x1a, 0x1f, 0x88, + ], + v: 5531329397987978327, + rseed: [ + 0x1f, 0xbd, 0x83, 0xd5, 0x4a, 0xaf, 0x44, 0x1e, 0x31, 0x9e, 0xa4, 0x7a, 0x86, 0x2a, + 0xd0, 0x29, 0x3c, 0xed, 0xf5, 0xdd, 0x9e, 0xda, 0xde, 0xee, 0x33, 0xcb, 0x52, 0x2c, + 0xd0, 0x11, 0x8b, 0xbd, + ], + memo: [ + 0xff, 0x81, 0x1a, 0xce, 0x9a, 0x23, 0xbd, 0xa3, 0x9a, 0xba, 0x72, 0xf1, 0x56, 0x6f, + 0xc1, 0x68, 0x84, 0x97, 0xd2, 0xa7, 0x92, 0x8c, 0x36, 0x70, 0x15, 0x25, 0x67, 0x8b, + 0xc9, 0x72, 0x14, 0xb3, 0x1b, 0x37, 0xba, 0xb4, 0x6b, 0x88, 0xf2, 0x7f, 0x04, 0x48, + 0xde, 0xcb, 0x31, 0x62, 0x2d, 0x0f, 0x0f, 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, 0x03, + 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, 0x72, 0x35, + 0x04, 0xed, 0xb2, 0x33, 0x72, 0x30, 0xda, 0xd2, 0xac, 0xc0, 0xd8, 0xbb, 0x68, 0xbc, + 0x83, 0x7a, 0x2f, 0xf9, 0x30, 0xbf, 0xf0, 0x6f, 0xde, 0x74, 0xeb, 0x90, 0xaa, 0xe4, + 0xf6, 0x0d, 0xbb, 0x6e, 0xb8, 0x27, 0xea, 0x99, 0x88, 0x4a, 0xcd, 0x62, 0x85, 0xa9, + 0x88, 0x92, 0x80, 0x2c, 0xf5, 0x9d, 0x5d, 0x60, 0xd0, 0x16, 0x63, 0x38, 0x7b, 0x3e, + 0xd2, 0x72, 0x3b, 0xd6, 0x48, 0x9e, 0x9c, 0x2c, 0x10, 0x6d, 0x4a, 0xa2, 0xde, 0x23, + 0xce, 0xd1, 0x6c, 0x72, 0x04, 0x29, 0xc7, 0x75, 0x3a, 0x77, 0x38, 0xec, 0x7d, 0x9d, + 0xb8, 0x62, 0x42, 0x29, 0xed, 0xd2, 0x17, 0xb8, 0x0d, 0x74, 0x87, 0x5a, 0x14, 0xca, + 0xe4, 0x86, 0x3f, 0x13, 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, 0x28, 0x07, 0x1a, + 0x38, 0xec, 0x61, 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, 0xb2, 0xa4, 0x6b, 0x95, + 0x87, 0x66, 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, 0xd8, 0xd9, 0xd5, 0x69, 0x8f, + 0x83, 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, 0xe4, 0x2f, 0x4a, 0xc0, 0x71, 0x32, + 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, 0x0a, 0xed, 0xd7, 0x3b, 0xc1, 0xa2, 0x35, + 0x47, 0x23, 0xb3, 0xb8, 0x19, 0xd0, 0x63, 0x7a, 0x6f, 0xa4, 0x66, 0x39, 0x46, 0xa3, + 0x0a, 0xc5, 0xaf, 0xdd, 0x30, 0xce, 0x83, 0x0f, 0x67, 0x91, 0xb4, 0x57, 0x52, 0x70, + 0xa1, 0x72, 0x0f, 0x91, 0x86, 0x6e, 0x2b, 0x86, 0xf4, 0x78, 0x88, 0x94, 0xc8, 0xda, + 0x62, 0xd8, 0xb9, 0x1f, 0xaf, 0x52, 0x0e, 0x3b, 0xed, 0xbc, 0x12, 0x06, 0xa5, 0xa5, + 0xe6, 0xef, 0xd3, 0xdf, 0xde, 0x08, 0x43, 0xc3, 0xb0, 0x67, 0x57, 0x64, 0x3f, 0xc0, + 0x06, 0x00, 0x88, 0x38, 0xca, 0x47, 0x30, 0x87, 0xf8, 0x97, 0x79, 0x18, 0xcc, 0x1b, + 0x81, 0xc9, 0xe6, 0x8e, 0x3b, 0x88, 0x8f, 0xe6, 0xf7, 0xc6, 0x30, 0xf1, 0xbc, 0x7a, + 0xe1, 0x88, 0xf5, 0x12, 0x84, 0x20, 0x41, 0xca, 0xda, 0x1e, 0x05, 0xf8, 0x66, 0xd2, + 0x56, 0x2d, 0xbe, 0x09, 0xc4, 0xb4, 0x30, 0x68, 0xf7, 0x54, 0xda, 0xd3, 0x4d, 0xf0, + 0xfc, 0xfc, 0x18, 0x1f, 0x31, 0x80, 0x1a, 0x79, 0x92, 0xd2, 0xf1, 0x6b, 0xe0, 0x21, + 0x1b, 0x4a, 0x22, 0xf6, 0x2a, 0xab, 0x64, 0x70, 0x1b, 0xf4, 0xa4, 0xe6, 0xd6, 0x66, + 0xfc, 0x30, 0x4a, 0x5c, 0x79, 0xc6, 0x09, 0xac, 0xc4, 0x3b, 0x00, 0xb4, 0x86, 0x48, + 0x93, 0xd3, 0x7d, 0x50, 0x07, 0xf0, 0xc3, 0x29, 0xa4, 0x75, 0x50, 0x52, 0x57, 0x75, + 0x70, 0xdd, 0x38, 0xfa, 0xc0, 0x43, 0xcd, 0x91, 0xc1, 0x2e, 0xe3, 0x4e, 0x9c, 0xfa, + 0xe3, 0x92, 0xa7, 0x8b, 0xda, 0xbd, 0x4e, 0xe3, 0x1d, 0xc0, 0xde, 0xb0, 0x2f, 0xe7, + 0xb1, 0xd8, 0xb0, 0x17, 0x8a, 0xc9, 0x51, 0x31, 0x05, 0xfc, 0xc7, 0xe3, 0x0b, 0xa8, + 0xe0, 0x16, 0xaa, 0x36, 0xa6, 0xb5, 0xdf, 0x5e, 0x5a, 0x19, 0x09, 0xf6, 0x3a, 0xba, + 0x09, 0x5d, 0x98, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x50, 0xaf, 0x90, 0x31, 0xf4, 0xe0, 0x4b, 0x79, 0xd7, 0xda, 0xb5, 0xe8, 0x5b, 0x51, + 0xee, 0x9b, 0xea, 0x56, 0xf7, 0xc5, 0x6b, 0x52, 0x22, 0x73, 0xd2, 0x30, 0xaa, 0x51, + 0x2b, 0xa9, 0xe7, 0x06, + ], + rho: [ + 0x09, 0x1d, 0x83, 0x73, 0x3a, 0x9f, 0xfb, 0x18, 0xc1, 0x7a, 0xd1, 0x93, 0x8d, 0xd2, + 0x67, 0x93, 0xc3, 0xfe, 0xfa, 0xda, 0xee, 0xa8, 0xe2, 0x3c, 0x44, 0xd5, 0xe0, 0x18, + 0x4b, 0xc8, 0x45, 0x10, + ], + cmx: [ + 0x76, 0xf1, 0xbd, 0x50, 0xf9, 0xb9, 0x06, 0xcb, 0x9f, 0xf2, 0xdd, 0x91, 0x8a, 0x36, + 0x7e, 0x5f, 0xb1, 0xa2, 0xef, 0x39, 0xf1, 0x4f, 0x6c, 0xe9, 0x4f, 0xf9, 0xf0, 0x91, + 0x55, 0xf8, 0xc2, 0x11, + ], + esk: [ + 0x2f, 0x98, 0x2d, 0xec, 0xa7, 0x60, 0x51, 0x41, 0xd9, 0xc9, 0xa1, 0xe6, 0xfb, 0x57, + 0xe2, 0xb8, 0x01, 0xb4, 0x49, 0x6f, 0xbd, 0xd4, 0xc0, 0xa8, 0xb9, 0x5f, 0xc8, 0x7e, + 0xa7, 0x37, 0x3e, 0x2f, + ], + ephemeral_key: [ + 0xda, 0x72, 0x84, 0xa0, 0xe0, 0xde, 0x52, 0x09, 0x3c, 0xc2, 0xe1, 0x9c, 0x0a, 0xf1, + 0x93, 0xbd, 0xb4, 0x2c, 0x80, 0xc9, 0xc7, 0xf9, 0xf2, 0x36, 0x00, 0xe6, 0x08, 0x01, + 0x72, 0xc5, 0xf5, 0x39, + ], + shared_secret: [ + 0x9b, 0xcf, 0xb9, 0x6f, 0x4c, 0xf1, 0x83, 0xc1, 0x7f, 0xb1, 0x99, 0xda, 0x16, 0x5f, + 0xbf, 0x8a, 0x47, 0x47, 0x7e, 0x00, 0x36, 0x6d, 0x1c, 0xb7, 0x3b, 0x32, 0xec, 0x0e, + 0x3a, 0xc1, 0x98, 0x0f, + ], + k_enc: [ + 0x21, 0xe0, 0x97, 0x87, 0x0a, 0xee, 0xc0, 0x19, 0x76, 0x86, 0xee, 0x37, 0x22, 0x78, + 0xfe, 0x4a, 0xa2, 0x23, 0x8d, 0x87, 0x65, 0x32, 0x63, 0x84, 0x8a, 0x2f, 0xf5, 0x27, + 0x9f, 0x2b, 0x1d, 0x9b, + ], + p_enc: [ + 0x03, 0x8d, 0xb1, 0x31, 0xa6, 0x5b, 0xa6, 0xca, 0x91, 0xc9, 0xe9, 0x7b, 0x57, 0xac, + 0xbf, 0xfe, 0xc7, 0x3a, 0xc3, 0x4c, 0x1f, 0xbd, 0x83, 0xd5, 0x4a, 0xaf, 0x44, 0x1e, + 0x31, 0x9e, 0xa4, 0x7a, 0x86, 0x2a, 0xd0, 0x29, 0x3c, 0xed, 0xf5, 0xdd, 0x9e, 0xda, + 0xde, 0xee, 0x33, 0xcb, 0x52, 0x2c, 0xd0, 0x11, 0x8b, 0xbd, 0xc3, 0xcc, 0x4f, 0x43, + 0xfa, 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0x21, 0xdd, 0x04, 0xe3, 0x7a, 0x83, 0xec, + 0xe6, 0x8c, 0xa7, 0xa2, 0xfa, 0x6c, 0x8f, 0x9e, 0x34, 0xa6, 0x29, 0x03, 0x35, 0xaa, + 0xff, 0x81, 0x1a, 0xce, 0x9a, 0x23, 0xbd, 0xa3, 0x9a, 0xba, 0x72, 0xf1, 0x56, 0x6f, + 0xc1, 0x68, 0x84, 0x97, 0xd2, 0xa7, 0x92, 0x8c, 0x36, 0x70, 0x15, 0x25, 0x67, 0x8b, + 0xc9, 0x72, 0x14, 0xb3, 0x1b, 0x37, 0xba, 0xb4, 0x6b, 0x88, 0xf2, 0x7f, 0x04, 0x48, + 0xde, 0xcb, 0x31, 0x62, 0x2d, 0x0f, 0x0f, 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, 0x03, + 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, 0x72, 0x35, + 0x04, 0xed, 0xb2, 0x33, 0x72, 0x30, 0xda, 0xd2, 0xac, 0xc0, 0xd8, 0xbb, 0x68, 0xbc, + 0x83, 0x7a, 0x2f, 0xf9, 0x30, 0xbf, 0xf0, 0x6f, 0xde, 0x74, 0xeb, 0x90, 0xaa, 0xe4, + 0xf6, 0x0d, 0xbb, 0x6e, 0xb8, 0x27, 0xea, 0x99, 0x88, 0x4a, 0xcd, 0x62, 0x85, 0xa9, + 0x88, 0x92, 0x80, 0x2c, 0xf5, 0x9d, 0x5d, 0x60, 0xd0, 0x16, 0x63, 0x38, 0x7b, 0x3e, + 0xd2, 0x72, 0x3b, 0xd6, 0x48, 0x9e, 0x9c, 0x2c, 0x10, 0x6d, 0x4a, 0xa2, 0xde, 0x23, + 0xce, 0xd1, 0x6c, 0x72, 0x04, 0x29, 0xc7, 0x75, 0x3a, 0x77, 0x38, 0xec, 0x7d, 0x9d, + 0xb8, 0x62, 0x42, 0x29, 0xed, 0xd2, 0x17, 0xb8, 0x0d, 0x74, 0x87, 0x5a, 0x14, 0xca, + 0xe4, 0x86, 0x3f, 0x13, 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, 0x28, 0x07, 0x1a, + 0x38, 0xec, 0x61, 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, 0xb2, 0xa4, 0x6b, 0x95, + 0x87, 0x66, 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, 0xd8, 0xd9, 0xd5, 0x69, 0x8f, + 0x83, 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, 0xe4, 0x2f, 0x4a, 0xc0, 0x71, 0x32, + 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, 0x0a, 0xed, 0xd7, 0x3b, 0xc1, 0xa2, 0x35, + 0x47, 0x23, 0xb3, 0xb8, 0x19, 0xd0, 0x63, 0x7a, 0x6f, 0xa4, 0x66, 0x39, 0x46, 0xa3, + 0x0a, 0xc5, 0xaf, 0xdd, 0x30, 0xce, 0x83, 0x0f, 0x67, 0x91, 0xb4, 0x57, 0x52, 0x70, + 0xa1, 0x72, 0x0f, 0x91, 0x86, 0x6e, 0x2b, 0x86, 0xf4, 0x78, 0x88, 0x94, 0xc8, 0xda, + 0x62, 0xd8, 0xb9, 0x1f, 0xaf, 0x52, 0x0e, 0x3b, 0xed, 0xbc, 0x12, 0x06, 0xa5, 0xa5, + 0xe6, 0xef, 0xd3, 0xdf, 0xde, 0x08, 0x43, 0xc3, 0xb0, 0x67, 0x57, 0x64, 0x3f, 0xc0, + 0x06, 0x00, 0x88, 0x38, 0xca, 0x47, 0x30, 0x87, 0xf8, 0x97, 0x79, 0x18, 0xcc, 0x1b, + 0x81, 0xc9, 0xe6, 0x8e, 0x3b, 0x88, 0x8f, 0xe6, 0xf7, 0xc6, 0x30, 0xf1, 0xbc, 0x7a, + 0xe1, 0x88, 0xf5, 0x12, 0x84, 0x20, 0x41, 0xca, 0xda, 0x1e, 0x05, 0xf8, 0x66, 0xd2, + 0x56, 0x2d, 0xbe, 0x09, 0xc4, 0xb4, 0x30, 0x68, 0xf7, 0x54, 0xda, 0xd3, 0x4d, 0xf0, + 0xfc, 0xfc, 0x18, 0x1f, 0x31, 0x80, 0x1a, 0x79, 0x92, 0xd2, 0xf1, 0x6b, 0xe0, 0x21, + 0x1b, 0x4a, 0x22, 0xf6, 0x2a, 0xab, 0x64, 0x70, 0x1b, 0xf4, 0xa4, 0xe6, 0xd6, 0x66, + 0xfc, 0x30, 0x4a, 0x5c, 0x79, 0xc6, 0x09, 0xac, 0xc4, 0x3b, 0x00, 0xb4, 0x86, 0x48, + 0x93, 0xd3, 0x7d, 0x50, 0x07, 0xf0, 0xc3, 0x29, 0xa4, 0x75, 0x50, 0x52, 0x57, 0x75, + 0x70, 0xdd, 0x38, 0xfa, 0xc0, 0x43, 0xcd, 0x91, 0xc1, 0x2e, 0xe3, 0x4e, 0x9c, 0xfa, + 0xe3, 0x92, 0xa7, 0x8b, 0xda, 0xbd, 0x4e, 0xe3, 0x1d, 0xc0, 0xde, 0xb0, 0x2f, 0xe7, + 0xb1, 0xd8, 0xb0, 0x17, 0x8a, 0xc9, 0x51, 0x31, 0x05, 0xfc, 0xc7, 0xe3, 0x0b, 0xa8, + 0xe0, 0x16, 0xaa, 0x36, 0xa6, 0xb5, 0xdf, 0x5e, 0x5a, 0x19, 0x09, 0xf6, 0x3a, 0xba, + 0x09, 0x5d, 0x98, 0x77, + ], + c_enc: [ + 0x13, 0xd7, 0xdf, 0xcd, 0x1d, 0x75, 0x4d, 0xcd, 0x16, 0x52, 0x32, 0x83, 0x8f, 0x14, + 0xdd, 0x80, 0x5e, 0x12, 0xcc, 0x7e, 0x75, 0x15, 0x43, 0xd2, 0xa6, 0x8e, 0x23, 0x7a, + 0x92, 0x3b, 0xce, 0xeb, 0xa3, 0x5a, 0x62, 0x43, 0xc6, 0xa4, 0xc5, 0xf0, 0xd2, 0xa4, + 0xc3, 0x86, 0x07, 0xa6, 0xf1, 0x1b, 0x17, 0xfd, 0xd6, 0xc6, 0x92, 0x66, 0xf2, 0xc9, + 0x6a, 0xdc, 0x44, 0x6f, 0x2e, 0x2d, 0x07, 0x3e, 0xe9, 0xea, 0xe2, 0x9a, 0x37, 0xef, + 0x5d, 0x03, 0xf6, 0x78, 0xf5, 0x56, 0x29, 0x45, 0xb2, 0x08, 0x27, 0x76, 0xce, 0x9f, + 0x39, 0x08, 0x87, 0x3a, 0x99, 0xa6, 0xa2, 0x8b, 0xae, 0xdc, 0x7f, 0x54, 0x89, 0xce, + 0x4b, 0x30, 0xd8, 0x43, 0x66, 0xc5, 0x46, 0xb4, 0x36, 0x67, 0x91, 0x44, 0xf9, 0x27, + 0xf7, 0x1c, 0x65, 0x09, 0x69, 0xda, 0x22, 0x42, 0x28, 0x5a, 0x86, 0x27, 0x96, 0x54, + 0x89, 0xb7, 0x0b, 0x35, 0x6c, 0xf7, 0x4e, 0x07, 0x8a, 0xa2, 0x7d, 0xa8, 0xf9, 0x2f, + 0xb3, 0x09, 0x57, 0x12, 0x62, 0xf2, 0xd4, 0xc3, 0x36, 0xf7, 0x12, 0x15, 0x9b, 0x3e, + 0x9b, 0x43, 0x24, 0x38, 0x5b, 0xb3, 0x26, 0x2a, 0xc5, 0xf3, 0x13, 0x57, 0xaf, 0x9e, + 0x1a, 0xaa, 0x75, 0xd0, 0x1c, 0x06, 0x31, 0xbf, 0xdd, 0x34, 0xc5, 0x9b, 0x27, 0xd5, + 0x3b, 0xeb, 0xf1, 0xaa, 0x54, 0xe9, 0xc4, 0xaa, 0x98, 0x0f, 0x24, 0x7b, 0xf4, 0x22, + 0xa0, 0xe6, 0xdb, 0xf5, 0x54, 0x6e, 0xdc, 0x10, 0x0f, 0xce, 0x6c, 0xce, 0xc8, 0x32, + 0x7e, 0xb4, 0x8a, 0x9a, 0x39, 0xe4, 0xc2, 0xa9, 0x12, 0xb2, 0x98, 0x85, 0xe0, 0xc3, + 0xe7, 0x33, 0x55, 0x58, 0xbd, 0x85, 0x84, 0x38, 0xd0, 0x35, 0xd2, 0xf2, 0xbe, 0x1d, + 0x35, 0x66, 0xe4, 0x22, 0xfe, 0x37, 0xc0, 0xcb, 0x2e, 0x05, 0x8d, 0xad, 0x8c, 0xc6, + 0x45, 0x62, 0xa5, 0x50, 0x1b, 0x54, 0xa4, 0x4f, 0x9a, 0x77, 0x77, 0xc6, 0xd2, 0x77, + 0x04, 0xa4, 0xce, 0xad, 0x26, 0xa1, 0xc2, 0x56, 0x01, 0x8d, 0xc1, 0xbb, 0xfa, 0x58, + 0x84, 0xa0, 0x6c, 0xc7, 0x25, 0x23, 0xaf, 0xfb, 0x43, 0xf5, 0xc5, 0xbc, 0x2f, 0x1d, + 0x36, 0x04, 0x0f, 0x85, 0xf7, 0xe8, 0xc0, 0x62, 0xc1, 0xf2, 0x26, 0x50, 0x9d, 0x20, + 0xf9, 0xa4, 0x88, 0x5e, 0x15, 0x70, 0x4f, 0x73, 0x01, 0xdf, 0x60, 0x3d, 0xa1, 0xfc, + 0x5b, 0xca, 0x84, 0xf8, 0x55, 0xc1, 0x17, 0xcb, 0x30, 0x55, 0xc5, 0x70, 0x83, 0x45, + 0x7e, 0x1d, 0x14, 0x85, 0x7c, 0x2b, 0xf9, 0x41, 0xe8, 0x20, 0x73, 0x5c, 0x58, 0x8a, + 0xae, 0x6f, 0x66, 0x45, 0xdc, 0x3f, 0xbd, 0x30, 0x65, 0xab, 0xa1, 0x7f, 0xd2, 0x48, + 0x2a, 0x1b, 0x37, 0xb2, 0xf3, 0x88, 0x07, 0x5e, 0x46, 0xbb, 0x9d, 0x37, 0x27, 0xcc, + 0x73, 0xdb, 0xae, 0x0e, 0x96, 0xa8, 0x44, 0x5f, 0xda, 0x8f, 0x87, 0x64, 0xf9, 0x68, + 0x0b, 0xf6, 0xc5, 0x91, 0xa8, 0x48, 0x10, 0xfa, 0x0c, 0x1b, 0x5a, 0x2f, 0x2a, 0xa9, + 0xad, 0xbb, 0x88, 0x64, 0x22, 0x31, 0x72, 0x1e, 0xd6, 0xea, 0x12, 0x16, 0xab, 0x9b, + 0xfa, 0x0e, 0x12, 0x4c, 0xe4, 0x74, 0x94, 0x44, 0x53, 0x4d, 0x68, 0x70, 0x19, 0x74, + 0x60, 0xf7, 0x49, 0xef, 0xb0, 0x28, 0x8f, 0x96, 0x28, 0x3f, 0xc9, 0x37, 0xef, 0xbb, + 0x14, 0x59, 0xaa, 0x73, 0xc2, 0x7b, 0x6b, 0x2b, 0x5c, 0x57, 0x7d, 0x46, 0x60, 0xf9, + 0x8e, 0x81, 0x8c, 0xaa, 0xad, 0xbe, 0x45, 0x4e, 0xcd, 0x16, 0xc1, 0xd8, 0xa9, 0x9b, + 0x77, 0x97, 0x8e, 0x93, 0xd6, 0x9d, 0xcb, 0x8b, 0xf0, 0xe8, 0x4a, 0x0a, 0x91, 0x3f, + 0x55, 0xcc, 0x16, 0x50, 0xc2, 0xb9, 0x2d, 0x4c, 0x9d, 0xcd, 0xb1, 0x2e, 0xe2, 0x36, + 0x7e, 0xd9, 0x79, 0xb9, 0x53, 0x5f, 0xe1, 0x5c, 0x87, 0xd1, 0x7f, 0x37, 0xa3, 0x24, + 0x84, 0x7f, 0x16, 0x45, 0x39, 0x75, 0x7d, 0x83, 0x00, 0x87, 0xf6, 0x39, 0xeb, 0x6c, + 0x3e, 0xfb, 0x8d, 0xa4, 0xff, 0xa5, 0xd7, 0xca, 0x58, 0x34, 0x4d, 0x65, 0x81, 0x76, + 0x64, 0xa7, 0x4e, 0xaf, 0xa1, 0xa4, 0x7f, 0x69, 0xf1, 0xc8, 0x10, 0x6b, 0x6f, 0x5f, + 0x96, 0x4f, 0x4c, 0x73, 0x68, 0xed, 0x11, 0x06, 0x29, 0x54, 0xd2, 0xe8, 0xd3, 0x0c, + 0xcc, 0xac, 0xba, 0xd9, 0xa2, 0xfa, + ], + ock: [ + 0xc7, 0x5b, 0x5b, 0xfa, 0x9f, 0x2e, 0xeb, 0xd9, 0x99, 0x80, 0x78, 0xf1, 0x8f, 0x0e, + 0x9b, 0x79, 0xf1, 0xe2, 0x13, 0xe8, 0x25, 0x61, 0x6f, 0xeb, 0x26, 0x08, 0xe9, 0xc7, + 0x81, 0xb5, 0x00, 0x95, + ], + op: [ + 0x6f, 0xce, 0x26, 0xab, 0xe6, 0xc0, 0xb6, 0x84, 0x37, 0x36, 0x96, 0x46, 0xee, 0xe1, + 0xe9, 0xdc, 0xa5, 0x1a, 0x42, 0x58, 0xf3, 0xae, 0x72, 0x23, 0x87, 0xf6, 0xd0, 0xdf, + 0xf4, 0x1a, 0x1f, 0x88, 0x2f, 0x98, 0x2d, 0xec, 0xa7, 0x60, 0x51, 0x41, 0xd9, 0xc9, + 0xa1, 0xe6, 0xfb, 0x57, 0xe2, 0xb8, 0x01, 0xb4, 0x49, 0x6f, 0xbd, 0xd4, 0xc0, 0xa8, + 0xb9, 0x5f, 0xc8, 0x7e, 0xa7, 0x37, 0x3e, 0x2f, + ], + c_out: [ + 0xca, 0x4d, 0x6e, 0xb3, 0xea, 0x95, 0xc5, 0x5a, 0x91, 0x16, 0x85, 0x66, 0xe6, 0x67, + 0x63, 0xd1, 0x9e, 0x9c, 0x44, 0x33, 0x07, 0x3c, 0x08, 0x9a, 0x7d, 0xb9, 0x5b, 0x93, + 0xc8, 0xc4, 0x55, 0x0e, 0xb0, 0x8e, 0x28, 0xdd, 0xef, 0xba, 0x64, 0xe0, 0x58, 0xac, + 0x68, 0x44, 0xad, 0x77, 0x20, 0x67, 0xa1, 0x7c, 0x32, 0x53, 0xc3, 0x9a, 0x72, 0x4d, + 0xd8, 0x15, 0xf7, 0x29, 0x8c, 0x1d, 0x59, 0x09, 0x1f, 0x1b, 0x38, 0x7a, 0x26, 0x46, + 0xe7, 0xfe, 0x36, 0x3a, 0xde, 0x83, 0x63, 0xa9, 0x2a, 0xde, + ], + note_type: Some([ + 0xc3, 0xcc, 0x4f, 0x43, 0xfa, 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0x21, 0xdd, 0x04, + 0xe3, 0x7a, 0x83, 0xec, 0xe6, 0x8c, 0xa7, 0xa2, 0xfa, 0x6c, 0x8f, 0x9e, 0x34, 0xa6, + 0x29, 0x03, 0x35, 0xaa, + ]), + }, + TestVector { + incoming_viewing_key: [ + 0xa6, 0x68, 0x13, 0x52, 0xa3, 0x52, 0x26, 0x91, 0x10, 0x0f, 0x53, 0xfc, 0x34, 0xab, + 0x73, 0x32, 0x8a, 0xf1, 0xb9, 0xf3, 0xa4, 0xa0, 0x6d, 0xbd, 0x3a, 0x14, 0x99, 0x67, + 0x09, 0xe6, 0xf2, 0x84, 0x31, 0xee, 0x72, 0xf2, 0x69, 0xae, 0xd7, 0x5d, 0x36, 0x34, + 0x89, 0x36, 0x90, 0x5e, 0xbb, 0x91, 0x80, 0x7d, 0x74, 0xd5, 0x0c, 0xb2, 0x7f, 0xcd, + 0x8b, 0x4f, 0xb6, 0xf4, 0x48, 0xc3, 0x62, 0x03, + ], + ovk: [ + 0x78, 0xf1, 0x45, 0xea, 0x29, 0xd2, 0x71, 0xb9, 0x40, 0xc6, 0x99, 0x41, 0xe4, 0xc3, + 0xfd, 0x2d, 0x71, 0xf3, 0xb1, 0x90, 0x69, 0x0e, 0xe1, 0x6f, 0x5d, 0x14, 0xac, 0x22, + 0x24, 0xe6, 0xfc, 0x89, + ], + default_d: [ + 0x11, 0x6e, 0x79, 0x94, 0x55, 0xae, 0xa1, 0x91, 0x8f, 0xbf, 0xd4, + ], + default_pk_d: [ + 0x3e, 0x5e, 0x46, 0xeb, 0x0f, 0xe8, 0xe6, 0xf0, 0xcf, 0x6a, 0xab, 0x2b, 0x41, 0xfb, + 0xcf, 0xfb, 0xb2, 0x98, 0xf8, 0xd5, 0x34, 0xc8, 0xd9, 0xd3, 0x11, 0xe4, 0xc6, 0x10, + 0x3a, 0x56, 0x6a, 0xaa, + ], + v: 15093716717054627455, + rseed: [ + 0x7e, 0x62, 0x25, 0x8d, 0x65, 0xa1, 0x92, 0x15, 0x7c, 0xdf, 0x2e, 0xc3, 0x21, 0x40, + 0x7f, 0x68, 0x2f, 0x5e, 0xec, 0x6a, 0x32, 0x97, 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, + 0x24, 0x57, 0x16, 0xa4, + ], + memo: [ + 0xff, 0x4f, 0x71, 0xfb, 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, 0x9e, 0x42, 0x12, 0xac, + 0x26, 0x53, 0xf6, 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, 0x9a, 0xd1, 0x34, 0xd8, 0x9c, + 0x68, 0x0b, 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, 0x6f, 0xc4, 0xf8, 0x4d, 0x6a, 0x58, + 0x29, 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, 0x05, 0x75, 0x84, 0x92, 0xcd, 0x6a, 0xc4, + 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, 0xb5, 0xe4, 0xcd, 0xaf, 0xbb, 0x3f, 0x36, 0x78, + 0x5f, 0x42, 0x4a, 0xf0, 0x44, 0xda, 0xc5, 0xdb, 0x5f, 0x7d, 0xf8, 0x39, 0xeb, 0x63, + 0xc0, 0xc1, 0x7d, 0x8b, 0x0c, 0x79, 0xdb, 0x86, 0x30, 0x94, 0x20, 0x15, 0xbe, 0x13, + 0xf7, 0x9a, 0xf6, 0xf4, 0x3e, 0x5a, 0xb0, 0x77, 0x81, 0x14, 0x79, 0x8f, 0x44, 0x22, + 0x58, 0xee, 0xdc, 0x43, 0x6f, 0xcc, 0x38, 0x6b, 0x36, 0xb5, 0x7e, 0x19, 0x17, 0xd7, + 0x20, 0x17, 0x73, 0x66, 0xf4, 0x24, 0xb0, 0xa5, 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, + 0x58, 0xc2, 0x0a, 0xa4, 0x1d, 0xc5, 0x02, 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, 0xd8, + 0xe3, 0x27, 0x6b, 0x59, 0xe7, 0xd2, 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, 0x95, 0xbc, + 0xaf, 0x24, 0x7e, 0x36, 0x48, 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, 0x37, 0xfc, 0x6a, + 0xb3, 0xeb, 0xa0, 0x2f, 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, 0xb5, 0x68, 0x3d, 0xb8, + 0xd2, 0x43, 0x19, 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, 0x1c, 0x53, 0xb7, 0x40, 0xf3, + 0x45, 0x43, 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, 0x5c, 0x49, 0xe8, 0xc3, 0x7f, 0x61, + 0x49, 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, 0x4c, 0x79, 0x7d, 0x1c, 0xee, 0x78, 0x99, + 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, 0x34, 0x2f, 0x92, 0x53, 0x1c, 0x1d, 0x59, 0xe1, + 0x79, 0x70, 0xb7, 0x31, 0x74, 0x14, 0x43, 0x8c, 0xd8, 0x0b, 0xd0, 0xf9, 0xa6, 0x7c, + 0x9b, 0x9e, 0x55, 0x2f, 0x01, 0x3c, 0x11, 0x5a, 0x95, 0x4f, 0x35, 0xe0, 0x61, 0x6c, + 0x68, 0xd4, 0x31, 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, 0x33, 0xe5, 0xad, 0x84, + 0x88, 0xbf, 0xd9, 0xc4, 0xbb, 0xbe, 0x8f, 0x59, 0x35, 0xc6, 0xc5, 0xea, 0x04, 0xc3, + 0xad, 0x49, 0xc7, 0x47, 0xa9, 0xe7, 0x23, 0x1b, 0xcd, 0x7d, 0x16, 0x21, 0x5e, 0x6e, + 0x80, 0x73, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, 0x02, 0xf0, 0x47, 0x52, 0x45, + 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, 0x03, 0xa7, 0x6f, 0xb9, 0xce, 0xca, + 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0xc6, 0x91, 0x5c, 0x43, 0x40, 0x50, 0x64, 0xae, + 0x56, 0xbc, 0x89, 0xe6, 0x4d, 0x15, 0x78, 0xe4, 0xd3, 0xa3, 0x4b, 0xb9, 0x55, 0x91, + 0xea, 0xf1, 0xd3, 0xda, 0x02, 0xa4, 0x54, 0x9f, 0xa8, 0x0d, 0xb0, 0xff, 0x7c, 0xb0, + 0x39, 0x93, 0xb6, 0x8a, 0xe1, 0x5a, 0x30, 0xe8, 0x79, 0x49, 0xaa, 0x08, 0x0e, 0x94, + 0xab, 0xde, 0x68, 0x89, 0x8c, 0x33, 0x92, 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, 0xbe, + 0x73, 0x9b, 0x13, 0xd1, 0x4d, 0xf0, 0x3f, 0xf2, 0x76, 0x71, 0x48, 0x9b, 0xe0, 0xb4, + 0xbe, 0xba, 0xaf, 0xa7, 0xd1, 0xe6, 0x39, 0xd5, 0xb3, 0xe9, 0x94, 0xff, 0xb6, 0xb7, + 0xa2, 0x09, 0xf6, 0xad, 0xfe, 0x8d, 0x1e, 0x5c, 0xcf, 0x01, 0x0c, 0x19, 0x16, 0x8a, + 0xeb, 0x18, 0xaa, 0x9d, 0x68, 0x7e, 0x24, 0xad, 0xc0, 0xb1, 0x13, 0x5c, 0x70, 0xc9, + 0x70, 0xe0, 0x90, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + cv_net: [ + 0x72, 0xd8, 0x2a, 0xd6, 0x89, 0xd2, 0x9f, 0x9b, 0x18, 0x9d, 0x5b, 0x44, 0x78, 0x9f, + 0x55, 0xfe, 0x1e, 0x9b, 0xab, 0x78, 0x8f, 0xf8, 0x7e, 0xbe, 0x9f, 0xc8, 0x59, 0x50, + 0x4f, 0xb2, 0x3c, 0x8a, + ], + rho: [ + 0x57, 0x87, 0x18, 0x97, 0x6d, 0xa3, 0xdc, 0xb4, 0x30, 0x32, 0x71, 0x52, 0x20, 0x72, + 0xd0, 0x28, 0x44, 0x22, 0x13, 0x50, 0x86, 0x4e, 0xed, 0x56, 0x3d, 0xab, 0x30, 0x22, + 0x7f, 0x28, 0x4b, 0x2e, + ], + cmx: [ + 0x89, 0xe6, 0xa2, 0xb9, 0x70, 0x84, 0xe3, 0xd3, 0x34, 0x4f, 0xee, 0xb4, 0x64, 0x65, + 0x05, 0x72, 0x51, 0xb1, 0x9d, 0xa0, 0xce, 0xdf, 0x79, 0x71, 0x94, 0xc5, 0x97, 0xf9, + 0xf7, 0x7e, 0xf2, 0x1f, + ], + esk: [ + 0xe4, 0x00, 0x13, 0x04, 0x47, 0xc1, 0xbd, 0x1a, 0x0c, 0x13, 0x02, 0xf5, 0x10, 0xe9, + 0xeb, 0x09, 0xed, 0x76, 0xda, 0xbc, 0xfe, 0x2a, 0x69, 0x1c, 0xc4, 0x69, 0x2d, 0x0c, + 0x1b, 0x30, 0x33, 0x01, + ], + ephemeral_key: [ + 0x27, 0xcb, 0x40, 0x68, 0x0f, 0xb1, 0xd9, 0x19, 0x64, 0x6e, 0x74, 0x20, 0xe6, 0xa8, + 0xb5, 0x20, 0xe1, 0x9a, 0x17, 0x3f, 0x1e, 0x79, 0x4d, 0x2b, 0x49, 0x2b, 0xfa, 0xbb, + 0x83, 0xce, 0x6c, 0xa0, + ], + shared_secret: [ + 0x1c, 0xd0, 0x66, 0x91, 0x6c, 0x19, 0xfa, 0x33, 0x69, 0xaa, 0x3c, 0x6a, 0x53, 0x76, + 0x97, 0xf4, 0xb4, 0x26, 0x44, 0xda, 0x20, 0xca, 0x46, 0x79, 0x93, 0x2b, 0x7c, 0x90, + 0x5f, 0x2d, 0x69, 0x00, + ], + k_enc: [ + 0xce, 0x9d, 0x22, 0x0d, 0x3a, 0xfe, 0xc6, 0x23, 0x21, 0xdd, 0xf1, 0x97, 0xa6, 0x36, + 0xdc, 0xb3, 0x45, 0x58, 0x83, 0xb7, 0x35, 0x82, 0x8c, 0x65, 0xe7, 0x16, 0x6c, 0x15, + 0xd8, 0xcc, 0xfc, 0xf9, + ], + p_enc: [ + 0x03, 0x11, 0x6e, 0x79, 0x94, 0x55, 0xae, 0xa1, 0x91, 0x8f, 0xbf, 0xd4, 0x7f, 0x8e, + 0x6a, 0x5c, 0x62, 0xa7, 0x77, 0xd1, 0x7e, 0x62, 0x25, 0x8d, 0x65, 0xa1, 0x92, 0x15, + 0x7c, 0xdf, 0x2e, 0xc3, 0x21, 0x40, 0x7f, 0x68, 0x2f, 0x5e, 0xec, 0x6a, 0x32, 0x97, + 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, 0x24, 0x57, 0x16, 0xa4, 0x96, 0x86, 0xaa, 0x36, + 0x36, 0xbd, 0x37, 0x5b, 0xd3, 0x13, 0x6b, 0xee, 0x0b, 0xda, 0xab, 0xcf, 0xac, 0x88, + 0x1b, 0xc7, 0x01, 0x81, 0x27, 0x21, 0xe6, 0xfb, 0x75, 0xaa, 0x07, 0x2d, 0x2d, 0x18, + 0xff, 0x4f, 0x71, 0xfb, 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, 0x9e, 0x42, 0x12, 0xac, + 0x26, 0x53, 0xf6, 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, 0x9a, 0xd1, 0x34, 0xd8, 0x9c, + 0x68, 0x0b, 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, 0x6f, 0xc4, 0xf8, 0x4d, 0x6a, 0x58, + 0x29, 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, 0x05, 0x75, 0x84, 0x92, 0xcd, 0x6a, 0xc4, + 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, 0xb5, 0xe4, 0xcd, 0xaf, 0xbb, 0x3f, 0x36, 0x78, + 0x5f, 0x42, 0x4a, 0xf0, 0x44, 0xda, 0xc5, 0xdb, 0x5f, 0x7d, 0xf8, 0x39, 0xeb, 0x63, + 0xc0, 0xc1, 0x7d, 0x8b, 0x0c, 0x79, 0xdb, 0x86, 0x30, 0x94, 0x20, 0x15, 0xbe, 0x13, + 0xf7, 0x9a, 0xf6, 0xf4, 0x3e, 0x5a, 0xb0, 0x77, 0x81, 0x14, 0x79, 0x8f, 0x44, 0x22, + 0x58, 0xee, 0xdc, 0x43, 0x6f, 0xcc, 0x38, 0x6b, 0x36, 0xb5, 0x7e, 0x19, 0x17, 0xd7, + 0x20, 0x17, 0x73, 0x66, 0xf4, 0x24, 0xb0, 0xa5, 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, + 0x58, 0xc2, 0x0a, 0xa4, 0x1d, 0xc5, 0x02, 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, 0xd8, + 0xe3, 0x27, 0x6b, 0x59, 0xe7, 0xd2, 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, 0x95, 0xbc, + 0xaf, 0x24, 0x7e, 0x36, 0x48, 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, 0x37, 0xfc, 0x6a, + 0xb3, 0xeb, 0xa0, 0x2f, 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, 0xb5, 0x68, 0x3d, 0xb8, + 0xd2, 0x43, 0x19, 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, 0x1c, 0x53, 0xb7, 0x40, 0xf3, + 0x45, 0x43, 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, 0x5c, 0x49, 0xe8, 0xc3, 0x7f, 0x61, + 0x49, 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, 0x4c, 0x79, 0x7d, 0x1c, 0xee, 0x78, 0x99, + 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, 0x34, 0x2f, 0x92, 0x53, 0x1c, 0x1d, 0x59, 0xe1, + 0x79, 0x70, 0xb7, 0x31, 0x74, 0x14, 0x43, 0x8c, 0xd8, 0x0b, 0xd0, 0xf9, 0xa6, 0x7c, + 0x9b, 0x9e, 0x55, 0x2f, 0x01, 0x3c, 0x11, 0x5a, 0x95, 0x4f, 0x35, 0xe0, 0x61, 0x6c, + 0x68, 0xd4, 0x31, 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, 0x33, 0xe5, 0xad, 0x84, + 0x88, 0xbf, 0xd9, 0xc4, 0xbb, 0xbe, 0x8f, 0x59, 0x35, 0xc6, 0xc5, 0xea, 0x04, 0xc3, + 0xad, 0x49, 0xc7, 0x47, 0xa9, 0xe7, 0x23, 0x1b, 0xcd, 0x7d, 0x16, 0x21, 0x5e, 0x6e, + 0x80, 0x73, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, 0x02, 0xf0, 0x47, 0x52, 0x45, + 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, 0x03, 0xa7, 0x6f, 0xb9, 0xce, 0xca, + 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0xc6, 0x91, 0x5c, 0x43, 0x40, 0x50, 0x64, 0xae, + 0x56, 0xbc, 0x89, 0xe6, 0x4d, 0x15, 0x78, 0xe4, 0xd3, 0xa3, 0x4b, 0xb9, 0x55, 0x91, + 0xea, 0xf1, 0xd3, 0xda, 0x02, 0xa4, 0x54, 0x9f, 0xa8, 0x0d, 0xb0, 0xff, 0x7c, 0xb0, + 0x39, 0x93, 0xb6, 0x8a, 0xe1, 0x5a, 0x30, 0xe8, 0x79, 0x49, 0xaa, 0x08, 0x0e, 0x94, + 0xab, 0xde, 0x68, 0x89, 0x8c, 0x33, 0x92, 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, 0xbe, + 0x73, 0x9b, 0x13, 0xd1, 0x4d, 0xf0, 0x3f, 0xf2, 0x76, 0x71, 0x48, 0x9b, 0xe0, 0xb4, + 0xbe, 0xba, 0xaf, 0xa7, 0xd1, 0xe6, 0x39, 0xd5, 0xb3, 0xe9, 0x94, 0xff, 0xb6, 0xb7, + 0xa2, 0x09, 0xf6, 0xad, 0xfe, 0x8d, 0x1e, 0x5c, 0xcf, 0x01, 0x0c, 0x19, 0x16, 0x8a, + 0xeb, 0x18, 0xaa, 0x9d, 0x68, 0x7e, 0x24, 0xad, 0xc0, 0xb1, 0x13, 0x5c, 0x70, 0xc9, + 0x70, 0xe0, 0x90, 0x3a, + ], + c_enc: [ + 0xb1, 0x69, 0x64, 0x77, 0xe6, 0x58, 0xb6, 0xf8, 0xe2, 0x4e, 0x02, 0x55, 0x52, 0xb4, + 0x8d, 0xd4, 0x84, 0x58, 0xf2, 0xcd, 0x75, 0x70, 0xc0, 0xe8, 0xce, 0xc4, 0xed, 0x4c, + 0xf7, 0x9b, 0xd5, 0xb6, 0x9e, 0xa8, 0x54, 0x12, 0x3b, 0x4e, 0xaf, 0x97, 0x8b, 0x14, + 0x2e, 0xb3, 0xef, 0x53, 0xaa, 0xfc, 0x78, 0x90, 0xdd, 0xa2, 0x8a, 0xfa, 0x25, 0xf1, + 0x45, 0xc8, 0xb9, 0x7f, 0x7b, 0x94, 0x50, 0xc1, 0xd5, 0xe0, 0xc3, 0x7d, 0xaf, 0x5e, + 0xd4, 0xec, 0xd9, 0xb6, 0x3d, 0xbc, 0xd2, 0x15, 0x11, 0x23, 0x13, 0x9b, 0xbc, 0x2b, + 0x65, 0x1a, 0x8f, 0x69, 0xcf, 0xbf, 0xb7, 0xcb, 0x60, 0x44, 0x78, 0xf3, 0xf2, 0x64, + 0xd9, 0xdd, 0x75, 0xcf, 0x31, 0x9e, 0x3e, 0xcd, 0xf5, 0xb3, 0x34, 0x26, 0x54, 0x85, + 0x7c, 0x52, 0xa1, 0xfc, 0x61, 0x40, 0x55, 0xa2, 0x46, 0xf5, 0x26, 0x3e, 0x85, 0x36, + 0x83, 0xef, 0x54, 0x41, 0x3b, 0xac, 0x99, 0x1a, 0xe6, 0x35, 0x01, 0x50, 0xe1, 0x34, + 0x52, 0xa3, 0xa6, 0x20, 0xc5, 0x3f, 0x80, 0xda, 0xcc, 0x7a, 0xf0, 0x59, 0x26, 0xd9, + 0xc5, 0x9a, 0x94, 0xe4, 0x78, 0x9a, 0xcc, 0x68, 0xd8, 0x51, 0x05, 0x6b, 0x75, 0xa7, + 0x4e, 0x2e, 0x1b, 0x38, 0xbf, 0xcb, 0x6d, 0xba, 0xab, 0x37, 0xa3, 0x8a, 0xe0, 0x2c, + 0x9c, 0x35, 0x25, 0x9e, 0x52, 0x84, 0xe4, 0xfe, 0x83, 0xdd, 0xb2, 0x29, 0x24, 0xa1, + 0xc4, 0x0a, 0xa2, 0x5e, 0xd1, 0xf5, 0xc0, 0x6d, 0xa1, 0x58, 0x31, 0xf0, 0x41, 0x50, + 0xa3, 0x7c, 0x1b, 0xa3, 0xd1, 0x17, 0x04, 0x93, 0xca, 0x29, 0xf3, 0x43, 0x4a, 0xfa, + 0x06, 0x9b, 0x46, 0xaf, 0xdc, 0x87, 0x0a, 0x29, 0x6f, 0xdc, 0x0e, 0xb6, 0x1b, 0x55, + 0x70, 0x77, 0xa1, 0xda, 0x1f, 0xe8, 0x22, 0xb6, 0xce, 0x24, 0x7c, 0x8e, 0x19, 0x9f, + 0xc4, 0x85, 0x14, 0x6f, 0x38, 0x4a, 0xcf, 0x5c, 0x52, 0x69, 0x7e, 0xfa, 0xcc, 0x5b, + 0xfe, 0x42, 0x02, 0xe8, 0x5f, 0x06, 0x4b, 0xc8, 0xe1, 0x2e, 0xee, 0x39, 0x79, 0x6d, + 0xfd, 0x13, 0x99, 0xb1, 0xc1, 0xe8, 0xc7, 0x4b, 0x5e, 0xc3, 0xc3, 0x1d, 0x2c, 0xfa, + 0x44, 0x87, 0x02, 0x5c, 0xeb, 0x5d, 0xb3, 0x55, 0x9d, 0x4b, 0x7b, 0xac, 0x02, 0x73, + 0xf1, 0x33, 0x51, 0xd2, 0xd1, 0x3c, 0xec, 0x0a, 0x44, 0x8c, 0x00, 0x11, 0x09, 0x45, + 0x2c, 0x40, 0x92, 0xc8, 0x11, 0x91, 0xa0, 0xda, 0xa9, 0x79, 0xe2, 0x6a, 0x96, 0x24, + 0xe4, 0x0c, 0xa4, 0xac, 0xcb, 0x63, 0x46, 0xaa, 0xe1, 0x88, 0xca, 0x09, 0x39, 0xdd, + 0x9f, 0x6b, 0x6e, 0x45, 0xe4, 0x1b, 0xca, 0xeb, 0xdc, 0x1d, 0xa8, 0x01, 0xcc, 0xd4, + 0xdc, 0x93, 0x32, 0x26, 0x6f, 0xb3, 0xeb, 0x23, 0x7b, 0x07, 0x72, 0x45, 0xa7, 0x91, + 0xec, 0xb4, 0x0e, 0x5c, 0x40, 0x56, 0xad, 0xd6, 0xb1, 0xb5, 0xf7, 0xf8, 0xfa, 0x10, + 0x4f, 0xba, 0x61, 0x3e, 0xd9, 0x29, 0xe1, 0xfa, 0xd2, 0x26, 0x47, 0x50, 0x35, 0xb6, + 0x1a, 0x9f, 0x85, 0xaf, 0xba, 0xfb, 0x16, 0x6b, 0x24, 0xc2, 0x4d, 0x2c, 0x28, 0x93, + 0x7b, 0x17, 0x70, 0xba, 0x26, 0x9c, 0x15, 0xeb, 0x2d, 0x9b, 0xdc, 0x2b, 0x83, 0xea, + 0xd8, 0xa0, 0x1d, 0xdb, 0x11, 0x08, 0x3b, 0x13, 0xd6, 0x2d, 0x57, 0x2c, 0xf7, 0x8d, + 0x5c, 0xba, 0x6f, 0x36, 0x52, 0xca, 0xc4, 0xd2, 0x4c, 0x71, 0xc5, 0x47, 0x27, 0x26, + 0x24, 0xc0, 0x78, 0xe0, 0xb9, 0x69, 0x68, 0xfe, 0x09, 0xd8, 0x3e, 0xf7, 0x30, 0x20, + 0x62, 0xbb, 0x5d, 0x3a, 0x2c, 0xcf, 0x73, 0x4e, 0x0f, 0xd3, 0x51, 0x01, 0xfd, 0x58, + 0x64, 0x73, 0x3f, 0x44, 0xd0, 0x75, 0xc3, 0x8b, 0x73, 0xf6, 0xbf, 0xb8, 0xc3, 0x9c, + 0x7b, 0x6b, 0x3d, 0xbc, 0xd1, 0x9a, 0x05, 0x89, 0x91, 0x86, 0x37, 0xf7, 0x5b, 0xbe, + 0x40, 0x15, 0x7b, 0x80, 0xe5, 0x9e, 0x55, 0x58, 0x50, 0x28, 0xa5, 0xec, 0x20, 0x1e, + 0x00, 0x8f, 0xf6, 0xf5, 0x12, 0xe2, 0x53, 0xcc, 0x9a, 0xcf, 0x62, 0x7d, 0x94, 0x35, + 0xdb, 0x6b, 0x14, 0xb9, 0x82, 0x48, 0x79, 0xf4, 0xe4, 0x0a, 0x36, 0xd5, 0xec, 0x94, + 0x2b, 0xff, 0x04, 0xfd, 0x90, 0xa6, 0xaf, 0x8c, 0x58, 0x1d, 0xf6, 0x09, 0xc4, 0x11, + 0xf4, 0x76, 0x11, 0x41, 0xd4, 0xa6, + ], + ock: [ + 0xdc, 0xf9, 0x34, 0xcf, 0x6a, 0x64, 0x90, 0x3f, 0x2d, 0x99, 0xa3, 0x07, 0xe1, 0x55, + 0xfb, 0x90, 0xe9, 0x7a, 0xc9, 0x0c, 0x38, 0x7f, 0x1b, 0xa5, 0xa6, 0xea, 0x43, 0xb5, + 0x91, 0xb0, 0x5d, 0x69, + ], + op: [ + 0x3e, 0x5e, 0x46, 0xeb, 0x0f, 0xe8, 0xe6, 0xf0, 0xcf, 0x6a, 0xab, 0x2b, 0x41, 0xfb, + 0xcf, 0xfb, 0xb2, 0x98, 0xf8, 0xd5, 0x34, 0xc8, 0xd9, 0xd3, 0x11, 0xe4, 0xc6, 0x10, + 0x3a, 0x56, 0x6a, 0xaa, 0xe4, 0x00, 0x13, 0x04, 0x47, 0xc1, 0xbd, 0x1a, 0x0c, 0x13, + 0x02, 0xf5, 0x10, 0xe9, 0xeb, 0x09, 0xed, 0x76, 0xda, 0xbc, 0xfe, 0x2a, 0x69, 0x1c, + 0xc4, 0x69, 0x2d, 0x0c, 0x1b, 0x30, 0x33, 0x01, + ], + c_out: [ + 0x25, 0xf4, 0xbb, 0x9f, 0xb4, 0x45, 0x06, 0x78, 0x9c, 0xf5, 0x1d, 0xc3, 0xf6, 0x5f, + 0x17, 0xaf, 0xee, 0xe0, 0x34, 0x92, 0x79, 0xc7, 0x89, 0x28, 0x9b, 0x03, 0xd3, 0x8c, + 0x2e, 0x20, 0xd3, 0x12, 0x5d, 0xe7, 0xc5, 0x6e, 0x18, 0x29, 0x2d, 0xec, 0xc6, 0x41, + 0x81, 0xa7, 0xe9, 0xa7, 0xbc, 0x12, 0xeb, 0x97, 0x85, 0xf0, 0xdd, 0x51, 0xd5, 0x88, + 0x62, 0x00, 0xfb, 0x18, 0x7d, 0x2c, 0x16, 0x90, 0x65, 0xaf, 0x84, 0xcc, 0x02, 0x3d, + 0x6d, 0x63, 0xce, 0x05, 0x83, 0x28, 0xe2, 0x47, 0xb5, 0x98, + ], + note_type: Some([ + 0x96, 0x86, 0xaa, 0x36, 0x36, 0xbd, 0x37, 0x5b, 0xd3, 0x13, 0x6b, 0xee, 0x0b, 0xda, + 0xab, 0xcf, 0xac, 0x88, 0x1b, 0xc7, 0x01, 0x81, 0x27, 0x21, 0xe6, 0xfb, 0x75, 0xaa, + 0x07, 0x2d, 0x2d, 0x18, + ]), }, ] } diff --git a/src/tree.rs b/src/tree.rs index c2854200b..7e9601312 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -77,7 +77,7 @@ impl Anchor { /// The Merkle path from a leaf of the note commitment tree /// to its anchor. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct MerklePath { position: u32, auth_path: [MerkleHashOrchard; MERKLE_DEPTH_ORCHARD], diff --git a/src/value.rs b/src/value.rs index a760e77b3..845bcbfc2 100644 --- a/src/value.rs +++ b/src/value.rs @@ -38,6 +38,7 @@ use core::fmt::{self, Debug}; use core::iter::Sum; use core::ops::{Add, RangeInclusive, Sub}; +use std::ops::Neg; use bitvec::{array::BitArray, order::Lsb0}; use ff::{Field, PrimeField}; @@ -50,10 +51,9 @@ use pasta_curves::{ use rand::RngCore; use subtle::CtOption; +use crate::note::NoteType; use crate::{ - constants::fixed_bases::{ - VALUE_COMMITMENT_PERSONALIZATION, VALUE_COMMITMENT_R_BYTES, VALUE_COMMITMENT_V_BYTES, - }, + constants::fixed_bases::{VALUE_COMMITMENT_PERSONALIZATION, VALUE_COMMITMENT_R_BYTES}, primitives::redpallas::{self, Binding}, }; @@ -114,6 +114,11 @@ impl NoteValue { pub(crate) fn to_le_bits(self) -> BitArray<[u8; 8], Lsb0> { BitArray::<_, Lsb0>::new(self.0.to_le_bytes()) } + + /// The minimum, greater than zero, note value that can not be split further. + pub fn unsplittable() -> Self { + NoteValue(1u64) + } } impl From<&NoteValue> for Assigned { @@ -188,6 +193,18 @@ impl Add for ValueSum { } } +impl Neg for ValueSum { + type Output = Option; + + #[allow(clippy::suspicious_arithmetic_impl)] + fn neg(self) -> Self::Output { + self.0 + .checked_neg() + .filter(|v| VALUE_SUM_RANGE.contains(v)) + .map(ValueSum) + } +} + impl<'a> Sum<&'a ValueSum> for Result { fn sum>(iter: I) -> Self { iter.fold(Ok(ValueSum(0)), |acc, v| (acc? + *v).ok_or(OverflowError)) @@ -209,7 +226,7 @@ impl TryFrom for i64 { } /// The blinding factor for a [`ValueCommitment`]. -#[derive(Clone, Debug)] +#[derive(Clone, Copy, Debug)] pub struct ValueCommitTrapdoor(pallas::Scalar); impl ValueCommitTrapdoor { @@ -292,9 +309,8 @@ impl ValueCommitment { /// /// [concretehomomorphiccommit]: https://zips.z.cash/protocol/nu5.pdf#concretehomomorphiccommit #[allow(non_snake_case)] - pub(crate) fn derive(value: ValueSum, rcv: ValueCommitTrapdoor) -> Self { + pub(crate) fn derive(value: ValueSum, rcv: ValueCommitTrapdoor, note_type: NoteType) -> Self { let hasher = pallas::Point::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION); - let V = hasher(&VALUE_COMMITMENT_V_BYTES); let R = hasher(&VALUE_COMMITMENT_R_BYTES); let abs_value = u64::try_from(value.0.abs()).expect("value must be in valid range"); @@ -304,7 +320,9 @@ impl ValueCommitment { pallas::Scalar::from(abs_value) }; - ValueCommitment(V * value + R * rcv.0) + let V_zsa = note_type.cv_base(); + + ValueCommitment(V_zsa * value + R * rcv.0) } pub(crate) fn into_bvk(self) -> redpallas::VerificationKey { @@ -407,6 +425,9 @@ pub mod testing { #[cfg(test)] mod tests { + use crate::note::note_type::testing::{arb_note_type, native_note_type}; + + use crate::note::NoteType; use proptest::prelude::*; use super::{ @@ -415,35 +436,77 @@ mod tests { }; use crate::primitives::redpallas; + fn _bsk_consistent_with_bvk( + native_values: &[(ValueSum, ValueCommitTrapdoor, NoteType)], + arb_values: &[(ValueSum, ValueCommitTrapdoor, NoteType)], + neg_trapdoors: &[ValueCommitTrapdoor], + ) { + // for each arb value, create a negative value with a different trapdoor + let neg_arb_values: Vec<_> = arb_values + .iter() + .cloned() + .zip(neg_trapdoors.iter().cloned()) + .map(|((value, _, note_type), rcv)| ((-value).unwrap(), rcv, note_type)) + .collect(); + + let native_value_balance = native_values + .iter() + .map(|(value, _, _)| value) + .sum::>() + .expect("we generate values that won't overflow"); + + let values = [native_values, arb_values, &neg_arb_values].concat(); + + let bsk = values + .iter() + .map(|(_, rcv, _)| rcv) + .sum::() + .into_bsk(); + + let bvk = (values + .iter() + .map(|(value, rcv, note_type)| ValueCommitment::derive(*value, *rcv, *note_type)) + .sum::() + - ValueCommitment::derive( + native_value_balance, + ValueCommitTrapdoor::zero(), + NoteType::native(), + )) + .into_bvk(); + + assert_eq!(redpallas::VerificationKey::from(&bsk), bvk); + } + + proptest! { + #[test] + fn bsk_consistent_with_bvk_native_only( + native_values in (1usize..10).prop_flat_map(|n_values| + arb_note_value_bounded(MAX_NOTE_VALUE / n_values as u64).prop_flat_map(move |bound| + prop::collection::vec((arb_value_sum_bounded(bound), arb_trapdoor(), native_note_type()), n_values) + ) + ), + ) { + // Test with native note type (zec) only + _bsk_consistent_with_bvk(&native_values, &[], &[]); + } + } + proptest! { #[test] fn bsk_consistent_with_bvk( - values in (1usize..10).prop_flat_map(|n_values| + native_values in (1usize..10).prop_flat_map(|n_values| arb_note_value_bounded(MAX_NOTE_VALUE / n_values as u64).prop_flat_map(move |bound| - prop::collection::vec((arb_value_sum_bounded(bound), arb_trapdoor()), n_values) + prop::collection::vec((arb_value_sum_bounded(bound), arb_trapdoor(), native_note_type()), n_values) ) - ) + ), + (arb_values,neg_trapdoors) in (1usize..10).prop_flat_map(|n_values| + (arb_note_value_bounded(MAX_NOTE_VALUE / n_values as u64).prop_flat_map(move |bound| + prop::collection::vec((arb_value_sum_bounded(bound), arb_trapdoor(), arb_note_type()), n_values) + ), prop::collection::vec(arb_trapdoor(), n_values)) + ), ) { - let value_balance = values - .iter() - .map(|(value, _)| value) - .sum::>() - .expect("we generate values that won't overflow"); - - let bsk = values - .iter() - .map(|(_, rcv)| rcv) - .sum::() - .into_bsk(); - - let bvk = (values - .into_iter() - .map(|(value, rcv)| ValueCommitment::derive(value, rcv)) - .sum::() - - ValueCommitment::derive(value_balance, ValueCommitTrapdoor::zero())) - .into_bvk(); - - assert_eq!(redpallas::VerificationKey::from(&bsk), bvk); + // Test with native note type (zec) + _bsk_consistent_with_bvk(&native_values, &arb_values, &neg_trapdoors); } } } diff --git a/tests/builder.rs b/tests/builder.rs index 35c53976d..4329efc7a 100644 --- a/tests/builder.rs +++ b/tests/builder.rs @@ -1,4 +1,5 @@ use incrementalmerkletree::{bridgetree::BridgeTree, Hashable, Tree}; +use orchard::note::NoteType; use orchard::{ builder::Builder, bundle::{Authorized, Flags}, @@ -43,7 +44,13 @@ fn bundle_chain() { let mut builder = Builder::new(Flags::from_parts(false, true), anchor); assert_eq!( - builder.add_recipient(None, recipient, NoteValue::from_raw(5000), None), + builder.add_recipient( + None, + recipient, + NoteValue::from_raw(5000), + NoteType::native(), + None + ), Ok(()) ); let unauthorized = builder.build(&mut rng).unwrap(); @@ -85,7 +92,13 @@ fn bundle_chain() { let mut builder = Builder::new(Flags::from_parts(true, true), anchor); assert_eq!(builder.add_spend(fvk, note, merkle_path), Ok(())); assert_eq!( - builder.add_recipient(None, recipient, NoteValue::from_raw(5000), None), + builder.add_recipient( + None, + recipient, + NoteValue::from_raw(5000), + NoteType::native(), + None + ), Ok(()) ); let unauthorized = builder.build(&mut rng).unwrap();