pbc中的element_to_bytes()函数在使用类型i配对时给出分段错误

时间:2017-03-05 08:18:23

标签: c ubuntu cryptography gdb

所以我使用 PBC 0.5.14 为我的研究工作开发软件。我需要使用类型i 配对。但是,当我尝试使用element_to_byte()函数导出元素时,它会引发分段错误。后来,我继续检查我在组G1中定义的元素的大小(使用element_length_in_bytes())。它被证明是零。如果我将类型i 配对替换为键入配对(这也是PBC中的对称配对),则代码可以正常工作。以下是显示故障的代码段。

#include <stdio.h>
#include <stdlib.h>
#include "pbc-0.5.14/include/pbc.h"

pairing_t pairing;
char param[MAX_BUF];
unsigned char buffer[MAX_BUF];

element_t P;

void InitializePairing(){
    FILE* stream = fopen("pbc-0.5.14/param/i.param", "r");
    size_t count = fread(param, 1, MAX_BUF, stream);
    if(!count){
        printf("Input Error!!\n");
    }
    pairing_init_set_buf(pairing, param, count);
}

int main(int argc, char const *argv[])
{
    InitializePairing();
    element_init_G1(P, pairing);
    element_random(P);
    printf("%d\n", element_length_in_bytes(P));
    element_to_bytes(buffer,P);
    return 0;
}

这是gdb backtrace的输出。

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x000000000040087e in element_to_bytes (data=0x6014a0 <buffer>    "", e=0x601080 <P>) at pbc-0.5.14/include/pbc_field.h:476
#2  0x000000000040096d in main (argc=1, argv=0x7fffffffdbe8) at    pbc_test_i.c:31
(gdb) 

1 个答案:

答案 0 :(得分:0)

代码为:

static inline int element_to_bytes(unsigned char *data, element_t e) {
  return e->field->to_bytes(data, e);  // line 476
}

从此代码和崩溃堆栈中,可以安全地得出结论e->field == NULLe->field分配了element_init

static inline void element_init(element_t e, field_ptr f) {
  e->field = f;
  f->init(e);
}

element_init_G1调用。然后必须得出结论,您初始化pairing的方式是错误的。

请注意pairing_init_set_buf可能会返回错误,您忽略了该错误(但不应该)。