Skip to content

Commit 75e3b76

Browse files
committed
Removed a lot of the old tls 1.3 draft code and got HRR working again (still missing unit tests).
1 parent aa3503f commit 75e3b76

File tree

11 files changed

+87
-62
lines changed

11 files changed

+87
-62
lines changed

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/constants/CipherSuite.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,26 @@ public static List<CipherSuite> getEsniImplemented() {
10031003
return list;
10041004
}
10051005

1006+
public static List<CipherSuite> getTls13CipherSuites() {
1007+
List<CipherSuite> list = new LinkedList();
1008+
list.add(CipherSuite.TLS_AES_128_GCM_SHA256);
1009+
list.add(CipherSuite.TLS_AES_256_GCM_SHA384);
1010+
list.add(CipherSuite.TLS_CHACHA20_POLY1305_SHA256);
1011+
list.add(CipherSuite.TLS_AES_128_CCM_SHA256);
1012+
list.add(CipherSuite.TLS_AES_128_CCM_8_SHA256);
1013+
return list;
1014+
}
1015+
1016+
public static List<CipherSuite> getImplementedTls13CipherSuites() {
1017+
List<CipherSuite> list = new LinkedList();
1018+
list.add(CipherSuite.TLS_AES_128_GCM_SHA256);
1019+
list.add(CipherSuite.TLS_AES_256_GCM_SHA384);
1020+
list.add(CipherSuite.TLS_CHACHA20_POLY1305_SHA256);
1021+
list.add(CipherSuite.TLS_AES_128_CCM_SHA256);
1022+
list.add(CipherSuite.TLS_AES_128_CCM_8_SHA256);
1023+
return list;
1024+
}
1025+
10061026
public static List<CipherSuite> getNotImplemented() {
10071027
List<CipherSuite> notImplemented = new LinkedList<>();
10081028
for (CipherSuite suite : values()) {

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/constants/SignatureAndHashAlgorithm.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,23 @@ public static List<? extends SignatureAndHashAlgorithm> getImplemented() {
102102
return algoList;
103103
}
104104

105+
public static List<SignatureAndHashAlgorithm> getTls13SignatureAndHashAlgorithms() {
106+
List<SignatureAndHashAlgorithm> algos = new LinkedList<>();
107+
algos.add(SignatureAndHashAlgorithm.RSA_SHA256);
108+
algos.add(SignatureAndHashAlgorithm.RSA_SHA384);
109+
algos.add(SignatureAndHashAlgorithm.RSA_SHA512);
110+
algos.add(SignatureAndHashAlgorithm.ECDSA_SHA256);
111+
algos.add(SignatureAndHashAlgorithm.ECDSA_SHA384);
112+
algos.add(SignatureAndHashAlgorithm.ECDSA_SHA512);
113+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_PSS_SHA256);
114+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_PSS_SHA384);
115+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_PSS_SHA512);
116+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_RSAE_SHA256);
117+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_RSAE_SHA384);
118+
algos.add(SignatureAndHashAlgorithm.RSA_PSS_RSAE_SHA512);
119+
return algos;
120+
}
121+
105122
private int value;
106123

107124
private static final Map<Integer, SignatureAndHashAlgorithm> MAP;
@@ -306,8 +323,9 @@ public static SignatureAndHashAlgorithm forCertificateKeyPair(CertificateKeyPair
306323
break;
307324
}
308325

309-
if (found)
326+
if (found) {
310327
break;
328+
}
311329
}
312330

313331
if (sigHashAlgo == null) {

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/handler/ServerHelloHandler.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,21 @@ public void adjustTLSContext(ServerHelloMessage message) {
8282
adjustSelectedCiphersuite(message);
8383
adjustServerRandom(message);
8484
adjustExtensions(message, HandshakeMessageType.SERVER_HELLO);
85-
if (tlsContext.getChooser().getSelectedProtocolVersion().isTLS13()) {
86-
adjustHandshakeTrafficSecrets();
87-
if (tlsContext.getTalkingConnectionEndType() != tlsContext.getChooser().getConnectionEndType()) {
88-
setServerRecordCipher();
85+
if (!message.isTls13HelloRetryRequest()) {
86+
if (tlsContext.getChooser().getSelectedProtocolVersion().isTLS13()) {
87+
adjustHandshakeTrafficSecrets();
88+
if (tlsContext.getTalkingConnectionEndType() != tlsContext.getChooser().getConnectionEndType()) {
89+
setServerRecordCipher();
90+
}
91+
}
92+
adjustPRF(message);
93+
if (tlsContext.hasSession(tlsContext.getChooser().getServerSessionId())) {
94+
LOGGER.info("Resuming Session");
95+
LOGGER.debug("Loading Mastersecret");
96+
Session session = tlsContext.getSession(tlsContext.getChooser().getServerSessionId());
97+
tlsContext.setMasterSecret(session.getMasterSecret());
98+
setRecordCipher();
8999
}
90-
}
91-
adjustPRF(message);
92-
if (tlsContext.hasSession(tlsContext.getChooser().getServerSessionId())) {
93-
LOGGER.info("Resuming Session");
94-
LOGGER.debug("Loading Mastersecret");
95-
Session session = tlsContext.getSession(tlsContext.getChooser().getServerSessionId());
96-
tlsContext.setMasterSecret(session.getMasterSecret());
97-
setRecordCipher();
98100
}
99101
}
100102

@@ -274,6 +276,7 @@ private byte[] computeSharedSecret(KeyShareStoreEntry keyShare) {
274276
EllipticCurve curve = CurveFactory.getCurve(keyShare.getGroup());
275277
Point publicPoint = PointFormatter.formatFromByteArray(keyShare.getGroup(), keyShare.getPublicKey());
276278
tlsContext.setServerEcPublicKey(publicPoint);
279+
tlsContext.setSelectedGroup(keyShare.getGroup());
277280
BigInteger privateKey = tlsContext.getConfig().getKeySharePrivate();
278281

279282
switch (keyShare.getGroup()) {

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/handler/extension/HrrKeyShareExtensionHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package de.rub.nds.tlsattacker.core.protocol.handler.extension;
1111

12+
import de.rub.nds.tlsattacker.core.constants.NamedGroup;
1213
import de.rub.nds.tlsattacker.core.protocol.message.extension.HRRKeyShareExtensionMessage;
1314
import de.rub.nds.tlsattacker.core.protocol.parser.extension.HRRKeyShareExtensionParser;
1415
import de.rub.nds.tlsattacker.core.protocol.preparator.extension.HRRKeyShareExtensionPreparator;
@@ -43,6 +44,7 @@ public HRRKeyShareExtensionSerializer getSerializer(HRRKeyShareExtensionMessage
4344

4445
@Override
4546
public void adjustTLSExtensionContext(HRRKeyShareExtensionMessage message) {
47+
context.setSelectedGroup(NamedGroup.getNamedGroup(message.getSelectedGroup().getValue()));
4648
}
4749

4850
}

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/message/ClientHelloMessage.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,7 @@ public ClientHelloMessage(Config tlsConfig) {
106106
addExtension(new SupportedVersionsExtensionMessage());
107107
}
108108
if (tlsConfig.isAddKeyShareExtension()) {
109-
if (tlsConfig.getHighestProtocolVersion() != ProtocolVersion.TLS13
110-
&& tlsConfig.getHighestProtocolVersion().getMinor() < 0x17) {
111-
addExtension(new DraftKeyShareExtensionMessage(tlsConfig));
112-
} else {
113-
addExtension(new KeyShareExtensionMessage(tlsConfig));
114-
}
109+
addExtension(new KeyShareExtensionMessage(tlsConfig));
115110
}
116111
if (tlsConfig.isAddEarlyDataExtension()) {
117112
addExtension(new EarlyDataExtensionMessage());

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/message/HandshakeMessage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ public abstract class HandshakeMessage extends ProtocolMessage {
7777
@XmlElement(type = TokenBindingExtensionMessage.class, name = "TokenBindingExtension"),
7878
@XmlElement(type = HRRKeyShareExtensionMessage.class, name = "HRRKeyShareExtension"),
7979
@XmlElement(type = KeyShareExtensionMessage.class, name = "KeyShareExtension"),
80-
@XmlElement(type = DraftKeyShareExtensionMessage.class, name = "DraftKeyShareExtension"),
8180
@XmlElement(type = SupportedVersionsExtensionMessage.class, name = "SupportedVersions"),
8281
@XmlElement(type = AlpnExtensionMessage.class, name = "ALPNExtension"),
8382
@XmlElement(type = CertificateStatusRequestExtensionMessage.class, name = "CertificateStatusRequestExtension"),

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/message/ServerHelloMessage.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,19 @@
2525
import de.rub.nds.tlsattacker.core.protocol.message.extension.sni.ServerNamePair;
2626
import de.rub.nds.tlsattacker.core.state.TlsContext;
2727
import java.nio.charset.Charset;
28+
import java.util.Arrays;
2829
import java.util.Date;
2930
import javax.xml.bind.annotation.XmlRootElement;
3031

3132
@XmlRootElement
3233
public class ServerHelloMessage extends HelloMessage {
3334

35+
private static final byte[] HELLO_RETRY_REQUEST_RANDOM = new byte[] { (byte) 0xCF, (byte) 0x21, (byte) 0xAD,
36+
(byte) 0x74, (byte) 0xE5, (byte) 0x9A, (byte) 0x61, (byte) 0x11, (byte) 0xBE, (byte) 0x1D, (byte) 0x8C,
37+
(byte) 0x02, (byte) 0x1E, (byte) 0x65, (byte) 0xB8, (byte) 0x91, (byte) 0xC2, (byte) 0xA2, (byte) 0x11,
38+
(byte) 0x16, (byte) 0x7A, (byte) 0xBB, (byte) 0x8C, (byte) 0x5E, (byte) 0x07, (byte) 0x9E, (byte) 0x09,
39+
(byte) 0xE2, (byte) 0xC8, (byte) 0xA8, (byte) 0x33, (byte) 0x9C };
40+
3441
@ModifiableVariableProperty(type = ModifiableVariableProperty.Type.TLS_CONSTANT)
3542
private ModifiableByteArray selectedCipherSuite;
3643

@@ -60,12 +67,7 @@ public ServerHelloMessage(Config tlsConfig) {
6067
}
6168

6269
if (tlsConfig.isAddKeyShareExtension()) {
63-
if (tlsConfig.getHighestProtocolVersion() != ProtocolVersion.TLS13
64-
&& tlsConfig.getHighestProtocolVersion().getMinor() < 0x17) {
65-
addExtension(new DraftKeyShareExtensionMessage(tlsConfig));
66-
} else {
67-
addExtension(new KeyShareExtensionMessage(tlsConfig));
68-
}
70+
addExtension(new KeyShareExtensionMessage(tlsConfig));
6971
}
7072
if (tlsConfig.isAddEncryptedServerNameIndicationExtension()) {
7173
addExtension(new EncryptedServerNameIndicationExtensionMessage());
@@ -178,6 +180,14 @@ public void setSelectedCompressionMethod(byte value) {
178180
.safelySetValue(this.selectedCompressionMethod, value);
179181
}
180182

183+
public Boolean isTls13HelloRetryRequest() {
184+
if (this.getRandom() != null && this.getRandom().getValue() != null) {
185+
return Arrays.equals(this.getRandom().getValue(), HELLO_RETRY_REQUEST_RANDOM);
186+
} else {
187+
return null;
188+
}
189+
}
190+
181191
@Override
182192
public String toString() {
183193
StringBuilder sb = new StringBuilder(super.toString());

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/message/extension/DraftKeyShareExtensionMessage.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/parser/HandshakeMessageParser.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import de.rub.nds.tlsattacker.core.constants.ProtocolVersion;
1717
import de.rub.nds.tlsattacker.core.exceptions.ParserException;
1818
import de.rub.nds.tlsattacker.core.protocol.message.HandshakeMessage;
19+
import de.rub.nds.tlsattacker.core.protocol.message.ServerHelloMessage;
1920
import de.rub.nds.tlsattacker.core.protocol.message.extension.ExtensionMessage;
2021
import de.rub.nds.tlsattacker.core.protocol.parser.extension.ExtensionParser;
2122
import de.rub.nds.tlsattacker.core.protocol.parser.extension.ExtensionParserFactory;
@@ -129,9 +130,19 @@ protected void parseExtensionBytes(T message) {
129130
LOGGER.debug("ExtensionBytes:" + ArrayConverter.bytesToHexString(extensionBytes, false));
130131
List<ExtensionMessage> extensionMessages = new LinkedList<>();
131132
int pointer = 0;
133+
HandshakeMessageType type;
134+
// This is not so nice but the KeyShareExtension message has to be
135+
// parsed with a different
136+
//
137+
if (message instanceof ServerHelloMessage && ((ServerHelloMessage) message).isTls13HelloRetryRequest()) {
138+
type = HandshakeMessageType.HELLO_RETRY_REQUEST;
139+
} else {
140+
type = message.getHandshakeMessageType();
141+
}
132142
while (pointer < extensionBytes.length) {
133-
ExtensionParser parser = ExtensionParserFactory.getExtensionParser(extensionBytes, pointer,
134-
message.getHandshakeMessageType(), this.getConfig());
143+
144+
ExtensionParser parser = ExtensionParserFactory.getExtensionParser(extensionBytes, pointer, type,
145+
this.getConfig());
135146
extensionMessages.add(parser.parse());
136147
if (pointer == parser.getPointer()) {
137148
throw new ParserException("Ran into infinite Loop while parsing Extensions");

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/parser/extension/KeyShareExtensionParser.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import de.rub.nds.tlsattacker.core.constants.ExtensionByteLength;
1414
import de.rub.nds.tlsattacker.core.constants.ExtensionType;
1515
import de.rub.nds.tlsattacker.core.exceptions.ParserException;
16-
import de.rub.nds.tlsattacker.core.protocol.message.extension.DraftKeyShareExtensionMessage;
1716
import de.rub.nds.tlsattacker.core.protocol.message.extension.KeyShareExtensionMessage;
1817
import de.rub.nds.tlsattacker.core.protocol.message.extension.keyshare.KeyShareEntry;
1918
import java.util.LinkedList;
@@ -63,11 +62,7 @@ public void parseExtensionMessageContent(KeyShareExtensionMessage msg) {
6362

6463
@Override
6564
protected KeyShareExtensionMessage createExtensionMessage() {
66-
if (type == ExtensionType.KEY_SHARE) {
67-
return new KeyShareExtensionMessage();
68-
} else {
69-
return new DraftKeyShareExtensionMessage();
70-
}
65+
return new KeyShareExtensionMessage();
7166
}
7267

7368
/**

0 commit comments

Comments
 (0)