You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.6 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #include "zqfield.h"
  2. ZqField::ZqField(PBigInt ap) {
  3. mpz_init2(tmp, 1024);
  4. mpz_init_set(p, *ap);
  5. mpz_init_set_ui(zero, 0);
  6. mpz_init_set_ui(one, 1);
  7. }
  8. ZqField::~ZqField() {
  9. mpz_clear(tmp);
  10. mpz_clear(p);
  11. mpz_clear(zero);
  12. mpz_clear(one);
  13. }
  14. void ZqField::add(PBigInt r, PBigInt a, PBigInt b) {
  15. mpz_add(tmp,*a,*b);
  16. mpz_fdiv_r(*r, tmp, p);
  17. }
  18. void ZqField::mul(PBigInt r, PBigInt a, PBigInt b) {
  19. mpz_mul(tmp,*a,*b);
  20. mpz_fdiv_r(*r, tmp, p);
  21. }
  22. void ZqField::lt(PBigInt r, PBigInt a, PBigInt b) {
  23. int c = mpz_cmp(*a, *b);
  24. if (c<0) {
  25. mpz_set(*r, one);
  26. } else {
  27. mpz_set(*r, zero);
  28. }
  29. }
  30. void ZqField::eq(PBigInt r, PBigInt a, PBigInt b) {
  31. int c = mpz_cmp(*a, *b);
  32. if (c==0) {
  33. mpz_set(*r, one);
  34. } else {
  35. mpz_set(*r, zero);
  36. }
  37. }
  38. void ZqField::gt(PBigInt r, PBigInt a, PBigInt b) {
  39. int c = mpz_cmp(*a, *b);
  40. if (c>0) {
  41. mpz_set(*r, one);
  42. } else {
  43. mpz_set(*r, zero);
  44. }
  45. }
  46. void ZqField::leq(PBigInt r, PBigInt a, PBigInt b) {
  47. int c = mpz_cmp(*a, *b);
  48. if (c<=0) {
  49. mpz_set(*r, one);
  50. } else {
  51. mpz_set(*r, zero);
  52. }
  53. }
  54. void ZqField::geq(PBigInt r, PBigInt a, PBigInt b) {
  55. int c = mpz_cmp(*a, *b);
  56. if (c>=0) {
  57. mpz_set(*r, one);
  58. } else {
  59. mpz_set(*r, zero);
  60. }
  61. }
  62. void ZqField::neq(PBigInt r, PBigInt a, PBigInt b) {
  63. int c = mpz_cmp(*a, *b);
  64. if (c!=0) {
  65. mpz_set(*r, one);
  66. } else {
  67. mpz_set(*r, zero);
  68. }
  69. }
  70. int ZqField::isTrue(PBigInt a) {
  71. return mpz_sgn(*a);
  72. }
  73. void ZqField::copyn(PBigInt a, PBigInt b, int n) {
  74. for (int i=0;i<n; i++) mpz_set(a[i], b[i]);
  75. }