我想在元素上应用哈希函数,并将哈希结果转换为另一个元素。现在我发现from-hash元素存在问题。也就是说,如果我使用element_to_bytes
导出元素,我有时无法使用element_from_bytes
将其转换回来,结果为零。请注意,每次原始的from-hash元素看起来都没问题。
这是我的代码
#include <pbc/pbc.h>
#include <openssl/ssl.h>
#include <openssl/sha.h>
static unsigned char IB_buffer[] = "type a\nq 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791\nh 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776\nr 730750818665451621361119245571504901405976559617\nexp2 159\nexp1 107\nsign1 1\nsign0 1";
static unsigned char ElGamal_buffer[] = "type a\nq 3482532951481000628301986563829128446394498473733574256155354161179984756582489073071203726645550500511910754640237238097789178205610570264167893261510851\nh 4765691481319237166326209176561481743805302555086541889992911935937234088304840923602596606875066432645316\nr 730750818665451459101842416367364881864821047297\nexp2 159\nexp1 63\nsign1 1\nsign0 1";
void Hash_function_2(element_t IB_e_GT_in,
element_t IB_e_G1_out)
{
unsigned char buffer[130];
unsigned char buffer_sha512[130];
memset(buffer_sha512, '\0', 128);
element_to_bytes(buffer, IB_e_GT_in);
SHA512(buffer,
element_length_in_bytes(IB_e_GT_in),
buffer_sha512);
element_from_bytes_x_only(IB_e_G1_out, buffer_sha512);
}
int main(int argc, char *argv[])
{
unsigned char buffer[128];
pairing_t IB_pairing;
pairing_t ElGamal_pairing;
element_t ElGamal_G1_g_1;
element_t IB_G1_g2s_f_aux;
if(pairing_init_set_str(IB_pairing, IB_buffer) == 1)
{
printf("init IB_pairing failed\n");
return 0;
}
if(pairing_init_set_str(ElGamal_pairing, ElGamal_buffer) == 1)
{
printf("init ElGamal_pairing failed\n");
return 0;
}
OpenSSL_add_all_algorithms();
pbc_random_set_file("/dev/urandom");
element_init_G1(ElGamal_G1_g_1, ElGamal_pairing);
element_init_G1(IB_G1_g2s_f_aux, IB_pairing);
for(int i = 0; i <= 7; i ++)
{
element_random(ElGamal_G1_g_1);
Hash_function_2(ElGamal_G1_g_1, IB_G1_g2s_f_aux);
element_printf("%B\n-------------------------------------\n",
IB_G1_g2s_f_aux);
element_to_bytes(buffer, IB_G1_g2s_f_aux);
element_from_bytes(IB_G1_g2s_f_aux, buffer);
element_printf("%B\n\n", IB_G1_g2s_f_aux);
}
element_clear(ElGamal_G1_g_1);
element_clear(IB_G1_g2s_f_aux);
}
程序IB_pairing
中的是从未压缩的pbc文件夹中复制的a.param初始化的,ElGamal_pairing
是从我在gen中找到的genaparam
生成的内容初始化的文件夹,它是pbc文件夹的子目录。现在,代码输出如:
[5242744931973888357810214698891575268968713403287687987582661419271346701723916645766967288858537828347386228320848038004460401621466729428359602848496423, 118298437701476879252590762137102463858584189697768090565747590297711649473408814747936054487138480275170041397143791824953512356308426007693466456179168]
-------------------------------------
[5242744931973888357810214698891575268968713403287687987582661419271346701723916645766967288858537828347386228320848038004460401621466729428359602848496423, 118298437701476879252590762137102463858584189697768090565747590297711649473408814747936054487138480275170041397143791824953512356308426007693466456179168]
[193714737889486499072115953742998424769489264653955710164208541956541631696577272694010272524888373065658088394836551869833950180668987684845705117682787, 8322151652329772861037196194168895802696002124303037838979551092936828926180405726470751856790581079911562675895636010857792037405706584773714399060440286]
-------------------------------------
[193714737889486499072115953742998424769489264653955710164208541956541631696577272694010272524888373065658088394836551869833950180668987684845705117682787, 8322151652329772861037196194168895802696002124303037838979551092936828926180405726470751856790581079911562675895636010857792037405706584773714399060440286]
[495047649790927154331600875943865603224939234468985749770584820482607323401569786408964940026933317685852491403307110240933283586727130743485260801306123, 627545795052423626580420805178631952553532694027088981206234423727093343832432384258118298986203220359581564990411022919298680177610751000388025394726311]
-------------------------------------
O
[4542621263375384263129179574241340967482607815987619234619001482840218784253522899638100115797770929051314594382110531705620048072005886520744474015548799, 4384016080218277894585596328932412426136126888519161287653688238921459073535259513521348441520090835443816442403976291911942079711511656142926876657574119]
-------------------------------------
O
[934929446085781431564145952513276901891994909515246349081484727464551419226172557408608926404886531004238987014488635110816400458081240110773838222735035, 5961256556272620299959818693083876773102158266860051729037463651374484980756089251260880171468476182599983428188035231226059179410518065718227845688839716]
-------------------------------------
[934929446085781431564145952513276901891994909515246349081484727464551419226172557408608926404886531004238987014488635110816400458081240110773838222735035, 5961256556272620299959818693083876773102158266860051729037463651374484980756089251260880171468476182599983428188035231226059179410518065718227845688839716]
[1224204982207723555590429339348622427566172381990610842080105056584418105637718525873987892092288009728542005861184194378722664576353556137763270960705678, 8697105603647319842683626319102469751603864170995390173683250409145042732890778489498574501879021283552905344140881861126112678686800294724427908393544229]
-------------------------------------
O
[1342315162981173575284474712688478558555924987160295354118525538511370674248831922332142524449197361143668635693752430389149660122747527319388460244716267, 5267811295598008357011271549336672278507286122051296965376347558098881407861455461777989115869240838665983404311822513990301968904409996934757904037469081]
-------------------------------------
O
[4491486047832261748660536800950738994321386405877875101997492071615864965243872556818616142835048233636100898376016387452858412191123428562316075309820872, 2667680711633239882081053356855222638213416843899362660435808202909280287640739981804569477623527608695636418075471578632318931368061236784727949670086843]
-------------------------------------
[4491486047832261748660536800950738994321386405877875101997492071615864965243872556818616142835048233636100898376016387452858412191123428562316075309820872, 2667680711633239882081053356855222638213416843899362660435808202909280287640739981804569477623527608695636418075471578632318931368061236784727949670086843]
顺便说一句,我使用的是Ubuntu 14.04 x64,pbc-0.5.14。
答案 0 :(得分:1)
我想我找到了自己提出的这个问题的关键,但我仍然不知道发生了什么。也许就像Artjom B.所说的那样:
也许你以某种方式设法将这些元素置于曲线之外。
我将Hash_funcrion_2
更改为:
void Hash_function_2(element_t IB_e_GT_in,
element_t IB_e_G1_out)
{
unsigned char buffer[130];
unsigned char buffer_sha512[130];
int x = 0xFF;
memset(buffer_sha512, '\0', 128);
element_to_bytes(buffer, IB_e_GT_in);
SHA512(buffer,
element_length_in_bytes(IB_e_GT_in),
buffer_sha512);
element_from_hash(IB_e_G1_out, buffer_sha512, 64);
}
一切正常。