示例#1
0
        public TlsContext(TlsConfiguration configuration, bool isServer, IMonoTlsEventSink eventSink)
        {
            this.configuration = configuration;
            this.isServer      = isServer;
            this.eventSink     = eventSink;

                        #if INSTRUMENTATION
            var instrumentation = configuration.UserSettings.Instrumentation;
            if (instrumentation != null)
            {
                if (instrumentation.HasSignatureInstrument)
                {
                    signatureProvider = instrumentation.SignatureInstrument;
                }
                if (instrumentation.HasSettingsInstrument)
                {
                    settingsProvider = instrumentation.SettingsInstrument;
                }
                handshakeInstruments     = instrumentation.HandshakeInstruments;
                instrumentationEventSink = instrumentation.EventSink;
            }
                        #endif

            if (signatureProvider == null)
            {
                signatureProvider = new SignatureProvider();
            }
            if (settingsProvider == null)
            {
                settingsProvider = new SettingsProvider(configuration.UserSettings);
            }

            session = new Session(configuration);
            Session.RandomNumberGenerator = RandomNumberGenerator.Create();

            if (IsServer)
            {
                negotiationHandler = CreateNegotiationHandler(NegotiationState.InitialServerConnection);
            }
            else
            {
                negotiationHandler = CreateNegotiationHandler(NegotiationState.InitialClientConnection);
            }

            if (settingsProvider.EnableDebugging)
            {
                EnableDebugging = true;
            }

            settingsProvider.Initialize(this);
        }
示例#2
0
        SecurityStatus _DecryptMessage(ref TlsBuffer incoming)
        {
            // Try to read the Record Content Type
            var contentType = (ContentType)incoming.ReadByte();

                        #if DEBUG_FULL
            if (EnableDebugging)
            {
                DebugHelper.WriteLine("DecryptMessage({0}): {1}", IsServer ? "server" : "client", contentType);
            }
                        #endif

            if (contentType == ContentType.Handshake)
            {
                                #if INSTRUMENTATION
                if (HasInstrumentationEventSink)
                {
                    InstrumentationEventSink.StartRenegotiation(this);
                }
                                #endif
                incoming.Position--;
                return(SecurityStatus.Renegotiate);
            }

            ReadStandardBuffer(contentType, ref incoming);

            if (contentType == ContentType.Alert)
            {
                var level       = (AlertLevel)incoming.ReadByte();
                var description = (AlertDescription)incoming.ReadByte();
                if (level == AlertLevel.Warning && description == AlertDescription.CloseNotify)
                {
                    ReceivedCloseNotify = true;
                    if (eventSink != null)
                    {
                        eventSink.ReceivedCloseNotify();
                    }
                    return(SecurityStatus.ContextExpired);
                }
                DebugHelper.WriteLine("ALERT: {0} {1}", level, description);
                throw new TlsException(level, description);
            }
            else if (contentType == ContentType.ApplicationData)
            {
                return(SecurityStatus.OK);
            }

            throw new TlsException(AlertDescription.UnexpectedMessage, "Unknown content type {0}", contentType);
        }
示例#3
0
		public TlsContext (TlsConfiguration configuration, bool isServer, IMonoTlsEventSink eventSink)
		{
			this.configuration = configuration;
			this.isServer = isServer;
			this.eventSink = eventSink;

			#if INSTRUMENTATION
			var instrumentation = configuration.UserSettings.Instrumentation;
			if (instrumentation != null) {
				if (instrumentation.HasSignatureInstrument)
					signatureProvider = instrumentation.SignatureInstrument;
				if (instrumentation.HasSettingsInstrument)
					settingsProvider = instrumentation.SettingsInstrument;
				handshakeInstruments = instrumentation.HandshakeInstruments;
				instrumentationEventSink = instrumentation.EventSink;
			}
			#endif

			if (signatureProvider == null)
				signatureProvider = new SignatureProvider ();
			if (settingsProvider == null)
				settingsProvider = new SettingsProvider (configuration.UserSettings);

			session = new Session (configuration);
			Session.RandomNumberGenerator = RandomNumberGenerator.Create ();

			if (IsServer)
				negotiationHandler = CreateNegotiationHandler (NegotiationState.InitialServerConnection);
			else
				negotiationHandler = CreateNegotiationHandler (NegotiationState.InitialClientConnection);

			if (settingsProvider.EnableDebugging)
				EnableDebugging = true;

			settingsProvider.Initialize (this);
		}