Skip to content

Commit 2a26970

Browse files
committed
fixed tls13 version references and streamlined record layer
1 parent a88d71b commit 2a26970

File tree

10 files changed

+23
-28
lines changed

10 files changed

+23
-28
lines changed

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/impl/InvalidCurveAttacker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ private WorkflowTrace prepareRegularTrace(ModifiableByteArray serializedPublicKe
257257
}
258258
WorkflowTrace trace = new WorkflowConfigurationFactory(individualConfig).createWorkflowTrace(
259259
WorkflowTraceType.HELLO, RunningModeType.CLIENT);
260-
if (individualConfig.getHighestProtocolVersion() == ProtocolVersion.TLS13) {
260+
if (individualConfig.getHighestProtocolVersion().isTLS13()) {
261261

262262
// replace specific receive action with generic
263263
trace.removeTlsAction(trace.getTlsActions().size() - 1);
@@ -299,7 +299,7 @@ private WorkflowTrace prepareRegularTrace(ModifiableByteArray serializedPublicKe
299299
private WorkflowTrace prepareRenegotiationTrace(ModifiableByteArray serializedPublicKey, ModifiableByteArray pms,
300300
byte[] explicitPMS, Config individualConfig) {
301301
WorkflowTrace trace;
302-
if (individualConfig.getHighestProtocolVersion() == ProtocolVersion.TLS13) {
302+
if (individualConfig.getHighestProtocolVersion().isTLS13()) {
303303
trace = new WorkflowConfigurationFactory(individualConfig).createWorkflowTrace(WorkflowTraceType.HANDSHAKE,
304304
RunningModeType.CLIENT);
305305
trace.addTlsAction(new ReceiveAction(ReceiveOption.CHECK_ONLY_EXPECTED, new NewSessionTicketMessage(false)));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public static SignatureAndHashAlgorithm forCertificateKeyPair(CertificateKeyPair
258258
clientPreferredHash.removeIf(i -> i.getHashAlgorithm() != chooser.getConfig().getPreferredHashAlgorithm());
259259
algorithms.addAll(0, clientPreferredHash);
260260

261-
if (chooser.getSelectedProtocolVersion() == ProtocolVersion.TLS13) {
261+
if (chooser.getSelectedProtocolVersion().isTLS13()) {
262262
algorithms.removeIf(i -> i.toString().contains("RSA_SHA"));
263263
}
264264

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public CertificateRequestSerializer getSerializer(CertificateRequestMessage mess
5050

5151
@Override
5252
public void adjustTLSContext(CertificateRequestMessage message) {
53-
if (tlsContext.getChooser().getSelectedProtocolVersion() == ProtocolVersion.TLS13) {
53+
if (tlsContext.getChooser().getSelectedProtocolVersion().isTLS13()) {
5454
adjustCertifiateRequestContext(message);
5555
adjustServerSupportedSignatureAndHashAlgorithms(message);
5656
} else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public CertificateRequestParser(int pointer, byte[] array, ProtocolVersion versi
4242
@Override
4343
protected void parseHandshakeMessageContent(CertificateRequestMessage msg) {
4444
LOGGER.debug("Parsing CertificateRequestMessage");
45-
if (getVersion() == ProtocolVersion.TLS13) {
45+
if (getVersion().isTLS13()) {
4646
parseCertificateRequestContextLength(msg);
4747
parseCertificateRequestContext(msg);
4848
parseExtensionLength(msg);

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/preparator/CertificateRequestPreparator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public CertificateRequestPreparator(Chooser chooser, CertificateRequestMessage m
3939
@Override
4040
public void prepareHandshakeMessageContents() {
4141
LOGGER.debug("Preparing CertificateRequestMessage");
42-
if (chooser.getSelectedProtocolVersion() == ProtocolVersion.TLS13) {
42+
if (chooser.getSelectedProtocolVersion().isTLS13()) {
4343
prepareCertificateReqeustContext(msg);
4444
prepareCertificateRequstContextLength(msg);
4545
sigHashAlgos = convertSigAndHashAlgos(chooser.getServerSupportedSignatureAndHashAlgorithms());

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/preparator/ServerHelloPreparator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private void prepareCompressionMethod() {
8787
}
8888

8989
private void prepareSessionID() {
90-
if (chooser.getSelectedProtocolVersion().isTLS13()) {
90+
if (chooser.getConfig().getHighestProtocolVersion().isTLS13()) {
9191
msg.setSessionId(chooser.getClientSessionId());
9292
} else {
9393
msg.setSessionId(chooser.getServerSessionId());
@@ -97,7 +97,7 @@ private void prepareSessionID() {
9797

9898
private void prepareProtocolVersion() {
9999
ProtocolVersion ourVersion = chooser.getConfig().getHighestProtocolVersion();
100-
if (chooser.getConfig().getHighestProtocolVersion() == ProtocolVersion.TLS13) {
100+
if (chooser.getConfig().getHighestProtocolVersion().isTLS13()) {
101101
ourVersion = ProtocolVersion.TLS12;
102102
}
103103

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/protocol/serializer/CertificateRequestSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public CertificateRequestSerializer(CertificateRequestMessage message, ProtocolV
3838
@Override
3939
public byte[] serializeHandshakeMessageContent() {
4040
LOGGER.debug("Serializing CertificateRequestMessage");
41-
if (version == ProtocolVersion.TLS13) {
41+
if (version.isTLS13()) {
4242
writeCertificateRquestContextLength(msg);
4343
writeCertificateRquestContext(msg);
4444
writeExtensionLength();

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/record/cipher/RecordAEADCipher.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,8 @@ public void encrypt(Record record) throws CryptoException {
143143
ArrayConverter.bytesToHexString(additionalAuthenticatedData));
144144

145145
byte[] plainBytes = record.getComputations().getPlainRecordBytes().getValue();
146-
byte[] wholeCipherText;
147-
if (version == ProtocolVersion.TLS12 || version == ProtocolVersion.TLS13
148-
|| version == ProtocolVersion.TLS13_DRAFT25 || version == ProtocolVersion.TLS13_DRAFT26
149-
|| version == ProtocolVersion.TLS13_DRAFT27 || version == ProtocolVersion.TLS13_DRAFT28) {
150-
wholeCipherText = encryptCipher.encrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE,
151-
additionalAuthenticatedData, plainBytes);
152-
} else {
153-
wholeCipherText = encryptCipher.encrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE, plainBytes);
154-
}
146+
byte[] wholeCipherText = encryptCipher.encrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE,
147+
additionalAuthenticatedData, plainBytes);
155148

156149
byte[] onlyCiphertext = Arrays.copyOfRange(wholeCipherText, 0, wholeCipherText.length - aeadTagLength);
157150

@@ -218,16 +211,9 @@ public void decrypt(Record record) throws CryptoException {
218211
// the decryption
219212

220213
try {
221-
byte[] plainRecordBytes;
222-
if (version == ProtocolVersion.TLS12 || version == ProtocolVersion.TLS13
223-
|| version == ProtocolVersion.TLS13_DRAFT25 || version == ProtocolVersion.TLS13_DRAFT26
224-
|| version == ProtocolVersion.TLS13_DRAFT27 || version == ProtocolVersion.TLS13_DRAFT28) {
225-
plainRecordBytes = decryptCipher.decrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE,
226-
additionalAuthenticatedData, ArrayConverter.concatenate(cipherTextOnly, authenticationTag));
227-
} else {
228-
plainRecordBytes = decryptCipher.decrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE,
229-
ArrayConverter.concatenate(cipherTextOnly, authenticationTag));
230-
}
214+
byte[] plainRecordBytes = decryptCipher.decrypt(gcmNonce, aeadTagLength * Bits.IN_A_BYTE,
215+
additionalAuthenticatedData, ArrayConverter.concatenate(cipherTextOnly, authenticationTag));
216+
231217
record.getComputations().setAuthenticationTagValid(true);
232218
record.getComputations().setPlainRecordBytes(plainRecordBytes);
233219
plainRecordBytes = record.getComputations().getPlainRecordBytes().getValue();

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/record/layer/TlsRecordLayer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import de.rub.nds.tlsattacker.core.state.TlsContext;
3131
import java.io.ByteArrayOutputStream;
3232
import java.io.IOException;
33+
import java.math.BigInteger;
3334
import java.util.LinkedList;
3435
import java.util.List;
3536
import org.apache.logging.log4j.LogManager;
@@ -178,6 +179,13 @@ public void decryptAndDecompressRecord(AbstractRecord record) {
178179
.getContentMessageType() == ProtocolMessageType.APPLICATION_DATA)) {
179180
decryptor.decrypt(record);
180181
decompressor.decompress(record);
182+
} else {
183+
// Do not decrypt the record
184+
record.prepareComputations();
185+
((Record) record).setSequenceNumber(BigInteger.valueOf(tlsContext.getReadSequenceNumber()));
186+
byte[] protocolMessageBytes = record.getProtocolMessageBytes().getValue();
187+
record.setCleanProtocolMessageBytes(protocolMessageBytes);
188+
// tlsContext.increaseReadSequenceNumber();
181189
}
182190
} else {
183191
LOGGER.warn("Decrypting received non Record:" + record.toString());

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/workflow/action/executor/ReceiveMessageHelper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ public MessageParsingResult parseMessages(RecordGroup recordGroup, TlsContext co
251251
List<ProtocolMessage> messages = new LinkedList<>();
252252
List<DtlsHandshakeMessageFragment> messageFragments = null;
253253
for (RecordGroup group : RecordGroup.generateRecordGroups(recordGroup.getRecords())) {
254+
254255
List<RecordGroup> subGroups = group.splitIntoProcessableSubgroups();
255256
for (RecordGroup subGroup : subGroups) {
256257

0 commit comments

Comments
 (0)