static void dm_ddh_setup_dec(struct dm_ddh_crs *crs, struct params *p) { mpz_t x, y; int file; unsigned long seed; mpz_inits(x, y, NULL); /* fix seed of random number generator */ gmp_randseed_ui(p->rnd, 0UL); find_generator(crs->g0, p); random_element(y, p); mpz_powm(crs->g1, crs->g0, y, p->p); mpz_powm(crs->h0, crs->g0, x, p->p); mpz_powm(crs->h1, crs->g1, x, p->p); mpz_clears(x, y, NULL); /* re-seed random number generator */ if ((file = open("/dev/urandom", O_RDONLY)) == -1) { (void) fprintf(stderr, "Error opening /dev/urandom\n"); } else { if (read(file, &seed, sizeof seed) == -1) { (void) fprintf(stderr, "Error reading from /dev/urandom\n"); (void) close(file); } } gmp_randseed_ui(p->rnd, seed); (void) close(file); }
static fftw_rader_data *create_rader_aux(int p, int flags) { fftw_complex *omega, *work; int g, ginv, gpower; int i; FFTW_TRIG_REAL twoPiOverN; fftw_real scale = 1.0 / (p - 1); /* for convolution */ fftw_plan plan; fftw_rader_data *d; if (p < 2) fftw_die("non-prime order in Rader\n"); flags &= ~FFTW_IN_PLACE; d = (fftw_rader_data *) fftw_malloc(sizeof(fftw_rader_data)); g = find_generator(p); ginv = power_mod(g, p - 2, p); omega = (fftw_complex *) fftw_malloc((p - 1) * sizeof(fftw_complex)); plan = fftw_create_plan(p - 1, FFTW_FORWARD, flags & ~FFTW_NO_VECTOR_RECURSE); work = (fftw_complex *) fftw_malloc((p - 1) * sizeof(fftw_complex)); twoPiOverN = FFTW_K2PI / (FFTW_TRIG_REAL) p; gpower = 1; for (i = 0; i < p - 1; ++i) { c_re(work[i]) = scale * FFTW_TRIG_COS(twoPiOverN * gpower); c_im(work[i]) = FFTW_FORWARD * scale * FFTW_TRIG_SIN(twoPiOverN * gpower); gpower = MULMOD(gpower, ginv, p); } /* fft permuted roots of unity */ fftw_executor_simple(p - 1, work, omega, plan->root, 1, 1, plan->recurse_kind); fftw_free(work); d->plan = plan; d->omega = omega; d->g = g; d->ginv = ginv; d->p = p; d->flags = flags; d->refcount = 1; d->next = NULL; d->cdesc = (fftw_codelet_desc *) fftw_malloc(sizeof(fftw_codelet_desc)); d->cdesc->name = NULL; d->cdesc->codelet = NULL; d->cdesc->size = p; d->cdesc->dir = FFTW_FORWARD; d->cdesc->type = FFTW_RADER; d->cdesc->signature = g; d->cdesc->ntwiddle = 0; d->cdesc->twiddle_order = NULL; return d; }