+ salt->salt_len = 32;
+
+ /* some fake salt for the sorting mechanisms */
+
+ salt->salt_buf[0] = pstoken->salt_buf[0];
+ salt->salt_buf[1] = pstoken->salt_buf[1];
+ salt->salt_buf[2] = pstoken->salt_buf[2];
+ salt->salt_buf[3] = pstoken->salt_buf[3];
+ salt->salt_buf[4] = pstoken->salt_buf[4];
+ salt->salt_buf[5] = pstoken->salt_buf[5];
+ salt->salt_buf[6] = pstoken->salt_buf[6];
+ salt->salt_buf[7] = pstoken->salt_buf[7];
+
+ salt->salt_len = 32;
+
+ /* we need to check if we can precompute some of the data --
+ this is possible since the scheme is badly designed */
+
+ pstoken->pc_digest[0] = SHA1M_A;
+ pstoken->pc_digest[1] = SHA1M_B;
+ pstoken->pc_digest[2] = SHA1M_C;
+ pstoken->pc_digest[3] = SHA1M_D;
+ pstoken->pc_digest[4] = SHA1M_E;
+
+ pstoken->pc_offset = 0;
+
+ for (uint i = 0; i < pstoken->salt_len - 64; i += 64)
+ {
+ uint w[16];
+
+ w[ 0] = byte_swap_32 (pstoken->salt_buf[i + 0]);
+ w[ 1] = byte_swap_32 (pstoken->salt_buf[i + 1]);
+ w[ 2] = byte_swap_32 (pstoken->salt_buf[i + 2]);
+ w[ 3] = byte_swap_32 (pstoken->salt_buf[i + 3]);
+ w[ 4] = byte_swap_32 (pstoken->salt_buf[i + 4]);
+ w[ 5] = byte_swap_32 (pstoken->salt_buf[i + 5]);
+ w[ 6] = byte_swap_32 (pstoken->salt_buf[i + 6]);
+ w[ 7] = byte_swap_32 (pstoken->salt_buf[i + 7]);
+ w[ 8] = byte_swap_32 (pstoken->salt_buf[i + 8]);
+ w[ 9] = byte_swap_32 (pstoken->salt_buf[i + 9]);
+ w[10] = byte_swap_32 (pstoken->salt_buf[i + 10]);
+ w[11] = byte_swap_32 (pstoken->salt_buf[i + 11]);
+ w[12] = byte_swap_32 (pstoken->salt_buf[i + 12]);
+ w[13] = byte_swap_32 (pstoken->salt_buf[i + 13]);
+ w[14] = byte_swap_32 (pstoken->salt_buf[i + 14]);
+ w[15] = byte_swap_32 (pstoken->salt_buf[i + 15]);
+
+ sha1_64 (w, pstoken->pc_digest);
+
+ pstoken->pc_offset += 16;
+ }