7
7
#include "tommath.h"
8
8
#include "tommath_class.h"
9
9
10
+ /*
11
+ * Private symbols
12
+ * ---------------
13
+ *
14
+ * On Unix symbols can be marked as hidden if libtommath is compiled
15
+ * as a shared object. By default, symbols are visible.
16
+ * As of now, this feature is opt-in via the MP_PRIVATE_SYMBOLS define.
17
+ *
18
+ * On Win32 a .def file must be used to specify the exported symbols.
19
+ */
20
+ #if defined (MP_PRIVATE_SYMBOLS ) && __GNUC__ >= 4
21
+ # define MP_PRIVATE __attribute__ ((visibility ("hidden")))
22
+ #else
23
+ # define MP_PRIVATE
24
+ #endif
25
+
10
26
/* Hardening libtommath
11
27
* --------------------
12
28
*
@@ -143,44 +159,44 @@ typedef private_mp_word mp_word;
143
159
#define MP_SIZEOF_BITS (type ) (CHAR_BIT * sizeof(type))
144
160
#define MP_MAXFAST (int)(1uL << (MP_SIZEOF_BITS(mp_word) - (2u * (size_t)MP_DIGIT_BIT)))
145
161
146
- /* random number source */
147
- extern mp_err (* s_mp_rand_source )(void * out , size_t size );
148
-
149
162
/* Minimum number of available digits in mp_int, MP_PREC >= MP_MIN_PREC */
150
163
#define MP_MIN_PREC ((((CHAR_BIT * (int)sizeof(long long)) + MP_DIGIT_BIT) - 1) / MP_DIGIT_BIT)
151
164
165
+ /* random number source */
166
+ extern MP_PRIVATE mp_err (* s_mp_rand_source )(void * out , size_t size );
167
+
152
168
/* lowlevel functions, do not call! */
153
- mp_bool s_mp_get_bit (const mp_int * a , unsigned int b );
154
- mp_err s_mp_add (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
155
- mp_err s_mp_sub (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
156
- mp_err s_mp_mul_digs_fast (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
157
- mp_err s_mp_mul_digs (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
158
- mp_err s_mp_mul_high_digs_fast (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
159
- mp_err s_mp_mul_high_digs (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
160
- mp_err s_mp_sqr_fast (const mp_int * a , mp_int * b ) MP_WUR ;
161
- mp_err s_mp_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
162
- mp_err s_mp_balance_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
163
- mp_err s_mp_karatsuba_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
164
- mp_err s_mp_toom_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
165
- mp_err s_mp_karatsuba_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
166
- mp_err s_mp_toom_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
167
- mp_err s_mp_invmod_fast (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
168
- mp_err s_mp_invmod_slow (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
169
- mp_err s_mp_montgomery_reduce_fast (mp_int * x , const mp_int * n , mp_digit rho ) MP_WUR ;
170
- mp_err s_mp_exptmod_fast (const mp_int * G , const mp_int * X , const mp_int * P , mp_int * Y , int redmode ) MP_WUR ;
171
- mp_err s_mp_exptmod (const mp_int * G , const mp_int * X , const mp_int * P , mp_int * Y , int redmode ) MP_WUR ;
172
- mp_err s_mp_rand_platform (void * p , size_t n ) MP_WUR ;
173
- mp_err s_mp_prime_random_ex (mp_int * a , int t , int size , int flags , private_mp_prime_callback cb , void * dat );
174
- mp_err s_mp_jacobi (const mp_int * a , const mp_int * n , int * c );
175
- void s_mp_reverse (unsigned char * s , int len );
169
+ MP_PRIVATE mp_bool s_mp_get_bit (const mp_int * a , unsigned int b );
170
+ MP_PRIVATE mp_err s_mp_add (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
171
+ MP_PRIVATE mp_err s_mp_sub (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
172
+ MP_PRIVATE mp_err s_mp_mul_digs_fast (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
173
+ MP_PRIVATE mp_err s_mp_mul_digs (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
174
+ MP_PRIVATE mp_err s_mp_mul_high_digs_fast (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
175
+ MP_PRIVATE mp_err s_mp_mul_high_digs (const mp_int * a , const mp_int * b , mp_int * c , int digs ) MP_WUR ;
176
+ MP_PRIVATE mp_err s_mp_sqr_fast (const mp_int * a , mp_int * b ) MP_WUR ;
177
+ MP_PRIVATE mp_err s_mp_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
178
+ MP_PRIVATE mp_err s_mp_balance_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
179
+ MP_PRIVATE mp_err s_mp_karatsuba_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
180
+ MP_PRIVATE mp_err s_mp_toom_mul (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
181
+ MP_PRIVATE mp_err s_mp_karatsuba_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
182
+ MP_PRIVATE mp_err s_mp_toom_sqr (const mp_int * a , mp_int * b ) MP_WUR ;
183
+ MP_PRIVATE mp_err s_mp_invmod_fast (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
184
+ MP_PRIVATE mp_err s_mp_invmod_slow (const mp_int * a , const mp_int * b , mp_int * c ) MP_WUR ;
185
+ MP_PRIVATE mp_err s_mp_montgomery_reduce_fast (mp_int * x , const mp_int * n , mp_digit rho ) MP_WUR ;
186
+ MP_PRIVATE mp_err s_mp_exptmod_fast (const mp_int * G , const mp_int * X , const mp_int * P , mp_int * Y , int redmode ) MP_WUR ;
187
+ MP_PRIVATE mp_err s_mp_exptmod (const mp_int * G , const mp_int * X , const mp_int * P , mp_int * Y , int redmode ) MP_WUR ;
188
+ MP_PRIVATE mp_err s_mp_rand_platform (void * p , size_t n ) MP_WUR ;
189
+ MP_PRIVATE mp_err s_mp_prime_random_ex (mp_int * a , int t , int size , int flags , private_mp_prime_callback cb , void * dat );
190
+ MP_PRIVATE mp_err s_mp_jacobi (const mp_int * a , const mp_int * n , int * c );
191
+ MP_PRIVATE void s_mp_reverse (unsigned char * s , int len );
176
192
177
193
/* TODO: jenkins prng is not thread safe as of now */
178
- mp_err s_mp_rand_jenkins (void * p , size_t n ) MP_WUR ;
179
- void s_mp_rand_jenkins_init (uint64_t seed );
194
+ MP_PRIVATE mp_err s_mp_rand_jenkins (void * p , size_t n ) MP_WUR ;
195
+ MP_PRIVATE void s_mp_rand_jenkins_init (uint64_t seed );
180
196
181
- extern const char * const mp_s_rmap ;
182
- extern const uint8_t mp_s_rmap_reverse [];
183
- extern const size_t mp_s_rmap_reverse_sz ;
197
+ extern MP_PRIVATE const char * const mp_s_rmap ;
198
+ extern MP_PRIVATE const uint8_t mp_s_rmap_reverse [];
199
+ extern MP_PRIVATE const size_t mp_s_rmap_reverse_sz ;
184
200
185
201
/* Fancy macro to set an MPI from another type.
186
202
* There are several things assumed:
@@ -204,13 +220,17 @@ mp_err func_name (mp_int * a, type b) \
204
220
205
221
/* deprecated functions */
206
222
MP_DEPRECATED (s_mp_invmod_fast ) mp_err fast_mp_invmod (const mp_int * a , const mp_int * b , mp_int * c );
207
- MP_DEPRECATED (s_mp_montgomery_reduce_fast ) mp_err fast_mp_montgomery_reduce (mp_int * x , const mp_int * n , mp_digit rho );
208
- MP_DEPRECATED (s_mp_mul_digs_fast ) mp_err fast_s_mp_mul_digs (const mp_int * a , const mp_int * b , mp_int * c , int digs );
209
- MP_DEPRECATED (s_mp_mul_high_digs_fast ) mp_err fast_s_mp_mul_high_digs (const mp_int * a , const mp_int * b , mp_int * c ,
223
+ MP_DEPRECATED (s_mp_montgomery_reduce_fast ) mp_err fast_mp_montgomery_reduce (mp_int * x , const mp_int * n ,
224
+ mp_digit rho );
225
+ MP_DEPRECATED (s_mp_mul_digs_fast ) mp_err fast_s_mp_mul_digs (const mp_int * a , const mp_int * b , mp_int * c ,
226
+ int digs );
227
+ MP_DEPRECATED (s_mp_mul_high_digs_fast ) mp_err fast_s_mp_mul_high_digs (const mp_int * a , const mp_int * b ,
228
+ mp_int * c ,
210
229
int digs );
211
230
MP_DEPRECATED (s_mp_sqr_fast ) mp_err fast_s_mp_sqr (const mp_int * a , mp_int * b );
212
231
MP_DEPRECATED (s_mp_balance_mul ) mp_err mp_balance_mul (const mp_int * a , const mp_int * b , mp_int * c );
213
- MP_DEPRECATED (s_mp_exptmod_fast ) mp_err mp_exptmod_fast (const mp_int * G , const mp_int * X , const mp_int * P , mp_int * Y ,
232
+ MP_DEPRECATED (s_mp_exptmod_fast ) mp_err mp_exptmod_fast (const mp_int * G , const mp_int * X , const mp_int * P ,
233
+ mp_int * Y ,
214
234
int redmode );
215
235
MP_DEPRECATED (s_mp_invmod_slow ) mp_err mp_invmod_slow (const mp_int * a , const mp_int * b , mp_int * c );
216
236
MP_DEPRECATED (s_mp_karatsuba_mul ) mp_err mp_karatsuba_mul (const mp_int * a , const mp_int * b , mp_int * c );
0 commit comments