extern crate pairing; use super::*; use pairing::{Engine, CurveProjective}; use ff::PrimeField; use util::hash_to_fr; use std::fmt; #[derive(Clone)] pub struct Wallet { pub pkc: E::Fr, pub wpk: E::Fr, pub bc: i32, pub bm: i32, pub close: Option, } impl Wallet { pub fn as_fr_vec(&self) -> Vec { if self.close.is_some() { vec!(self.pkc, self.wpk, E::Fr::from_str(&self.bc.to_string()).unwrap(), E::Fr::from_str(&self.bm.to_string()).unwrap(), self.close.unwrap()) } else { vec!(self.pkc, self.wpk, E::Fr::from_str(&self.bc.to_string()).unwrap(), E::Fr::from_str(&self.bm.to_string()).unwrap()) } } pub fn without_close(&self) -> Vec { vec!(self.pkc, self.wpk, E::Fr::from_str(&self.bc.to_string()).unwrap(), E::Fr::from_str(&self.bm.to_string()).unwrap()) } pub fn with_close(&mut self, msg: String) -> Vec { let m = hash_to_fr::(msg.into_bytes() ); self.close = Some(m.clone()); return self.as_fr_vec(); } } impl fmt::Display for Wallet { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if self.close.is_some() { let close_str = self.close.unwrap(); write!(f, "Wallet : (\npkc={}\nwpk={}\nbc={}\nbm={}\nclose={}\n)", &self.pkc, &self.wpk, &self.bc, &self.bm, close_str) } else { write!(f, "Wallet : (\npkc={}\nwpk={}\nbc={}\nbm={}\nclose=None\n)", &self.pkc, &self.wpk, &self.bc, &self.bm) } } }