2012-12-08 7 views
6

में tomsfastmath को जोड़ने में असमर्थ मैं अपने आरएसए और एसपीआरएनजी कार्यों के लिए libtomcrypt सी लाइब्रेरी का उपयोग कर सी ++ में एक सुरक्षित त्वरित संदेश प्रोग्राम लिख रहा हूं। मुझे एक स्थिर लाइब्रेरी के रूप में संकलित libtomcrypt मिला है और मैं इसे लिंक करने और sprng कार्यों को चलाने में सक्षम हूं और उत्पन्न होने वाले यादृच्छिक डेटा को देख और उपयोग कर रहा हूं।libtomcrypt

समस्या जो मैं कर रहा हूं वह rsa_make_key() फ़ंक्शन का उपयोग करने का प्रयास कर रहा है जिसमें कार्य करने के लिए एक लिंक की गई गणित लाइब्रेरी पर निर्भरता है।

इस मामले में मैं Tomsfastmath (tfm) का उपयोग करने की कोशिश कर रहा हूं जिसे मैं एक स्थिर पुस्तकालय के रूप में जोड़ने का भी प्रयास कर रहा हूं। इन दोनों पुस्तकालयों में से मेरे प्रोजेक्ट फ़ोल्डर में एक ही निर्देशिका है जो मेरे प्रोजेक्ट फ़ोल्डर (यानी ../libtomcrypt)

मेरे कोड में जब मैं टॉस्फास्ट गणित वर्णनकर्ता "tfm_desc" तक पहुंचने का प्रयास करता हूं तो मुझे त्रुटि test_crypt.cpp:8:11: error: 'tfm_desc' was not declared in this scope मिलती है। जो मुझे लगता है कि tfm libtomcrypt में सही ढंग से लिंक नहीं हो रहा है। मैंने इन दोनों चीजों के लिए प्रलेखन पढ़ा है, यह बहुत स्पष्ट नहीं है।

मैं यहां अंत में हूं। क्या मैं गलत हूं?

यहाँ मेरी मेकअप फ़ाइल

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) 

और यहाँ मेरी 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

यह एक कंपाइलर त्रुटि है, लिंकर त्रुटि नहीं। – melpomene

उत्तर

0

अपने makefile की CFLAGS और CPPFLAGS चर के -DTFM_DESC जोड़ें ताकि हेडर एक extern चर के रूप में tfm_desc घोषित करेंगे।

tfm_desc परिवर्तक को लाइब्रेरी से खींच लिया जाना चाहिए।

+0

एक साइड नोट के रूप में, आप 'CPPFLAGS' का नाम बदलकर' CXXFLAGS' कर सकते हैं। सीपीपीएफएलजीएस का प्रयोग अक्सर सी प्रीप्रोसेसर के विकल्पों को कॉन्फ़िगर करने के लिए किया जाता है; 'CXXFLAGS' अक्सर सी ++ के लिए उपयोग किया जाता है। –

+0

मैं -पीटीएफएमडीईएससी को सीपीपी (सीएफओ झंडे होना चाहिए) जोड़कर संकलित करने के लिए अपना कोड प्राप्त करने में सक्षम था और गलत फ़ोल्डर को इंगित करने के लिए -L को ठीक कर रहा था। आपकी सहायता के लिए धन्यवाद. आम तौर पर मेकफ़ाइल अद्भुत हैं लेकिन यह प्रोजेक्ट हाथ से बाहर हो गया है। – K3rb3ros

0

आप अपने test_crypt फ़ाइल में प्रासंगिक हेडर को शामिल करने की आवश्यकता है है।

मैंने गलत तरीके से कहा था कि आपको पहले tfm.h शामिल करना होगा। आपको इसके बजाय #include "tomcrypt.h" होना चाहिए, क्योंकि यह आपको निरंतर आवश्यकता के साथ प्रदान करना चाहिए।

मेलपॉमेनी ने क्या स्पष्ट किया है, यह स्पष्ट करने के लिए, आपकी समस्या यह है कि आप सही शीर्षलेख शामिल नहीं कर रहे हैं जो संकलक को सही तरीके से उत्पन्न कर रहा है - आपको बताता है कि आप जिस पहचानकर्ता का उपयोग कर रहे हैं उसे घोषित नहीं किया गया है।

+0

माईहेडर फ़ाइल में शामिल है, मेरी इच्छा है कि समाधान यह आसान था, लेकिन यहां कुछ और चल रहा है। – K3rb3ros