projects
/
openssl.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
The dir is named util/ and better to explicitly call the
[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";