pub struct WinternitzSignatureScheme { /* private fields */ }Expand description
Winternitz signatures, as described in Section 14.3 in the textbook by Boneh & Shoup.
To create a one-time signature, the scheme hashes secret key values
a number of times, as determined by the domination_free_function.
The parameter d trades off signature size (the higher, the smaller the signature)
and computation time (the higher, the longer the time).
§Examples
use hash_based_signatures::signature::SignatureScheme;
use hash_based_signatures::signature::winternitz::d::D;
use hash_based_signatures::signature::winternitz::WinternitzSignatureScheme;
let mut signature_scheme = WinternitzSignatureScheme::new([0u8; 32], D::new(15));
let signature0 = signature_scheme.sign([0u8; 32]);
assert!(WinternitzSignatureScheme::verify(
signature_scheme.public_key(),
[0u8; 32],
&signature0
));Implementations§
Source§impl WinternitzSignatureScheme
impl WinternitzSignatureScheme
Sourcepub fn new(seed: [u8; 32], d: D) -> Self
pub fn new(seed: [u8; 32], d: D) -> Self
Builds a Winternitz signature scheme from the given seed.
Sourcepub fn public_key_from_message_and_signature(
message: HashType,
signature: &WinternitzSignature,
) -> Result<WinternitzKey>
pub fn public_key_from_message_and_signature( message: HashType, signature: &WinternitzSignature, ) -> Result<WinternitzKey>
Given a message and signature, computes the public key belonging to the private key that signed the message.
Trait Implementations§
Source§impl Clone for WinternitzSignatureScheme
impl Clone for WinternitzSignatureScheme
Source§fn clone(&self) -> WinternitzSignatureScheme
fn clone(&self) -> WinternitzSignatureScheme
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl SignatureScheme<Vec<[u8; 32]>, [u8; 32], (u64, Vec<[u8; 32]>)> for WinternitzSignatureScheme
impl SignatureScheme<Vec<[u8; 32]>, [u8; 32], (u64, Vec<[u8; 32]>)> for WinternitzSignatureScheme
Source§fn public_key(&self) -> WinternitzKey
fn public_key(&self) -> WinternitzKey
Returns a copy of the public key
Source§fn sign(&mut self, message: HashType) -> WinternitzSignature
fn sign(&mut self, message: HashType) -> WinternitzSignature
Signs a message
Source§fn verify(
pk: WinternitzKey,
message: HashType,
signature: &WinternitzSignature,
) -> bool
fn verify( pk: WinternitzKey, message: HashType, signature: &WinternitzSignature, ) -> bool
Verifies a signature.
Note that this function does not require need
self, hence does not need
an instance of the signature scheme.
This is because an instance of a signature scheme contains the signing key
which is typically not available for the verifier.Auto Trait Implementations§
impl Freeze for WinternitzSignatureScheme
impl RefUnwindSafe for WinternitzSignatureScheme
impl Send for WinternitzSignatureScheme
impl Sync for WinternitzSignatureScheme
impl Unpin for WinternitzSignatureScheme
impl UnwindSafe for WinternitzSignatureScheme
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more