Add ecp_tls_write_group()
diff --git a/library/ecp.c b/library/ecp.c
index 5520d73..41fc9db 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -534,9 +534,11 @@
/*
* Set a group using well-known domain parameters
*/
-int ecp_use_known_dp( ecp_group *grp, uint16_t index )
+int ecp_use_known_dp( ecp_group *grp, ecp_group_id id )
{
- switch( index )
+ grp->id = id;
+
+ switch( id )
{
case POLARSSL_ECP_DP_SECP192R1:
grp->modp = ecp_mod_p192;
@@ -574,7 +576,7 @@
*/
int ecp_tls_read_group( ecp_group *grp, const unsigned char *buf, size_t len )
{
- uint16_t namedcurve;
+ ecp_group_id id;
/*
* We expect at least three bytes (see below)
@@ -589,10 +591,37 @@
return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
/*
- * Next two bytes are the namedcurve
+ * Next two bytes are the namedcurve value
*/
- namedcurve = 256 * buf[0] + buf[1];
- return ecp_use_known_dp( grp, namedcurve );
+ id = 256 * buf[0] + buf[1];
+ return ecp_use_known_dp( grp, id );
+}
+
+/*
+ * Write the ECParameters record corresponding to a group (RFC 4492)
+ */
+int ecp_tls_write_group( const ecp_group *grp, size_t *olen,
+ unsigned char *buf, size_t blen )
+{
+ /*
+ * We are going to write 3 bytes (see below)
+ */
+ *olen = 3;
+ if( blen < *olen )
+ return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL );
+
+ /*
+ * First byte is curve_type, always named_curve
+ */
+ *buf++ = POLARSSL_ECP_TLS_NAMED_CURVE;
+
+ /*
+ * Next two bytes are the namedcurve value
+ */
+ buf[0] = grp->id >> 8;
+ buf[1] = grp->id && 0xFF;
+
+ return 0;
}
/*