public static void SetupReconstructionProtocol(Quorum quorum) { int n = quorum.Size; var input = new BigZp(prime, 20); var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var shares = BigShamirSharing.Share(input, n, polyDeg); for (int i = 0; i < n; i++) { TestParty<BigZp> party = new TestParty<BigZp>(); ReconstructionProtocol rp = new ReconstructionProtocol(party, quorum, new Share<BigZp>(shares[i])); party.UnderTest = rp; NetSimulator.RegisterParty(party); } }
public static void SetupShareMultiplicationProtocol(Quorum quorum) { int n = quorum.Size; var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var sharesA = BigShamirSharing.Share(new BigZp(prime, 20), n, polyDeg); var sharesB = BigShamirSharing.Share(new BigZp(prime, 3), n, polyDeg); for (int i = 0; i < n; i++) { TestParty<Share<BigZp>> party = new TestParty<Share<BigZp>>(); party.UnderTest = new ShareMultiplicationProtocol(party, quorum.Clone() as Quorum, new Share<BigZp>(sharesA[i]), new Share<BigZp>(sharesB[i])); NetSimulator.RegisterParty(party); } }
public static void SetupPrefixOrProtocol(Quorum quorum) { int n = quorum.Size; var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var sharesA = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesB = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesC = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesD = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); for (int i = 0; i < n; i++) { TestParty<List<Share<BigZp>>> party = new TestParty<List<Share<BigZp>>>(); party.UnderTest = new PrefixOperationProtocol(party, quorum, MakeList(sharesA[i], sharesB[i], sharesC[i], sharesD[i]), new SharedBitOr.ProtocolFactory(party, quorum)); NetSimulator.RegisterParty(party); } }
public static void SetupRandomGenProtocol(Quorum quorum) { int n = quorum.Size; for (int i = 0; i < n; i++) { TestParty<Share<BigZp>> party = new TestParty<Share<BigZp>>(); party.UnderTest = new RandGenProtocol(party, quorum.Clone() as Quorum, new BigZp(prime, i), prime); NetSimulator.RegisterParty(party); } }
/* public static void SetupSimpleCircuitEvaluation(Quorum quorum) { int n = quorum.Size; var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; Debug.Assert((n & (n - 1)) == 0); // is power of 2 network = new LPSortingNetwork(n); IList<BigZp>[] shares = new IList<BigZp>[n]; for (int i = 0; i < n; i++) shares[i] = BigShamirSharing.Share(new BigZp(prime, 500 - 2*i), n, polyDeg); foreach (var id in quorum.Members) { Dictionary<InputGateAddress, Share<BigZp>> inShares = new Dictionary<InputGateAddress, Share<BigZp>>(); int i = 0; foreach (var inAddr in network.Circuit.InputAddrs) { inShares[inAddr] = new Share<BigZp>(shares[i][id]); i++; } TestParty<IDictionary<OutputGateAddress, Share<BigZp>>> party = new TestParty<IDictionary<OutputGateAddress, Share<BigZp>>>(); party.UnderTest = new SecureGroupCircuitEvaluation(party, quorum.Clone() as Quorum, network.Circuit, inShares); NetSimulator.RegisterParty(party); } } */ public static void SetupMultiQuorumCircuitEvaluation(Quorum bigQuorum) { int n = bigQuorum.Size; int qSize = n / 2; var polyDeg = (int)Math.Ceiling(qSize / 3.0) - 1; var quorums = new List<Quorum>(); quorums.Add(new Quorum(0, 0, qSize)); quorums.Add(new Quorum(1, qSize, 2*qSize)); Debug.Assert((n & (n - 1)) == 0); // is power of 2 network = new LPSortingNetwork(n); //network = SortingNetworkFactory.CreateButterflyTournamentRound(n); network.CollapsePermutationGates(); IList<BigZp>[] shares = new IList<BigZp>[n]; for (int i = 0; i < n; i++) shares[i] = BigShamirSharing.Share(new BigZp(prime, 500 - 2 * i), qSize, polyDeg); Dictionary<Gate, Quorum> gqmapping = new Dictionary<Gate, Quorum>(); for (int i = 0; i < network.Circuit.TopologicalOrder.Count; i++) gqmapping[network.Circuit.TopologicalOrder[i]] = quorums[i]; foreach (var id in bigQuorum.Members) { Dictionary<InputGateAddress, Share<BigZp>> inShares = new Dictionary<InputGateAddress, Share<BigZp>>(); int i = 0; foreach (var inAddr in network.Circuit.InputAddrs) { inShares[inAddr] = new Share<BigZp>(shares[i][id % 4]); i++; } TestParty<IDictionary<OutputGateAddress, Share<BigZp>>> party = new TestParty<IDictionary<OutputGateAddress, Share<BigZp>>>(); Quorum[] quorumsClone = quorums.Select(a => a.Clone() as Quorum).ToArray(); party.UnderTest = new SecureMultiQuorumCircuitEvaluation<Share<BigZp>>(party, quorumsClone[id / qSize], quorumsClone, ProtocolIdGenerator.GenericIdentifier(0), network.Circuit, inShares, new BigZpShareGateEvaluationFactory(prime), gqmapping, prime); NetSimulator.RegisterParty(party); } }
public static void SetupLeastSignificantBit(Quorum quorum) { int n = quorum.Size; var input = new BigZp(prime, 2); var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var shares = BigShamirSharing.Share(input, n, polyDeg); for (int i = 0; i < n; i++) { TestParty<Share<BigZp>> party = new TestParty<Share<BigZp>>(); party.UnderTest = new LeastSignificantBitProtocol(party, quorum, new Share<BigZp>(shares[i])); NetSimulator.RegisterParty(party); } }
public static void SetupBitwiseRandomGeneration(Quorum quorum) { int n = quorum.Size; for (int i = 0; i < n; i++) { TestParty<List<Share<BigZp>>> party = new TestParty<List<Share<BigZp>>>(); party.UnderTest = new RandomBitwiseGenProtocol(party, quorum, prime, 15); NetSimulator.RegisterParty(party); } }
public static void SetupBitwiseLessThan(Quorum quorum) { int n = quorum.Size; var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var sharesA = BigShamirSharing.Share(new BigZp(prime, 1), n, polyDeg); var sharesB = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesC = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesD = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesE = BigShamirSharing.Share(new BigZp(prime, 1), n, polyDeg); var sharesF = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesG = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesH = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); for (int i = 0; i < n; i++) { TestParty<Share<BigZp>> party = new TestParty<Share<BigZp>>(); party.UnderTest = new BitwiseLessThanProtocol(party, quorum, MakeList(sharesA[i], sharesB[i], sharesC[i], sharesD[i]), MakeList(sharesE[i], sharesF[i], sharesG[i], sharesH[i])); NetSimulator.RegisterParty(party); } }
public static void SetupBitwiseAndProtocol(Quorum quorum) { int n = quorum.Size; var polyDeg = (int)Math.Ceiling(n / 3.0) - 1; var sharesA = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesB = BigShamirSharing.Share(new BigZp(prime, 1), n, polyDeg); var sharesC = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesD = BigShamirSharing.Share(new BigZp(prime, 0), n, polyDeg); var sharesE = BigShamirSharing.Share(new BigZp(prime, 1), n, polyDeg); var sharesF = BigShamirSharing.Share(new BigZp(prime, 1), n, polyDeg); for (int i = 0; i < n; i++) { Quorum q = quorum.Clone() as Quorum; TestParty<List<Share<BigZp>>> party = new TestParty<List<Share<BigZp>>>(); party.UnderTest = new BitwiseOperationProtocol(party, q, MakeList(sharesA[i], sharesB[i], sharesC[i]), MakeList(sharesD[i], sharesE[i], sharesF[i]), new SharedBitAnd.ProtocolFactory(party, q)); NetSimulator.RegisterParty(party); } }