Move generate payinfo as implementation of the struct

This commit is contained in:
aniampio
2023-10-24 15:11:58 +01:00
parent ea4980c6e2
commit 59260400b6
4 changed files with 28 additions and 27 deletions
@@ -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(
&params,
&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(
&params,
@@ -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(
&params,
&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(&timestamp.to_be_bytes());
// Adding timestamp bytes
let timestamp = Utc::now().timestamp();
payinfo[32..40].copy_from_slice(&timestamp.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(
&params,
&verification_key,
&user_keypair.secret_key(),
&pay_info,
&payinfo,
false,
spend_vv,
)?;
assert!(payment
.spend_verify(&params, &verification_key, &pay_info)
.spend_verify(&params, &verification_key, &payinfo)
.unwrap());
let payment_bytes = payment.to_bytes();