1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-08 08:58:00 +00:00

Add mp_copy_integer_into function.

Even simpler than the existing mp_add_integer_into.
This commit is contained in:
Simon Tatham 2020-02-19 19:12:32 +00:00
parent 6b27999500
commit 20a9912c7c
4 changed files with 15 additions and 3 deletions

View File

@ -90,6 +90,14 @@ void mp_copy_into(mp_int *dest, mp_int *src)
smemclr(dest->w + copy_nw, (dest->nw - copy_nw) * sizeof(BignumInt));
}
void mp_copy_integer_into(mp_int *r, uintmax_t n)
{
for (size_t i = 0; i < r->nw; i++) {
r->w[i] = (BignumInt)n;
n = (BIGNUM_INT_BYTES < sizeof(n)) ? n >> BIGNUM_INT_BITS : 0;
}
}
/*
* Conditional selection is done by negating 'which', to give a mask
* word which is all 1s if which==1 and all 0s if which==0. Then you

View File

@ -176,9 +176,10 @@ mp_int *mp_max(mp_int *x, mp_int *y);
void mp_dump(FILE *fp, const char *prefix, mp_int *x, const char *suffix);
/*
* Overwrite one mp_int with another.
* Overwrite one mp_int with another, or with a plain integer.
*/
void mp_copy_into(mp_int *dest, mp_int *src);
void mp_copy_integer_into(mp_int *dest, uintmax_t n);
/*
* Conditional selection. Overwrites dest with either src0 or src1,

View File

@ -349,12 +349,14 @@ class mpint(MyTestBase):
x = mp_new(mp_max_bits(initial) + 64)
# mp_{add,sub}_integer_into should be able to cope with any
# uintmax_t. Test a number that requires more than 32 bits.
# mp_{add,sub,copy}_integer_into should be able to cope with
# any uintmax_t. Test a number that requires more than 32 bits.
mp_add_integer_into(x, initial, 123123123123123)
self.assertEqual(int(x), 4444444444567567567567567)
mp_sub_integer_into(x, initial, 123123123123123)
self.assertEqual(int(x), 4444444444321321321321321)
mp_copy_integer_into(x, 123123123123123)
self.assertEqual(int(x), 123123123123123)
# mp_mul_integer_into only takes a uint16_t integer input
mp_mul_integer_into(x, initial, 10001)

View File

@ -41,6 +41,7 @@ FUNC3(void, mp_and_into, val_mpint, val_mpint, val_mpint)
FUNC3(void, mp_or_into, val_mpint, val_mpint, val_mpint)
FUNC3(void, mp_xor_into, val_mpint, val_mpint, val_mpint)
FUNC3(void, mp_bic_into, val_mpint, val_mpint, val_mpint)
FUNC2(void, mp_copy_integer_into, val_mpint, uint)
FUNC3(void, mp_add_integer_into, val_mpint, val_mpint, uint)
FUNC3(void, mp_sub_integer_into, val_mpint, val_mpint, uint)
FUNC3(void, mp_mul_integer_into, val_mpint, val_mpint, uint)