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