home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Source: /mit/kerberos/src/lib/des/RCS/make_p.c,v $
- * $Author: jtkohl $
- *
- * Copyright 1985, 1988 by the Massachusetts Institute of Technology.
- *
- * For copying and distribution information, please
- * see the file <mit-copyright.h>.
- *
- * This routine generates the P permutation code for the DES.
- */
-
- #include <mit-copyright.h>
- #include <stdio.h>
- #include "des_internal.h"
- #include "tables.h"
-
- void gen(stream)
- FILE *stream;
- {
- /* P permutes 32 bit input R1 into 32 bit output R2 */
-
- /* clear the output */
- fprintf(stream," L2 = 0;\n");
- #ifndef BIG
- fprintf(stream," R2 = 0;\n");
- fprintf(stream,
- "/* P operations */\n/* from right to right */\n");
- /* first list mapping from left to left */
- for (i = 0; i <=31; i++)
- if (P[i] < 32)
- fprintf(stream,
- " if (R1 & (1<<%d)) R2 |= 1<<%d;\n",P[i],i);
- #else /* BIG */
- /* flip p into p_temp */
- fprintf(stream," P_temp = R1;\n");
- fprintf(stream," P_temp_p = (unsigned char *) &P_temp;\n");
-
- #ifdef LSBFIRST
- fprintf(stream," R2 = P_prime[0][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[1][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[2][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[3][*P_temp_p];\n");
- #else /* MSBFIRST */
- fprintf(stream," R2 = P_prime[3][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[2][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[1][*P_temp_p++];\n");
- fprintf(stream," R2 |= P_prime[0][*P_temp_p];\n");
- #endif /* MSBFIRST */
- #endif /* BIG */
- }
-