[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;
|