Move generate payinfo as implementation of the struct
This commit is contained in:
@@ -728,8 +728,8 @@ mod tests {
|
||||
let cc = g1 * o_c + gamma1 * v;
|
||||
|
||||
// compute hash of the payment info
|
||||
let pay_info = PayInfo { info: [37u8; 88] };
|
||||
let rr = hash_to_scalar(pay_info.info);
|
||||
let pay_info = PayInfo { payinfo: [37u8; 88] };
|
||||
let rr = hash_to_scalar(pay_info.payinfo);
|
||||
|
||||
// evaluate the pseudorandom functions
|
||||
let ss = pseudorandom_f_delta_v(&grparams, v, l);
|
||||
|
||||
@@ -91,7 +91,7 @@ mod tests {
|
||||
).unwrap();
|
||||
|
||||
// Let's try to spend some coins
|
||||
let pay_info1 = PayInfo { info: [6u8; 88] };
|
||||
let pay_info1 = PayInfo { payinfo: [6u8; 88] };
|
||||
let spend_vv = 1;
|
||||
|
||||
let (payment1, _upd_wallet) = aggr_wallet.spend(
|
||||
@@ -162,7 +162,7 @@ mod tests {
|
||||
).unwrap();
|
||||
|
||||
// Let's try to spend some coins
|
||||
let pay_info1 = PayInfo { info: [6u8; 88] };
|
||||
let pay_info1 = PayInfo { payinfo: [6u8; 88] };
|
||||
let spend_vv = 1;
|
||||
|
||||
let (payment1, upd_wallet) = aggr_wallet.spend(
|
||||
@@ -179,7 +179,7 @@ mod tests {
|
||||
.unwrap());
|
||||
|
||||
|
||||
let pay_info2 = PayInfo { info: [7u8; 88] };
|
||||
let pay_info2 = PayInfo { payinfo: [7u8; 88] };
|
||||
let (payment2, _) = upd_wallet.spend(
|
||||
¶ms,
|
||||
&verification_key,
|
||||
@@ -253,7 +253,7 @@ mod tests {
|
||||
).unwrap();
|
||||
|
||||
// Let's try to spend some coins
|
||||
let pay_info1 = PayInfo { info: [6u8; 88] };
|
||||
let pay_info1 = PayInfo { payinfo: [6u8; 88] };
|
||||
let spend_vv = 1;
|
||||
|
||||
let (payment1, _upd_wallet) = aggr_wallet.spend(
|
||||
@@ -273,7 +273,7 @@ mod tests {
|
||||
let current_l = aggr_wallet.l.get();
|
||||
aggr_wallet.l.set(current_l - 1);
|
||||
|
||||
let pay_info2 = PayInfo { info: [7u8; 88] };
|
||||
let pay_info2 = PayInfo { payinfo: [7u8; 88] };
|
||||
|
||||
let (payment2, _) = aggr_wallet.spend(
|
||||
¶ms,
|
||||
@@ -347,7 +347,7 @@ mod tests {
|
||||
).unwrap();
|
||||
|
||||
// Let's try to spend some coins
|
||||
let pay_info1 = PayInfo { info: [6u8; 88] };
|
||||
let pay_info1 = PayInfo { payinfo: [6u8; 88] };
|
||||
let spend_vv = 10;
|
||||
|
||||
let (payment1, _) = aggr_wallet.spend(
|
||||
@@ -367,7 +367,7 @@ mod tests {
|
||||
let current_l = aggr_wallet.l.get();
|
||||
aggr_wallet.l.set(current_l - 10);
|
||||
|
||||
let pay_info2 = PayInfo { info: [7u8; 88] };
|
||||
let pay_info2 = PayInfo { payinfo: [7u8; 88] };
|
||||
let (payment2, _) = aggr_wallet.spend(
|
||||
¶ms,
|
||||
&verification_key,
|
||||
|
||||
@@ -163,7 +163,7 @@ impl Wallet {
|
||||
lk.push(Scalar::from(self.l() + k));
|
||||
|
||||
// compute hashes R_k of the payment info
|
||||
let rr_k = hash_to_scalar(pay_info.info);
|
||||
let rr_k = hash_to_scalar(pay_info.payinfo);
|
||||
rr.push(rr_k);
|
||||
|
||||
let o_a_k = grparams.random_scalar();
|
||||
@@ -311,26 +311,27 @@ pub fn compute_kappa(
|
||||
|
||||
#[derive(PartialEq, Eq, Debug, Clone)]
|
||||
pub struct PayInfo {
|
||||
pub info: [u8; 88],
|
||||
pub payinfo: [u8; 88],
|
||||
}
|
||||
|
||||
pub fn generate_payinfo(provider_pk: PublicKeyUser) -> PayInfo{
|
||||
let mut info = [0u8; 88];
|
||||
impl PayInfo {
|
||||
pub fn generate_payinfo(provider_pk: PublicKeyUser) -> PayInfo {
|
||||
let mut payinfo = [0u8; 88];
|
||||
|
||||
// Generating random bytes
|
||||
thread_rng().fill(&mut info[..32]);
|
||||
// Generating random bytes
|
||||
thread_rng().fill(&mut payinfo[..32]);
|
||||
|
||||
// Adding timestamp bytes
|
||||
let timestamp = Utc::now().timestamp();
|
||||
info[32..40].copy_from_slice(×tamp.to_be_bytes());
|
||||
// Adding timestamp bytes
|
||||
let timestamp = Utc::now().timestamp();
|
||||
payinfo[32..40].copy_from_slice(×tamp.to_be_bytes());
|
||||
|
||||
// Adding provider public key bytes
|
||||
let ppk_bytes = provider_pk.pk.to_affine().to_compressed();
|
||||
info[40..].copy_from_slice(&ppk_bytes);
|
||||
// Adding provider public key bytes
|
||||
let ppk_bytes = provider_pk.pk.to_affine().to_compressed();
|
||||
payinfo[40..].copy_from_slice(&ppk_bytes);
|
||||
|
||||
PayInfo { info }
|
||||
PayInfo { payinfo }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Payment {
|
||||
pub kappa: G2Projective,
|
||||
@@ -388,7 +389,7 @@ impl Payment {
|
||||
));
|
||||
}
|
||||
// verify integrity of R_k
|
||||
if !(self.rr[k as usize] == hash_to_scalar(pay_info.info)) {
|
||||
if !(self.rr[k as usize] == hash_to_scalar(pay_info.payinfo)) {
|
||||
return Err(CompactEcashError::Spend(
|
||||
"Integrity of R_k does not hold".to_string(),
|
||||
));
|
||||
|
||||
@@ -70,20 +70,20 @@ fn main() -> Result<(), CompactEcashError> {
|
||||
assert_eq!(aggr_wallet, wallet);
|
||||
|
||||
// Let's try to spend some coins
|
||||
let pay_info = PayInfo { info: [6u8; 88] };
|
||||
let payinfo = PayInfo { payinfo: [6u8; 88] };
|
||||
let spend_vv = 1;
|
||||
|
||||
let (payment, _) = aggr_wallet.spend(
|
||||
¶ms,
|
||||
&verification_key,
|
||||
&user_keypair.secret_key(),
|
||||
&pay_info,
|
||||
&payinfo,
|
||||
false,
|
||||
spend_vv,
|
||||
)?;
|
||||
|
||||
assert!(payment
|
||||
.spend_verify(¶ms, &verification_key, &pay_info)
|
||||
.spend_verify(¶ms, &verification_key, &payinfo)
|
||||
.unwrap());
|
||||
|
||||
let payment_bytes = payment.to_bytes();
|
||||
|
||||
Reference in New Issue
Block a user