// 实现模2^16+1乘运算,参数为 一个16位分组, 一个子密钥
uint16 mul(uint16 a, uint16 b)
{
word32 p;
if (a)
{
if (b)
{
p=(word32)a*b;
b=(uint16)(low16(p)); // 取低16位作为b的值
a=(uint16)(p>>16); //取得高16位作为a的值
return b-a+(b<a);
}
else
{
return 1-a;
}
}
else
return 1-b;
}
#define MUL(x,y) (x=mul(low16(x),y)) // 模2^16+1乘后值赋给X(子分组)宏
#define CONST
static void cipher_idea(word16 in[4],word16 out[4],register CONST IDEAkey Z)
{
register uint16 x1,x2,x3,x4,t1,t2;
|