+/*
+ * $Source: /usr/src/kerberosIV/make_odd/RCS/make_odd.c,v $
+ * $Author: bostic $
+ *
+ * Copyright 1988 by the Massachusetts Institute of Technology.
+ *
+ * For copying and distribution information, please see
+ * the file <mit-copyright.h>.
+ *
+ * This routine generates an odd-parity table for use in key generation.
+ */
+
+#include <mit-copyright.h>
+#include <stdio.h>
+
+void gen(stream)
+ FILE *stream;
+{
+ /*
+ * map a byte into its equivalent with odd parity, where odd
+ * parity is in the least significant bit
+ */
+ register i, j, k, odd;
+
+ fprintf(stream,
+ "#include <sys/cdefs.h>\n");
+ fprintf(stream,
+ "static unsigned char const odd_parity[256] = {\n");
+
+ for (i = 0; i < 256; i++) {
+ odd = 0;
+ /* shift out the lsb parity bit */
+ k = i >> 1;
+ /* then count the other bits */
+ for (j = 0; j < 7; j++) {
+ odd ^= (k&1);
+ k = k >> 1;
+ }
+ k = i&~1;
+ if (!odd)
+ k |= 1;
+ fprintf(stream, "%3d", k);
+ if (i < 255)
+ fprintf(stream, ", ");
+ if (i%8 == 0)
+ fprintf(stream, "\n");
+ }
+ fprintf(stream, "};\n");
+}