void bb_gen_sys_param(bb_sys_param_t param, pairing_t pairing) { param->pairing = pairing; //signature is a point (only need one coordinate) and an element of Z_r param->signature_length = pairing_length_in_bytes_x_only_G1(pairing) + pairing_length_in_bytes_Zr(pairing); }
void UEActivity(unsigned char **da, unsigned char **db, unsigned char **dc, unsigned char **dcu) { //printf("Generating keys.....\n"); element_t a, b, c, cu, r, A, B, C; element_t ax, a1cuxy; element_t xy, cuxy; element_init_G1(a, pairing); element_init_G1(b, pairing); element_init_G1(c, pairing); element_init_Zr(r, pairing); element_init_G1(A, pairing); element_init_G1(B, pairing); element_init_G1(C, pairing); element_init_G1(ax, pairing); element_init_G1(a1cuxy, pairing); //temporarily regard p and q are independent //instead of p = 2q + 1 element_init_Zr(xy, pairing2); element_init_Zr(cuxy, pairing2); element_init_Zr(cu, pairing2); //temporarily regard cu as a random number in Zr //instead of Cu = r^k&^ru element_random(cu); element_random(a); if(verbose) element_printf("sig component a = %B\n", a); element_pow_zn(b, a, y); // mpz_t mpz_a, mpz_b, mpz_c; // mpz_inits(mpz_a, mpz_b, mpz_c, NULL); // element_to_mpz(mpz_a, a); // mpz_powm(mpz_b, mpz_a, mpz_y, pairing->r); // element_set_mpz(b, mpz_b); //element_pow_zn(b, a, y); if(verbose) element_printf("sig component b = %B\n", b); element_pow_zn(ax, a, x); // mpz_t mpz_ax, mpz_a1cuxy, mpz_cuxy; // mpz_inits(mpz_ax, mpz_a1cuxy, mpz_cuxy, NULL); // mpz_powm(mpz_ax, mpz_a, mpz_x, pairing->r); // element_set_mpz(ax, mpz_ax); element_mul(xy, x, y); element_mul(cuxy, xy, cu); element_pow_zn(a1cuxy, a, cuxy); // element_to_mpz(mpz_cuxy, cuxy); // mpz_powm(mpz_a1cuxy, mpz_a, mpz_cuxy, pairing->r); // element_set_mpz(a1cuxy, mpz_a1cuxy); element_mul(c, ax, a1cuxy); if(verbose) element_printf("sig component c = %B\n", c); //blind the signature // mpz_t mpz_A, mpz_B, mpz_C, mpz_r; // mpz_inits(mpz_A, mpz_B, mpz_C, mpz_r, NULL); element_random(r); element_pow_zn(A, a, r); element_pow_zn(B, b, r); element_pow_zn(C, c, r); // element_to_mpz(mpz_r, r); // mpz_powm(mpz_A, mpz_a, mpz_r, pairing->r); // mpz_powm(mpz_B, mpz_b, mpz_r, pairing->r); // mpz_powm(mpz_C, mpz_c, mpz_r, pairing->r); // element_set_mpz(A, mpz_A); // element_set_mpz(B, mpz_B); // element_set_mpz(C, mpz_C); //clear meta elements element_clear(ax); element_clear(a1cuxy); element_clear(xy); element_clear(cuxy); element_clear(r); element_clear(a); element_clear(b); element_clear(c); // mpz_clear(mpz_a); // mpz_clear(mpz_b); // mpz_clear(mpz_c); // mpz_clear(mpz_ax); // mpz_clear(mpz_a1cuxy); // mpz_clear(mpz_cuxy); // mpz_clear(mpz_A); // mpz_clear(mpz_B); // mpz_clear(mpz_C); // mpz_clear(mpz_r); //signature compress int n = pairing_length_in_bytes_compressed_G1(pairing); int m = pairing_length_in_bytes_Zr(pairing2); *da = pbc_malloc(n); *db = pbc_malloc(n); *dc = pbc_malloc(n); *dcu = pbc_malloc(m); element_to_bytes_compressed(*da, A); element_to_bytes_compressed(*db, B); element_to_bytes_compressed(*dc, C); element_to_bytes(*dcu, cu); return; }