Example #1
0
int main(int argc, char **argv)
{
  uint64_t a, b, c;
  uint64_t *r1, *r2;
  int i;
  gf_t gf;

  if (argc != 1) usage(NULL);

  /* Get two random numbers in a and b */

  MOA_Seed(time(0));
  a = MOA_Random_64();
  b = MOA_Random_64();

  /* Create the proper instance of the gf_t object using defaults: */

  gf_init_easy(&gf, 64);

  /* And multiply a and b using the galois field: */

  c = gf.multiply.w64(&gf, a, b);
  printf("%llx * %llx = %llx\n", (long long unsigned int) a, (long long unsigned int) b, (long long unsigned int) c);

  /* Divide the product by a and b */

  printf("%llx / %llx = %llx\n", (long long unsigned int) c, (long long unsigned int) a, (long long unsigned int) gf.divide.w64(&gf, c, a));
  printf("%llx / %llx = %llx\n", (long long unsigned int) c, (long long unsigned int) b, (long long unsigned int) gf.divide.w64(&gf, c, b));

  r1 = (uint64_t *) malloc(32);
  r2 = (uint64_t *) malloc(32);

  r1[0] = b;

  for (i = 1; i < 4; i++) r1[i] = MOA_Random_64();

  gf.multiply_region.w64(&gf, r1, r2, a, 32, 0);

  printf("\nmultiply_region by %llx\n\n", (long long unsigned int) a);
  printf("R1 (the source):  ");
  for (i = 0; i < 4; i++) printf(" %016llx", (long long unsigned int) r1[i]);

  printf("\nR2 (the product): ");
  for (i = 0; i < 4; i++) printf(" %016llx", (long long unsigned int) r2[i]);
  printf("\n");

  exit(0);
}
Example #2
0
void gf_general_set_random(gf_general_t *v, int w, int zero_ok) 
{
  if (w <= 32) {
      v->w32 = MOA_Random_W(w, zero_ok);
  } else if (w <= 64) {
    while (1) {
      v->w64 = MOA_Random_64();
      if (v->w64 != 0 || zero_ok) return;
    }
  } else {
    while (1) {
      MOA_Random_128(v->w128);
      if (v->w128[0] != 0 || v->w128[1] != 0 || zero_ok) return;
    }
  }
}
Example #3
0
void MOA_Random_128(uint64_t *x)
{
    x[0] = MOA_Random_64();
    x[1] = MOA_Random_64();
    return;
}