int modular_exponentiation(int base,int exp,int mod)
{
    if (exp == 0)
        return 1;
	else if (exp%2 == 0) {
        int mysqrt = modular_exponentiation(base, exp/2, mod);
        return (mysqrt*mysqrt)%mod;
    }
    else
        return (base * modular_exponentiation(base, exp-1, mod))%mod;
}
예제 #2
0
파일: pthread_6.c 프로젝트: dtbinh/cs450
void
modexp (modexp_t *args)
{
  modular_exponentiation (args->base, args->power, args->modulus);

  /* Later:
  return modular_exponentiation (args->base, args->power, args->modulus);
   */
}
예제 #3
0
파일: crypt.c 프로젝트: steeb/studium-ppr
extern void decrypt (int code[],
                     unsigned char msg[])
{
    int i = 0;                      /* Laufvariable */
    int n = get_rsa_module ();      /* Gemeinsames Modul */
    int d = get_secret_exponent (); /* Geheimer Exponent */

    while (code[i] != -1)
    {
        msg[i] = (unsigned char)modular_exponentiation (code[i], d, n);
        i++;
    }
    msg[i] = '\0';
}
예제 #4
0
파일: crypt.c 프로젝트: steeb/studium-ppr
extern void encrypt (unsigned char msg[],
                     int code[])
{
    int i = 0;                      /* Laufvariable */
    int n = get_rsa_module ();      /* Gemeinsames Modul */
    int e = get_public_exponent (); /* Öffentlicher Exponent */

    while (msg[i] != '\0')
    {
        code[i] = modular_exponentiation (msg[i], e, n);
        i++;
    }
    code[i] = -1;
}
int * split_number(int number, int n, int t) {
	int * shares = malloc(sizeof(int)*n);

	int coef[t];
	int x;
	int i;

	coef[0] = number;

	for (i = 1; i < t; ++i)
	{
		
#if defined (HAVE_ARC4RANDOM)
		coef[i] = arc4random_uniform(prime - 1);
#else
		coef[i] = rand() % (prime - 1);
#endif
	}

	for (x = 0; x < n; ++x)
	{
		int y = coef[0];

		
		for (i = 1; i < t; ++i)
		{
			int temp = modular_exponentiation(x+1, i, prime);

			y = (y + (coef[i] * temp % prime)) % prime;
		}

	
		y = (y + prime) % prime;

		shares[x] = y;
	}

	return shares;
}
예제 #6
0
int main(void) 
{ 
  char _1_main_$locals[168] ;
  union _1_main_$node _1_main_$stack[1][32] ;
  union _1_main_$node *_1_main_$sp[1] ;
  unsigned char *_1_main_$pc[1] ;

  {
  megaInit();
  _1_main_$sp[0] = _1_main_$stack[0];
  _1_main_$pc[0] = _1_main_$array[0];
  while (1) {
    switch (*(_1_main_$pc[0])) {
    case _1_main__store_int$left_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    *((int *)(_1_main_$sp[0] + 0)->_void_star) = (_1_main_$sp[0] + -1)->_int;
    _1_main_$sp[0] += -2;
    break;
    case _1_main__store_long_long$right_STA_0$left_STA_1: 
    (_1_main_$pc[0]) ++;
    *((long long *)(_1_main_$sp[0] + -1)->_void_star) = (_1_main_$sp[0] + 0)->_long_long;
    _1_main_$sp[0] += -2;
    break;
    case _1_main__goto$label_LAB_0: 
    (_1_main_$pc[0]) ++;
    _1_main_$pc[0] += *((int *)_1_main_$pc[0]);
    break;
    case _1_main__label$label_LAB_0: 
    (_1_main_$pc[0]) ++;
    break;
    case _1_main__constant_long_long$result_STA_0$value_LIT_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 1)->_long_long = *((long long *)_1_main_$pc[0]);
    (_1_main_$sp[0]) ++;
    _1_main_$pc[0] += 8;
    break;
    case _1_main__load_long_long$left_STA_0$result_STA_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 0)->_long_long = *((long long *)(_1_main_$sp[0] + 0)->_void_star);
    break;
    case _1_main__store_void_star$left_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    *((void **)(_1_main_$sp[0] + 0)->_void_star) = (_1_main_$sp[0] + -1)->_void_star;
    _1_main_$sp[0] += -2;
    break;
    case _1_main__call$func_LIT_0: 
    (_1_main_$pc[0]) ++;
    switch (*((int *)_1_main_$pc[0])) {
    case 2: 
    scanf(*((char const   * __restrict  *)(_1_main_$locals + 32)), *((int **)(_1_main_$locals + 40)),
          *((int **)(_1_main_$locals + 56)));
    break;
    case 1: 
    scanf(*((char const   * __restrict  *)(_1_main_$locals + 0)), *((int **)(_1_main_$locals + 8)));
    break;
    case 3: 
    scanf(*((char const   * __restrict  *)(_1_main_$locals + 72)), *((int **)(_1_main_$locals + 80)),
          *((int **)(_1_main_$locals + 96)));
    break;
    case 4: 
    *((long long *)(_1_main_$locals + 144)) = modular_exponentiation(*((long long *)(_1_main_$locals + 112)),
                                                                     *((long long *)(_1_main_$locals + 120)),
                                                                     *((long long *)(_1_main_$locals + 128)));
    break;
    case 6: 
    printf(*((char const   * __restrict  *)(_1_main_$locals + 152)), *((long long *)(_1_main_$locals + 160)));
    break;
    case 5: 
    test();
    break;
    }
    _1_main_$pc[0] += 4;
    break;
    case _1_main__branchIfTrue$expr_STA_0$label_LAB_0: 
    (_1_main_$pc[0]) ++;
    if ((_1_main_$sp[0] + 0)->_int) {
      _1_main_$pc[0] += *((int *)_1_main_$pc[0]);
    } else {
      _1_main_$pc[0] += 4;
    }
    (_1_main_$sp[0]) --;
    break;
    case _1_main__return_int$expr_STA_0: 
    (_1_main_$pc[0]) ++;
    return ((_1_main_$sp[0] + 0)->_int);
    break;
    case _1_main__MinusA_int_int2int$left_STA_0$result_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + -1)->_int = (_1_main_$sp[0] + 0)->_int - (_1_main_$sp[0] + -1)->_int;
    (_1_main_$sp[0]) --;
    break;
    case _1_main__convert_int2long_long$left_STA_0$result_STA_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 0)->_long_long = (long long )(_1_main_$sp[0] + 0)->_int;
    break;
    case _1_main__constant_int$result_STA_0$value_LIT_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 1)->_int = *((int *)_1_main_$pc[0]);
    (_1_main_$sp[0]) ++;
    _1_main_$pc[0] += 4;
    break;
    case _1_main__convert_void_star2void_star$left_STA_0$result_STA_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 0)->_void_star = (_1_main_$sp[0] + 0)->_void_star;
    break;
    case _1_main__local$result_STA_0$value_LIT_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 1)->_void_star = (void *)(_1_main_$locals + *((int *)_1_main_$pc[0]));
    (_1_main_$sp[0]) ++;
    _1_main_$pc[0] += 4;
    break;
    case _1_main__string$result_STA_0$value_LIT_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 1)->_void_star = (void *)(_1_main_$strings + *((int *)_1_main_$pc[0]));
    (_1_main_$sp[0]) ++;
    _1_main_$pc[0] += 4;
    break;
    case _1_main__PlusA_long_long_long_long2long_long$left_STA_0$result_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + -1)->_long_long = (_1_main_$sp[0] + 0)->_long_long + (_1_main_$sp[0] + -1)->_long_long;
    (_1_main_$sp[0]) --;
    break;
    case _1_main__load_int$left_STA_0$result_STA_0: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + 0)->_int = *((int *)(_1_main_$sp[0] + 0)->_void_star);
    break;
    case _1_main__Ge_long_long_long_long2int$left_STA_0$result_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + -1)->_int = (_1_main_$sp[0] + 0)->_long_long >= (_1_main_$sp[0] + -1)->_long_long;
    (_1_main_$sp[0]) --;
    break;
    case _1_main__Mod_long_long_long_long2long_long$left_STA_0$result_STA_0$right_STA_1: 
    (_1_main_$pc[0]) ++;
    (_1_main_$sp[0] + -1)->_long_long = (_1_main_$sp[0] + 0)->_long_long % (_1_main_$sp[0] + -1)->_long_long;
    (_1_main_$sp[0]) --;
    break;
    }
  }
}
}