diff --git a/include/cipher.h b/include/cipher.h index dd4af18cb..6ef6e6829 100644 --- a/include/cipher.h +++ b/include/cipher.h @@ -1,217 +1,217 @@ /* cipher.h * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, * 2008 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GNUPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef G10_CIPHER_H #define G10_CIPHER_H #define DBG_CIPHER g10c_debug_mode #include "mpi.h" #include "../cipher/random.h" #define CIPHER_ALGO_NONE 0 #define CIPHER_ALGO_IDEA 1 #define CIPHER_ALGO_3DES 2 #define CIPHER_ALGO_CAST5 3 #define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */ /* 5 & 6 are reserved */ #define CIPHER_ALGO_AES 7 #define CIPHER_ALGO_AES192 8 #define CIPHER_ALGO_AES256 9 #define CIPHER_ALGO_TWOFISH 10 /* twofish 256 bit */ #define CIPHER_ALGO_CAMELLIA128 11 #define CIPHER_ALGO_CAMELLIA192 12 #define CIPHER_ALGO_CAMELLIA256 13 #define CIPHER_ALGO_DUMMY 110 /* no encryption at all */ #define PUBKEY_ALGO_RSA 1 #define PUBKEY_ALGO_RSA_E 2 /* RSA encrypt only */ #define PUBKEY_ALGO_RSA_S 3 /* RSA sign only */ #define PUBKEY_ALGO_ELGAMAL_E 16 /* encrypt only ElGamal (but not for v3)*/ #define PUBKEY_ALGO_DSA 17 #define PUBKEY_ALGO_ECDH 18 #define PUBKEY_ALGO_ECDSA 19 #define PUBKEY_ALGO_ELGAMAL 20 /* sign and encrypt elgamal */ #define PUBKEY_ALGO_ECC 22 /* Generic ECC. */ #define PUBKEY_USAGE_SIG 1 /* key is good for signatures */ #define PUBKEY_USAGE_ENC 2 /* key is good for encryption */ #define PUBKEY_USAGE_CERT 4 /* key is also good to certify other keys*/ #define PUBKEY_USAGE_AUTH 8 /* key is good for authentication */ #define PUBKEY_USAGE_UNKNOWN 128 /* key has an unknown usage bit */ #define PUBKEY_USAGE_NONE 256 /* No usage given. */ #define DIGEST_ALGO_MD5 1 #define DIGEST_ALGO_SHA1 2 #define DIGEST_ALGO_RMD160 3 /* 4, 5, 6, and 7 are reserved */ #define DIGEST_ALGO_SHA256 8 #define DIGEST_ALGO_SHA384 9 #define DIGEST_ALGO_SHA512 10 #define DIGEST_ALGO_SHA224 11 #define COMPRESS_ALGO_NONE 0 #define COMPRESS_ALGO_ZIP 1 #define COMPRESS_ALGO_ZLIB 2 #define COMPRESS_ALGO_BZIP2 3 #define is_RSA(a) ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \ || (a)==PUBKEY_ALGO_RSA_S ) #define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL_E) #define is_DSA(a) ((a)==PUBKEY_ALGO_DSA) typedef struct { int algo; int keylen; int algo_info_printed; int use_mdc; int symmetric; byte key[32]; /* this is the largest used keylen (256 bit) */ } DEK; struct cipher_handle_s; typedef struct cipher_handle_s *CIPHER_HANDLE; #define CIPHER_MODE_ECB 1 #define CIPHER_MODE_CFB 2 #define CIPHER_MODE_PHILS_CFB 3 #define CIPHER_MODE_AUTO_CFB 4 #define CIPHER_MODE_DUMMY 5 /* used with algo DUMMY for no encryption */ #define CIPHER_MODE_CBC 6 struct md_digest_list_s; struct gcry_md_context { int secure; FILE *debug; int finalized; struct md_digest_list_s *list; int bufcount; int bufsize; byte buffer[1]; }; typedef struct gcry_md_context *MD_HANDLE; #ifndef EXTERN_UNLESS_MAIN_MODULE -#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) +#if !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int g10c_debug_mode; EXTERN_UNLESS_MAIN_MODULE int g10_opt_verbose; EXTERN_UNLESS_MAIN_MODULE const char *g10_opt_homedir; /*-- dynload.c --*/ void register_cipher_extension( const char *mainpgm, const char *fname ); /*-- md.c --*/ int string_to_digest_algo( const char *string ); const char * digest_algo_to_string( int algo ); int check_digest_algo( int algo ); MD_HANDLE md_open( int algo, int secure ); void md_enable( MD_HANDLE hd, int algo ); MD_HANDLE md_copy( MD_HANDLE a ); void md_reset( MD_HANDLE a ); void md_close(MD_HANDLE a); void md_write( MD_HANDLE a, const byte *inbuf, size_t inlen); void md_final(MD_HANDLE a); byte *md_read( MD_HANDLE a, int algo ); int md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen ); int md_get_algo( MD_HANDLE a ); int md_algo_present( MD_HANDLE a, int algo ); int md_digest_length( int algo ); const byte *md_asn_oid( int algo, size_t *asnlen, size_t *mdlen ); void md_start_debug( MD_HANDLE a, const char *suffix ); void md_stop_debug( MD_HANDLE a ); #define md_is_secure(a) ((a)->secure) #define md_putc(h,c) \ do { \ if( (h)->bufcount == (h)->bufsize ) \ md_write( (h), NULL, 0 ); \ (h)->buffer[(h)->bufcount++] = (c) & 0xff; \ } while(0) void rmd160_hash_buffer (char *outbuf, const char *buffer, size_t length); void sha1_hash_buffer (char *outbuf, const char *buffer, size_t length); /*-- cipher.c --*/ int string_to_cipher_algo( const char *string ); const char * cipher_algo_to_string( int algo ); void disable_cipher_algo( int algo ); int check_cipher_algo( int algo ); unsigned cipher_get_keylen( int algo ); unsigned cipher_get_blocksize( int algo ); CIPHER_HANDLE cipher_open( int algo, int mode, int secure ); void cipher_close( CIPHER_HANDLE c ); int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ); void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ); void cipher_encrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes ); void cipher_decrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes ); void cipher_sync( CIPHER_HANDLE c ); /*-- pubkey.c --*/ #define PUBKEY_MAX_NPKEY 4 #define PUBKEY_MAX_NSKEY 6 #define PUBKEY_MAX_NSIG 2 #define PUBKEY_MAX_NENC 2 int string_to_pubkey_algo( const char *string ); const char * pubkey_algo_to_string( int algo ); void disable_pubkey_algo( int algo ); int check_pubkey_algo( int algo ); int check_pubkey_algo2( int algo, unsigned use ); int pubkey_get_npkey( int algo ); int pubkey_get_nskey( int algo ); int pubkey_get_nsig( int algo ); int pubkey_get_nenc( int algo ); unsigned pubkey_nbits( int algo, MPI *pkey ); int pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int dsa2_generate( int algo, unsigned nbits, unsigned qbits, MPI *skey, MPI **retfactors ); int pubkey_check_secret_key( int algo, MPI *skey ); int pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ); int pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey ); int pubkey_sign( int algo, MPI *resarr, MPI hash, MPI *skey ); int pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey ); /*-- smallprime.c --*/ extern ushort small_prime_numbers[]; /*-- primegen.c --*/ void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ); MPI generate_secret_prime( unsigned nbits ); MPI generate_public_prime( unsigned nbits ); MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, MPI g, MPI **factors ); /*-- elsewhere --*/ void register_pk_dsa_progress ( void (*cb)( void *, int), void *cb_data ); void register_pk_elg_progress ( void (*cb)( void *, int), void *cb_data ); #endif /*G10_CIPHER_H*/ diff --git a/include/iobuf.h b/include/iobuf.h index 030f8c8e9..dfa96b286 100644 --- a/include/iobuf.h +++ b/include/iobuf.h @@ -1,160 +1,160 @@ /* iobuf.h - I/O buffer * Copyright (C) 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GNUPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef G10_IOBUF_H #define G10_IOBUF_H #include "types.h" #define DBG_IOBUF iobuf_debug_mode #define IOBUFCTRL_INIT 1 #define IOBUFCTRL_FREE 2 #define IOBUFCTRL_UNDERFLOW 3 #define IOBUFCTRL_FLUSH 4 #define IOBUFCTRL_DESC 5 #define IOBUFCTRL_CANCEL 6 #define IOBUFCTRL_USER 16 typedef struct iobuf_struct *IOBUF; typedef struct iobuf_struct *iobuf_t; /* fixme: we should hide most of this stuff */ struct iobuf_struct { int use; /* 1 input , 2 output, 3 temp */ off_t nlimit; off_t nbytes; /* used together with nlimit */ off_t ntotal; /* total bytes read (position of stream) */ int nofast; /* used by the iobuf_get() */ void *directfp; struct { size_t size; /* allocated size */ size_t start; /* number of invalid bytes at the begin of the buffer */ size_t len; /* currently filled to this size */ byte *buf; } d; int filter_eof; int error; int (*filter)( void *opaque, int control, IOBUF chain, byte *buf, size_t *len); void *filter_ov; /* value for opaque */ int filter_ov_owner; char *real_fname; IOBUF chain; /* next iobuf used for i/o if any (passed to filter) */ int no, subno; void *opaque; /* can be used to hold any information */ /* this value is copied to all instances */ struct { size_t size; /* allocated size */ size_t start; /* number of invalid bytes at the begin of the buffer */ size_t len; /* currently filled to this size */ byte *buf; } unget; }; #ifndef EXTERN_UNLESS_MAIN_MODULE -#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) +#if !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode; void iobuf_enable_special_filenames ( int yes ); int iobuf_is_pipe_filename (const char *fname); IOBUF iobuf_alloc(int use, size_t bufsize); IOBUF iobuf_temp(void); IOBUF iobuf_temp_with_content( const char *buffer, size_t length ); IOBUF iobuf_open( const char *fname ); IOBUF iobuf_fdopen( int fd, const char *mode ); IOBUF iobuf_sockopen( int fd, const char *mode ); IOBUF iobuf_create( const char *fname ); IOBUF iobuf_append( const char *fname ); IOBUF iobuf_openrw( const char *fname ); int iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval ); int iobuf_close( IOBUF iobuf ); int iobuf_cancel( IOBUF iobuf ); int iobuf_push_filter( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov ); int iobuf_push_filter2( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov, int rel_ov ); int iobuf_flush(IOBUF a); void iobuf_clear_eof(IOBUF a); #define iobuf_set_error(a) do { (a)->error = 1; } while(0) #define iobuf_error(a) ((a)->error) void iobuf_set_limit( IOBUF a, off_t nlimit ); off_t iobuf_tell( IOBUF a ); int iobuf_seek( IOBUF a, off_t newpos ); int iobuf_readbyte(IOBUF a); int iobuf_read(IOBUF a, byte *buf, unsigned buflen ); unsigned iobuf_read_line( IOBUF a, byte **addr_of_buffer, unsigned *length_of_buffer, unsigned *max_length ); int iobuf_peek(IOBUF a, byte *buf, unsigned buflen ); int iobuf_writebyte(IOBUF a, unsigned c); int iobuf_write(IOBUF a, byte *buf, unsigned buflen ); int iobuf_writestr(IOBUF a, const char *buf ); void iobuf_flush_temp( IOBUF temp ); int iobuf_write_temp( IOBUF a, IOBUF temp ); size_t iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen ); void iobuf_unget_and_close_temp( IOBUF a, IOBUF temp ); int iobuf_get_fd (IOBUF a); off_t iobuf_get_filelength (IOBUF a, int *overflow); #define IOBUF_FILELENGTH_LIMIT 0xffffffff const char *iobuf_get_real_fname( IOBUF a ); const char *iobuf_get_fname( IOBUF a ); void iobuf_set_partial_block_mode( IOBUF a, size_t len ); int iobuf_translate_file_handle ( int fd, int for_write ); /* Get a byte form the iobuf; must check for eof prior to this function. * This function returns values in the range 0 .. 255 or -1 to indicate EOF * iobuf_get_noeof() does not return -1 to indicate EOF, but masks the * returned value to be in the range 0..255. */ #define iobuf_get(a) \ ( ((a)->nofast || (a)->d.start >= (a)->d.len )? \ iobuf_readbyte((a)) : ( (a)->nbytes++, (a)->d.buf[(a)->d.start++] ) ) #define iobuf_get_noeof(a) (iobuf_get((a))&0xff) /* write a byte to the iobuf and return true on write error * This macro does only write the low order byte */ #define iobuf_put(a,c) iobuf_writebyte(a,c) #define iobuf_where(a) "[don't know]" #define iobuf_id(a) ((a)->no) #define iobuf_get_temp_buffer(a) ( (a)->d.buf ) #define iobuf_get_temp_length(a) ( (a)->d.len ) #define iobuf_is_temp(a) ( (a)->use == 3 ) void iobuf_skip_rest (IOBUF a, unsigned long n, int partial); #endif /*G10_IOBUF_H*/ diff --git a/include/memory.h b/include/memory.h index d414a9b2e..6698337e3 100644 --- a/include/memory.h +++ b/include/memory.h @@ -1,105 +1,105 @@ /* memory.h - memory allocation * Copyright (C) 1998, 1999, 2000, 2001, 2005 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GNUPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef G10_MEMORY_H #define G10_MEMORY_H #ifdef M_DEBUG #ifndef STR #define STR(v) #v #endif #ifndef __riscos__ #define M_DBGINFO(a) __FUNCTION__ "["__FILE__ ":" STR(a) "]" #else /* __riscos__ */ #define M_DBGINFO(a) "["__FILE__ ":" STR(a) "]" #endif /* __riscos__ */ #define xmalloc(n) m_debug_alloc((n), M_DBGINFO( __LINE__ ) ) #define xtrymalloc(n) m_debug_trymalloc ((n), M_DBGINFO( __LINE__ )) #define xmalloc_clear(n) m_debug_alloc_clear((n), M_DBGINFO(__LINE__) ) #define xmalloc_secure(n) m_debug_alloc_secure(n), M_DBGINFO(__LINE__) ) #define xmalloc_secure_clear(n) m_debug_alloc_secure_clear((n), M_DBGINFO(__LINE__) ) #define xrealloc(n,m) m_debug_realloc((n),(m), M_DBGINFO(__LINE__) ) #define xfree(n) m_debug_free((n), M_DBGINFO(__LINE__) ) #define m_check(n) m_debug_check((n), M_DBGINFO(__LINE__) ) /*#define m_copy(a) m_debug_copy((a), M_DBGINFO(__LINE__) )*/ #define xstrdup(a) m_debug_strdup((a), M_DBGINFO(__LINE__) ) #define xtrystrdup(a) m_debug_trystrdup((a), M_DBGINFO(__LINE__) ) void *m_debug_alloc( size_t n, const char *info ); void *m_debug_trymalloc (size_t n, const char *info); void *m_debug_alloc_clear( size_t n, const char *info ); void *m_debug_alloc_secure( size_t n, const char *info ); void *m_debug_alloc_secure_clear( size_t n, const char *info ); void *m_debug_realloc( void *a, size_t n, const char *info ); void m_debug_free( void *p, const char *info ); void m_debug_check( const void *a, const char *info ); /*void *m_debug_copy( const void *a, const char *info );*/ char *m_debug_strdup( const char *a, const char *info ); char *m_debug_trystrdup (const char *a, const char *info); #else void *xmalloc( size_t n ); void *xtrymalloc (size_t n); void *xmalloc_clear( size_t n ); void *xmalloc_secure( size_t n ); void *xmalloc_secure_clear( size_t n ); void *xrealloc( void *a, size_t n ); void xfree( void *p ); void m_check( const void *a ); /*void *m_copy( const void *a );*/ char *xstrdup( const char * a); char *xtrystrdup (const char *a); #endif size_t m_size( const void *a ); void m_print_stats(const char *prefix); /* The follwing functions should be preferred over xmalloc_clear. */ void *xcalloc (size_t n, size_t m); void *xcalloc_secure (size_t n, size_t m); /*-- secmem.c --*/ int secmem_init( size_t npool ); void secmem_term( void ); void *secmem_malloc( size_t size ); void *secmexrealloc( void *a, size_t newsize ); void secmem_free( void *a ); int m_is_secure( const void *p ); void secmem_dump_stats(void); void secmem_set_flags( unsigned flags ); unsigned secmem_get_flags(void); #define DBG_MEMORY memory_debug_mode #define DBG_MEMSTAT memory_stat_debug_mode #ifndef EXTERN_UNLESS_MAIN_MODULE -#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) +#if !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int memory_debug_mode; EXTERN_UNLESS_MAIN_MODULE int memory_stat_debug_mode; #endif /*G10_MEMORY_H*/ diff --git a/include/mpi.h b/include/mpi.h index a4c16f5af..7a45ff805 100644 --- a/include/mpi.h +++ b/include/mpi.h @@ -1,170 +1,170 @@ /* mpi.h - Multi Precision Integers * Copyright (C) 1994, 1996, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GNUPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Note: This code is heavily based on the GNU MP Library. * Actually it's the same code with only minor changes in the * way the data is stored; this is to support the abstraction * of an optional secure memory allocation which may be used * to avoid revealing of sensitive data due to paging etc. * The GNU MP Library itself is published under the LGPL; * however I decided to publish this code under the plain GPL. */ #ifndef G10_MPI_H #define G10_MPI_H #include #include #include "iobuf.h" #include "types.h" #include "memory.h" #ifndef EXTERN_UNLESS_MAIN_MODULE -#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) +#if !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif #define DBG_MPI mpi_debug_mode EXTERN_UNLESS_MAIN_MODULE int mpi_debug_mode; struct gcry_mpi; typedef struct gcry_mpi *MPI; /*-- mpiutil.c --*/ #ifdef M_DEBUG #define mpi_alloc(n) mpi_debug_alloc((n), M_DBGINFO( __LINE__ ) ) #define mpi_alloc_secure(n) mpi_debug_alloc_secure((n), M_DBGINFO( __LINE__ ) ) #define mpi_alloc_like(n) mpi_debug_alloc_like((n), M_DBGINFO( __LINE__ ) ) #define mpi_free(a) mpi_debug_free((a), M_DBGINFO(__LINE__) ) #define mpi_resize(a,b) mpi_debug_resize((a),(b), M_DBGINFO(__LINE__) ) #define mpi_copy(a) mpi_debug_copy((a), M_DBGINFO(__LINE__) ) MPI mpi_debug_alloc( unsigned nlimbs, const char *info ); MPI mpi_debug_alloc_secure( unsigned nlimbs, const char *info ); MPI mpi_debug_alloc_like( MPI a, const char *info ); void mpi_debug_free( MPI a, const char *info ); void mpi_debug_resize( MPI a, unsigned nlimbs, const char *info ); MPI mpi_debug_copy( MPI a, const char *info ); #else MPI mpi_alloc( unsigned nlimbs ); MPI mpi_alloc_secure( unsigned nlimbs ); MPI mpi_alloc_like( MPI a ); void mpi_free( MPI a ); void mpi_resize( MPI a, unsigned nlimbs ); MPI mpi_copy( MPI a ); #endif #define mpi_is_opaque(a) ((a) && (mpi_get_flags (a)&4)) MPI mpi_set_opaque( MPI a, void *p, unsigned int len ); void *mpi_get_opaque( MPI a, unsigned int *len ); #define mpi_is_secure(a) ((a) && (mpi_get_flags (a)&1)) void mpi_set_secure( MPI a ); void mpi_clear( MPI a ); void mpi_set( MPI w, MPI u); void mpi_set_cond( MPI w, MPI u, unsigned long set); void mpi_set_ui( MPI w, ulong u); MPI mpi_alloc_set_ui( unsigned long u); void mpi_m_check( MPI a ); void mpi_swap( MPI a, MPI b); int mpi_get_nlimbs (MPI a); int mpi_is_neg (MPI a); unsigned int mpi_nlimb_hint_from_nbytes (unsigned int nbytes); unsigned int mpi_nlimb_hint_from_nbits (unsigned int nbits); unsigned int mpi_get_flags (MPI a); /*-- mpicoder.c --*/ int mpi_write( IOBUF out, MPI a ); #ifdef M_DEBUG #define mpi_read(a,b,c) mpi_debug_read((a),(b),(c), M_DBGINFO( __LINE__ ) ) MPI mpi_debug_read(IOBUF inp, unsigned *nread, int secure, const char *info); #else MPI mpi_read(IOBUF inp, unsigned *nread, int secure); #endif MPI mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure); int mpi_fromstr(MPI val, const char *str); int mpi_print( FILE *fp, MPI a, int mode ); void g10_log_mpidump( const char *text, MPI a ); u32 mpi_get_keyid( MPI a, u32 *keyid ); byte *mpi_get_buffer( MPI a, unsigned *nbytes, int *sign ); byte *mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign ); void mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign ); #define log_mpidump g10_log_mpidump /*-- mpi-add.c --*/ void mpi_add_ui(MPI w, MPI u, ulong v ); void mpi_add(MPI w, MPI u, MPI v); void mpi_addm(MPI w, MPI u, MPI v, MPI m); void mpi_sub_ui(MPI w, MPI u, ulong v ); void mpi_sub( MPI w, MPI u, MPI v); void mpi_subm( MPI w, MPI u, MPI v, MPI m); /*-- mpi-mul.c --*/ void mpi_mul_ui(MPI w, MPI u, ulong v ); void mpi_mul_2exp( MPI w, MPI u, ulong cnt); void mpi_mul( MPI w, MPI u, MPI v); void mpi_mulm( MPI w, MPI u, MPI v, MPI m); /*-- mpi-div.c --*/ ulong mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor ); void mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor ); void mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor ); void mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor ); void mpi_tdiv_r( MPI rem, MPI num, MPI den); void mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den); void mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count ); int mpi_divisible_ui(MPI dividend, ulong divisor ); /*-- mpi-gcd.c --*/ int mpi_gcd( MPI g, MPI a, MPI b ); /*-- mpi-pow.c --*/ void mpi_pow( MPI w, MPI u, MPI v); void mpi_powm( MPI res, MPI base, MPI exponent, MPI mod); /*-- mpi-mpow.c --*/ void mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI mod); /*-- mpi-cmp.c --*/ int mpi_cmp_ui( MPI u, ulong v ); int mpi_cmp( MPI u, MPI v ); /*-- mpi-scan.c --*/ int mpi_getbyte( MPI a, unsigned idx ); void mpi_putbyte( MPI a, unsigned idx, int value ); unsigned mpi_trailing_zeros( MPI a ); /*-- mpi-bit.c --*/ void mpi_normalize( MPI a ); unsigned mpi_get_nbits( MPI a ); int mpi_test_bit( MPI a, unsigned n ); void mpi_set_bit( MPI a, unsigned n ); void mpi_set_highbit( MPI a, unsigned n ); void mpi_clear_highbit( MPI a, unsigned n ); void mpi_clear_bit( MPI a, unsigned n ); void mpi_rshift( MPI x, MPI a, unsigned n ); /*-- mpi-inv.c --*/ void mpi_invm( MPI x, MPI u, MPI v ); #endif /*G10_MPI_H*/