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