diff --git a/ChangeLog b/ChangeLog
index 96fffc0fcd9d1a3f32cc4c1fa92e1f5d8f52a3d4..6df6294d1e7337b9e610c9d40f42b2d5ca8428c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2014-08-28  Niels Möller  <nisse@lysator.liu.se>
 
+	* testsuite/ecdsa-sign-test.c (test_main): Added test for the
+	obscure case of ecdsa using curve25519.
+
+	* ecc-ecdsa-sign.c (ecc_ecdsa_sign): Use mul_g and h_to_a function
+	pointers. Implies (obscure) support for curve25519.
+
 	* ecc-25519.c (ecc_25519_modq): Access q via the ecc struct.
 
 	* ecc-eh-to-a.c (ecc_eh_to_a): Analogous change as for ecc_j_to_a.
diff --git a/ecc-ecdsa-sign.c b/ecc-ecdsa-sign.c
index 8c97e7c92f93b1079a38b76448f41ff8e93b0b39..7fe8373b9c15e4d350c4b0c28715a4171a7b2695 100644
--- a/ecc-ecdsa-sign.c
+++ b/ecc-ecdsa-sign.c
@@ -1,6 +1,6 @@
 /* ecc-ecdsa-sign.c
 
-   Copyright (C) 2013 Niels Möller
+   Copyright (C) 2013, 2014 Niels Möller
 
    This file is part of GNU Nettle.
 
@@ -46,7 +46,8 @@
 mp_size_t
 ecc_ecdsa_sign_itch (const struct ecc_curve *ecc)
 {
-  /* Needs 3*ecc->size + scratch for ecc_mul_g. */
+  /* Needs 3*ecc->size + scratch for ecc->mul_g. Currently same for
+     ecc_mul_g and ecc_mul_g_eh. */
   return ECC_ECDSA_SIGN_ITCH (ecc->size);
 }
 
@@ -77,9 +78,9 @@ ecc_ecdsa_sign (const struct ecc_curve *ecc,
      4. s2 <-- (h + z*s1)/k mod q.
   */
 
-  ecc_mul_g (ecc, P, kp, P + 3*ecc->size);
+  ecc->mul_g (ecc, P, kp, P + 3*ecc->size);
   /* x coordinate only, modulo q */
-  ecc_j_to_a (ecc, 2, rp, P, P + 3*ecc->size);
+  ecc->h_to_a (ecc, 2, rp, P, P + 3*ecc->size);
 
   /* Invert k, uses 5 * ecc->size including scratch */
   mpn_copyi (hp, kp, ecc->size);
diff --git a/testsuite/ecdsa-sign-test.c b/testsuite/ecdsa-sign-test.c
index 9d9a173094f1520900695070360ae85bcb119c18..db5194cb05cad5fe778a56282db098a02fc897e8 100644
--- a/testsuite/ecdsa-sign-test.c
+++ b/testsuite/ecdsa-sign-test.c
@@ -156,5 +156,18 @@ test_main (void)
 	      "97536710 1F67D1CF 9BCCBF2F 3D239534"
 	      "FA509E70 AAC851AE 01AAC68D 62F86647"
 	      "2660"); /* s */
-}
 
+  /* Non-standard ecdsa using curve25519. Not interop-tested with
+     anything else. */
+  test_ecdsa (&nettle_curve25519,
+	      "1db511101b8fd16f e0212c5679ef53f3"
+	      "323bde77f9efa442 617314d576d1dbcb", /* z */
+	      "aa2fa8facfdc3a99 ec466d41a2c9211c"
+	      "e62e1706f54037ff 8486e26153b0fa79", /* k */
+	      SHEX("e99df2a098c3c590 ea1e1db6d9547339"
+		   "ae760d5331496119 5d967fd881e3b0f5"), /* h */
+	      " 62cbc248a549765 3641d1cbedda2733"
+	      "a7357821dca43727 d8081448d608030d", /* r */
+	      " 14726f472f44f84 63fe82c2712231cd"
+	      "937f2aecdcfe9c39 e2ab0d68c390ccf4"); /* s */
+}