void IBE_KEM_encrypt_array(byte_string_t *s, byte_string_t U, char **idarray, int count, params_t params) { int i; mpz_t r; fp2_t gidr; point_t Qid; point_t rP; if (count <= 0) return; //r is random in F_q mpz_init(r); mympz_randomm(r, params->q); bm_put(bm_get_time(), "rP0"); //U = rP point_init(rP); //point_mul(rP, r, params->P); point_mul_postprocess(rP, r, params->curve); bm_put(bm_get_time(), "rP1"); fp2_init(gidr); byte_string_set_point(U, rP); point_clear(rP); point_init(Qid); for (i=0; i<count; i++) { const char *id = idarray[i]; //XXX:set up a cache to avoid these expensive ops map_to_point(Qid, id, params); point_Phi(Qid, Qid, params); //calculate gidr = e(Q_id, Phi(P_pub))^r //tate_pairing(gidr, Qid, PhiPpub); tate_postprocess(gidr, params->Ppub_mc, Qid, params->curve); bm_put(bm_get_time(), "gidr0"); fp2_pow(gidr, gidr, r, params->p); bm_put(bm_get_time(), "gidr1"); hash_H(s[i], gidr, params); } point_clear(Qid); mpz_clear(r); fp2_clear(gidr); }
static void map_byte_string_to_point(point_t d, byte_string_t bs, params_t params) //converts byte_string into a point of order q on E/F_p { int i; fp2_t x, y; bm_put(bm_get_time(), "mtp0"); fp2_init(x); fp2_init(y); //first use G function to choose x coordinate hash_G(y->a, bs, params); mpz_set_ui(x->b, 0); mpz_set_ui(y->b, 0); bm_put(bm_get_time(), "mtp1"); for (i=1;;i++) { x_from_y(x->a, y->a, params->curve); //we now have a point d fp2_set(d->x, x); fp2_set(d->y, y); //make it order q point_make_order_q(d, params); if (!d->infinity) break; //unlikely case: pick first available point mpz_set_ui(y->a, i); } bm_put(bm_get_time(), "mtp2"); /* printf("mapped to "); point_out_str(NULL, 0, d); printf("\n"); */ fp2_clear(x); fp2_clear(y); }
static int _bm_start_timer(unsigned int id) { if (timer_active(id)) { if(bm_get_time(bm_mycfg->tindex[id]->start)!=0) { LM_ERR("error getting current time\n"); return -1; } } return 1; }
static int _bm_log_timer(unsigned int id) { /* BM_CLOCK_REALTIME */ bm_timeval_t now; unsigned long long tdiff; benchmark_timer_t *timer; if (!timer_active(id)) return 1; if(bm_get_time(&now)<0) { LM_ERR("error getting current time\n"); return -1; } timer = bm_mycfg->tindex[id]; tdiff = bm_diff_time(timer->start, &now); _bm_last_time_diff = (int)tdiff; /* What to do * - update min, max, sum * - if granularity hit: Log, reset min/max */ lock_get(timer->lock); timer->sum += tdiff; timer->last_sum += tdiff; timer->calls++; timer->global_calls++; if (tdiff < timer->last_min) timer->last_min = tdiff; if (tdiff > timer->last_max) timer->last_max = tdiff; if (tdiff < timer->global_min) timer->global_min = tdiff; if (tdiff > timer->global_max) timer->global_max = tdiff; if (bm_mycfg->granularity > 0 && timer->calls >= bm_mycfg->granularity) { LM_GEN1(bm_mycfg->loglevel, "benchmark (timer %s [%d]): %llu [" " msgs/total/min/max/avg - LR:" " %i/%lld/%lld/%lld/%f | GB: %lld/%lld/%lld/%lld/%f]\n", timer->name, id, tdiff, timer->calls, timer->last_sum, timer->last_min, timer->last_max, ((double)timer->last_sum)/bm_mycfg->granularity, timer->global_calls, timer->sum, timer->global_min, timer->global_max, ((double)timer->sum)/timer->global_calls); soft_reset_timer(timer); } lock_release(timer->lock); return 1; }
int _bm_log_timer(unsigned int id) { /* BM_CLOCK_REALTIME */ bm_timeval_t now; unsigned long long tdiff; if (!timer_active(id)) return 1; if(bm_get_time(&now)<0) { LM_ERR("error getting current time\n"); return -1; } tdiff = bm_diff_time(bm_mycfg->tindex[id]->start, &now); _bm_last_time_diff = (int)tdiff; /* What to do * - update min, max, sum * - if granularity hit: Log, reset min/max */ bm_mycfg->tindex[id]->sum += tdiff; bm_mycfg->tindex[id]->last_sum += tdiff; bm_mycfg->tindex[id]->calls++; if (tdiff < bm_mycfg->tindex[id]->last_min) bm_mycfg->tindex[id]->last_min = tdiff; if (tdiff > bm_mycfg->tindex[id]->last_max) bm_mycfg->tindex[id]->last_max = tdiff; if (tdiff < bm_mycfg->tindex[id]->global_min) bm_mycfg->tindex[id]->global_min = tdiff; if (tdiff > bm_mycfg->tindex[id]->global_max) bm_mycfg->tindex[id]->global_max = tdiff; if ((bm_mycfg->tindex[id]->calls % bm_mycfg->granularity) == 0) { LM_GEN1(bm_mycfg->loglevel, "benchmark (timer %s [%d]): %llu [" " msgs/total/min/max/avg - LR:" " %i/%llu/%llu/%llu/%f | GB: %llu/%llu/%llu/%llu/%f]\n", bm_mycfg->tindex[id]->name, id, tdiff, bm_mycfg->granularity, bm_mycfg->tindex[id]->last_sum, bm_mycfg->tindex[id]->last_min, bm_mycfg->tindex[id]->last_max, ((double)bm_mycfg->tindex[id]->last_sum)/bm_mycfg->granularity, bm_mycfg->tindex[id]->calls, bm_mycfg->tindex[id]->sum, bm_mycfg->tindex[id]->global_min, bm_mycfg->tindex[id]->global_max, ((double)bm_mycfg->tindex[id]->sum)/bm_mycfg->tindex[id]->calls); bm_mycfg->tindex[id]->last_sum = 0; bm_mycfg->tindex[id]->last_max = 0; bm_mycfg->tindex[id]->last_min = 0xffffffff; } return 1; }