【问题标题】:C++ Using Keccak LibraryC++ 使用 Keccak 库
【发布时间】:2018-12-04 03:23:43
【问题描述】:

我正在写我的学士论文,我必须测试一些后量子算法。我从 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 toKangarooTwelve' encapsulation.c:(.text+0x13a): 未定义引用KangarooTwelve' encapsulation.c:(.text+0x2c9): undefined reference toKangarooTwelve' encapsulation.c:(.text+0x478): undefined reference to KangarooTwelve' decapsulation.o: In functiondecapsulation': decapsulation.c:(.text+0x16e): undefined reference to KangarooTwelve' decapsulation.o:decapsulation.c:(.text+0x1bd): more undefined references toKangarooTwelve' 跟随 collect2:错误:ld 返回 1 个退出状态 Makefile:22:目标“PQCgenKAT_kem”的配方失败 make: *** [PQCgenKAT_kem] 错误 1

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

【问题讨论】:

  • 您是否按照说明下载了git clone https://github.com/gvanas/KeccakCodePackage,然后下载了make generic64/libkeccak.a,并将生成的库和标头复制到/usr/local,如README.md 文件中指定的那样?
  • 嗨@DavidC.Rankin,是的,我尝试了我能找到的一切。我也尝试按照 dags 自述文件进行操作,但没有成功。
  • 检查encapsulation.c 源以及keccak/KangarooTwelve 文件,看看是否没有符号更改,例如Kangaroo-TwelveKangarooTwelve2 等...错误是链接器错误,告诉您它找不到 KangarooTwelve。值得为roo 查找整个源代码(包括keccak 目录中的众多宏),看看是否对其中一个袋鼠名字做了一些有趣的事情。这是目前唯一有意义的事情。
  • 我下班后会有时间来构建它,如果我发现任何东西,我会告诉你。
  • 谢谢,代码应该不会有任何错误,因为这个算法是提交给:csrc.nist.gov/projects/post-quantum-cryptography/…所以必须有人运行这个代码才能成功。非常感谢:)

标签: c++ keccak post-quantum-cryptography


【解决方案1】:

根据 cmets,我今晚有时间研究构建(也在 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

现在根据自述文件构建所需的静态库,并将库和头文件复制到 /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

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

因此,我无法提供关于您的构建出了什么问题的“灵丹妙药”,但我可以根据各种自述文件确认构建是否按照宣传的方式进行,并生成一个工作可执行文件。如果您还有其他问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多