6

RSAおよびSPRNG関数にlibtomcryptCライブラリを使用して、C++で安全なインスタントメッセージングプログラムを作成しています。libtomcryptを静的ライブラリとしてコンパイルし、それにリンクしてsprng関数を実行し、生成されているランダムデータを確認して使用することができました。

私が抱えている問題は、関数にリンクされた数学ライブラリへの依存関係を持つrsa_make_key()関数を使用しようとしていることです。

この場合、静的ライブラリとしてリンクしようとしているTomsfastmath(tfm)を使用しようとしています。これらのライブラリは両方とも、私のプロジェクトフォルダから1つ上のディレクトリ(つまり../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
}
4

2 に答える 2

0

-DTFM_DESCmakefileCFLAGSと変数に追加してCPPFLAGS、ヘッダーが変数として宣言tfm_descされるようにしexternます。

その後tfm_desc、変数はライブラリからプルインされます。

于 2012-12-09T03:45:41.240 に答える
0

test_cryptファイルに関連するヘッダーを含める必要があります。

以前に含める必要があると誤って述べましtfm.hた。代わりに、必要#include "tomcrypt.h"な定数を提供する必要があります。

メルポメネが言ったことを明確にするために、あなたの問題は、コンパイラが-正しく-使用している識別子が宣言されていないことを教えてくれる正しいヘッダーが含まれていないことです。

于 2012-12-09T00:44:09.913 に答える