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)