PBC库很好用,声明变量的时候一定要清楚它应该属于哪个群。
#define PBC_DEBUG #include<pbc.h> #include<pbc_test.h> int main(int argc ,char **argv){
pairing_t pairing; element_t Qta,P,P1,Sid,Hid,u; element_t t,k,v,m,r; element_t temp1,temp2,temp3,temp4,temp5; double time1,time2; pbc_demo_pairing_init(pairing,argc,argv); if(!pairing_is_symmetric(pairing)) pbc_die("pairing must be symmetric"); element_init_G1(P,pairing); element_init_Zr(t,pairing); element_init_G1(Qta,pairing); element_init_G1(Hid,pairing); element_init_G1(Sid,pairing); element_init_G1(P1,pairing); element_init_GT(r,pairing); element_init_Zr(m,pairing); element_init_Zr(k,pairing); //v是一个数字,由于v是明文传输,所以略去v=h(m,r)的运算过程 element_init_Zr(v,pairing); element_init_G1(u,pairing); element_init_G1(temp1,pairing); element_init_G1(temp2,pairing); element_init_GT(temp3,pairing); element_init_GT(temp4,pairing); element_init_GT(temp5,pairing); //element_init_G1(f,pairing); time1=pbc_get_time(); //TA进行的操作 element_random(P); element_printf("system parameter P=%B\n",P); element_random(t); element_printf("t=%B\n",t); element_mul_zn(Qta,P,t); element_printf("Qta=%B\n",Qta); element_random(Hid); element_mul_zn(Sid,Hid,t); //要加密的消息 element_from_hash(m,"hesstest",8); element_printf("our messege = %B\n",m); //签名操作 element_random(P1); element_random(k); element_printf("signer's parameter P1=%B\n",P1); //r=r^k=e(P1,P)^k element_pairing(r,P1,P); element_pow_zn(r,r,k); element_printf("r =%B\n",r); //suppose that v=h(m,r) element_random(v); element_printf("v=%B\n",v); //u=vSid+kP1 element_mul_zn(temp1,Sid,v); element_printf("temp1\n"); element_mul_zn(temp2,P1,k); element_printf("temp2\n"); element_add(u,temp1,temp2); element_printf("u=%B\n",u); //验证签名 //on receiving m and (u,v) element_pairing(temp3,u,P); element_printf("temp3\n"); //printf("flag=%B\n",flag); element_neg(Qta,Qta); element_printf("-Qta\n"); element_pairing(temp4,Hid,Qta); element_printf("temp4\n"); element_pow_zn(temp4,temp4,v); element_printf("temp5\n"); element_mul(temp5,temp3,temp4); element_printf("the verifier gets :%B\n",temp5); if(!element_cmp(temp5,r)) printf("succeeded ~\n"); else printf("failed\n"); time2=pbc_get_time(); printf("all time = %fs\n",time2-time1); element_clear(temp1); element_clear(temp2); element_clear(temp3); element_clear(temp4); element_clear(temp5); element_clear(Qta); element_clear(P); element_clear(P1); element_clear(Sid); element_clear(Hid); element_clear(u); element_clear(m); element_clear(t); element_clear(v); element_clear(k); element_clear(r); //element_clear(f); pairing_clear(pairing); return 0; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63974.html