diff --git a/library/ecp.c b/library/ecp.c
index 851d230..58bffe4 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -2066,12 +2066,13 @@
 #include "mbedtls/oid.h"
 int mbedtls_ecp_ansi_write_group( const mbedtls_ecp_group *grp,
                                   unsigned char *p,
-                                  size_t size )
+                                  size_t size, size_t *olen )
 {
     const char *oid;
     unsigned char *q;
     size_t oid_length;
     int ret;
+
     ret = mbedtls_oid_get_oid_by_ec_grp( grp->id, &oid, &oid_length );
     if( ret != 0 )
         return( ret );
@@ -2079,36 +2080,38 @@
     if( size < 2 + oid_length )
         return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
     q = p + 2 + oid_length;
-    return( mbedtls_asn1_write_oid( &q, p, oid, oid_length ) );
+    *olen = mbedtls_asn1_write_oid( &q, p, oid, oid_length );
+    return ( 0 );
 }
 
 int mbedtls_ecp_ansi_write_point( const mbedtls_ecp_keypair *ec,
                                   int format,
                                   unsigned char *p,
-                                  size_t size )
+                                  size_t size, size_t *olen )
 {
     unsigned char *q;
-    size_t length;
-    size_t tl_size = 3; /* room for the OCTET_STRING tag and length */
+    size_t tl_max_size = 3; /* room for the OCTET_STRING tag and length */
     int ret;
-    if( size < tl_size )
+
+    if( size < tl_max_size )
         return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
-    q = p + tl_size;
+
+    q = p + tl_max_size;
     ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q,
                                           format,
-                                          &length, q, size - 3 );
+                                          olen, q, size - tl_max_size );
     if( ret < 0 )
         return( ret );
-    ret = mbedtls_asn1_write_len( &q, p, length );
+    ret = mbedtls_asn1_write_len( &q, p, *olen );
     if( ret < 0 )
         return( ret );
     ret = mbedtls_asn1_write_tag( &q, p, MBEDTLS_ASN1_OCTET_STRING );
     if( ret < 0 )
         return( ret );
-    length += tl_size - ( q - p );
+    *olen += tl_max_size - ( q - p );
     if( q != p )
-        memmove( p, q, length );
-    return( length );
+        memmove( p, q, *olen );
+    return( 0 );
 }
 #endif /* defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_OID_C) */
 
