⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comba.pl

📁 openssl是ssl的开源项目
💻 PL
字号:
#!/usr/local/bin/perl$num=8;$num2=8/2;print <<"EOF";/* crypto/bn/bn_comba.c */#include <stdio.h>#include "bn_lcl.h"/* Auto generated from crypto/bn/comba.pl */#undef bn_mul_comba8#undef bn_mul_comba4#undef bn_sqr_comba8#undef bn_sqr_comba4#ifdef BN_LLONG#define mul_add_c(a,b,c0,c1,c2) \\	t=(BN_ULLONG)a*b; \\	t1=(BN_ULONG)Lw(t); \\	t2=(BN_ULONG)Hw(t); \\	c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define mul_add_c2(a,b,c0,c1,c2) \\	t=(BN_ULLONG)a*b; \\	tt=(t+t)&BN_MASK; \\	if (tt < t) c2++; \\	t1=(BN_ULONG)Lw(tt); \\	t2=(BN_ULONG)Hw(tt); \\	c0=(c0+t1)&BN_MASK2;  \\	if ((c0 < t1) && (((++t2)&BN_MASK2) == 0)) c2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define sqr_add_c(a,i,c0,c1,c2) \\	t=(BN_ULLONG)a[i]*a[i]; \\	t1=(BN_ULONG)Lw(t); \\	t2=(BN_ULONG)Hw(t); \\	c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define sqr_add_c2(a,i,j,c0,c1,c2) \\	mul_add_c2((a)[i],(a)[j],c0,c1,c2)#else#define mul_add_c(a,b,c0,c1,c2) \\	t1=LBITS(a); t2=HBITS(a); \\	bl=LBITS(b); bh=HBITS(b); \\	mul64(t1,t2,bl,bh); \\	c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define mul_add_c2(a,b,c0,c1,c2) \\	t1=LBITS(a); t2=HBITS(a); \\	bl=LBITS(b); bh=HBITS(b); \\	mul64(t1,t2,bl,bh); \\	if (t2 & BN_TBIT) c2++; \\	t2=(t2+t2)&BN_MASK2; \\	if (t1 & BN_TBIT) t2++; \\	t1=(t1+t1)&BN_MASK2; \\	c0=(c0+t1)&BN_MASK2;  \\	if ((c0 < t1) && (((++t2)&BN_MASK2) == 0)) c2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define sqr_add_c(a,i,c0,c1,c2) \\	sqr64(t1,t2,(a)[i]); \\	c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \\	c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;#define sqr_add_c2(a,i,j,c0,c1,c2) \\	mul_add_c2((a)[i],(a)[j],c0,c1,c2)#endifvoid bn_mul_comba${num}(r,a,b)BN_ULONG *r,*a,*b;	{#ifdef BN_LLONG	BN_ULLONG t;#else	BN_ULONG bl,bh;#endif	BN_ULONG t1,t2;	BN_ULONG c1,c2,c3;EOF$ret=&combas_mul("r","a","b",$num,"c1","c2","c3");printf <<"EOF";	}void bn_mul_comba${num2}(r,a,b)BN_ULONG *r,*a,*b;	{#ifdef BN_LLONG	BN_ULLONG t;#else	BN_ULONG bl,bh;#endif	BN_ULONG t1,t2;	BN_ULONG c1,c2,c3;EOF$ret=&combas_mul("r","a","b",$num2,"c1","c2","c3");printf <<"EOF";	}void bn_sqr_comba${num}(r,a)BN_ULONG *r,*a;	{#ifdef BN_LLONG	BN_ULLONG t,tt;#else	BN_ULONG bl,bh;#endif	BN_ULONG t1,t2;	BN_ULONG c1,c2,c3;EOF$ret=&combas_sqr("r","a",$num,"c1","c2","c3");printf <<"EOF";	}void bn_sqr_comba${num2}(r,a)BN_ULONG *r,*a;	{#ifdef BN_LLONG	BN_ULLONG t,tt;#else	BN_ULONG bl,bh;#endif	BN_ULONG t1,t2;	BN_ULONG c1,c2,c3;EOF$ret=&combas_sqr("r","a",$num2,"c1","c2","c3");printf <<"EOF";	}EOFsub bn_str	{	local($var,$val)=@_;	print "\t$var=$val;\n";	}sub bn_ary	{	local($var,$idx)=@_;	return("${var}[$idx]");	}sub bn_clr	{	local($var)=@_;	print "\t$var=0;\n";	}sub bn_mad	{	local($a,$b,$c0,$c1,$c2,$num)=@_;	if ($num == 2)		{ printf("\tmul_add_c2($a,$b,$c0,$c1,$c2);\n"); }	else		{ printf("\tmul_add_c($a,$b,$c0,$c1,$c2);\n"); }	}sub bn_sad	{	local($a,$i,$j,$c0,$c1,$c2,$num)=@_;	if ($num == 2)		{ printf("\tsqr_add_c2($a,$i,$j,$c0,$c1,$c2);\n"); }	else		{ printf("\tsqr_add_c($a,$i,$c0,$c1,$c2);\n"); }	}sub combas_mul	{	local($r,$a,$b,$num,$c0,$c1,$c2)=@_;	local($i,$as,$ae,$bs,$be,$ai,$bi);	local($tot,$end);	$as=0;	$ae=0;	$bs=0;	$be=0;	$tot=$num+$num-1;	&bn_clr($c0);	&bn_clr($c1);	for ($i=0; $i<$tot; $i++)		{		$ai=$as;		$bi=$bs;		$end=$be+1;		@numa=@numb=();#print "($as $ae) ($bs $be) $bs -> $end [$i $num]\n";		for ($j=$bs; $j<$end; $j++)			{			push(@numa,$ai);			push(@numb,$bi);			$ai--;			$bi++;			}		if ($i & 1)			{			@numa=reverse(@numa);			@numb=reverse(@numb);			}		&bn_clr($c2);		for ($j=0; $j<=$#numa; $j++)			{			&bn_mad(&bn_ary($a,$numa[$j]),				&bn_ary($b,$numb[$j]),$c0,$c1,$c2,1);			}		&bn_str(&bn_ary($r,$i),$c0);		($c0,$c1,$c2)=($c1,$c2,$c0);		$as++ if ($i < ($num-1));		$ae++ if ($i >= ($num-1));		$bs++ if ($i >= ($num-1));		$be++ if ($i < ($num-1));		}	&bn_str(&bn_ary($r,$i),$c0);	}sub combas_sqr	{	local($r,$a,$num,$c0,$c1,$c2)=@_;	local($i,$as,$ae,$bs,$be,$ai,$bi);	local($b,$tot,$end,$half);	$b=$a;	$as=0;	$ae=0;	$bs=0;	$be=0;	$tot=$num+$num-1;	&bn_clr($c0);	&bn_clr($c1);	for ($i=0; $i<$tot; $i++)		{		$ai=$as;		$bi=$bs;		$end=$be+1;		@numa=@numb=();#print "($as $ae) ($bs $be) $bs -> $end [$i $num]\n";		for ($j=$bs; $j<$end; $j++)			{			push(@numa,$ai);			push(@numb,$bi);			$ai--;			$bi++;			last if ($ai < $bi);			}		if (!($i & 1))			{			@numa=reverse(@numa);			@numb=reverse(@numb);			}		&bn_clr($c2);		for ($j=0; $j <= $#numa; $j++)			{			if ($numa[$j] == $numb[$j])				{&bn_sad($a,$numa[$j],$numb[$j],$c0,$c1,$c2,1);}			else				{&bn_sad($a,$numa[$j],$numb[$j],$c0,$c1,$c2,2);}			}		&bn_str(&bn_ary($r,$i),$c0);		($c0,$c1,$c2)=($c1,$c2,$c0);		$as++ if ($i < ($num-1));		$ae++ if ($i >= ($num-1));		$bs++ if ($i >= ($num-1));		$be++ if ($i < ($num-1));		}	&bn_str(&bn_ary($r,$i),$c0);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -