Example #1
0
        public override Task WriteAsync(ArraySegment <byte> buffer, CancellationToken cancellationToken = new CancellationToken())
        {
            var buf = ArrayPool <byte> .Shared.Rent(buffer.Count + 20);

            var ctext = new ArraySegment <byte>(buf, 20, buffer.Count);
            var tag   = new ArraySegment <byte>(buf, 4, 16);

            BitConverter.TryWriteBytes(new ArraySegment <byte>(buf, 0, 4), buffer.Count);
            lock (_writeNonce)
            {
                _aes.Encrypt(_writeNonce, buffer, ctext, tag);
                IncrementNonce(_writeNonce);
            }

            async Task Send()
            {
                await WrappedSocket.WriteAsync(new ArraySegment <byte>(buf, 0, buffer.Count + 20), cancellationToken);

                ArrayPool <byte> .Shared.Return(buf);
            }

            return(Send());
        }
Example #2
0
 public override Task WriteAsync(ArraySegment <byte> buffer, CancellationToken cancellationToken = new CancellationToken())
 {
     _data.BytesWritten += buffer.Count;
     return(WrappedSocket.WriteAsync(buffer, cancellationToken));
 }