* sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll 32
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
      * sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll 32
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
 
      * sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll 32
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
      * sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll 32
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
 
      * sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
      * sha1
      */
 
-    u32 final[256];
+    u32 final[32];
 
     final[ 0] = swap32 (w0[0] | s0[0]);
     final[ 1] = swap32 (w0[1] | s0[1]);
     digest[3] = SHA1M_D;
     digest[4] = SHA1M_E;
 
-    #pragma unroll 64
-    for (int i = 0; i < 64; i++) final[i] = 0;
+    #pragma unroll 32
+    for (int i = 0; i < 32; i++) final[i] = 0;
 
     final[0] = w0[0];
     final[1] = w0[1];
 
   }
 
   // SAP user names cannot be longer than 12 characters
+  // this is kinda buggy. if the username is in utf the length can be up to length 12*3
+  // so far nobody complained so we stay with this because it helps in optimization
+  // final string can have a max size of 32 (password) + (10 * 5) = lengthMagicArray + 12 (max salt) + 1 (the 0x80)
+
   if (user_len > 12) return (PARSER_SALT_LENGTH);
 
   // SAP user name cannot start with ! or ?