home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume29 / libdes / part01 / doPC1 < prev    next >
Encoding:
Text File  |  1992-04-04  |  1.6 KB  |  94 lines

  1. #!/usr/local/bin/perl
  2.  
  3. @l=(
  4.      0, 1, 2, 3, 4, 5, 6, 7,
  5.      8, 9,10,11,12,13,14,15,
  6.     16,17,18,19,20,21,22,23,
  7.     24,25,26,27,28,29,30,31
  8.     );
  9. @r=(
  10.     32,33,34,35,36,37,38,39,
  11.     40,41,42,43,44,45,46,47,
  12.     48,49,50,51,52,53,54,55,
  13.     56,57,58,59,60,61,62,63
  14.     );
  15.  
  16. require 'shifts.pl';
  17.  
  18. sub PERM_OP
  19.     {
  20.     local(*a,*b,*t,$n,$m)=@_;
  21.  
  22.     @z=&shift(*a,-$n);
  23.     @z=&xor(*b,*z);
  24.     @z=&and(*z,$m);
  25.     @b=&xor(*b,*z);
  26.     @z=&shift(*z,$n);
  27.     @a=&xor(*a,*z);
  28.     }
  29.  
  30. sub HPERM_OP2
  31.     {
  32.     local(*a,*t,$n,$m)=@_;
  33.     local(@x,@y,$i);
  34.  
  35.     @z=&shift(*a,16-$n);
  36.     @z=&xor(*a,*z);
  37.     @z=&and(*z,$m);
  38.     @a=&xor(*a,*z);
  39.     @z=&shift(*z,$n-16);
  40.     @a=&xor(*a,*z);
  41.     }
  42.  
  43. sub HPERM_OP
  44.         {
  45.         local(*a,*t,$n,$m)=@_;
  46.         local(@x,@y,$i);
  47.  
  48.         for ($i=0; $i<16; $i++)
  49.                 {
  50.                 $x[$i]=$a[$i];
  51.                 $y[$i]=$a[16+$i];
  52.                 }
  53.         @z=&shift(*x,-$n);
  54.         @z=&xor(*y,*z);
  55.         @z=&and(*z,$m);
  56.         @y=&xor(*y,*z);
  57.         @z=&shift(*z,$n);
  58.         @x=&xor(*x,*z);
  59.         for ($i=0; $i<16; $i++)
  60.                 {
  61.                 $a[$i]=$x[$i];
  62.                 $a[16+$i]=$y[$i];
  63.                 }
  64.         }
  65.  
  66. @L=@l;
  67. @R=@r;
  68. &PERM_OP(*R,*L,*T,4,0x0f0f0f0f);
  69.  
  70. &HPERM_OP2(*L,*T,-2, 0xcccc0000);
  71. &HPERM_OP2(*L,*T,-1, 0xaaaa0000);
  72. &HPERM_OP2(*L,*T,8,  0x00ff0000);
  73. &HPERM_OP2(*L,*T,-1, 0xaaaa0000);
  74.  
  75. &HPERM_OP2(*R,*T,-8, 0xff000000);
  76. &HPERM_OP2(*R,*T,8,  0x00ff0000);
  77. &HPERM_OP2(*R,*T,2,  0x33330000);
  78.  
  79. @A=&and(*R,0x00aa00aa);
  80. @A=&shift(*A,7);
  81. @B=&and(*R,0x55005500);
  82. @B=&shift(*B,-7);
  83. @C=&and(*R,0xaa55aa55);
  84. @R=&or(*A,*B);
  85. @R=&or(*R,*C);
  86.  
  87. @T=&and(*L,0xf0000000);
  88. @T=&shift(*T,-4);
  89. @R=&shift(*R,-8);
  90. @R=&or(*R,*T);
  91. @L=&and(*L,0x0fffffff);
  92.     &printit(@L);
  93.     &printit(@R);
  94.