rms_bench.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "config.h"
  2. #include <assert.h>
  3. #include <stdio.h>
  4. #include <gmp.h>
  5. #include "ddlog.h"
  6. #include "hss.h"
  7. #include "timeit.h"
  8. int main()
  9. {
  10. hss_init();
  11. mpz_t test;
  12. mpz_init(test);
  13. mpz_t x, y, xy;
  14. mpz_inits(x, y, xy, NULL);
  15. elgamal_key_t key;
  16. ELGAMAL_KEY(init, key);
  17. elgamal_keygen(key);
  18. mpz_t expected_mod, base;
  19. mpz_inits(expected_mod, base, NULL);
  20. mpz_urandomm(base, _rstate, p);
  21. mpz_powm_ui(expected_mod, base, 2, p);
  22. mpz_pow_ui(test, base, 2);
  23. remp(test);
  24. // gmp_printf("%Zx\n%Zx\n", test, expected_mod);
  25. assert(!mpz_cmp(test, expected_mod));
  26. mpz_clear(expected_mod);
  27. ssl1_t r1, r2;
  28. ssl2_t s1, s2;
  29. ssl2_t t1, t2;
  30. ssl1_init(r1);
  31. ssl1_init(r2);
  32. ssl2_init(s1);
  33. ssl2_init(s2);
  34. ssl2_init(t1);
  35. ssl2_init(t2);
  36. mpz_urandomb(y, _rstate, 1);
  37. mpz_urandomb(x, _rstate, 1);
  38. /* mpz_set_ui(x, 1); */
  39. /* mpz_set_ui(y, 1); */
  40. ssl2_share(s1, s2, x, key->sk);
  41. ssl2_open(test, s1, s2);
  42. assert(!mpz_cmp(test, x));
  43. ssl1_share(r1, r2, y, key);
  44. ssl1_open(test, r1, r2, key);
  45. assert(!mpz_cmp_ui(test, mpz_cmp_ui(y, 0) ? 2 : 1));
  46. for (int i = 0; i < (int) 1e2; i++) {
  47. INIT_TIMEIT(CLOCK_PROCESS_CPUTIME_ID);
  48. START_TIMEIT();
  49. hss_mul(t1, r1, s1);
  50. END_TIMEIT();
  51. hss_mul(t2, r2, s2);
  52. #ifndef NDEBUG
  53. gmp_printf("%Zx %Zx\n", x, y);
  54. gmp_printf("%d %d\n", s1->x, s2->x);
  55. #endif
  56. mpz_mul(xy, x, y);
  57. ssl2_open(test, t2, t1);
  58. assert(!mpz_cmp(test, xy));
  59. mpz_sub(test, t2->cx, t1->cx);
  60. mpz_abs(test, test);
  61. assert(((!mpz_cmp_ui(xy, 1) && !mpz_cmp(test, key->sk))) ||
  62. ((!mpz_cmp_ui(xy, 0)) && !mpz_cmp_ui(test, 0)));
  63. printf("%d" SEP "%d" SEP "%d" SEP TIMEIT_FORMAT "\n",
  64. FAILURE, FB_BASE, SS_BASE, GET_TIMEIT());
  65. }
  66. ssl2_clear(s1);
  67. ssl2_clear(s2);
  68. ssl1_clear(r1);
  69. ssl1_clear(r2);
  70. ssl2_clear(t1);
  71. ssl2_clear(t2);
  72. mpz_clears(x, y, NULL);
  73. ELGAMAL_KEY(clear, key);
  74. hss_clear();
  75. return 0;
  76. }