remove gcc34
[dragonfly.git] / crypto / heimdal-0.6.3 / lib / des / shifts.pl
blob94afde35b1af41a87fbeb9a967372e232e877bf1
1 #/usr/local/bin/perl
3 sub lab_shift
5 local(*a,$n)=@_;
6 local(@r,$i,$j,$k,$d,@z);
8 @r=&shift(*a,$n);
9 foreach $i (0 .. 31)
11 @z=split(/\^/,$r[$i]);
12 for ($j=0; $j <= $#z; $j++)
14 ($d)=($z[$j] =~ /^(..)/);
15 ($k)=($z[$j] =~ /\[(.*)\]$/);
16 $k.=",$n" if ($k ne "");
17 $k="$n" if ($k eq "");
18 $d="$d[$k]";
19 $z[$j]=$d;
21 $r[$i]=join('^',@z);
23 return(@r);
26 sub shift
28 local(*a,$n)=@_;
29 local(@f);
31 if ($n > 0)
33 @f=&shiftl(*a,$n);
35 else
37 @f=&shiftr(*a,-$n);
39 return(@f);
42 sub rotate
44 local(*a,$n)=@_;
45 local(@f);
47 if ($n > 0)
48 { @f=&rotatel(*a,$n); }
49 else
50 { @f=&rotater(*a,-$n); }
51 return(@f);
54 sub rotater
56 local(*a,$n)=@_;
57 local(@f,@g);
59 @f=&shiftr(*a,$n);
60 @g=&shiftl(*a,32-$n);
61 $#f=31;
62 $#g=31;
63 return(&or(*f,*g));
66 sub rotatel
68 local(*a,$n)=@_;
69 local(@f,@g);
71 @f=&shiftl(*a,$n);
72 @g=&shiftr(*a,32-$n);
73 $#f=31;
74 $#g=31;
75 return(&or(*f,*g));
78 sub shiftr
80 local(*a,$n)=@_;
81 local(@r,$i);
83 $#r=31;
84 foreach $i (0 .. 31)
86 if (($i+$n) > 31)
88 $r[$i]="--";
90 else
92 $r[$i]=$a[$i+$n];
95 return(@r);
98 sub shiftl
100 local(*a,$n)=@_;
101 local(@r,$i);
103 $#r=31;
104 foreach $i (0 .. 31)
106 if ($i < $n)
108 $r[$i]="--";
110 else
112 $r[$i]=$a[$i-$n];
115 return(@r);
118 sub printit
120 local(@a)=@_;
121 local($i);
123 foreach $i (0 .. 31)
125 printf "%2s ",$a[$i];
126 print "\n" if (($i%8) == 7);
128 print "\n";
131 sub xor
133 local(*a,*b)=@_;
134 local(@r,$i);
136 $#r=31;
137 foreach $i (0 .. 31)
139 $r[$i]=&compress($a[$i].'^'.$b[$i]);
140 # $r[$i]=$a[$i]."^".$b[$i];
142 return(@r);
145 sub and
147 local(*a,$m)=@_;
148 local(@r,$i);
150 $#r=31;
151 foreach $i (0 .. 31)
153 $r[$i]=(($m & (1<<$i))?($a[$i]):('--'));
155 return(@r);
158 sub or
160 local(*a,*b)=@_;
161 local(@r,$i);
163 $#r=31;
164 foreach $i (0 .. 31)
166 $r[$i]='--' if (($a[$i] eq '--') && ($b[$i] eq '--'));
167 $r[$i]=$a[$i] if (($a[$i] ne '--') && ($b[$i] eq '--'));
168 $r[$i]=$b[$i] if (($a[$i] eq '--') && ($b[$i] ne '--'));
169 $r[$i]='++' if (($a[$i] ne '--') && ($b[$i] ne '--'));
171 return(@r);
174 sub compress
176 local($s)=@_;
177 local($_,$i,@a,%a,$r);
179 $s =~ s/\^\^/\^/g;
180 $s =~ s/^\^//;
181 $s =~ s/\^$//;
182 @a=split(/\^/,$s);
184 while ($#a >= 0)
186 $_=shift(@a);
187 next unless /\d/;
188 $a{$_}++;
190 foreach $i (sort keys %a)
192 next if ($a{$i}%2 == 0);
193 $r.="$i^";
195 chop($r);
196 return($r);