Added ecp_XXX_read_string()
diff --git a/include/polarssl/ecp.h b/include/polarssl/ecp.h
index 841bf5e..805e7b0 100644
--- a/include/polarssl/ecp.h
+++ b/include/polarssl/ecp.h
@@ -150,7 +150,7 @@
 #endif
 
 /**
- * \brief           Initialize a point
+ * \brief           Initialize a point (as zero)
  */
 void ecp_point_init( ecp_point *pt );
 
@@ -181,6 +181,36 @@
 int ecp_copy( ecp_point *P, const ecp_point *Q );
 
 /**
+ * \brief           Import a non-zero point from two ASCII strings
+ *
+ * \param P         Destination point
+ * \param radix     Input numeric base
+ * \param x         First affine coordinate as a null-terminated string
+ * \param y         Second affine coordinate as a null-terminated string
+ *
+ * \return          0 if successful, or a POLARSSL_ERR_MPI_XXX error code
+ */
+int ecp_point_read_string( ecp_point *P, int radix,
+                           const char *x, const char *y );
+
+/**
+ * \brief           Import an ECP group from null-terminated ASCII strings
+ *
+ * \param grp       Destination group
+ * \param radix     Input numric base
+ * \param p         Prime modulus of the base field
+ * \param b         Constant term in the equation
+ * \param gx        The generator's X coordinate
+ * \param gy        The generator's Y coordinate
+ * \param n         The generator's order
+ *
+ * \return          0 if successful, or a POLARSSL_ERR_MPI_XXX error code
+ */
+int ecp_group_read_string( ecp_group *grp, int radix,
+                           const char *p, const char *b,
+                           const char *gx, const char *gy, const char *n);
+
+/**
  * \brief           Addition: R = P + Q
  *
  * \param grp       ECP group
diff --git a/library/ecp.c b/library/ecp.c
index 141c13a..f7c839d 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -102,6 +102,40 @@
 }
 
 /*
+ * Import a non-zero point from ASCII strings
+ */
+int ecp_point_read_string( ecp_point *P, int radix,
+                           const char *x, const char *y )
+{
+    int ret = 0;
+
+    P->is_zero = 0;
+    MPI_CHK( mpi_read_string( &P->X, radix, x ) );
+    MPI_CHK( mpi_read_string( &P->Y, radix, y ) );
+
+cleanup:
+    return( ret );
+}
+
+/*
+ * Import an ECP group from ASCII strings
+ */
+int ecp_group_read_string( ecp_group *grp, int radix,
+                           const char *p, const char *b,
+                           const char *gx, const char *gy, const char *n)
+{
+    int ret = 0;
+
+    MPI_CHK( mpi_read_string( &grp->P, radix, p ) );
+    MPI_CHK( mpi_read_string( &grp->B, radix, b ) );
+    MPI_CHK( ecp_point_read_string( &grp->G, radix, gx, gy ) );
+    MPI_CHK( mpi_read_string( &grp->N, radix, n ) );
+
+cleanup:
+    return( ret );
+}
+
+/*
  * Addition: R = P + Q, generic case (P != Q, P != 0, Q != 0, R != 0)
  * Cf SEC1 v2 p. 7, item 4
  */