Remove date_timestamp from the expiration date struct

This commit is contained in:
aniampio
2023-12-13 13:33:59 +00:00
parent d51ab24f7e
commit eb296b175e
3 changed files with 15 additions and 23 deletions
@@ -16,7 +16,6 @@ use rayon::prelude::*;
/// A structure representing an expiration date signature.
#[derive(Debug, PartialEq, Clone)]
pub struct ExpirationDateSignature {
pub(crate) date_timestamp: Scalar,
pub(crate) h: G1Projective,
pub(crate) s: G1Projective,
}
@@ -42,7 +41,6 @@ impl ExpirationDateSignature {
let s_prime = (self.s * r_prime) + (h_prime * r);
(
ExpirationDateSignature {
date_timestamp: self.date_timestamp,
h: h_prime,
s: s_prime,
},
@@ -56,8 +54,7 @@ impl ExpirationDateSignature {
///
/// A vector of bytes representing the expiration date signature.
pub fn to_bytes(&self) -> Vec<u8> {
let mut bytes: Vec<u8> = Vec::with_capacity(48 + 48 + 32);
bytes.extend(self.date_timestamp.to_bytes());
let mut bytes: Vec<u8> = Vec::with_capacity(48 + 48);
bytes.extend(self.h.to_affine().to_compressed());
bytes.extend(self.s.to_affine().to_compressed());
bytes
@@ -68,18 +65,16 @@ impl TryFrom<&[u8]> for ExpirationDateSignature {
type Error = CompactEcashError;
fn try_from(bytes: &[u8]) -> Result<ExpirationDateSignature> {
if bytes.len() != 128 {
if bytes.len() != 96 {
return Err(CompactEcashError::Deserialization(format!(
"ExpirationDateSignature must be exactly 128 bytes, got {}",
"ExpirationDateSignature must be exactly 96 bytes, got {}",
bytes.len()
)));
}
let date_timestamp_bytes: &[u8; 32] = &bytes[..32].try_into().expect("Slice size != 32");
let h_bytes: &[u8; 48] = &bytes[32..80].try_into().expect("Slice size != 48");
let s_bytes: &[u8; 48] = &bytes[80..].try_into().expect("Slice size != 48");
let h_bytes: &[u8; 48] = &bytes[..48].try_into().expect("Slice size != 48");
let s_bytes: &[u8; 48] = &bytes[48..].try_into().expect("Slice size != 48");
let date_timestamp = Scalar::from_bytes(date_timestamp_bytes).unwrap();
let h = try_deserialize_g1_projective(
h_bytes,
CompactEcashError::Deserialization(
@@ -95,7 +90,6 @@ impl TryFrom<&[u8]> for ExpirationDateSignature {
)?;
Ok(ExpirationDateSignature {
date_timestamp,
h,
s,
})
@@ -147,7 +141,6 @@ pub fn sign_expiration_date(
s_exponent += &sk_auth.ys[2] * m2;
// Create the signature struct on the expiration date
let exp_sign = PartialExpirationDateSignature {
date_timestamp: Scalar::from(valid_date.timestamp() as u64),
h,
s: h * s_exponent,
};
@@ -314,7 +307,6 @@ pub fn aggregate_expiration_signatures(
.map(|(coeff, sig)| sig.s * coeff)
.sum();
let aggr_sig = ExpirationDateSignature {
date_timestamp: Scalar::from(valid_date.timestamp() as u64),
h,
s: aggr_s,
};
@@ -9,7 +9,7 @@ use crate::scheme::setup::{
aggregate_indices_signatures, sign_coin_indices, CoinIndexSignature, Parameters,
PartialCoinIndexSignature,
};
use crate::scheme::{compute_payinfo_hash, Payment};
use crate::scheme::{compute_pay_info_hash, Payment};
use crate::utils::hash_to_scalar;
use crate::PayInfo;
use bls12_381::Scalar;
@@ -47,8 +47,8 @@ pub fn identify(
if pay_info1 == pay_info2 {
Ok(IdentifyResult::DuplicatePayInfo(pay_info1))
} else {
let rr_k_payment1 = compute_payinfo_hash(&pay_info1, k as u64);
let rr_j_payment2 = compute_payinfo_hash(&pay_info2, j as u64);
let rr_k_payment1 = compute_pay_info_hash(&pay_info1, k as u64);
let rr_j_payment2 = compute_pay_info_hash(&pay_info2, j as u64);
let rr_diff = rr_k_payment1 - rr_j_payment2;
let pk = (payment2.tt[j] * rr_k_payment1 - payment1.tt[k] * rr_j_payment2)
* rr_diff.invert().unwrap();
@@ -190,7 +190,7 @@ pub struct Wallet {
///
/// A `Scalar` value representing the hash of the concatenated byte sequence.
///
pub fn compute_payinfo_hash(pay_info: &PayInfo, k: u64) -> Scalar {
pub fn compute_pay_info_hash(pay_info: &PayInfo, k: u64) -> Scalar {
let mut bytes = Vec::new();
bytes.extend_from_slice(&pay_info.pay_info_bytes);
bytes.extend_from_slice(&k.to_le_bytes());
@@ -329,7 +329,7 @@ impl Wallet {
lk_vec.push(Scalar::from(lk));
// compute hashes R_k = H(payinfo, k)
let rr_k = compute_payinfo_hash(pay_info, k);
let rr_k = compute_pay_info_hash(pay_info, k);
rr.push(rr_k);
let o_a_k = grp_params.random_scalar();
@@ -777,7 +777,7 @@ impl Payment {
// Verify whether the coin indices signatures and kappa_k are correct
self.check_coin_index_signature(&params, &verification_key, k)?;
// Compute hashes R_k = H(payinfo, k)
let rr_k = compute_payinfo_hash(&pay_info, k);
let rr_k = compute_pay_info_hash(&pay_info, k);
rr.push(rr_k);
}
// verify the zk proof
@@ -900,19 +900,19 @@ impl TryFrom<&[u8]> for Payment {
let sig_bytes: [u8; 96] = bytes[192..288].try_into().unwrap();
let sig = Signature::try_from(sig_bytes.as_slice())?;
let sig_exp_bytes: [u8; 128] = bytes[288..416].try_into().unwrap();
let sig_exp_bytes: [u8; 96] = bytes[288..384].try_into().unwrap();
let sig_exp = ExpirationDateSignature::try_from(sig_exp_bytes.as_slice())?;
let spend_value_bytes: [u8; 8] = bytes[416..424].try_into().unwrap();
let spend_value_bytes: [u8; 8] = bytes[384..392].try_into().unwrap();
let spend_value = u64::from_le_bytes(spend_value_bytes);
let cc_bytes: [u8; 48] = bytes[424..472].try_into().unwrap();
let cc_bytes: [u8; 48] = bytes[392..440].try_into().unwrap();
let cc = try_deserialize_g1_projective(
&cc_bytes,
CompactEcashError::Deserialization("Failed to deserialize cc".to_string()),
)?;
let mut idx = 472;
let mut idx = 440;
let kappa_k_len = u64::from_le_bytes(bytes[idx..idx + 8].try_into().unwrap()) as usize;
idx += 8;
let mut kappa_k = Vec::with_capacity(kappa_k_len);