// 类型定义
typedef unsigned int u32;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long long u64;
// u32数据初始化为某一位数
/*
参数:
p_dst:被初始化的数据的指针
p_src:初始化数据
len:p_dst的长度
*/
void Data_u4_Clear(u32 *p_dst, u32 p_src,u32 len)
{
while(len–)
{
*(p_dst++)=p_src;
}
}
// 大数乘法(此大数乘法是按照逆序顺序进行计算的)
/*
res:乘法后的结果(res对应的数据的长度为aLen+bLen)
a:乘法的左参数
b:乘法的右参数
aLen:a的长度
bLen:b的长度
*/
void BigMul(u32*res,u32*a,u32*b,u32 aLen,u32 bLen)
{
int ix, iy;
u32 C;
u64 _W;
Data_u4_Clear(res, 0x00, bLen);
for (ix = 0; ix < aLen; ix++)
{
C = 0;
for (iy = 0; iy < bLen; iy++)
{
_W = (u64)C + (u64)res[(ix + iy)] + ((u64)a[ix]) * ((u64)b[iy]);
res[(ix + iy)] = (u32)_W;
C = (u32)(_W >> 32);
}
res[(ix + aLen)] = C;
}
return;
}
// 数据翻转
void top_swap_bottom(u32 *res,u32 resLen)
{
int i;
for (i=0;i<resLen/2;i++)
{
res[i] = res[i] ^res[resLen-i-1];
res[resLen-i-1]= res[i] ^res[resLen-i-1];
res[i] = res[i] ^res[resLen-i-1];
}
}
// 举个例子
int main()
{
u32 res[16]={0x00};
u32 a[8]={0x11223344,0x55667788,0x35363738,0x11223344,0x55667788,0x35363738,0x11223344,0x55667788};
u32 b[8]={0x11223344,0x55667788,0x35363738,0x11223344,0x55667788,0x35363738,0x11223344,0x55667788};
// 数据翻转
top_swap_bottom(a,sizeof(a)/sizeof(u32));
// 数据翻转
top_swap_bottom(b,sizeof(b)/sizeof(u32));
// 大数乘法
BigMul(res,a,b,sizeof(a)/sizeof(u32),sizeof(b)/sizeof(u32));
// 数据翻转
top_swap_bottom(res,sizeof(res)/sizeof(u32));
return 0;
}