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