www.usr.com/support/gpl/USR9107_release.1.4.tar.gz
[bcm963xx.git] / userapps / opensource / sshd / libtommath / bn_mp_copy.c
1 #include <tommath.h>
2 #ifdef BN_MP_COPY_C
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis
4  *
5  * LibTomMath is a library that provides multiple-precision
6  * integer arithmetic as well as number theoretic functionality.
7  *
8  * The library was designed directly after the MPI library by
9  * Michael Fromberger but has been written from scratch with
10  * additional optimizations in place.
11  *
12  * The library is free for all purposes without any express
13  * guarantee it works.
14  *
15  * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org
16  */
17
18 /* copy, b = a */
19 int
20 mp_copy (mp_int * a, mp_int * b)
21 {
22   int     res, n;
23
24   /* if dst == src do nothing */
25   if (a == b) {
26     return MP_OKAY;
27   }
28
29   /* grow dest */
30   if (b->alloc < a->used) {
31      if ((res = mp_grow (b, a->used)) != MP_OKAY) {
32         return res;
33      }
34   }
35
36   /* zero b and copy the parameters over */
37   {
38     register mp_digit *tmpa, *tmpb;
39
40     /* pointer aliases */
41
42     /* source */
43     tmpa = a->dp;
44
45     /* destination */
46     tmpb = b->dp;
47
48     /* copy all the digits */
49     for (n = 0; n < a->used; n++) {
50       *tmpb++ = *tmpa++;
51     }
52
53     /* clear high digits */
54     for (; n < b->used; n++) {
55       *tmpb++ = 0;
56     }
57   }
58
59   /* copy used count and sign */
60   b->used = a->used;
61   b->sign = a->sign;
62   return MP_OKAY;
63 }
64 #endif