Skip to content

Commit bb2b5a5

Browse files
authored
Merge pull request #579 from RUB-NDS/montgomeryCurveFix
Montgomery curve fix
2 parents 906e045 + 6fee43c commit bb2b5a5

File tree

7 files changed

+23
-13
lines changed

7 files changed

+23
-13
lines changed

TLS-Core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
<plugin>
7474
<groupId>org.jacoco</groupId>
7575
<artifactId>jacoco-maven-plugin</artifactId>
76-
<version>0.7.9</version>
76+
<version>0.8.4</version>
7777
<reportSets>
7878
<reportSet>
7979
<reports>

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/crypto/ec/CurveFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class CurveFactory {
1818
*
1919
* @param name
2020
* The name of the curve, that should be returned.
21+
* @return EllipticCurve for the provided NamedGroup
2122
*/
2223
public static EllipticCurve getCurve(NamedGroup name) {
2324
switch (name) {
@@ -78,7 +79,8 @@ public static EllipticCurve getCurve(NamedGroup name) {
7879
case SECT571R1:
7980
return new EllipticCurveSECT571R1();
8081
default:
81-
throw new UnsupportedOperationException("The provided curve '" + name + "' is not supported.");
82+
throw new UnsupportedOperationException("The provided group '" + name
83+
+ "' is not supported by this method.");
8284

8385
}
8486
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
package de.rub.nds.tlsattacker.core.protocol.handler;
1010

1111
import de.rub.nds.tlsattacker.core.constants.NamedGroup;
12+
import de.rub.nds.tlsattacker.core.crypto.ec.FieldElementF2m;
1213
import de.rub.nds.tlsattacker.core.crypto.ec.Point;
1314
import de.rub.nds.tlsattacker.core.crypto.ec.PointFormatter;
1415
import de.rub.nds.tlsattacker.core.protocol.message.ECDHClientKeyExchangeMessage;
@@ -57,7 +58,10 @@ private void adjustClientPublicKey(ECDHClientKeyExchangeMessage message) {
5758
NamedGroup usedGroup = tlsContext.getChooser().getSelectedNamedGroup();
5859
if (usedGroup == NamedGroup.ECDH_X25519 || usedGroup == NamedGroup.ECDH_X448) {
5960
LOGGER.debug("Adjusting Montgomery EC PublicKey");
60-
tlsContext.setClientEcPublicKey(Point.createPoint(new BigInteger(serializedPoint), null, usedGroup));
61+
// TODO This is only a temporary solution. Montgomory Curves need to
62+
// be integrated into the new EC framework
63+
tlsContext.setClientEcPublicKey(new Point(new FieldElementF2m(new BigInteger(serializedPoint), null),
64+
new FieldElementF2m(new BigInteger(serializedPoint), null)));
6165
} else {
6266
LOGGER.debug("Adjusting EC Point");
6367
Point publicKey = PointFormatter.formatFromByteArray(usedGroup, serializedPoint);

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import de.rub.nds.tlsattacker.core.constants.AlgorithmResolver;
1212
import de.rub.nds.tlsattacker.core.constants.NamedGroup;
13+
import de.rub.nds.tlsattacker.core.crypto.ec.FieldElementF2m;
1314
import de.rub.nds.tlsattacker.core.crypto.ec.Point;
1415
import de.rub.nds.tlsattacker.core.crypto.ec.PointFormatter;
1516
import de.rub.nds.tlsattacker.core.protocol.message.ECDHEServerKeyExchangeMessage;
@@ -61,8 +62,11 @@ protected void adjustECParameter(ECDHEServerKeyExchangeMessage message) {
6162
}
6263
if (group == NamedGroup.ECDH_X448 || group == NamedGroup.ECDH_X25519) {
6364
LOGGER.debug("Adjusting Montgomery EC Point");
64-
Point publicKey = Point.createPoint(new BigInteger(message.getPublicKey().getValue()), null, group);
65-
tlsContext.setServerEcPublicKey(publicKey);
65+
// TODO This is only a temporary solution. Montgomory Curves need to
66+
// be integrated into the new EC framework
67+
tlsContext.setServerEcPublicKey(new Point(new FieldElementF2m(new BigInteger(message.getPublicKey()
68+
.getValue()), null), new FieldElementF2m(new BigInteger(message.getPublicKey().getValue()), null)));
69+
6670
} else if (group != null) {
6771
LOGGER.debug("Adjusting EC Point");
6872
Point publicKeyPoint = PointFormatter.formatFromByteArray(group, message.getPublicKey().getValue());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void adjustTLSExtensionContext(SignatureAndHashAlgorithmsExtensionMessage
4444
byte[] algoBytes = Arrays.copyOfRange(signatureAndHashBytes, i, i
4545
+ HandshakeByteLength.SIGNATURE_HASH_ALGORITHM);
4646
SignatureAndHashAlgorithm algo = SignatureAndHashAlgorithm.getSignatureAndHashAlgorithm(algoBytes);
47-
if (algo.getSignatureAlgorithm() == null || algo.getHashAlgorithm() == null) {
47+
if (algo == null || algo.getSignatureAlgorithm() == null || algo.getHashAlgorithm() == null) {
4848
LOGGER.warn("Unknown SignatureAndHashAlgorithm:" + ArrayConverter.bytesToHexString(algoBytes));
4949
} else {
5050
algoList.add(algo);

Transport/src/main/java/de/rub/nds/tlsattacker/transport/TransportHandlerFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ public static TransportHandler createTransportHandler(Connection con) {
2828
switch (con.getTransportHandlerType()) {
2929
case TCP:
3030
if (localConEndType == ConnectionEndType.CLIENT) {
31-
return new ClientTcpTransportHandler(timeout, con.getHostname(), con.getPort());
31+
return new ClientTcpTransportHandler(timeout, con.getIp(), con.getPort());
3232
} else {
3333
return new ServerTcpTransportHandler(timeout, con.getPort());
3434
}
3535
case EAP_TLS:
3636
throw new UnsupportedOperationException("EAP_TLS is currently not supported");
3737
case UDP:
3838
if (localConEndType == ConnectionEndType.CLIENT) {
39-
return new ClientUdpTransportHandler(timeout, con.getHostname(), con.getPort());
39+
return new ClientUdpTransportHandler(timeout, con.getIp(), con.getPort());
4040
} else {
4141
return new ServerUdpTransportHandler(timeout, con.getPort());
4242
}
@@ -50,26 +50,26 @@ public static TransportHandler createTransportHandler(Connection con) {
5050
throw new UnsupportedOperationException("STREAM TransportHandler can only be created manually");
5151
case TCP_TIMING:
5252
if (localConEndType == ConnectionEndType.CLIENT) {
53-
return new TimingClientTcpTransportHandler(timeout, con.getHostname(), con.getPort());
53+
return new TimingClientTcpTransportHandler(timeout, con.getIp(), con.getPort());
5454
} else {
5555
return new TimingServerTcpTransportHandler(timeout, con.getPort());
5656
}
5757
case UDP_TIMING:
5858
if (localConEndType == ConnectionEndType.CLIENT) {
59-
return new TimingClientUdpTransportHandler(timeout, con.getHostname(), con.getPort());
59+
return new TimingClientUdpTransportHandler(timeout, con.getIp(), con.getPort());
6060
} else {
6161
return new TimingServerUdpTransportHandler(timeout, con.getPort());
6262
}
6363
case TCP_PROXY_TIMING:
6464
if (localConEndType == ConnectionEndType.CLIENT) {
65-
return new TimingProxyClientTcpTransportHandler(timeout, con.getHostname(), con.getPort());
65+
return new TimingProxyClientTcpTransportHandler(timeout, con.getIp(), con.getPort());
6666
} else {
6767
throw new UnsupportedOperationException(
6868
"TCP_PROXY_TIMING for server sockets is currently not supported");
6969
}
7070
case TCP_NO_DELAY:
7171
if (localConEndType == ConnectionEndType.CLIENT) {
72-
return new ClientTcpNoDelayTransportHandler(timeout, con.getHostname(), con.getPort());
72+
return new ClientTcpNoDelayTransportHandler(timeout, con.getIp(), con.getPort());
7373
} else {
7474
throw new UnsupportedOperationException(
7575
"This transport handler type is only supported in client mode");

Transport/src/main/java/de/rub/nds/tlsattacker/transport/tcp/ClientTcpTransportHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class ClientTcpTransportHandler extends TransportHandler {
2929

3030
public ClientTcpTransportHandler(Connection connection) {
3131
super(connection.getTimeout(), ConnectionEndType.CLIENT);
32-
this.hostname = connection.getHostname();
32+
this.hostname = connection.getIp();
3333
this.port = connection.getPort();
3434
this.connectionTimeout = 60000;
3535
}

0 commit comments

Comments
 (0)