home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 509.lha / DES / src / descycle.c < prev    next >
C/C++ Source or Header  |  1991-05-06  |  961b  |  62 lines

  1. /* Investigate cycles in DES output feedback mode (experimental)
  2.  * Phil Karn
  3.  */
  4. #include <stdio.h>
  5. main()
  6. {
  7.     char key[8],start[8],work[8];
  8.     long update;
  9.     register int i;
  10.     long iter;
  11.  
  12.     desinit(0);
  13.     printf("Enter key (hex): ");
  14.     get8(key);
  15.     printf("Setting key: "); put8(key); printf("\n");
  16.     setkey(key);
  17.     printf("Enter starting value (hex): ");
  18.     get8(start);
  19.     printf("Starting value: "); put8(start); printf("\n");
  20.     printf("Update interval: ");
  21.     scanf("%ld",&update);
  22.  
  23.     for(i=0;i<8;i++)
  24.         work[i] = start[i];
  25.  
  26.     for(iter = 0;; iter++){
  27.  
  28.         endes(work);
  29.         if((iter % update) == 0){
  30.             printf("%ld ",iter);
  31.             put8(work); printf("\n");
  32.         }
  33.         for(i=0;i<8;i++){
  34.             if(work[i] != start[i])
  35.                 break;
  36.         }
  37.         if(i == 8){
  38.             printf("CYCLE FOUND after %ld iterations\n",iter);
  39.             exit(0);
  40.         }
  41.     }
  42. }
  43. get8(cp)
  44. char *cp;
  45. {
  46.     int i,t;
  47.  
  48.     for(i=0;i<8;i++){
  49.         scanf("%2x",&t);
  50.         *cp++ = t;
  51.     }
  52. }
  53. put8(cp)
  54. char *cp;
  55. {
  56.     int i;
  57.  
  58.     for(i=0;i<8;i++){
  59.         printf("%2x ",*cp++ & 0xff);
  60.     }
  61. }
  62.