diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle
index af2d70bb945706b522fb358bc53d5e40c518920a..84f2acc874a2f156bd060706b30ca7f6dbe8c4e3 100644
--- a/bramble-core/build.gradle
+++ b/bramble-core/build.gradle
@@ -23,6 +23,7 @@ dependencies {
 	testImplementation "org.jmock:jmock-legacy:2.8.2"
 	testImplementation "org.hamcrest:hamcrest-library:1.3"
 	testImplementation "org.hamcrest:hamcrest-core:1.3"
+	testImplementation "org.whispersystems:curve25519-java:0.4.1"
 
 	testApt 'com.google.dagger:dagger-compiler:2.0.2'
 }
@@ -53,6 +54,7 @@ dependencyVerification {
 			'org.jmock:jmock:2.8.2:jmock-2.8.2.jar:6c73cb4a2e6dbfb61fd99c9a768539c170ab6568e57846bd60dbf19596b65b16',
 			'org.objenesis:objenesis:2.1:objenesis-2.1.jar:c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80',
 			'org.ow2.asm:asm:5.0.4:asm-5.0.4.jar:896618ed8ae62702521a78bc7be42b7c491a08e6920a15f89a3ecdec31e9a220',
+			'org.whispersystems:curve25519-java:0.4.1:curve25519-java-0.4.1.jar:7dd659d8822c06c3aea1a47f18fac9e5761e29cab8100030b877db445005f03e',
 	]
 }
 
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
index ed61badfe5c6dc8b4226d3ff6534ba371e3f644a..0909bdc4e1ec6d3389acb93bfa0bdeb6d1c478c0 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
@@ -12,7 +12,6 @@ import org.spongycastle.crypto.Digest;
 import org.spongycastle.crypto.agreement.ECDHBasicAgreement;
 import org.spongycastle.crypto.agreement.ECDHCBasicAgreement;
 import org.spongycastle.crypto.digests.Blake2bDigest;
-import org.spongycastle.crypto.ec.CustomNamedCurves;
 import org.spongycastle.crypto.generators.ECKeyPairGenerator;
 import org.spongycastle.crypto.params.ECDomainParameters;
 import org.spongycastle.crypto.params.ECKeyGenerationParameters;
@@ -24,6 +23,8 @@ import org.spongycastle.crypto.signers.HMacDSAKCalculator;
 import org.spongycastle.math.ec.ECCurve;
 import org.spongycastle.math.ec.ECPoint;
 import org.spongycastle.math.ec.MontgomeryLadderMultiplier;
+import org.whispersystems.curve25519.Curve25519;
+import org.whispersystems.curve25519.Curve25519KeyPair;
 
 import java.math.BigInteger;
 import java.security.GeneralSecurityException;
@@ -65,11 +66,8 @@ public class EllipticCurvePerformanceTest {
 			runTest(name + " constant", constantTime(params));
 		}
 		runTest("ours", PARAMETERS);
-		ECDomainParameters params =
-				convertParams(CustomNamedCurves.getByName("curve25519"));
-		runAgreementTest("curve25519 default", params);
-		runAgreementTest("curve25519 constant", constantTime(params));
-		runEdTest();
+		runCurve25519Test();
+		runEd25519Test();
 	}
 
 	private static void runTest(String name, ECDomainParameters params) {
@@ -136,22 +134,24 @@ public class EllipticCurvePerformanceTest {
 		else return new ECDHBasicAgreement();
 	}
 
-	private static void runAgreementTest(String name,
-			ECDomainParameters params) {
-		// Generate two key pairs using the given parameters
-		ECKeyPairGenerator generator = new ECKeyPairGenerator();
-		generator.init(new ECKeyGenerationParameters(params, random));
-		AsymmetricCipherKeyPair keyPair1 = generator.generateKeyPair();
-		AsymmetricCipherKeyPair keyPair2 = generator.generateKeyPair();
-		// Time some ECDH and ECDHC key agreements
-		long agreementMedian = runAgreementTest(keyPair1, keyPair2, false);
-		long agreementWithCofactorMedian =
-				runAgreementTest(keyPair1, keyPair2, true);
-		System.out.println(String.format("%s: %,d %,d N/A N/A", name,
-				agreementMedian, agreementWithCofactorMedian));
+	private static void runCurve25519Test() {
+		Curve25519 curve25519 = Curve25519.getInstance("java");
+		Curve25519KeyPair keyPair1 = curve25519.generateKeyPair();
+		Curve25519KeyPair keyPair2 = curve25519.generateKeyPair();
+		// Time some key agreements
+		List<Long> samples = new ArrayList<>();
+		for (int i = 0; i < SAMPLES; i++) {
+			long start = System.nanoTime();
+			curve25519.calculateAgreement(keyPair1.getPublicKey(),
+					keyPair2.getPrivateKey());
+			samples.add(System.nanoTime() - start);
+		}
+		long agreementMedian = median(samples);
+		System.out.println(String.format("Curve25519: %,d - - -",
+				agreementMedian));
 	}
 
-	private static void runEdTest() throws GeneralSecurityException {
+	private static void runEd25519Test() throws GeneralSecurityException {
 		KeyPair keyPair = new KeyPairGenerator().generateKeyPair();
 		// Time some signatures
 		List<Long> samples = new ArrayList<>();
@@ -179,7 +179,7 @@ public class EllipticCurvePerformanceTest {
 			samples.add(System.nanoTime() - start);
 		}
 		long verificationMedian = median(samples);
-		System.out.println(String.format("Ed25519: N/A %,d %,d",
+		System.out.println(String.format("Ed25519: - - %,d %,d",
 				signatureMedian, verificationMedian));
 	}