2019-07-12 14:20:08 -07:00
|
|
|
extern crate pairing;
|
|
|
|
|
|
|
|
use super::*;
|
2019-08-22 21:50:41 -07:00
|
|
|
use pairing::Engine;
|
2019-07-12 14:20:08 -07:00
|
|
|
use ff::PrimeField;
|
2019-07-23 06:54:53 -07:00
|
|
|
use util::hash_to_fr;
|
2019-07-26 01:18:54 -07:00
|
|
|
use std::fmt;
|
2019-07-12 14:20:08 -07:00
|
|
|
|
2019-07-31 19:06:57 -07:00
|
|
|
#[derive(Clone, Serialize, Deserialize)]
|
|
|
|
#[serde(bound(serialize = "<E as ff::ScalarEngine>::Fr: serde::Serialize"))]
|
|
|
|
#[serde(bound(deserialize = "<E as ff::ScalarEngine>::Fr: serde::Deserialize<'de>"))]
|
2019-07-12 14:20:08 -07:00
|
|
|
pub struct Wallet<E: Engine> {
|
|
|
|
pub pkc: E::Fr,
|
|
|
|
pub wpk: E::Fr,
|
|
|
|
pub bc: i32,
|
|
|
|
pub bm: i32,
|
2019-07-24 14:13:56 -07:00
|
|
|
pub close: Option<E::Fr>,
|
2019-07-12 14:20:08 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<E: Engine> Wallet<E> {
|
|
|
|
pub fn as_fr_vec(&self) -> Vec<E::Fr> {
|
2019-07-24 14:13:56 -07:00
|
|
|
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())
|
|
|
|
}
|
2019-07-12 14:20:08 -07:00
|
|
|
}
|
2019-07-23 06:54:53 -07:00
|
|
|
|
2019-07-28 22:18:40 -07:00
|
|
|
pub fn without_close(&self) -> Vec<E::Fr> {
|
|
|
|
vec!(self.pkc, self.wpk, E::Fr::from_str(&self.bc.to_string()).unwrap(), E::Fr::from_str(&self.bm.to_string()).unwrap())
|
|
|
|
}
|
|
|
|
|
2019-07-26 01:18:54 -07:00
|
|
|
pub fn with_close(&mut self, msg: String) -> Vec<E::Fr> {
|
2019-07-23 06:54:53 -07:00
|
|
|
let m = hash_to_fr::<E>(msg.into_bytes() );
|
2019-07-26 01:18:54 -07:00
|
|
|
self.close = Some(m.clone());
|
|
|
|
return self.as_fr_vec();
|
2019-07-23 06:54:53 -07:00
|
|
|
}
|
2019-07-12 14:20:08 -07:00
|
|
|
}
|
2019-07-26 01:18:54 -07:00
|
|
|
|
|
|
|
impl<E: Engine> fmt::Display for Wallet<E> {
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|