www.pudn.com > sslref30.zip > doPC2


#!/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); 
        } 
    }