示例#1
0
        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);
        }
示例#2
0
        private void SetUpAllHonest(int n, int f)
        {
            _deliveryService    = new DeliveryService();
            _broadcasts         = new IConsensusProtocol[n];
            _broadcasters       = new IConsensusBroadcaster[n];
            _resultInterceptors = new ProtocolInvoker <BinaryAgreementId, bool> [n];
            _privateKeys        = new IPrivateConsensusKeySet[n];
            var keygen  = new TrustedKeyGen(n, f);
            var shares  = keygen.GetPrivateShares().ToArray();
            var pubKeys = new PublicKeySet(shares.Select(share => share.GetPublicKeyShare()), f);

            _publicKeys = new PublicConsensusKeySet(n, f, null !, pubKeys, Enumerable.Empty <ECDSAPublicKey>());
            for (var i = 0; i < n; ++i)
            {
                _resultInterceptors[i] = new ProtocolInvoker <BinaryAgreementId, bool>();
                _privateKeys[i]        = new PrivateConsensusKeySet(null !, null !, shares[i]);
                _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _privateKeys[i], _deliveryService, true);
            }

            for (uint i = 0; i < n; ++i)
            {
                _broadcasts[i] = new BinaryAgreement(new BinaryAgreementId(0, 0), _publicKeys, _broadcasters[i]);
                _broadcasters[i].RegisterProtocols(new[] { _broadcasts[i], _resultInterceptors[i] });
            }
        }
示例#3
0
        private void SetUpAllHonest(int n, int f)
        {
            _deliveryService    = new DeliveryService();
            _acs                = new IConsensusProtocol[n];
            _broadcasters       = new BroadcastSimulator[n];
            _resultInterceptors = new ProtocolInvoker <CommonSubsetId, ISet <EncryptedShare> > [n];
            _privateKeys        = new IPrivateConsensusKeySet[n];
            var keygen  = new TrustedKeyGen(n, f);
            var shares  = keygen.GetPrivateShares().ToArray();
            var pubKeys = new PublicKeySet(shares.Select(share => share.GetPublicKeyShare()), f);

            _publicKeys = new PublicConsensusKeySet(
                n, f, null !, pubKeys,
                Enumerable.Range(0, n)
                .Select(i => new ECDSAPublicKey {
                Buffer = ByteString.CopyFrom(i.ToBytes().ToArray())
            })
                );
            for (var i = 0; i < n; ++i)
            {
                _resultInterceptors[i] = new ProtocolInvoker <CommonSubsetId, ISet <EncryptedShare> >();
                _privateKeys[i]        = new PrivateConsensusKeySet(null !, null !, shares[i]);
                _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _privateKeys[i], _deliveryService, false);
            }

            for (uint i = 0; i < n; ++i)
            {
                _acs[i] = new CommonSubset(new CommonSubsetId(0), _publicKeys, _broadcasters[i]);
                _broadcasters[i].RegisterProtocols(new[] { _acs[i], _resultInterceptors[i] });
            }
        }
示例#4
0
        public void SetUp(int n, int f)
        {
            _deliveryService    = new DeliveryService();
            _broadcasts         = new IConsensusProtocol[n];
            _broadcasters       = new IConsensusBroadcaster[n];
            _resultInterceptors = new ProtocolInvoker <HoneyBadgerId, ISet <IRawShare> > [n];
            var keygen     = new TrustedKeyGen(n, f);
            var shares     = keygen.GetPrivateShares().ToArray();
            var pubKeys    = new PublicKeySet(shares.Select(share => share.GetPublicKeyShare()), f);
            var tpkeKeygen = new Crypto.TPKE.TrustedKeyGen(n, f);

            var ecdsaKeys = Enumerable.Range(0, n)
                            .Select(i => Crypto.GenerateRandomBytes(32))
                            .Select(x => x.ToPrivateKey())
                            .Select(k => new EcdsaKeyPair(k))
                            .ToArray();

            _publicKeys = new PublicConsensusKeySet(n, f, tpkeKeygen.GetPubKey(), pubKeys,
                                                    ecdsaKeys.Select(k => k.PublicKey));
            _privateKeys = new IPrivateConsensusKeySet[n];
            for (var i = 0; i < n; ++i)
            {
                _resultInterceptors[i] = new ProtocolInvoker <HoneyBadgerId, ISet <IRawShare> >();
                _privateKeys[i]        = new PrivateConsensusKeySet(ecdsaKeys[i], tpkeKeygen.GetPrivKey(i), shares[i]);
                _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _privateKeys[i], _deliveryService, true);
            }
        }
示例#5
0
 public BinaryAgreement(
     BinaryAgreementId agreementId, IPublicConsensusKeySet wallet, IConsensusBroadcaster broadcaster)
     : base(wallet, agreementId, broadcaster)
 {
     _agreementId  = agreementId;
     _requested    = ResultStatus.NotRequested;
     _currentEpoch = 0;
     _resultEpoch  = 0;
     _wasRepeat    = false;
 }
示例#6
0
 public RootProtocol(RootProtocolId id, IPublicConsensusKeySet wallet, ECDSAPrivateKey privateKey,
                     IConsensusBroadcaster broadcaster, IValidatorAttendanceRepository validatorAttendanceRepository,
                     ulong cycleDuration, bool useNewChainId) : base(wallet, id, broadcaster)
 {
     _keyPair = new EcdsaKeyPair(privateKey);
     _rootId  = id;
     _validatorAttendanceRepository = validatorAttendanceRepository;
     _cycleDuration = cycleDuration;
     _useNewChainId = useNewChainId;
 }
示例#7
0
 public CommonSubset(
     CommonSubsetId commonSubsetId, IPublicConsensusKeySet wallet, IConsensusBroadcaster broadcaster
     ) : base(wallet, commonSubsetId, broadcaster)
 {
     _commonSubsetId          = commonSubsetId;
     _binaryAgreementInput    = new bool?[N];
     _binaryAgreementResult   = new bool?[N];
     _reliableBroadcastResult = new EncryptedShare[N];
     _result = null;
 }
示例#8
0
 public CommonCoin(
     CoinId coinId, IPublicConsensusKeySet wallet, PrivateKeyShare privateKeyShare,
     IConsensusBroadcaster broadcaster
     ) : base(wallet, coinId, broadcaster)
 {
     _coinId          = coinId ?? throw new ArgumentNullException(nameof(coinId));
     _thresholdSigner = new ThresholdSigner(
         _coinId.ToBytes(), privateKeyShare, wallet.ThresholdSignaturePublicKeySet
         );
     _result = null;
 }
示例#9
0
 public BroadcastSimulator(
     int sender, IPublicConsensusKeySet wallet, IPrivateConsensusKeySet privateKeys,
     DeliveryService deliveryService, bool mixMessages
     )
 {
     _sender          = sender;
     _deliveryService = deliveryService;
     _deliveryService.AddPlayer(GetMyId(), this);
     _wallet      = wallet;
     _privateKeys = privateKeys;
     _silenced    = new HashSet <int>();
 }
示例#10
0
 protected AbstractProtocol(
     IPublicConsensusKeySet wallet,
     IProtocolIdentifier id,
     IConsensusBroadcaster broadcaster
     )
 {
     _thread = new Thread(Start)
     {
         IsBackground = true
     };
     _thread.Start();
     Broadcaster = broadcaster;
     Id          = id;
     Wallet      = wallet;
 }
示例#11
0
 public ReliableBroadcast(
     ReliableBroadcastId broadcastId, IPublicConsensusKeySet wallet, IConsensusBroadcaster broadcaster) :
     base(wallet, broadcastId, broadcaster)
 {
     _broadcastId    = broadcastId;
     _echoMessages   = new ECHOMessage?[N];
     _readyMessages  = new ReadyMessage?[N];
     _sentValMessage = new bool[N];
     _requested      = ResultStatus.NotRequested;
     _merkleTreeSize = N;
     while ((_merkleTreeSize & (_merkleTreeSize - 1)) != 0)
     {
         _merkleTreeSize++; // increment while not power of two
     }
 }
示例#12
0
 private void SetUp(int n, int f)
 {
     _deliveryService    = new DeliveryService();
     _broadcasts         = new IConsensusProtocol[n];
     _broadcasters       = new IConsensusBroadcaster[n];
     _resultInterceptors = new ProtocolInvoker <BinaryBroadcastId, BoolSet> [n];
     _privateKeys        = new IPrivateConsensusKeySet[n];
     _publicKeys         = new PublicConsensusKeySet(n, f, null !, null !, Enumerable.Empty <ECDSAPublicKey>());
     for (var i = 0; i < n; ++i)
     {
         _resultInterceptors[i] = new ProtocolInvoker <BinaryBroadcastId, BoolSet>();
         _privateKeys[i]        = TestUtils.EmptyWallet(n, f);
         _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _privateKeys[i], _deliveryService, false);
     }
 }
示例#13
0
        public HoneyBadger(HoneyBadgerId honeyBadgerId, IPublicConsensusKeySet wallet,
                           PrivateKey privateKey, IConsensusBroadcaster broadcaster)
            : base(wallet, honeyBadgerId, broadcaster)
        {
            _honeyBadgerId   = honeyBadgerId;
            _privateKey      = privateKey;
            _receivedShares  = new EncryptedShare[N];
            _decryptedShares = new ISet <PartiallyDecryptedShare> [N];
            for (var i = 0; i < N; ++i)
            {
                _decryptedShares[i] = new HashSet <PartiallyDecryptedShare>();
            }

            _taken     = new bool[N];
            _shares    = new IRawShare[N];
            _requested = ResultStatus.NotRequested;
        }
示例#14
0
        public BinaryBroadcast(
            BinaryBroadcastId broadcastId, IPublicConsensusKeySet wallet, IConsensusBroadcaster broadcaster)
            : base(wallet, broadcastId, broadcaster)
        {
            _broadcastId = broadcastId;
            _requested   = ResultStatus.NotRequested;

            _binValues         = new BoolSet();
            _receivedValues    = new BoolSet[N];
            _playerSentAux     = new bool[N];
            _validatorSentConf = new bool[N];
            for (var i = 0; i < N; ++i)
            {
                _receivedValues[i] = new BoolSet();
            }
            _receivedCount      = new int[2];
            _receivedAux        = new int[2];
            _wasBvalBroadcasted = new bool[2];
            _confReceived       = new List <BoolSet>();
            _result             = null;
            _confSent           = false;
        }
示例#15
0
        public void SetUp(int n, int f)
        {
            var keygen  = new TrustedKeyGen(n, f);
            var shares  = keygen.GetPrivateShares().ToArray();
            var pubKeys = new PublicKeySet(shares.Select(share => share.GetPublicKeyShare()), f);

            _deliveryService    = new DeliveryService();
            _coins              = new IConsensusProtocol[n];
            _broadcasters       = new IConsensusBroadcaster[n];
            _resultInterceptors = new ProtocolInvoker <CoinId, CoinResult> [n];
            _wallets            = new IPrivateConsensusKeySet[n];
            _publicKeys         = new PublicConsensusKeySet(n, f, null !, pubKeys, Enumerable.Empty <ECDSAPublicKey>());
            for (var i = 0; i < n; ++i)
            {
                _resultInterceptors[i] = new ProtocolInvoker <CoinId, CoinResult>();
                _wallets[i]            = new PrivateConsensusKeySet(null !, null !, shares[i]);
                _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _wallets[i], _deliveryService, false);
                _coins[i] = new CommonCoin(
                    new CoinId(0, 0, 0), _publicKeys, shares[i], _broadcasters[i]
                    );
                _broadcasters[i].RegisterProtocols(new[] { _coins[i], _resultInterceptors[i] });
            }
        }
示例#16
0
 public void SetValidatorKeySet(IPublicConsensusKeySet keySet)
 {
     _validators = keySet;
     _myIdx      = _validators.GetValidatorIndex(_wallet.EcdsaKeyPair.PublicKey);
 }