1

libtomcryptを使用してサンプルのrsa/dsaコードを実行しようとしています。ランタイムエラー:libtommathおよびlibtomcryptによるセグメンテーションフォールト

私はLibTomMathを最初にmake installとしてインストールしました。その結果、次のファイルが作成されます。

/usr/lib/libtommath.a /usr/include/tommath.h

はその後、私は、次のコマンドを実行している間、私はすべてのエラーを取得していない午前

/usr/lib/libtomcrypt.a 

作成されたファイル以下の結果として、外部ライブラリ

CFLAGS="-DLTM_DESC -DUSE_LTM -I/usr/include" EXTRALIBS="/usr/lib/libtommath.a " make install 

としてLibTomMathでlibtomcryptインストール

CFLAGS="-DLTM_DESC -DUSE_LTM -I/usr/include" EXTRALIBS="/usr/lib/libtommath.a " make test 

私は正常

gcc -DLTM_DESC rsa_make_key_example.c -o rsa -ltomcrypt 
or 
gcc rsa_make_key_example.c -o rsa -ltomcrypt 

なしコンパイルエラーを使用していないコンパイルするために、この文書libtomcrypt_installationlibtomcrypt_resolvedを経ています。 しかし、走ろうとすると次のエラーが出ます。ここで

./rsa 

LTC_ARGCHK 'ltc_mp.name != NULL' failure on line 34 of file src/pk/rsa/rsa_make_key.c 
Aborted 

ここに私のサンプルRSAコード

#include <tomcrypt.h> 
#include <stdio.h> 

int main(void) { 

# ifdef USE_LTM 
ltc_mp = ltm_desc; 
# elif defined (USE_TFM) 
ltc_mp = tfm_desc; 
# endif 


    rsa_key key; 

    int  err; 
    register_prng(&sprng_desc); 

    if ((err = rsa_make_key(NULL, find_prng("sprng"), 1024/8, 65537,&key)) != CRYPT_OK) { 
     printf("make_key error: %s\n", error_to_string(err)); 
     return -1; 
    } 
    /* use the key ... */ 
    return 0; 

} 

である私のサンプルDSAコードはここ

#include <tomcrypt.h> 
#include <stdio.h> 

int main(void) { 

# ifdef USE_LTM 
ltc_mp = ltm_desc; 
# elif defined (USE_TFM) 
ltc_mp = tfm_desc; 
# endif 


    int  err; 
    register_prng(&sprng_desc); 

    dsa_key key; 


    if ((err = dsa_make_key(NULL, find_prng("sprng"), 20, 128,&key)) != CRYPT_OK) { 
     printf("make_key error: %s\n", error_to_string(err)); 
     return -1; 
    } 
    /* use the key ... */ 
    return 0; 

} 

である私は

、正常にコンパイルしている方法です
gcc dsa_make_key_example.c -o dsa -ltomcrypt 

コードを実行しようとすると、次のエラーが発生しています。

./dsa 
segmentation fault 

EDIT 1:私はさらに調査し、セグメンテーションフォールト

#ifdef LTC_MPI 
#include <stdarg.h> 

int ltc_init_multi(void **a, ...) 
{ 
... 
...  
if (mp_init(cur) != CRYPT_OK) ---> This line causes segmentation fault 

私が作っていますミスの原因を発見し ?これらのプログラムを正常に実行するためにこの問題を解決するにはどうすればよいですか?

私はlinux、gccを使用しています。どんなヘルプ/リンクも高く評価されます。前もって感謝します。

+0

'-DUSE_TFM'を' gcc'コマンドに追加してみてください。 – LPs

+0

gcc -DUSE_TFM dsa_make_key_example.c -ltomcrypt -ltfm -o dsaを使用すると、コンパイル時にエラーが発生します。 tfm_descは宣言されていません。次に、CFLAGS = " - DTFM_DESC -DUSE_TFM" EXTRALIBS = -ltfm make -f makefile.shared installを使用してlibtomcryptを再構築しますが、gccで-DUSE_TFMオプションと同じコンパイル時エラーが発生します。ただし、-DUSE_TFMを指定しないと、gcc dsa_make_key_example.c -ltomcrypt -o dsaはコンパイル時エラーになりません。 – bholanath

+0

gcc -DLTM_LTM dsa_make_key_example.c -ltomcrypt -ltfm -o dsaではコンパイル時エラーは発生しませんが、ランタイム・セグメンテーション・フォルトが発生します。 – bholanath

答えて

0

これは尋ねられてから1年ほど経ちましたが、回答の構成要素と回避策があります。

mp_initが失敗する理由は、「math_descriptor」が初期化されていないためです。mp_init

ltc_mpが数学ルーチンへのポインタを保持している(タイプ ltc_math_descriptorの)グローバルな構造体である
#define mp_init(a) ltc_mp.init(a) 

として定義されます。

数学ルーチンのいくつかの実装が利用可能であり、ユーザはそれを望むものを選択することができます。どのような理由であれ、libtomcryptの特定のビルドのために選択されたデフォルトの算術実装ではないようです。したがって、のメンバーはltc_mpであり、SIGSEGVを取得します。ここで

は手動の回避策です:

あなたは

  • LTM_DESCの1 INGの#defineしてmain()ルーチンにご希望のltc_math_descriptor構造体を利用できるようにすることができます - 組み込みの数学
  • TFM_DESC libが - - 外部の高速数学パッケージ
  • GMP_DESC - おそらくGNU MultiPrecisionの実装ですか?

#include <tomcrypt.h>より前(またはコマンドラインで-Dを使用)。あなたが選ぶどの は、対応するオブジェクトが宣言されます。

extern const ltc_math_descriptor ltm_desc; 
extern const ltc_math_descriptor tfm_desc; 
extern const ltc_math_descriptor gmp_desc; 

が手動でグローバルな数学の記述にそれをコピーし、それを使用するには:ローカル数学imlpementationため、 例えば、私の場合は、

ltc_mp = ltm_desc; 

今、libtomcryptが動作します。

関連する問題