[pgsqlclient-checkins] pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls TlsSocke
Status: Inactive
Brought to you by:
carlosga_fb
From: <car...@us...> - 2003-10-22 13:12:58
|
Update of /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls In directory sc8-pr-cvs1:/tmp/cvs-serv25051 Modified Files: TlsSocket.cs TlsSslCipherSuite.cs Log Message: Added partial implementation of SSL3 protocol Index: TlsSocket.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/TlsSocket.cs,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** TlsSocket.cs 21 Oct 2003 20:04:10 -0000 1.8 --- TlsSocket.cs 22 Oct 2003 11:47:44 -0000 1.9 *************** *** 55,59 **** internal BufferedStream InputBuffer { ! get { return inputBuffer; } } --- 55,59 ---- internal BufferedStream InputBuffer { ! get { return this.inputBuffer; } } *************** *** 113,117 **** public new int Receive(byte[] buffer, int offset, int size, SocketFlags socketFlags) { ! if (!session.IsSecure) { return base.Receive(buffer, offset, size, socketFlags); --- 113,117 ---- public new int Receive(byte[] buffer, int offset, int size, SocketFlags socketFlags) { ! if (!this.session.IsSecure) { return base.Receive(buffer, offset, size, socketFlags); *************** *** 119,123 **** // If actual buffer is full readed reset it ! if (inputBuffer.Position == inputBuffer.Length) { this.resetBuffer(); --- 119,123 ---- // If actual buffer is full readed reset it ! if (this.inputBuffer.Position == this.inputBuffer.Length) { this.resetBuffer(); *************** *** 126,133 **** // Check if we have space in the middle buffer // if not Read next TLS record and update the inputBuffer ! while ((inputBuffer.Length - inputBuffer.Position) < size) { // Read next record and write it into the inputBuffer ! long position = inputBuffer.Position; byte[] record = this.receiveRecord(); --- 126,133 ---- // Check if we have space in the middle buffer // if not Read next TLS record and update the inputBuffer ! while ((this.inputBuffer.Length - this.inputBuffer.Position) < size) { // Read next record and write it into the inputBuffer ! long position = this.inputBuffer.Position; byte[] record = this.receiveRecord(); *************** *** 135,143 **** { // Write new data to the inputBuffer ! inputBuffer.Seek(0, SeekOrigin.End); ! inputBuffer.Write(record, 0, record.Length); // Restore buffer position ! inputBuffer.Seek(position, SeekOrigin.Begin); } --- 135,143 ---- { // Write new data to the inputBuffer ! this.inputBuffer.Seek(0, SeekOrigin.End); ! this.inputBuffer.Write(record, 0, record.Length); // Restore buffer position ! this.inputBuffer.Seek(position, SeekOrigin.Begin); } *************** *** 148,152 **** } ! return inputBuffer.Read(buffer, offset, size); } --- 148,152 ---- } ! return this.inputBuffer.Read(buffer, offset, size); } *************** *** 168,172 **** public new int Send(byte[] buffer, int offset, int size, SocketFlags socketFlags) { ! if (!session.IsSecure) { return base.Send(buffer, offset, size, socketFlags); --- 168,172 ---- public new int Send(byte[] buffer, int offset, int size, SocketFlags socketFlags) { ! if (!this.session.IsSecure) { return base.Send(buffer, offset, size, socketFlags); *************** *** 186,192 **** private byte[] receiveRecord() { ! if (session.Context.ConnectionEnd) { ! throw session.CreateException("The session is finished and it's no longer valid."); } --- 186,192 ---- private byte[] receiveRecord() { ! if (this.session.Context.ConnectionEnd) { ! throw this.session.CreateException("The session is finished and it's no longer valid."); } *************** *** 206,212 **** TlsStream message = new TlsStream(buffer); ! // Check that the message as a valid protocol version ! if ((protocol != this.session.Context.Protocol && this.session.Context.HelloDone) || ! (protocol != TlsProtocol.Tls1 && protocol != TlsProtocol.Ssl3 )) { throw session.CreateException("Invalid protocol version on message received from server"); --- 206,211 ---- TlsStream message = new TlsStream(buffer); ! // Check that the message has a valid protocol version ! if (protocol != this.session.Context.Protocol) { throw session.CreateException("Invalid protocol version on message received from server"); *************** *** 222,228 **** contentType != TlsContentType.ChangeCipherSpec) { ! message = decryptRecordFragment( contentType, ! protocol, message.ToArray()); } --- 221,227 ---- contentType != TlsContentType.ChangeCipherSpec) { ! message = this.decryptRecordFragment( contentType, ! protocol, message.ToArray()); } *************** *** 235,239 **** { case TlsContentType.Alert: ! processAlert((TlsAlertLevel)message.ReadByte(), (TlsAlertDescription)message.ReadByte()); break; --- 234,238 ---- { case TlsContentType.Alert: ! this.processAlert((TlsAlertLevel)message.ReadByte(), (TlsAlertDescription)message.ReadByte()); break; *************** *** 241,245 **** case TlsContentType.ChangeCipherSpec: // Reset sequence numbers ! session.Context.ReadSequenceNumber = 0; break; --- 240,244 ---- case TlsContentType.ChangeCipherSpec: // Reset sequence numbers ! this.session.Context.ReadSequenceNumber = 0; break; *************** *** 250,254 **** while (!message.EOF) { ! processHandshakeMessage(message); } // Update handshakes of current messages --- 249,253 ---- while (!message.EOF) { ! this.processHandshakeMessage(message); } // Update handshakes of current messages *************** *** 273,288 **** // Encrypt the message ! byte[] ecr = session.Context.Cipher.EncryptRecord(fragment, mac); // Set new IV ! if (session.Context.Cipher.CipherMode == CipherMode.CBC) { ! byte[] iv = new byte[session.Context.Cipher.IvSize]; System.Array.Copy(ecr, ecr.Length - iv.Length, iv, 0, iv.Length); ! session.Context.Cipher.UpdateClientCipherIV(iv); } // Update sequence number ! session.Context.WriteSequenceNumber++; return ecr; --- 272,287 ---- // Encrypt the message ! byte[] ecr = this.session.Context.Cipher.EncryptRecord(fragment, mac); // Set new IV ! if (this.session.Context.Cipher.CipherMode == CipherMode.CBC) { ! byte[] iv = new byte[this.session.Context.Cipher.IvSize]; System.Array.Copy(ecr, ecr.Length - iv.Length, iv, 0, iv.Length); ! this.session.Context.Cipher.UpdateClientCipherIV(iv); } // Update sequence number ! this.session.Context.WriteSequenceNumber++; return ecr; *************** *** 297,308 **** // Decrypt message ! session.Context.Cipher.DecryptRecord(fragment, ref dcrFragment, ref dcrMAC); // Set new IV ! if (session.Context.Cipher.CipherMode == CipherMode.CBC) { byte[] iv = new byte[session.Context.Cipher.IvSize]; System.Array.Copy(fragment, fragment.Length - iv.Length, iv, 0, iv.Length); ! session.Context.Cipher.UpdateServerCipherIV(iv); } --- 296,307 ---- // Decrypt message ! this.session.Context.Cipher.DecryptRecord(fragment, ref dcrFragment, ref dcrMAC); // Set new IV ! if (this.session.Context.Cipher.CipherMode == CipherMode.CBC) { byte[] iv = new byte[session.Context.Cipher.IvSize]; System.Array.Copy(fragment, fragment.Length - iv.Length, iv, 0, iv.Length); ! this.session.Context.Cipher.UpdateServerCipherIV(iv); } *************** *** 324,328 **** // Update sequence number ! session.Context.ReadSequenceNumber++; return new TlsStream(dcrFragment); --- 323,327 ---- // Update sequence number ! this.session.Context.ReadSequenceNumber++; return new TlsStream(dcrFragment); *************** *** 369,376 **** // Reset sequence numbers ! session.Context.WriteSequenceNumber = 0; // Make the pending state to be the current state ! session.Context.IsActual = true; // Send Finished message --- 368,375 ---- // Reset sequence numbers ! this.session.Context.WriteSequenceNumber = 0; // Make the pending state to be the current state ! this.session.Context.IsActual = true; // Send Finished message *************** *** 382,388 **** private int sendRecord(TlsContentType contentType, byte[] recordData) { ! if (session.Context.ConnectionEnd) { ! throw session.CreateException("The session is finished and it's no longer valid."); } --- 381,387 ---- private int sendRecord(TlsContentType contentType, byte[] recordData) { ! if (this.session.Context.ConnectionEnd) { ! throw this.session.CreateException("The session is finished and it's no longer valid."); } *************** *** 393,400 **** byte[] fragment = fragments[i]; ! if (session.Context.IsActual) { // Encrypt fragment ! fragment = encryptRecordFragment(contentType, fragment); } --- 392,399 ---- byte[] fragment = fragments[i]; ! if (this.session.Context.IsActual) { // Encrypt fragment ! fragment = this.encryptRecordFragment(contentType, fragment); } *************** *** 469,473 **** // Create and process the server message ! message = createServerHandshakeMessage(handshakeType, data); // Update session --- 468,472 ---- // Create and process the server message ! message = this.createServerHandshakeMessage(handshakeType, data); // Update session *************** *** 478,488 **** } ! private void processAlert(TlsAlertLevel alertLevel, ! TlsAlertDescription alertDesc) { switch (alertLevel) { case TlsAlertLevel.Fatal: ! throw session.CreateException(alertLevel, alertDesc); case TlsAlertLevel.Warning: --- 477,486 ---- } ! private void processAlert(TlsAlertLevel alertLevel, TlsAlertDescription alertDesc) { switch (alertLevel) { case TlsAlertLevel.Fatal: ! throw this.session.CreateException(alertLevel, alertDesc); case TlsAlertLevel.Warning: *************** *** 491,502 **** { case TlsAlertDescription.CloseNotify: ! session.Context.ConnectionEnd = true; break; default: ! session.RaiseWarningAlert(alertLevel, alertDesc); break; } ! break; } } --- 489,500 ---- { case TlsAlertDescription.CloseNotify: ! this.session.Context.ConnectionEnd = true; break; default: ! this.session.RaiseWarningAlert(alertLevel, alertDesc); break; } ! break; } } *************** *** 658,662 **** default: ! throw session.CreateException("Unknown server handshake message received ({0})", type.ToString()); } } --- 656,660 ---- default: ! throw this.session.CreateException("Unknown server handshake message received ({0})", type.ToString()); } } Index: TlsSslCipherSuite.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/TlsSslCipherSuite.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** TlsSslCipherSuite.cs 21 Oct 2003 20:04:10 -0000 1.6 --- TlsSslCipherSuite.cs 22 Oct 2003 11:47:44 -0000 1.7 *************** *** 149,157 **** block.Write((short)fragment.Length); block.Write(fragment); block.Reset(); - byte[] blockHash = hash.ComputeHash(block.ToArray(), 0, (int)block.Length); - block.Write(this.Context.ServerWriteMAC); block.Write(this.pad2); --- 149,157 ---- block.Write((short)fragment.Length); block.Write(fragment); + + byte[] blockHash = hash.ComputeHash(block.ToArray(), 0, (int)block.Length); block.Reset(); block.Write(this.Context.ServerWriteMAC); block.Write(this.pad2); *************** *** 176,183 **** block.Write((short)fragment.Length); block.Write(fragment); block.Reset(); - - byte[] blockHash = hash.ComputeHash(block.ToArray(), 0, (int)block.Length); block.Write(this.Context.ClientWriteMAC); --- 176,183 ---- block.Write((short)fragment.Length); block.Write(fragment); + + byte[] blockHash = hash.ComputeHash(block.ToArray(), 0, (int)block.Length); block.Reset(); block.Write(this.Context.ClientWriteMAC); |