在PBC库中导入和导出相同的元素

时间:2016-03-27 13:09:57

标签: c encryption cryptography

我是PBC图书馆的新生。现在我一直困扰着一个奇怪的问题,可能在图书馆里面。也就是说,我无法从一个字节缓冲区中获取一个带有element_to_bytes的元素,该缓冲区包含我可以通过#include <pbc/pbc.h> int main(int argc, char * argv[]) { pairing_t pairing; FILE * file_data; unsigned char buffer[1024]; element_t e_G1; element_t e_G2; element_t e_GT; file_data = fopen("a.param", "rb"); fread(buffer, sizeof(char), 1024, file_data); fclose(file_data); pairing_init_set_buf(pairing, buffer, 1024); pbc_random_set_file("/dev/urandom"); element_init_G1(e_G1, pairing); element_init_G1(e_G2, pairing); element_init_GT(e_GT, pairing); element_random(e_G1); element_set(e_G2, e_G1); element_to_bytes(buffer, e_G1); element_from_bytes(e_G1, buffer); element_random(e_GT); element_to_bytes(buffer, e_GT); element_from_bytes(e_G1, buffer); element_printf("%B\n\ -----------------------------------------------\n%B\n\ -----------------------------------------------\n%B\n\ -----------------------------------------------\n%d\n\n", e_G1, e_G2, e_GT, element_is0(e_G1)); return 0; } 从同一元素获得的内容。

这是我的代码:

O
-----------------------------------------------
[8021850106505818502224442208928855004938939439678477694892641266967078361854270086432817366784978788884366884435675935152080578989270423349970705389370184, 2207681943758336273091052288242865038000441662104450034566345617121836958254088636097196267885483421854988093922900438274171762807585817974640138776324140]
-----------------------------------------------
[7792468460669792001225496496730815439034004409253407100165449658873999461802182391001847130721570852427585544191514409272430371044941965363904582878220488, 7159904157534661386227436046498970442391860436703403633250884233122825330691897165426605400567350719613160801169558771636512036955882768503813467951267422]
-----------------------------------------------
1

我得到的是:

{{1}}

顺便说一句,我使用的是ubuntu 14.04 x64,pbc库的版本是0.5.14,文件是&#34; a.param&#34;从未压缩的PBC文件夹中复制

1 个答案:

答案 0 :(得分:0)

e_G1被初始化为组G1的元素,但buffer包含序列化形式的GT元素。这些是不兼容的,因为它们位于不同的组中,具有不同的大小(扩展字段等)。

如果您将e_G1初始化为GT的元素,那么它将起作用:

element_random(e_GT);
element_to_bytes(buffer, e_GT);
element_init_GT(e_G1, pairing);
element_from_bytes(e_G1, buffer);