In Mono.Security.Protocol.Tls:
authorSebastien Pouliot <sebastien@ximian.com>
Mon, 11 Sep 2006 22:53:35 +0000 (22:53 -0000)
committerSebastien Pouliot <sebastien@ximian.com>
Mon, 11 Sep 2006 22:53:35 +0000 (22:53 -0000)
commit82b68cdbdd5f4648930e65c2e139bad76336f465
tree341ceea03c3b14b4b74732f7d26a648886a4b8d4
parent67a6e59e324fc57754265d2d7b8ae6eb93ba6dc6
In Mono.Security.Protocol.Tls:
2006-09-11  Sebastien Pouliot  <sebastien@ximian.com>

* CipherSuite.cs: Avoid creating a CryptoStream and a MemoryStream in
EncryptRecord (removing the need to do a keysetup each time). Add
helper methods to write inside byte buffers. Decrypt the data in
place (without allocating new memory) as the result will always be
smaller than the original. Avoid TlsStream in CreatePremasterSecret
method. All HMAC access are done with the Negotiating parameters.
* ClientRecordProtocol.cs: Set HandshakeState to None if we receive
a HelloRequest during an existing session. Remove overidden method
ProcessChangeCipherSpec. Skip memory allocation if possible.
* Context.cs: Add new SecurityParameters for current, negotiating,
read and write (actually only two different instance exists). Change
readSequenceNumber and writeSequenceNumber to ulong to match specs.
Remove all properties that are moved/replaced with SecurityParameters.
Added methods to Start and End a switch of the security parameters.
* RecordProtocol.cs: Add code to ProcessChangeCipherSpec (not abstract
anymore). Remove ReadShort and it's use. Deal with null alerts in
SendAlert method (internal error). Change code to deal with
SendChangeCipherSpec inside an existing (encrypted) session. Update
Cipher to use the correct one (mostly Read.Cipher or Negotiating.Cipher
for ProcessCipherSpecV2Buffer method).
* SecurityParameters.cs: New. Deal with all parameters that changes
between negotiations.
* ServerRecordProtocol.cs: Remove method ProcessChangeCipherSpec.
* SslCipherSuite.cs: Don't use TlsStream when computing MAC. Set the
MAC keys to the Negotiating security parameters.
* SslClientStream.cs: Change calls from Cipher to Negotiating.Cipher.
* SslServerStream.cs: Change calls from Cipher to Negotiating.Cipher.
Remove debugging dead code (DateTime).
* SslStreamBase.cs: Change calls from Cipher to Current.Cipher. Reuse
existing memory buffer.
* TlsCipherSuite.cs: Don't use TlsStream when computing MAC. Set the
MAC keys to the Negotiating security parameters.
* TlsClientSettings.cs: Comment code cause compiler warnings.
* TlsStream.cs: Avoid/reduce memory allocations when reading or
writing small integer values to the stream.

In Mono.Security.Protocol.Tls.Handshake.Client:
2006-09-11  Sebastien Pouliot  <sebastien@ximian.com>

* TlsClientFinished.cs: Use Write.Cipher instead of Cipher. Remove
usage of TlsStream in ProcessAsSsl3.
* TlsClientKeyExchange.cs: Use Negotiating.Cipher instead of Cipher.
Refactor to avoid code duplication between SSL3 and TLS.
* TlsServerCertificate.cs: Use Negotiating.Cipher instead of Cipher.
* TlsServerFinished.cs: Use Current.Cipher instead of Cipher. Use
Compare to test client and server digests equality. Remove usage of
TlsStream in ProcessAsSsl3.
* TlsServerHello.cs: Use Negotiating.Cipher instead of Cipher. Remove
usage of TlsStream to reduce memory allocations. Remove method
CompareSessionId and use the new base class Compare method instead.

In Mono.Security.Protocol.Tls.Handshake:
2006-09-11  Sebastien Pouliot  <sebastien@ximian.com>

* HandshakeMessage.cs: EncodeMessage is called very often so we avoid
many allocations by not creating a TlsStream and by not calling
WriteInt24 (IPAddress.HostToNetworkOrder and BitConverter.GetBytes).
We also cache the encoded result to avoid computing/allocating the
encoded message twice (in most cases) for the handshake. Added a
Compare static method to compare byte arrays (easier to step out when
debugging).

In Mono.Security.Protocol.Tls.Handshake.Server:
2006-09-11  Sebastien Pouliot  <sebastien@ximian.com>

* TlsClientCertificate.cs: Use Negotiating.Cipher instead of Cipher.
Fix reading the message length if it's zero (in that case it's not
present two times).
* TlsClientFinished.cs: Use Current.Cipher instead of Cipher. Use
Compare to test client and server digests equality.
* TlsClientHello.cs: Use Negotiating.Cipher instead of Cipher.
* TlsClientKeyExchange.cs: Use Negotiating.Cipher instead of Cipher.
* TlsServerFinished.cs: Use Current.Cipher instead of Cipher.
* TlsServerHello.cs: Use Negotiating.Cipher instead of Cipher.

svn path=/trunk/mcs/; revision=65259
30 files changed:
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/ChangeLog
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientFinished.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientKeyExchange.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerCertificate.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerFinished.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerHello.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/ChangeLog
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientCertificate.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientHello.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientKeyExchange.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerFinished.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerHello.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake/ChangeLog
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake/HandshakeMessage.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/ChangeLog
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/CipherSuite.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/ClientRecordProtocol.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/Context.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SecurityParameters.cs [new file with mode: 0644]
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/ServerRecordProtocol.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslCipherSuite.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslServerStream.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslStreamBase.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/TlsCipherSuite.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/TlsClientSettings.cs
mcs/class/Mono.Security/Mono.Security.Protocol.Tls/TlsStream.cs
mcs/class/Mono.Security/Mono.Security.dll.sources