Невозможно связать tomsfastmath с libtomcrypt

Я пишу безопасную программу обмена мгновенными сообщениями на c ++, используя библиотеку libtomcrypt C для своих функций RSA и SPRNG. Я получил libtomcrypt, скомпилированный как статическую библиотеку, и мне удалось связать ее с ней, запустить функции sprng, посмотреть и использовать случайные данные, которые она генерирует.

Проблема, которую я имею, пытается использовать функцию rsa_make_key (), которая имеет зависимости от связанной математической библиотеки.

В этом случае я пытаюсь использовать Tomsfastmath (TFM), который я также пытаюсь связать в качестве статической библиотеки. Обе эти библиотеки находятся в своей собственной папке проекта на один каталог выше папки моего проекта (т.е. ../libtomcrypt)

В моем коде, когда я пытаюсь получить доступ к математическому дескриптору tomsfast «tfm_desc», я получаю сообщение об ошибке test_crypt.cpp:8:11: error: 'tfm_desc' was not declared in this scope, Что заставляет меня думать, что tfm неправильно связывается с libtomcrypt. Я прочитал документацию для обеих этих вещей, не очень понятно.

Я в конце концов здесь. Что я делаю не так?

Вот мой файл make

 CC:=gcc #C Compiler
CFLAGS:=-std=c99 -O0 -I/home/k3rb3ros/csci484-CMU-/libtomcrypt-1.17/src/headers -g -     Wall -Wextra#C Compiler flags
CPP:=g++ #C++ Compiler
CPPFLAGS:=-std=gnu++0x -O0 -I/home/k3rb3ros/csci484/csci484-CMU-/libtomcrypt-  1.17/src/headers -L. -g -Wall -Wextra#C++ Compiler flags
#CPPFLAGS:=-std=gnu++0x -O0 -g -Wall -Wextra #C++ Compiler flags
LDFLAGS:= -lSDL -lSDL_net -ltfm -ltomcrypt
CSOURCES= #C files used in this program
CPPSOURCES=connection.cpp chat.cpp test_crypt.cpp #CPP files used in this prgram
#COBJECTS=$(CSOURCES:.c=.o)libtfm.a libtomcrypt.a
COBJECTS=$(CSOURCES:.c=.o)
CPPOBJECTS=$(CPPSOURCES:.cpp=.o)
BINARY=down_low

all: $(BINARY) $(COBJECTS) $(CPPOBJECTS)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@

.cpp.o:
$(CPP) $(CPPFLAGS) -c $< -o $@

$(BINARY): $(COBJETS) $(CPPOBJECTS)
$(CPP) $(CPPFLAGS) $(COBJECTS) $(CPPOBJECTS) -o $@ $(LDFLAGS)

clean:
rm -rv $(BINARY) $(COBJECTS) $(CPPOBJECTS)

и вот моя функция test_crypt

#include "headers/test_crypt.h"using namespace std;

void test_crypt()
{
int err = 0;
int rng_idx = -1; //rng index, not sure if I need this
ltc_mp = tfm_desc; //tell tomcrypt to use toms fast math
rsa_key pub_key;
prng_state random_gen;

if((err = sprng_start(&random_gen)) != CRYPT_OK) //start the rng and check for errors
{
cout << "start error " << error_to_string(err) << endl;
}

rng_idx = find_prng("sprng");
if((err = sprng_ready(&random_gen)) != CRYPT_OK)
{
cout << "Ready error " << error_to_string(err) << endl;
}

//test toms fast math present and working
//fp_int test;
//fp_init(&test);

//sprng_read(entropy, size, &random_gen);

/*
if((err = rsa_make_key(NULL,           //PRNG state
rng_idx,        //PRNG idx
1024/8,         //Size of key
65537,          //e
&pub_key)       //RSA key
) != CRYPT_OK) //if conditon test
{
cout << "RSA Key Generation error " << error_to_string(err) << endl;
}
rsa_free(&pub_key); //free the key when we are done with it;
*/
sprng_done(&random_gen); //done generating random numbers
}

6

Решение

добавлять -DTFM_DESC в ваш make-файл CFLAGS а также CPPFLAGS переменные, поэтому заголовки объявят tfm_desc как extern переменная.

tfm_desc переменная должна быть извлечена из библиотеки.

0

Другие решения

Вам необходимо включить соответствующий заголовок в ваш файл test_crypt.

Я неправильно заявил, что вам нужно будет включить tfm.h ранее. Вам следует #include "tomcrypt.h" вместо этого, поскольку это должно обеспечить вас необходимой вам постоянной величиной.

Чтобы уточнить, что сказал melpomene, ваша проблема заключается в том, что вы не указали правильные заголовки, из-за которых компилятор — правильно — сообщает вам, что используемый вами идентификатор не объявлен.

0

По вопросам рекламы [email protected]