public void Encrypt(IByteBufferAllocator allocator, EncryptMode mode, Stream src, Stream dst, bool reliable) { using (var data = new BufferWrapper(allocator.Buffer().WithOrder(ByteOrder.LittleEndian))) using (var encryptor = GetAlgorithm(mode).CreateEncryptor()) using (var cs = new CryptoStream(new NonClosingStream(dst), encryptor, CryptoStreamMode.Write)) using (var w = cs.ToBinaryWriter(false)) { var blockSize = AES.BlockSize / 8; var padding = blockSize - (src.Length + 1 + 4) % blockSize; if (reliable) { padding = blockSize - (src.Length + 1 + 4 + 2) % blockSize; } if (reliable) { var counter = (ushort)(Interlocked.Increment(ref _encryptCounter) - 1); data.Buffer.WriteShort(counter); } using (var dataStream = new WriteOnlyByteBufferStream(data.Buffer, false)) src.CopyTo(dataStream); w.Write((byte)padding); using (var dataStream = new ReadOnlyByteBufferStream(data.Buffer, false)) { w.Write(Hash.GetUInt32 <CRC32>(dataStream)); dataStream.Position = 0; dataStream.CopyTo(cs); } w.Fill((int)padding); } }
public byte[] DecryptAES(byte[] input) { if (RC4 == null || AES == null) { return(new byte[0]); } var dst = new MemoryStream(); using (var encryptor = AES.CreateEncryptor()) using (var cs = new CryptoStream(new NonClosingStream(new MemoryStream(input)), encryptor, CryptoStreamMode.Read)) using (var w = cs.ToBinaryWriter(false)) { cs.CopyTo(dst); return(dst.ToArray()); } }
public void Encrypt(IByteBufferAllocator allocator, EncryptMode mode, Stream src, Stream dst, bool reliable) { if (RC4 == null || AES == null) { return; } //throw new ObjectDisposedException(GetType().FullName); using (var data = new BufferWrapper(allocator.Buffer())) using (var encryptor = GetAlgorithm(mode).CreateEncryptor()) using (var cs = new CryptoStream(new NonClosingStream(dst), encryptor, CryptoStreamMode.Write)) using (var w = cs.ToBinaryWriter(false)) { var blockSize = AES.BlockSize / 8; var padding = blockSize - ((src.Length + 1 + 4) % blockSize); if (reliable) { padding = blockSize - ((src.Length + 1 + 4 + 2) % blockSize); } if (reliable) { var counter = (ushort)(Interlocked.Increment(ref _encryptCounter) - 1); data.Buffer.WriteShortLE(counter); } using (var dataStream = new WriteOnlyByteBufferStream(data.Buffer, false)) { src.CopyTo(dataStream); } w.Write((byte)padding); using (var dataStream = new ReadOnlyByteBufferStream(data.Buffer, false)) { w.Write(Hash.GetUInt32 <CRC32>(dataStream)); dataStream.Position = 0; dataStream.CopyTo(cs); } w.Fill((int)padding); } }