pub struct QIndexedSignatureScheme { /* private fields */ }Expand description
The q-indexed signature scheme, as described in Section 14.6.1 in the textbook by Boneh & Shoup.
It instantiates q one-time signatures schemes (currently WinternitzSignatureScheme)
and uses it to sign up to q messages.
To shrink the public key to a single hash, a MerkleTree is used:
The signatures contains the one-time public key that was used, along with a Merkle
proof.
§Examples
use hash_based_signatures::signature::q_indexed_signature::QIndexedSignatureScheme;
use hash_based_signatures::signature::SignatureScheme;
use hash_based_signatures::signature::winternitz::d::D;
let mut signature_scheme = QIndexedSignatureScheme::new(2, [0; 32], D::new(255));
let signature0 = signature_scheme.sign((0, [0u8; 32]));
let signature1 = signature_scheme.sign((1, [1u8; 32]));
assert!(QIndexedSignatureScheme::verify(
signature_scheme.public_key(),
(0, [0u8; 32]),
&signature0
));
assert!(QIndexedSignatureScheme::verify(
signature_scheme.public_key(),
(1, [1u8; 32]),
&signature1
));Implementations§
Trait Implementations§
Source§impl Clone for QIndexedSignatureScheme
impl Clone for QIndexedSignatureScheme
Source§fn clone(&self) -> QIndexedSignatureScheme
fn clone(&self) -> QIndexedSignatureScheme
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<[u8; 32], (usize, [u8; 32]), QIndexedSignature> for QIndexedSignatureScheme
impl SignatureScheme<[u8; 32], (usize, [u8; 32]), QIndexedSignature> for QIndexedSignatureScheme
Source§fn sign(&mut self, message: (usize, HashType)) -> QIndexedSignature
fn sign(&mut self, message: (usize, HashType)) -> QIndexedSignature
Signs a message.
§Panics
Panics if the scheme is used more than once to sign different messages with the same index. Note that there could still be a different instance with the same secret key, which would not be detected.
Source§fn public_key(&self) -> HashType
fn public_key(&self) -> HashType
Returns a copy of the public key
Source§fn verify(
pk: HashType,
message: (usize, HashType),
signature: &QIndexedSignature,
) -> bool
fn verify( pk: HashType, message: (usize, HashType), signature: &QIndexedSignature, ) -> 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 QIndexedSignatureScheme
impl RefUnwindSafe for QIndexedSignatureScheme
impl Send for QIndexedSignatureScheme
impl Sync for QIndexedSignatureScheme
impl Unpin for QIndexedSignatureScheme
impl UnwindSafe for QIndexedSignatureScheme
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