private void SetUp(int n, int f) { _deliveryService = new DeliveryService(); _broadcasts = new IConsensusProtocol[n]; _broadcasters = new IConsensusBroadcaster[n]; _resultInterceptors = new ProtocolInvoker <ReliableBroadcastId, EncryptedShare> [n]; _wallets = new IPrivateConsensusKeySet[n]; _publicKeys = new PublicConsensusKeySet( n, f, null !, null !, Enumerable.Range(0, n) .Select(i => new ECDSAPublicKey { Buffer = ByteString.CopyFrom(i.ToBytes().ToArray()) }) ); for (var i = 0; i < n; ++i) { _wallets[i] = TestUtils.EmptyWallet(n, f); _broadcasters[i] = new BroadcastSimulator(i, _publicKeys, _wallets[i], _deliveryService, false); _resultInterceptors[i] = new ProtocolInvoker <ReliableBroadcastId, EncryptedShare>(); } var bytes = Enumerable.Range(0, 32) .Select(x => (byte)(x * x * 0)) .ToArray(); _testShare = new EncryptedShare(G1.Generator, bytes, G2.Generator, Sender); }
private void CheckResult() { if (_requested != ResultStatus.Requested) { return; } var(bestRootCnt, bestRoot) = _readyMessages .Where(x => x != null) .GroupBy(x => x !.MerkleTreeRoot) .Select(m => (cnt: m.Count(), key: m.Key)) .OrderByDescending(x => x.cnt) .FirstOrDefault(); if (bestRootCnt < 2 * F + 1) { return; } var matchingEchos = _echoMessages .WithIndex() .Where(t => bestRoot.Equals(t.item?.MerkleTreeRoot)) .Select(t => (echo: t.item !, t.index)) .Take(N - 2 * F) .ToArray(); if (matchingEchos.Length < N - 2 * F) { return; } var restored = DecodeFromEchos(matchingEchos); var len = restored.AsReadOnlySpan().Slice(0, 4).ToInt32(); var result = EncryptedShare.FromBytes(restored.AsMemory().Slice(4, len)); _requested = ResultStatus.Sent; Broadcaster.InternalResponse(new ProtocolResult <ReliableBroadcastId, EncryptedShare>(_broadcastId, result)); }
public void TestToByte() { var encryptedShare1 = new EncryptedShare(G1.Generator, new byte[] { 1, 2, 3, 4, 5, 6, 6 }, G2.Generator, 0); var serializedEncryptedShare = encryptedShare1.ToByte(); var encryptedShare2 = EncryptedShare.FromByte(serializedEncryptedShare); Console.WriteLine(encryptedShare1.Equals(encryptedShare2) ? "Test pass" : "Test NOT pass"); }
private void TestAllCommonSubset(int n, int f, DeliveryServiceMode mode = DeliveryServiceMode.TAKE_FIRST) { SetUpAllHonest(n, f); _deliveryService.Mode = mode; var inputs = new List <EncryptedShare>(); var rnd = new byte[32]; _rnd.NextBytes(rnd); for (var i = 0; i < n; ++i) { var testShare = new EncryptedShare(G1.Generator, rnd, G2.Generator, i); inputs.Add(testShare); _broadcasters[i].InternalRequest(new ProtocolRequest <CommonSubsetId, EncryptedShare>( _resultInterceptors[i].Id, (_acs[i].Id as CommonSubsetId) !, testShare )); } for (var i = 0; i < n; ++i) { if (_deliveryService.MutedPlayers.Contains(i)) { continue; } _acs[i].WaitResult(); } _deliveryService.WaitFinish(); for (var i = 0; i < n; ++i) { _broadcasters[i].Terminate(); foreach (var id in _broadcasters[i].Registry.Keys) { Assert.NotNull(id); var protocol = _broadcasters[i].GetProtocolById(id); if (protocol == null) { continue; } protocol.Terminate(); protocol.WaitFinish(); } } var outputs = new List <ISet <EncryptedShare> >(); for (var i = 0; i < n; ++i) { Assert.IsTrue(_acs[i].Terminated, $"protocol {i} did not terminated"); Assert.AreEqual(_resultInterceptors[i].ResultSet, 1, $"protocol {i} has emitted result not once but {_resultInterceptors[i].ResultSet}"); Assert.AreEqual(n, _resultInterceptors[i].Result.Count); outputs.Add(_resultInterceptors[i].Result); } CheckOutput(n, f, inputs.ToArray(), outputs.ToArray()); }