Minix1.5/lib/other/crypt.c

Compare this file to the similar file:
Show the results in this format:

#include <lib.h>
char *crypt(pw, salt)
char *pw, *salt;
{
  PRIVATE char buf[14];
  char bits[67];
  register int i;
  register int j, rot;

  for (i = 0; i < 67; i++) bits[i] = 0;
  if (salt[1] == 0) salt[1] = salt[0];
  rot = (salt[1] * 4 - salt[0]) % 128;
  for (i = 0; *pw && i < 8; i++) {
	for (j = 0; j < 7; j++) bits[i + j * 8] = (*pw & (1 << j) ? 1 : 0);
	bits[i + 56] = (salt[i / 4] & (1 << (i % 4)) ? 1 : 0);
	pw++;
  }
  bits[64] = (salt[0] & 1 ? 1 : 0);
  bits[65] = (salt[1] & 1 ? 1 : 0);
  bits[66] = (rot & 1 ? 1 : 0);
  while (rot--) {
	for (i = 65; i >= 0; i--) bits[i + 1] = bits[i];
	bits[0] = bits[66];
  }
  for (i = 0; i < 12; i++) {
	buf[i + 2] = 0;
	for (j = 0; j < 6; j++)
		buf[i + 2] |= (bits[i * 6 + j] ? (1 << j) : 0);
	buf[i + 2] += 48;
	if (buf[i + 2] > '9') buf[i + 2] += 7;
	if (buf[i + 2] > 'Z') buf[i + 2] += 6;
  }
  buf[0] = salt[0];
  buf[1] = salt[1];
  buf[13] = '\0';
  return(buf);
}