Commit | Line | Data |
---|---|---|
972d8aa2 C |
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 | } |