Beispiel #1
0
        public void EasyDecodeTest()
        {
            var buffer = new byte[100];
            var span   = buffer.AsSpan();

            var list = new List <KeyShare>();

            list.Add(new KeyShare()
            {
                Group       = NamedGroup.ffdhe2048,
                KeyExchange = (ServerConnectionId.Generate().ConnectionIdBytes)
            });
            list.Add(new KeyShare()
            {
                Group       = NamedGroup.secp521r1,
                KeyExchange = (ServerConnectionId.Generate().ConnectionIdBytes)
            });

            foreach (var actual in list)
            {
                var afterWrite = span.Write(actual);
                var afterRead  = ((ReadOnlySpan <byte>)span).Read(out KeyShare result);

                Assert.AreEqual(actual, result);
                Assert.IsTrue(afterWrite.SequenceEqual(afterRead));
            }

            {
                List <KeyShare> result = new List <KeyShare>();

                var afterWrite = span.Write(list);
                var afterRead  = ((ReadOnlySpan <byte>)span).Read(result);

                Assert.IsTrue(list.SequenceEqual(result));
                Assert.IsTrue(afterWrite.SequenceEqual(afterRead));
                Assert.AreEqual(2 + 2 * list.Count + 2 * list.Count + list.Sum(k => k.KeyExchange.Length), buffer.Length - afterWrite.Length);
            }
        }
Beispiel #2
0
        private MessageSets(int setNum)
        {
            var index = JsonConvert.DeserializeObject <Index>(File.ReadAllText(ConstructFileName(setNum, "index.json")));

            ClientId = new ClientConnectionId(index.ClientId.ToByteArrayFromHex());
            ServerId = new ServerConnectionId(index.ServerId.ToByteArrayFromHex());

            var clientIp = index.ClientIp.ToByteArrayFromHex();

            using (var rdr = new Reader(ConstructFileName(setNum, "wireshark.pcapng")))
            {
                int i = 1;
                foreach (var packet in rdr.AllBlocks.Select(x => x as EnhancedPacketBlock).Where(x => x != null))
                {
                    var data = packet.Data.AsSpan()
                               .ReadBytes(14, out _)
                               .ReadByte(out var ipHeader)
                               .ReadBytes((ipHeader & 0xf) * 4 - 9, out _)
                               .ReadBytes(4, out var source)
                               .ReadBytes(4, out _)
                               .ReadBytes(8, out _);

                    files[i] = new DataFile()
                    {
                        Sequence = i++,
                        Data     = data.ToArray(),
                        Source   = source.SequenceEqual(clientIp) ? DataFileSources.Client : DataFileSources.Server,
                    };
                }
            }

            if (index.Secrets != null)
            {
                LoadSecrets(index.Secrets);
            }
        }