From 3e43cae526feeedc125b2865b6ab2f7848063760 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Fri, 27 Jul 2018 10:28:08 -0600 Subject: [PATCH] Add test that torsion doesn't affect signature verification. --- src/redjubjub.rs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/redjubjub.rs b/src/redjubjub.rs index 994ca52..d6604e9 100644 --- a/src/redjubjub.rs +++ b/src/redjubjub.rs @@ -155,10 +155,39 @@ mod tests { use pairing::bls12_381::Bls12; use rand::thread_rng; - use jubjub::JubjubBls12; + use jubjub::{JubjubBls12, fs::Fs, edwards}; use super::*; + #[test] + fn cofactor_check() { + let rng = &mut thread_rng(); + let params = &JubjubBls12::new(); + let inf = edwards::Point::zero(); + let p_g = FixedGenerators::SpendingKeyGenerator; + + let p8 = loop { + let r = edwards::Point::::rand(rng, params).mul(Fs::char(), params); + + let r2 = r.double(params); + let r4 = r2.double(params); + let r8 = r4.double(params); + + if r2 != inf && r4 != inf && r8 == inf { + break r; + } + }; + + let sk = PrivateKey::(rng.gen()); + let vk = PublicKey::from_private(&sk, p_g, params); + let msg = b"Foo bar"; + let sig = sk.sign(msg, rng, p_g, params); + assert!(vk.verify(msg, &sig, p_g, params)); + + let vktorsion = PublicKey(vk.0.add(&p8, params)); + assert!(vktorsion.verify(msg, &sig, p_g, params)); + } + #[test] fn round_trip_serialization() { let rng = &mut thread_rng();