Struct schnorrkel::musig::MuSig

source ·
pub struct MuSig<T: SigningTranscript + Clone, S> { /* private fields */ }
👎Deprecated since 0.11.0: This module will be replaced in the future
Expand description

Schnorr multi-signature (MuSig) container generic over its session types

Implementations§

source§

impl<T: SigningTranscript + Clone, S> MuSig<T, S>

source

pub fn public_keys( &self, require_reveal: bool, ) -> impl Iterator<Item = &PublicKey>

👎Deprecated since 0.11.0: This module will be replaced in the future

Iterates over public keys.

If require_reveal=true then we count only public key that revealed their R values.

source

pub fn public_key(&self) -> PublicKey

👎Deprecated since 0.11.0: This module will be replaced in the future

Aggregate public key given currently revealed R values

source

pub fn expected_public_key(&self) -> PublicKey

👎Deprecated since 0.11.0: This module will be replaced in the future

Aggregate public key expected if all currently committed nodes fully participate

source§

impl<T, S> MuSig<T, S>

source

pub fn transcript(&mut self) -> &mut T

👎Deprecated since 0.11.0: This module will be replaced in the future

We permit extending the transcript whenever you like, so that say the message may be agreed upon in parallel to the commitments. We advise against doing so however, as this requires absolute faith in your random number generator, usually rand::thread_rng().

source§

impl<K, T> MuSig<T, CommitStage<K>>

source

pub fn new(keypair: K, t: T) -> MuSig<T, CommitStage<K>>

👎Deprecated since 0.11.0: This module will be replaced in the future

Initialize a multi-signature aka cosignature protocol run.

We encourage borrowing the Keypair to minimize copies of the private key, so we provide the Keypair::musig method for the K = &'k Keypair case. You could use Rc or Arc with this MuSig::new method, or even pass in an owned copy.

source

pub fn our_commitment(&self) -> Commitment

👎Deprecated since 0.11.0: This module will be replaced in the future

Our commitment to our R to send to all other cosigners

source

pub fn add_their_commitment( &mut self, them: PublicKey, theirs: Commitment, ) -> SignatureResult<()>

👎Deprecated since 0.11.0: This module will be replaced in the future

Add a new cosigner’s public key and associated R bypassing our commitment phase.

source

pub fn reveal_stage(self) -> MuSig<T, RevealStage<K>>

👎Deprecated since 0.11.0: This module will be replaced in the future

Commit to reveal phase transition.

source§

impl<K, T> MuSig<T, RevealStage<K>>

source

pub fn our_reveal(&self) -> &Reveal

👎Deprecated since 0.11.0: This module will be replaced in the future

Reveal our R contribution to send to all other cosigners

source

pub fn add_their_reveal( &mut self, them: PublicKey, theirs: Reveal, ) -> SignatureResult<()>

👎Deprecated since 0.11.0: This module will be replaced in the future

Include a revealed R value from a previously committed cosigner

source

pub fn add_trusted( &mut self, them: PublicKey, theirs: Reveal, ) -> SignatureResult<()>

👎Deprecated since 0.11.0: This module will be replaced in the future

Add a new cosigner’s public key and associated R bypassing our commitment phase.

We implemented defenses that reduce the risks posed by this method, but anyone who wishes provable security should heed the advice below:

Avoid using this due to the attack described in “On the Provable Security of Two-Round Multi-Signatures” by Manu Drijvers, Kasra Edalatnejad, Bryan Ford, and Gregory Neven https://eprint.iacr.org/2018/417 Avoid using this for public keys held by networked devices in particular.

There are however limited scenarios in which using this appears secure, primarily if the trusted device is (a) air gapped, (b) stateful, and (c) infrequently used, via some constrained channel like manually scanning QR code. Almost all hardware wallets designs fail (b), but non-hardware wallets fail (a), with the middle ground being only something like Parity Signer. Also, any public keys controlled by an organization likely fail (c) too, making this only useful for individuals.

source

pub fn cosign_stage(self) -> MuSig<T, CosignStage>

👎Deprecated since 0.11.0: This module will be replaced in the future

Reveal to cosign phase transition.

source§

impl<T: SigningTranscript + Clone> MuSig<T, CosignStage>

source

pub fn our_cosignature(&self) -> Cosignature

👎Deprecated since 0.11.0: This module will be replaced in the future

Reveals our signature contribution

source

pub fn add_their_cosignature( &mut self, them: PublicKey, theirs: Cosignature, ) -> SignatureResult<()>

👎Deprecated since 0.11.0: This module will be replaced in the future

Include a cosignature from another cosigner

source

pub fn cosigned(&self) -> impl Iterator<Item = &PublicKey>

👎Deprecated since 0.11.0: This module will be replaced in the future

Interate over the cosigners who successfully revaled and later cosigned.

source

pub fn uncosigned(&self) -> impl Iterator<Item = &PublicKey>

👎Deprecated since 0.11.0: This module will be replaced in the future

Interate over the possible cosigners who successfully committed and revaled, but actually cosigned.

source

pub fn sign(&self) -> Option<Signature>

👎Deprecated since 0.11.0: This module will be replaced in the future

Actually computes the cosignature

source§

impl<T: SigningTranscript + Clone> MuSig<T, CollectStage>

source

pub fn add( &mut self, them: PublicKey, their_reveal: Reveal, their_cosignature: Cosignature, ) -> SignatureResult<()>

👎Deprecated since 0.11.0: This module will be replaced in the future

Adds revealed R and cosignature into a cosignature collector

source

pub fn signature(self) -> Signature

👎Deprecated since 0.11.0: This module will be replaced in the future

Actually computes the collected cosignature.

Auto Trait Implementations§

§

impl<T, S> Freeze for MuSig<T, S>
where T: Freeze, S: Freeze,

§

impl<T, S> RefUnwindSafe for MuSig<T, S>

§

impl<T, S> Send for MuSig<T, S>
where T: Send, S: Send,

§

impl<T, S> Sync for MuSig<T, S>
where T: Sync, S: Sync,

§

impl<T, S> Unpin for MuSig<T, S>
where T: Unpin, S: Unpin,

§

impl<T, S> UnwindSafe for MuSig<T, S>
where T: UnwindSafe, S: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

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,

Causes self to use its Display implementation when Debug-formatted.
source§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

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,

Causes self to use its Pointer implementation when Debug-formatted.
source§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

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

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
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V