()
| 423 | |
| 424 | #[test] |
| 425 | fn pseudonym() { |
| 426 | let mut rng = StdRng::seed_from_u64(0u64); |
| 427 | |
| 428 | let params = SetupParams::<Bls12_381>::new::<Blake2b512>(b"test"); |
| 429 | let prepared_params = PreparedSetupParams::<Bls12_381>::from(params.clone()); |
| 430 | |
| 431 | // Signer's setup |
| 432 | let isk = IssuerSecretKey::new(&mut rng); |
| 433 | let ipk = IssuerPublicKey::new(&mut rng, &isk, ¶ms); |
| 434 | let prepared_ipk = PreparedIssuerPublicKey::new(ipk.clone(), params.clone()); |
| 435 | |
| 436 | // Signer creates user secret key |
| 437 | let user_id = compute_random_oracle_challenge::<Fr, Blake2b512>(b"low entropy user-id"); |
| 438 | |
| 439 | let start = Instant::now(); |
| 440 | let usk = UserSecretKey::new(user_id, &isk, prepared_params.clone()); |
| 441 | println!("Time to create user secret key {:?}", start.elapsed()); |
| 442 | |
| 443 | let start = Instant::now(); |
| 444 | usk.verify(user_id, &ipk, prepared_params.clone()).unwrap(); |
| 445 | println!("Time to verify user secret key {:?}", start.elapsed()); |
| 446 | |
| 447 | // Verifier gives message and context to user |
| 448 | let context = b"test-context"; |
| 449 | let msg = b"test-message"; |
| 450 | |
| 451 | // Generate Z from context |
| 452 | let Z = affine_group_elem_from_try_and_incr::<G1Affine, Blake2b512>(context); |
| 453 | |
| 454 | // User generates a pseudonym |
| 455 | let start = Instant::now(); |
| 456 | let protocol = PseudonymGenProtocol::init( |
| 457 | &mut rng, |
| 458 | Z.clone(), |
| 459 | user_id.clone(), |
| 460 | None, |
| 461 | &usk, |
| 462 | prepared_ipk.clone(), |
| 463 | prepared_params.clone(), |
| 464 | ); |
| 465 | let mut chal_bytes = vec![]; |
| 466 | protocol |
| 467 | .challenge_contribution(&Z, &mut chal_bytes) |
| 468 | .unwrap(); |
| 469 | // Add message to the transcript (message contributes to challenge) |
| 470 | chal_bytes.extend_from_slice(msg); |
| 471 | let challenge_prover = compute_random_oracle_challenge::<Fr, Blake2b512>(&chal_bytes); |
| 472 | let proof = protocol.gen_proof(&challenge_prover); |
| 473 | println!("Time to create proof {:?}", start.elapsed()); |
| 474 | println!("Size of proof {} bytes", proof.compressed_size()); |
| 475 | |
| 476 | // Verifier checks the correctness of the pseudonym |
| 477 | let start = Instant::now(); |
| 478 | let mut chal_bytes = vec![]; |
| 479 | proof.challenge_contribution(&Z, &mut chal_bytes).unwrap(); |
| 480 | // Add message to the transcript (message contributes to challenge) |
| 481 | chal_bytes.extend_from_slice(msg); |
| 482 | let challenge_verifier = compute_random_oracle_challenge::<Fr, Blake2b512>(&chal_bytes); |
nothing calls this directly
no test coverage detected