Example #1
0
        /// <inheritdoc/>
        public override void Serialize(FastStream stream)
        {
            CompactInt count = new CompactInt(Headers.Length);

            count.WriteToStream(stream);
            foreach (var hd in Headers)
            {
                hd.SerializeHeader(stream);
                // Block serialization of header doesn't add tx count since there is no need for it.
                // However, in a header payload (for unknown reason) one extra byte indicating zero tx count
                // is added to each block header.
                stream.Write((byte)0);
            }
        }
Example #2
0
        public void Write_ushort_ResizeTest()
        {
            var stream = new FastStream(1);

            Helper.ComparePrivateField(stream, "buffer", new byte[1]);

            stream.Write((ushort)31534);
            byte[] expBuffer = new byte[1 + FastStream.DefaultCapacity];
            expBuffer[0] = 0x2e;
            expBuffer[1] = 0x7b;

            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", sizeof(ushort));
        }
Example #3
0
        public void Constructor_DefaultTest()
        {
            PushDataOp op     = new PushDataOp();
            FastStream stream = new FastStream();

            op.WriteToStream(stream);

            byte[] actual   = stream.ToByteArray();
            byte[] expected = new byte[1] {
                0
            };

            Assert.Equal(expected, actual);
        }
Example #4
0
        public void SerializeTest()
        {
            byte[]           hd1    = Helper.HexToBytes(Header1);
            byte[]           hd2    = Helper.HexToBytes(Header2);
            GetBlocksPayload pl     = new GetBlocksPayload(Version, new byte[][] { hd1, hd2 }, new byte[32]);
            FastStream       stream = new FastStream(4 + 32 + 32 + 32);

            pl.Serialize(stream);

            byte[] actual   = stream.ToByteArray();
            byte[] expected = Helper.HexToBytes(PayloadHex);

            Assert.Equal(expected, actual);
        }
Example #5
0
        public void SerializeTest(byte[] data, byte[] start)
        {
            var scr    = new PubkeyScript(data);
            var stream = new FastStream(data.Length + start.Length);

            scr.Serialize(stream);

            byte[] actual   = stream.ToByteArray();
            byte[] expected = new byte[start.Length + data.Length];
            Buffer.BlockCopy(start, 0, expected, 0, start.Length);
            Buffer.BlockCopy(data, 0, expected, start.Length, data.Length);

            Assert.Equal(expected, actual);
        }
        private StackFrame ReadFrame(FastStream source)
        {
            StringBuilder sb = new StringBuilder();

            // Address
            source.SkipWhiteSpace();
            source.ReadAsciiStringUpTo(' ', sb);
            string address = sb.ToString();

            sb.Clear();

            // Trying to get the module and symbol...
            source.SkipWhiteSpace();

            source.ReadAsciiStringUpToLastBeforeTrue('(', sb, delegate(byte c)
            {
                if (c != '\n' && !source.EndOfStream)
                {
                    return(true);
                }

                return(false);
            });
            string assumedSymbol = sb.ToString();

            sb.Clear();

            source.ReadAsciiStringUpTo('\n', sb);

            string assumedModule = sb.ToString();

            sb.Clear();

            assumedModule = this.RemoveOuterBrackets(assumedModule.Trim());

            string actualModule = assumedModule;
            string actualSymbol = this.RemoveOuterBrackets(assumedSymbol.Trim());

            if (assumedModule.EndsWith(".map"))
            {
                string[] moduleSymbol = this.GetSymbolFromMicrosoftMap(assumedSymbol, assumedModule);
                actualSymbol = string.IsNullOrEmpty(moduleSymbol[1]) ? assumedModule : moduleSymbol[1];
                actualModule = moduleSymbol[0];
            }

            // Can't use Path.GetFileName Because it throws on illegal Windows characters
            actualModule = GetFileName(actualModule);

            return(new StackFrame(address, actualModule, actualSymbol));
        }
Example #7
0
        public void SerializeTest()
        {
            var pl     = new SendCmpctPayload(true, 1);
            var stream = new FastStream(9);

            pl.Serialize(stream);

            byte[] actual   = stream.ToByteArray();
            byte[] expected = new byte[9] {
                1, 1, 0, 0, 0, 0, 0, 0, 0
            };

            Assert.Equal(expected, actual);
        }
Example #8
0
        public void Write_bytes_bigTest()
        {
            FastStream stream = new FastStream();

            byte[] data = Helper.GetBytes(Capacity + 1);
            stream.Write(data);

            byte[] expBuffer = new byte[Capacity * 2];
            Buffer.BlockCopy(data, 0, expBuffer, 0, data.Length);

            Assert.Equal(data, stream.ToByteArray());
            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", data.Length);
        }
Example #9
0
        public void LongRestoreAndMovePastHistory()
        {
            FastStream stream = this.GetTestStream();

            SkipBOM(stream);
            var mp = stream.MarkPosition();

            stream.SkipUpTo('a');
            stream.RestoreToMark(mp);
            StringBuilder sb = new StringBuilder();

            stream.ReadAsciiStringUpTo('b', sb);
            Assert.Equal("12345\r\n6789a\r\n", sb.ToString());
        }
Example #10
0
        public void WriteToStreamForSigningSegWit_NotExecutedTest()
        {
            CodeSeparatorOp op = new CodeSeparatorOp()
            {
                IsExecuted = false
            };
            FastStream stream = new FastStream(5);

            op.WriteToStreamForSigningSegWit(stream);

            Assert.Equal(new byte[1] {
                (byte)OP.CodeSeparator
            }, stream.ToByteArray());
        }
Example #11
0
        public void WriteToStreamForSigning_MultiTest()
        {
            FastStream stream = new FastStream(5);

            CodeSeparatorOp op = new CodeSeparatorOp();

            op.WriteToStreamForSigning(stream, new byte[][] { new byte[] { 1, 2 } });

            // Execution should not make any difference
            op.IsExecuted = true;
            op.WriteToStreamForSigning(stream, new byte[][] { new byte[] { 1, 2 } });

            Assert.Equal(new byte[0], stream.ToByteArray());
        }
Example #12
0
        public void AddSerializedSizeTest(ulong val, int init, int expected)
        {
            var ci      = new CompactInt(val);
            var counter = new SizeCounter(init);

            ci.AddSerializedSize(counter);

            var stream = new FastStream(10);

            ci.WriteToStream(stream);
            Assert.Equal(expected, stream.GetSize() + init);

            Assert.Equal(expected, counter.Size);
        }
Example #13
0
        public void AddWithStackIntLengthTest(int init, int add)
        {
            var counter = new SizeCounter(init);

            counter.AddWithStackIntLength(add);

            var si     = new StackInt(add);
            var stream = new FastStream(5);

            si.WriteToStream(stream);
            int expected = stream.GetSize() + add + init;

            Assert.Equal(expected, counter.Size);
        }
Example #14
0
        public void AddCompactIntCountTest(int init, int add)
        {
            var counter = new SizeCounter(init);

            counter.AddCompactIntCount(add);

            var ci     = new CompactInt(add);
            var stream = new FastStream(9);

            ci.WriteToStream(stream);
            int expected = stream.GetSize() + init;

            Assert.Equal(expected, counter.Size);
        }
        private ScheduleSwitch ReadScheduleSwitch(FastStream source)
        {
            StringBuilder sb = new StringBuilder();

            source.SkipUpTo('=');
            source.MoveNext();

            source.ReadAsciiStringUpTo(' ', sb);
            string prevComm = sb.ToString();

            sb.Clear();

            source.SkipUpTo('=');
            source.MoveNext();

            int prevTid = source.ReadInt();

            source.SkipUpTo('=');
            source.MoveNext();

            int prevPrio = source.ReadInt();

            source.SkipUpTo('=');
            source.MoveNext();

            char prevState = (char)source.Current;

            source.MoveNext();
            source.SkipUpTo('n');             // this is to bypass the ==>
            source.SkipUpTo('=');
            source.MoveNext();

            source.ReadAsciiStringUpTo(' ', sb);
            string nextComm = sb.ToString();

            sb.Clear();

            source.SkipUpTo('=');
            source.MoveNext();

            int nextTid = source.ReadInt();

            source.SkipUpTo('=');
            source.MoveNext();

            int nextPrio = source.ReadInt();

            return(new ScheduleSwitch(prevComm, prevTid, prevPrio, prevState, nextComm, nextTid, nextPrio));
        }
Example #16
0
        public void Write_bytes_withPad_ResizeTest()
        {
            var stream = new FastStream(1);

            byte[] data     = new byte[] { 1, 2 };
            byte[] expBytes = new byte[] { 1, 2, 0 };
            stream.Write(data, 3);

            byte[] expBuffer = new byte[FastStream.DefaultCapacity + 1];
            Buffer.BlockCopy(data, 0, expBuffer, 0, data.Length);

            Assert.Equal(expBytes, stream.ToByteArray());
            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", expBytes.Length);
        }
Example #17
0
        public void Key_SignTxTest(string wif, ITransaction tx, ITransaction prvTx, SigHashType sht, int[] indexes, byte[] expSer)
        {
            using PrivateKey key = new(wif, NetworkType.TestNet);
            for (int i = 0; i < indexes.Length; i++)
            {
                key.Sign(tx, prvTx, indexes[i], sht);
            }

            var stream = new FastStream(expSer.Length);

            tx.Serialize(stream);
            byte[] actualSer = stream.ToByteArray();

            Assert.Equal(expSer, actualSer);
        }
Example #18
0
        public void GetSizeTest()
        {
            var stream = new FastStream();
            int s1     = stream.GetSize();

            stream.Write((byte)1);
            int s2 = stream.GetSize();

            stream.Write(1);
            int s3 = stream.GetSize();

            Assert.Equal(0, s1);
            Assert.Equal(1, s2);
            Assert.Equal(5, s3);
        }
Example #19
0
        public void Write_bytes_ResizeTest()
        {
            var stream = new FastStream(2);

            Helper.ComparePrivateField(stream, "buffer", new byte[2]);

            stream.Write(new byte[] { 1, 2, 3 });
            byte[] expBuffer = new byte[2 + FastStream.DefaultCapacity];
            expBuffer[0] = 1;
            expBuffer[1] = 2;
            expBuffer[2] = 3;

            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", 3);
        }
Example #20
0
        public void SerializeForSigningTest(byte[] hash, uint index, uint seq, byte[] spendScr, bool changeSeq, byte[] expected)
        {
            TxIn tx = new TxIn()
            {
                TxHash   = hash,
                Index    = index,
                Sequence = seq
            };
            FastStream stream = new FastStream();

            tx.SerializeForSigning(stream, spendScr, changeSeq);
            byte[] actual = stream.ToByteArray();

            Assert.Equal(expected, actual);
        }
Example #21
0
        public void Write_byteTest(byte val)
        {
            var stream = new FastStream(10);

            stream.Write(val);

            byte[] expBuffer = new byte[10];
            expBuffer[0] = val;

            Assert.Equal(new byte[1] {
                val
            }, stream.ToByteArray());
            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", 1);
        }
        /// <summary>
        /// Given a stream that contains PerfInfo commands, parses the stream and stores data in the given dictionary.
        /// Key: somedll.ni.dll		Value: {some guid}
        /// </summary>
        public void ParsePerfInfoFile(Stream stream, Dictionary <string, string> guids, Dictionary <string, ulong> baseAddresses)
        {
            FastStream source = new FastStream(stream);

            source.MoveNext();
            source.SkipWhiteSpace();

            StringBuilder sb = new StringBuilder();

            while (!source.EndOfStream)
            {
                source.ReadAsciiStringUpTo(';', sb);
                source.MoveNext();
                string command = sb.ToString();
                sb.Clear();

                if (command == "ImageLoad") // TODO: should be a constant maybe?
                {
                    source.ReadAsciiStringUpTo(';', sb);
                    string path = sb.ToString();
                    sb.Clear();
                    source.MoveNext();

                    source.ReadAsciiStringUpTo(';', sb);
                    string guid = sb.ToString().TrimEnd();
                    sb.Clear();
                    source.MoveNext();

                    guids[GetFileName(path)] = guid;

                    // Check to see if the base address has been appended to the line.
                    if (source.Current != '\n')
                    {
                        sb.Clear();
                        source.ReadAsciiStringUpTo(';', sb);
                        string strBaseAddr = sb.ToString().TrimEnd();
                        if (!string.IsNullOrEmpty(strBaseAddr))
                        {
                            ulong baseAddr = ulong.Parse(strBaseAddr, System.Globalization.NumberStyles.HexNumber);
                            baseAddresses[GetFileName(path)] = baseAddr;
                        }
                    }
                }

                source.SkipUpTo('\n');
                source.MoveNext();
            }
        }
Example #23
0
        public void Write_int_ResizeTest()
        {
            var stream = new FastStream(1);

            Helper.ComparePrivateField(stream, "buffer", new byte[1]);

            stream.Write(184104331);
            byte[] expBuffer = new byte[1 + FastStream.DefaultCapacity];
            expBuffer[0] = 0x8b;
            expBuffer[1] = 0x35;
            expBuffer[2] = 0xf9;
            expBuffer[3] = 0x0a;

            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", sizeof(int));
        }
Example #24
0
        public void TryDeserializeTest(byte[] data, bool ann, ulong ver)
        {
            var  pl      = new SendCmpctPayload();
            bool success = pl.TryDeserialize(new FastStreamReader(data), out string error);

            Assert.True(success, error);
            Assert.Null(error);
            Assert.Equal(ann, pl.Announce);
            Assert.Equal(ver, pl.CmpctVersion);

            // Test Serialize here to cover undefined (future) cases for version
            var stream = new FastStream(9);

            pl.Serialize(stream);
            Assert.Equal(data, stream.ToByteArray());
        }
Example #25
0
 /// <inheritdoc/>
 public void Serialize(FastStream stream)
 {
     if (Items == null || Items.Length == 0)
     {
         stream.Write((byte)0);
     }
     else
     {
         CompactInt count = new CompactInt(Items.Length);
         count.WriteToStream(stream);
         foreach (var item in Items)
         {
             item.WriteToWitnessStream(stream);
         }
     }
 }
Example #26
0
        public void Write_uint_ResizeTest()
        {
            var stream = new FastStream(1);

            Helper.ComparePrivateField(stream, "buffer", new byte[1]);

            stream.Write(1274051374U);
            byte[] expBuffer = new byte[1 + FastStream.DefaultCapacity];
            expBuffer[0] = 0x2e;
            expBuffer[1] = 0x7b;
            expBuffer[2] = 0xf0;
            expBuffer[3] = 0x4b;

            Helper.ComparePrivateField(stream, "buffer", expBuffer);
            Helper.ComparePrivateField(stream, "position", sizeof(uint));
        }
Example #27
0
        public void SerializeTest()
        {
            BlockPayload pl = new BlockPayload()
            {
                BlockData = new MockSerializableBlock(new byte[] { 1, 2, 3 })
            };

            FastStream stream = new FastStream(3);

            pl.Serialize(stream);
            byte[] actual   = pl.Serialize();
            byte[] expected = new byte[] { 1, 2, 3 };

            Assert.Equal(expected, stream.ToByteArray());
            Assert.Equal(expected, actual);
        }
Example #28
0
        public void SerializeTest()
        {
            byte[] mockBlkHash = Helper.GetBytes(32);
            var    tx1         = new MockSerializableTx(new byte[] { 5, 6 });
            var    tx2         = new MockSerializableTx(new byte[] { 7, 8, 9, 10 });
            var    pl          = new BlockTxnPayload(mockBlkHash, new ITransaction[] { tx1, tx2 });
            var    stream      = new FastStream(32 + 1 + 2 + 4);

            pl.Serialize(stream);

            byte[] actual   = stream.ToByteArray();
            byte[] expected = Helper.HexToBytes($"{Helper.GetBytesHex(32)}0205060708090a");

            Assert.Equal(expected, actual);

            Assert.Equal(PayloadType.BlockTxn, pl.PayloadType);
        }
Example #29
0
        /// <inheritdoc/>
        public void SetToP2WSH_MultiSig(Signature[] sigs, RedeemScript redeem)
        {
            Items = new PushDataOp[sigs.Length + 2]; // OP_0 | Sig1 | sig2 | .... | sig(n) | redeemScript

            Items[0] = new PushDataOp(OP._0);

            for (int i = 1; i <= sigs.Length; i++)
            {
                Items[i] = new PushDataOp(sigs[i].ToByteArray());
            }

            FastStream stream = new FastStream();
            PushDataOp temp   = new PushDataOp(redeem.Data);

            temp.WriteToStream(stream);

            Items[^ 1] = new PushDataOp(stream.ToByteArray());
Example #30
0
        public void Resize_bigTest()
        {
            var stream  = new FastStream();
            int dataLen = FastStream.DefaultCapacity + (FastStream.DefaultCapacity + 5);

            byte[] data = Helper.GetBytes(dataLen);
            stream.Write(data);

            int actualSize   = stream.GetSize();
            int expectedSize = dataLen;

            byte[] expBuffer = new byte[dataLen];
            Buffer.BlockCopy(data, 0, expBuffer, 0, data.Length);

            Assert.Equal(expectedSize, actualSize);
            Helper.ComparePrivateField(stream, "buffer", expBuffer);
        }