void pp_map_tatep_k2(fp2_t r, ep_t p, ep_t q) { ep_t _p[1], _q[1], t[1]; bn_t n; ep_null(_p[0]); ep_null(_q[0]); ep_null(t[0]); bn_null(n); TRY { ep_new(t[0]); bn_new(n); ep_norm(_p[0], p); ep_norm(_q[0], q); ep_curve_get_ord(n); /* Since p has order n, we do not have to perform last iteration. */ bn_sub_dig(n, n, 1); fp2_set_dig(r, 1); if (!ep_is_infty(p) && !ep_is_infty(q)) { pp_mil_k2(r, t, _p, _q, 1, n); pp_exp_k2(r, r); } } CATCH_ANY { THROW(ERR_CAUGHT); } FINALLY { ep_free(_p[0]); ep_free(_q[0]); ep_free(t[0]); bn_free(n); } }
void gt_rand(gt_t a) { gt_rand_imp(a); #if FP_PRIME < 1536 pp_exp_k12(a, a); #else pp_exp_k2(a, a); #endif }
void gt_rand(gt_t a) { gt_rand_imp(a); #if PC_CUR == PRIME #if FP_PRIME < 1536 pp_exp_k12(a, a); #else pp_exp_k2(a, a); #endif #else /* Missing pb implementation; but it will be deprecated anyway. */ #endif }
void pp_map_sim_tatep_k2(fp2_t r, ep_t *p, ep_t *q, int m) { ep_t _p[m], _q[m], t[m]; bn_t n; int i, j; bn_null(n); TRY { bn_new(n); for (i = 0; i < m; i++) { ep_null(_p[i]); ep_null(_q[i]); ep_null(t[i]); ep_new(_p[i]); ep_new(_q[i]); ep_new(t[i]); } j = 0; for (i = 0; i < m; i++) { if (!ep_is_infty(p[i]) && !ep_is_infty(q[i])) { ep_norm(_p[j], p[i]); ep_norm(_q[j++], q[i]); } } ep_curve_get_ord(n); fp2_set_dig(r, 1); if (j > 0) { pp_mil_k2(r, t, _p, _q, j, n); pp_exp_k2(r, r); } } CATCH_ANY { THROW(ERR_CAUGHT); } FINALLY { bn_free(n); for (i = 0; i < m; i++) { ep_free(_p[i]); ep_free(_q[i]); ep_free(t[i]); } } }