Skip to content

Commit 8a90781

Browse files
committed
temporary fix for montgomery curves in <TLS 1.2
1 parent be5ea4a commit 8a90781

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

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());

0 commit comments

Comments
 (0)