mithril_stm/
parameters.rs1use serde::{Deserialize, Serialize};
2
3use crate::error::RegisterError;
4
5#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
13pub struct StmParameters {
14 pub m: u64,
16 pub k: u64,
18 pub phi_f: f64,
20}
21
22impl StmParameters {
23 pub fn to_bytes(&self) -> [u8; 24] {
29 let mut out = [0; 24];
30 out[..8].copy_from_slice(&self.m.to_be_bytes());
31 out[8..16].copy_from_slice(&self.k.to_be_bytes());
32 out[16..].copy_from_slice(&self.phi_f.to_be_bytes());
33 out
34 }
35
36 pub fn from_bytes(bytes: &[u8]) -> Result<Self, RegisterError> {
40 let mut u64_bytes = [0u8; 8];
41 u64_bytes.copy_from_slice(bytes.get(..8).ok_or(RegisterError::SerializationError)?);
42 let m = u64::from_be_bytes(u64_bytes);
43 u64_bytes.copy_from_slice(bytes.get(8..16).ok_or(RegisterError::SerializationError)?);
44 let k = u64::from_be_bytes(u64_bytes);
45 u64_bytes.copy_from_slice(bytes.get(16..24).ok_or(RegisterError::SerializationError)?);
46 let phi_f = f64::from_be_bytes(u64_bytes);
47
48 Ok(Self { m, k, phi_f })
49 }
50}