예제 #1
0
파일: d_param.c 프로젝트: blynn/pbc
int pbc_param_init_d(pbc_param_ptr par, struct symtab_s *tab) {
  d_param_init(par);
  d_param_ptr p = par->data;
  char s[80];
  int i, d;

  int err = 0;
  err += lookup_mpz(p->q, tab, "q");
  err += lookup_mpz(p->n, tab, "n");
  err += lookup_mpz(p->h, tab, "h");
  err += lookup_mpz(p->r, tab, "r");
  err += lookup_mpz(p->a, tab, "a");
  err += lookup_mpz(p->b, tab, "b");
  err += lookup_int(&p->k, tab, "k");
  err += lookup_mpz(p->nk, tab, "nk");
  err += lookup_mpz(p->hk, tab, "hk");
  err += lookup_mpz(p->nqr, tab, "nqr");

  d = p->k / 2;
  p->coeff = pbc_realloc(p->coeff, sizeof(mpz_t) * d);
  for (i=0; i<d; i++) {
    sprintf(s, "coeff%d", i);
    mpz_init(p->coeff[i]);
    err += lookup_mpz(p->coeff[i], tab, s);
  }
  return err;
}
예제 #2
0
파일: darray.c 프로젝트: Jason0218/JustPaly
void darray_append(darray_ptr a, void *p)
{
    if (a->count == a->max) {
        if (!a->max) a->max = max_init;
        else a->max *= 2;
        a->item = pbc_realloc(a->item, sizeof(void *) * a->max);
    }
    a->item[a->count] = p;
    a->count++;
}
예제 #3
0
파일: param.cpp 프로젝트: mahdiz/mpclib
// Reads next token from `input`.
// Returns 1 on reaching `end` (if not NULL) or '\0' is read, 0 otherwise.
static const char *token_get(token_t tok, const char *input, const char *end) {
  char *buf;
  int n = 32;
  int i;
  char c;
  #define get() (((!end || input < end) && *input) ? (c = *input++, 0) : 1)
  // Skip whitespace and comments.
  for(;;) {
    do {
      if (get()) {
        tok->type = token_eof;
        return input;
      }
    } while (strchr(" \t\r\n", c));
    if (c == '#') {
      do {
        if (get()) {
          tok->type = token_eof;
          return input;
        }
      } while (c != '\n');
    } else break;
  }

  tok->type = token_word;
  pbc_free(tok->s);
  buf = (char *) pbc_malloc(n);
  i = 0;
  for (;;) {
    buf[i] = c;
    i++;
    if (i == n) {
      n += 32;
      buf = (char *) pbc_realloc(buf, n);
    }
    if (get() || strchr(" \t\r\n</>", c)) break;
  }
  buf[i] = 0;
  tok->s = buf;
  return input;
  #undef get
}
예제 #4
0
파일: d_param.c 프로젝트: blynn/pbc
void pbc_param_init_d_gen(pbc_param_ptr p, pbc_cm_ptr cm) {
  d_param_init(p);
  d_param_ptr param = p->data;
  field_t Fq, Fqx, Fqd;
  element_t irred, nqr;
  int d = cm->k / 2;
  int i;

  compute_cm_curve(param, cm);

  field_init_fp(Fq, param->q);
  field_init_poly(Fqx, Fq);
  element_init(irred, Fqx);
  do {
    poly_random_monic(irred, d);
  } while (!poly_is_irred(irred));
  field_init_polymod(Fqd, irred);

  // Find a quadratic nonresidue of Fqd lying in Fq.
  element_init(nqr, Fqd);
  do {
    element_random(((element_t *) nqr->data)[0]);
  } while (element_is_sqr(nqr));

  param->coeff = pbc_realloc(param->coeff, sizeof(mpz_t) * d);

  for (i=0; i<d; i++) {
    mpz_init(param->coeff[i]);
    element_to_mpz(param->coeff[i], element_item(irred, i));
  }
  element_to_mpz(param->nqr, ((element_t *) nqr->data)[0]);

  element_clear(nqr);
  element_clear(irred);

  field_clear(Fqx);
  field_clear(Fqd);
  field_clear(Fq);
}
예제 #5
0
파일: darray.c 프로젝트: Jason0218/JustPaly
static void darray_realloc(darray_ptr a, int size)
{
    a->max = size;
    a->item = pbc_realloc(a->item, sizeof(void *) * a->max);
}