use winterwallet_common::{
WALLET_ACCOUNT_LEN, WALLET_BUMP_OFFSET, WALLET_ID_OFFSET, WALLET_ROOT_OFFSET,
};
use winterwallet_core::WinternitzRoot;
#[repr(C)]
pub struct WinterWalletAccount {
pub id: [u8; 32],
pub root: WinternitzRoot,
pub bump: [u8; 1],
}
const _: () = assert!(core::mem::size_of::<WinterWalletAccount>() == WALLET_ACCOUNT_LEN);
impl WinterWalletAccount {
pub fn from_bytes(data: &[u8]) -> Result<Self, crate::Error> {
if data.len() != WALLET_ACCOUNT_LEN {
return Err(crate::Error::InvalidAccountData);
}
let id: [u8; 32] = data[WALLET_ID_OFFSET..WALLET_ID_OFFSET + 32]
.try_into()
.unwrap();
let root_bytes: [u8; 32] = data[WALLET_ROOT_OFFSET..WALLET_ROOT_OFFSET + 32]
.try_into()
.unwrap();
let bump = data[WALLET_BUMP_OFFSET];
Ok(Self {
id,
root: WinternitzRoot::new(root_bytes),
bump: [bump],
})
}
}