meerkat-java/destributed-key-generation/src/test/java/FeldmanVerifiableSecretSharing/VerifiableSecretSharingTest...

70 lines
2.4 KiB
Java
Raw Normal View History

2016-01-29 15:08:13 -05:00
package FeldmanVerifiableSecretSharing;
2016-02-17 15:58:20 -05:00
import Communication.Network;
import ShamirSecretSharing.Polynomial;
2016-02-05 06:30:16 -05:00
import org.factcenter.qilin.primitives.concrete.Zpstar;
2016-01-29 15:08:13 -05:00
import org.junit.Before;
import org.junit.Test;
import java.math.BigInteger;
import java.util.Random;
/**
* Created by Tzlil on 1/29/2016.
*/
public class VerifiableSecretSharingTest {
VerifiableSecretSharing[] verifiableSecretSharingArray;
int tests = 1 << 10;
Random random;
2016-02-07 07:38:47 -05:00
@Before
2016-01-29 15:08:13 -05:00
public void settings(){
BigInteger p = BigInteger.valueOf(2903);
2016-02-05 06:30:16 -05:00
BigInteger q = p.subtract(BigInteger.ONE).divide(BigInteger.valueOf(2));
2016-02-07 07:38:47 -05:00
Zpstar zpstar = new Zpstar(p);
random = new Random();
BigInteger g;
BigInteger ZERO = zpstar.zero();
do{
g = zpstar.sample(random);
}while (!g.equals(ZERO) && !zpstar.multiply(g,q).equals(ZERO));// sample from QRZp*
2016-02-05 06:30:16 -05:00
int t = 8;
2016-01-29 15:08:13 -05:00
int n = 20;
2016-02-17 15:58:20 -05:00
Network network;
2016-01-29 15:08:13 -05:00
verifiableSecretSharingArray = new VerifiableSecretSharing[tests];
for (int i = 0; i < verifiableSecretSharingArray.length; i++){
2016-02-17 15:58:20 -05:00
network = new Network(n);
2016-02-05 06:30:16 -05:00
verifiableSecretSharingArray[i] = new VerifiableSecretSharing(t,n
2016-02-17 15:58:20 -05:00
,new BigInteger(q.bitLength(),random).mod(q),random,p,q,g,network);
2016-01-29 15:08:13 -05:00
}
}
public void oneTest(VerifiableSecretSharing verifiableSecretSharing) throws Exception {
int n = verifiableSecretSharing.getN();
2016-02-07 07:38:47 -05:00
Zpstar zpstar = verifiableSecretSharing.getZpstar();
2016-01-29 15:08:13 -05:00
BigInteger g = verifiableSecretSharing.getGenerator();
Polynomial.Point[] shares = new Polynomial.Point[n];
BigInteger[] commitments = verifiableSecretSharing.getCommitments();
BigInteger[] verifications = new BigInteger[n];
for (int i = 1 ; i <= shares.length; i ++){
2016-02-17 15:58:20 -05:00
shares[i - 1] = verifiableSecretSharing.getShare(i);
2016-02-05 06:30:16 -05:00
verifications[i - 1] = VerifiableSecretSharing.verify(i,commitments,zpstar);
2016-01-29 15:08:13 -05:00
}
BigInteger expected;
for (int i = 0 ; i < shares.length ; i++){
2016-02-05 06:30:16 -05:00
expected = zpstar.multiply(g,shares[i].y);
2016-01-29 15:08:13 -05:00
assert (expected.equals(verifications[i]));
}
}
2016-02-07 07:38:47 -05:00
@Test
2016-01-29 15:08:13 -05:00
public void secretSharingTest() throws Exception {
for (int i = 0 ; i < verifiableSecretSharingArray.length; i ++){
oneTest(verifiableSecretSharingArray[i]);
}
}
}