int polynomial_division(Polynomial *g, Polynomial *h, Polynomial *q, Polynomial *r, int p){
	/*
	 *	

	*/
	int t,k,l;
	k = g->deg + 1;
	l = h->deg + 1;
	t = find_zp_inverse(p,h->cof[l-1]);
	if(t == NOTSUCCESS){
		printf("Not able to find zp inverse of %d\n",h->cof[h->deg]);
		return NOTSUCCESS;
	}
	//printf("inverse is -- %d\n",t);
	init_polynomial(r,l-2);
	for(i=0;i<=k-1;i++){
		r->cof[i] = g->cof[i];
	}
	init_polynomial(q,k-l);
	for(i=k-l;i>=0;i--){
			q->cof[i] = ( t*(r->cof[i+l-1]) )%p;
			for(j=0;j<=l-1;++j){
				r->cof[i+j] = (r->cof[i+j] - ( (q->cof[i]) * (h->cof[j])  )%p ) %p;
			}
	}

	return SUCCESS;

}
Beispiel #2
0
int main(int c, char **a) {
  char * material = 0;
  char * ip = "127.0.0.1";
  uint  i = 0;
  OE oe = OperatingEnvironment_LinuxNew();
  MiniMacs mm = 0;

  init_polynomial();
  if (c < 2 || c > 4) {
    printf("multirun <material> [< server >]\n");
    return -1;
  }

  if ( c >= 2 ) {
    material = a[1];
  }
 
  if (c >= 3) {
    ip =a[3];
  }

  mm =GenericMiniMacs_DefaultLoadNew(oe, material);
  printf("Multirun CAES\n");
  printf("material taken from: %s\n",material);
  printf("ip: %s\n", ip);
  
  return run(material,ip,oe,mm);
}
Beispiel #3
0
int main(int c, char **a) {

  OE oe = OperatingEnvironment_LinuxNew();
  init_polynomial();
  if (oe) {
    MR mr = 0;
    int i = 0;
    MiniMacs mm = setup_generic_minimacs(oe, a[1]);
    if (!mm) return -42;
    mm->get_id();
    mr = mm->connect("127.0.0.1",2020);

    mm->init_heap(6); 

    C(mm->secret_input(0,0,0));
    
    C(mm->open(0));

    C(mm->secret_input(0,1,Data_shallow("\001\001",1)));
    C(mm->secret_input(0,2,Data_shallow("\002\002",1)));
    for(i = 0; i < 256;++i) 
      C(mm->mul(3,2,1));
    C(mm->add(3,3,3));
    C(mm->open(3));
    
    oe->p(mm->heap_get(0)->codeword);
    _p("Mul res", mm->heap_get(3)->codeword,8,8);

  }

 failure:
  return 0;
}
Beispiel #4
0
int main(int c, char **a) {
  OE oe = OperatingEnvironment_New();
  InitStats(oe);
  init_polynomial();
  if (oe) {
    MR mr = 0;
    int i = 0;
    MiniMacs mm = setup_generic_minimacs(oe, a[1]);
    if (mm == 0) {
      printf("Uable to create MiniMacs Instance, leaving\n");
      return 42;
    }
    printf("Inviting 1 party to computate on port 2020\n");
    mm->invite(1,2020);
    mm->init_heap(6);
    

    C(mm->secret_input(0,0,Data_shallow("Rasmus",7)));
    
    C(mm->open(0));

    C(mm->secret_input(0,1,Data_shallow("\001",1)));
    C(mm->secret_input(0,2,Data_shallow("\001",1)));
    C(mm->mul(3,1,2));
    C(mm->open(3));

    SymmetricMiniMacs_destroy( & mm );
  }

  PrintMeasurements(oe);

 failure:
  return 0;
}
Beispiel #5
0
int main(int c, char **a) {
  char * material = 0, * bdt_material=0;
  char * ip = "127.0.0.1";
  uint count = 0, i = 0;
  OE oe = OperatingEnvironment_LinuxNew();
  MiniMacs mm = 0;
  int * pids = 0;

  InitStats(oe);
  init_polynomial();
  if (c < 3 || c > 5) {
    printf("multirun <material> <bdt_material> <count> [< server >]\n");
    return -1;
  }

  if ( c >= 3 ) {
    material = a[1];
    bdt_material = a[2];
  }

  if (c >= 4) {
    count = atoi(a[3]);
  }
  
  if (c >= 5) {
    ip =a[4];
  }

  // No bit encoder
  mm=BitWiseMulPar2MiniMacs_DefaultLoadNew(oe, material, bdt_material, False);
  if (!mm) {
    printf("Unable to create MiniMacs, see errors above.\n");
    return -1;
  }
  
  printf("Multirun CAES\n");
  printf("material taken from: %s\n",material);
  printf("ip: %s\n", ip);
  printf("count: %u\n",count);
  pids = (int*)oe->getmem(sizeof(int)*count);

  for( i = 0; i < count; ++i) {
    pids[i] = fork();
    if (pids[i] == 0) {
      return run(ip,i,count,oe,mm);
    }
  }
  CHECK_POINT_S("TOTAL");
  for(i = 0;i < count;++i) {
    wait(pids[i]);
  }
  CHECK_POINT_E("TOTAL");
  PrintMeasurements(oe);
}
Beispiel #6
0
int main(int c, char **a) {
  char * material = 0, * bdt_material=0;
  char * ip = "127.0.0.1";
  uint count = 0, i = 0;
  OE oe = OperatingEnvironment_LinuxNew();
  MiniMacs mm = 0;
  int * pids = 0;

  InitStats(oe);
  init_polynomial();
  if (c < 3 || c > 5) {
    printf("multirun <material> <bdt_material> <count> [< server >]\n");
    return -1;
  }

  if ( c >= 3 ) {
    material = a[1];
    bdt_material = a[2];
  }

  if (c >= 4) {
    count = atoi(a[3]);
  }
  
  if (c >= 5) {
    ip =a[4];
  }

  // loads the preprocessing material making MiniMac ready 
  mm=BitWiseMulPar2MiniMacs_DefaultLoadFFTNew(oe, material, bdt_material, True);

  printf("Multirun CAES\n");
  printf("material taken from: %s\n",material);
  printf("ip: %s\n", ip);
  printf("count: %u\n",count);
  pids = (int*)oe->getmem(sizeof(int)*count);

  // create processes for parallel execution ({count} of them)
  for( i = 0; i < count; ++i) {
    pids[i] = fork();
    if (pids[i] == 0) {
      return run(ip,i,count,oe,mm);
    }
  }

  // wait for everybody to complete
  CHECK_POINT_S("TOTAL");
  for(i = 0;i < count;++i) {
    wait(pids[i]);
  }
  CHECK_POINT_E("TOTAL");
  PrintMeasurements(oe);
}
main(){
	int degree,i,*ptr,p,t,k,l,j;
	Polynomial *g = malloc(sizeof(Polynomial));
	Polynomial *h = malloc(sizeof(Polynomial));
	Polynomial *r = malloc(sizeof(Polynomial));
	Polynomial *q = malloc(sizeof(Polynomial));
	printf("Polynomial Division\n");
	printf("Enter p of Zp[X] : ");
	scanf("%d",&p);
	printf("Enter polynomial g belonging to Z%d[X] :\n",p);
	printf("Enter k (degree+1): ");
	scanf("%d",&k);
	//k-1 is the degree
	init_polynomial(g,k-1);
	printf("Enter its coffecients\n");
	for(i=0;i<= g->deg;i++){
		scanf("%d",&g->cof[i]);
	}
	printf("Enter polynomial h belonging to Z%d[X] :\n",p);
	printf("Enter l (degree+1): ");
	scanf("%d",&l);
	//l-1 is the degree
	init_polynomial(h,l-1);
	printf("Enter its coffecients\n");
	for(i=0;i<= h->deg;i++){
		scanf("%d",&h->cof[i]);
	}
	//print_polynomial(g);
	//print_polynomial(h);
	if(polynomial_division(g, h, q, r, p) != SUCCESS){
		printf("Not able to do polynomial division\n");
		exit(1);
	}
	printf("q is:\n");
	print_polynomial(q);
	printf("r is:\n");
	print_polynomial(r);

}
Beispiel #8
0
int main(int c, char **a) {
  char * material = 0;
  char * ip = "127.0.0.1";
  uint count = 0, i = 0;
  OE oe = OperatingEnvironment_LinuxNew();
  MiniMacs mm = 0;
  int * pids = 0;

  InitStats(oe);
  init_polynomial();
  if (c < 2 || c > 4) {
    printf("multirun <material> <count> [< server >]\n");
    return -1;
  }

  if ( c >= 2 ) {
    material = a[1];
  }

  if (c >= 3) {
    count = atoi(a[2]);
  }
  
  if (c >= 4) {
    ip =a[3];
  }

  mm=GenericFFTMiniMacs_new(oe,a[1]);

  printf("Multirun CAES\n");
  printf("material taken from: %s\n",material);
  printf("ip: %s\n", ip);
  printf("count: %u\n",count);
  pids = (int*)oe->getmem(sizeof(int)*count);

  for( i = 0; i < count; ++i) {
    pids[i] = fork();
    if (pids[i] == 0) {
      return run(material,ip,i,oe,mm);
    }
  }
  CHECK_POINT_S("TOTAL");
  for(i = 0;i < count;++i) {
    wait(pids[i]);
  }
  CHECK_POINT_E("TOTAL");
  PrintMeasurements(oe);
}
Beispiel #9
0
int main(int argc, char ** args) {
  char s[256] = {0};
  int i = 0;
  uint ls = 0;
  printf("Galois Field 2^8 Polish Notation Calculator.\n");
  init_polynomial();
  while(ls < 4 || memcmp("quit",s,4) != 0) {
    gf8 res = 0;
    int i = 0;
    printf("gf8>");fflush(stdout);
    ls = read_line(s,sizeof(s));
    res = do_read(s,&i);
    printf("%02u\n",res);
  }
    
}
Beispiel #10
0
void main( )
{
    init_polynomial( );
  
    while(1){
    	input_degree( );
    	if(get_degree( ) <= -1)
    		break;
    	input_coef( );
    
    	print_polynomial( ); 
    	print_derivative( );
    	
    	clear_polynomial( );
    }
}
Beispiel #11
0
int main(int c, char **a) {
    OE oe = (OE)OperatingEnvironment_LinuxNew();
    MiniMacs mm = 0;
    Data input = 0;
    uint count=0,i=0;
    init_polynomial();

    mm = GenericMiniMacs_DefaultLoadNew(oe,a[1]);

    InitStats(oe);

    if (!mm) {
        oe->p("Error could not create instance of MiniMacs");
        OperatingEnvironment_LinuxDestroy(&oe);
        return -1;
    }

    {
        CliArg arg = (CliArg)oe->getmem(sizeof(*arg));
        arg->file = a[2];
        arg->oe = oe;
        oe->newthread(client,arg);
    }

    mm->init_heap(2);
    mm->invite(1,8080);
    printf("Got client ... \n");

    input = Data_new(oe, mm->get_ltext());
    for(i = 0; i < mm->get_ltext(); ++i) {
        input->data[i] = 'r';
    }

    mm->secret_input(0,0,input);

    for(count = 0; count < COUNT; ++count) {
        CHECK_POINT_S("Mul server");
        mm->mul(1,0,0);
        CHECK_POINT_E("Mul server");
    }

    usleep(5);
    PrintMeasurements(oe);

    return 0;
}
Beispiel #12
0
int main(int c, char **s) {
  OE oe = OperatingEnvironment_New();
  uint ltext = 120, lcode = 256, nplayers = 2;
  MiniMacsEnc encoder = 0;
  MiniMacsTripleRep ** triples = 0;
  MiniMacsRep ** singles = 0;
  MiniMacsRep *** pairs = 0;
  BitDecomposedTriple ** t = 0;
  MiniMacsRep * compat = 0;
  uint ltriples=1, lsingles=1, lpairs=1, lbtriples=1;
  byte * buf = 0;
  uint lbuf = 0;
  init_polynomial();

  encoder = MiniMacsEnc_MatrixNew(oe,lcode, ltext);
  
  compat = minimacs_fake_setup(oe, encoder, 
                               ltext, nplayers, lcode, 
                               &triples, ltriples, 
                               &singles, lsingles, 
                               &pairs, lpairs,0);
  minimacs_fake_bdt( oe, encoder, compat, &t, lbtriples);
  
  

  printf("Save/Load BitDecomposedTriples\n");

  write_bdt(t[0], lbtriples, &buf, &lbuf);
  {
    BitDecomposedTriple * loaded_bdt = 0;
    uint lloaded_bdt = 0;
    DerRC rc = 0;
    uint i = 0;

    rc = read_bdt(buf, lbuf, &loaded_bdt, &lloaded_bdt);
    if (rc != DER_OK) {
      printf("Oh crap \n");
      exit(-1);
    }

    if (!loaded_bdt) {
      printf("Oh crap nothing there\n");
      return -2;
    }

    if (lloaded_bdt ==1 ){
      printf("Yes we loaded one\n");
    } else {
      printf("Oh, no this failes\n");
    }

    
    for (i = 0;i < lloaded_bdt;++i) {
      int j = 0;
      if (loaded_bdt[i]->a == 0) {
        printf("[%u] has no a\n",i);
      }

      if (loaded_bdt[i]->b == 0) {
        printf("[%u] has no b\n",i);
      }

      if (loaded_bdt[i]->c == 0) {
        printf("[%u] has no c\n",i);
      }

      for(j = 0;j < 8;++j) {
       
        if (loaded_bdt[i]->abits[j] == 0) {
          printf("[%u] has no abits[%u]\n",i,j);
        }

        if (loaded_bdt[i]->bbits[j] == 0) {
          printf("[%u] has no abits[%u]\n",i,j);
        }

      }
    }
  }

  {
    FD fd = 0;
    oe->open("file bdt.fat", &fd);
    oe->write(fd, buf, &lbuf);
    oe->close(fd);

  }
  
  //  minimacs_fake_bdt(oe, encoder, 
  
  return 0;

  
  

}
Beispiel #13
0
int main(int c, char **a) {

  printf("Aarhus University - Multiparty Computation AES\n");
  printf("All rights reserved (C)\n");

  if (c == 2 || c == 3 || c == 4) {
    MiniMacsRep * singles = 0;
    MiniMacsRep ** pairs = 0;
    MiniMacsTripleRep * triples;
    uint lsingles = 0;
    uint lpairs = 0;
    uint ltriples = 0;
    MiniMacs comp = 0;
    CArena arena = 0;
    OE oe = 0;
    uint myid = 0;
    char * ipaddr = "any";
    uint port = 2020;


    if (c == 1) {
      printf("caes <raw_material> [<client>] \n");
      return 0;
    }

    oe = OperatingEnvironment_LinuxNew();
    arena = CArena_new(oe);
    init_polynomial();
    InitStats(oe);
    printf(oe->get_version());printf("\n");
    printf("Loading material from file %s ... \n", a[1]);
    load_shares(a[1],
		&triples, &ltriples,
		&singles, &lsingles,
		&pairs, &lpairs );

    comp = GenericMiniMacs_DefaultNew(oe,arena, 
                               singles, lsingles, 
                               pairs, lpairs, 
                               triples, ltriples );
    
    if (ltriples == 0 && lpairs == 0 && lsingles == 0) {
      printf("Loading %s failed ...\n", a[1]);
      return -1;
    }

    myid = minimacs_rep_whoami(singles[0]);
    if(myid == 0) {
      uint no = minimacs_rep_no_players(singles[0]);

      if (c >= 3) {
        port = atoi(a[2]);
      }

      if (no == 0) return -1;
      no--;
      printf("Waiting for %u players to connect on %s:%u.\n",no,ipaddr,port);
      comp->invite(no,port);
    } else {

    if (c >= 3) {
      ipaddr = a[2];
    } else {
      ipaddr = "127.0.0.1";
    }

    if (c >= 4) {
      port = atoi(a[3]);
    }
      comp->connect(ipaddr,port);
    }
    
    {
      byte key[128] = {0};
      byte pltxt[128] = {0};

      mpc_aes(comp,pltxt,key,0,0,0);
    }
    PrintMeasurements(oe);

  } else {
    printf("Usage %s <preprocessed material>\n",a[0]);
    return 0;
  }
  return 0;
}
Beispiel #14
0
int main(int c, char **a) {
  OE oe = OperatingEnvironment_LinuxNew();
  init_polynomial();
  if (oe) {
    MR mr = 0;
    MiniMacs mm = setup_generic_minimacs(oe, a[1]);
    printf("Inviting 1 party to computate on port 2020\n");
    mm->invite(1,2020);
    mm->init_heap(6);
    

    // test secret input and open
    {
      MiniMacsRep rep = 0;
      byte data[85] = {0};
      uint i = 0;
      for(i = 0;i < 85;++i) {
        data[i] = (byte)((i*101+65537)%255);
      }
      C(mm->secret_input(0,0,Data_shallow(data,85)));
      C(mm->open(0));
      rep = mm->heap_get(0);
      if (!rep) {
        printf("Nothing to open\n");
        return -1;
      }

      for(i = 0;i < 85;++i) {
        if (rep->codeword[i] != data[i]) {
          printf("Failure at possition %u\n",i);
          return -1;
        }
      }
      printf("Secret Input Done\n");
    }

    // test multiply
    {
      byte data1[85] = {0};
      byte data2[85] = {0};
      byte p[85] = {0};
      MiniMacsRep rep = 0;
      uint i = 0;

      for(i = 0; i < 85;++i) {
        data1[i] = (i*101+65537) % 255;
        data2[i] = (i*31+257) % 255;
        p[i] = multiply(multiply(data1[i], data2[i]), 42);
      }

      C(mm->secret_input(0,0,Data_shallow(data1,85)));
      C(mm->secret_input(0,1,Data_shallow(data2,85)));
      memset(data1,42,85);
      C(mm->secret_input(0,2,Data_shallow(data1,85)));
      C(mm->mul(3,0,1));
      C(mm->mul(4,2,3));
      
      C(mm->open(4));
      rep = mm->heap_get(4);
      if (!rep) { 
        printf("Rep is null.\n");
        return -1;
      }
      for(i = 0;i < 85;++i) {
        if (rep->codeword[i] != p[i]) {
          printf("Failed at pos %u expected 0x04 got %u\n",i,rep->codeword[i]);
          return -1;
        }
      }
    }
    

    GenericMiniMacs_destroy( & mm );
  }

 failure:
  return 0;
}