Update of /cvsroot/pgsqlclient/pgsqlclient_10/PgSqlClient.Security.Tls/source
In directory sc8-pr-cvs1:/tmp/cvs-serv5982
Modified Files:
TlsCipherSuite.cs TlsSocket.cs
Log Message:
* Fixed read of large TLS record
* Subst System.Array.Copy for Buffer.BlockCopy
Index: TlsCipherSuite.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PgSqlClient.Security.Tls/source/TlsCipherSuite.cs,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** TlsCipherSuite.cs 16 Sep 2003 22:29:26 -0000 1.10
--- TlsCipherSuite.cs 17 Sep 2003 09:51:59 -0000 1.11
***************
*** 243,251 ****
public void DecryptRecord(byte[] fragment, ref byte[] dcrFragment, ref byte[] dcrMAC)
{
! int fragmentSize = 0;
// Decrypt message fragment ( fragment + mac [+ padding + padding_length] )
byte[] buffer = new byte[fragment.Length];
! int wb = decryptionCipher.TransformBlock(fragment, 0, fragment.Length, buffer, 0);
// Calculate fragment size
--- 243,252 ----
public void DecryptRecord(byte[] fragment, ref byte[] dcrFragment, ref byte[] dcrMAC)
{
! int fragmentSize = 0;
! int paddingLength = 0;
// Decrypt message fragment ( fragment + mac [+ padding + padding_length] )
byte[] buffer = new byte[fragment.Length];
! decryptionCipher.TransformBlock(fragment, 0, fragment.Length, buffer, 0);
// Calculate fragment size
***************
*** 253,257 ****
{
// Calculate padding_length
! int paddingLength = buffer[buffer.Length - 1];
for (int i = (buffer.Length - 1); i > (buffer.Length - (paddingLength + 1)); i--)
{
--- 254,258 ----
{
// Calculate padding_length
! paddingLength = buffer[buffer.Length - 1];
for (int i = (buffer.Length - 1); i > (buffer.Length - (paddingLength + 1)); i--)
{
***************
*** 273,278 ****
dcrMAC = new byte[HashSize];
! System.Array.Copy(buffer, 0, dcrFragment, 0, dcrFragment.Length);
! System.Array.Copy(buffer, dcrFragment.Length, dcrMAC, 0, dcrMAC.Length);
}
--- 274,279 ----
dcrMAC = new byte[HashSize];
! Buffer.BlockCopy(buffer, 0, dcrFragment, 0, dcrFragment.Length);
! Buffer.BlockCopy(buffer, dcrFragment.Length, dcrMAC, 0, dcrMAC.Length);
}
Index: TlsSocket.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PgSqlClient.Security.Tls/source/TlsSocket.cs,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** TlsSocket.cs 16 Sep 2003 22:29:26 -0000 1.3
--- TlsSocket.cs 17 Sep 2003 09:51:59 -0000 1.4
***************
*** 166,171 ****
// Read Record data
! byte[] buffer = new byte[length];
! base.Receive(buffer, 0, buffer.Length, SocketFlags.None);
TlsStreamReader message = new TlsStreamReader(buffer);
--- 166,176 ----
// Read Record data
! int received = 0;
! byte[] buffer = new byte[length];
! while (received != length)
! {
! received += base.Receive(
! buffer, received, buffer.Length - received, SocketFlags.None);
! }
TlsStreamReader message = new TlsStreamReader(buffer);
|