1 package civitas.crypto.parameters.tests;
2
3 import java.util.AbstractMap;
4 import java.util.Base64;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.stream.Collectors;
8
9 import civitas.common.CommonUtil;
10 import civitas.common.VoteChoice;
11 import civitas.crypto.parameters.ElGamalParameters;
12 import civitas.crypto.parameters.PrimePair;
13 import civitas.util.CivitasBigInteger;
14 import civitas.util.CivitasBigIntegerFactory;
15 import civitas.util.tests.BasicValuesTestData;
16
17 public interface ElGamalParametersTestData extends BasicValuesTestData {
18
19 String BIGINT_P_BASE64 =
20 "AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0gWk4zQiy9p87hS+sgNkxYr5okLM6HhXFTu2eUFgf5BQjju2YsvFhOXce4yJ00rsGSGeZAg5bT1Z45SdexGMevXEdCZrADRdikYU0ZLFTN7UWopWgLXd3DBfu3CY2fzwYzq0YWS0bzJ3cQA4fSAyFdU+Tekcd3vwQlkthh7WJW0VCYF1hGFdiGt9/aDQ7cDrW+fqbg4xrUN+wKoFbEHNHomUkGMaXsGyM9vyLCjtp9Jf/UXQSU9X+jAJS+Y7VXyEa9/ifHxsjAExE5RYpNWzqgjJRoiADVL1XeoqvdL/ltcEhAeq3TnhHNIi7cEGQZSGCvSVMiDPn2JBUeY8AswihwZhI7IiqroysQy6UcsZ45oACaVH0ZYSMSIvuGimPhqv0OVbR95lXipxaoHlygq8pLWJWlgVj9KIQQG1wTnD80liudqIdQ+/yuo10YxtGacmC7YxB/atrTgbJ8V/wRDRQw==";
21 CivitasBigInteger BIGINT_P =
22 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(BIGINT_P_BASE64));
23 String BIGINT_Q_BASE64 = "ALEbdrNCujCQI0Y4f38yusJkfR1nVqT95/P/H2z28zIH";
24 CivitasBigInteger BIGINT_Q =
25 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(BIGINT_Q_BASE64));
26 String BIGINT_G_BASE64 =
27 "az5EMeordK3a0VbjoUsKeo/++OHFs5WaRLw6hW8Ezu7D1Egid0U3Obtzpn0GG8UHQjJnHINqwK6bX6RXBlVfsDmiKS2lgvWrL53vSPXtZfFIC/307vWLV2RymA9TQaGZ5d4q7O7l2KHNUx+ecK6QVqKqj46IXjwaYzKQXNg2NfwQGfj7dBTaoGHE401pdoHfyLfluAF3k4ZT6imEoIbe4Ar7ybYdI5eJYn96/hoyLouux8jI1LE+Oe7+eI1M5WK30TPbGKVaon4KPnfLYp8+HTloYb/jlNFLckqdZchKa765pBRjvNu+7MmYpHmqBlLuCLd4sBbD//Sy/aHPnxyccZM0MMwRPSSM0NKO8UuXkCEmRSI6gvdwyIk6FwsB8bF4ksvBAMSfN8gJd7rv1t9B46OByCs8YNuL1eJH1wJThwpUf1iAXPjFCkvrR4fm+lOeIYCGhBkEO1pB2sRzTulRVEadM6bFwo2N5eZb3ymPfERXogTVmljtdzxlAao9vBgk";
28 CivitasBigInteger BIGINT_G =
29 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(BIGINT_G_BASE64));
30 CivitasBigInteger G_EXP_A = BIGINT_G.modPow(BIGINT_A, BIGINT_P);
31 String G_EXP_A_BASE64 = CommonUtil.fromBigInt(G_EXP_A);
32 CivitasBigInteger G_EXP_B = BIGINT_G.modPow(BIGINT_B, BIGINT_P);
33 String G_EXP_B_BASE64 = CommonUtil.fromBigInt(G_EXP_B);
34 CivitasBigInteger G_EXP_C = BIGINT_G.modPow(BIGINT_C, BIGINT_P);
35 String G_EXP_C_BASE64 = CommonUtil.fromBigInt(G_EXP_C);
36 CivitasBigInteger G_EXP_D = BIGINT_G.modPow(BIGINT_D, BIGINT_P);
37 String G_EXP_D_BASE64 = CommonUtil.fromBigInt(G_EXP_D);
38
39 String P_OTHER_BASE64 =
40 "AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8tZIaH63gtefkwkLYnCdtF2sMI5MRddL3IgM7SZK+auYCtQitiTHGI0TF8xu5lDM7bV4GvZA6tTBEaKS9EMxD34H+5xFtBtRqWuCI6XMPEMJg71eqhVT3M5yEqwA1wJXXvD/oKs6nlx+MxcEzb9kQweaVE6aOa/9hPMFdU0wL2ZatNOJfN2+CmsweXdC/gnZSX4ySmWAGP4JTHq4abv1SN4JwkUzgsrWownWy2Pzm5fiCeQBc0yn70GTSdIxuDnfX9em+ORiSXhlh7+ddNcgvC35wkHmfjWELTBhUDUh1L8gQWWEQsq2m56u2cv6sdY6FYo2GuxzASJ9vIWQBDS1Et9AJzs3dVN4PjdKWt2peAKGb1Gl5rcBEmM5b3oYhWzSLSu8axcU2dqP0FNvPpkrD98hEAvWyW2sU/xdk4wwGSw==";
41
42 String G_OTHER_BASE64 =
43 "UVvkQGS9ULYLZfgomIk1JPAkhBjF3FJJf2v/BESOIa0GSawzuu8+UJ3AhsmgF+bb8jhqfUq/UTqyBTR2IFKyItkUrb/B1UoK/wvaw0kbKyfjUrCGXnXOHnIE8bu/6Drjj2QzDy69kKJP37PGhd/jaRxdqGiSoEy1TAD1a/mjkjhmJmUSk4FZdtXUW6rwlq40C63dlKW2pWru+B6XRjtURM1RP4w7joKvcV2N4x3OAQs3/skjmUXyRQoU1k23eoNCee4wYadG+fne2+4MTvr/Qb6JIG4TOEmGmWO3ADHdwOHQxy515OTMP+DoffBMHFZKy7OZnC4G7q/+qHzVbVAJc8iwLVy73zDt21g7PgvEUB+ndESkhWUmVTNBtWANLGgDswoyvZXX8wu1JC5lI485dm8ux8VP5k/4j9TYIA9PzDRxs8M6ykF5ej4XAaa80Yuzpbxw7Eex2rZHiys79Hn3jiM5vhOTND8hdb4Qexhqu5jQw4rwj0j094M921WrScq6";
44 String P2_BASE64 =
45 "AIbUeE2FqsTt9fCnfKQj4Gfi0E9YJs3T8CQeXlHdvFghFLqEvqG+0i9FSS6KCPuIrvJTQpP0UK7jmz9ho0nV2kuB8CDK8X0B8OzgIzCMwy5LpEEzZsKhy9G1jV3YyehkqfxZdKkupPZ1M5HI+BNZOR8ohWm/6k7aRon9Z2zs6RfJKD3h9QV8pLJdtX+cFs0hMfv4u8O57H2+W/J2QKd06knDmx05NIXUPzNAJ6ocl4ndjzXxUKwgC0H6191uDei3qJukuW+ZDVEZYmfLUPieeUIPo1HTljnKfqEv+mdyMcEfJrOEzzXB7jRTT3QohtFzZXa6/KmcZ9FdWh54+H2//6ryNyE2oNypfTKWvxxicmUJTeKJDR+lpaBiDzSfs9XM6rcEWVkkWD33YjHb+5M2gkMgJEXx3WrYiIEyyKav7I+ezSlllEk3pwgMBmJW+jgiI+I9ByU87PWNGzKys5rUvFBaF9RCz21zzw2LEvXDYvlkk+QaPPIKj7AM4M+7wKeuSw==";
46 String Q2_BASE64 = "APDDzsMTbD5LgggjvzFDfoK3x1BphByXkZqg7zBlHyvj";
47 String G2_BASE64 =
48 "FYuXPQPEApf/JDV2CPbfQGF11k1P3RZ3PRn7uH0eRQBSyCttyrEeVeDWMSSj8aDe8jSFBz/AmwOoZ8nMeLVvHoA58egzaej80FNFwF2K6+59hikJ5Wvf0VCKrq4ULv2TCdUnQ/7+XastFN8IEBzMwKXWX0l9xw9JVRNd98jAktkUjIFBjf1Vuoie5Niw3zJ8ySgbOzCymeamN1FxBZcWA29G561RicA0KryOG3BGH8rqWvnHIPyL5PCB6KILyXoKZfjqyrb12SMVcEXO+/y5+6HBu630e5SSFhfxu/5+ejHABwnuRwcdy2rSBIwqp0xKwwhllzTeWvSBWsf22MYwYCgFm8WpG8ZqAZeeXcSqmMeRVL8MPFKscxz6htkp8nB/lGysCvMiPnfAe5yUgOtmpRLAxfNiWdLdLSdRJ2q5aDXwp9GwVKSafmelv3qMs4hPERHpgGoQmMme7XDLrd2z4UxOquIvXUtcpYvp5FC11C5RgeXzYbU6bbPljzwx3vqf";
49 CivitasBigInteger P2 = CommonUtil.asBigint(P2_BASE64);
50 CivitasBigInteger Q2 = CommonUtil.asBigint(Q2_BASE64);
51 CivitasBigInteger G2 = CommonUtil.asBigint(G2_BASE64);
52
53 CivitasBigInteger BIGINT_P_OTHER = CommonUtil.asBigint(P_OTHER_BASE64);
54 CivitasBigInteger BIGINT_G_OTHER = CommonUtil.asBigint(G_OTHER_BASE64);
55 String GENERATOR_OTHER_BASE64 =
56 "B8Ewf1Z2BaJYadh/hzQ2kjNGPmYWBIvA6ZxHSpVpB/Sw4m40L8qWkwsNrfUh87L8GIJM0QZ4tHgYCdduHUjiWmcStRTh+2RvNoinIrK5QnxaW3g6Y2G32rxutDlOKwaoMMbrut50O8XN12mD4wR15inhh4+QVyzeobFVSPnpgheb2gt9i5pTKJY6JQkpcZnD4bHF+i7MGelqeoyGmLGqZu98ODsSxn2HfmMniV+p+aaTYJV8niINbYlvvz2BSwf86YdlQOa5WfzzPGSltmt5v5ACs135JCIw3kRzepRzjWGAINHv+SgPcBVSVTwtuBoykYhxzT03CWWo5WwZ+NzdmgDih7RheaQpMlIfSxP/5ZJVukgDxJv4v70F3KRwJ5V5jY26sjETz2Kayn6y38EfDuQjeOAUOamGYcHpdqKdPySJWTK0o6sfKIQ2etMZG0fUFEEt3CdsoGOUi31saXFDK4pkHqu+jQMzCg2Z5EsXwVgZ6J0SD1Nq/DDGvAU2lQdU";
57 CivitasBigInteger GENERATOR_OTHER = CommonUtil.asBigint(GENERATOR_OTHER_BASE64);
58 CivitasBigInteger GENERATOR_OTHER_POW_R1 = GENERATOR_OTHER.modPow(RANDOMS_1, BIGINT_P);
59 String GENERATOR_OTHER__POW_R1_BASE64 = CommonUtil.fromBigInt(GENERATOR_OTHER_POW_R1);
60
61 CivitasBigInteger GENERATOR_FOR_UNPRIME_P = CommonUtil.asBigint("APPuKv0SXyLaZklKlEiPMfeSkEfsEfdN24AXL3NrYBKG");
62 CivitasBigInteger GENERATOR_FOR_UNPRIME_Q = CommonUtil.asBigint("SlVGgqFXxlg=");
63
64 ElGamalParameters EL_GAMAL_PARAMETERS = new ElGamalParameters(BIGINT_P, BIGINT_Q, BIGINT_G);
65
66 ElGamalParameters EL_GAMAL_PARAMETERS_NEGATIVE_P =
67 new ElGamalParameters(BIGINT_P.multiply(CivitasBigIntegerFactory.obtain(-1)), BIGINT_Q, BIGINT_G);
68 ElGamalParameters EL_GAMAL_PARAMETERS_OTHER = new ElGamalParameters(P2, Q2, G2);
69
70 ElGamalParameters EL_GAMAL_PARAMETERS_Q_SAME = new ElGamalParameters(BIGINT_P_OTHER, BIGINT_Q, BIGINT_G_OTHER);
71
72 ElGamalParameters EL_GAMAL_PARAMETERS_GENERATOR_OTHER = new ElGamalParameters(BIGINT_P, BIGINT_Q, GENERATOR_OTHER);
73
74 CivitasBigInteger RANDOMS_0_PUBLISHED = BIGINT_G.modPow(RANDOMS_0, BIGINT_P);
75 int SAFE_KEY_LENGTH = 512;
76 String SAFE_P_BASE64 = "ASvIFyEHZA21reK32LTtYEwJG4GSW8Xzrl83llQSdjcztgsIJeyQm0ZZ36vG4aTVYjtADzV9J6xJ5RJ2U9QDfV8=";
77 String SAFE_Q_BASE64 = "AJXkC5CDsgba1vFb7Fp2sCYEjcDJLeL51y+byyoJOxuZ2wWEEvZITaMs79XjcNJqsR2gB5q+k9Yk8ok7KeoBvq8=";
78 String SAFE_G_BASE64 = "AKhY5FkyO989WVWT54UIYi29aZjUfx1XD0xlcF13Y7nGa7itniOZIj36m+m8XHW9VN0bzCgLh4btlHBQ8AY3dMo=";
79 CivitasBigInteger SAFE_P =
80 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(SAFE_P_BASE64));
81 CivitasBigInteger SAFE_Q =
82 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(SAFE_Q_BASE64));
83 CivitasBigInteger SAFE_G =
84 CivitasBigIntegerFactory.obtain(Base64.getDecoder().decode(SAFE_G_BASE64));
85
86 PrimePair SAFE_PRIMES = new PrimePair(SAFE_P, SAFE_Q);
87 PrimePair SCHNORR_PRIMES = new PrimePair(BIGINT_P, BIGINT_Q);
88 ElGamalParameters EL_GAMAL_PARAMETERS_SAFE = new ElGamalParameters(SAFE_P, SAFE_Q, SAFE_G);
89 CivitasBigInteger PLAINTEXT_WITH_LEGENDRE_MINUS_ONE = CivitasBigIntegerFactory.obtain(251_121);
90 CivitasBigInteger PUBLICIZED_SAFE_LEGENDRE = SAFE_P.subtract(PLAINTEXT_WITH_LEGENDRE_MINUS_ONE);
91 CivitasBigInteger D_EXP_TWOK_FROMP = BIGINT_D.modPow(BIGINT_P.subtract(ONE).divide(BIGINT_Q), BIGINT_P);
92
93 List<VoteChoice> CHOICES = List.of(VoteChoice.values());
94 Map<CivitasBigInteger, VoteChoice> DECODEMAP = CHOICES.stream()
95 .map(x -> new AbstractMap.SimpleEntry<>(
96 CivitasBigIntegerFactory.obtain(x.ordinal()).modMultiply(BIGINT_G, BIGINT_P), x))
97 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
98
99 CivitasBigInteger I_BEATS_J_ENCODED =
100 CivitasBigIntegerFactory.obtain(VoteChoice.I_BEATS_J.ordinal()).modMultiply(BIGINT_G, BIGINT_P);
101
102 CivitasBigInteger J_BEATS_I_ENCODED =
103 CivitasBigIntegerFactory.obtain(VoteChoice.J_BEATS_I.ordinal()).modMultiply(BIGINT_G, BIGINT_P);
104
105 Integer TWO_INT = 2;
106 CivitasBigInteger TWO_EXP_GROUP_LENGTH = TWO.pow(EL_GAMAL_GROUP_LENGTH);
107 CivitasBigInteger TWO_EXP_KEY_LENGTH = TWO.pow(EL_GAMAL_KEY_LENGTH);
108 String BIGINT_NO_PRIME_OF_GROUPLENGTH_BASE64 =
109 "AJzqQEe12aps6eODiQVPjfuBv2XCZ3zXJqNgJWBndSevG1TaxCQ6uE0Qo77OGE9uNOTIpYqDm0RVpW8+o5ILWI/s9CqZe2XKzsv2KzQBeaemnMxPgJ59BJ+TJ5yZSrowzR012Yic6fwUdn2a11AFfHRpHX9mw0dPjbpNIImzULSbEXU5ZNuWUx2RVNE2VMtcaGmj9P2FkOAwjU9zGDfenkc2WhywT0SP2qDXnaBwc3U4ucAmr/9URAggOIbbQv0fH2v6uVmIG9vaPLhUiZCfygm6j4VqFe936iHUD4cLV+pB68l9Ajh5qpBw1xceNZJBW6dOuUzSB1V/qcsMbvgyA3JylX5dBQTNpFaps95rcGKOAh4QyB9xuPI9Bmza0f3rMBK7zcRTrbD1OlkssrZhk1xB+0vKCIGzMEBy6QAwOv/Ymi8CgsHBpDamD4A9xmoMXGKnrQKzv4yPccARLtAyr8unzYKJcrgc2r6bLxgodbRTpCQnqUOhR936mfWzFRl62Q==";
110 String BIGINT_NO_PRIME_OF_KEYLENGTH_BASE64 = "AJew5gc10pHDbzKQUm2+rIFj7hYrP7aHqAfLkHdwDlnQ";
111 CivitasBigInteger BIGINT_NO_PRIME_OF_GROUPLENGTH = CommonUtil.asBigint(BIGINT_NO_PRIME_OF_GROUPLENGTH_BASE64);
112 CivitasBigInteger BIGINT_NO_PRIME_OF_KEYLENGTH = CommonUtil.asBigint(BIGINT_NO_PRIME_OF_KEYLENGTH_BASE64);
113
114 String EL_GAMAL_PARAMETERS_XML =
115 "<p>" + BIGINT_P_BASE64 + "</p><q>" + BIGINT_Q_BASE64 + "</q><g>" + BIGINT_G_BASE64 + "</g>";
116 }