ECP: Write RFC5480 representation of a group/point

New functions to write a representation of an elliptic curve group and
point according to X9.62 and RFC5480: ECParameters as OID and ECPoint
as octet string.
diff --git a/library/ecp.c b/library/ecp.c
index 5ad6863..851d230 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -2061,6 +2061,57 @@
     return( ret );
 }
 
+#if defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_OID_C)
+#include "mbedtls/asn1write.h"
+#include "mbedtls/oid.h"
+int mbedtls_ecp_ansi_write_group( const mbedtls_ecp_group *grp,
+                                  unsigned char *p,
+                                  size_t size )
+{
+    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 );
+    // Output is a TLV with len(T)=1, len(L)=1, V=OID
+    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 ) );
+}
+
+int mbedtls_ecp_ansi_write_point( const mbedtls_ecp_keypair *ec,
+                                  int format,
+                                  unsigned char *p,
+                                  size_t size )
+{
+    unsigned char *q;
+    size_t length;
+    size_t tl_size = 3; /* room for the OCTET_STRING tag and length */
+    int ret;
+    if( size < tl_size )
+        return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
+    q = p + tl_size;
+    ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q,
+                                          format,
+                                          &length, q, size - 3 );
+    if( ret < 0 )
+        return( ret );
+    ret = mbedtls_asn1_write_len( &q, p, length );
+    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 );
+    if( q != p )
+        memmove( p, q, length );
+    return( length );
+}
+#endif /* defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_OID_C) */
+
 #if defined(MBEDTLS_SELF_TEST)
 
 /*