我想将Poly1305算法的NaCl h
实现中的squeeze()
函数的整数输入ref
的基数从2转换为8的幂26。
该函数最初看起来像这样:
static void squeeze(unsigned int h[17])
{
unsigned int j;
unsigned int u;
u = 0;
for (j = 0;j < 16;++j) { u += h[j]; h[j] = u & 255; u >>= 8; }
u += h[16]; h[16] = u & 3;
u = 5 * (u >> 2);
for (j = 0;j < 16;++j) { u += h[j]; h[j] = u & 255; u >>= 8; }
u += h[16]; h[16] = u;
}
这里的h
代表一个整数,它由17个“分叉”组成,每个分叉的底数为2 ^ 8 =256。实际上:
h = h[0] + 2^8 * h[1] + 2^16 * h[2] + ... + 2^128 * h[16]
我想将其更改为2的底数到26的幂,以使h
现在由7个“肢体”组成,每个2的底数到26的幂。
我这样做如下:
static void squeeze26(unsigned int h[7])
{
unsigned int j;
unsigned int u;
u = 0;
for (j = 0;j < 6;++j) { u += h[j]; h[j] = u & 67108863; u >>= 26; }
u += h[6]; h[6] = u & 3;
u = 5 * (u >> 2);
for (j = 0;j < 6;++j) { u += h[j]; h[j] = u & 67108863; u >>= 26; }
u += h[6]; h[6] = u;
}
不幸的是,以上内容给了我错误的结果。有谁知道问题出在哪里以及如何解决?