Пример #1
0
int main(int argc, char const *argv[])
{
  if (argc > 1){
    if (argc == 3 && !strcmp(argv[1], "setup")){ 
      global_broadcast_params_t gbs;
      //Global Setup
      int n = atoi(argv[2]);      
      setup_global_broadcast_params(&gbs, n);
      
      FILE * file;
      file = fopen("/tmp/gbs2.txt" , "w");
      int i = 0, t;

      //print n
      fprintf(file, "%d\n", n);  
      //print g
      fprintf(file, "%s\n", PUBLIC_G);
      //print gs[i]
      for (i=0; i < 2*n; i++){
        if (i==n)
          continue;
        char* s = (char*) malloc(MAX_ELEMENT_LEN);        
        t = element_snprint(s, MAX_ELEMENT_LEN, gbs->gs[i]);
        fprintf(file, "%s\n", s);
        free(s);
      }
      fclose(file);
      store_gbp_params("/tmp/gbs.txt", gbs);
      FreeGBP(gbs);
      return 0;
    }
    else if (argc == 2 && !strcmp(argv[1], "restore")){ 
      global_broadcast_params_t gbs;
      //Global Setup      
      restore_global_broadcast_params2(&gbs);      
      return 0;
    }
    else if (argc == 3 && !strcmp(argv[1], "revoke")){       
      update_after_revocation(argv[2]);      
      return 0;
    }    
  }
  fprintf(stderr, "Run with ./mainbgw [task] [Other parameter]\n");
  fprintf(stderr, "For example ./mainbgw setup 16\n");

  return 1;
}
Пример #2
0
//Called in file encryption function to generate C0,C1,C0',C1' and EK
//returns CT,EK
void EK_CT_generate(char *gamma, int *shared_users, int num_users, unsigned char *pps, ct CT, element_t EK, char *t_str)
{

  global_broadcast_params_t gbs;
  element_t t;
  int j;

  //Global Setup of gbs params
  setup_global_broadcast_params(&gbs, pps);
  element_set_str(gbs->gamma, gamma, PBC_CONVERT_BASE); //it is important to set user gamma here else a random value will be used

  //pick a random value of t from Zr
  element_init_Zr(t, gbs->pairing);
  element_random(t);
  element_snprint(t_str,MAX_ELEMENT_LEN,t);

  //compute C0=g^t
  element_init(CT->OC0, gbs->pairing->G1);
  element_pow_zn(CT->OC0, gbs->g, t);

  //compute C1=(g^gamma)x(g[num_users+1-j]) for j in all shared users
  element_init(CT->OC1, gbs->pairing->G1);
  element_pow_zn(CT->OC1, gbs->g, gbs->gamma); //at this step C1 = g^gamma = v as given in paper
  for(j=0;j<num_users;j++)
    element_mul(CT->OC1, CT->OC1, gbs->gs[(gbs->num_users)-shared_users[j]]);
  element_pow_zn(CT->OC1, CT->OC1, t);

  //Duplicate C0'=C0
  element_init(CT->C0, gbs->pairing->G1);
  element_set(CT->C0,CT->OC0);

  //Duplicate C1'=C1
  element_init(CT->C1, gbs->pairing->G1);
  element_set(CT->C1,CT->OC1);

  //COMPUTE EK = e(g[n], g[1])^(t)
  element_init(EK, gbs->pairing->GT);
  element_pairing(EK, gbs->gs[0],gbs->gs[gbs->num_users-1]);  //at this step EK = e(g[1],g[n])
  element_pow_zn(EK,EK,t);  //EK = e(g[1],g[n])^t

  //free the memory for global broadcast params
  element_clear(t);
  FreeGBP(gbs);

  return;
}