stoffel-vm 0.1.0

Register-based virtual machine runtime and MPC execution engine for Stoffel programs
Documentation
use crate::error::{VmError, VmResult};
use stoffel_vm_types::core_types::ShareData;

pub(crate) fn ensure_matching_share_data_format(
    operation: &'static str,
    left: &ShareData,
    right: &ShareData,
) -> VmResult<()> {
    let left = left.format();
    let right = right.format();
    if left == right {
        Ok(())
    } else {
        Err(VmError::ShareDataFormatMismatch {
            operation,
            left: left.as_str(),
            right: right.as_str(),
        })
    }
}

pub(super) fn ensure_homogeneous_share_data_format(
    operation: &'static str,
    shares: &[ShareData],
) -> VmResult<()> {
    let Some((first, rest)) = shares.split_first() else {
        return Ok(());
    };
    let expected = first.format();
    for (offset, share) in rest.iter().enumerate() {
        let actual = share.format();
        if actual != expected {
            return Err(VmError::ShareDataBatchFormatMismatch {
                operation,
                expected: expected.as_str(),
                actual: actual.as_str(),
                index: offset + 1,
            });
        }
    }
    Ok(())
}