hss.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "config.h"
  2. #include "hss.h"
  3. /**
  4. * p is our prime modulus, and is 2^n - g
  5. * where g is referred to as "gamma" (built-in function in C, so transliterated)
  6. */
  7. const char* p_str =
  8. "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  9. "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  10. "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  11. "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  12. "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  13. "505CAF";
  14. mpz_t p, q;
  15. uint32_t gg = 11510609;
  16. void hss_init()
  17. {
  18. mpz_init_set_str(p, p_str, 0);
  19. mpz_init_set(q, p);
  20. mpz_sub_ui(q, q, 1);
  21. mpz_divexact_ui(q, q, 2);
  22. }
  23. void hss_del()
  24. {
  25. mpz_clear(p);
  26. }
  27. void ssl1_init(ssl1_t s)
  28. {
  29. /* mpz_init(s->w); */
  30. /* for (size_t t = 0; t < 160; t++) { */
  31. /* mpz_init(s->cw[t]); */
  32. /* } */
  33. }
  34. void ssl1_clear(ssl1_t s)
  35. {
  36. mpz_clears(s->w.c1, s->w.c2, NULL);
  37. for (size_t t = 0; t < 160; t++) {
  38. mpz_clears(s->cw[t].c1, s->cw[t].c2, NULL);
  39. }
  40. }
  41. void ssl2_init(ssl2_t s)
  42. {
  43. mpz_inits(s->x, s->cx, NULL);
  44. }
  45. void ssl2_clear(ssl2_t s)
  46. {
  47. mpz_clear(s->x);
  48. mpz_clear(s->cx);
  49. }