exp_bench.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <gmp.h>
  4. #include "entropy.h"
  5. #include "fbase.h"
  6. #include "group.h"
  7. #include "timeit.h"
  8. int main()
  9. {
  10. mpz_entropy_init();
  11. group_init();
  12. mpz_t test, expected, base;
  13. uint64_t exp;
  14. mpz_inits(test, expected, base, NULL);
  15. mpz_t expected_mod;
  16. mpz_inits(expected_mod, NULL);
  17. mpz_urandomm(base, _rstate, p);
  18. mpz_powm_ui(expected_mod, base, 2, p);
  19. mpz_pow_ui(test, base, 2);
  20. remp(test);
  21. // gmp_printf("%Zx\n%Zx\n", test, expected_mod);
  22. assert(!mpz_cmp(test, expected_mod));
  23. mpz_clear(expected_mod);
  24. mpz_urandomm(base, _rstate, p);
  25. fbase_ptr pbase = fb_init();
  26. fb_set(pbase, base);
  27. INIT_TIMEIT(CLOCK_PROCESS_CPUTIME_ID);
  28. for (int i = 0; i < (int) 1e3; i++) {
  29. getrandom(&exp, 4, GRND_NONBLOCK);
  30. //exp =0xffff;
  31. mpz_powm_ui(expected, base, exp, p);
  32. START_TIMEIT();
  33. fb_powmp_ui(test, pbase, exp);
  34. END_TIMEIT();
  35. assert(!mpz_cmp(test, expected));
  36. }
  37. printf(TIMEIT_FORMAT "\n", GET_TIMEIT());
  38. fb_clear(pbase);
  39. mpz_clears(test, expected, base, NULL);
  40. }