public override unsafe bool Decrypt(NetIncomingMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } int unEncLenBits = (int)message.ReadUInt32(); int byteLen = NetBitWriter.BytesForBits(unEncLenBits); var result = message.StoragePool.Rent(byteLen); // TODO: create stream that takes Memory<byte> overload fixed(byte *msgPtr = message.GetBuffer()) { using var ms = new UnmanagedMemoryStream(msgPtr + 4, message.ByteLength - 4); using var decryptor = Algorithm.CreateDecryptor(); using var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read); cs.Read(result, 0, byteLen); } message.SetBuffer(result, true); message.BitLength = unEncLenBits; message.BitPosition = 0; return(true); }
public override bool Decrypt(NetIncomingMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } byte[] data = message.GetBuffer(); Span <byte> slice = data.AsSpan(0, message.ByteLength); for (int i = 0; i < slice.Length; i++) { int offset = i % _key.Length; slice[i] = (byte)(slice[i] ^ _key[offset]); } return(true); }