- Debug print of MPI now removes leading zero octets and displays actual bit size of the value

diff --git a/library/debug.c b/library/debug.c
index 8ef4c16..6d4fd31 100644
--- a/library/debug.c
+++ b/library/debug.c
@@ -132,43 +132,67 @@
                       const char *text, const mpi *X )
 {
     char str[512];
-    int i, j, k, n, maxlen = sizeof( str ) - 1;
+    int i, j, k, n, maxlen = sizeof( str ) - 1, zeros = 1;
 
     if( ssl->f_dbg == NULL || X == NULL )
         return;
 
-    for( n = X->n - 1; n >= 0; n-- )
+    for( n = X->n - 1; n > 0; n-- )
         if( X->p[n] != 0 )
             break;
 
+    for( j = ( sizeof(t_int) << 3 ) - 1; j >= 0; j-- )
+        if( ( ( X->p[n] >> j ) & 1 ) != 0 )
+            break;
+
     snprintf( str, maxlen, "%s(%04d): value of '%s' (%lu bits) is:\n",
               file, line, text, 
-              (unsigned long) ((n + 1) * sizeof( t_int )) << 3 );
+              (unsigned long) ( ( n * ( sizeof(t_int) << 3 ) ) + j + 1 ) );
 
     str[maxlen] = '\0';
     ssl->f_dbg( ssl->p_dbg, level, str );
 
-    for( i = n, j = 0; i >= 0; i--, j++ )
+    for( i = n, j = 0; i >= 0; i-- )
     {
-        if( j % ( 16 / sizeof( t_int ) ) == 0 )
-        {
-            if( j > 0 )
-                ssl->f_dbg( ssl->p_dbg, level, "\n" );
-
-            snprintf( str, maxlen, "%s(%04d): ", file, line );
-
-            str[maxlen] = '\0';
-            ssl->f_dbg( ssl->p_dbg, level, str );
-        }
+        if( zeros && X->p[i] == 0 )
+            continue;
 
         for( k = sizeof( t_int ) - 1; k >= 0; k-- )
         {
+            if( zeros && ( ( X->p[i] >> (k << 3) ) & 0xFF ) == 0 )
+                continue;
+            else
+                zeros = 0;
+
+            if( j % 16 == 0 )
+            {
+                if( j > 0 )
+                    ssl->f_dbg( ssl->p_dbg, level, "\n" );
+
+                snprintf( str, maxlen, "%s(%04d): ", file, line );
+
+                str[maxlen] = '\0';
+                ssl->f_dbg( ssl->p_dbg, level, str );
+            }
+
             snprintf( str, maxlen, " %02x", (unsigned int)
                       ( X->p[i] >> (k << 3) ) & 0xFF );
 
             str[maxlen] = '\0';
             ssl->f_dbg( ssl->p_dbg, level, str );
+
+            j++;
         }
+
+    }
+
+    if( zeros == 1 )
+    {
+        snprintf( str, maxlen, "%s(%04d): ", file, line );
+
+        str[maxlen] = '\0';
+        ssl->f_dbg( ssl->p_dbg, level, str );
+        ssl->f_dbg( ssl->p_dbg, level, " 00" );
     }
 
     ssl->f_dbg( ssl->p_dbg, level, "\n" );