我想使用libtomcrypt運行示例rsa/dsa代碼。運行時錯誤:使用libtommath和libtomcrypt的分段錯誤
我已經安裝了LibTomMath首先作爲使安裝,作爲一個結果下面的文件被創建。
/usr/lib/libtommath.a /usr/include/tommath.h
之後,我安裝libtomcrypt與LibTomMath作爲外部庫
CFLAGS="-DLTM_DESC -DUSE_LTM -I/usr/include" EXTRALIBS="/usr/lib/libtommath.a " make install
正如下面是創建
/usr/lib/libtomcrypt.a
運行下面的命令,而我沒有得到任何錯誤文件的結果
CFLAGS="-DLTM_DESC -DUSE_LTM -I/usr/include" EXTRALIBS="/usr/lib/libtommath.a " make test
我已經通過這個文件libtomcrypt_installation和libtomcrypt_resolved去使用
gcc -DLTM_DESC rsa_make_key_example.c -o rsa -ltomcrypt
or
gcc rsa_make_key_example.c -o rsa -ltomcrypt
沒有編譯錯誤編譯成功。 但是,當我嘗試運行時,出現以下錯誤。
./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
編輯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。任何幫助/鏈接將不勝感激。提前致謝。
嘗試在您的'gcc'命令中添加'-DUSE_TFM'。 – LPs
當我使用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安裝重新編譯libtomcrypt,但仍然得到與gcc的-DUSE_TFM選項相同的編譯時錯誤。但是,如果沒有-DUSE_TFM,gcc dsa_make_key_example.c -ltomcrypt -o dsa,則沒有編譯時錯誤。 – bholanath
gcc -DLTM_LTM沒有編譯時錯誤dsa_make_key_example.c -ltomcrypt -ltfm -o dsa,但運行時分段錯誤。 – bholanath