Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="signMessageRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerIdentifier"></param>
        /// <param name="correlationId"></param>
        protected override void HandleResponse(SignMessageResponse signMessageRequest,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerIdentifier,
                                               ICorrelationId correlationId)
        {
            Guard.Argument(signMessageRequest, nameof(signMessageRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();
            Logger.Debug(@"sign message response");

            try
            {
                var decodeResult = MultiBase.Decode(signMessageRequest.OriginalMessage.ToByteArray().ToString());

                Guard.Argument(decodeResult, nameof(decodeResult)).NotNull("The sign message response cannot be null.");

                var originalMessage = decodeResult.ToHexString();

                Guard.Argument(originalMessage, nameof(originalMessage)).NotNull();

                _output.WriteLine(
                    $@"Signature: {signMessageRequest.Signature.ToByteArray().ToBase32()} " +
                    $@"Public Key: {signMessageRequest.PublicKey.ToByteArray().ToBase32()} Original Message: {originalMessage}");
            }
            catch (Exception ex)
            {
                Logger.Error(ex,
                             "Failed to handle SignMessageResponseHandler after receiving message {0}", signMessageRequest);
                _output.WriteLine(ex.Message);
            }
            finally
            {
                Logger.Information("Press Enter to continue ...");
            }
        }
Ejemplo n.º 2
0
 public void Invalid_Encoded_String()
 {
     foreach (var alg in MultiBaseAlgorithm.All)
     {
         var bad = alg.Code + "?";
         Assert.Throws <FormatException>(() => MultiBase.Decode(bad));
     }
 }
Ejemplo n.º 3
0
        public void Codec()
        {
            var bytes  = new byte[] { 1, 2, 3, 4, 5 };
            var bytes1 = MultiBase.Decode(MultiBase.Encode(bytes));
            var bytes2 = MultiBase.Decode(MultiBase.Encode(bytes, "base16"));

            bytes.Should().Contain(bytes1);
            bytes.Should().Contain(bytes2);
        }
Ejemplo n.º 4
0
        public void Encode_Unknown_Algorithm()
        {
            var bytes = new byte[]
            {
                1, 2, 3, 4, 5
            };

            ExceptionAssert.Throws <KeyNotFoundException>(() => MultiBase.Encode(bytes, "unknown"));
        }
Ejemplo n.º 5
0
        public void EmptyData()
        {
            var empty = new byte[0];

            foreach (var alg in MultiBaseAlgorithm.All)
            {
                var s = MultiBase.Encode(empty, alg.Name);
                empty.Should().Equal(MultiBase.Decode(s), alg.Name);
            }
        }
Ejemplo n.º 6
0
 public void CheckMultiBase()
 {
     foreach (var v in TestVectors)
     {
         var bytes = Encoding.UTF8.GetBytes(v.Input);
         var s     = MultiBase.Encode(bytes, v.Algorithm);
         Assert.AreEqual(v.Output, s);
         CollectionAssert.AreEqual(bytes, MultiBase.Decode(s));
     }
 }
Ejemplo n.º 7
0
        public void EmptyData()
        {
            var empty = new byte[0];

            foreach (var alg in MultiBaseAlgorithm.All)
            {
                var s = MultiBase.Encode(empty, alg.Name);
                CollectionAssert.AreEqual(empty, MultiBase.Decode(s), alg.Name);
            }
        }
Ejemplo n.º 8
0
 public void CheckMultiBase()
 {
     foreach (var v in TestVectors)
     {
         var bytes = Encoding.UTF8.GetBytes(v.Input);
         var s     = MultiBase.Encode(bytes, v.Algorithm);
         Assert.Equal(v.Output, s);
         bytes.Should().Contain(MultiBase.Decode(s));
     }
 }
Ejemplo n.º 9
0
        public void Decode_Bad_Formats()
        {
            Assert.Throws <ArgumentNullException>(() => MultiBase.Decode(null));
            Assert.Throws <ArgumentNullException>(() => MultiBase.Decode(""));
            Assert.Throws <ArgumentNullException>(() => MultiBase.Decode("   "));

            Assert.Throws <FormatException>(() => MultiBase.Decode("?"));
            Assert.Throws <FormatException>(() => MultiBase.Decode("??"));
            Assert.Throws <FormatException>(() => MultiBase.Decode("???"));
            Assert.Throws <FormatException>(() => MultiBase.Decode("fXX"));
        }
Ejemplo n.º 10
0
        private static SignedResponse SignMessage(string messageToSign, string signature, string pubKey)
        {
            var signedResponse = new SignedResponse
            {
                Signature       = signature.ToUtf8ByteString(),
                PublicKey       = pubKey.ToUtf8ByteString(),
                OriginalMessage = MultiBase.Encode(messageToSign.FromBase32()).ToUtf8ByteString()
            };

            return(signedResponse);
        }
Ejemplo n.º 11
0
        public void Codec()
        {
            var bytes = new byte[]
            {
                1, 2, 3, 4, 5
            };
            var bytes1 = MultiBase.Decode(MultiBase.Encode(bytes));
            var bytes2 = MultiBase.Decode(MultiBase.Encode(bytes, "base16"));

            CollectionAssert.AreEqual(bytes, bytes1);
            CollectionAssert.AreEqual(bytes, bytes2);
        }
Ejemplo n.º 12
0
        public void Cli_Can_Request_Node_Info()
        {
            var hashProvider = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256"));
            var hash         = hashProvider.ComputeUtf8MultiHash("hello").ToCid();

            var result = Shell.ParseCommand("getdelta", "-h", hash, NodeArgumentPrefix, ServerNodeName);

            result.Should().BeTrue();

            var request = AssertSentMessageAndGetMessageContent <GetDeltaRequest>();

            MultiBase.Encode(request.DeltaDfsHash.ToByteArray(), "base32").Should().Be(hash);
        }
Ejemplo n.º 13
0
        public FavouriteDeltaObserverTests()
        {
            var hashProvider = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("blake2b-256"));

            _deltaElector       = Substitute.For <IDeltaElector>();
            _fakeChannelContext = Substitute.For <IChannelHandlerContext>();
            var logger = Substitute.For <ILogger>();

            _voterId    = PeerIdHelper.GetPeerId("favourite delta voter");
            _producerId = PeerIdHelper.GetPeerId("candidate delta producer");

            _favouriteDeltaObserver = new FavouriteDeltaObserver(_deltaElector, hashProvider, logger);
            _newHash  = MultiBase.Decode(hashProvider.ComputeUtf8MultiHash("newHash").CreateCid());
            _prevHash = MultiBase.Decode(hashProvider.ComputeUtf8MultiHash("prevHash").CreateCid());
        }
Ejemplo n.º 14
0
        public void Execute(DeltaBuilderContext context)
        {
            byte[] salt = GetSaltFromPreviousDelta(context.PreviousDeltaHash);

            IEnumerable <RawEntryWithSaltedAndHashedEntry> rawAndSaltedEntriesBySignature = context.Transactions.Select(e => new RawEntryWithSaltedAndHashedEntry(e, salt, _hashProvider));

            // (Eα;Oα)
            byte[] shuffledEntriesBytes = rawAndSaltedEntriesBySignature
                                          .OrderBy(v => v.SaltedAndHashedEntry, ByteUtil.ByteListComparer.Default)
                                          .SelectMany(v => v.RawEntry.ToByteArray())
                                          .ToArray();

            // dn
            byte[] signaturesInOrder = context.Transactions
                                       .Select(p => p.Signature.ToByteArray())
                                       .OrderBy(s => s, ByteUtil.ByteListComparer.Default)
                                       .SelectMany(b => b)
                                       .ToArray();

            // xf
            UInt256 summedFees = context.Transactions.Sum(t => t.GasPrice.ToUInt256() * t.GasLimit);

            //∆Ln,j = L(f/E) + dn + E(xf, j)
            context.CoinbaseEntry = new CoinbaseEntry
            {
                Amount            = summedFees.ToUint256ByteString(),
                ReceiverPublicKey = _producerUniqueId.PublicKey.ToByteString()
            };

            byte[] globalLedgerStateUpdate = shuffledEntriesBytes
                                             .Concat(signaturesInOrder)
                                             .Concat(context.CoinbaseEntry.ToByteArray())
                                             .ToArray();

            //hj
            CandidateDeltaBroadcast candidate = new CandidateDeltaBroadcast
            {
                // h∆j
                Hash = MultiBase.Decode(_hashProvider.ComputeMultiHash(globalLedgerStateUpdate).ToCid())
                       .ToByteString(),

                // Idj
                ProducerId           = _producerUniqueId,
                PreviousDeltaDfsHash = context.PreviousDeltaHash.ToArray().ToByteString()
            };

            context.Candidate = candidate;
        }
Ejemplo n.º 15
0
 protected override GetDeltaRequest GetMessage(GetDeltaOptions option)
 {
     try
     {
         var hashBytes = MultiBase.Decode(option.Hash);
         var cid       = hashBytes.ToCid();
         new MultiHash(cid.Hash.ToArray());
         return(new GetDeltaRequest {
             DeltaDfsHash = hashBytes.ToByteString()
         });
     }
     catch (FormatException fe)
     {
         Log.Warning("Unable to parse hash {0} as a Cid {1}", option.Hash, fe);
         CommandContext.UserOutput.WriteLine($"Unable to parse hash {option.Hash} as a Cid");
         return(default);
Ejemplo n.º 16
0
        public void DeltaDfsHashBroadcastDao_DeltaDfsHashBroadcast_Should_Be_Convertible()
        {
            var hash            = MultiBase.Decode(_hashProvider.ComputeUtf8MultiHash("this hash").CreateCid());
            var previousDfsHash =
                MultiBase.Decode(_hashProvider.ComputeUtf8MultiHash("previousDfsHash").CreateCid());

            var original = new DeltaDfsHashBroadcast
            {
                DeltaDfsHash         = hash.ToByteString(),
                PreviousDeltaDfsHash = previousDfsHash.ToByteString()
            };

            var contextDao  = original.ToDao <DeltaDfsHashBroadcast, DeltaDfsHashBroadcastDao>(_mapperProvider);
            var reconverted = contextDao.ToProtoBuff <DeltaDfsHashBroadcastDao, DeltaDfsHashBroadcast>(_mapperProvider);

            reconverted.Should().Be(original);
        }
Ejemplo n.º 17
0
        public static CandidateDeltaBroadcast GetCandidateDelta(IHashProvider hashProvider,
                                                                Cid previousDeltaHash = null,
                                                                Cid hash          = null,
                                                                PeerId producerId = null)
        {
            var candidateHash = hash ??
                                hashProvider.ComputeMultiHash(ByteUtil.GenerateRandomByteArray(32)).CreateCid();
            var previousHash = previousDeltaHash ??
                               hashProvider.ComputeMultiHash(ByteUtil.GenerateRandomByteArray(32)).CreateCid();
            var producer = producerId
                           ?? PeerIdHelper.GetPeerId(ByteUtil.GenerateRandomByteArray(32));

            return(new CandidateDeltaBroadcast
            {
                Hash = MultiBase.Decode(candidateHash).ToByteString(),
                PreviousDeltaDfsHash = MultiBase.Decode(previousHash).ToByteString(),
                ProducerId = producer
            });
        }
Ejemplo n.º 18
0
        public void CandidateDeltaBroadcastDao_CandidateDeltaBroadcast_Should_Be_Convertible()
        {
            var previousHash = _hashProvider.ComputeMultiHash(Encoding.UTF8.GetBytes("previousHash"));
            var hash         = _hashProvider.ComputeMultiHash(Encoding.UTF8.GetBytes("anotherHash"));

            var original = new CandidateDeltaBroadcast
            {
                Hash                 = MultiBase.Decode(hash.CreateCid()).ToByteString(),
                ProducerId           = PeerIdHelper.GetPeerId("test"),
                PreviousDeltaDfsHash = MultiBase.Decode(previousHash.CreateCid()).ToByteString()
            };

            var candidateDeltaBroadcast =
                original.ToDao <CandidateDeltaBroadcast, CandidateDeltaBroadcastDao>(_mapperProvider);
            var reconverted =
                candidateDeltaBroadcast.ToProtoBuff <CandidateDeltaBroadcastDao, CandidateDeltaBroadcast>(
                    _mapperProvider);

            reconverted.Should().Be(original);
        }
        public void Init()
        {
            var hashProvider = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256"));

            _deltaElector       = Substitute.For <IDeltaElector>();
            _fakeChannelContext = Substitute.For <IChannelHandlerContext>();
            var logger = Substitute.For <ILogger>();

            _voterId    = PeerIdHelper.GetPeerId("favourite delta voter");
            _producerId = PeerIdHelper.GetPeerId("candidate delta producer");

            var peerRepository = Substitute.For <IPeerRepository>();

            peerRepository.GetPeersByIpAndPublicKey(Arg.Any <ByteString>(), Arg.Any <ByteString>()).Returns(new List <Peer> {
                new Peer()
            });

            _favouriteDeltaObserver = new FavouriteDeltaObserver(_deltaElector, new SyncState()
            {
                IsSynchronized = true
            }, peerRepository, hashProvider, logger);
            _newHash  = MultiBase.Decode(hashProvider.ComputeUtf8MultiHash("newHash").ToCid());
            _prevHash = MultiBase.Decode(hashProvider.ComputeUtf8MultiHash("prevHash").ToCid());
        }
Ejemplo n.º 20
0
        ///<inheritdoc />
        public CandidateDeltaBroadcast BuildCandidateDelta(Cid previousDeltaHash)
        {
            _logger.Error("Current height: " + _deltaIndexService.Height());

            _logger.Debug("Building candidate delta locally");

            var allTransactions = _transactionRetriever.GetMempoolTransactionsByPriority();

            Guard.Argument(allTransactions, nameof(allTransactions))
            .NotNull("Mempool content returned null, check the mempool is actively running");

            var includedTransactions = GetValidTransactionsForDelta(allTransactions);
            var salt = GetSaltFromPreviousDelta(previousDeltaHash);

            var rawAndSaltedEntriesBySignature = includedTransactions.Select(
                x => new RawEntryWithSaltedAndHashedEntry(x, salt, _hashProvider));

            // (Eα;Oα)
            var shuffledEntriesBytes = rawAndSaltedEntriesBySignature
                                       .OrderBy(v => v.SaltedAndHashedEntry, ByteUtil.ByteListComparer.Default)
                                       .SelectMany(v => v.RawEntry.ToByteArray())
                                       .ToArray();

            // dn
            var signaturesInOrder = includedTransactions
                                    .Select(p => p.Signature.ToByteArray())
                                    .OrderBy(s => s, ByteUtil.ByteListComparer.Default)
                                    .SelectMany(b => b)
                                    .ToArray();

            // xf
            var summedFees = includedTransactions.Sum(t => t.TransactionFees.ToUInt256());

            //∆Ln,j = L(f/E) + dn + E(xf, j)
            var coinbaseEntry = new CoinbaseEntry
            {
                Amount            = summedFees.ToUint256ByteString(),
                ReceiverPublicKey = _producerUniqueId.PublicKey.ToByteString()
            };
            var globalLedgerStateUpdate = shuffledEntriesBytes
                                          .Concat(signaturesInOrder)
                                          .Concat(coinbaseEntry.ToByteArray())
                                          .ToArray();

            //hj
            var candidate = new CandidateDeltaBroadcast
            {
                // h∆j
                Hash = MultiBase.Decode(_hashProvider.ComputeMultiHash(globalLedgerStateUpdate).ToCid())
                       .ToByteString(),

                // Idj
                ProducerId           = _producerUniqueId,
                PreviousDeltaDfsHash = previousDeltaHash.ToArray().ToByteString()
            };

            _logger.Debug("Building full delta locally");

            var producedDelta = new Delta
            {
                PreviousDeltaDfsHash = previousDeltaHash.ToArray().ToByteString(),
                MerkleRoot           = candidate.Hash,
                CoinbaseEntries      = { coinbaseEntry },
                PublicEntries        = { includedTransactions },
                TimeStamp            = Timestamp.FromDateTime(_dateTimeProvider.UtcNow)
            };

            _logger.Debug("Adding local candidate delta");

            _deltaCache.AddLocalDelta(candidate, producedDelta);

            return(candidate);
        }
Ejemplo n.º 21
0
 public static string GetLocalDeltaCacheKey(CandidateDeltaBroadcast candidate)
 {
     return(nameof(DeltaCache) + "-LocalDelta-" + MultiBase.Encode(candidate.Hash.ToByteArray(), "base32"));
 }
Ejemplo n.º 22
0
 public ByteString Convert(string sourceMember, ResolutionContext context)
 {
     return(MultiBase.Decode(sourceMember).ToByteString());
 }
Ejemplo n.º 23
0
 public string Convert(ByteString sourceMember, ResolutionContext context)
 {
     return(MultiBase.Encode(sourceMember.ToByteArray(), "base32"));
 }
Ejemplo n.º 24
0
 public IDeterministicRandom GetDeterministicRandomFromSeed(byte[] seed)
 {
     return(new IsaacRandom(MultiBase.Encode(seed, "base16")));
 }
Ejemplo n.º 25
0
 public static Cid ToCid(this byte[] cid)
 {
     return(Cid.Decode(MultiBase.Encode(cid, Encoding)));
 }
Ejemplo n.º 26
0
 public void Encode_Null_Data_Not_Allowed()
 {
     Assert.Throws <ArgumentNullException>(() => MultiBase.Encode(null));
 }