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 */
mp_copy(const mp_int * a,mp_int * b)7 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    if (a == b) {
15       return MP_OKAY;
16    }
17 
18    /* grow dest */
19    if (b->alloc < a->used) {
20       if ((err = mp_grow(b, a->used)) != MP_OKAY) {
21          return err;
22       }
23    }
24 
25    /* zero b and copy the parameters over */
26    /* pointer aliases */
27 
28    /* source */
29    tmpa = a->dp;
30 
31    /* destination */
32    tmpb = b->dp;
33 
34    /* copy all the digits */
35    for (n = 0; n < a->used; n++) {
36       *tmpb++ = *tmpa++;
37    }
38 
39    /* clear high digits */
40    MP_ZERO_DIGITS(tmpb, b->used - n);
41 
42    /* copy used count and sign */
43    b->used = a->used;
44    b->sign = a->sign;
45    return MP_OKAY;
46 }
47 #endif
48