验证poly1305-donna-16.h代码

Verification of poly1305-donna-16.h code

2015 年 5 月的 RFC Y. Nir ​​等人、ChaCha20 和 Poly1305 的 IETF 协议 (https://www.rfc-editor.org/rfc/rfc7539) contains a reference to the MIT/Public domain C library https://github.com/floodyberry/poly1305-donna.

我只是将 C 代码移植到 Pascal。 8 位代码工作正常(自测、示例和 RFC 测试向量)。

来自 poly1305-donna-16.h 的端口使用 16->32 位倍数和 32 位加法失败。经过一些测试后,我用 DJGPP GCC 4.7.3、MS VC 6.0 和 BC 3.1 编译了原始源代码,这三个都失败了(poly1305 自测)。

问题:此 C 版本(使用 -DPOLY1305_16BIT 构建)是否也无法用于其他编译器?是否有可用的已知修复程序? (作者 Andrew Moon 在 https://floodyberry.wordpress.com/ 的博客已闲置 6 年)

我可以确认在一个非常普通的 Fedora 22 系统上构建失败:

% gcc poly1305-donna.c -c -DPOLY1305_16BIT
% gcc example-poly1305.c -o ex poly1305-donna.o -DPOLY1305_16BIT
% ./ex
poly1305 self test: failed

请注意,当我省略 -DPOLY1305_16BIT 时测试成功。

另请注意:

% uname -rmp
4.0.8-300.fc22.x86_64 x86_64 x86_64
% gcc --version
gcc (GCC) 5.1.1 20150618 (Red Hat 5.1.1-4)

我建议您提交错误报告。安德鲁过去一直有回应。

编辑:

用 clang 版本 3.5.0 编译产生与上述 gcc 测试相同的结果。