diff --git a/include/polarssl/ecp.h b/include/polarssl/ecp.h
index ec9067d..8debda4 100644
--- a/include/polarssl/ecp.h
+++ b/include/polarssl/ecp.h
@@ -324,7 +324,7 @@
  *
  * \param grp       ECP group used
  * \param pt        Destination point
- * \param buf       Start of input buffer
+ * \param buf       $(Start of input buffer)
  * \param len       Buffer length
  *
  * \return          O if successful,
@@ -332,7 +332,7 @@
  *                  POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid
  */
 int ecp_tls_read_point( const ecp_group *grp, ecp_point *pt,
-                        const unsigned char *buf, size_t len );
+                        const unsigned char **buf, size_t len );
 
 /**
  * \brief           Export a point as a TLS ECPoint record
diff --git a/library/ecp.c b/library/ecp.c
index 68f20f7..a76ce70 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -271,9 +271,10 @@
  *      } ECPoint;
  */
 int ecp_tls_read_point( const ecp_group *grp, ecp_point *pt,
-                        const unsigned char *buf, size_t buf_len )
+                        const unsigned char **buf, size_t buf_len )
 {
     unsigned char data_len;
+    const unsigned char *buf_start;
 
     /*
      * We must have at least two bytes (1 for length, at least of for data)
@@ -281,11 +282,17 @@
     if( buf_len < 2 )
         return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
 
-    data_len = *buf++;
+    data_len = *(*buf)++;
     if( data_len < 1 || data_len > buf_len - 1 )
         return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
 
-    return ecp_point_read_binary( grp, pt, buf, data_len );
+    /*
+     * Save buffer start for read_binary and update buf
+     */
+    buf_start = *buf;
+    *buf += data_len;
+
+    return ecp_point_read_binary( grp, pt, buf_start, data_len );
 }
 
 /*
diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function
index 64e0147..a051bd7 100644
--- a/tests/suites/test_suite_ecp.function
+++ b/tests/suites/test_suite_ecp.function
@@ -301,6 +301,7 @@
     mpi X, Y, Z;
     size_t ilen;
     unsigned char buf[256];
+    const unsigned char *vbuf = buf;
 
     memset( buf, 0, sizeof( buf ) );
 
@@ -315,13 +316,14 @@
 
     ilen = unhexify( buf, {input} );
 
-    TEST_ASSERT( ecp_tls_read_point( &grp, &P, buf, ilen ) == {ret} );
+    TEST_ASSERT( ecp_tls_read_point( &grp, &P, &vbuf, ilen ) == {ret} );
 
     if( {ret} == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &P.X, &X ) == 0 );
         TEST_ASSERT( mpi_cmp_mpi( &P.Y, &Y ) == 0 );
         TEST_ASSERT( mpi_cmp_mpi( &P.Z, &Z ) == 0 );
+        TEST_ASSERT( *vbuf == 0x00 );
     }
 
     ecp_group_free( &grp ); ecp_point_free( &P );
@@ -335,37 +337,45 @@
     ecp_group grp;
     ecp_point pt;
     unsigned char buf[256];
+    const unsigned char *vbuf;
     size_t olen;
 
     ecp_group_init( &grp );
     ecp_point_init( &pt );
-    memset( buf, 0x00, sizeof( buf ) );
 
     TEST_ASSERT( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_{id} ) == 0 );
 
+    memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecp_tls_write_point( &grp, &grp.G,
                     POLARSSL_ECP_PF_COMPRESSED, &olen, buf, 256 ) == 0 );
-    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, buf, olen )
+    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, &vbuf, olen )
                  == POLARSSL_ERR_ECP_BAD_INPUT_DATA );
+    TEST_ASSERT( vbuf == buf + olen );
 
+    memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecp_tls_write_point( &grp, &grp.G,
                     POLARSSL_ECP_PF_UNCOMPRESSED, &olen, buf, 256 ) == 0 );
-    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, buf, olen ) == 0 );
+    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &grp.G.X, &pt.X ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &grp.G.Y, &pt.Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &grp.G.Z, &pt.Z ) == 0 );
+    TEST_ASSERT( vbuf == buf + olen );
 
+    memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecp_set_zero( &pt ) == 0 );
     TEST_ASSERT( ecp_tls_write_point( &grp, &pt,
                     POLARSSL_ECP_PF_COMPRESSED, &olen, buf, 256 ) == 0 );
-    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, buf, olen ) == 0 );
+    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 );
     TEST_ASSERT( ecp_is_zero( &pt ) );
+    TEST_ASSERT( vbuf == buf + olen );
 
+    memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecp_set_zero( &pt ) == 0 );
     TEST_ASSERT( ecp_tls_write_point( &grp, &pt,
                     POLARSSL_ECP_PF_UNCOMPRESSED, &olen, buf, 256 ) == 0 );
-    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, buf, olen ) == 0 );
+    TEST_ASSERT( ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 );
     TEST_ASSERT( ecp_is_zero( &pt ) );
+    TEST_ASSERT( vbuf == buf + olen );
 
     ecp_group_free( &grp );
     ecp_point_free( &pt );
