From f4c6cf83dfbf041d2ea8ab6ade961137b44d0928 Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Tue, 19 Apr 2016 22:14:42 +0200 Subject: Don't assume cryptopp is system-wide installed The current build system adds "-isystem /usr/include/$(CRYPTOLIB)" to AM_CPPFLAGS, but this is wrong because cryptopp might not be installed in this location. Instead, the build system should simply include or and rely on the compiler include path. The tricky part is that it can be or . To solve this, we use a solution similar to the one used in https://github.com/bingmann/crypto-speedtest/blob/master/m4/cryptopp.m4 and https://github.com/bingmann/crypto-speedtest/blob/master/src/speedtest_cryptopp.cpp: the configure script fills in a variable called CRYPTOLIB_HEADER_PREFIX, and we use that in the C++ code to include the right header file. It is worth mentioning that doing #include doesn't work, and we have to use an intermediate #define'd constant to overcome this C preprocessor limitation. Signed-off-by: Thomas Petazzoni (swarren, apply the same change to rsa-pss.cpp) Signed-off-by: Stephen Warren --- configure.ac | 1 + src/Makefile.am | 2 +- src/aes-cmac.cpp | 28 +++++++++++++++++----------- src/rsa-pss.cpp | 44 +++++++++++++++++++++++++------------------- 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac index 943654f..620e158 100644 --- a/configure.ac +++ b/configure.ac @@ -33,6 +33,7 @@ AC_LINK_IFELSE( [AC_MSG_ERROR([libcrypto++/libcryptopp is not installed.])])] ) AC_SUBST(CRYPTOLIB) +AC_DEFINE_UNQUOTED([CRYPTOLIB_HEADER_PREFIX], [$CRYPTOLIB], [Location of cryptolib header]) LDFLAGS=$SAVED_LDFLAGS AC_LANG(C) diff --git a/src/Makefile.am b/src/Makefile.am index 3dad0e6..35a606f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ AM_CFLAGS = -Wall -std=c99 -AM_CPPFLAGS = -isystem /usr/include/$(CRYPTOLIB) $(LIBUSB_CFLAGS) +AM_CPPFLAGS = $(LIBUSB_CFLAGS) bin_PROGRAMS = tegrarcm tegrarcm_SOURCES = \ diff --git a/src/aes-cmac.cpp b/src/aes-cmac.cpp index 24c89f8..da8be5a 100644 --- a/src/aes-cmac.cpp +++ b/src/aes-cmac.cpp @@ -26,6 +26,9 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include "config.h" + #include using std::cout; using std::cerr; @@ -40,26 +43,29 @@ using std::string; #include using std::exit; -#include "cryptlib.h" -using CryptoPP::Exception; +#define CRYPTOPP_INCLUDE_CRYPTLIB +#define CRYPTOPP_INCLUDE_CMAC +#define CRYPTOPP_INCLUDE_AES +#define CRYPTOPP_INCLUDE_HEX +#define CRYPTOPP_INCLUDE_FILTERS +#define CRYPTOPP_INCLUDE_SECBLOCK -#include "cmac.h" -using CryptoPP::CMAC; +#include CRYPTOPP_INCLUDE_CRYPTLIB +#include CRYPTOPP_INCLUDE_CMAC +#include CRYPTOPP_INCLUDE_AES +#include CRYPTOPP_INCLUDE_HEX +#include CRYPTOPP_INCLUDE_FILTERS +#include CRYPTOPP_INCLUDE_SECBLOCK -#include "aes.h" +using CryptoPP::Exception; +using CryptoPP::CMAC; using CryptoPP::AES; - -#include "hex.h" using CryptoPP::HexEncoder; using CryptoPP::HexDecoder; - -#include "filters.h" using CryptoPP::StringSink; using CryptoPP::StringSource; using CryptoPP::HashFilter; using CryptoPP::HashVerificationFilter; - -#include "secblock.h" using CryptoPP::SecByteBlock; extern "C" int cmac_hash(const unsigned char *msg, int len, unsigned char *cmac_buf) diff --git a/src/rsa-pss.cpp b/src/rsa-pss.cpp index ab0a680..7e6f066 100644 --- a/src/rsa-pss.cpp +++ b/src/rsa-pss.cpp @@ -26,6 +26,9 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include "config.h" + #include using std::cout; using std::cerr; @@ -40,36 +43,39 @@ using std::string; #include using std::exit; -#include "cryptlib.h" -using CryptoPP::Exception; +#define CRYPTOPP_INCLUDE_CRYPTLIB +#define CRYPTOPP_INCLUDE_FILES +#define CRYPTOPP_INCLUDE_FILTERS +#define CRYPTOPP_INCLUDE_INTEGER +#define CRYPTOPP_INCLUDE_OSRNG +#define CRYPTOPP_INCLUDE_QUEUE +#define CRYPTOPP_INCLUDE_RSA +#define CRYPTOPP_INCLUDE_PSSR +#define CRYPTOPP_INCLUDE_SHA +#define CRYPTOPP_INCLUDE_SECBLOCK + +#include CRYPTOPP_INCLUDE_CRYPTLIB +#include CRYPTOPP_INCLUDE_FILES +#include CRYPTOPP_INCLUDE_FILTERS +#include CRYPTOPP_INCLUDE_INTEGER +#include CRYPTOPP_INCLUDE_OSRNG +#include CRYPTOPP_INCLUDE_QUEUE +#include CRYPTOPP_INCLUDE_RSA +#include CRYPTOPP_INCLUDE_PSSR +#include CRYPTOPP_INCLUDE_SHA +#include CRYPTOPP_INCLUDE_SECBLOCK -#include "integer.h" +using CryptoPP::Exception; using CryptoPP::Integer; - -#include "files.h" using CryptoPP::FileSource; - -#include "filters.h" using CryptoPP::StringSink; using CryptoPP::SignerFilter; - -#include "queue.h" using CryptoPP::ByteQueue; - -#include "rsa.h" using CryptoPP::RSA; using CryptoPP::RSASS; - -#include "pssr.h" using CryptoPP::PSS; - -#include "sha.h" using CryptoPP::SHA256; - -#include "secblock.h" using CryptoPP::SecByteBlock; - -#include "osrng.h" using CryptoPP::AutoSeededRandomPool; #include "rsa-pss.h" -- cgit v1.2.1