1 package civitas.crypto.ciphertextlist.tests;
2
3 import static org.mockito.Mockito.mock;
4
5 import java.util.List;
6 import java.util.stream.IntStream;
7
8 import civitas.crypto.ciphertext.ElGamalCiphertext;
9 import civitas.crypto.ciphertext.ElGamalCiphertextish;
10 import civitas.crypto.ciphertext.tests.ElGamalCiphertextTestData;
11 import civitas.crypto.ciphertextlist.CiphertextList;
12 import civitas.crypto.signedciphertext.ElGamalSignedCiphertext;
13 import civitas.crypto.votecapabilityshare.tests.VoteCapabilityTestData;
14 import civitas.util.CivitasBigInteger;
15 import civitas.util.CivitasBigIntegerFactory;
16
17 public interface ElGamalCiphertextListTestData extends ElGamalCiphertextTestData, VoteCapabilityTestData {
18
19 CiphertextList EMPTY_LIST = new CiphertextList();
20
21 CiphertextList CIPHERTEXTLIST_ONE_LONG = new CiphertextList(List.of(EL_GAMAL_CIPHERTEXT_ONE));
22
23 CiphertextList CIPHERTEXTLIST_TWO_LONG =
24 new CiphertextList(List.of(EL_GAMAL_CIPHERTEXT_ONE, EL_GAMAL_CIPHERTEXT_TWO));
25
26 CiphertextList CIPHERTEXTLIST_ZEROSIZED = new CiphertextList();
27 CiphertextList CIPHERTEXTLIST_ONEINSIDE = new CiphertextList(List.of(CIPHERTEXT_E));
28 CiphertextList CIPHERTEXTLIST = new CiphertextList(List.of(CIPHERTEXT_E, CIPHERTEXT_EPRIME));
29
30 int NO_OF_WELL_KNOWN_CIPHERTEXTS = 4;
31
32 CiphertextList CIPHERTEXT_LIST = new CiphertextList(IntStream.range(0, NO_OF_WELL_KNOWN_CIPHERTEXTS)
33 .mapToObj(
34 i -> new ElGamalCiphertext(ONE, BIGINT_G.modPow(CivitasBigIntegerFactory.obtain(i + 1), BIGINT_P)))
35 .toList());
36 List<ElGamalSignedCiphertext> ENCRYPTED_SIGNED_VOTE_CAPABILITIES = VOTE_CAPABILITIES.stream()
37 .map(x -> new ElGamalSignedCiphertext(
38 mock(
39 CivitasBigInteger.class,
40 "ENCRYPTED_SIGNED_VOTE_CAPABILITIES_A" + VOTE_CAPABILITIES.indexOf(x)),
41 mock(
42 CivitasBigInteger.class,
43 "ENCRYPTED_SIGNED_VOTE_CAPABILITIES_B" + VOTE_CAPABILITIES.indexOf(x)),
44 mock(
45 CivitasBigInteger.class,
46 "ENCRYPTED_SIGNED_VOTE_CAPABILITIES_C" + VOTE_CAPABILITIES.indexOf(x)),
47 mock(
48 CivitasBigInteger.class,
49 "ENCRYPTED_SIGNED_VOTE_CAPABILITIES_D" + VOTE_CAPABILITIES.indexOf(x))))
50 .toList();
51 List<ElGamalCiphertext> ENCRYPTED_VOTE_CAPABILITIES = ENCRYPTED_SIGNED_VOTE_CAPABILITIES.stream()
52 .map(x -> mock(
53 ElGamalCiphertext.class,
54 "ENCRYPTED_VOTE_CAPABILITIES_" + ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x)))
55 .toList();
56 List<ElGamalCiphertext> ENCRYPTED_VOTE_CAPABILITIES_WITH_EPRIME = VOTE_CAPABILITIES.stream()
57 .map(x -> mock(
58 ElGamalCiphertext.class, "ENCRYPTED_VOTE_CAPABILITIES_WITH_EPRIME_" + VOTE_CAPABILITIES.indexOf(x)))
59 .toList();
60 ElGamalSignedCiphertext[] POSTED_CAPABILITIES =
61 ENCRYPTED_SIGNED_VOTE_CAPABILITIES.toArray(new ElGamalSignedCiphertext[0]);
62 ElGamalSignedCiphertext[] POSTED_CAPABILITIES_NONVERIFY = VOTE_CAPABILITIES.stream()
63 .map(x -> mock(
64 ElGamalSignedCiphertext.class, "POSTED_CAPABILITIES_NONVERIFY_" + VOTE_CAPABILITIES.indexOf(x)))
65 .toList()
66 .toArray(new ElGamalSignedCiphertext[0]);
67
68 List<CivitasBigInteger> DS = RANDOMS.subList(0, NO_OF_WELL_KNOWN_CIPHERTEXTS);
69 List<CivitasBigInteger> RS = RANDOMS.subList(NO_OF_WELL_KNOWN_CIPHERTEXTS, NO_OF_WELL_KNOWN_CIPHERTEXTS * 2);
70
71 CivitasBigInteger SUM = DS.stream().reduce(ZERO, (a, b) -> {
72 if (b != DS.get(MY_CHOICE.ordinal())) {
73 return a.modAdd(b, BIGINT_Q);
74 }
75 return a;
76 });
77
78 List<ElGamalCiphertextish> REENCRYPTED_VOTE_CAPABILITIES = ENCRYPTED_SIGNED_VOTE_CAPABILITIES.stream()
79 .map(x -> (ElGamalCiphertextish) new ElGamalCiphertext(
80 mock(
81 CivitasBigInteger.class,
82 "REENCRYPTED_VOTE_CAPABILITIES_A" + ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x)),
83 mock(
84 CivitasBigInteger.class,
85 "REENCRYPTED_VOTE_CAPABILITIES_B" + ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x))))
86 .toList();
87
88 List<ElGamalCiphertextish> REENCRYPTED_VOTE_CAPABILITIES_WITH_KEY_E = ENCRYPTED_SIGNED_VOTE_CAPABILITIES.stream()
89 .map(x -> (ElGamalCiphertextish) new ElGamalCiphertext(
90 mock(
91 CivitasBigInteger.class,
92 "REENCRYPTED_VOTE_CAPABILITIES_E_A" + ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x)),
93 mock(
94 CivitasBigInteger.class,
95 "REENCRYPTED_VOTE_CAPABILITIES_E_B" + ENCRYPTED_SIGNED_VOTE_CAPABILITIES.indexOf(x))))
96 .toList();
97
98 List<ElGamalCiphertext> PROOF_EPRIMES = List.of(
99 new ElGamalCiphertext(
100 mock(CivitasBigInteger.class, "eprime_a0"), mock(CivitasBigInteger.class, "eprime_b0")),
101 new ElGamalCiphertext(
102 mock(CivitasBigInteger.class, "eprime_a1"), mock(CivitasBigInteger.class, "eprime_b1")),
103 new ElGamalCiphertext(
104 mock(CivitasBigInteger.class, "eprime_a2"), mock(CivitasBigInteger.class, "eprime_b2")),
105 new ElGamalCiphertext(
106 mock(CivitasBigInteger.class, "eprime_a3"), mock(CivitasBigInteger.class, "eprime_b3")));
107 }