Docfixes and minor refactors.

Co-authored-by: str4d <jack@electriccoin.co>
This commit is contained in:
ying tong 2021-06-12 06:36:26 +08:00 committed by therealyingtong
parent 6dabb16edc
commit e1779dab70
3 changed files with 29 additions and 36 deletions

View File

@ -435,14 +435,13 @@ mod tests {
// Generate a random point P
let p_val = C::CurveExt::random(rand::rngs::OsRng).to_affine(); // P
let p = super::Point::new(chip.clone(), layouter.namespace(|| "point"), Some(p_val))?;
let p = super::Point::new(chip.clone(), layouter.namespace(|| "P"), Some(p_val))?;
let p_neg = -p_val;
let p_neg =
super::Point::new(chip.clone(), layouter.namespace(|| "point"), Some(p_neg))?;
let p_neg = super::Point::new(chip.clone(), layouter.namespace(|| "-P"), Some(p_neg))?;
// Generate a random point Q
let q_val = C::CurveExt::random(rand::rngs::OsRng).to_affine(); // P
let q = super::Point::new(chip.clone(), layouter.namespace(|| "point"), Some(q_val))?;
let q_val = C::CurveExt::random(rand::rngs::OsRng).to_affine(); // Q
let q = super::Point::new(chip.clone(), layouter.namespace(|| "Q"), Some(q_val))?;
// Make sure P and Q are not the same point.
assert_ne!(p_val, q_val);

View File

@ -233,18 +233,13 @@ impl<C: CurveAffine> Config<C> {
let gamma = x_q;
let delta = y_q + y_p;
let mut inverses = vec![alpha, beta, gamma, delta];
let mut inverses = [alpha, beta, gamma, delta];
inverses.batch_invert();
inverses
});
if let Some(inverses) = inverses {
(
Some(inverses[0]),
Some(inverses[1]),
Some(inverses[2]),
Some(inverses[3]),
)
if let Some([alpha, beta, gamma, delta]) = inverses {
(Some(alpha), Some(beta), Some(gamma), Some(delta))
} else {
(None, None, None, None)
}
@ -283,12 +278,11 @@ impl<C: CurveAffine> Config<C> {
let x_p = x_p.ok_or(Error::SynthesisError)?;
let x_q = x_q.ok_or(Error::SynthesisError)?;
let delta = if x_q == x_p {
delta
if x_q == x_p {
delta.ok_or(Error::SynthesisError)
} else {
Some(C::Base::zero())
};
delta.ok_or(Error::SynthesisError)
Ok(C::Base::zero())
}
},
)?;
@ -428,28 +422,28 @@ pub mod tests {
assert_ne!(p_val, q_val);
// Check complete addition P + (-P)
p.add(layouter.namespace(|| "P + (-P)"), &p_neg)?;
p.add(layouter.namespace(|| "P + (-P)"), p_neg)?;
// Check complete addition 𝒪 + 𝒪
zero.add(layouter.namespace(|| "𝒪 + 𝒪"), &zero)?;
zero.add(layouter.namespace(|| "𝒪 + 𝒪"), zero)?;
// Check P + Q
p.add(layouter.namespace(|| "P + Q"), &q)?;
p.add(layouter.namespace(|| "P + Q"), q)?;
// P + P
p.add(layouter.namespace(|| "P + P"), &p)?;
p.add(layouter.namespace(|| "P + P"), p)?;
// P + 𝒪
p.add(layouter.namespace(|| "P + 𝒪"), &zero)?;
p.add(layouter.namespace(|| "P + 𝒪"), zero)?;
// 𝒪 + P
zero.add(layouter.namespace(|| "𝒪 + P"), &p)?;
zero.add(layouter.namespace(|| "𝒪 + P"), p)?;
// (x, y) + (ζx, y) should behave like normal P + Q.
let endo_p = p_val.to_curve().endo();
let endo_p = Point::new(
chip.clone(),
layouter.namespace(|| "point"),
layouter.namespace(|| "endo(P)"),
Some(endo_p.to_affine()),
)?;
p.add(layouter.namespace(|| "P + endo(P)"), &endo_p)?;
@ -458,7 +452,7 @@ pub mod tests {
let endo_p_neg = (-p_val).to_curve().endo();
let endo_p_neg = Point::new(
chip.clone(),
layouter.namespace(|| "point"),
layouter.namespace(|| "endo(-P)"),
Some(endo_p_neg.to_affine()),
)?;
p.add(layouter.namespace(|| "P + endo(-P)"), &endo_p_neg)?;
@ -467,19 +461,19 @@ pub mod tests {
let endo_2_p = p_val.to_curve().endo().endo();
let endo_2_p = Point::new(
chip.clone(),
layouter.namespace(|| "point"),
layouter.namespace(|| "endo^2(P)"),
Some(endo_2_p.to_affine()),
)?;
p.add(layouter.namespace(|| "P + endo(P)"), &endo_2_p)?;
p.add(layouter.namespace(|| "P + endo^2(P)"), &endo_2_p)?;
// (x, y) + ((ζ^2)x, -y)
let endo_2_p_neg = (-p_val).to_curve().endo().endo();
let endo_2_p_neg = Point::new(
chip,
layouter.namespace(|| "point"),
layouter.namespace(|| "endo^2(-P)"),
Some(endo_2_p_neg.to_affine()),
)?;
p.add(layouter.namespace(|| "P + endo(P)"), &endo_2_p_neg)?;
p.add(layouter.namespace(|| "P + endo^2(-P)"), &endo_2_p_neg)?;
Ok(())
}

View File

@ -161,26 +161,26 @@ pub mod tests {
p_neg: &Point<C, EccChip>,
) -> Result<(), Error> {
// P + Q
p.add_incomplete(layouter.namespace(|| "P + Q"), &q)?;
p.add_incomplete(layouter.namespace(|| "P + Q"), q)?;
// P + P should return an error
p.add_incomplete(layouter.namespace(|| "P + P"), &p)
p.add_incomplete(layouter.namespace(|| "P + P"), p)
.expect_err("P + P should return an error");
// P + (-P) should return an error
p.add_incomplete(layouter.namespace(|| "P + (-P)"), &p_neg)
p.add_incomplete(layouter.namespace(|| "P + (-P)"), p_neg)
.expect_err("P + (-P) should return an error");
// P + 𝒪 should return an error
p.add_incomplete(layouter.namespace(|| "P + 𝒪"), &zero)
p.add_incomplete(layouter.namespace(|| "P + 𝒪"), zero)
.expect_err("P + 0 should return an error");
// 𝒪 + P should return an error
zero.add_incomplete(layouter.namespace(|| "𝒪 + P"), &p)
zero.add_incomplete(layouter.namespace(|| "𝒪 + P"), p)
.expect_err("0 + P should return an error");
// 𝒪 + 𝒪 should return an error
zero.add_incomplete(layouter.namespace(|| "𝒪 + 𝒪"), &zero)
zero.add_incomplete(layouter.namespace(|| "𝒪 + 𝒪"), zero)
.expect_err("𝒪 + 𝒪 should return an error");
Ok(())