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); }
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); }
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); }