View Javadoc
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 }