use std::collections::{HashMap, HashSet};
use stoffel_vm_types::core_types::ClearShareValue;
#[derive(Clone, Debug, PartialEq, Eq)]
pub(super) enum OpenResult {
ClearShare(ClearShareValue),
Bytes(Vec<u8>),
}
#[derive(Clone, Default)]
pub(super) struct OpenAccumulator {
pub(super) shares: Vec<Vec<u8>>,
pub(super) party_ids: Vec<usize>,
pub(super) result: Option<OpenResult>,
}
pub(super) type SingleKey = (usize, String);
#[derive(Clone)]
pub(super) struct BatchOpenAccumulator {
pub(super) shares_per_position: Vec<Vec<Vec<u8>>>,
pub(super) party_ids: Vec<usize>,
pub(super) results: Option<Vec<ClearShareValue>>,
}
impl BatchOpenAccumulator {
pub(super) fn new(batch_size: usize) -> Self {
Self {
shares_per_position: vec![Vec::new(); batch_size],
party_ids: Vec::new(),
results: None,
}
}
}
pub(super) type BatchKey = (usize, String, usize);
pub(super) type ExpKey = usize;
#[derive(Default, Clone)]
pub struct ExpOpenAccumulator {
pub partial_points: Vec<(usize, Vec<u8>)>, pub party_ids: Vec<usize>,
pub result: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExpOpenRegistryKind {
G1,
G2,
}
#[derive(Debug, Clone, Copy)]
pub struct ExpOpenRequest<'a> {
pub kind: ExpOpenRegistryKind,
pub sequence: Option<usize>,
pub party_id: usize,
pub share_id: usize,
pub partial_point: &'a [u8],
pub required: usize,
pub timeout_message: &'static str,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ExpOpenProgress {
Pending {
sequence: usize,
current_count: usize,
},
Ready(Vec<u8>),
Collected {
sequence: usize,
partial_points: Vec<(usize, Vec<u8>)>,
},
}
#[derive(Default)]
pub struct RbcState {
pub messages: HashMap<(u64, usize), Vec<u8>>,
pub delivered: HashSet<(usize, usize, u64)>,
}