Exemplo n.º 1
0
        private static async Task RunSecureComputationPartyAsync(int localPartyId, BitArray localInput)
        {
            Console.WriteLine($"Starting party {localPartyId}...");

            using IMultiPartyNetworkSession session = await TcpMultiPartyNetworkSession.EstablishLoopbackAsync(
                      new Party (localPartyId),
                      StartPort,
                      NumberOfParties
                      );

            using CryptoContext cryptoContext = CryptoContext.CreateDefault();

            IObliviousTransfer obliviousTransfer = new NaorPinkasObliviousTransfer(
                SecurityParameters.CreateDefault768Bit(),
                cryptoContext
                );

            IMultiplicativeSharing multiplicativeSharing = new ObliviousTransferMultiplicativeSharing(
                obliviousTransfer,
                cryptoContext
                );

            SecretSharingSecureComputation computation = new SecretSharingSecureComputation(
                session,
                multiplicativeSharing,
                cryptoContext
                );

            Stopwatch stopwatch = Stopwatch.StartNew();

            SetIntersectionSecureProgram secureProgram = new SetIntersectionSecureProgram(NumberOfParties, NumberOfElements);

            object[] outputPrimitives = await secureProgram.EvaluateAsync(computation, new object[] { localInput });

            BitArray   intersection = (BitArray)outputPrimitives[0];
            BigInteger count        = (BigInteger)outputPrimitives[1];

            stopwatch.Stop();

            Console.WriteLine();
            Console.WriteLine($"Completed protocol as {session.LocalParty.Name} in {stopwatch.ElapsedMilliseconds} ms.");
            Console.WriteLine($"  Local input: {localInput.ToBinaryString()}");
            Console.WriteLine($"  Computed intersection: {intersection.ToBinaryString()}");
            Console.WriteLine($"  Computed number of matches: {count}");

            Console.WriteLine();
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey(true);
        }
Exemplo n.º 2
0
        public void TestTcpMultiPartyNetworkSession()
        {
            Task <TcpMultiPartyNetworkSession> firstSessionTask  = CreateMultiPartySessionAsync(FirstParty, 3);
            Task <TcpMultiPartyNetworkSession> secondSessionTask = CreateMultiPartySessionAsync(SecondParty, 3);
            Task <TcpMultiPartyNetworkSession> thirdSessionTask  = CreateMultiPartySessionAsync(ThirdParty, 3);

            using TcpMultiPartyNetworkSession firstSession  = firstSessionTask.Result;
            using TcpMultiPartyNetworkSession secondSession = secondSessionTask.Result;
            using TcpMultiPartyNetworkSession thirdSession  = thirdSessionTask.Result;

            Assert.AreEqual(FirstParty, firstSession.LocalParty);
            Assert.AreEqual(SecondParty, secondSession.LocalParty);
            Assert.AreEqual(ThirdParty, thirdSession.LocalParty);

            EnumerableAssert.AreEquivalent(new[] { SecondParty, ThirdParty }, GetRemoteParties(firstSession));
            EnumerableAssert.AreEquivalent(new[] { FirstParty, ThirdParty }, GetRemoteParties(secondSession));
            EnumerableAssert.AreEquivalent(new[] { FirstParty, SecondParty }, GetRemoteParties(thirdSession));
        }
Exemplo n.º 3
0
        public void TestTcpMultiPartyNetworkSession()
        {
            Task <TcpMultiPartyNetworkSession> firstSessionTask  = TcpMultiPartyNetworkSession.EstablishAsync(FirstParty, IPAddress.Loopback, Port, 3);
            Task <TcpMultiPartyNetworkSession> secondSessionTask = TcpMultiPartyNetworkSession.EstablishAsync(SecondParty, IPAddress.Loopback, Port, 3);
            Task <TcpMultiPartyNetworkSession> thirdSessionTask  = TcpMultiPartyNetworkSession.EstablishAsync(ThirdParty, IPAddress.Loopback, Port, 3);

            TcpMultiPartyNetworkSession firstSession  = firstSessionTask.Result;
            TcpMultiPartyNetworkSession secondSession = secondSessionTask.Result;
            TcpMultiPartyNetworkSession thirdSession  = thirdSessionTask.Result;

            Assert.AreEqual(FirstParty, firstSession.LocalParty);
            Assert.AreEqual(SecondParty, secondSession.LocalParty);
            Assert.AreEqual(ThirdParty, thirdSession.LocalParty);

            CollectionAssert.AreEquivalent(new[] { SecondParty, ThirdParty }, firstSession.RemotePartySessions.Select(session => session.RemoteParty).ToArray());
            CollectionAssert.AreEquivalent(new[] { FirstParty, ThirdParty }, secondSession.RemotePartySessions.Select(session => session.RemoteParty).ToArray());
            CollectionAssert.AreEquivalent(new[] { FirstParty, SecondParty }, thirdSession.RemotePartySessions.Select(session => session.RemoteParty).ToArray());

            firstSessionTask.Dispose();
            secondSessionTask.Dispose();
            thirdSession.Dispose();
        }
Exemplo n.º 4
0
        public static void RunMultiPartyNetwork(int numberOfParties, Action <IMultiPartyNetworkSession> perPartyAction)
        {
            IEnumerable <Task <TcpMultiPartyNetworkSession> > sessionTasks = Enumerable
                                                                             .Range(0, numberOfParties)
                                                                             .Select(partyId => TcpMultiPartyNetworkSession.EstablishLoopbackAsync(new Party(partyId), Port, numberOfParties));

            RunNetwork(sessionTasks, perPartyAction);
        }
Exemplo n.º 5
0
 private static Task <TcpMultiPartyNetworkSession> CreateMultiPartySessionAsync(Party party, int numberOfParties)
 {
     return(TcpMultiPartyNetworkSession.EstablishLoopbackAsync(party, Port, numberOfParties));
 }
Exemplo n.º 6
0
 public static IMultiPartyNetworkSession EstablishMultiParty(int localPartyId, int numberOfParties)
 {
     return(TcpMultiPartyNetworkSession.EstablishAsync(new Party(localPartyId), IPAddress.Loopback, Port, numberOfParties).Result);
 }
Exemplo n.º 7
0
 private static IMultiPartyNetworkSession CreateLocalSession(int localPartyId, int startPort, int numberOfParties)
 {
     return(TcpMultiPartyNetworkSession.EstablishAsync(new Party(localPartyId), IPAddress.Loopback, StartPort, NumberOfParties).Result);
 }