Don't have LA recompute H every time to verify positive reports
This commit is contained in:
parent
2ca58d8b5a
commit
88a0990243
|
@ -30,7 +30,12 @@ use super::super::cred;
|
||||||
use super::super::scalar_u32;
|
use super::super::scalar_u32;
|
||||||
use super::super::{BridgeAuth, IssuerPubKey};
|
use super::super::{BridgeAuth, IssuerPubKey};
|
||||||
use super::super::{CMZ_A, CMZ_A_TABLE};
|
use super::super::{CMZ_A, CMZ_A_TABLE};
|
||||||
pub const H_GENERATOR_STRING: &str = "PR Generator H for ";
|
|
||||||
|
pub fn compute_H(date: u32) -> RistrettoPoint {
|
||||||
|
RistrettoPoint::hash_from_bytes::<Sha512>(
|
||||||
|
format!("PR Generator H for {}", date).as_bytes(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Request {
|
pub struct Request {
|
||||||
|
@ -92,9 +97,7 @@ pub fn request(lox_cred: &cred::Lox, lox_pub: &IssuerPubKey) -> Result<Request,
|
||||||
.to_julian_day()
|
.to_julian_day()
|
||||||
.try_into()
|
.try_into()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let H: RistrettoPoint = RistrettoPoint::hash_from_bytes::<Sha512>(
|
let H = compute_H(date);
|
||||||
format!("{}{}", H_GENERATOR_STRING, date).as_bytes(),
|
|
||||||
);
|
|
||||||
let Htable: RistrettoBasepointTable = RistrettoBasepointTable::create(&H);
|
let Htable: RistrettoBasepointTable = RistrettoBasepointTable::create(&H);
|
||||||
|
|
||||||
// Ensure that the credential can be correctly shown: it must be the case
|
// Ensure that the credential can be correctly shown: it must be the case
|
||||||
|
@ -233,11 +236,9 @@ pub fn request(lox_cred: &cred::Lox, lox_pub: &IssuerPubKey) -> Result<Request,
|
||||||
|
|
||||||
impl BridgeAuth {
|
impl BridgeAuth {
|
||||||
/// Receive a positive report request
|
/// Receive a positive report request
|
||||||
pub fn handle_positive_report(&mut self, req: Request) -> Result<(), ProofError> {
|
pub fn handle_positive_report(&mut self, req: Request, Htable: &RistrettoBasepointTable) -> Result<(), ProofError> {
|
||||||
let A: &RistrettoPoint = &CMZ_A;
|
let A: &RistrettoPoint = &CMZ_A;
|
||||||
let H: RistrettoPoint = RistrettoPoint::hash_from_bytes::<Sha512>(
|
let H = Htable.basepoint();
|
||||||
format!("{}{}", H_GENERATOR_STRING, req.date).as_bytes(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if req.P.is_identity() {
|
if req.P.is_identity() {
|
||||||
return Err(ProofError::VerificationFailure);
|
return Err(ProofError::VerificationFailure);
|
||||||
|
|
|
@ -380,8 +380,10 @@ impl TestHarness {
|
||||||
let req_len = encoded.len();
|
let req_len = encoded.len();
|
||||||
|
|
||||||
let resp_start = Instant::now();
|
let resp_start = Instant::now();
|
||||||
let decoded = bincode::deserialize(&encoded[..]).unwrap();
|
let decoded: positive_report::Request = bincode::deserialize(&encoded[..]).unwrap();
|
||||||
self.ba.handle_positive_report(decoded).unwrap();
|
let H = positive_report::compute_H(decoded.date);
|
||||||
|
let Htable: RistrettoBasepointTable = RistrettoBasepointTable::create(&H);
|
||||||
|
self.ba.handle_positive_report(decoded, &Htable).unwrap();
|
||||||
let resp_t = resp_start.elapsed();
|
let resp_t = resp_start.elapsed();
|
||||||
let resp_len = 0;
|
let resp_len = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue