|  | #!/usr/local/bin/perl | 
|  |  | 
|  | @PC2_C=(14,17,11,24, 1, 5, | 
|  | 3,28,15, 6,21,10, | 
|  | 23,19,12, 4,26, 8, | 
|  | 16, 7,27,20,13, 2, | 
|  | ); | 
|  |  | 
|  | @PC2_D=(41,52,31,37,47,55, | 
|  | 30,40,51,45,33,48, | 
|  | 44,49,39,56,34,53, | 
|  | 46,42,50,36,29,32, | 
|  | ); | 
|  |  | 
|  | $i=0; | 
|  | foreach (@PC2_C) { | 
|  | $_--; | 
|  | #	printf "%2d,",$_; | 
|  | $C{$_}=$i; | 
|  | ++$i; | 
|  | #	print "\n" if ((($i) % 8) == 0); | 
|  | } | 
|  | $i=0; | 
|  | #print "\n"; | 
|  | foreach (@PC2_D) { | 
|  | $_-=28; | 
|  | $_--; | 
|  | #	printf "%2d,",$_; | 
|  | $D{$_}=$i; | 
|  | $i++; | 
|  | #	print "\n" if ((($i) % 8) == 0); | 
|  | } | 
|  |  | 
|  | #print "\n"; | 
|  | foreach $i (0 .. 27) | 
|  | { | 
|  | $_=$C{$i}; | 
|  | #	printf "%2d,",$_; | 
|  | $i++; | 
|  | #	print "\n" if ((($i) % 8) == 0); | 
|  | } | 
|  | #print "\n"; | 
|  |  | 
|  | #print "\n"; | 
|  | foreach $i (0 .. 27) | 
|  | { | 
|  | $_=$D{$i}; | 
|  | #	printf "%2d,",$_; | 
|  | $i++; | 
|  | #	print "\n" if ((($i) % 8) == 0); | 
|  | } | 
|  | #print "\n"; | 
|  |  | 
|  | print "static ulong skb[8][64]={\n"; | 
|  | &doit("C",*C, 0, 1, 2, 3, 4, 5); | 
|  | &doit("C",*C, 6, 7, 9,10,11,12); | 
|  | &doit("C",*C,13,14,15,16,18,19); | 
|  | &doit("C",*C,20,22,23,25,26,27); | 
|  |  | 
|  | &doit("D",*D, 0, 1, 2, 3, 4, 5); | 
|  | &doit("D",*D, 7, 8,10,11,12,13); | 
|  | &doit("D",*D,15,16,17,18,19,20); | 
|  | &doit("D",*D,21,22,23,24,26,27); | 
|  | print "};\n"; | 
|  |  | 
|  | sub doit | 
|  | { | 
|  | local($l,*A,@b)=@_; | 
|  | local(@out); | 
|  |  | 
|  | printf("/* for $l bits (numbered as per FIPS 46) %d %d %d %d %d %d */\n", | 
|  | $b[0]+1, $b[1]+1, $b[2]+1, $b[3]+1, $b[4]+1, $b[5]+1); | 
|  | for ($i=0; $i<64; $i++) | 
|  | { | 
|  | $out[$i]=0; | 
|  | $j=1; | 
|  | #print "\n"; | 
|  | for ($k=0; $k<6; $k++) | 
|  | { | 
|  | $l=$A{$b[$k]}; | 
|  | #print"$l - "; | 
|  | if ((1<<$k) & $i) | 
|  | { | 
|  | $ll=int($l/6)*8+($l%6); | 
|  | $out[$i]|=1<<($ll); | 
|  | } | 
|  | } | 
|  | $pp=$out[$i]; | 
|  | $pp=($pp&0xff0000ff)|   (($pp&0x00ff0000)>>8)| | 
|  | (($pp&0x0000ff00)<<8); | 
|  | printf("0x%08X,",$pp); | 
|  | print "\n" if (($i+1) % 4 == 0); | 
|  | } | 
|  | } |