use std::hash::Hash;
use elliptic_curve::{group::GroupEncoding, Group};
use crate::common::utils::{HashBytes, SessionId};
#[cfg(feature = "serde")]
use crate::common::utils::serde_vec_point;
#[derive(Hash, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct QCBroadcastMsg1 {
pub from_party: u8,
pub sid_i: SessionId,
pub commitment_1: HashBytes,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone)]
pub struct QCP2PMsg1 {
pub from_party: u8,
pub to_party: u8,
pub commitment_2: HashBytes,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone)]
pub struct QCP2PMsg2<G>
where
G: Group + GroupEncoding,
{
pub from_party: u8,
pub to_party: u8,
pub p_i: G::Scalar,
pub r_2_i: [u8; 32],
pub root_chain_code: [u8; 32],
}
#[derive(Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct QCBroadcastMsg2<G>
where
G: Group + GroupEncoding,
{
pub from_party: u8,
pub r_1_i: [u8; 32],
#[cfg_attr(feature = "serde", serde(with = "serde_vec_point"))]
pub big_p_i_poly: Vec<G>,
}