|
|
1.1 root 1: /*
2: * $Source: /mit/kerberos/src/lib/des/RCS/make_p.c,v $
3: * $Author: jtkohl $
4: *
5: * Copyright 1985, 1988 by the Massachusetts Institute of Technology.
6: *
7: * For copying and distribution information, please
8: * see the file <mit-copyright.h>.
9: *
10: * This routine generates the P permutation code for the DES.
11: */
12:
13: #include <mit-copyright.h>
14: #include <stdio.h>
15: #include "des_internal.h"
16: #include "tables.h"
17:
18: void gen(stream)
19: FILE *stream;
20: {
21: /* P permutes 32 bit input R1 into 32 bit output R2 */
22:
23: /* clear the output */
24: fprintf(stream," L2 = 0;\n");
25: #ifndef BIG
26: fprintf(stream," R2 = 0;\n");
27: fprintf(stream,
28: "/* P operations */\n/* from right to right */\n");
29: /* first list mapping from left to left */
30: for (i = 0; i <=31; i++)
31: if (P[i] < 32)
32: fprintf(stream,
33: " if (R1 & (1<<%d)) R2 |= 1<<%d;\n",P[i],i);
34: #else /* BIG */
35: /* flip p into p_temp */
36: fprintf(stream," P_temp = R1;\n");
37: fprintf(stream," P_temp_p = (unsigned char *) &P_temp;\n");
38:
39: #ifdef LSBFIRST
40: fprintf(stream," R2 = P_prime[0][*P_temp_p++];\n");
41: fprintf(stream," R2 |= P_prime[1][*P_temp_p++];\n");
42: fprintf(stream," R2 |= P_prime[2][*P_temp_p++];\n");
43: fprintf(stream," R2 |= P_prime[3][*P_temp_p];\n");
44: #else /* MSBFIRST */
45: fprintf(stream," R2 = P_prime[3][*P_temp_p++];\n");
46: fprintf(stream," R2 |= P_prime[2][*P_temp_p++];\n");
47: fprintf(stream," R2 |= P_prime[1][*P_temp_p++];\n");
48: fprintf(stream," R2 |= P_prime[0][*P_temp_p];\n");
49: #endif /* MSBFIRST */
50: #endif /* BIG */
51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.