Skip to content

Commit bf2279c

Browse files
committed
Added deep copy variants of CopyBufferActions
1 parent 43bb79e commit bf2279c

File tree

6 files changed

+249
-2
lines changed

6 files changed

+249
-2
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
import de.rub.nds.modifiablevariable.bytearray.ModifiableByteArray;
1313
import de.rub.nds.modifiablevariable.integer.ModifiableInteger;
1414
import de.rub.nds.tlsattacker.core.constants.CipherSuite;
15+
import java.io.Serializable;
1516

16-
public class PSKBinder {
17+
public class PSKBinder implements Serializable {
1718

1819
private CipherSuite binderCipherConfig;
1920

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
import de.rub.nds.modifiablevariable.bytearray.ModifiableByteArray;
1313
import de.rub.nds.modifiablevariable.integer.ModifiableInteger;
1414
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
15+
import java.io.Serializable;
1516
import javax.xml.bind.annotation.XmlAccessType;
1617
import javax.xml.bind.annotation.XmlAccessorType;
1718
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
1819

1920
@XmlAccessorType(XmlAccessType.FIELD)
20-
public class PSKIdentity {
21+
public class PSKIdentity implements Serializable {
2122

2223
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
2324
private byte[] identityConfig;

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/workflow/WorkflowTrace.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ public class WorkflowTrace implements Serializable {
6969
@XmlElement(type = CopyContextFieldAction.class, name = "CopyContextField"),
7070
@XmlElement(type = CopyServerRandomAction.class, name = "CopyServerRandom"),
7171
@XmlElement(type = DeactivateEncryptionAction.class, name = "DeactivateEncryption"),
72+
@XmlElement(type = DeepCopyBufferedMessagesAction.class, name = "DeepCopyBufferedMessages"),
73+
@XmlElement(type = DeepCopyBufferedRecordsAction.class, name = "DeepCopyBufferedRecords"),
74+
@XmlElement(type = DeepCopyBuffersAction.class, name = "DeepCopyBuffers"),
7275
@XmlElement(type = FindReceivedProtocolMessageAction.class, name = "FindReceivedProtocolMessage"),
7376
@XmlElement(type = ForwardAction.class, name = "Forward"),
7477
@XmlElement(type = ForwardRecordsAction.class, name = "ForwardRecords"),
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.tlsattacker.core.workflow.action;
10+
11+
import de.rub.nds.tlsattacker.core.exceptions.WorkflowExecutionException;
12+
import de.rub.nds.tlsattacker.core.protocol.message.ProtocolMessage;
13+
import de.rub.nds.tlsattacker.core.state.TlsContext;
14+
import static de.rub.nds.tlsattacker.core.workflow.action.TlsAction.LOGGER;
15+
import java.io.ByteArrayInputStream;
16+
import java.io.ByteArrayOutputStream;
17+
import java.io.IOException;
18+
import java.io.ObjectInputStream;
19+
import java.io.ObjectOutputStream;
20+
import java.util.LinkedList;
21+
22+
public class DeepCopyBufferedMessagesAction extends CopyContextFieldAction {
23+
24+
public DeepCopyBufferedMessagesAction() {
25+
}
26+
27+
public DeepCopyBufferedMessagesAction(String srcConnectionAlias, String dstConnectionAlias) {
28+
super(srcConnectionAlias, dstConnectionAlias);
29+
}
30+
31+
@Override
32+
protected void copyField(TlsContext src, TlsContext dst) {
33+
deepCopyMessages(src, dst);
34+
}
35+
36+
@Override
37+
public boolean executedAsPlanned() {
38+
return isExecuted();
39+
}
40+
41+
@Override
42+
public void reset() {
43+
setExecuted(false);
44+
}
45+
46+
private void deepCopyMessages(TlsContext src, TlsContext dst)
47+
{
48+
LinkedList<ProtocolMessage> messageBuffer = new LinkedList<>();
49+
ObjectOutputStream outStream;
50+
ObjectInputStream inStream;
51+
try {
52+
for (ProtocolMessage message : src.getMessageBuffer()) {
53+
54+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
55+
outStream = new ObjectOutputStream(stream);
56+
outStream.writeObject(message);
57+
outStream.close();
58+
inStream = new ObjectInputStream(new ByteArrayInputStream(stream.toByteArray()));
59+
ProtocolMessage messageCopy = (ProtocolMessage) inStream.readObject();
60+
61+
messageBuffer.add(messageCopy);
62+
}
63+
} catch (IOException | ClassNotFoundException ex) {
64+
LOGGER.error("Error while creating deep copy of messageBuffer");
65+
throw new WorkflowExecutionException(ex.toString());
66+
}
67+
68+
dst.setMessageBuffer(messageBuffer);
69+
}
70+
71+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.tlsattacker.core.workflow.action;
10+
11+
import de.rub.nds.tlsattacker.core.exceptions.WorkflowExecutionException;
12+
import de.rub.nds.tlsattacker.core.record.AbstractRecord;
13+
import de.rub.nds.tlsattacker.core.state.TlsContext;
14+
import static de.rub.nds.tlsattacker.core.workflow.action.TlsAction.LOGGER;
15+
import java.io.ByteArrayInputStream;
16+
import java.io.ByteArrayOutputStream;
17+
import java.io.IOException;
18+
import java.io.ObjectInputStream;
19+
import java.io.ObjectOutputStream;
20+
import java.util.LinkedList;
21+
22+
public class DeepCopyBufferedRecordsAction extends CopyContextFieldAction {
23+
24+
public DeepCopyBufferedRecordsAction() {
25+
26+
}
27+
28+
public DeepCopyBufferedRecordsAction(String srcConnectionAlias, String dstConnectionAlias) {
29+
super(srcConnectionAlias, dstConnectionAlias);
30+
}
31+
32+
@Override
33+
protected void copyField(TlsContext src, TlsContext dst) {
34+
deepCopyRecords(src, dst);
35+
}
36+
37+
@Override
38+
public boolean executedAsPlanned() {
39+
return isExecuted();
40+
}
41+
42+
@Override
43+
public void reset() {
44+
setExecuted(false);
45+
}
46+
47+
private void deepCopyRecords(TlsContext src, TlsContext dst)
48+
{
49+
LinkedList<AbstractRecord> recordBuffer = new LinkedList<>();
50+
ObjectOutputStream outStream;
51+
ObjectInputStream inStream;
52+
try {
53+
for (AbstractRecord record : src.getRecordBuffer()) {
54+
55+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
56+
outStream = new ObjectOutputStream(stream);
57+
outStream.writeObject(record);
58+
outStream.close();
59+
inStream = new ObjectInputStream(new ByteArrayInputStream(stream.toByteArray()));
60+
AbstractRecord recordCopy = (AbstractRecord) inStream.readObject();
61+
62+
recordBuffer.add(recordCopy);
63+
}
64+
} catch (IOException | ClassNotFoundException ex) {
65+
LOGGER.error("Error while creating deep copy of recordBuffer");
66+
throw new WorkflowExecutionException(ex.toString());
67+
}
68+
69+
dst.setRecordBuffer(recordBuffer);
70+
}
71+
72+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/**
2+
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.tlsattacker.core.workflow.action;
10+
11+
import de.rub.nds.tlsattacker.core.exceptions.WorkflowExecutionException;
12+
import de.rub.nds.tlsattacker.core.protocol.message.ProtocolMessage;
13+
import de.rub.nds.tlsattacker.core.record.AbstractRecord;
14+
import de.rub.nds.tlsattacker.core.state.TlsContext;
15+
import java.io.ByteArrayInputStream;
16+
import java.io.ByteArrayOutputStream;
17+
import java.io.IOException;
18+
import java.io.ObjectInputStream;
19+
import java.io.ObjectOutputStream;
20+
import java.util.LinkedList;
21+
22+
public class DeepCopyBuffersAction extends CopyContextFieldAction {
23+
24+
public DeepCopyBuffersAction() {
25+
26+
}
27+
28+
public DeepCopyBuffersAction(String srcConnectionAlias, String dstConnectionAlias) {
29+
super(srcConnectionAlias, dstConnectionAlias);
30+
}
31+
32+
@Override
33+
protected void copyField(TlsContext src, TlsContext dst) {
34+
deepCopyRecords(src, dst);
35+
deepCopyMessages(src, dst);
36+
}
37+
38+
@Override
39+
public boolean executedAsPlanned() {
40+
return isExecuted();
41+
}
42+
43+
@Override
44+
public void reset() {
45+
setExecuted(false);
46+
}
47+
48+
private void deepCopyRecords(TlsContext src, TlsContext dst)
49+
{
50+
LinkedList<AbstractRecord> recordBuffer = new LinkedList<>();
51+
ObjectOutputStream outStream;
52+
ObjectInputStream inStream;
53+
try {
54+
for (AbstractRecord record : src.getRecordBuffer()) {
55+
56+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
57+
outStream = new ObjectOutputStream(stream);
58+
outStream.writeObject(record);
59+
outStream.close();
60+
inStream = new ObjectInputStream(new ByteArrayInputStream(stream.toByteArray()));
61+
AbstractRecord recordCopy = (AbstractRecord) inStream.readObject();
62+
63+
recordBuffer.add(recordCopy);
64+
}
65+
} catch (IOException | ClassNotFoundException ex) {
66+
LOGGER.error("Error while creating deep copy of recordBuffer");
67+
throw new WorkflowExecutionException(ex.toString());
68+
}
69+
70+
dst.setRecordBuffer(recordBuffer);
71+
}
72+
73+
private void deepCopyMessages(TlsContext src, TlsContext dst)
74+
{
75+
LinkedList<ProtocolMessage> messageBuffer = new LinkedList<>();
76+
ObjectOutputStream outStream;
77+
ObjectInputStream inStream;
78+
try {
79+
for (ProtocolMessage message : src.getMessageBuffer()) {
80+
81+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
82+
outStream = new ObjectOutputStream(stream);
83+
outStream.writeObject(message);
84+
outStream.close();
85+
inStream = new ObjectInputStream(new ByteArrayInputStream(stream.toByteArray()));
86+
ProtocolMessage messageCopy = (ProtocolMessage) inStream.readObject();
87+
88+
messageBuffer.add(messageCopy);
89+
}
90+
} catch (IOException | ClassNotFoundException ex) {
91+
LOGGER.error("Error while creating deep copy of messageBuffer");
92+
throw new WorkflowExecutionException(ex.toString());
93+
}
94+
95+
dst.setMessageBuffer(messageBuffer);
96+
}
97+
98+
99+
}

0 commit comments

Comments
 (0)