/home/dko/projects/mobilec/trunk/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 Tue Oct 28 17:03:22 2008 for Mobile-C by doxygen 1.5.5

AltStyle によって変換されたページ (->オリジナル) /