Create ecdh_context structure
diff --git a/include/polarssl/ecdh.h b/include/polarssl/ecdh.h
index ad13106..2f1e51d 100644
--- a/include/polarssl/ecdh.h
+++ b/include/polarssl/ecdh.h
@@ -29,6 +29,19 @@
#include "polarssl/ecp.h"
+/**
+ * \brief ECDH context structure
+ */
+typedef struct
+{
+ ecp_group grp; /*!< ellipitic curve used */
+ mpi d; /*!< our secret value */
+ ecp_point Q; /*!< our public value */
+ ecp_point Qp; /*!< peer's public value */
+ mpi z; /*!< shared secret */
+}
+ecdh_context;
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -64,6 +77,20 @@
const ecp_point *Q, const mpi *d );
/**
+ * \brief Initialize context
+ *
+ * \param ctx Context to initialize
+ */
+void ecdh_init( ecdh_context *ctx );
+
+/**
+ * \brief Free context
+ *
+ * \param ctx Context to free
+ */
+void ecdh_free( ecdh_context *ctx );
+
+/**
* \brief Checkup routine
*
* \return 0 if successful, or 1 if the test failed
diff --git a/library/ecdh.c b/library/ecdh.c
index 1b4fcd3..0e2cfdf 100644
--- a/library/ecdh.c
+++ b/library/ecdh.c
@@ -27,6 +27,7 @@
* References:
*
* SEC1 http://www.secg.org/index.php?action=secg,docs_secg
+ * RFC 4492
*/
#include "polarssl/config.h"
@@ -74,6 +75,34 @@
return( ret );
}
+/*
+ * Initialize context
+ */
+void ecdh_init( ecdh_context *ctx )
+{
+ ecp_group_init( &ctx->grp );
+ mpi_init ( &ctx->d );
+ ecp_point_init( &ctx->Q );
+ ecp_point_init( &ctx->Qp );
+ mpi_init ( &ctx->z );
+}
+
+
+/*
+ * Free context
+ */
+void ecdh_free( ecdh_context *ctx )
+{
+ if( ctx == NULL )
+ return;
+
+ ecp_group_free( &ctx->grp );
+ mpi_free ( &ctx->d );
+ ecp_point_free( &ctx->Q );
+ ecp_point_free( &ctx->Qp );
+ mpi_free ( &ctx->z );
+}
+
#if defined(POLARSSL_SELF_TEST)