Skip to content

Commit 12d7e77

Browse files
committed
DTLS: Keep record layer in handshake state
1 parent 8e9d744 commit 12d7e77

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

tls/src/main/java/org/bouncycastle/tls/DTLSClientProtocol.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ public DTLSTransport connect(TlsClient client, DatagramTransport transport)
3434

3535
TlsClientContextImpl clientContext = new TlsClientContextImpl(client.getCrypto());
3636

37-
ClientHandshakeState state = new ClientHandshakeState();
38-
state.client = client;
39-
state.clientContext = clientContext;
40-
4137
client.init(clientContext);
4238
clientContext.handshakeBeginning(client);
4339

@@ -47,9 +43,14 @@ public DTLSTransport connect(TlsClient client, DatagramTransport transport)
4743
DTLSRecordLayer recordLayer = new DTLSRecordLayer(clientContext, client, transport);
4844
client.notifyCloseHandle(recordLayer);
4945

46+
ClientHandshakeState state = new ClientHandshakeState();
47+
state.client = client;
48+
state.clientContext = clientContext;
49+
state.recordLayer = recordLayer;
50+
5051
try
5152
{
52-
return clientHandshake(state, recordLayer);
53+
return clientHandshake(state);
5354
}
5455
catch (TlsFatalAlertReceived fatalAlertReceived)
5556
{
@@ -59,17 +60,17 @@ public DTLSTransport connect(TlsClient client, DatagramTransport transport)
5960
}
6061
catch (TlsFatalAlert fatalAlert)
6162
{
62-
abortClientHandshake(state, recordLayer, fatalAlert.getAlertDescription());
63+
abortClientHandshake(state, fatalAlert.getAlertDescription());
6364
throw fatalAlert;
6465
}
6566
catch (IOException e)
6667
{
67-
abortClientHandshake(state, recordLayer, AlertDescription.internal_error);
68+
abortClientHandshake(state, AlertDescription.internal_error);
6869
throw e;
6970
}
7071
catch (RuntimeException e)
7172
{
72-
abortClientHandshake(state, recordLayer, AlertDescription.internal_error);
73+
abortClientHandshake(state, AlertDescription.internal_error);
7374
throw new TlsFatalAlert(AlertDescription.internal_error, e);
7475
}
7576
finally
@@ -78,17 +79,18 @@ public DTLSTransport connect(TlsClient client, DatagramTransport transport)
7879
}
7980
}
8081

81-
protected void abortClientHandshake(ClientHandshakeState state, DTLSRecordLayer recordLayer, short alertDescription)
82+
protected void abortClientHandshake(ClientHandshakeState state, short alertDescription)
8283
{
83-
recordLayer.fail(alertDescription);
84+
state.recordLayer.fail(alertDescription);
8485
invalidateSession(state);
8586
}
8687

87-
protected DTLSTransport clientHandshake(ClientHandshakeState state, DTLSRecordLayer recordLayer)
88+
protected DTLSTransport clientHandshake(ClientHandshakeState state)
8889
throws IOException
8990
{
9091
TlsClient client = state.client;
9192
TlsClientContextImpl clientContext = state.clientContext;
93+
DTLSRecordLayer recordLayer = state.recordLayer;
9294
SecurityParameters securityParameters = clientContext.getSecurityParametersHandshake();
9395

9496
DTLSReliableHandshake handshake = new DTLSReliableHandshake(clientContext, recordLayer,
@@ -1142,6 +1144,7 @@ protected static class ClientHandshakeState
11421144
{
11431145
TlsClient client = null;
11441146
TlsClientContextImpl clientContext = null;
1147+
DTLSRecordLayer recordLayer = null;
11451148
TlsSession tlsSession = null;
11461149
SessionParameters sessionParameters = null;
11471150
TlsSecret sessionMasterSecret = null;

tls/src/main/java/org/bouncycastle/tls/DTLSServerProtocol.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,6 @@ public DTLSTransport accept(TlsServer server, DatagramTransport transport, DTLSR
5050

5151
TlsServerContextImpl serverContext = new TlsServerContextImpl(server.getCrypto());
5252

53-
ServerHandshakeState state = new ServerHandshakeState();
54-
state.server = server;
55-
state.serverContext = serverContext;
56-
5753
server.init(serverContext);
5854
serverContext.handshakeBeginning(server);
5955

@@ -63,9 +59,14 @@ public DTLSTransport accept(TlsServer server, DatagramTransport transport, DTLSR
6359
DTLSRecordLayer recordLayer = new DTLSRecordLayer(serverContext, server, transport);
6460
server.notifyCloseHandle(recordLayer);
6561

62+
ServerHandshakeState state = new ServerHandshakeState();
63+
state.server = server;
64+
state.serverContext = serverContext;
65+
state.recordLayer = recordLayer;
66+
6667
try
6768
{
68-
return serverHandshake(state, recordLayer, request);
69+
return serverHandshake(state, request);
6970
}
7071
catch (TlsFatalAlertReceived fatalAlertReceived)
7172
{
@@ -75,17 +76,17 @@ public DTLSTransport accept(TlsServer server, DatagramTransport transport, DTLSR
7576
}
7677
catch (TlsFatalAlert fatalAlert)
7778
{
78-
abortServerHandshake(state, recordLayer, fatalAlert.getAlertDescription());
79+
abortServerHandshake(state, fatalAlert.getAlertDescription());
7980
throw fatalAlert;
8081
}
8182
catch (IOException e)
8283
{
83-
abortServerHandshake(state, recordLayer, AlertDescription.internal_error);
84+
abortServerHandshake(state, AlertDescription.internal_error);
8485
throw e;
8586
}
8687
catch (RuntimeException e)
8788
{
88-
abortServerHandshake(state, recordLayer, AlertDescription.internal_error);
89+
abortServerHandshake(state, AlertDescription.internal_error);
8990
throw new TlsFatalAlert(AlertDescription.internal_error, e);
9091
}
9192
finally
@@ -94,17 +95,17 @@ public DTLSTransport accept(TlsServer server, DatagramTransport transport, DTLSR
9495
}
9596
}
9697

97-
protected void abortServerHandshake(ServerHandshakeState state, DTLSRecordLayer recordLayer, short alertDescription)
98+
protected void abortServerHandshake(ServerHandshakeState state, short alertDescription)
9899
{
99-
recordLayer.fail(alertDescription);
100+
state.recordLayer.fail(alertDescription);
100101
invalidateSession(state);
101102
}
102103

103-
protected DTLSTransport serverHandshake(ServerHandshakeState state, DTLSRecordLayer recordLayer,
104-
DTLSRequest request) throws IOException
104+
protected DTLSTransport serverHandshake(ServerHandshakeState state, DTLSRequest request) throws IOException
105105
{
106106
TlsServer server = state.server;
107107
TlsServerContextImpl serverContext = state.serverContext;
108+
DTLSRecordLayer recordLayer = state.recordLayer;
108109
SecurityParameters securityParameters = serverContext.getSecurityParametersHandshake();
109110

110111
DTLSReliableHandshake handshake = new DTLSReliableHandshake(serverContext, recordLayer,
@@ -138,7 +139,7 @@ protected DTLSTransport serverHandshake(ServerHandshakeState state, DTLSRecordLa
138139
}
139140

140141
{
141-
byte[] serverHelloBody = generateServerHello(state, recordLayer);
142+
byte[] serverHelloBody = generateServerHello(state);
142143

143144
// TODO[dtls13] Ideally, move this into generateServerHello once legacy_record_version clarified
144145
{
@@ -452,7 +453,7 @@ protected byte[] generateNewSessionTicket(ServerHandshakeState state, NewSession
452453
return buf.toByteArray();
453454
}
454455

455-
protected byte[] generateServerHello(ServerHandshakeState state, DTLSRecordLayer recordLayer)
456+
protected byte[] generateServerHello(ServerHandshakeState state)
456457
throws IOException
457458
{
458459
TlsServer server = state.server;
@@ -710,7 +711,7 @@ else if (TlsUtils.hasExpectedEmptyExtensionData(state.serverExtensions,
710711

711712
state.clientHello = null;
712713

713-
applyMaxFragmentLengthExtension(recordLayer, securityParameters.getMaxFragmentLength());
714+
applyMaxFragmentLengthExtension(state.recordLayer, securityParameters.getMaxFragmentLength());
714715

715716
ByteArrayOutputStream buf = new ByteArrayOutputStream();
716717
serverHello.encode(serverContext, buf);
@@ -1020,6 +1021,7 @@ protected static class ServerHandshakeState
10201021
{
10211022
TlsServer server = null;
10221023
TlsServerContextImpl serverContext = null;
1024+
DTLSRecordLayer recordLayer = null;
10231025
TlsSession tlsSession = null;
10241026
SessionParameters sessionParameters = null;
10251027
TlsSecret sessionMasterSecret = null;

0 commit comments

Comments
 (0)