[Mono-bugs] [Bug 644740] New: CryptoStream fails with CryptoTransform where the OutputBlockSize < InputBlockSize

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Oct 7 15:20:55 EDT 2010



           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: spouliot at novell.com
        ReportedBy: bassam at symform.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:
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

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() {}

        [Explicit("Broken on mono
        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
  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.

More information about the mono-bugs mailing list