div operators

This commit is contained in:
Jordi Baylina
2019-12-07 21:47:00 +01:00
parent 2a45647274
commit eaf4396cb3
9 changed files with 224 additions and 63 deletions

View File

@@ -15,8 +15,19 @@ ZqField::~ZqField() {
}
void ZqField::add(PBigInt r, PBigInt a, PBigInt b) {
mpz_add(tmp,*a,*b);
mpz_fdiv_r(*r, tmp, p);
mpz_add(*r,*a,*b);
if (mpz_cmp(*r, p) >= 0) {
mpz_sub(*r, *r, p);
}
}
void ZqField::sub(PBigInt r, PBigInt a, PBigInt b) {
if (mpz_cmp(*a, *b) >= 0) {
mpz_sub(*r, *a, *b);
} else {
mpz_sub(tmp, *b, *a);
mpz_sub(*r, p, tmp);
}
}
void ZqField::mul(PBigInt r, PBigInt a, PBigInt b) {
@@ -24,6 +35,20 @@ void ZqField::mul(PBigInt r, PBigInt a, PBigInt b) {
mpz_fdiv_r(*r, tmp, p);
}
void ZqField::div(PBigInt r, PBigInt a, PBigInt b) {
mpz_invert(tmp, *b, p);
mpz_mul(tmp,*a,tmp);
mpz_fdiv_r(*r, tmp, p);
}
void ZqField::idiv(PBigInt r, PBigInt a, PBigInt b) {
mpz_fdiv_q(*r, *a, *b);
}
void ZqField::mod(PBigInt r, PBigInt a, PBigInt b) {
mpz_fdiv_r(*r, *a, *b);
}
void ZqField::lt(PBigInt r, PBigInt a, PBigInt b) {
int c = mpz_cmp(*a, *b);
if (c<0) {

View File

@@ -15,7 +15,11 @@ public:
void copyn(PBigInt a, PBigInt b, int n);
void add(PBigInt r,PBigInt a, PBigInt b);
void sub(PBigInt r,PBigInt a, PBigInt b);
void mul(PBigInt r,PBigInt a, PBigInt b);
void div(PBigInt r,PBigInt a, PBigInt b);
void idiv(PBigInt r,PBigInt a, PBigInt b);
void mod(PBigInt r,PBigInt a, PBigInt b);
void lt(PBigInt r, PBigInt a, PBigInt b);
void eq(PBigInt r, PBigInt a, PBigInt b);
void gt(PBigInt r, PBigInt a, PBigInt b);