Continuing adding X509 V3 support. This starts to integrate the code with
[openssl.git] / perl / mul.pl
1 #!/usr/local/bin/perl
2
3 use ExtUtils::testlib;
4
5 use SSLeay;
6
7
8 sub mul
9         {
10         my($ab,$cd,$num)=@_;
11
12         if ($num <= 4096)
13                 {
14                 return($ab*$cd);
15                 }
16         else
17                 {
18                 my($a,$b,$c,$d,$n,$ac,$bd,$m,$t1,$t2);
19
20                 $n=$num/2;
21
22                 $a=$ab->mask_bits($n);
23                 $b=$ab->rshift($n);
24                 $c=$cd->mask_bits($n);
25                 $d=$cd->rshift($n);
26
27                 $t1=($b-$a);
28                 $t2=($c-$d);
29                 $m= &mul($t1,$t2,$n);
30                 $ac=&mul($a,$c,$n);
31                 $bd=&mul($b,$d,$n);
32                 $m=$m+$ac+$bd;
33                 $m=$m->lshift($n);
34                 $bd=$bd->lshift($num);
35
36                 $r=$ac+$m+$bd;
37                 return($r);
38                 }
39         }
40
41 $num=4096*32;
42 $a=SSLeay::BN::rand($num);
43 $b=SSLeay::BN::rand($num);
44
45 #for (1 .. 10)
46         {
47         $r=&mul($a,$b,$num);
48         }
49
50 #for (1 .. 10)
51         {
52         $rr=$a*$b;
53         }
54
55 $res=$rr-$r;
56 print $res->bn2hex()."\n";