hkdf.h не найден в библиотеке Crypto ++ - PullRequest
0 голосов
/ 19 октября 2018

Я не могу включить hkdf.h из библиотеки crypto ++ в мой код.

Там написано cryptopp/hkdf.h not found.Хотя я могу импортировать в свой код другие части из той же библиотеки, такие как cryptopp/sha.h

, я использую g++ с флагами -std=c++11 и -lcryptopp

Iзаглянул в документацию и предложил флаг -lcryptopp, который я использую.Это не должно быть проблемой, я что-то упустил?

Редактировать 1:

Команда компиляции:

g++ -std=c++11 mycode.cpp -lcryptopp

Редактировать 2:

Как сделатьЯ проверяю версию моей библиотеки crypto ++?Команда загрузки была:

sudo apt-get install libcrypto++-dev

Моя ОС - Ubuntu 16.04

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Команда компиляции:

g++ -std=c++11 mycode.cpp -lcryptopp

Это не отвечает на ваш вопрос.Это просто на голову ...

Будьте осторожны с g++ -std=c++11 mycode.cpp -lcryptopp.Библиотека и ваша программа должны быть собраны с использованием в основном одинаковых опций.Я не верю, что Debian использует -std=c++11, поэтому вы не должны его использовать.

Правило "использовать в основном одинаковые параметры" применяется ко всем дистрибутивам и всем библиотекам C ++;а не только Crypto ++ на Debian.Подобные проблемы возникнут, если вы сделаете то же самое с библиотекой PCRE в Fedora.

Вы можете проверить флаги, которые Debian использует для сборки библиотеки, на Автоматическое создание пакета Debian |Crypto ++ .Флаги, которые использует Debian:

-DHAVE_CONFIG_H -I. -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 \
-fstack-protector-strong -Wformat -Werror=format-security \
-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS -DNDEBUG -fPIC -DPIC

Для ваших целей важными флагами являются -g -O2 -DNDEBUG -fPIC.Это флаги, которые вы должны использовать в своей программе.-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS применяется в файле config.h, поэтому вам не нужно передавать его в командной строке.(Нераспределенный доступ был недавно удален, потому что это вызвало слишком много проблем, поэтому вам даже не придется беспокоиться о -DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS в будущем.)

Вы можете использовать -std=c++11, еслитебе нравится.Однако вам необходимо самостоятельно загрузить и собрать библиотеку из исходных кодов, чтобы убедиться, что библиотека и ваша программа используют одни и те же флаги.

Если вы собираете библиотеку самостоятельно, см. GNUmakefile |Сборка библиотеки на вики-сайте Crypto ++.

Если вы собираете библиотеку самостоятельно, сделайте себе одолжение и удалите версию библиотеки, предоставленную дистрибутивом.Что-то вроде sudo apt-get remove --purge libcrypto++ libcrypto++-dev libcrypto++-dbg.В противном случае вы будете непреднамеренно смешивать и сопоставлять их.

0 голосов
/ 21 октября 2018

Моя ОС - Ubuntu 16.04

Вот ваш ответ.Ubuntu - это производная от Debian.Debian устанавливает заголовочные файлы Crypto ++ в /usr/include/crypto++, а не /usr/include/cryptopp.Поэтому вам следует #include <crypto++/hkdf.h>.

Содержимое пакета Debian можно посмотреть по адресу Список файлов пакета libcrypto ++ - dev в расширенной архитектуре amd64 (и друзей):

/usr/include/crypto++/3way.h
/usr/include/crypto++/adler32.h
/usr/include/crypto++/aes.h
/usr/include/crypto++/algebra.h
...

ls /usr/include/cryptopp должен был сказать вам, что что-то не так.

0 голосов
/ 20 октября 2018

Невозможно включить hkdf.h из библиотеки crypto ++ в мой код.

Он говорит, что cryptopp / hkdf.h не найден.

HKDF было добавлено в Crypto ++ 5.6.3.В старых версиях библиотеки ее нет, как в Ubuntu 14 или CentOS 5.

Это реализация только для заголовков, использующая файл hkdf.h.Вы можете скачать его и оставить в каталоге установки Crypto ++.Может быть что-то вроде следующего для Crypto ++ 5.6.3:

# Crypto++ 5.6.3
wget https://raw.githubusercontent.com/weidai11/cryptopp/217cb1f983c6/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/

Интерфейс функций деривации ключей изменился в Crypto ++ 7.0.Точнее, в Crypto ++ 7.0 мы добавили базовый класс для использования в качестве интерфейса (ранее его не было).Базовый класс - KeyDerivationFunction, и это позволило нам улучшить самотестирование для классов функций деривации ключей.Так что может быть что-то вроде следующего для Crypto ++ 7.0:

# Crypto++ 7.0
wget https://raw.githubusercontent.com/weidai11/cryptopp/c8d8caf70074/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/

Это не должно быть проблемой, я что-то упустил?

Я думаю, что ваша проблемавероятно зависит от вашего дистрибутива (или от того, кто поставляет Crypto ++).Мы могли бы сказать больше, если бы вы предоставили подробную информацию о дистрибутиве и версии библиотеки, которую они предоставляют.

Чтобы рискнуть предположить ... Debian и Fedora остаются в курсе выпусков Crypto ++.Или они в течение последних нескольких лет.Так что вы, вероятно, не используете Debian 8, Ubuntu 17, Fedora 22 или их соответствующие варианты.

Однако вы можете использовать Debian 7 или более раннюю версию, Ubuntu 12 или более раннюю версию или Fedora 21или ранее.В этом случае я считаю, что вы используете Crypto ++ 5.6.2.

Я считаю, что Gentoo, BSD и некоторые другие отстают на кривой выпуска.Насколько я знаю, некоторые дистрибутивы все еще предоставляют Crypto ++ 5.6.2.

...