c++ - C++使用Keccak库

标签 c++ keccak post-quantum-cryptography

我正在攻读学士学位论文,因此必须测试一些后量子算法。我从NIST下载了它们。但是,当我尝试DAGS:https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/round-1/submissions/DAGS.zip并尝试“制作” dags3或dags5时,出现了以下错误:

encapsulation.o:在函数encapsulation': encapsulation.c:(.text+0xeb): undefined reference to KangarooTwelve'中
encapsulation.c :(。text + 0x13a):对KangarooTwelve' encapsulation.c:(.text+0x2c9): undefined reference to KangarooTwelve'的 undefined reference
encapsulation.c :(。text + 0x478):对KangarooTwelve' decapsulation.o: In function解封装的 undefined reference ':
decapsulation.c :(。text + 0x16e):对KangarooTwelve' decapsulation.o:decapsulation.c:(.text+0x1bd): more undefined references to KangarooTwelve的 undefined reference
collect2:错误:ld返回1退出状态
Makefile:22:目标“PQCgenKAT_kem”的配方失败
make:*** [PQCgenKAT_kem]错误1

我已经安装了keccak库,并且在此算法中包含keccak库。有任何想法吗?感谢您的任何帮助。

最佳答案

根据评论,我今晚有时间研究构建(同样在Archlinux上),我没有遇到任何问题。这是我使用的详细步骤。

首先是一般的内核和gcc信息:

$ uname -a
Linux valkyrie 4.19.4-arch1-1-ARCH #1 SMP PREEMPT 
Fri Nov 23 09:06:58 UTC 2018 x86_64 GNU/Linux

$ gcc --version
gcc (GCC) 8.2.1 20180831
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

克隆KeccakCodePackage:
$ git clone https://github.com/gvanas/KeccakCodePackage

我通常会尝试并进行源代码外的构建,尤其是使用git repos(只是习惯于构建TDE / KDE3),因此我只创建kbuild并将源文件复制到以下位置:
$ md kbuild
$ cp -a KeccakCodePackage/* kbuild/
$ cd kbuild

现在,根据自述文件构建所需的静态库,并将该库和 header 复制到/ usr / local /中,例如:
$ make generic64/libkeccak.a

$ sudo cp -a bin/generic64/libkeccak.a /usr/local/lib
$ sudo cp -a bin/generic64/libkeccak.a.headers /usr/local/include

现在解压缩并构建DAGS PQCgenKAT_kem
$ cd ..
$ unzip DAGS.zip
$ cd DAGS/Optimized_Implementation/kem/dags5

$ make
gcc -c gf.c -o gf.o -march=native -mtune=native -c -Wall -I.
gcc -c poly.c -o poly.o -march=native -mtune=native -c -Wall -I.
gcc -c matrix.c -o matrix.o -march=native -mtune=native -c -Wall -I.
matrix.c: In function ‘matrix_multiplication’:
matrix.c:13:16: warning: ‘res’ may be used uninitialized in this function 
                [-Wmaybe-uninitialized]
        return res;
                ^~~
matrix.c: In function ‘matrix_multiplicaion_subfield’:
matrix.c:59:16: warning: ‘Res’ may be used uninitialized in this function 
                [-Wmaybe-uninitialized]
        return Res;
                ^~~
gcc -c fichier.c -o fichier.o -march=native -mtune=native -c -Wall -I.
gcc -c key_gen.c -o key_gen.o -march=native -mtune=native -c -Wall -I.
gcc -c encapsulation.c -o encapsulation.o -march=native -mtune=native -c -Wall -I.
gcc -c decapsulation.c -o decapsulation.o -march=native -mtune=native -c -Wall -I.
gcc -c util.c -o util.o -march=native -mtune=native -c -Wall -I.
gcc -c decoding.c -o decoding.o -march=native -mtune=native -c -Wall -I.
gcc -c kem.c -o kem.o -march=native -mtune=native -c -Wall -I.
gcc -c rng.c -o rng.o -march=native -mtune=native -c -Wall -I.
gcc -c PQCgenKAT_kem.c -o PQCgenKAT_kem.o -march=native -mtune=native -c -Wall -I.
gcc -O3 -march=native -mtune=native gf.o poly.o matrix.o fichier.o key_gen.o
    encapsulation.o decapsulation.o util.o decoding.o kem.o rng.o PQCgenKAT_kem.o 
    -o PQCgenKAT_kem -L/usr/lib -L. -lssl -lcrypto -lkeccak

最后运行生成的可执行文件:
$ ./PQCgenKAT_kem
Starting iteration: 0

(一切都很好,不知道它从那里开始做什么,但是没有错误,并且可以正常启动...)

因此,我无法提供构建过程出了问题的“银色子弹”,但是我可以根据各种自述文件确认构建过程是否如广告中所述继续进行并产生可运行的可执行文件。如果您还有其他问题,请告诉我。

关于c++ - C++使用Keccak库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605241/

相关文章:

c - 写入和读取二进制文件

c++ - 应该将 operator<< 实现为友元还是成员函数?

C++:unique_ptr 未正确初始化

c++ - 无法理解 Robert Martin 的 ISP 文章中的 "contradiction"

c - 我的 C 程序在 Keccak 实现中打印 0xE 而不是 0x0E

c++ - 使用 GLFW3 创建 OpenGL 4.3 窗口失败

python-2.7 - 如何在 Python 中找到 keccak 256 哈希

unit-testing - Keccak (SHA-3) 示例哈希(测试向量)是否可用?

使用后量子公钥算法在 C 中创建 X509 证书?