Struct schnorr_fun::Signature
source · [−]Expand description
A Schnorr signature.
Fields
R: XOnly
The x-coordinate of the signature’s public nonce. When verifying it is
interpreted as the Point
.
s: Scalar<S, Zero>
The challenge response part of the signature.
Implementations
sourceimpl<S> Signature<S>
impl<S> Signature<S>
sourcepub fn to_bytes(&self) -> [u8; 64]
pub fn to_bytes(&self) -> [u8; 64]
Serializes the signature as 64 bytes – First the 32-byte nonce x-coordinate and then the 32-byte challenge response scalar.
Examples
let bytes = signature.to_bytes();
assert_eq!(signature.R.as_bytes(), &bytes[..32]);
assert_eq!(signature.s.to_bytes().as_ref(), &bytes[32..]);
sourcepub fn as_tuple(&self) -> (XOnly, &Scalar<S, Zero>)
pub fn as_tuple(&self) -> (XOnly, &Scalar<S, Zero>)
Gets a reference to the signature components as a tuple.
Examples
let (R, s) = signature.as_tuple();
sourcepub fn mark<M: Secrecy>(self) -> Signature<M>
pub fn mark<M: Secrecy>(self) -> Signature<M>
Marks the signature with a Secrecy
. If it is marked as Secret
the
operations (e.g. verification) on the signature should be done in constant
time.
Examples
use schnorr_fun::{fun::marker::*, Signature};
let signature = Signature::random(&mut rand::thread_rng());
let secret_sig = signature.mark::<Secret>();
sourceimpl Signature<Public>
impl Signature<Public>
sourcepub fn random<R: RngCore + CryptoRng>(rng: &mut R) -> Self
pub fn random<R: RngCore + CryptoRng>(rng: &mut R) -> Self
Generates a uniformly distributed signature. It will be valid for an infinite number of messages on every key but computationally you will never be able to find one! Useful for testing.
Examples
use schnorr_fun::Signature;
let random_signature = Signature::random(&mut rand::thread_rng());
sourcepub fn from_bytes(bytes: [u8; 64]) -> Option<Self>
pub fn from_bytes(bytes: [u8; 64]) -> Option<Self>
Deserializes a signature from the byte representation produced by to_bytes
.
This returns None
if the first 32 bytes were not a valid XOnly
or the last 32 bytes were not a valid scalar.
Examples
match Signature::from_bytes(bytes) {
Some(signature) => println!("the bytes were a valid encoding of a signature!"),
None => eprintln!("the bytes did *not* encode a valid signature"),
}
Trait Implementations
sourceimpl<'de, S: Secrecy> Deserialize<'de> for Signature<S>
impl<'de, S: Secrecy> Deserialize<'de> for Signature<S>
sourcefn deserialize<Deser: Deserializer<'de>>(
deserializer: Deser
) -> Result<Signature<S>, Deser::Error>
fn deserialize<Deser: Deserializer<'de>>(
deserializer: Deser
) -> Result<Signature<S>, Deser::Error>
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations
impl<S> RefUnwindSafe for Signature<S> where
S: RefUnwindSafe,
impl<S> Send for Signature<S> where
S: Send,
impl<S> Sync for Signature<S> where
S: Sync,
impl<S> Unpin for Signature<S> where
S: Unpin,
impl<S> UnwindSafe for Signature<S> where
S: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Mark for T
impl<T> Mark for T
sourcefn mark<M>(self) -> <M as ChangeMark<T>>::Out where
M: ChangeMark<T>,
fn mark<M>(self) -> <M as ChangeMark<T>>::Out where
M: ChangeMark<T>,
Returns a new instance of the invocant that will be marked with M
. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more