int cp_psb_gen(bn_t r, bn_t s[], g2_t g, g2_t x, g2_t y[], int l) { bn_t n; int i, result = RLC_OK; bn_null(n); TRY { bn_new(n); g2_get_ord(n); bn_rand_mod(r, n); g2_rand(g); g2_mul(x, g, r); for (i = 0; i < l; i++) { bn_rand_mod(s[i], n); g2_mul(y[i], g, s[i]); } } CATCH_ANY { result = RLC_ERR; } FINALLY { bn_free(n); } return result; }
status_t element_random(element_t e) { if(e->isInitialized == TRUE) { if(e->type == ZR) { bn_t n; bn_inits(n); g1_get_ord(n); bn_t t = e->bn; bn_rand(t, BN_POS, bn_bits(n)); bn_mod(t, t, n); bn_free(n); } else if(e->type == G1) { g1_rand(e->g1); } else if(e->type == G2) { g2_rand(e->g2); } else if(e->type == GT) { gt_rand(e->gt); } return ELEMENT_OK; } return ELEMENT_UNINITIALIZED; }
int cp_pss_gen(bn_t r, bn_t s, g2_t g, g2_t x, g2_t y) { bn_t n; int result = RLC_OK; bn_null(n); TRY { bn_new(n); g2_get_ord(n); bn_rand_mod(r, n); bn_rand_mod(s, n); g2_rand(g); g2_mul(x, g, r); g2_mul(y, g, s); } CATCH_ANY { result = RLC_ERR; } FINALLY { bn_free(n); } return result; }