https://bugzilla.novell.com/show_bug.cgi?id=644740
https://bugzilla.novell.com/show_bug.cgi?id=644740#c0 Summary: CryptoStream fails with CryptoTransform where the OutputBlockSize < InputBlockSize Classification: Mono Product: Mono: Class Libraries Version: 2.6.x Platform: All OS/Version: All Status: NEW Severity: Normal Priority: P5 - None Component: Mono.Security AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729; .NET4.0E) CryptoStream throws a ArgumentException when used with an implementation of ICryptoTransform where the OutputBlockSize is smaller than the InputBlockSize. By inspecting the code it looks like the size of _workingCopy buffer is incorrect -- it should be as large as the InputBlockSize instead of OutputBlockSize. Reproducible: Always Steps to Reproduce: Here is a simple repro: private class MyCryptAlgorithm : ICryptoTransform { public bool CanReuseTransform { get { return true; } } public bool CanTransformMultipleBlocks { get { return false; } } public int InputBlockSize { get { return 128 * 1024; } } public int OutputBlockSize { get { return 64 * 1024; } } public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { return this.OutputBlockSize; } public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { return new byte[this.OutputBlockSize]; } public void Dispose() {} } [Test] [Explicit("Broken on mono https://bugzilla.novell.com/show_bug.cgi?id=644654")] public void CryptoStreamSmallerOutputBlockSize() { using (CryptoStream cs = new CryptoStream(Stream.Null, new MyCryptAlgorithm(), CryptoStreamMode.Write)) { byte[] buffer = new byte[512 * 1024]; cs.Write(buffer, 0, buffer.Length); } } Actual Results: System.ArgumentException : Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection. at System.Buffer.BlockCopy (System.Array src, Int32 srcOffset, System.Array dst, Int32 dstOffset, Int32 count) [0x0000 0] in <filename unknown>:0 at System.Security.Cryptography.CryptoStream.Write (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <fil ename unknown>:0 at UnitTests.Node.Client.ReedSolomonTests.CryptoStreamSmallerOutputBlockSize () [0x00000] in <filename unknown>:0 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, S ystem.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 Expected Results: No exception. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
