/home/dko/projects/mobilec/tags/MobileC-v1.10.2/MobileC-v1.10.2/src/security/xyssl-0.9/include/xyssl/bignum.h

Go to the documentation of this file.
00001 
00004 #ifndef XYSSL_BIGNUM_H
00005 #define XYSSL_BIGNUM_H
00006 
00007 #include <stdio.h>
00008 
00009 #define XYSSL_ERR_MPI_FILE_IO_ERROR                     -0x0002
00010 #define XYSSL_ERR_MPI_BAD_INPUT_DATA                    -0x0004
00011 #define XYSSL_ERR_MPI_INVALID_CHARACTER                 -0x0006
00012 #define XYSSL_ERR_MPI_BUFFER_TOO_SMALL                  -0x0008
00013 #define XYSSL_ERR_MPI_NEGATIVE_VALUE                    -0x000A
00014 #define XYSSL_ERR_MPI_DIVISION_BY_ZERO                  -0x000C
00015 #define XYSSL_ERR_MPI_NOT_ACCEPTABLE                    -0x000E
00016 
00017 #define MPI_CHK(f) if( ( ret = f ) != 0 ) goto cleanup
00018 
00019 /*
00020  * Define the base integer type, architecture-wise
00021  */
00022 #if defined(XYSSL_HAVE_INT8)
00023 typedef unsigned char  t_int;
00024 typedef unsigned short t_dbl;
00025 #else
00026 #if defined(XYSSL_HAVE_INT16)
00027 typedef unsigned short t_int;
00028 typedef unsigned long  t_dbl;
00029 #else
00030   typedef unsigned long t_int;
00031   #if defined(_MSC_VER) && defined(_M_IX86)
00032   typedef unsigned __int64 t_dbl;
00033   #else
00034     #if defined(__amd64__) || defined(__x86_64__)    || \
00035         defined(__ppc64__) || defined(__powerpc64__) || \
00036         defined(__ia64__)  || defined(__alpha__)
00037     typedef unsigned int t_dbl __attribute__((mode(TI)));
00038     #else
00039     typedef unsigned long long t_dbl;
00040     #endif
00041   #endif
00042 #endif
00043 #endif
00044 
00048 typedef struct
00049 {
00050     int s;              
00051     int n;              
00052     t_int *p;           
00053 }
00054 mpi;
00055 
00056 #ifdef __cplusplus
00057 extern "C" {
00058 #endif
00059 
00063 void mpi_init( mpi *X, ... );
00064 
00068 void mpi_free( mpi *X, ... );
00069 
00076 int mpi_grow( mpi *X, int nblimbs );
00077 
00084 int mpi_copy( mpi *X, mpi *Y );
00085 
00089 void mpi_swap( mpi *X, mpi *Y );
00090 
00097 int mpi_lset( mpi *X, int z );
00098 
00102 int mpi_lsb( mpi *X );
00103 
00107 int mpi_msb( mpi *X );
00108 
00112 int mpi_size( mpi *X );
00113 
00123 int mpi_read_string( mpi *X, int radix, char *s );
00124 
00138 int mpi_write_string( mpi *X, int radix, char *s, int *slen );
00139 
00149 int mpi_read_file( mpi *X, int radix, FILE *fin );
00150 
00163 int mpi_write_file( char *p, mpi *X, int radix, FILE *fout );
00164 
00175 int mpi_read_binary( mpi *X, unsigned char *buf, int buflen );
00176 
00190 int mpi_write_binary( mpi *X, unsigned char *buf, int buflen );
00191 
00198 int mpi_shift_l( mpi *X, int count );
00199 
00206 int mpi_shift_r( mpi *X, int count );
00207 
00215 int mpi_cmp_abs( mpi *X, mpi *Y );
00216 
00224 int mpi_cmp_mpi( mpi *X, mpi *Y );
00225 
00233 int mpi_cmp_int( mpi *X, int z );
00234 
00241 int mpi_add_abs( mpi *X, mpi *A, mpi *B );
00242 
00249 int mpi_sub_abs( mpi *X, mpi *A, mpi *B );
00250 
00257 int mpi_add_mpi( mpi *X, mpi *A, mpi *B );
00258 
00265 int mpi_sub_mpi( mpi *X, mpi *A, mpi *B );
00266 
00273 int mpi_add_int( mpi *X, mpi *A, int b );
00274 
00281 int mpi_sub_int( mpi *X, mpi *A, int b );
00282 
00289 int mpi_mul_mpi( mpi *X, mpi *A, mpi *B );
00290 
00297 int mpi_mul_int( mpi *X, mpi *A, t_int b );
00298 
00308 int mpi_div_mpi( mpi *Q, mpi *R, mpi *A, mpi *B );
00309 
00319 int mpi_div_int( mpi *Q, mpi *R, mpi *A, int b );
00320 
00328 int mpi_mod_mpi( mpi *R, mpi *A, mpi *B );
00329 
00337 int mpi_mod_int( t_int *r, mpi *A, int b );
00338 
00350 int mpi_exp_mod( mpi *X, mpi *A, mpi *E, mpi *N, mpi *_RR );
00351 
00358 int mpi_gcd( mpi *G, mpi *A, mpi *B );
00359 
00368 int mpi_inv_mod( mpi *X, mpi *A, mpi *N );
00369 
00377 int mpi_is_prime( mpi *X, int (*f_rng)(void *), void *p_rng );
00378 
00392 int mpi_gen_prime( mpi *X, int nbits, int dh_flag,
00393                    int (*f_rng)(void *), void *p_rng );
00394 
00400 int mpi_self_test( int verbose );
00401 
00402 #ifdef __cplusplus
00403 }
00404 #endif
00405 
00406 #endif /* bignum.h */

Generated on Fri Jul 11 17:59:45 2008 for Mobile-C by  doxygen 1.5.4