【发布时间】:2008-09-22 20:21:03
【问题描述】:
我有这个 C 代码在 GF(8) 上做乘法:
int32_t GaloisMultiply (int32_t a, int32_t b)
{
int32_t i;
int32_t mask = 0x100;
int32_t y = 0;
for(i=0;i<8;i++)
{
if(b & mask)
{
y ^= a;
}
mask >>= 1;
y <<= 1;
}
if(b & 0x1)
{
y ^= a;
}
return(y);
}
这或多或少是教科书式的实现。
我想知道如果我可以断言 a 总是 b,我是否对上述算法进行了巧妙的优化,例如我做平方而不是乘法。顺便说一句,我不是在加密使用之后。我只是想利用 GF(8) 中的 x*x 将 x 的位与零位一一交错的事实。
已经有相当聪明的方法来做位交织,但是因为我发现 GF(8) 中的 x*x 做了位交织的事情(偶然)我不能停止尝试使用它比特交错优化。
有什么想法吗?
【问题讨论】:
标签: c cryptography bit-manipulation low-level