Exemple #1
0
Number big_pow(Number base, int exp)
{
	Number result;
	result.digits = (int *)malloc(sizeof(int) * 65536);

	if (base.length == 1 && base.digits[0] == 0) {
		result.sign = 1;
		result.length = 1;
		if (exp == 0) {
			result.digits[0] = 1;
		} else {
			result.digits[0] = 0;
		}
		return result;
	} else if (exp == 0) {
		result.sign = 1;
		result.digits[0] = 1;
		result.length = 1;
		return result;
	} else if (exp == 1) {
		return base;
	}

	result = big_pow(base, exp / 2);
	result = big_mul(result, result);

	if (exp % 2 == 1) {
		result = big_mul(result, base);
	}

	return result;
}
Exemple #2
0
struct big* big_fac(uint32_t n) {
  struct big* t = big_new(1);
  uint32_t i;
  for (i = 2; i <= n; i++) {
    t = big_mul(t, big_new(i));
  }
  return t;
}
Exemple #3
0
static void big_mulmod (u32 *num1, u32 *num2, u32 *mod)
{
	u32 lnum[128];
	int len = mod[63] ? 64 : 32;

	big_mul (len, lnum, num1, num2);
	big_mod (len, num1, lnum, mod);
}
void EncryptionType1::big_mulmod (u32 *num1, u32 *num2, u32 *mod)
{
	u32 lnum[128];
	int len = mod[63] ? 64 : 32;

	big_mul (len, lnum, num1, num2);
	big_mod (len, num1, lnum, mod);
}
Exemple #5
0
struct big* big_mul(struct big* b1, struct big* b2) {
  struct big* car = big_mul_single(b1, b2->x);
  if (!b2->q) {
    return car;
  }
  struct big* cdr = big_new(0);
  cdr->q = big_mul(b1, b2->q);
  return big_add(car, cdr);
}
Exemple #6
0
Number pre3() {
	Number result = pre2();
	Number n;

	while (accept(TOKEN_MUL)) {
		get_token();
		n = pre2();
		result = big_mul(result, n);
	}

	return result;
}