コード例 #1
0
        public Task PassChallengeAsync(
            Span <byte> publicKey,
            Span <byte> generator,
            Span <byte> safePrime,
            Span <byte> salt)
        {
            _writer.Write((byte)AuthCommand.LogonChallenge);
            _writer.Write((byte)0);

            _writer.Write((byte)AuthStatus.Success);
            _writer.Write(publicKey.Slice(0, 32));
            _writer.Write((byte)generator.Length);
            _writer.Write(generator);
            _writer.Write((byte)safePrime.Length);
            _writer.Write(safePrime);
            _writer.Write(salt.Slice(0, 32));

            // 16 bytes of nothingness
            // TODO: figure out the purpose of this
            for (int i = 0; i < 16; i++)
            {
                _writer.Write((byte)0);
            }

            // security flags
            // TODO: provide these from a param
            _writer.Write((byte)0);

            return(_writer.FlushAsync());
        }
コード例 #2
0
        public async Task Test(object value, Func <AsyncBinaryWriter, object, Task> awriteFunc, Action <BinaryWriter, object> swriteFunc, Func <BinaryReader, object> readFunc, Encoding encoding = null)
        {
            encoding = encoding ?? Encoding.UTF8;

            var sstream = new MemoryStream();
            var swriter = new BinaryWriter(sstream, encoding);

            swriteFunc(swriter, value);
            swriter.Flush();
            sstream.Position = 0;

            var astream = new MemoryStream();
            var awriter = new AsyncBinaryWriter(astream, encoding);

            await awriteFunc(awriter, value);

            await awriter.FlushAsync();

            astream.Position = 0;

            // The following 2 assertions seem redundant. That's okay, though.

            // did AsyncBinaryWriter and BinaryWriter produce same bytes?
            Assert.Equal(sstream.ToArray(), astream.ToArray());

            // did AsyncBinaryWriter produce bytes that can be read by BinaryReader?
            var reader = new BinaryReader(astream, encoding);
            var result = readFunc(reader);

            Assert.Equal(value, result);
        }
コード例 #3
0
ファイル: MiscTests.cs プロジェクト: encodeous/wstream
        public async Task ValidateReadWriteStatistics()
        {
            InterceptData clientData = null, serverData = null;
            var           server = new WsServer();
            await server.StartAsync(new IPEndPoint(IPAddress.Loopback, 0), async stream =>
            {
                await stream.WrapSocketAsync(x =>
                                             Task.FromResult <WStreamSocket>(new Interceptor(x, out serverData))
                                             );
                var abr = new AsyncBinaryReader(stream);
                for (int i = 0; i < 100000; i++)
                {
                    Assert.Equal(i, await abr.ReadInt32Async());
                }
                await stream.CloseAsync();
            });

            var client     = new WsClient();
            var connection = await client.ConnectAsync(new Uri("ws://" + server.ListeningAddresses[0].Substring(7)));

            await connection.WrapSocketAsync(x =>
                                             Task.FromResult <WStreamSocket>(new Interceptor(x, out clientData))
                                             );

            var abw = new AsyncBinaryWriter(connection);

            for (int i = 0; i < 100000; i++)
            {
                await abw.WriteAsync(i);
            }

            await abw.FlushAsync();

            await Task.Delay(1000);

            Assert.Equal(4 * 100000, clientData.BytesWritten);
            Assert.Equal(4 * 100000, serverData.BytesRead);

            client.Dispose();
            server.Dispose();
        }