Added a precompute() function for fast mult
diff --git a/library/ecp.c b/library/ecp.c
index c10ae23..f7b5b19 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -727,8 +727,8 @@
  * does. Finally, there is an off-by-one error in the reference: the
  * last index should be k-1, not k.
  */
-static int ecp_w_naf_fixed( signed char x[], size_t k, unsigned char w,
-                            const mpi *m )
+static int ecp_w_naf_fixed( signed char x[], size_t k,
+                            unsigned char w, const mpi *m )
 {
     int ret;
     unsigned int i, u, mask, carry;
@@ -765,6 +765,36 @@
 }
 
 /*
+ * Precompute odd multiples of P up to (2 * t_len - 1) P.
+ * The table is filled with T[i] = (2 * i + 1) P.
+ */
+static int ecp_precompute( ecp_point T[], size_t t_len,
+                           const ecp_group *grp, const ecp_point *P )
+{
+    int ret;
+    size_t i;
+    ecp_point PP;
+
+    ecp_point_init( &PP );
+
+    MPI_CHK( ecp_add( grp, &PP, P, P ) );
+
+    MPI_CHK( ecp_copy( &T[0], P ) );
+
+    /*
+     * TODO: use Montgomery's trick for less inversions
+     */
+    for( i = 1; i < t_len; i++ )
+        MPI_CHK( ecp_add( grp, &T[i], &T[i-1], &PP ) );
+
+cleanup:
+
+    ecp_point_free( &PP );
+
+    return( ret );
+}
+
+/*
  * Integer multiplication: R = m * P (GECC 5.7, SPA-resistant)
  */
 int ecp_mul( const ecp_group *grp, ecp_point *R,