2012-12-08 12 views
6

Piszę bezpieczny program do obsługi wiadomości błyskawicznych w języku C++ za pomocą biblioteki libtomcrypt C dla jego funkcji RSA i SPRNG. Dostałem libtomcrypt skompilowany jako statyczną bibliotekę i udało mi się połączyć z nim i uruchomić funkcje sprng i zobaczyć i użyć losowych danych, które generuje.Nie można połączyć tomsfastmath do libtomcrypt

Problem, który mam, próbuje użyć funkcji rsa_make_key(), która ma zależności od połączonej biblioteki matematycznej.

W tym przypadku próbuję użyć Tomsfastmath (tfm), którą próbuję również połączyć jako bibliotekę statyczną. Obie te biblioteki znajdują się w folderze z własnym folderem projektu z mojego folderu projektu (tj. ../libtomcrypt)

W moim kodzie, gdy próbuję uzyskać dostęp do tombfast deskryptora matematycznego "tfm_desc", pojawia się błąd test_crypt.cpp:8:11: error: 'tfm_desc' was not declared in this scope. Co sprawia, że ​​myślę, że tfm nie jest poprawnie połączony z libtomcrypt. Przeczytałem dokumentację obu tych rzeczy, nie bardzo jasne.

Jestem na końcu rozumu tutaj. Co robię źle?

Oto mój make plik

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 [email protected] 

.cpp.o: 
     $(CPP) $(CPPFLAGS) -c $< -o [email protected] 

    $(BINARY): $(COBJETS) $(CPPOBJECTS) 
     $(CPP) $(CPPFLAGS) $(COBJECTS) $(CPPOBJECTS) -o [email protected] $(LDFLAGS) 

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

i tu jest moja funkcja 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 
} 
+1

To błąd kompilatora, a nie błąd łącznika. – melpomene

Odpowiedz

0

Dodaj -DTFM_DESC do Twojego makefile za CFLAGS i CPPFLAGS zmiennych tak nagłówki uzna tfm_desc jako zmienna extern.

Zmienna tfm_desc powinna następnie zostać ściągnięta z biblioteki.

+0

Na marginesie, możesz chcieć zmienić nazwę 'CPPFLAGS' na' CXXFLAGS'. 'CPPFLAGS' jest często używany do konfigurowania opcji dla Preprocesora C; 'CXXFLAGS' jest często używany w C++. –

+0

Udało mi się skompilować mój kod, dodając -DTFM_DESC do CPP (powinno to być flagi CXX) i naprawiając -L wskazując niewłaściwy folder. Dzięki za pomoc. Zwykle pliki Makefile są niesamowite, ale ten projekt wymknął się spod kontroli. – K3rb3ros

0

Musisz zawierać odpowiedni nagłówek w pliku test_crypt.

Niepoprawnie stwierdziłem, że wcześniej trzeba będzie podać tfm.h. Zamiast tego powinieneś uzyskać #include "tomcrypt.h", ponieważ zapewnia on stałą potrzebną.

Aby wyjaśnić, co powiedział melpomene, problem polega na tym, że nie uwzględniasz poprawnych nagłówków, co powoduje, że kompilator poprawnie informuje cię, że używany identyfikator nie jest zadeklarowany.

+0

jest zawarte w pliku myheader Chciałbym, aby rozwiązanie było takie proste, ale dzieje się tutaj coś innego. – K3rb3ros

Powiązane problemy