@@ -40,35 +40,122 @@ struct gcry_mpi {
4040typedef struct gcry_mpi * MPI ;
4141
4242#define mpi_get_nlimbs (a ) ((a)->nlimbs)
43+ #define mpi_has_sign (a ) ((a)->sign)
4344
4445/*-- mpiutil.c --*/
4546MPI mpi_alloc (unsigned nlimbs );
47+ void mpi_clear (MPI a );
4648void mpi_free (MPI a );
4749int mpi_resize (MPI a , unsigned nlimbs );
4850
51+ static inline MPI mpi_new (unsigned int nbits )
52+ {
53+ return mpi_alloc ((nbits + BITS_PER_MPI_LIMB - 1 ) / BITS_PER_MPI_LIMB );
54+ }
55+
56+ MPI mpi_copy (MPI a );
57+ MPI mpi_alloc_like (MPI a );
58+ void mpi_snatch (MPI w , MPI u );
59+ MPI mpi_set (MPI w , MPI u );
60+ MPI mpi_set_ui (MPI w , unsigned long u );
61+ MPI mpi_alloc_set_ui (unsigned long u );
62+ void mpi_swap_cond (MPI a , MPI b , unsigned long swap );
63+
64+ /* Constants used to return constant MPIs. See mpi_init if you
65+ * want to add more constants.
66+ */
67+ #define MPI_NUMBER_OF_CONSTANTS 6
68+ enum gcry_mpi_constants {
69+ MPI_C_ZERO ,
70+ MPI_C_ONE ,
71+ MPI_C_TWO ,
72+ MPI_C_THREE ,
73+ MPI_C_FOUR ,
74+ MPI_C_EIGHT
75+ };
76+
77+ MPI mpi_const (enum gcry_mpi_constants no );
78+
4979/*-- mpicoder.c --*/
80+
81+ /* Different formats of external big integer representation. */
82+ enum gcry_mpi_format {
83+ GCRYMPI_FMT_NONE = 0 ,
84+ GCRYMPI_FMT_STD = 1 , /* Twos complement stored without length. */
85+ GCRYMPI_FMT_PGP = 2 , /* As used by OpenPGP (unsigned only). */
86+ GCRYMPI_FMT_SSH = 3 , /* As used by SSH (like STD but with length). */
87+ GCRYMPI_FMT_HEX = 4 , /* Hex format. */
88+ GCRYMPI_FMT_USG = 5 , /* Like STD but unsigned. */
89+ GCRYMPI_FMT_OPAQUE = 8 /* Opaque format (some functions only). */
90+ };
91+
5092MPI mpi_read_raw_data (const void * xbuffer , size_t nbytes );
5193MPI mpi_read_from_buffer (const void * buffer , unsigned * ret_nread );
94+ int mpi_fromstr (MPI val , const char * str );
95+ MPI mpi_scanval (const char * string );
5296MPI mpi_read_raw_from_sgl (struct scatterlist * sgl , unsigned int len );
5397void * mpi_get_buffer (MPI a , unsigned * nbytes , int * sign );
5498int mpi_read_buffer (MPI a , uint8_t * buf , unsigned buf_len , unsigned * nbytes ,
5599 int * sign );
56100int mpi_write_to_sgl (MPI a , struct scatterlist * sg , unsigned nbytes ,
57101 int * sign );
102+ int mpi_print (enum gcry_mpi_format format , unsigned char * buffer ,
103+ size_t buflen , size_t * nwritten , MPI a );
104+
105+ /*-- mpi-mod.c --*/
106+ void mpi_mod (MPI rem , MPI dividend , MPI divisor );
107+
108+ /* Context used with Barrett reduction. */
109+ struct barrett_ctx_s ;
110+ typedef struct barrett_ctx_s * mpi_barrett_t ;
111+
112+ mpi_barrett_t mpi_barrett_init (MPI m , int copy );
113+ void mpi_barrett_free (mpi_barrett_t ctx );
114+ void mpi_mod_barrett (MPI r , MPI x , mpi_barrett_t ctx );
115+ void mpi_mul_barrett (MPI w , MPI u , MPI v , mpi_barrett_t ctx );
58116
59117/*-- mpi-pow.c --*/
60118int mpi_powm (MPI res , MPI base , MPI exp , MPI mod );
61119
62120/*-- mpi-cmp.c --*/
63121int mpi_cmp_ui (MPI u , ulong v );
64122int mpi_cmp (MPI u , MPI v );
123+ int mpi_cmpabs (MPI u , MPI v );
65124
66125/*-- mpi-sub-ui.c --*/
67126int mpi_sub_ui (MPI w , MPI u , unsigned long vval );
68127
69128/*-- mpi-bit.c --*/
70129void mpi_normalize (MPI a );
71130unsigned mpi_get_nbits (MPI a );
131+ int mpi_test_bit (MPI a , unsigned int n );
132+ void mpi_set_bit (MPI a , unsigned int n );
133+ void mpi_set_highbit (MPI a , unsigned int n );
134+ void mpi_clear_highbit (MPI a , unsigned int n );
135+ void mpi_clear_bit (MPI a , unsigned int n );
136+ void mpi_rshift_limbs (MPI a , unsigned int count );
137+ void mpi_rshift (MPI x , MPI a , unsigned int n );
138+ void mpi_lshift_limbs (MPI a , unsigned int count );
139+ void mpi_lshift (MPI x , MPI a , unsigned int n );
140+
141+ /*-- mpi-add.c --*/
142+ void mpi_add_ui (MPI w , MPI u , unsigned long v );
143+ void mpi_add (MPI w , MPI u , MPI v );
144+ void mpi_sub (MPI w , MPI u , MPI v );
145+ void mpi_addm (MPI w , MPI u , MPI v , MPI m );
146+ void mpi_subm (MPI w , MPI u , MPI v , MPI m );
147+
148+ /*-- mpi-mul.c --*/
149+ void mpi_mul (MPI w , MPI u , MPI v );
150+ void mpi_mulm (MPI w , MPI u , MPI v , MPI m );
151+
152+ /*-- mpi-div.c --*/
153+ void mpi_tdiv_r (MPI rem , MPI num , MPI den );
154+ void mpi_fdiv_r (MPI rem , MPI dividend , MPI divisor );
155+ void mpi_fdiv_q (MPI quot , MPI dividend , MPI divisor );
156+
157+ /*-- mpi-inv.c --*/
158+ int mpi_invm (MPI x , MPI a , MPI n );
72159
73160/* inline functions */
74161
0 commit comments