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 }