Exemplo n.º 1
1
void generateSupersingular(pairing_t *pairing,int rbits,int qbits){
	pbc_param_t param;
	pbc_param_init_a_gen(param,rbits,qbits);//using type a curve
	pairing_init_pbc_param(*pairing,param);
	pbc_param_clear(param);
	return;
}
Exemplo n.º 2
0
int main(int argc, char **argv) {
  int rbits = argc > 1 ? atoi(argv[1]) : 160;
  int qbits = argc > 2 ? atoi(argv[2]) : 512;

  pbc_param_t par;
  pbc_param_init_a_gen(par, rbits, qbits);
  pbc_param_out_str(stdout, par);
  pbc_param_clear(par);
  return 0;
}
Exemplo n.º 3
0
int main(int argc, char ** argv) {
  pbc_param_t ec_params;
  pairing_t pairing;
  unsigned int rbits = 40, qbits = 128;
  element_t *g1, *g2, *gt;
  
  for (int s = 10; s <= 1000; s += 10) {
  while (qbits <= 4096) {
    fprintf(stderr, "%d", qbits);
    pbc_param_init_a_gen(ec_params, rbits, qbits);

    pairing_init_pbc_param(pairing, ec_params);


    element_init_G1(g1, pairing);
    element_init_G2(g2, pairing);
    element_init_GT(gt, pairing);

    struct timeval tv1, tv2;
    int bc = element_length_in_bytes(g1);

    for (int i = 0; i < 100; i++) {
      if (0 == i % 10)
	fprintf(stderr, ".");

      element_random(g1);
      element_random(g2);

      gettimeofday(&tv1, NULL);
      pairing_apply(gt, g1, g2, pairing);
      gettimeofday(&tv2, NULL);

      double time = tv2.tv_sec - tv1.tv_sec;
      time *= (1000 * 1000);
      time += tv2.tv_usec - tv1.tv_usec;

      fprintf(stdout, "%d %d %d %d %d\n", bc, rbits, qbits, i, ((int) time));
    }

    for (int j = 0; j < s; j++) {
      element_clear(g1[j]);
      element_clear(g2[j]);
      element_clear(gt[j]);
    }

    rbits *= 2;
    qbits *= 2;

    fprintf(stderr, "\n");
  }
  free(g1);
  free(g2);
  free(g3);
  }
}
Exemplo n.º 4
0
void setupSingularPairing(pairing_t *pairing){
	mpz_t p;
	//generatePrime(&p,512);//generate 512-bit prime
	int rbits = 224;
	int qbits = 1024;
	pbc_param_t param;
	pbc_param_init_a_gen(param,rbits,qbits);//using type a curve
	pairing_init_pbc_param(*pairing,param);
//	FILE *fPrime = fopen("prime.data","w");//the group order of prime p
//	gmp_fprintf(fPrime,"%Zd",p);
//	fclose(fPrime);
//	pbc_param_out_str(stdout, param);
	return;
}
Exemplo n.º 5
0
int main(int argc, char **argv) {
  verbose = 0;
  ifsize = 0;
  int canrun =0;
  clock_t start_t, end_t;
  float total_t;
  int user_num = 100;
  int k;
  int choose;
  char *para1, *para2;
  while ((choose = getopt (argc, argv, "vfn:hgs")) != -1) {
    switch (choose) {
      case 's':
        ifsize = 1;
        break;
      case 'h':
        usage();
        exit(0);
        break;
      case 'v':
        verbose = 1;
        break;
      case 'n':
        user_num = atoi(optarg);
        break;
      case 'g':
        //printf("Initializing pairing parameters...\n");
        if(canrun) {
          fprintf(stderr, "Pairing parameters have been set, \'-g\' should not set paring parameters again.\n");
          break;
        }
        canrun = 1;
        k=0;
        for( ; optind<argc && !(*argv[optind] == '-'); optind++) k++;
        if(k==2) {
          int rbits = atoi(argv[optind-k]);
          int qbits = atoi(argv[optind-k+1]);
          pbc_param_t param;

          // printf("rbits=%d qbits=%d\n",rbits,qbits);

          pbc_param_init_a_gen(param, rbits, qbits);
          pairing_init_pbc_param(pairing, param);

          pairing_init_pbc_param(pairing2, param);

          pbc_param_clear(param);
        } else {
          fprintf(stderr, "Input invalid!\n");
          usage();
          exit(-1);
        }
        break;
      case 'f':
        //printf("Initializing pairing parameters...\n");
        if(canrun) {
          fprintf(stderr, "Pairing parameters have been set, \'-f\' should not set paring parameters again.\n");
          break;
        }
        canrun = 1;
        k=0;
        for( ; optind<argc && !(*argv[optind] == '-'); optind++) k++;
        if(k==2) {
          pbc_single_pairing_init(pairing, argc, argv[optind-k]);
          pbc_single_pairing_init(pairing2, argc, argv[optind-k+1]);
        }  
        else {
          fprintf(stderr, "Input invalid!\n");
          usage();
          exit(-1);
        }
        break;
        case '?':
          fprintf(stderr, "Invalid parameters!\n");
          usage();
          exit(-1);
          break;
        default:
          abort();
    }
  }
  if(!canrun) {
    printf("Please at least set \'-f\' or \'-g\'\n");
    usage();
    exit(-1);
  }

  //printf("Initializing system variable and public key....\n");
  element_init_G2(g, pairing);
  element_init_G2(X, pairing);
  element_init_G2(Y, pairing);
  element_init_Zr(x, pairing2);
  element_init_Zr(y, pairing2);

  element_random(x);
  element_random(y);

  printf("g=%lu X=%lu Y=%lu x=%lu y=%lu\n",sizeof(g),sizeof(X),sizeof(Y),sizeof(x),sizeof(y));

  //system variable & public key generation
  element_random(g);
  if(verbose) element_printf("system parameter g = %B\n", g);
  element_pow_zn(X, g, x);
  element_pow_zn(Y, g, y);
//   mpz_t mpz_g, mpz_X, mpz_Y;
//   mpz_inits(mpz_g, mpz_X, mpz_Y, mpz_x, mpz_y, NULL);
//   element_to_mpz(mpz_g, g);
//   element_to_mpz(mpz_x, x);
//   element_to_mpz(mpz_y, y); 
//   mpz_powm(mpz_X, mpz_g, mpz_x, pairing->r);
//   element_set_mpz(X, mpz_X);
//   //element_pow_zn(X, g, x);
//   mpz_powm(mpz_Y, mpz_g, mpz_y, pairing->r);
//   element_set_mpz(Y, mpz_Y);
//   if(verbose) {
//         gmp_printf("pair order %zd\n", pairing->r);
// 	gmp_printf("mpz g %zd\n", mpz_g);
//         element_printf("x = %B\n", x);
// 	gmp_printf("mpz x %zd\n", mpz_x);
//         gmp_printf("mpz y %zd\n", mpz_y);
//         gmp_printf("mpz X %zd\n", mpz_X);
// 	element_printf("public key X = %B\n", X);
//         element_printf("public key Y = %B\n", Y);
//   }
// //element_pow_zn(Y, g, y);
//   mpz_clear(mpz_g);mpz_clear(mpz_X);mpz_clear(mpz_Y);
  unsigned char *a, *b, *c, *cu;

  /*******Working********/
  start_t = clock();
  clock_t tmp_start;
  clock_t bscurtotal = 0;
  float bstotal;
  clock_t tmp=0;
  clock_t max;
  clock_t min;
  for(int i=0; i<user_num; i++) {
    //printf("New user comes...\n");
    UEActivity(&a, &b, &c, &cu);
    tmp_start = clock();
    BSActivity(a, b, c, cu);
    tmp = clock() - tmp_start;
    if(i==0) {min = tmp; max = tmp;}
    else {
    	if(tmp > max) max = tmp;
    	if(tmp < min) min = tmp;
    }
    printf("Processing time for this user is %f ms \n",(float)tmp*1000 / CLOCKS_PER_SEC);
    bscurtotal += tmp;
  }
    clock_t avg = bscurtotal / user_num;
    printf("max single user time is %f ms \n",(float)max*1000 / CLOCKS_PER_SEC); 
    printf("min single user time is %f ms \n",(float)min*1000 / CLOCKS_PER_SEC);
    printf("average single user time is %f ms \n",(float)avg*1000 / CLOCKS_PER_SEC);
  //printf("************************\n");


  end_t = clock();

  total_t = (float)(end_t - start_t) / CLOCKS_PER_SEC;
  bstotal = (float)bscurtotal / CLOCKS_PER_SEC;
  //printf("User number: %d. \nTotal Generation & verification time taken by CPU: %f seconds.\n", user_num, total_t);
  //printf("Total verification time at base station taken by CPU: %f seconds.\n", bstotal);
  //printf("Exiting of the program...\n");

  element_clear(g);
  element_clear(X);
  element_clear(Y);
  element_clear(x);
  element_clear(y);

  return 0;
}
Exemplo n.º 6
0
int main(int argc, char* argv[]) {
  QTextStream err(stderr, QIODevice::WriteOnly);
  if(argc != 2) {
    err << "Usage: " << argv[0] << " qbits\n";
    return 1;
  }

  int qbits;
  QTextStream in(argv[1], QIODevice::ReadOnly);
  in >> qbits;

  if(qbits < 10) {
    err << "qbits must be greater than 10\n";
    return 1;
  }

  QTextStream out(stdout, QIODevice::WriteOnly);
  out << "--- PBC Parameter Utility ---\n";
  out << "r < q (for prime r and q)\n";
  out << "Bits: " << qbits << "\n";
  out << "\n\n";
  out.flush();

  pbc_param_t params;
  pairing_t pairing;
  const int rbits = qbits-8;
  pbc_param_init_a_gen(params, rbits, qbits);
  pbc_param_out_str(stdout, params);

  pairing_init_pbc_param(pairing, params);

  element_t gen1;
  element_t neg1;
  element_t gent;

  element_t tmp, tmp2;
  element_init_G1(tmp, pairing);
  element_init_G1(tmp2, pairing);
  element_init_Zr(neg1, pairing);

  element_init_G1(gen1, pairing);
  element_init_G1(gent, pairing);

  // neg1 = 1
  element_set1(neg1);
  // neg1 = -1 mod r
  element_neg(neg1, neg1);

  do {
    element_random(gen1);

    // tmp = gen1^-1
    element_pow_zn(tmp, gen1, neg1);
    // tmp = (gen1^-1)*gen1 == gen1^r
    element_mul(tmp2, tmp, gen1);

  } while (!element_is1(tmp2)); 

  element_fprintf(stdout, "g1 = %B\n", gen1);

  do {
    element_random(gent);

    // tmp = gen1^-1
    element_pow_zn(tmp, gent, neg1);
    // tmp = (gen1^-1)*gen1 == gen1^r
    element_mul(tmp2, tmp, gent);

  } while (!element_is1(tmp2));

  element_fprintf(stdout, "gT = %B\n", gent);

  element_clear(gen1);
  element_clear(gent);

  element_clear(tmp);
  element_clear(tmp2);
  element_clear(neg1);

  pbc_param_clear(params);
  pairing_clear(pairing);

  return 0;
}