コード例 #1
0
ファイル: ibe_lib.c プロジェクト: stoneskill/mix-O_AllWin
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);
}
コード例 #2
0
ファイル: ibe_lib.c プロジェクト: stoneskill/mix-O_AllWin
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);
}
コード例 #3
0
ファイル: benchmark.c プロジェクト: Distrotech/opensips
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;
}
コード例 #4
0
ファイル: benchmark.c プロジェクト: Distrotech/opensips
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;
}
コード例 #5
0
ファイル: benchmark.c プロジェクト: billyyh/kamailio
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;
}