Skip to content

Commit 29fcd33

Browse files
curiecryptjpraynaud
andcommitted
signature registered party
Update mithril-stm/src/single_signature/mod.rs Co-authored-by: Jean-Philippe Raynaud <[email protected]>
1 parent 4035163 commit 29fcd33

File tree

6 files changed

+69
-60
lines changed

6 files changed

+69
-60
lines changed

mithril-stm/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ pub use error::{
1616
};
1717
pub use key_reg::{ClosedKeyReg, KeyReg};
1818
pub use participant::{StmInitializer, StmSigner, StmVerificationKey, StmVerificationKeyPoP};
19-
pub use single_signature::StmSig;
19+
pub use single_signature::{StmSig, StmSigRegParty};
2020
pub use stm::{
2121
CoreVerifier, Index, Stake, StmAggrSig, StmAggrVerificationKey, StmClerk, StmParameters,
22-
StmSigRegParty,
2322
};
2423

2524
#[cfg(feature = "benchmark-internals")]

mithril-stm/src/participant/signer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
use blake2::digest::{Digest, FixedOutput};
2+
13
use crate::bls_multi_signature::{Signature, SigningKey, VerificationKey};
24
use crate::eligibility_check::ev_lt_phi;
35
use crate::key_reg::ClosedKeyReg;
46
use crate::single_signature::StmSig;
57
use crate::stm::{Stake, StmParameters};
6-
use blake2::digest::{Digest, FixedOutput};
78

89
/// Wrapper of the MultiSignature Verification key
910
pub type StmVerificationKey = VerificationKey;
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
mod signature;
2+
mod signature_registered_party;
23

3-
pub use crate::single_signature::signature::StmSig;
4+
pub use signature::*;
5+
pub use signature_registered_party::*;

mithril-stm/src/single_signature/signature.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1+
use std::cmp::Ordering;
2+
use std::hash::{Hash, Hasher};
3+
4+
use blake2::digest::{Digest, FixedOutput};
5+
use serde::{Deserialize, Serialize};
6+
17
use crate::bls_multi_signature::Signature;
28
use crate::eligibility_check::ev_lt_phi;
39
use crate::{
410
Index, Stake, StmAggrVerificationKey, StmParameters, StmSignatureError, StmVerificationKey,
511
};
6-
use blake2::digest::{Digest, FixedOutput};
7-
use serde::{Deserialize, Serialize};
8-
use std::cmp::Ordering;
9-
use std::hash::{Hash, Hasher};
1012

1113
/// Signature created by a single party who has won the lottery.
1214
#[derive(Debug, Clone, Serialize, Deserialize)]
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use blake2::digest::{Digest, FixedOutput};
2+
use serde::ser::SerializeTuple;
3+
use serde::{Deserialize, Serialize, Serializer};
4+
5+
use crate::key_reg::RegParty;
6+
use crate::{StmSig, StmSignatureError};
7+
8+
/// Signature with its registered party.
9+
#[derive(Debug, Clone, Hash, Deserialize, Eq, PartialEq, Ord, PartialOrd)]
10+
pub struct StmSigRegParty {
11+
/// Stm signature
12+
pub sig: StmSig,
13+
/// Registered party
14+
pub reg_party: RegParty,
15+
}
16+
17+
impl StmSigRegParty {
18+
/// Convert StmSigRegParty to bytes
19+
/// # Layout
20+
/// * RegParty
21+
/// * Signature
22+
pub fn to_bytes(&self) -> Vec<u8> {
23+
let mut out = Vec::new();
24+
out.extend_from_slice(&self.reg_party.to_bytes());
25+
out.extend_from_slice(&self.sig.to_bytes());
26+
27+
out
28+
}
29+
///Extract a `StmSigRegParty` from a byte slice.
30+
pub fn from_bytes<D: Digest + Clone + FixedOutput>(
31+
bytes: &[u8],
32+
) -> Result<StmSigRegParty, StmSignatureError> {
33+
let reg_party = RegParty::from_bytes(&bytes[0..104])?;
34+
let sig = StmSig::from_bytes::<D>(&bytes[104..])?;
35+
36+
Ok(StmSigRegParty { sig, reg_party })
37+
}
38+
}
39+
40+
impl Serialize for StmSigRegParty {
41+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
42+
where
43+
S: Serializer,
44+
{
45+
let mut tuple = serializer.serialize_tuple(2)?;
46+
tuple.serialize_element(&self.sig)?;
47+
tuple.serialize_element(&self.reg_party)?;
48+
tuple.end()
49+
}
50+
}

mithril-stm/src/stm.rs

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -105,21 +105,20 @@
105105
//! # }
106106
//! ```
107107
108+
use std::collections::{BTreeMap, HashMap, HashSet};
109+
use std::convert::{From, TryFrom, TryInto};
110+
111+
use blake2::digest::{Digest, FixedOutput};
112+
use serde::{Deserialize, Serialize};
113+
108114
use crate::bls_multi_signature::{Signature, VerificationKey};
109115
use crate::error::{
110116
AggregationError, CoreVerifierError, RegisterError, StmAggregateSignatureError,
111-
StmSignatureError,
112117
};
113118
use crate::key_reg::{ClosedKeyReg, RegParty};
114119
use crate::merkle_tree::{BatchPath, MTLeaf, MerkleTreeCommitmentBatchCompat};
115120
use crate::participant::{StmSigner, StmVerificationKey};
116-
use crate::single_signature::StmSig;
117-
use blake2::digest::{Digest, FixedOutput};
118-
use serde::ser::SerializeTuple;
119-
use serde::{Deserialize, Serialize, Serializer};
120-
use std::collections::{BTreeMap, HashMap, HashSet};
121-
use std::convert::{From, TryFrom, TryInto};
122-
use std::hash::Hash;
121+
use crate::single_signature::{StmSig, StmSigRegParty};
123122

124123
/// The quantity of stake held by a party, represented as a `u64`.
125124
pub type Stake = u64;
@@ -218,50 +217,6 @@ impl<D: Clone + Digest + FixedOutput> From<&ClosedKeyReg<D>> for StmAggrVerifica
218217
}
219218
}
220219

221-
/// Signature with its registered party.
222-
#[derive(Debug, Clone, Hash, Deserialize, Eq, PartialEq, Ord, PartialOrd)]
223-
pub struct StmSigRegParty {
224-
/// Stm signature
225-
pub sig: StmSig,
226-
/// Registered party
227-
pub reg_party: RegParty,
228-
}
229-
230-
impl StmSigRegParty {
231-
/// Convert StmSigRegParty to bytes
232-
/// # Layout
233-
/// * RegParty
234-
/// * Signature
235-
pub fn to_bytes(&self) -> Vec<u8> {
236-
let mut out = Vec::new();
237-
out.extend_from_slice(&self.reg_party.to_bytes());
238-
out.extend_from_slice(&self.sig.to_bytes());
239-
240-
out
241-
}
242-
///Extract a `StmSigRegParty` from a byte slice.
243-
pub fn from_bytes<D: Digest + Clone + FixedOutput>(
244-
bytes: &[u8],
245-
) -> Result<StmSigRegParty, StmSignatureError> {
246-
let reg_party = RegParty::from_bytes(&bytes[0..104])?;
247-
let sig = StmSig::from_bytes::<D>(&bytes[104..])?;
248-
249-
Ok(StmSigRegParty { sig, reg_party })
250-
}
251-
}
252-
253-
impl Serialize for StmSigRegParty {
254-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
255-
where
256-
S: Serializer,
257-
{
258-
let mut tuple = serializer.serialize_tuple(2)?;
259-
tuple.serialize_element(&self.sig)?;
260-
tuple.serialize_element(&self.reg_party)?;
261-
tuple.end()
262-
}
263-
}
264-
265220
/// `StmClerk` can verify and aggregate `StmSig`s and verify `StmMultiSig`s.
266221
/// Clerks can only be generated with the registration closed.
267222
/// This avoids that a Merkle Tree is computed before all parties have registered.

0 commit comments

Comments
 (0)