mithril_stm/protocol/participant/
signer.rs1use crate::{
2 ClosedKeyRegistration, MembershipDigest, Parameters, SignerIndex, SingleSignature, Stake,
3 StmResult, VerificationKeyForConcatenation, proof_system::ConcatenationProofSigner,
4};
5
6#[derive(Debug, Clone)]
9pub struct Signer<D: MembershipDigest> {
10 pub signer_index: SignerIndex,
12 pub(crate) concatenation_proof_signer: ConcatenationProofSigner<D>,
14 stake: Stake,
15 pub closed_key_registration: ClosedKeyRegistration,
16 pub parameters: Parameters,
17}
18
19impl<D: MembershipDigest> Signer<D> {
20 pub(crate) fn new(
22 signer_index: SignerIndex,
23 concatenation_proof_signer: ConcatenationProofSigner<D>,
24 closed_key_registration: ClosedKeyRegistration,
25 parameters: Parameters,
26 stake: Stake,
27 ) -> Self {
28 Self {
29 signer_index,
30 concatenation_proof_signer,
31 stake,
32 closed_key_registration,
33 parameters,
34 }
35 }
36
37 pub fn create_single_signature(&self, message: &[u8]) -> StmResult<SingleSignature> {
39 let concatenation_signature =
40 self.concatenation_proof_signer.create_single_signature(message)?;
41 Ok(SingleSignature {
42 concatenation_signature,
43 signer_index: self.signer_index,
44 })
45 }
46
47 pub fn sign(&self, message: &[u8]) -> Option<SingleSignature> {
49 let result = self.create_single_signature(message);
50 result.ok()
51 }
52
53 pub fn get_bls_verification_key(&self) -> VerificationKeyForConcatenation {
55 self.concatenation_proof_signer.get_verification_key()
56 }
57
58 pub fn get_stake(&self) -> Stake {
60 self.stake
61 }
62}