C poly1305-donna-16.h代码的验证

C poly1305-donna-16.h代码的验证,c,cryptography,pascal,C,Cryptography,Pascal,2015年5月的RFC,Y.Nir等人,ChaCha20和Poly1305,用于IETF协议 ()包含对MIT/Public domain C库的引用 我只是将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\

2015年5月的RFC,Y.Nir等人,ChaCha20和Poly1305,用于IETF协议 ()包含对MIT/Public domain C库的引用

我只是将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\u 16位构建)是否也适用于其他编译器?是否有已知的修复程序可用?(作者Andrew Moon的博客自6年来一直处于非活动状态)

我可以确认一个漂亮的vanilla 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\u 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)
我建议你提交一份bug报告。安德鲁过去一直反应迅速

编辑:


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

谢谢。我在GitHub站点上创建了一个问题。我知道8位和32位版本通过了测试。如果不需要特殊版本,32位或64位是自动检测的,因此我猜您实际上已经测试了64位版本。我将接受你的答案,如果没有其他答案与工作修复将被给出。注意:该错误已被修复2016年3月29日。