mini-gmp mpz_powm incorrect result
Guido Vranken
guidovranken at gmail.com
Sun Aug 28 16:22:40 CEST 2022
The following program computes 1^0 % 1:
//#include <gmp.h>
#include "mini-gmp.c"
#include <stdio.h>
#define CF_CHECK_EQ(expr, res) if ( (expr) != (res) ) { goto end; }
int main(void)
{
mpz_t a, b, c, res;
char* s = NULL;
/* noret */ mpz_init(a);
/* noret */ mpz_init(b);
/* noret */ mpz_init(c);
/* noret */ mpz_init(res);
CF_CHECK_EQ(mpz_set_str(a, "1", 10), 0);
CF_CHECK_EQ(mpz_set_str(b, "0", 10), 0);
CF_CHECK_EQ(mpz_set_str(c, "1", 10), 0);
CF_CHECK_EQ(mpz_set_str(res, "0", 10), 0);
/* noret */ mpz_powm(res, a, b, c);
printf("%s\n", mpz_get_str(NULL, 10, res));
end:
return 0;
}
The result should be 0, which is the case with regular libgmp, but with
mini-gmp the result is 1, and this is incorrect.
Tested on version 6.2.1 and the latest repository checkout, with recent
clang and gcc, on x64 Linux.
More information about the gmp-bugs
mailing list