Struct schnorrkel::musig::MuSig
source · pub struct MuSig<T: SigningTranscript + Clone, S> { /* private fields */ }
Expand description
Schnorr multi-signature (MuSig) container generic over its session types
Implementations§
source§impl<T: SigningTranscript + Clone, S> MuSig<T, S>
impl<T: SigningTranscript + Clone, S> MuSig<T, S>
sourcepub fn public_keys(
&self,
require_reveal: bool,
) -> impl Iterator<Item = &PublicKey>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn public_keys( &self, require_reveal: bool, ) -> impl Iterator<Item = &PublicKey>
Iterates over public keys.
If require_reveal=true
then we count only public key that revealed their R
values.
sourcepub fn public_key(&self) -> PublicKey
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn public_key(&self) -> PublicKey
Aggregate public key given currently revealed R
values
sourcepub fn expected_public_key(&self) -> PublicKey
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn expected_public_key(&self) -> PublicKey
Aggregate public key expected if all currently committed nodes fully participate
source§impl<T, S> MuSig<T, S>
impl<T, S> MuSig<T, S>
sourcepub fn transcript(&mut self) -> &mut T
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn transcript(&mut self) -> &mut T
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>>
impl<K, T> MuSig<T, CommitStage<K>>
sourcepub fn new(keypair: K, t: T) -> MuSig<T, CommitStage<K>>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn new(keypair: K, t: T) -> MuSig<T, CommitStage<K>>
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.
sourcepub fn our_commitment(&self) -> Commitment
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn our_commitment(&self) -> Commitment
Our commitment to our R
to send to all other cosigners
sourcepub fn add_their_commitment(
&mut self,
them: PublicKey,
theirs: Commitment,
) -> SignatureResult<()>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn add_their_commitment( &mut self, them: PublicKey, theirs: Commitment, ) -> SignatureResult<()>
Add a new cosigner’s public key and associated R
bypassing our commitment phase.
sourcepub fn reveal_stage(self) -> MuSig<T, RevealStage<K>>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn reveal_stage(self) -> MuSig<T, RevealStage<K>>
Commit to reveal phase transition.
source§impl<K, T> MuSig<T, RevealStage<K>>
impl<K, T> MuSig<T, RevealStage<K>>
sourcepub fn our_reveal(&self) -> &Reveal
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn our_reveal(&self) -> &Reveal
Reveal our R
contribution to send to all other cosigners
sourcepub fn add_their_reveal(
&mut self,
them: PublicKey,
theirs: Reveal,
) -> SignatureResult<()>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn add_their_reveal( &mut self, them: PublicKey, theirs: Reveal, ) -> SignatureResult<()>
Include a revealed R
value from a previously committed cosigner
sourcepub fn add_trusted(
&mut self,
them: PublicKey,
theirs: Reveal,
) -> SignatureResult<()>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn add_trusted( &mut self, them: PublicKey, theirs: Reveal, ) -> SignatureResult<()>
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.
sourcepub fn cosign_stage(self) -> MuSig<T, CosignStage>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn cosign_stage(self) -> MuSig<T, CosignStage>
Reveal to cosign phase transition.
source§impl<T: SigningTranscript + Clone> MuSig<T, CosignStage>
impl<T: SigningTranscript + Clone> MuSig<T, CosignStage>
sourcepub fn our_cosignature(&self) -> Cosignature
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn our_cosignature(&self) -> Cosignature
Reveals our signature contribution
sourcepub fn add_their_cosignature(
&mut self,
them: PublicKey,
theirs: Cosignature,
) -> SignatureResult<()>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn add_their_cosignature( &mut self, them: PublicKey, theirs: Cosignature, ) -> SignatureResult<()>
Include a cosignature from another cosigner
sourcepub fn cosigned(&self) -> impl Iterator<Item = &PublicKey>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn cosigned(&self) -> impl Iterator<Item = &PublicKey>
Interate over the cosigners who successfully revaled and later cosigned.
sourcepub fn uncosigned(&self) -> impl Iterator<Item = &PublicKey>
👎Deprecated since 0.11.0: This module will be replaced in the future
pub fn uncosigned(&self) -> impl Iterator<Item = &PublicKey>
Interate over the possible cosigners who successfully committed and revaled, but actually cosigned.
source§impl<T: SigningTranscript + Clone> MuSig<T, CollectStage>
impl<T: SigningTranscript + Clone> MuSig<T, CollectStage>
sourcepub 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
pub fn add( &mut self, them: PublicKey, their_reveal: Reveal, their_cosignature: Cosignature, ) -> SignatureResult<()>
Adds revealed R
and cosignature into a cosignature collector
Auto Trait Implementations§
impl<T, S> Freeze for MuSig<T, S>
impl<T, S> RefUnwindSafe for MuSig<T, S>where
T: RefUnwindSafe,
S: RefUnwindSafe,
impl<T, S> Send for MuSig<T, S>
impl<T, S> Sync for MuSig<T, S>
impl<T, S> Unpin for MuSig<T, S>
impl<T, S> UnwindSafe for MuSig<T, S>where
T: UnwindSafe,
S: UnwindSafe,
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
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,
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,
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,
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,
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,
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,
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,
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,
self
to use its UpperHex
implementation when
Debug
-formatted.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,
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,
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,
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
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
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
self
, then passes self.deref()
into the pipe function.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
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
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
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
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
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
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
.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
.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
.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
.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
.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
.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
.tap_deref()
only in debug builds, and is erased in release
builds.