mod utils; use blsful::*; use rstest::*; use utils::*; #[rstest] #[case::g1(Bls12381G1Impl)] #[case::g2(Bls12381G2Impl)] fn proof_of_knowledge_works(#[case] _c: C) { let sk = SecretKey::::new(); let pk = sk.public_key(); let sig = sk.sign(SignatureSchemes::Basic, TEST_MSG).unwrap(); let res = ProofCommitment::generate(TEST_MSG, sig); assert!(res.is_ok()); let (comm, x) = res.unwrap(); let y = ProofCommitmentChallenge::::new(); let res = comm.finalize(x, y, sig); assert!(res.is_ok()); let proof = res.unwrap(); assert!(proof.verify(pk, TEST_MSG, y).is_ok()); let y2 = ProofCommitmentChallenge::::new(); assert!(proof.verify(pk, TEST_MSG, y2).is_err()); } #[rstest] #[case::g1(Bls12381G1Impl)] #[case::g2(Bls12381G2Impl)] fn proof_of_knowledge_timestamp_works(#[case] _c: C) { let sk = SecretKey::::new(); let pk = sk.public_key(); let sig = sk .sign(SignatureSchemes::ProofOfPossession, TEST_MSG) .unwrap(); let mut proof = ProofOfKnowledgeTimestamp::generate(TEST_MSG, sig).unwrap(); assert!(proof.verify(pk, TEST_MSG, None).is_ok()); proof.timestamp -= 10; assert!(proof.verify(pk, TEST_MSG, Some(3)).is_err()); }