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