package FeldmanVerifiableSecretSharing; import FeldmanVerifiableSecretSharing.ShamirSecretSharing.Polynomial; import FeldmanVerifiableSecretSharing.ShamirSecretSharing.SecretSharing; import org.factcenter.qilin.primitives.CyclicGroup; import org.factcenter.qilin.primitives.concrete.Zn; import org.junit.Before; import org.junit.Test; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; 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); CyclicGroup group = new Zn(p); int t = 10; int n = 20; random = new Random(); verifiableSecretSharingArray = new VerifiableSecretSharing[tests]; for (int i = 0; i < verifiableSecretSharingArray.length; i++){ verifiableSecretSharingArray[i] = new VerifiableSecretSharing(group,t,n,group.sample(random),random); } } public void oneTest(VerifiableSecretSharing verifiableSecretSharing) throws Exception { int n = verifiableSecretSharing.getN(); BigInteger p = verifiableSecretSharing.getP(); CyclicGroup group = verifiableSecretSharing.getGroup(); 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,group); } BigInteger expected; for (int i = 0 ; i < shares.length ; i++){ expected = group.multiply(g,shares[i].y).mod(p); // problem with Zn, multiplication doesn't mod n as required assert (expected.equals(verifications[i])); } } @Test public void secretSharingTest() throws Exception { for (int i = 0 ; i < verifiableSecretSharingArray.length; i ++){ oneTest(verifiableSecretSharingArray[i]); } } }