Add functions for read/write ECPoint records
diff --git a/include/polarssl/ecp.h b/include/polarssl/ecp.h
index 6c14636..59afd63 100644
--- a/include/polarssl/ecp.h
+++ b/include/polarssl/ecp.h
@@ -33,6 +33,7 @@
* ECP error codes
*/
#define POLARSSL_ERR_ECP_BAD_INPUT_DATA -0x4F80 /**< Bad input parameters to function. */
+#define POLARSSL_ERR_ECP_BUFFER_TOO_SMALL -0x4F80 /**< The buffer is too small to write to. */
#define POLARSSL_ERR_ECP_GENERIC -0x4F00 /**< Generic ECP error */
/**
@@ -117,15 +118,15 @@
#define POLARSSL_ECP_WINDOW_SIZE 7 /**< Maximum NAF width used. */
/*
- * Point formats
+ * Point formats, from RFC 4492's enum ECPointFormat
*/
#define POLARSSL_ECP_PF_UNCOMPRESSED 0 /**< Uncompressed point format */
#define POLARSSL_ECP_PF_COMPRESSED 1 /**< Compressed point format */
/*
- * Some constants from RFC 4492 (ECC for TLS)
+ * Some other constants from RFC 4492
*/
-#define POLARSSL_ECP_TLS_NAMED_CURVE 3 /**< ECCurveType named_curve */
+#define POLARSSL_ECP_TLS_NAMED_CURVE 3 /**< ECCurveType's named_curve */
#ifdef __cplusplus
@@ -239,14 +240,16 @@
* \param grp Group to which the point should belong
* \param P Point to export
* \param format Point format, should be a POLARSSL_ECP_PF_XXX macro
- * \param olen Length of the actual ouput
+ * \param olen Length of the actual output
* \param buf Output buffer
* \param buflen Length of the output buffer
*
- * \return 0 if successful, or POLARSSL_ERR_ECP_GENERIC
+ * \return 0 if successful,
+ * or POLARSSL_ERR_ECP_BAD_INPUT_DATA
+ * or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL
*/
int ecp_write_binary( const ecp_group *grp, const ecp_point *P, int format,
- size_t *olen, unsigned char *buf, size_t buflen );
+ uint8_t *olen, unsigned char *buf, size_t buflen );
/**
* \brief Import a point from unsigned binary data
@@ -284,7 +287,7 @@
int ecp_use_known_dp( ecp_group *grp, uint16_t index );
/**
- * \brief Read a group from an ECParameters record
+ * \brief Set a group from a TLS ECParameters record
*
* \param grp Destination group
* \param buf Start of input buffer
@@ -297,6 +300,37 @@
int ecp_tls_read_group( ecp_group *grp, const unsigned char *buf, size_t len );
/**
+ * \brief Import a point from a TLS ECPoint record
+ *
+ * \param grp ECP group used
+ * \param pt Destination point
+ * \param buf Start of input buffer
+ * \param len Buffer length
+ *
+ * \return O if successful,
+ * POLARSSL_ERR_MPI_XXX if initialization failed
+ * 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 );
+
+/**
+ * \brief Export a point as a TLS ECPoint record
+ *
+ * \param grp ECP group used
+ * \param pt Point to export
+ * \param format Export format
+ * \param buf Buffer to write to
+ * \param len Buffer length
+ *
+ * \return 0 if successful,
+ * or POLARSSL_ERR_ECP_BAD_INPUT_DATA
+ * or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL
+ */
+int ecp_tls_write_point( const ecp_group *grp, const ecp_point *pt,
+ int format, unsigned char *buf, size_t buf_len );
+
+/**
* \brief Addition: R = P + Q
*
* \param grp ECP group