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 }