Struct modular_frost::algorithm::SchnorrSignature
source · pub struct SchnorrSignature<C>where
C: Ciphersuite,{
pub R: <C as Ciphersuite>::G,
pub s: <C as Ciphersuite>::F,
}
Expand description
A Schnorr signature of the form (R, s) where s = r + cx.
These are intended to be strict. It is generic over Ciphersuite which is for PrimeGroups, and mandates canonical encodings in its read function.
RFC 8032 has an alternative verification formula, 8R = 8s - 8cX, which is intended to handle torsioned nonces/public keys. Due to this library’s strict requirements, such signatures will not be verifiable with this library.
Fields§
§R: <C as Ciphersuite>::G
§s: <C as Ciphersuite>::F
Implementations§
source§impl<C> SchnorrSignature<C>where
C: Ciphersuite,
impl<C> SchnorrSignature<C>where
C: Ciphersuite,
sourcepub fn read<R>(reader: &mut R) -> Result<SchnorrSignature<C>, Error>where
R: Read,
pub fn read<R>(reader: &mut R) -> Result<SchnorrSignature<C>, Error>where
R: Read,
Read a SchnorrSignature from something implementing Read.
sourcepub fn write<W>(&self, writer: &mut W) -> Result<(), Error>where
W: Write,
pub fn write<W>(&self, writer: &mut W) -> Result<(), Error>where
W: Write,
Write a SchnorrSignature to something implementing Read.
sourcepub fn sign(
private_key: &Zeroizing<<C as Ciphersuite>::F>,
nonce: Zeroizing<<C as Ciphersuite>::F>,
challenge: <C as Ciphersuite>::F,
) -> SchnorrSignature<C>
pub fn sign( private_key: &Zeroizing<<C as Ciphersuite>::F>, nonce: Zeroizing<<C as Ciphersuite>::F>, challenge: <C as Ciphersuite>::F, ) -> SchnorrSignature<C>
Sign a Schnorr signature with the given nonce for the specified challenge.
This challenge must be properly crafted, which means being binding to the public key, nonce, and any message. Failure to do so will let a malicious adversary to forge signatures for different keys/messages.
sourcepub fn batch_statements(
&self,
public_key: <C as Ciphersuite>::G,
challenge: <C as Ciphersuite>::F,
) -> [(<C as Ciphersuite>::F, <C as Ciphersuite>::G); 3]
pub fn batch_statements( &self, public_key: <C as Ciphersuite>::G, challenge: <C as Ciphersuite>::F, ) -> [(<C as Ciphersuite>::F, <C as Ciphersuite>::G); 3]
Return the series of pairs whose products sum to zero for a valid signature. This is intended to be used with a multiexp.
sourcepub fn verify(
&self,
public_key: <C as Ciphersuite>::G,
challenge: <C as Ciphersuite>::F,
) -> bool
pub fn verify( &self, public_key: <C as Ciphersuite>::G, challenge: <C as Ciphersuite>::F, ) -> bool
Verify a Schnorr signature for the given key with the specified challenge.
This challenge must be properly crafted, which means being binding to the public key, nonce, and any message. Failure to do so will let a malicious adversary to forge signatures for different keys/messages.
sourcepub fn batch_verify<R, I>(
&self,
rng: &mut R,
batch: &mut BatchVerifier<I, <C as Ciphersuite>::G>,
id: I,
public_key: <C as Ciphersuite>::G,
challenge: <C as Ciphersuite>::F,
)
pub fn batch_verify<R, I>( &self, rng: &mut R, batch: &mut BatchVerifier<I, <C as Ciphersuite>::G>, id: I, public_key: <C as Ciphersuite>::G, challenge: <C as Ciphersuite>::F, )
Queue a signature for batch verification.
This challenge must be properly crafted, which means being binding to the public key, nonce, and any message. Failure to do so will let a malicious adversary to forge signatures for different keys/messages.
Trait Implementations§
source§impl<C> Clone for SchnorrSignature<C>
impl<C> Clone for SchnorrSignature<C>
source§fn clone(&self) -> SchnorrSignature<C>
fn clone(&self) -> SchnorrSignature<C>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<C> Debug for SchnorrSignature<C>
impl<C> Debug for SchnorrSignature<C>
source§impl<C> PartialEq for SchnorrSignature<C>where
C: PartialEq + Ciphersuite,
<C as Ciphersuite>::G: PartialEq,
<C as Ciphersuite>::F: PartialEq,
impl<C> PartialEq for SchnorrSignature<C>where
C: PartialEq + Ciphersuite,
<C as Ciphersuite>::G: PartialEq,
<C as Ciphersuite>::F: PartialEq,
source§fn eq(&self, other: &SchnorrSignature<C>) -> bool
fn eq(&self, other: &SchnorrSignature<C>) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl<C> Zeroize for SchnorrSignature<C>where
C: Ciphersuite,
impl<C> Zeroize for SchnorrSignature<C>where
C: Ciphersuite,
impl<C> Copy for SchnorrSignature<C>
impl<C> Eq for SchnorrSignature<C>
impl<C> StructuralPartialEq for SchnorrSignature<C>where
C: Ciphersuite,
Auto Trait Implementations§
impl<C> Freeze for SchnorrSignature<C>
impl<C> RefUnwindSafe for SchnorrSignature<C>
impl<C> Send for SchnorrSignature<C>
impl<C> Sync for SchnorrSignature<C>
impl<C> Unpin for SchnorrSignature<C>
impl<C> UnwindSafe for SchnorrSignature<C>
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> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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.