<div dir="ltr"><div>In the following program, the results of addm, subm or mulm are all zero, but should be 6, 5 and 1, respectively.</div><div><br></div><div>#include <gcrypt.h><br><br>#define CF_CHECK_EQ(expr, res) if ( (expr) != (res) ) { goto end; }<br><br>int main(void)<br>{<br>    gcry_mpi_t A;<br>    gcry_mpi_t B;<br>    gcry_mpi_t C;<br>    gcry_error_t err;<br>    char *buf;<br><br>    CF_CHECK_EQ(err = gcry_mpi_scan(&A, GCRYMPI_FMT_HEX, "2", 0, NULL), 0);<br>    CF_CHECK_EQ(err = gcry_mpi_scan(&B, GCRYMPI_FMT_HEX, "4", 0, NULL), 0);<br>    CF_CHECK_EQ(err = gcry_mpi_scan(&C, GCRYMPI_FMT_HEX, "7", 0, NULL), 0);<br>    gcry_mpi_addm(C, A, B, C);<br>    //gcry_mpi_subm(C, A, B, C);<br>    //gcry_mpi_mulm(C, A, B, C);<br>    CF_CHECK_EQ(err = gcry_mpi_aprint(GCRYMPI_FMT_HEX, (unsigned char**)&buf, NULL, C), 0);<br>    printf("%s\n", buf);<br>    gcry_mpi_release(A);<br>    gcry_mpi_release(B);<br>    gcry_mpi_release(C);<br>    gcry_free(buf);<br>end:<br>    return 0;<br>}<br></div></div>