70 lines
2.4 KiB
Java
70 lines
2.4 KiB
Java
package FeldmanVerifiableSecretSharing;
|
|
|
|
import Communication.Network;
|
|
import ShamirSecretSharing.Polynomial;
|
|
import org.factcenter.qilin.primitives.concrete.Zpstar;
|
|
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;
|
|
|
|
@Before
|
|
public void settings(){
|
|
BigInteger p = BigInteger.valueOf(2903);
|
|
BigInteger q = p.subtract(BigInteger.ONE).divide(BigInteger.valueOf(2));
|
|
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*
|
|
int t = 8;
|
|
int n = 20;
|
|
Network network;
|
|
verifiableSecretSharingArray = new VerifiableSecretSharing[tests];
|
|
for (int i = 0; i < verifiableSecretSharingArray.length; i++){
|
|
network = new Network(n);
|
|
verifiableSecretSharingArray[i] = new VerifiableSecretSharing(t,n
|
|
,new BigInteger(q.bitLength(),random).mod(q),random,p,q,g,network);
|
|
}
|
|
}
|
|
|
|
public void oneTest(VerifiableSecretSharing verifiableSecretSharing) throws Exception {
|
|
int n = verifiableSecretSharing.getN();
|
|
Zpstar zpstar = verifiableSecretSharing.getZpstar();
|
|
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 ++){
|
|
shares[i - 1] = verifiableSecretSharing.getShare(i);
|
|
verifications[i - 1] = VerifiableSecretSharing.verify(i,commitments,zpstar);
|
|
}
|
|
BigInteger expected;
|
|
for (int i = 0 ; i < shares.length ; i++){
|
|
expected = zpstar.multiply(g,shares[i].y);
|
|
assert (expected.equals(verifications[i]));
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void secretSharingTest() throws Exception {
|
|
for (int i = 0 ; i < verifiableSecretSharingArray.length; i ++){
|
|
oneTest(verifiableSecretSharingArray[i]);
|
|
}
|
|
}
|
|
}
|