//https://tools.ietf.org/rfc/rfc7301.txt //should return no_application_protocol public static async Task UnknownALPN(SecurePipeOptions securePipeOptions) { var exception = await Assert.ThrowsAsync <Leto.Alerts.AlertException>(async() => await TestForAlert(securePipeOptions, s_unknownALPN)); Assert.Equal(Leto.Alerts.AlertLevel.Fatal, exception.Level); Assert.Equal(Leto.Alerts.AlertDescription.no_application_protocol, exception.Description); }
public static async Task WrongInitialHandshakeMessage(SecurePipeOptions securePipeOptions) { var exception = await Assert.ThrowsAsync <Leto.Alerts.AlertException>(async() => await TestForAlert(securePipeOptions, s_wrongHandshakeMessage)); Assert.Equal(Leto.Alerts.AlertLevel.Fatal, exception.Level); Assert.Equal(Leto.Alerts.AlertDescription.unexpected_message, exception.Description); }
public static async Task StartWithApplicationRecord(SecurePipeOptions securePipeOptions) { var exception = await Assert.ThrowsAsync <Leto.Alerts.AlertException>(async() => await TestForAlert(securePipeOptions, s_StartedWithApplication)); Assert.Equal(Leto.Alerts.AlertLevel.Fatal, exception.Level); Assert.Equal(Leto.Alerts.AlertDescription.unexpected_message, exception.Description); }
public static async Task SendHelloWithExtraTrailingBytes(SecurePipeOptions securePipeOptions) { var exception = await Assert.ThrowsAsync <Leto.Alerts.AlertException>(async() => await TestForAlert(securePipeOptions, s_extraBytesAtEnd)); Assert.Equal(Leto.Alerts.AlertLevel.Fatal, exception.Level); Assert.Equal(Leto.Alerts.AlertDescription.decode_error, exception.Description); }
public static async Task InvalidVectorSizeForExtensions(SecurePipeOptions securePipeOptions) { var exception = await Assert.ThrowsAsync <Leto.Alerts.AlertException>(async() => await TestForAlert(securePipeOptions, s_invalidVectorSizeForExtensions)); Assert.Equal(Leto.Alerts.AlertLevel.Fatal, exception.Level); Assert.Equal(Leto.Alerts.AlertDescription.decode_error, exception.Description); Assert.Contains(Leto.Alerts.AlertLevel.Fatal.ToString(), exception.Message); Assert.Contains(Leto.Alerts.AlertDescription.decode_error.ToString(), exception.Message); Assert.Equal(exception.Message, exception.ToString()); }
internal SecurePipeConnection(IPipeConnection connection, SecurePipeOptions securePipeOptions, IConnectionState connectionState) { RecordHandler = new GeneralRecordHandler(null, TlsVersion.Tls1, connection.Output); _securePipeOptions = securePipeOptions; _inputPipe = new Pipe(securePipeOptions.PipeOptions); _outputPipe = new Pipe(securePipeOptions.PipeOptions); _connection = connection; _state = connectionState; _state.Connection = this; _handshakeInput = new Pipe(securePipeOptions.PipeOptions); _handshakeOutput = new Pipe(securePipeOptions.PipeOptions); RecordHandler = new GeneralRecordHandler(_state, TlsVersion.Tls12, _connection.Output); var ignore = ReadingLoop(); }
private static async Task TestForAlert(SecurePipeOptions securePipeOptions, byte[] messageToSend) { using (var pool = new MemoryPool()) { var pipeFactory = new PipeOptions(pool); var connection = new LoopbackPipeline(pipeFactory); var secureConnection = securePipeOptions.CreateConnection(connection.ServerPipeline); var writer = connection.ClientPipeline.Output.Alloc(); writer.Write(messageToSend); await writer.FlushAsync(); var result = await connection.ClientPipeline.Input.ReadAsync(); var exception = CheckForAlert(result.Buffer); connection.ClientPipeline.Input.Advance(result.Buffer.End); var closeConnection = await secureConnection; closeConnection.Dispose(); throw exception; } }
private static async Task ConnectWithSslStream(PipeOptions factory, SecurePipeOptions securePipeOptions, byte[] message) { var loopback = new LoopbackPipeline(factory); var stream = loopback.ClientPipeline.GetStream(); var secureConnection = securePipeOptions.CreateConnection(loopback.ServerPipeline); var ignore = Echo(secureConnection); using (var sslStream = new SslStream(stream, false, CertVal)) { await sslStream.AuthenticateAsClientAsync("localhost"); await sslStream.WriteAsync(message, 0, message.Length); var returnBuffer = new byte[message.Length]; var byteCount = 0; while (byteCount < message.Length) { byteCount += await sslStream.ReadAsync(returnBuffer, byteCount, returnBuffer.Length - byteCount); } Assert.Equal(message, returnBuffer); } secureConnection.Result.Dispose(); }
public static Task MultiBufferFact(PipeOptions factory, SecurePipeOptions securePipeOptions) => ConnectWithSslStream(factory, securePipeOptions, s_MessageLargerThanOneBuffer);
public static Task SmallMessageFact(PipeOptions factory, SecurePipeOptions securePipeOptions) => ConnectWithSslStream(factory, securePipeOptions, s_SmallMessage);
internal SecurePipeClientConnection(IPipeConnection connection, SecurePipeOptions securePipeOptions) : base(connection, securePipeOptions, new Client12ConnectionState()) { }
internal SecurePipeServerConnection(IPipeConnection connection, SecurePipeOptions securePipeOptions) : base(connection, securePipeOptions, new Server12ConnectionState()) { }