Skip to content

Commit db91c91

Browse files
authored
Merge pull request #46 from tls-attacker/serialisationRework
Serialisation rework
2 parents f975a42 + 6cd06aa commit db91c91

File tree

49 files changed

+209
-226
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+209
-226
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>de.rub.nds</groupId>
55
<artifactId>ModifiableVariable</artifactId>
6-
<version>3.0.0</version>
6+
<version>3.1.0</version>
77
<packaging>jar</packaging>
88

99
<name>ModifiableVariable</name>

src/main/java/de/rub/nds/modifiablevariable/ModifiableVariable.java

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,107 @@
88
*/
99
package de.rub.nds.modifiablevariable;
1010

11+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerAddModification;
12+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerExplicitValueModification;
13+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerInteractiveModification;
14+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftLeftModification;
15+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftRightModification;
16+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerSubtractModification;
17+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerXorModification;
18+
import de.rub.nds.modifiablevariable.bool.BooleanExplicitValueModification;
19+
import de.rub.nds.modifiablevariable.bool.BooleanToggleModification;
20+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayDeleteModification;
21+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayDuplicateModification;
22+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayExplicitValueModification;
23+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayInsertModification;
24+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayPayloadModification;
25+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayShuffleModification;
26+
import de.rub.nds.modifiablevariable.bytearray.ByteArrayXorModification;
27+
import de.rub.nds.modifiablevariable.integer.IntegerAddModification;
28+
import de.rub.nds.modifiablevariable.integer.IntegerExplicitValueModification;
29+
import de.rub.nds.modifiablevariable.integer.IntegerShiftLeftModification;
30+
import de.rub.nds.modifiablevariable.integer.IntegerShiftRightModification;
31+
import de.rub.nds.modifiablevariable.integer.IntegerSubtractModification;
32+
import de.rub.nds.modifiablevariable.integer.IntegerXorModification;
33+
import de.rub.nds.modifiablevariable.mlong.LongAddModification;
34+
import de.rub.nds.modifiablevariable.mlong.LongExplicitValueModification;
35+
import de.rub.nds.modifiablevariable.mlong.LongSubtractModification;
36+
import de.rub.nds.modifiablevariable.mlong.LongXorModification;
37+
import de.rub.nds.modifiablevariable.singlebyte.ByteAddModification;
38+
import de.rub.nds.modifiablevariable.singlebyte.ByteExplicitValueModification;
39+
import de.rub.nds.modifiablevariable.singlebyte.ByteSubtractModification;
40+
import de.rub.nds.modifiablevariable.singlebyte.ByteXorModification;
41+
import de.rub.nds.modifiablevariable.string.StringExplicitValueModification;
42+
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
1143
import java.io.Serializable;
12-
import javax.xml.bind.annotation.XmlAnyElement;
13-
import javax.xml.bind.annotation.XmlAttribute;
44+
import java.util.Objects;
45+
import javax.xml.bind.annotation.XmlAccessType;
46+
import javax.xml.bind.annotation.XmlAccessorType;
47+
import javax.xml.bind.annotation.XmlElement;
48+
import javax.xml.bind.annotation.XmlElements;
1449
import javax.xml.bind.annotation.XmlRootElement;
1550
import javax.xml.bind.annotation.XmlTransient;
51+
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
1652

1753
/**
1854
* The base abstract class for modifiable variables, including the getValue
19-
* function.
20-
*
21-
* The class needs to be defined transient to allow propOrder definition in
22-
* subclasses, see:
55+
* function.The class needs to be defined transient to allow propOrder
56+
* definition in subclasses, see:
2357
* http://blog.bdoughan.com/2011/06/ignoring-inheritance-with-xmltransient.html
2458
*
59+
*
60+
* @param <E>
2561
*/
2662
@XmlRootElement
2763
@XmlTransient
64+
@XmlAccessorType(XmlAccessType.FIELD)
65+
@XmlJavaTypeAdapter(value = ByteArrayAdapter.class, type = byte[].class)
2866
public abstract class ModifiableVariable<E> implements Serializable {
2967

3068
protected Boolean autoformat = null;
3169

70+
@XmlElements(value = {
71+
@XmlElement(type = BigIntegerXorModification.class, name = "BigIntegerXorModification"),
72+
@XmlElement(type = BigIntegerSubtractModification.class, name = "BigIntegerSubtractModification"),
73+
@XmlElement(type = BigIntegerShiftRightModification.class, name = "BigIntegerShiftRightModification"),
74+
@XmlElement(type = BigIntegerShiftLeftModification.class, name = "BigIntegerShiftLeftModification"),
75+
@XmlElement(type = BigIntegerExplicitValueModification.class, name = "BigIntegerExplicitValueModification"),
76+
@XmlElement(type = BigIntegerAddModification.class, name = "BigIntegerAddModification"),
77+
@XmlElement(type = BigIntegerInteractiveModification.class, name = "BigIntegerInteractiveModification"),
78+
@XmlElement(type = BooleanToggleModification.class, name = "BooleanToggleModification"),
79+
@XmlElement(type = BooleanExplicitValueModification.class, name = "BooleanExplicitValueModification"),
80+
@XmlElement(type = ByteArrayXorModification.class, name = "ByteArrayXorModification"),
81+
@XmlElement(type = ByteArrayShuffleModification.class, name = "ByteArrayShuffleModification"),
82+
@XmlElement(type = ByteArrayPayloadModification.class, name = "ByteArrayPayloadModification"),
83+
@XmlElement(type = ByteArrayInsertModification.class, name = "ByteArrayInsertModification"),
84+
@XmlElement(type = ByteArrayExplicitValueModification.class, name = "ByteArrayExplicitValueModification"),
85+
@XmlElement(type = ByteArrayDuplicateModification.class, name = "ByteArrayDuplicateModification"),
86+
@XmlElement(type = ByteArrayDeleteModification.class, name = "ByteArrayDeleteModification"),
87+
@XmlElement(type = IntegerXorModification.class, name = "IntegerXorModification"),
88+
@XmlElement(type = IntegerSubtractModification.class, name = "IntegerSubtractModification"),
89+
@XmlElement(type = IntegerShiftRightModification.class, name = "IntegerShiftRightModification"),
90+
@XmlElement(type = IntegerShiftLeftModification.class, name = "IntegerShiftLeftModification"),
91+
@XmlElement(type = IntegerExplicitValueModification.class, name = "IntegerExplicitValueModification"),
92+
@XmlElement(type = IntegerAddModification.class, name = "IntegerAddModification"),
93+
@XmlElement(type = LongXorModification.class, name = "LongXorModification"),
94+
@XmlElement(type = LongSubtractModification.class, name = "LongSubtractModification"),
95+
@XmlElement(type = LongExplicitValueModification.class, name = "LongExplicitValueModification"),
96+
@XmlElement(type = LongAddModification.class, name = "LongAddModification"),
97+
@XmlElement(type = ByteXorModification.class, name = "ByteXorModification"),
98+
@XmlElement(type = ByteSubtractModification.class, name = "ByteSubtractModification"),
99+
@XmlElement(type = ByteAddModification.class, name = "ByteAddModification"),
100+
@XmlElement(type = ByteExplicitValueModification.class, name = "ByteExplicitValueModification"),
101+
@XmlElement(type = StringExplicitValueModification.class, name = "StringExplicitValueModification") })
32102
private VariableModification<E> modification = null;
33103

34-
private boolean createRandomModification;
104+
private Boolean createRandomModification;
35105

36106
protected E assertEquals;
37107

38108
public ModifiableVariable() {
39109

40110
}
41111

42-
@XmlAttribute(required = false)
43112
public Boolean getAutoformat() {
44113
return autoformat;
45114
}
@@ -52,13 +121,12 @@ public void setModification(VariableModification<E> modification) {
52121
this.modification = modification;
53122
}
54123

55-
@XmlAnyElement(lax = true)
56124
public VariableModification<E> getModification() {
57125
return modification;
58126
}
59127

60128
public E getValue() {
61-
if (createRandomModification) {
129+
if (Objects.equals(createRandomModification, Boolean.TRUE)) {
62130
createRandomModification();
63131
createRandomModification = false;
64132
}
@@ -87,7 +155,10 @@ public boolean containsAssertion() {
87155
return (assertEquals != null);
88156
}
89157

90-
public boolean isCreateRandomModification() {
158+
public Boolean isCreateRandomModification() {
159+
if (createRandomModification == null) {
160+
return false;
161+
}
91162
return createRandomModification;
92163
}
93164
}

src/main/java/de/rub/nds/modifiablevariable/VariableModification.java

Lines changed: 9 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -8,90 +8,37 @@
88
*/
99
package de.rub.nds.modifiablevariable;
1010

11-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerAddModification;
12-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerExplicitValueModification;
13-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerInteractiveModification;
14-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftLeftModification;
15-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftRightModification;
16-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerSubtractModification;
17-
import de.rub.nds.modifiablevariable.biginteger.BigIntegerXorModification;
18-
import de.rub.nds.modifiablevariable.bool.BooleanExplicitValueModification;
19-
import de.rub.nds.modifiablevariable.bool.BooleanToggleModification;
20-
import de.rub.nds.modifiablevariable.bytearray.*;
2111
import de.rub.nds.modifiablevariable.filter.AccessModificationFilter;
22-
import de.rub.nds.modifiablevariable.integer.IntegerAddModification;
23-
import de.rub.nds.modifiablevariable.integer.IntegerExplicitValueModification;
24-
import de.rub.nds.modifiablevariable.integer.IntegerShiftLeftModification;
25-
import de.rub.nds.modifiablevariable.integer.IntegerShiftRightModification;
26-
import de.rub.nds.modifiablevariable.integer.IntegerSubtractModification;
27-
import de.rub.nds.modifiablevariable.integer.IntegerXorModification;
28-
import de.rub.nds.modifiablevariable.singlebyte.ByteAddModification;
29-
import de.rub.nds.modifiablevariable.singlebyte.ByteExplicitValueModification;
30-
import de.rub.nds.modifiablevariable.singlebyte.ByteSubtractModification;
31-
import de.rub.nds.modifiablevariable.singlebyte.ByteXorModification;
32-
import de.rub.nds.modifiablevariable.string.StringExplicitValueModification;
3312
import de.rub.nds.modifiablevariable.util.ArrayConverter;
34-
import javax.xml.bind.annotation.XmlAnyElement;
13+
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
14+
import javax.xml.bind.annotation.XmlAccessType;
15+
import javax.xml.bind.annotation.XmlAccessorType;
16+
import javax.xml.bind.annotation.XmlElement;
17+
import javax.xml.bind.annotation.XmlElements;
3518
import javax.xml.bind.annotation.XmlRootElement;
36-
import javax.xml.bind.annotation.XmlSeeAlso;
3719
import javax.xml.bind.annotation.XmlTransient;
20+
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
3821
import org.apache.logging.log4j.LogManager;
3922
import org.apache.logging.log4j.Logger;
4023

4124
@XmlRootElement
4225
@XmlTransient
43-
@XmlSeeAlso({ AccessModificationFilter.class, BigIntegerAddModification.class, BigIntegerInteractiveModification.class,
44-
BigIntegerExplicitValueModification.class, BigIntegerSubtractModification.class,
45-
BooleanExplicitValueModification.class, BooleanToggleModification.class, BigIntegerXorModification.class,
46-
BigIntegerShiftLeftModification.class, BigIntegerShiftRightModification.class, IntegerAddModification.class,
47-
IntegerExplicitValueModification.class, IntegerSubtractModification.class, IntegerXorModification.class,
48-
IntegerShiftLeftModification.class, IntegerShiftRightModification.class, ByteArrayDeleteModification.class,
49-
ByteArrayExplicitValueModification.class, ByteArrayInsertModification.class, ByteArrayXorModification.class,
50-
ByteArrayDuplicateModification.class, ByteArrayShuffleModification.class, ByteArrayPayloadModification.class,
51-
ByteAddModification.class, ByteExplicitValueModification.class, ByteSubtractModification.class,
52-
ByteXorModification.class, StringExplicitValueModification.class })
26+
@XmlAccessorType(XmlAccessType.FIELD)
27+
@XmlJavaTypeAdapter(value = ByteArrayAdapter.class, type = byte[].class)
5328
public abstract class VariableModification<E> {
5429

5530
protected static final Logger LOGGER = LogManager.getLogger(VariableModification.class);
5631

57-
/**
58-
* post modification for next modification executed on the given variable
59-
*/
60-
private VariableModification<E> postModification = null;
61-
6232
/**
6333
* In specific cases it is possible to filter out some modifications based
6434
* on given rules. ModificationFilter is responsible for validating if the
6535
* modification can be executed.
6636
*/
37+
@XmlElements(value = { @XmlElement(type = AccessModificationFilter.class, name = "AccessModificationFilter") })
6738
private ModificationFilter modificationFilter = null;
6839

69-
/**
70-
* Get the value of postModification
71-
*
72-
* @return the value of postModification
73-
*/
74-
// http://stackoverflow.com/questions/5122296/jaxb-not-unmarshalling-xml-any-element-to-jaxbelement
75-
@XmlAnyElement(lax = true)
76-
public VariableModification<E> getPostModification() {
77-
return postModification;
78-
}
79-
80-
/**
81-
* Set the value of postModification
82-
*
83-
* @param postModification
84-
* new value of postModification
85-
*/
86-
public void setPostModification(VariableModification<E> postModification) {
87-
this.postModification = postModification;
88-
}
89-
9040
public E modify(E input) {
9141
E modifiedValue = modifyImplementationHook(input);
92-
if (postModification != null) {
93-
modifiedValue = postModification.modify(modifiedValue);
94-
}
9542
if ((modificationFilter == null) || (modificationFilter.filterModification() == false)) {
9643
debug(modifiedValue);
9744
return modifiedValue;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerAddModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
import java.math.BigInteger;
1313
import java.util.Objects;
1414
import java.util.Random;
15+
import javax.xml.bind.annotation.XmlAccessType;
16+
import javax.xml.bind.annotation.XmlAccessorType;
1517
import javax.xml.bind.annotation.XmlRootElement;
1618
import javax.xml.bind.annotation.XmlType;
1719

1820
@XmlRootElement
19-
@XmlType(propOrder = { "summand", "modificationFilter", "postModification" })
21+
@XmlType(propOrder = { "summand", "modificationFilter" })
22+
@XmlAccessorType(XmlAccessType.FIELD)
2023
public class BigIntegerAddModification extends VariableModification<BigInteger> {
2124

2225
private final static int MAX_ADD_LENGTH = 8;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerExplicitValueModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
import java.math.BigInteger;
1313
import java.util.Objects;
1414
import java.util.Random;
15+
import javax.xml.bind.annotation.XmlAccessType;
16+
import javax.xml.bind.annotation.XmlAccessorType;
1517
import javax.xml.bind.annotation.XmlRootElement;
1618
import javax.xml.bind.annotation.XmlType;
1719

1820
@XmlRootElement
19-
@XmlType(propOrder = { "explicitValue", "modificationFilter", "postModification" })
21+
@XmlType(propOrder = { "explicitValue", "modificationFilter" })
22+
@XmlAccessorType(XmlAccessType.FIELD)
2023
public class BigIntegerExplicitValueModification extends VariableModification<BigInteger> {
2124

2225
private final static int MAX_EXPLICIT_LENGTH = 8;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerInteractiveModification.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import javax.xml.bind.annotation.XmlAccessType;
14+
import javax.xml.bind.annotation.XmlAccessorType;
1315
import javax.xml.bind.annotation.XmlRootElement;
16+
import javax.xml.bind.annotation.XmlTransient;
1417
import javax.xml.bind.annotation.XmlType;
1518

1619
@XmlRootElement
17-
@XmlType(propOrder = { "modificationFilter", "postModification" })
20+
@XmlType(propOrder = { "modificationFilter" })
21+
@XmlAccessorType(XmlAccessType.FIELD)
1822
public class BigIntegerInteractiveModification extends VariableModification<BigInteger> {
1923

24+
@XmlTransient
2025
private InteractiveBigIntegerModification modification;
2126

2227
protected BigIntegerInteractiveModification() {

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftLeftModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
1313
import java.util.Random;
14+
import javax.xml.bind.annotation.XmlAccessType;
15+
import javax.xml.bind.annotation.XmlAccessorType;
1416
import javax.xml.bind.annotation.XmlRootElement;
1517
import javax.xml.bind.annotation.XmlType;
1618

1719
@XmlRootElement
18-
@XmlType(propOrder = { "shift", "modificationFilter", "postModification" })
20+
@XmlType(propOrder = { "shift", "modificationFilter" })
21+
@XmlAccessorType(XmlAccessType.FIELD)
1922
public class BigIntegerShiftLeftModification extends VariableModification<BigInteger> {
2023

2124
private final static int MAX_SHIFT_LENGTH = 32;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftRightModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
1313
import java.util.Random;
14+
import javax.xml.bind.annotation.XmlAccessType;
15+
import javax.xml.bind.annotation.XmlAccessorType;
1416
import javax.xml.bind.annotation.XmlRootElement;
1517
import javax.xml.bind.annotation.XmlType;
1618

1719
@XmlRootElement
18-
@XmlType(propOrder = { "shift", "modificationFilter", "postModification" })
20+
@XmlType(propOrder = { "shift", "modificationFilter" })
21+
@XmlAccessorType(XmlAccessType.FIELD)
1922
public class BigIntegerShiftRightModification extends VariableModification<BigInteger> {
2023

2124
private final static int MAX_SHIFT_LENGTH = 32;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerSubtractModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
import java.math.BigInteger;
1313
import java.util.Objects;
1414
import java.util.Random;
15+
import javax.xml.bind.annotation.XmlAccessType;
16+
import javax.xml.bind.annotation.XmlAccessorType;
1517
import javax.xml.bind.annotation.XmlRootElement;
1618
import javax.xml.bind.annotation.XmlType;
1719

1820
@XmlRootElement
19-
@XmlType(propOrder = { "subtrahend", "modificationFilter", "postModification" })
21+
@XmlType(propOrder = { "subtrahend", "modificationFilter" })
22+
@XmlAccessorType(XmlAccessType.FIELD)
2023
public class BigIntegerSubtractModification extends VariableModification<BigInteger> {
2124

2225
private final static int MAX_SUBTRACT_LENGTH = 8;

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerXorModification.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
import java.math.BigInteger;
1313
import java.util.Objects;
1414
import java.util.Random;
15+
import javax.xml.bind.annotation.XmlAccessType;
16+
import javax.xml.bind.annotation.XmlAccessorType;
1517
import javax.xml.bind.annotation.XmlRootElement;
1618
import javax.xml.bind.annotation.XmlType;
1719

1820
@XmlRootElement
19-
@XmlType(propOrder = { "xor", "modificationFilter", "postModification" })
21+
@XmlType(propOrder = { "xor", "modificationFilter" })
22+
@XmlAccessorType(XmlAccessType.FIELD)
2023
public class BigIntegerXorModification extends VariableModification<BigInteger> {
2124

2225
private final static int MAX_XOR_LENGTH = 8;

0 commit comments

Comments
 (0)