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)7mp_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