C++ 使用 Keccak 库
C++ Using Keccak Library
我正在写我的学士论文,我必须测试一些 post 量子算法。我从 NIST 下载了它们。但是当我尝试 DAGS: https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/round-1/submissions/DAGS.zip 并尝试 "make" 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'
encapsulation.c:(.text+0x478): 未定义对 KangarooTwelve'
decapsulation.o: In function
decapsulation 的引用':
decapsulation.c:(.text+0x16e): undefined reference to KangarooTwelve'
decapsulation.o:decapsulation.c:(.text+0x1bd): more undefined references to
KangarooTwelve' follow
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
我经常尝试并做一个 out-of-source 构建,尤其是 git 回购(只是构建 TDE/KDE3 的习惯),所以我只创建一个 kbuild
和将源文件复制过来:
$ md kbuild
$ cp -a KeccakCodePackage/* kbuild/
$ cd kbuild
现在根据自述文件构建所需的静态库,并将库和 headers 复制到 /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
(一切都很好,不知道它从那里做了什么,但没有错误并且开始正常......)
所以,我无法提供 "silver-bullet" 你的构建出了什么问题,但我可以确认构建,根据各种自述文件,按照广告进行,并导致工作正常可执行。如果您还有其他问题,请告诉我。
我正在写我的学士论文,我必须测试一些 post 量子算法。我从 NIST 下载了它们。但是当我尝试 DAGS: https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/round-1/submissions/DAGS.zip 并尝试 "make" 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'
encapsulation.c:(.text+0x478): 未定义对 KangarooTwelve'
decapsulation.o: In function
decapsulation 的引用':
decapsulation.c:(.text+0x16e): undefined reference to KangarooTwelve'
decapsulation.o:decapsulation.c:(.text+0x1bd): more undefined references to
KangarooTwelve' follow
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
我经常尝试并做一个 out-of-source 构建,尤其是 git 回购(只是构建 TDE/KDE3 的习惯),所以我只创建一个 kbuild
和将源文件复制过来:
$ md kbuild
$ cp -a KeccakCodePackage/* kbuild/
$ cd kbuild
现在根据自述文件构建所需的静态库,并将库和 headers 复制到 /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
(一切都很好,不知道它从那里做了什么,但没有错误并且开始正常......)
所以,我无法提供 "silver-bullet" 你的构建出了什么问题,但我可以确认构建,根据各种自述文件,按照广告进行,并导致工作正常可执行。如果您还有其他问题,请告诉我。