Esempio n. 1
0
        protected virtual TlsServerHello GenerateServerHello()
        {
            var serverUnixTime = HandshakeParameters.GetUnixTime();

            HandshakeParameters.ServerRandom = Context.Session.GetSecureRandomBytes(32);
            TlsBuffer.WriteInt32(HandshakeParameters.ServerRandom.Buffer, 0, serverUnixTime);

            return(new TlsServerHello(
                       Context.NegotiatedProtocol, HandshakeParameters.ServerRandom,
                       HandshakeParameters.SessionId, PendingCrypto.Cipher.Code, HandshakeParameters.ActiveExtensions));
        }
Esempio n. 2
0
        SecureBuffer CreateParameterBuffer(HandshakeParameters hsp)
        {
            var length = 4 + publicBytes.Length;

            var buffer = new TlsBuffer(64 + length);

            buffer.Write(hsp.ClientRandom.Buffer);
            buffer.Write(hsp.ServerRandom.Buffer);
            buffer.Write((byte)curveType);
            buffer.Write((short)namedCurve);
            buffer.Write((byte)publicBytes.Length);
            buffer.Write(publicBytes);
            return(new SecureBuffer(buffer.Buffer));
        }
Esempio n. 3
0
 public static SignatureAndHashAlgorithm SelectSignatureType(HandshakeParameters handshakeParameters)
 {
     if (handshakeParameters.SignatureAlgorithms != null)
     {
         return(SelectSignatureType(handshakeParameters.SignatureAlgorithms));
     }
     else if (handshakeParameters.ClientCertificateParameters != null)
     {
         return(SelectSignatureType(handshakeParameters.ClientCertificateParameters.SignatureAndHashAlgorithms));
     }
     else
     {
         return(new SignatureAndHashAlgorithm(HashAlgorithmType.Sha256, SignatureAlgorithmType.Rsa));
     }
 }
        SecureBuffer CreateParameterBuffer(HandshakeParameters hsp)
        {
            var length = P.Length + G.Length + Y.Length + 6;

            var buffer = new TlsBuffer(64 + length);

            buffer.Write(hsp.ClientRandom.Buffer);
            buffer.Write(hsp.ServerRandom.Buffer);
            buffer.Write((short)P.Length);
            buffer.Write(P);
            buffer.Write((short)G.Length);
            buffer.Write(G);
            buffer.Write((short)Y.Length);
            buffer.Write(Y);
            return(new SecureBuffer(buffer.Buffer));
        }
Esempio n. 5
0
        protected virtual TlsClientHello GenerateClientHello()
        {
            var clientUnixTime = HandshakeParameters.GetUnixTime();

            HandshakeParameters.ClientRandom = Context.Session.GetSecureRandomBytes(32);
            TlsBuffer.WriteInt32(HandshakeParameters.ClientRandom.Buffer, 0, clientUnixTime);

            var requestedUserCiphers = Config.UserSettings != null ? Config.UserSettings.RequestedCiphers : null;
            CipherSuiteCollection requestedCiphers;

            if (requestedUserCiphers != null)
            {
                requestedCiphers = new CipherSuiteCollection(Config.RequestedProtocol, requestedUserCiphers);
            }
            else
            {
                requestedCiphers = CipherSuiteFactory.GetDefaultCiphers(Config.RequestedProtocol);
            }
            if (requestedCiphers.Protocol != Config.RequestedProtocol)
            {
                throw new TlsException(AlertDescription.ProtocolVersion);
            }

            HandshakeParameters.SupportedCiphers = requestedCiphers.Clone();

            if (Config.EnableSecureRenegotiation && !Session.SecureRenegotiation && ((Config.RenegotiationFlags & RenegotiationFlags.SendCipherSpecCode) != 0))
            {
                HandshakeParameters.SupportedCiphers.AddSCSV();
            }

            if (ServerNameExtension.IsLegalHostName(Config.TargetHost))
            {
                HandshakeParameters.RequestedExtensions.Add(new ServerNameExtension(Config.TargetHost));
            }
            if (Config.EnableSecureRenegotiation && (Session.SecureRenegotiation || ((Config.RenegotiationFlags & RenegotiationFlags.SendClientHelloExtension) != 0)))
            {
                HandshakeParameters.RequestedExtensions.Add(RenegotiationExtension.CreateClient(Context));
            }
            if (UserSettings.HasClientCertificateParameters)
            {
                HandshakeParameters.RequestedExtensions.Add(new SignatureAlgorithmsExtension(UserSettings.ClientCertificateParameters.SignatureAndHashAlgorithms));
            }

            return(new TlsClientHello(
                       Config.RequestedProtocol, HandshakeParameters.ClientRandom, HandshakeParameters.SessionId,
                       HandshakeParameters.SupportedCiphers.ToArray(), HandshakeParameters.RequestedExtensions));
        }
Esempio n. 6
0
        protected virtual TlsClientHello GenerateClientHello()
        {
            var clientUnixTime = HandshakeParameters.GetUnixTime();

            TlsBuffer.WriteInt32(HandshakeParameters.ClientRandom.Buffer, 0, clientUnixTime);

            if (ServerNameExtension.IsLegalHostName(Config.TargetHost))
            {
                HandshakeParameters.RequestedExtensions.Add(new ServerNameExtension(Config.TargetHost));
            }
            if (Config.EnableSecureRenegotiation && (Session.SecureRenegotiation || ((Config.RenegotiationFlags & RenegotiationFlags.SendClientHelloExtension) != 0)))
            {
                HandshakeParameters.RequestedExtensions.Add(RenegotiationExtension.CreateClient(Context));
            }

            if (Session.SignatureParameters != null)
            {
                HandshakeParameters.RequestedExtensions.Add(new SignatureAlgorithmsExtension(Session.SignatureParameters));
            }

            return(new TlsClientHello(
                       Config.RequestedProtocol, HandshakeParameters.ClientRandom, HandshakeParameters.SessionId,
                       HandshakeParameters.SupportedCiphers.ToArray(), HandshakeParameters.RequestedExtensions));
        }
		SecureBuffer CreateParameterBuffer (HandshakeParameters hsp)
		{
			var length = 4 + publicBytes.Length;

			var buffer = new TlsBuffer (64 + length);
			buffer.Write (hsp.ClientRandom.Buffer);
			buffer.Write (hsp.ServerRandom.Buffer);
			buffer.Write ((byte)curveType);
			buffer.Write ((short)namedCurve);
			buffer.Write ((byte)publicBytes.Length);
			buffer.Write (publicBytes);
			return new SecureBuffer (buffer.Buffer);
		}
		SecureBuffer CreateParameterBuffer (HandshakeParameters hsp)
		{
			var length = P.Length + G.Length + Y.Length + 6;

			var buffer = new TlsBuffer (64 + length);
			buffer.Write (hsp.ClientRandom.Buffer);
			buffer.Write (hsp.ServerRandom.Buffer);
			buffer.Write ((short)P.Length);
			buffer.Write (P);
			buffer.Write ((short)G.Length);
			buffer.Write (G);
			buffer.Write ((short)Y.Length);
			buffer.Write (Y);
			return new SecureBuffer (buffer.Buffer);
		}