pub struct SaplingDomain { /* private fields */ }Implementations§
Source§impl SaplingDomain
impl SaplingDomain
pub fn new(zip212_enforcement: Zip212Enforcement) -> Self
Trait Implementations§
Source§impl BatchDomain for SaplingDomain
impl BatchDomain for SaplingDomain
Source§fn batch_kdf<'a>(
items: impl Iterator<Item = (Option<Self::SharedSecret>, &'a EphemeralKeyBytes)>,
) -> Vec<Option<Self::SymmetricKey>>
fn batch_kdf<'a>( items: impl Iterator<Item = (Option<Self::SharedSecret>, &'a EphemeralKeyBytes)>, ) -> Vec<Option<Self::SymmetricKey>>
Computes
Self::kdf on a batch of items. Read moreSource§fn batch_epk(
ephemeral_keys: impl Iterator<Item = EphemeralKeyBytes>,
) -> Vec<(Option<Self::PreparedEphemeralPublicKey>, EphemeralKeyBytes)>
fn batch_epk( ephemeral_keys: impl Iterator<Item = EphemeralKeyBytes>, ) -> Vec<(Option<Self::PreparedEphemeralPublicKey>, EphemeralKeyBytes)>
Computes
Self::epk on a batch of ephemeral keys. Read moreSource§fn batch_ka_agree_dec<'a>(
ivk: &Self::IncomingViewingKey,
epks: impl Iterator<Item = Option<&'a Self::PreparedEphemeralPublicKey>>,
) -> Vec<Option<Self::SharedSecret>>where
Self::PreparedEphemeralPublicKey: 'a,
fn batch_ka_agree_dec<'a>(
ivk: &Self::IncomingViewingKey,
epks: impl Iterator<Item = Option<&'a Self::PreparedEphemeralPublicKey>>,
) -> Vec<Option<Self::SharedSecret>>where
Self::PreparedEphemeralPublicKey: 'a,
Computes
Self::ka_agree_dec on a batch of prepared ephemeral keys against a
single incoming viewing key. Read moreSource§impl Domain for SaplingDomain
impl Domain for SaplingDomain
Source§fn kdf(dhsecret: SharedSecret, epk: &EphemeralKeyBytes) -> Blake2bHash
fn kdf(dhsecret: SharedSecret, epk: &EphemeralKeyBytes) -> Blake2bHash
Sapling KDF for note encryption.
Implements section 5.4.4.4 of the Zcash Protocol Specification.
Source§type EphemeralSecretKey = EphemeralSecretKey
type EphemeralSecretKey = EphemeralSecretKey
The ephemeral secret key used to derive the shared secret.
Source§type EphemeralPublicKey = EphemeralPublicKey
type EphemeralPublicKey = EphemeralPublicKey
The ephemeral public key transmitted with the output.
Source§type PreparedEphemeralPublicKey = PreparedEphemeralPublicKey
type PreparedEphemeralPublicKey = PreparedEphemeralPublicKey
A precomputed form of
Self::EphemeralPublicKey for key agreement.The shared secret produced by Diffie-Hellman key agreement.
Source§type SymmetricKey = Hash
type SymmetricKey = Hash
The symmetric key derived from the shared secret.
Source§type Recipient = PaymentAddress
type Recipient = PaymentAddress
The recipient of the note.
Source§type DiversifiedTransmissionKey = DiversifiedTransmissionKey
type DiversifiedTransmissionKey = DiversifiedTransmissionKey
The diversified transmission key of the recipient.
Source§type IncomingViewingKey = PreparedIncomingViewingKey
type IncomingViewingKey = PreparedIncomingViewingKey
The incoming viewing key used to decrypt notes by the recipient. Read more
Source§type OutgoingViewingKey = OutgoingViewingKey
type OutgoingViewingKey = OutgoingViewingKey
The outgoing viewing key used to decrypt notes by the sender. Read more
Source§type ValueCommitment = ValueCommitment
type ValueCommitment = ValueCommitment
The commitment to the value of the note.
Source§type ExtractedCommitment = ExtractedNoteCommitment
type ExtractedCommitment = ExtractedNoteCommitment
The note commitment.
Source§type ExtractedCommitmentBytes = [u8; 32]
type ExtractedCommitmentBytes = [u8; 32]
The byte representation of an
Self::ExtractedCommitment.Source§type NotePlaintextBytes = NoteBytesData<NOTE_PLAINTEXT_SIZE>
type NotePlaintextBytes = NoteBytesData<NOTE_PLAINTEXT_SIZE>
The byte representation of a note plaintext.
Source§type NoteCiphertextBytes = NoteBytesData<ENC_CIPHERTEXT_SIZE>
type NoteCiphertextBytes = NoteBytesData<ENC_CIPHERTEXT_SIZE>
The byte representation of an encrypted note.
Source§type CompactNotePlaintextBytes = NoteBytesData<COMPACT_NOTE_SIZE>
type CompactNotePlaintextBytes = NoteBytesData<COMPACT_NOTE_SIZE>
The byte representation of a compact note plaintext.
Source§type CompactNoteCiphertextBytes = NoteBytesData<COMPACT_NOTE_SIZE>
type CompactNoteCiphertextBytes = NoteBytesData<COMPACT_NOTE_SIZE>
The byte representation of an encrypted compact note.
Source§fn derive_esk(note: &Self::Note) -> Option<Self::EphemeralSecretKey>
fn derive_esk(note: &Self::Note) -> Option<Self::EphemeralSecretKey>
Derives the
EphemeralSecretKey corresponding to this note. Read moreSource§fn get_pk_d(note: &Self::Note) -> Self::DiversifiedTransmissionKey
fn get_pk_d(note: &Self::Note) -> Self::DiversifiedTransmissionKey
Extracts the
DiversifiedTransmissionKey from the note.Source§fn prepare_epk(
epk: Self::EphemeralPublicKey,
) -> Self::PreparedEphemeralPublicKey
fn prepare_epk( epk: Self::EphemeralPublicKey, ) -> Self::PreparedEphemeralPublicKey
Prepare an ephemeral public key for more efficient scalar multiplication.
Source§fn ka_derive_public(
note: &Self::Note,
esk: &Self::EphemeralSecretKey,
) -> Self::EphemeralPublicKey
fn ka_derive_public( note: &Self::Note, esk: &Self::EphemeralSecretKey, ) -> Self::EphemeralPublicKey
Derives
EphemeralPublicKey from esk and the note’s diversifier.Source§fn ka_agree_enc(
esk: &Self::EphemeralSecretKey,
pk_d: &Self::DiversifiedTransmissionKey,
) -> Self::SharedSecret
fn ka_agree_enc( esk: &Self::EphemeralSecretKey, pk_d: &Self::DiversifiedTransmissionKey, ) -> Self::SharedSecret
Derives the
SharedSecret from the sender’s information during note encryption.Source§fn ka_agree_dec(
ivk: &Self::IncomingViewingKey,
epk: &Self::PreparedEphemeralPublicKey,
) -> Self::SharedSecret
fn ka_agree_dec( ivk: &Self::IncomingViewingKey, epk: &Self::PreparedEphemeralPublicKey, ) -> Self::SharedSecret
Derives the
SharedSecret from the recipient’s information during note trial
decryption.Source§fn note_plaintext_bytes(
note: &Self::Note,
memo: &Self::Memo,
) -> Self::NotePlaintextBytes
fn note_plaintext_bytes( note: &Self::Note, memo: &Self::Memo, ) -> Self::NotePlaintextBytes
Encodes the given
Note and Memo as a note plaintext.Source§fn derive_ock(
ovk: &Self::OutgoingViewingKey,
cv: &Self::ValueCommitment,
cmu_bytes: &Self::ExtractedCommitmentBytes,
epk: &EphemeralKeyBytes,
) -> OutgoingCipherKey
fn derive_ock( ovk: &Self::OutgoingViewingKey, cv: &Self::ValueCommitment, cmu_bytes: &Self::ExtractedCommitmentBytes, epk: &EphemeralKeyBytes, ) -> OutgoingCipherKey
Derives the
OutgoingCipherKey for an encrypted note, given the note-specific
public data and an OutgoingViewingKey.Source§fn outgoing_plaintext_bytes(
note: &Self::Note,
esk: &Self::EphemeralSecretKey,
) -> OutPlaintextBytes
fn outgoing_plaintext_bytes( note: &Self::Note, esk: &Self::EphemeralSecretKey, ) -> OutPlaintextBytes
Encodes the outgoing plaintext for the given note.
Source§fn epk_bytes(epk: &Self::EphemeralPublicKey) -> EphemeralKeyBytes
fn epk_bytes(epk: &Self::EphemeralPublicKey) -> EphemeralKeyBytes
Returns the byte encoding of the given
EphemeralPublicKey.Source§fn epk(ephemeral_key: &EphemeralKeyBytes) -> Option<Self::EphemeralPublicKey>
fn epk(ephemeral_key: &EphemeralKeyBytes) -> Option<Self::EphemeralPublicKey>
Source§fn parse_note_plaintext_without_memo_ivk(
&self,
ivk: &Self::IncomingViewingKey,
plaintext: &Self::CompactNotePlaintextBytes,
) -> Option<(Self::Note, Self::Recipient)>
fn parse_note_plaintext_without_memo_ivk( &self, ivk: &Self::IncomingViewingKey, plaintext: &Self::CompactNotePlaintextBytes, ) -> Option<(Self::Note, Self::Recipient)>
Parses the given note plaintext from the recipient’s perspective. Read more
Source§fn parse_note_plaintext_without_memo_ovk(
&self,
pk_d: &Self::DiversifiedTransmissionKey,
plaintext: &Self::CompactNotePlaintextBytes,
) -> Option<(Self::Note, Self::Recipient)>
fn parse_note_plaintext_without_memo_ovk( &self, pk_d: &Self::DiversifiedTransmissionKey, plaintext: &Self::CompactNotePlaintextBytes, ) -> Option<(Self::Note, Self::Recipient)>
Parses the given note plaintext from the sender’s perspective. Read more
Source§fn cmstar(note: &Self::Note) -> Self::ExtractedCommitment
fn cmstar(note: &Self::Note) -> Self::ExtractedCommitment
Derives the
ExtractedCommitment for this note.Source§fn extract_pk_d(
op: &OutPlaintextBytes,
) -> Option<Self::DiversifiedTransmissionKey>
fn extract_pk_d( op: &OutPlaintextBytes, ) -> Option<Self::DiversifiedTransmissionKey>
Parses the
DiversifiedTransmissionKey field of the outgoing plaintext. Read moreSource§fn extract_esk(op: &OutPlaintextBytes) -> Option<Self::EphemeralSecretKey>
fn extract_esk(op: &OutPlaintextBytes) -> Option<Self::EphemeralSecretKey>
Parses the
EphemeralSecretKey field of the outgoing plaintext. Read moreSource§fn split_plaintext_at_memo(
&self,
plaintext: &Self::NotePlaintextBytes,
) -> Option<(Self::CompactNotePlaintextBytes, Self::Memo)>
fn split_plaintext_at_memo( &self, plaintext: &Self::NotePlaintextBytes, ) -> Option<(Self::CompactNotePlaintextBytes, Self::Memo)>
Splits the given note plaintext into the compact part (containing the note) and
the memo field. Read more
Source§fn parse_note_plaintext_bytes(
plaintext: &[u8],
) -> Option<Self::NotePlaintextBytes>
fn parse_note_plaintext_bytes( plaintext: &[u8], ) -> Option<Self::NotePlaintextBytes>
Parses the given note plaintext bytes. Read more
Source§fn parse_note_ciphertext_bytes(
output: &[u8],
tag: [u8; 16],
) -> Option<Self::NoteCiphertextBytes>
fn parse_note_ciphertext_bytes( output: &[u8], tag: [u8; 16], ) -> Option<Self::NoteCiphertextBytes>
Parses the given note ciphertext bytes. Read more
Source§fn parse_compact_note_plaintext_bytes(
plaintext: &[u8],
) -> Option<Self::CompactNotePlaintextBytes>
fn parse_compact_note_plaintext_bytes( plaintext: &[u8], ) -> Option<Self::CompactNotePlaintextBytes>
Parses the given compact note plaintext bytes. Read more
Source§impl DynamicUsage for SaplingDomain
impl DynamicUsage for SaplingDomain
Source§impl<A> ShieldedOutput<SaplingDomain> for OutputDescription<A>
impl<A> ShieldedOutput<SaplingDomain> for OutputDescription<A>
Source§fn ephemeral_key(&self) -> EphemeralKeyBytes
fn ephemeral_key(&self) -> EphemeralKeyBytes
Exposes the
ephemeral_key field of the output.Source§fn cmstar(&self) -> &ExtractedNoteCommitment
fn cmstar(&self) -> &ExtractedNoteCommitment
Exposes the
cmu or cmx field of the output.Source§fn enc_ciphertext(&self) -> Option<&NoteCiphertextBytes>
fn enc_ciphertext(&self) -> Option<&NoteCiphertextBytes>
Exposes the note ciphertext of the output. Returns
None if the output is compact.Source§fn enc_ciphertext_compact(&self) -> NoteBytesData<COMPACT_NOTE_SIZE>
fn enc_ciphertext_compact(&self) -> NoteBytesData<COMPACT_NOTE_SIZE>
Exposes the compact note ciphertext of the output.
Source§fn cmstar_bytes(&self) -> <D as Domain>::ExtractedCommitmentBytes
fn cmstar_bytes(&self) -> <D as Domain>::ExtractedCommitmentBytes
Exposes the
cmu_bytes or cmx_bytes representation of the output.Source§fn split_ciphertext_at_tag(
&self,
) -> Option<(<D as Domain>::NotePlaintextBytes, [u8; 16])>
fn split_ciphertext_at_tag( &self, ) -> Option<(<D as Domain>::NotePlaintextBytes, [u8; 16])>
Splits the AEAD tag from the ciphertext. Read more
Source§impl ShieldedOutput<SaplingDomain> for CompactOutputDescription
impl ShieldedOutput<SaplingDomain> for CompactOutputDescription
Source§fn ephemeral_key(&self) -> EphemeralKeyBytes
fn ephemeral_key(&self) -> EphemeralKeyBytes
Exposes the
ephemeral_key field of the output.Source§fn cmstar(&self) -> &ExtractedNoteCommitment
fn cmstar(&self) -> &ExtractedNoteCommitment
Exposes the
cmu or cmx field of the output.Source§fn enc_ciphertext(&self) -> Option<&NoteCiphertextBytes>
fn enc_ciphertext(&self) -> Option<&NoteCiphertextBytes>
Exposes the note ciphertext of the output. Returns
None if the output is compact.Source§fn enc_ciphertext_compact(&self) -> CompactNoteCiphertextBytes
fn enc_ciphertext_compact(&self) -> CompactNoteCiphertextBytes
Exposes the compact note ciphertext of the output.
Source§fn cmstar_bytes(&self) -> <D as Domain>::ExtractedCommitmentBytes
fn cmstar_bytes(&self) -> <D as Domain>::ExtractedCommitmentBytes
Exposes the
cmu_bytes or cmx_bytes representation of the output.Source§fn split_ciphertext_at_tag(
&self,
) -> Option<(<D as Domain>::NotePlaintextBytes, [u8; 16])>
fn split_ciphertext_at_tag( &self, ) -> Option<(<D as Domain>::NotePlaintextBytes, [u8; 16])>
Splits the AEAD tag from the ciphertext. Read more
Auto Trait Implementations§
impl Freeze for SaplingDomain
impl RefUnwindSafe for SaplingDomain
impl Send for SaplingDomain
impl Sync for SaplingDomain
impl Unpin for SaplingDomain
impl UnsafeUnpin for SaplingDomain
impl UnwindSafe for SaplingDomain
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.