mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 01:48:00 +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));
|
(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)
|
void mp_set_bit(mp_int *x, size_t bit, unsigned val)
|
||||||
{
|
{
|
||||||
size_t word = bit / BIGNUM_INT_BITS;
|
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);
|
uint8_t mp_get_byte(mp_int *x, size_t byte);
|
||||||
unsigned mp_get_bit(mp_int *x, size_t bit);
|
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.
|
* 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.
|
* Do not pass an out-of-range index, on pain of assertion failure.
|
||||||
|
Loading…
Reference in New Issue
Block a user