View Javadoc
1   package civitas.crypto.proofdvr;
2   
3   import static org.mockito.Mockito.mock;
4   
5   import java.util.List;
6   
7   import civitas.crypto.ciphertextlist.ElGamalCiphertextListTestData;
8   import civitas.util.CivitasBigInteger;
9   import civitas.util.CivitasBigIntegerFactory;
10  
11  public interface ElGamalProofDVRTestData extends ElGamalCiphertextListTestData {
12  
13  	byte[] EL_GAMAL_PROOF_DVR_HASH = "proofdvrhash".getBytes();
14  	CivitasBigInteger DVR_HASH = CivitasBigIntegerFactory.obtain(1, EL_GAMAL_PROOF_DVR_HASH);
15  
16  	CivitasBigInteger DVR_U =
17  			RANDOMS_0.modAdd(ZETA.modMultiply(DVR_HASH.modAdd(RANDOMS_1, BIGINT_Q), BIGINT_Q), BIGINT_Q);
18  	ElGamalProofDVR EL_GAMAL_PROOF_DVR =
19  			new ElGamalProofDVR(CIPHERTEXT_E, CIPHERTEXT_EPRIME, DVR_HASH, RANDOMS_1, RANDOMS_2, DVR_U);
20  	ElGamalProofDVR EL_GAMAL_PROOF_DVR_BAD =
21  			new ElGamalProofDVR(CIPHERTEXT_E, CIPHERTEXT_EPRIME, BIGINT_B, RANDOMS_1, RANDOMS_2, DVR_U);
22  
23  	CivitasBigInteger EL_GAMAL_PROOF_DVR_AP = BIGINT_G.modPow(EL_GAMAL_PROOF_DVR.u(), BIGINT_P)
24  			.modDivide(
25  					EL_GAMAL_PROOF_DVR
26  							.eprime()
27  							.getA()
28  							.modDivide(EL_GAMAL_PROOF_DVR.e().getA(), BIGINT_P)
29  							.modPow(EL_GAMAL_PROOF_DVR.c().modAdd(EL_GAMAL_PROOF_DVR.w(), BIGINT_Q), BIGINT_P),
30  					BIGINT_P);
31  	CivitasBigInteger EL_GAMAL_PROOF_DVR_BP = EL_GAMAL_PUBLIC_KEY_E
32  			.y
33  			.modPow(EL_GAMAL_PROOF_DVR.u(), BIGINT_P)
34  			.modDivide(
35  					EL_GAMAL_PROOF_DVR
36  							.eprime()
37  							.b
38  							.modDivide(EL_GAMAL_PROOF_DVR.e().getB(), BIGINT_P)
39  							.modPow(EL_GAMAL_PROOF_DVR.c().modAdd(EL_GAMAL_PROOF_DVR.w(), BIGINT_Q), BIGINT_P),
40  					BIGINT_P);
41  	CivitasBigInteger EL_GAMAL_PROOF_DVR_SP = BIGINT_G.modPow(EL_GAMAL_PROOF_DVR.w(), BIGINT_P)
42  			.modMultiply(EL_GAMAL_PUBLIC_KEY_EPRIME.y.modPow(EL_GAMAL_PROOF_DVR.r(), BIGINT_P), BIGINT_P);
43  
44  	List<CivitasBigInteger> EL_GAMAL_PROOF_DVR_ENV = List.of(
45  			EL_GAMAL_PROOF_DVR.e().getA(),
46  			EL_GAMAL_PROOF_DVR.e().getB(),
47  			EL_GAMAL_PROOF_DVR.eprime().a,
48  			EL_GAMAL_PROOF_DVR.eprime().b,
49  			EL_GAMAL_PROOF_DVR_AP,
50  			EL_GAMAL_PROOF_DVR_BP,
51  			EL_GAMAL_PROOF_DVR_SP);
52  
53  	CivitasBigInteger FAKE_PROOF_DVR_AT = BIGINT_G.modPow(RANDOMS_2, BIGINT_P)
54  			.modDivide(CIPHERTEXT_EPRIME.a.modDivide(CIPHERTEXT_E.a, BIGINT_P).modPow(RANDOMS_0, BIGINT_P), BIGINT_P);
55  	CivitasBigInteger FAKE_PROOF_DVR_BT = EL_GAMAL_PUBLIC_KEY_E
56  			.y
57  			.modPow(RANDOMS_2, BIGINT_P)
58  			.modDivide(CIPHERTEXT_EPRIME.b.modDivide(CIPHERTEXT_E.b, BIGINT_P).modPow(RANDOMS_0, BIGINT_P), BIGINT_P);
59  	CivitasBigInteger FAKE_PROOF_DVR_ST = BIGINT_G.modPow(RANDOMS_1, BIGINT_P);
60  
61  	List<CivitasBigInteger> FAKE_PROOF_DVR_ENV = List.of(
62  			CIPHERTEXT_E.getA(),
63  			CIPHERTEXT_E.getB(),
64  			CIPHERTEXT_EPRIME.getA(),
65  			CIPHERTEXT_EPRIME.getB(),
66  			FAKE_PROOF_DVR_AT,
67  			FAKE_PROOF_DVR_BT,
68  			FAKE_PROOF_DVR_ST);
69  	byte[] FAKE_PROOF_DVR_HASH = "fakeproofdvrhash".getBytes();
70  	CivitasBigInteger FAKE_PROOF_DVR_CT =
71  			CivitasBigIntegerFactory.obtain(1, FAKE_PROOF_DVR_HASH).mod(BIGINT_Q);
72  
73  	CivitasBigInteger FAKE_PROOF_DVR_WT = RANDOMS_0.modSubtract(FAKE_PROOF_DVR_CT, BIGINT_Q);
74  	CivitasBigInteger FAKE_PROOF_DVR_RT =
75  			RANDOMS_1.modSubtract(FAKE_PROOF_DVR_WT, BIGINT_Q).modDivide(EL_GAMAL_PRIVATE_KEY_EPRIME.x(), BIGINT_Q);
76  
77  	ElGamalProofDVR FAKE_PROOF_DVR = new ElGamalProofDVR(
78  			CIPHERTEXT_E, CIPHERTEXT_EPRIME, FAKE_PROOF_DVR_CT, FAKE_PROOF_DVR_WT, FAKE_PROOF_DVR_RT, RANDOMS_2);
79  
80  	List<ElGamalProofDVR> PROOF_LIST = ENCRYPTED_SIGNED_VOTE_CAPABILITIES.stream()
81  			.map(x -> new ElGamalProofDVR(
82  					x,
83  					PROOF_EPRIMES.get(ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x)),
84  					mock(CivitasBigInteger.class),
85  					mock(CivitasBigInteger.class),
86  					mock(CivitasBigInteger.class),
87  					mock(CivitasBigInteger.class)))
88  			.toList();
89  	ElGamalProofDVR[] PROOFS = PROOF_LIST.toArray(new ElGamalProofDVR[0]);
90  
91  	ElGamalProofDVR[] PROOFS_CAP_NONVERIFY = PROOF_LIST.stream()
92  			.map(x -> new ElGamalProofDVR(
93  					POSTED_CAPABILITIES_NONVERIFY[PROOF_LIST.indexOf(x)], x.eprime(), x.c(), x.w(), x.r(), x.u()))
94  			.toList()
95  			.toArray(new ElGamalProofDVR[0]);
96  }