Some operations are not supported with Curve25519
diff --git a/include/polarssl/ecp.h b/include/polarssl/ecp.h
index 4391914..e4fce69 100644
--- a/include/polarssl/ecp.h
+++ b/include/polarssl/ecp.h
@@ -444,6 +444,9 @@
  *
  * \return          0 if successful,
  *                  POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed
+ *
+ * \note            This function does not support Montgomery curves, such as
+ *                  Curve25519.
  */
 int ecp_add( const ecp_group *grp, ecp_point *R,
              const ecp_point *P, const ecp_point *Q );
@@ -458,6 +461,9 @@
  *
  * \return          0 if successful,
  *                  POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed
+ *
+ * \note            This function does not support Montgomery curves, such as
+ *                  Curve25519.
  */
 int ecp_sub( const ecp_group *grp, ecp_point *R,
              const ecp_point *P, const ecp_point *Q );
diff --git a/library/ecdsa.c b/library/ecdsa.c
index 13f394b..2072d55 100644
--- a/library/ecdsa.c
+++ b/library/ecdsa.c
@@ -59,6 +59,10 @@
     ecp_point R;
     mpi k, e;
 
+    /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
+    if( grp->N.p == NULL )
+        return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
+
     ecp_point_init( &R );
     mpi_init( &k );
     mpi_init( &e );
@@ -129,6 +133,10 @@
     ecp_point_init( &R ); ecp_point_init( &P );
     mpi_init( &e ); mpi_init( &s_inv ); mpi_init( &u1 ); mpi_init( &u2 );
 
+    /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
+    if( grp->N.p == NULL )
+        return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
+
     /*
      * Step 1: make sure r and s are in range 1..n-1
      */
diff --git a/library/ecp.c b/library/ecp.c
index fd21dd7..d661c2e 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -946,6 +946,9 @@
 {
     int ret;
 
+    if( ecp_is_montgomery( grp ) )
+        return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE );
+
     MPI_CHK( ecp_add_mixed( grp, R, P, Q ) );
     MPI_CHK( ecp_normalize_jac( grp, R ) );
 
@@ -965,6 +968,9 @@
 
     ecp_point_init( &mQ );
 
+    if( ecp_is_montgomery( grp ) )
+        return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE );
+
     /* mQ = - Q */
     ecp_copy( &mQ, Q );
     if( mpi_cmp_int( &mQ.Y, 0 ) != 0 )