use crate::ecies;
use crate::ecies::RecoveryPackage;
use crate::nodes::{Nodes, PartyId};
use crate::polynomial::{Poly, PrivatePoly};
use crate::random_oracle::RandomOracle;
use crate::tbls::Share;
use fastcrypto::groups::GroupElement;
use serde::{Deserialize, Serialize};
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Party<G: GroupElement, EG: GroupElement> {
pub id: PartyId,
pub(crate) nodes: Nodes<EG>,
pub t: u16,
pub random_oracle: RandomOracle,
pub(crate) enc_sk: ecies::PrivateKey<EG>,
pub(crate) vss_sk: PrivatePoly<G>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Complaint<EG: GroupElement> {
pub(crate) accused_sender: PartyId,
pub(crate) proof: RecoveryPackage<EG>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Confirmation<EG: GroupElement> {
pub sender: PartyId,
pub complaints: Vec<Complaint<EG>>,
}
pub const DKG_MESSAGES_MAX_SIZE: usize = 400_000;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Output<G: GroupElement, EG: GroupElement> {
pub nodes: Nodes<EG>,
pub vss_pk: Poly<G>,
pub shares: Option<Vec<Share<G::ScalarType>>>, }