Line data Source code
1 : #include "tommath_private.h"
2 : #ifdef BN_MP_COPY_C
3 : /* LibTomMath, multiple-precision integer library -- Tom St Denis */
4 : /* SPDX-License-Identifier: Unlicense */
5 :
6 : /* copy, b = a */
7 50425 : mp_err mp_copy(const mp_int *a, mp_int *b)
8 : {
9 : int n;
10 : mp_digit *tmpa, *tmpb;
11 : mp_err err;
12 :
13 : /* if dst == src do nothing */
14 50425 : if (a == b) {
15 49082 : return MP_OKAY;
16 : }
17 :
18 : /* grow dest */
19 1343 : if (b->alloc < a->used) {
20 114 : if ((err = mp_grow(b, a->used)) != MP_OKAY) {
21 0 : return err;
22 : }
23 : }
24 :
25 : /* zero b and copy the parameters over */
26 : /* pointer aliases */
27 :
28 : /* source */
29 1343 : tmpa = a->dp;
30 :
31 : /* destination */
32 1343 : tmpb = b->dp;
33 :
34 : /* copy all the digits */
35 83363 : for (n = 0; n < a->used; n++) {
36 82020 : *tmpb++ = *tmpa++;
37 : }
38 :
39 : /* clear high digits */
40 1343 : MP_ZERO_DIGITS(tmpb, b->used - n);
41 :
42 : /* copy used count and sign */
43 1343 : b->used = a->used;
44 1343 : b->sign = a->sign;
45 1343 : return MP_OKAY;
46 : }
47 : #endif
|