问题描述
- 在ubuntu使用gcc编译一个基本签名算法出现 段错误 核心已转储 麻烦给看看程序有什么错误。
-
可能程序存在不止一个错误,如果可以,麻烦一一指出
如果哪位高手能帮忙让程序跑出结果,我把剩下的140C送给他作为感谢!#include "pbc.h"
int main(void)
{
pairing_t pairing;
element_t g, h;
element_t public_key, sig;
element_t secret_key;
element_t temp1, temp2;
char *string1;pairing_init_set_str(pairing, string1); element_init_G2(g, pairing); element_init_G2(public_key, pairing); element_init_G1(h, pairing); element_init_G1(sig, pairing); element_init_GT(temp1, pairing); element_init_GT(temp2, pairing); element_init_Zr(secret_key, pairing); printf("Short signature testn"); //generate system parameters element_random(g); element_printf("system parameter g = %Bn", g); //generate private key element_random(secret_key); element_printf("private key = %Bn", secret_key); //compute corresponding public key element_pow_zn(public_key, g, secret_key); element_printf("public key = %Bn", public_key); //generate element from a hash //for toy pairings, should check that pairing(g, h) != 1 element_from_hash(h, "hashofmessage", 13); element_printf("message hash = %Bn", h); //h^secret_key is the signature //in real life: only output the first coordinate element_pow_zn(sig, h, secret_key); element_printf("signature = %Bn", sig); { int n = pairing_length_in_bytes_compressed_G1(pairing); //int n = element_length_in_bytes_compressed(sig); int i; unsigned char *data = pbc_malloc(n); element_to_bytes_compressed(data, sig); printf("compressed = "); for (i = 0; i < n; i++) { printf("%02X", data[i]); } printf("n"); element_from_bytes_compressed(sig, data); element_printf("decompressed = %Bn", sig); pbc_free(data); } //verification part 1 pairing_apply(temp1, sig, g, pairing); element_printf("f(sig, g) = %Bn", temp1); //verification part 2 //should match above pairing_apply(temp2, h, public_key, pairing); element_printf("f(message hash, public_key) = %Bn", temp2); if (!element_cmp(temp1, temp2)) { printf("signature verifiesn"); } else { printf("*BUG* signature does not verify *BUG*n"); } { int n = pairing_length_in_bytes_x_only_G1(pairing); //int n = element_length_in_bytes_x_only(sig); int i; unsigned char *data = pbc_malloc(n); element_to_bytes_x_only(data, sig); printf("x-coord = "); for (i = 0; i < n; i++) { printf("%02X", data[i]); } printf("n"); element_from_bytes_x_only(sig, data); element_printf("de-x-ed = %Bn", sig); pairing_apply(temp1, sig, g, pairing); if (!element_cmp(temp1, temp2)) { printf("signature verifies on first guessn"); } else { element_invert(temp1, temp1); if (!element_cmp(temp1, temp2)) { printf("signature verifies on second guessn"); } else { printf("*BUG* signature does not verify *BUG*n"); } } pbc_free(data); } //a random signature shouldn't verify element_random(sig); pairing_apply(temp1, sig, g, pairing); if (element_cmp(temp1, temp2)) { printf("random signature doesn't verifyn"); } else { printf("*BUG* random signature verifies *BUG*n"); } element_clear(sig); element_clear(public_key); element_clear(secret_key); element_clear(g); element_clear(h); element_clear(temp1); element_clear(temp2); pairing_clear(pairing); return 0;
}
解决方案
你首先每一个函数调用加一条语句:
printf("%s(%d)n",__FILE__,__LINE__);
然后看看输出的是什么
这句话的含义是打印出当前文件以及当前的行数
行数会随着行所在代码的行数而变化
我怀疑
char *string1;
这句有问题
pairing_init_set_str(pairing, string1);使用了该变量
因为你声明的是字符串指针,后面没有释放动作。
所以可见上面这个函数对这个指针没有分配内存
你可以试着改成
char string1[1024];
试一试
解决方案二:
直接用gdb先看一下core dump在什么位置,多数是指针等操作有问题
时间: 2024-08-07 13:17:46