There are a couple of functions to get information on arbitrary bits in an MPI and to set or clear them:
unsigned int
gcry_mpi_get_nbits (gcry_mpi_t a)
¶Return the number of bits required to represent a.
int
gcry_mpi_test_bit (gcry_mpi_t a, unsigned int n)
¶Return true if bit number n (counting from 0) is set in a.
void
gcry_mpi_set_bit (gcry_mpi_t a, unsigned int n)
¶Set bit number n in a.
void
gcry_mpi_clear_bit (gcry_mpi_t a, unsigned int n)
¶Clear bit number n in a.
void
gcry_mpi_set_highbit (gcry_mpi_t a, unsigned int n)
¶Set bit number n in a and clear all bits greater than n.
void
gcry_mpi_clear_highbit (gcry_mpi_t a, unsigned int n)
¶Clear bit number n in a and all bits greater than n.
void
gcry_mpi_rshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n)
¶Shift the value of a by n bits to the right and store the result in x.
void
gcry_mpi_lshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n)
¶Shift the value of a by n bits to the left and store the result in x.