diff --git a/library/ecp.c b/library/ecp.c
index 05f6423..c10ae23 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -701,6 +701,70 @@
 }
 
 /*
+ * Compute a modified width-w non-adjacent form (NAF) of a number,
+ * with a fixed pattern for resistance to SPA/timing attacks,
+ * see <http://rd.springer.com/chapter/10.1007/3-540-36563-X_23>.
+ * (The resulting multiplication algorithm can also been seen as a
+ * modification of 2^w-ary multiplication, with signed coefficients,
+ * all of them odd.)
+ *
+ * Input:
+ * m must be an odd positive mpi less than w * k bits long
+ * x must be an array of k elements
+ * w must be less than a certain maximum (currently 8)
+ *
+ * The result is a sequence x[0], ..., x[k-1] with x[i] in the range
+ * - 2^(width - 1) .. 2^(width - 1) - 1 such that
+ * m = (2 * x[0] + 1) + 2^width * (2 * x[1] + 1) + ...
+ *     + 2^((k-1) * width) * (2 * x[k-1] + 1)
+ *
+ * Compared to "Algorithm SPA-resistant Width-w NAF with Odd Scalar"
+ * p. 335 of the cited reference, here we return only u, not d_w since
+ * it is known that the other d_w[j] will be 0.  Moreover, the returned
+ * string doesn't actually store u_i but x_i = u_i / 2 since it is known
+ * that u_i is odd. Also, since we always select a positive value for d
+ * mod 2^w, we don't need to check the sign of u[i-1] when the reference
+ * 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 )
+{
+    int ret;
+    unsigned int i, u, mask, carry;
+    mpi M;
+
+    mpi_init( &M );
+
+    MPI_CHK( mpi_copy( &M, m ) );
+    mask = ( 1 << w ) - 1;
+    carry = 1 << ( w - 1 );
+
+    for( i = 0; i < k; i++ )
+    {
+        u = M.p[0] & mask;
+
+        if( ( u & 1 ) == 0 && i > 0 )
+            x[i - 1] -= carry;
+
+        x[i] = u >> 1;
+        mpi_shift_r( &M, w );
+    }
+
+    /*
+     * We should have consumed all the bits now
+     */
+    if( mpi_cmp_int( &M, 0 ) != 0 )
+        ret = POLARSSL_ERR_ECP_GENERIC;
+
+cleanup:
+
+    mpi_free( &M );
+
+    return( ret );
+}
+
+/*
  * Integer multiplication: R = m * P (GECC 5.7, SPA-resistant)
  */
 int ecp_mul( const ecp_group *grp, ecp_point *R,
@@ -756,6 +820,7 @@
 {
     int ret;
     size_t i;
+    int j, jj;
     ecp_group grp;
     ecp_point R;
     mpi m;
@@ -766,13 +831,61 @@
         "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
         "555555555555555555555555555555555555555555555555",
         "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25",
-        "000000000000000000000000000000000000000000000010",
+        /* "000000000000000000000000000000000000000000000010", TODO */
     };
+    signed char x[3];
 
     ecp_group_init( &grp );
     ecp_point_init( &R );
     mpi_init( &m );
 
+    if( verbose != 0 )
+        printf( "  ECP test #0 (naf): " );
+
+    for( j = 1; j < 32; j += 2 )
+    {
+        mpi_lset( &m, j );
+
+        x[0] = x[1] = x[2] = 0;
+        MPI_CHK( ecp_w_naf_fixed( x, 3, 2, &m ) );
+        jj = ( 2 * x[0] + 1 ) + 4 * ( 2 * x[1] + 1 ) + 16 * ( 2 * x[2] + 1 );
+
+        if( j != jj ||
+            x[0] > 1 || x[0] < -2 ||
+            x[1] > 1 || x[1] < -2 ||
+            x[2] > 1 || x[2] < -2 )
+        {
+            if( verbose != 0 )
+                printf( "failed\n" );
+
+            printf( "%i != %i (%i, %i, %i)\n", j, jj, x[0], x[1], x[2] );
+
+            ret = 1;
+            goto cleanup;
+        }
+
+        x[0] = x[1] = x[2] = 0;
+        MPI_CHK( ecp_w_naf_fixed( x, 2, 3, &m ) );
+        jj = ( 2 * x[0] + 1 ) + 8 * ( 2 * x[1] + 1 );
+
+        if( j != jj ||
+            x[0] > 3 || x[0] < -4 ||
+            x[1] > 3 || x[1] < -4 ||
+            x[2] != 0 )
+        {
+            if( verbose != 0 )
+                printf( "failed\n" );
+
+            printf( "%i != %i (%i, %i)\n", j, jj, x[0], x[1] );
+
+            ret = 1;
+            goto cleanup;
+        }
+    }
+
+    if( verbose != 0 )
+        printf( "passed\n" );
+
     MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP192R1 ) );
 
     if( verbose != 0 )
