如何更改NaCl Poly1305实现的挤压功能中的基数?

时间:2019-03-28 16:26:48

标签: c cryptography modular-arithmetic nacl-cryptography

我想将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;
}

不幸的是,以上内容给了我错误的结果。有谁知道问题出在哪里以及如何解决?

0 个答案:

没有答案