home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / make_p / make_p.c next >
Encoding:
C/C++ Source or Header  |  1988-11-14  |  1.5 KB  |  52 lines

  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. }
  52.