1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*
2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    mpi.h
3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    by Michael J. Fromberger <sting@linguist.dartmouth.edu>
5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    Copyright (C) 1998 Michael J. Fromberger, All Rights Reserved
6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    Arbitrary precision integer arithmetic library
8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    $Id: mpi.h,v 1.2 2005/05/05 14:38:47 tom Exp $
10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef _H_MPI_
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define _H_MPI_
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "mpi-config.h"
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_LT       -1
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_EQ        0
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_GT        1
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_DEBUG
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef MP_IOFUNC
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MP_IOFUNC 1
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_IOFUNC
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <stdio.h>
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <ctype.h>
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <limits.h>
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_NEG  1
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_ZPOS 0
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Included for compatibility... */
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  NEG     MP_NEG
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  ZPOS    MP_ZPOS
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_OKAY          0 /* no error, all is well */
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_YES           0 /* yes (boolean result)  */
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_NO           -1 /* no (boolean result)   */
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_MEM          -2 /* out of memory         */
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_RANGE        -3 /* argument out of range */
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_BADARG       -4 /* invalid parameter     */
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_UNDEF        -5 /* answer is undefined   */
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  MP_LAST_CODE    MP_UNDEF
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "mpi-types.h"
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Included for compatibility... */
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DIGIT_BIT         MP_DIGIT_BIT
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DIGIT_MAX         MP_DIGIT_MAX
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Macros for accessing the mp_int internals           */
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  SIGN(MP)     ((MP)->sign)
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  USED(MP)     ((MP)->used)
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  ALLOC(MP)    ((MP)->alloc)
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  DIGITS(MP)   ((MP)->dp)
60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  DIGIT(MP,N)  (MP)->dp[(N)]
61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_ARGCHK == 1
63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  ARGCHK(X,Y)  {if(!(X)){return (Y);}}
64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#elif MP_ARGCHK == 2
65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <assert.h>
66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  ARGCHK(X,Y)  assert(X)
67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define  ARGCHK(X,Y)  /*  */
69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* This defines the maximum I/O base (minimum is 2)   */
72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MAX_RADIX         64
73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projecttypedef struct {
75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  mp_sign       sign;    /* sign of this quantity      */
76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  mp_size       alloc;   /* how many digits allocated  */
77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  mp_size       used;    /* how many digits used       */
78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  mp_digit     *dp;      /* the digits themselves      */
79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} mp_int;
80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Default precision                                                      */
83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectunsigned int mp_get_prec(void);
85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid         mp_set_prec(unsigned int prec);
86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Memory management                                                      */
89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_init(mp_int *mp);
91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_init_array(mp_int mp[], int count);
92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_init_size(mp_int *mp, mp_size prec);
93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_init_copy(mp_int *mp, mp_int *from);
94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_copy(mp_int *from, mp_int *to);
95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_exch(mp_int *mp1, mp_int *mp2);
96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_clear(mp_int *mp);
97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_clear_array(mp_int mp[], int count);
98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_zero(mp_int *mp);
99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_set(mp_int *mp, mp_digit d);
100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_set_int(mp_int *mp, long z);
101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_shrink(mp_int *a);
102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Single digit arithmetic                                                */
106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_add_d(mp_int *a, mp_digit d, mp_int *b);
108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_sub_d(mp_int *a, mp_digit d, mp_int *b);
109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mul_d(mp_int *a, mp_digit d, mp_int *b);
110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mul_2(mp_int *a, mp_int *c);
111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_div_d(mp_int *a, mp_digit d, mp_int *q, mp_digit *r);
112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_div_2(mp_int *a, mp_int *c);
113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_expt_d(mp_int *a, mp_digit d, mp_int *c);
114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Sign manipulations                                                     */
117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_abs(mp_int *a, mp_int *b);
119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_neg(mp_int *a, mp_int *b);
120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Full arithmetic                                                        */
123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_add(mp_int *a, mp_int *b, mp_int *c);
125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_sub(mp_int *a, mp_int *b, mp_int *c);
126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mul(mp_int *a, mp_int *b, mp_int *c);
127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mul_2d(mp_int *a, mp_digit d, mp_int *c);
128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_SQUARE
129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_sqr(mp_int *a, mp_int *b);
130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_sqr(a, b) mp_mul(a, a, b)
132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_div(mp_int *a, mp_int *b, mp_int *q, mp_int *r);
134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_div_2d(mp_int *a, mp_digit d, mp_int *q, mp_int *r);
135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_expt(mp_int *a, mp_int *b, mp_int *c);
136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_2expt(mp_int *a, mp_digit k);
137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_sqrt(mp_int *a, mp_int *b);
138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Modular arithmetic                                                     */
141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_MODARITH
143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mod(mp_int *a, mp_int *m, mp_int *c);
144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mod_d(mp_int *a, mp_digit d, mp_digit *c);
145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_addmod(mp_int *a, mp_int *b, mp_int *m, mp_int *c);
146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_submod(mp_int *a, mp_int *b, mp_int *m, mp_int *c);
147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_mulmod(mp_int *a, mp_int *b, mp_int *m, mp_int *c);
148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_SQUARE
149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_sqrmod(mp_int *a, mp_int *m, mp_int *c);
150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_sqrmod(a, m, c) mp_mulmod(a, a, m, c)
152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_exptmod(mp_int *a, mp_int *b, mp_int *m, mp_int *c);
154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_exptmod_d(mp_int *a, mp_digit d, mp_int *m, mp_int *c);
155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* MP_MODARITH */
156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Comparisons                                                            */
159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_cmp_z(mp_int *a);
161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_cmp_d(mp_int *a, mp_digit d);
162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_cmp(mp_int *a, mp_int *b);
163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_cmp_mag(mp_int *a, mp_int *b);
164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_cmp_int(mp_int *a, long z);
165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_isodd(mp_int *a);
166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_iseven(mp_int *a);
167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Number theoretic                                                       */
170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_NUMTH
172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_gcd(mp_int *a, mp_int *b, mp_int *c);
173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_lcm(mp_int *a, mp_int *b, mp_int *c);
174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_xgcd(mp_int *a, mp_int *b, mp_int *g, mp_int *x, mp_int *y);
175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_invmod(mp_int *a, mp_int *m, mp_int *c);
176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* end MP_NUMTH */
177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Input and output                                                       */
180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_IOFUNC
182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid   mp_print(mp_int *mp, FILE *ofp);
183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* end MP_IOFUNC */
184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Base conversion                                                        */
187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define BITS     1
189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define BYTES    CHAR_BIT
190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_read_signed_bin(mp_int *mp, unsigned char *str, int len);
192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_signed_bin_size(mp_int *mp);
193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_to_signed_bin(mp_int *mp, unsigned char *str);
194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_read_unsigned_bin(mp_int *mp, unsigned char *str, int len);
196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_unsigned_bin_size(mp_int *mp);
197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_to_unsigned_bin(mp_int *mp, unsigned char *str);
198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_count_bits(mp_int *mp);
200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if MP_COMPAT_MACROS
202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_read_raw(mp, str, len) mp_read_signed_bin((mp), (str), (len))
203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_raw_size(mp)           mp_signed_bin_size(mp)
204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_toraw(mp, str)         mp_to_signed_bin((mp), (str))
205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_read_mag(mp, str, len) mp_read_unsigned_bin((mp), (str), (len))
206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_mag_size(mp)           mp_unsigned_bin_size(mp)
207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_tomag(mp, str)         mp_to_unsigned_bin((mp), (str))
208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_read_radix(mp_int *mp, unsigned char *str, int radix);
211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_radix_size(mp_int *mp, int radix);
212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_value_radix_size(int num, int qty, int radix);
213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_err mp_toradix(mp_int *mp, unsigned char *str, int radix);
214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint    mp_char2value(char ch, int r);
216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_tobinary(M, S)  mp_toradix((M), (S), 2)
218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_tooctal(M, S)   mp_toradix((M), (S), 8)
219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_todecimal(M, S) mp_toradix((M), (S), 10)
220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define mp_tohex(M, S)     mp_toradix((M), (S), 16)
221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*------------------------------------------------------------------------*/
223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Error strings                                                          */
224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectconst  char  *mp_strerror(mp_err ec);
226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* end _H_MPI_ */
228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtommath/mtest/mpi.h,v $ */
230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.2 $ */
231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2005/05/05 14:38:47 $ */
232