mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 09:27:59 +00:00
New mpint function mp_get_integer().
If you have an mp_int that you know will fit in an ordinary integer type, this function gives it to you in that form.
This commit is contained in:
parent
35f071f61c
commit
1a7521a0a7
12
mpint.c
12
mpint.c
@ -257,6 +257,18 @@ unsigned mp_get_bit(mp_int *x, size_t bit)
|
||||
(bit % BIGNUM_INT_BITS));
|
||||
}
|
||||
|
||||
uintmax_t mp_get_integer(mp_int *x)
|
||||
{
|
||||
uintmax_t toret = 0;
|
||||
for (size_t i = x->nw; i-- > 0 ;) {
|
||||
/* Shift in two stages to avoid undefined behaviour if the
|
||||
* shift count equals the integer width */
|
||||
toret = (toret << (BIGNUM_INT_BITS/2)) << (BIGNUM_INT_BITS/2);
|
||||
toret |= x->w[i];
|
||||
}
|
||||
return toret;
|
||||
}
|
||||
|
||||
void mp_set_bit(mp_int *x, size_t bit, unsigned val)
|
||||
{
|
||||
size_t word = bit / BIGNUM_INT_BITS;
|
||||
|
6
mpint.h
6
mpint.h
@ -100,6 +100,12 @@ mp_int *mp_power_2(size_t power);
|
||||
uint8_t mp_get_byte(mp_int *x, size_t byte);
|
||||
unsigned mp_get_bit(mp_int *x, size_t bit);
|
||||
|
||||
/*
|
||||
* Retrieve the value of an mp_int as a uintmax_t, assuming it's small
|
||||
* enough to fit.
|
||||
*/
|
||||
uintmax_t mp_get_integer(mp_int *x);
|
||||
|
||||
/*
|
||||
* Set an mp_int bit. Again, the bit index is not considered secret.
|
||||
* Do not pass an out-of-range index, on pain of assertion failure.
|
||||
|
Loading…
Reference in New Issue
Block a user