[pgsqlclient-checkins] pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls TlsSessi
Status: Inactive
Brought to you by:
carlosga_fb
From: <car...@us...> - 2003-10-14 10:14:03
|
Update of /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls In directory sc8-pr-cvs1:/tmp/cvs-serv4083 Modified Files: TlsSessionContext.cs TlsSocket.cs TlsStream.cs Log Message: - TlsStreamReader and TlsStreamWriter classes are replaced by TlStream class. - Added license heaqder to TlsStream class. Index: TlsSessionContext.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/TlsSessionContext.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TlsSessionContext.cs 14 Oct 2003 09:48:01 -0000 1.3 --- TlsSessionContext.cs 14 Oct 2003 10:13:58 -0000 1.4 *************** *** 214,226 **** public byte[] CreatePremasterSecret() { ! TlsStreamWriter stream = new TlsStreamWriter(); // Write protocol version ! stream.WriteShort((short)protocol); // Generate random bytes stream.Write(GetSecureRandomBytes(46)); ! byte[] preMasterSecret = stream.GetBytes(); stream.Reset(); --- 214,226 ---- public byte[] CreatePremasterSecret() { ! TlsStream stream = new TlsStream(); // Write protocol version ! stream.Write((short)protocol); // Generate random bytes stream.Write(GetSecureRandomBytes(46)); ! byte[] preMasterSecret = stream.ToArray(); stream.Reset(); *************** *** 232,236 **** { TlsCipherSuite cipherSuite = cipher; ! TlsStreamWriter seed = new TlsStreamWriter(); // Seed --- 232,236 ---- { TlsCipherSuite cipherSuite = cipher; ! TlsStream seed = new TlsStream(); // Seed *************** *** 240,244 **** // Create master secret masterSecret = new byte[preMasterSecret.Length]; ! masterSecret = PRF(preMasterSecret, "master secret", seed.GetBytes(), 48); seed.Reset(); --- 240,244 ---- // Create master secret masterSecret = new byte[preMasterSecret.Length]; ! masterSecret = PRF(preMasterSecret, "master secret", seed.ToArray(), 48); seed.Reset(); *************** *** 247,251 **** public void CreateKeys() { ! TlsStreamWriter seed = new TlsStreamWriter(); // Seed --- 247,251 ---- public void CreateKeys() { ! TlsStream seed = new TlsStream(); // Seed *************** *** 254,261 **** // Create keyblock ! TlsStreamReader keyBlock = new TlsStreamReader( PRF(masterSecret, "key expansion", ! seed.GetBytes(), cipher.GetKeyBlockSize())); --- 254,261 ---- // Create keyblock ! TlsStream keyBlock = new TlsStream( PRF(masterSecret, "key expansion", ! seed.ToArray(), cipher.GetKeyBlockSize())); *************** *** 286,291 **** // Generate final write keys ! byte[] finalClientWriteKey = PRF(clientWriteKey, "client write key", seed.GetBytes(), cipher.KeyMaterialSize); ! byte[] finalServerWriteKey = PRF(serverWriteKey, "server write key", seed.GetBytes(), cipher.KeyMaterialSize); clientWriteKey = finalClientWriteKey; --- 286,291 ---- // Generate final write keys ! byte[] finalClientWriteKey = PRF(clientWriteKey, "client write key", seed.ToArray(), cipher.KeyMaterialSize); ! byte[] finalServerWriteKey = PRF(serverWriteKey, "server write key", seed.ToArray(), cipher.KeyMaterialSize); clientWriteKey = finalClientWriteKey; *************** *** 293,297 **** // Generate IV block ! byte[] ivBlock = PRF(new byte[]{}, "IV block", seed.GetBytes(), cipher.IvSize*2); // Generate IV keys clientWriteIV = new byte[cipher.IvSize]; --- 293,298 ---- // Generate IV block ! byte[] ivBlock = PRF(new byte[]{}, "IV block", seed.ToArray(), cipher.IvSize*2); ! // Generate IV keys clientWriteIV = new byte[cipher.IvSize]; *************** *** 314,321 **** // Seed ! TlsStreamWriter seedStream = new TlsStreamWriter(); seedStream.Write(Encoding.ASCII.GetBytes(label)); seedStream.Write(data); ! byte[] seed = seedStream.GetBytes(); seedStream.Reset(); --- 315,322 ---- // Seed ! TlsStream seedStream = new TlsStream(); seedStream.Write(Encoding.ASCII.GetBytes(label)); seedStream.Write(data); ! byte[] seed = seedStream.ToArray(); seedStream.Reset(); *************** *** 353,358 **** } ! HMAC hmac = new HMAC(hashName, secret); ! TlsStreamWriter resMacs = new TlsStreamWriter(); byte[][] hmacs = new byte[iterations + 1][]; --- 354,359 ---- } ! HMAC hmac = new HMAC(hashName, secret); ! TlsStream resMacs = new TlsStream(); byte[][] hmacs = new byte[iterations + 1][]; *************** *** 360,369 **** for (int i = 1; i <= iterations; i++) { ! TlsStreamWriter hcseed = new TlsStreamWriter(); hmac.TransformFinalBlock(hmacs[i-1], 0, hmacs[i-1].Length); hmacs[i] = hmac.Hash; hcseed.Write(hmacs[i]); hcseed.Write(seed); ! hmac.TransformFinalBlock(hcseed.GetBytes(), 0, hcseed.GetBytes().Length); resMacs.Write(hmac.Hash); hcseed.Reset(); --- 361,370 ---- for (int i = 1; i <= iterations; i++) { ! TlsStream hcseed = new TlsStream(); hmac.TransformFinalBlock(hmacs[i-1], 0, hmacs[i-1].Length); hmacs[i] = hmac.Hash; hcseed.Write(hmacs[i]); hcseed.Write(seed); ! hmac.TransformFinalBlock(hcseed.ToArray(), 0, (int)hcseed.Length); resMacs.Write(hmac.Hash); hcseed.Reset(); *************** *** 372,376 **** byte[] res = new byte[length]; ! System.Array.Copy(resMacs.GetBytes(), 0, res, 0, res.Length); resMacs.Reset(); --- 373,377 ---- byte[] res = new byte[length]; ! System.Array.Copy(resMacs.ToArray(), 0, res, 0, res.Length); resMacs.Reset(); Index: TlsSocket.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/TlsSocket.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TlsSocket.cs 13 Oct 2003 20:47:11 -0000 1.3 --- TlsSocket.cs 14 Oct 2003 10:13:58 -0000 1.4 *************** *** 204,208 **** } ! TlsStreamReader message = new TlsStreamReader(buffer); // Check that the message as a valid protocol version --- 204,208 ---- } ! TlsStream message = new TlsStream(buffer); // Check that the message as a valid protocol version *************** *** 225,233 **** contentType, protocol, ! message.GetBytes()); } } ! byte[] result = message.GetBytes(); // Process record --- 225,233 ---- contentType, protocol, ! message.ToArray()); } } ! byte[] result = message.ToArray(); // Process record *************** *** 253,257 **** } // Update handshakes of current messages ! this.session.Context.HandshakeHashes.Update(message.GetBytes()); break; --- 253,257 ---- } // Update handshakes of current messages ! this.session.Context.HandshakeHashes.Update(message.ToArray()); break; *************** *** 289,293 **** } ! private TlsStreamReader decryptRecordFragment(TlsContentType contentType, TlsProtocol protocol, byte[] fragment) --- 289,293 ---- } ! private TlsStream decryptRecordFragment(TlsContentType contentType, TlsProtocol protocol, byte[] fragment) *************** *** 326,330 **** session.Context.ReadSequenceNumber++; ! return new TlsStreamReader(dcrFragment); } --- 326,330 ---- session.Context.ReadSequenceNumber++; ! return new TlsStream(dcrFragment); } *************** *** 336,340 **** { // Write record ! int bytesSent = this.sendRecord(TlsContentType.Alert, alert.GetBytes()); // Update session --- 336,340 ---- { // Write record ! int bytesSent = this.sendRecord(TlsContentType.Alert, alert.ToArray()); // Update session *************** *** 400,411 **** // Write tls message ! TlsStreamWriter record = new TlsStreamWriter(); record.Write((byte)contentType); ! record.WriteShort((short)TlsProtocol.Tls1); ! record.WriteShort((short)fragment.Length); record.Write(fragment); // Write record ! bytesSent += base.Send(record.GetBytes()); // Reset record data --- 400,411 ---- // Write tls message ! TlsStream record = new TlsStream(); record.Write((byte)contentType); ! record.Write((short)TlsProtocol.Tls1); ! record.Write((short)fragment.Length); record.Write(fragment); // Write record ! bytesSent += base.Send(record.ToArray()); // Reset record data *************** *** 456,460 **** #region MESSAGE_PROCESSING ! private void processHandshakeMessage(TlsStreamReader handMsg) { TlsHandshakeType handshakeType = (TlsHandshakeType)handMsg.ReadByte(); --- 456,460 ---- #region MESSAGE_PROCESSING ! private void processHandshakeMessage(TlsStream handMsg) { TlsHandshakeType handshakeType = (TlsHandshakeType)handMsg.ReadByte(); *************** *** 514,527 **** private byte[] encodeServerRecordMAC(TlsContentType contentType, byte[] fragment) { ! TlsStreamWriter data = new TlsStreamWriter(); ! byte[] result = null; ! data.WriteLong(session.Context.ReadSequenceNumber); data.Write((byte)contentType); ! data.WriteShort((short)TlsProtocol.Tls1); ! data.WriteShort((short)fragment.Length); data.Write(fragment); ! result = session.Context.Cipher.ServerHMAC.ComputeHash(data.GetBytes()); data.Reset(); --- 514,527 ---- private byte[] encodeServerRecordMAC(TlsContentType contentType, byte[] fragment) { ! TlsStream data = new TlsStream(); ! byte[] result = null; ! data.Write(session.Context.ReadSequenceNumber); data.Write((byte)contentType); ! data.Write((short)TlsProtocol.Tls1); ! data.Write((short)fragment.Length); data.Write(fragment); ! result = session.Context.Cipher.ServerHMAC.ComputeHash(data.ToArray()); data.Reset(); *************** *** 532,545 **** private byte[] encodeClientRecordMAC(TlsContentType contentType, byte[] fragment) { ! TlsStreamWriter data = new TlsStreamWriter(); ! byte[] result = null; ! data.WriteLong(session.Context.WriteSequenceNumber); data.Write((byte)contentType); ! data.WriteShort((short)TlsProtocol.Tls1); ! data.WriteShort((short)fragment.Length); data.Write(fragment); ! result = session.Context.Cipher.ClientHMAC.ComputeHash(data.GetBytes()); data.Reset(); --- 532,545 ---- private byte[] encodeClientRecordMAC(TlsContentType contentType, byte[] fragment) { ! TlsStream data = new TlsStream(); ! byte[] result = null; ! data.Write(session.Context.WriteSequenceNumber); data.Write((byte)contentType); ! data.Write((short)TlsProtocol.Tls1); ! data.Write((short)fragment.Length); data.Write(fragment); ! result = session.Context.Cipher.ClientHMAC.ComputeHash(data.ToArray()); data.Reset(); Index: TlsStream.cs =================================================================== RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/Mono.Security.Protocol.Tls/Mono.Security.Protocol.Tls/TlsStream.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** TlsStream.cs 14 Oct 2003 09:46:19 -0000 1.1 --- TlsStream.cs 14 Oct 2003 10:13:58 -0000 1.2 *************** *** 1,2 **** --- 1,26 ---- + /* Transport Security Layer (TLS) + * Copyright (c) 2003 Carlos Guzmán Álvarez + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + using System; using System.IO; *************** *** 15,18 **** --- 39,61 ---- #endregion + #region PROPERTIES + + public bool EOF + { + get + { + if (this.Position < this.Length) + { + return false; + } + else + { + return true; + } + } + } + + #endregion + #region STREAM_PROPERTIES *************** *** 56,60 **** public TlsStream(byte[] data) : base() { ! this.buffer = new MemoryStream(data, false); this.canRead = true; this.canWrite = false; --- 99,103 ---- public TlsStream(byte[] data) : base() { ! this.buffer = new MemoryStream(data); this.canRead = true; this.canWrite = false; |