Use less memory in fix_negative()
diff --git a/library/ecp.c b/library/ecp.c
index 995f956..64d4e03 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -1736,12 +1736,20 @@
 
 /*
  * Helpers for the main 'loop'
+ * (see fix_negative for the motivation of C)
  */
 #define INIT( b )                                           \
     int ret;                                                \
     signed char c = 0, cc;                                  \
     uint32_t cur;                                           \
     size_t i = 0, bits = b;                                 \
+    mpi C;                                                  \
+    t_uint Cp[ b / 8 / sizeof( t_uint) + 1 ];               \
+                                                            \
+    C.s = 1;                                                \
+    C.n = b / 8 / sizeof( t_uint) + 1;                      \
+    C.p = Cp;                                               \
+    memset( Cp, 0, C.n * sizeof( t_uint ) );                \
                                                             \
     MPI_CHK( mpi_grow( N, b * 2 / 8 / sizeof( t_uint ) ) ); \
     LOAD32;
@@ -1758,32 +1766,28 @@
     STORE32; i++;                               \
     cur = c > 0 ? c : 0; STORE32;               \
     cur = 0; while( ++i < MAX32 ) { STORE32; }  \
-    if( c < 0 ) fix_negative( N, c, bits );
+    if( c < 0 ) fix_negative( N, c, &C, bits );
 
 /*
  * If the result is negative, we get it in the form
  * c * 2^(bits + 32) + N, with c negative and N positive shorter than 'bits'
  */
-static inline int fix_negative( mpi *N, signed char c, size_t bits )
+static inline int fix_negative( mpi *N, signed char c, mpi *C, size_t bits )
 {
     int ret;
-    mpi C;
-    t_uint Cp[ 384 / 8 / sizeof( t_uint) + 1 ];
 
     /* C = - c * 2^(bits + 32) */
-    C.s = 1;
-    C.n = bits / 8 / sizeof( t_uint ) + 1;
-    C.p = Cp;
-    memset( Cp, 0, C.n * sizeof( t_uint ) );
-#if defined(POLARSSL_HAVE_INT64)
+#if !defined(POLARSSL_HAVE_INT64)
+    ((void) bits);
+#else
     if( bits == 224 )
-        Cp[ C.n - 1 ] = ((t_uint) -c) << 32;
+        C->p[ C->n - 1 ] = ((t_uint) -c) << 32;
     else
 #endif
-        Cp[ C.n - 1 ] = (t_uint) -c;
+        C->p[ C->n - 1 ] = (t_uint) -c;
 
     /* N = - ( C - N ) */
-    MPI_CHK( mpi_sub_abs( N, &C, N ) );
+    MPI_CHK( mpi_sub_abs( N, C, N ) );
     N->s = -1;
 
 cleanup: