~ubuntu-branches/ubuntu/trusty/nettle/trusty

« back to all changes in this revision

Viewing changes to mini-gmp.h

  • Committer: Package Import Robot
  • Author(s): Magnus Holmgren
  • Date: 2013-05-07 22:57:14 UTC
  • mfrom: (8.1.8 sid)
  • Revision ID: package-import@ubuntu.com-20130507225714-s331yr8ov53dtt17
Tags: 2.7-2
Tag some (ECC related) symbols that only exist on some architectures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* mini-gmp, a minimalistic implementation of a GNU GMP subset.
 
2
 
 
3
Copyright 2011, 2012, 2013 Free Software Foundation, Inc.
 
4
 
 
5
This file is part of the GNU MP Library.
 
6
 
 
7
The GNU MP Library is free software; you can redistribute it and/or modify
 
8
it under the terms of the GNU Lesser General Public License as published by
 
9
the Free Software Foundation; either version 3 of the License, or (at your
 
10
option) any later version.
 
11
 
 
12
The GNU MP Library is distributed in the hope that it will be useful, but
 
13
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
14
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 
15
License for more details.
 
16
 
 
17
You should have received a copy of the GNU Lesser General Public License
 
18
along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
 
19
 
 
20
/* About mini-gmp: This is a minimal implementation of a subset of the
 
21
   GMP interface. It is intended for inclusion into applications which
 
22
   have modest bignums needs, as a fallback when the real GMP library
 
23
   is not installed.
 
24
 
 
25
   This file defines the public interface. */
 
26
 
 
27
#ifndef __MINI_GMP_H__
 
28
#define __MINI_GMP_H__
 
29
 
 
30
/* For size_t */
 
31
#include <stddef.h>
 
32
 
 
33
#if defined (__cplusplus)
 
34
extern "C" {
 
35
#endif
 
36
 
 
37
void mp_set_memory_functions (void *(*) (size_t),
 
38
                              void *(*) (void *, size_t, size_t),
 
39
                              void (*) (void *, size_t));
 
40
 
 
41
void mp_get_memory_functions (void *(**) (size_t),
 
42
                              void *(**) (void *, size_t, size_t),
 
43
                              void (**) (void *, size_t));
 
44
 
 
45
typedef unsigned long mp_limb_t;
 
46
typedef long mp_size_t;
 
47
typedef unsigned long mp_bitcnt_t;
 
48
 
 
49
typedef mp_limb_t *mp_ptr;
 
50
typedef const mp_limb_t *mp_srcptr;
 
51
 
 
52
typedef struct
 
53
{
 
54
  int _mp_alloc;                /* Number of *limbs* allocated and pointed
 
55
                                   to by the _mp_d field.  */
 
56
  int _mp_size;                 /* abs(_mp_size) is the number of limbs the
 
57
                                   last field points to.  If _mp_size is
 
58
                                   negative this is a negative number.  */
 
59
  mp_limb_t *_mp_d;             /* Pointer to the limbs.  */
 
60
} __mpz_struct;
 
61
 
 
62
typedef __mpz_struct mpz_t[1];
 
63
 
 
64
typedef __mpz_struct *mpz_ptr;
 
65
typedef const __mpz_struct *mpz_srcptr;
 
66
 
 
67
void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
 
68
void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
 
69
 
 
70
int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t);
 
71
 
 
72
mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
 
73
mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
 
74
mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
 
75
 
 
76
mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
 
77
mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
 
78
mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
 
79
 
 
80
mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
 
81
mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
 
82
mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
 
83
 
 
84
mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
 
85
void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
 
86
void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
 
87
 
 
88
mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
 
89
mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
 
90
 
 
91
mp_limb_t mpn_invert_3by2 (mp_limb_t, mp_limb_t);
 
92
#define mpn_invert_limb(x) mpn_invert_3by2 ((x), 0)
 
93
 
 
94
size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
 
95
mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int);
 
96
 
 
97
void mpz_init (mpz_t);
 
98
void mpz_init2 (mpz_t, mp_bitcnt_t);
 
99
void mpz_clear (mpz_t);
 
100
 
 
101
#define mpz_odd_p(z)   (((z)->_mp_size != 0) & (int) (z)->_mp_d[0])
 
102
#define mpz_even_p(z)  (! mpz_odd_p (z))
 
103
 
 
104
int mpz_sgn (const mpz_t);
 
105
int mpz_cmp_si (const mpz_t, long);
 
106
int mpz_cmp_ui (const mpz_t, unsigned long);
 
107
int mpz_cmp (const mpz_t, const mpz_t);
 
108
int mpz_cmpabs_ui (const mpz_t, unsigned long);
 
109
int mpz_cmpabs (const mpz_t, const mpz_t);
 
110
int mpz_cmp_d (const mpz_t, double);
 
111
int mpz_cmpabs_d (const mpz_t, double);
 
112
 
 
113
void mpz_abs (mpz_t, const mpz_t);
 
114
void mpz_neg (mpz_t, const mpz_t);
 
115
void mpz_swap (mpz_t, mpz_t);
 
116
 
 
117
void mpz_add_ui (mpz_t, const mpz_t, unsigned long);
 
118
void mpz_add (mpz_t, const mpz_t, const mpz_t);
 
119
void mpz_sub_ui (mpz_t, const mpz_t, unsigned long);
 
120
void mpz_ui_sub (mpz_t, unsigned long, const mpz_t);
 
121
void mpz_sub (mpz_t, const mpz_t, const mpz_t);
 
122
 
 
123
void mpz_mul_si (mpz_t, const mpz_t, long int);
 
124
void mpz_mul_ui (mpz_t, const mpz_t, unsigned long int);
 
125
void mpz_mul (mpz_t, const mpz_t, const mpz_t);
 
126
void mpz_mul_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
127
 
 
128
void mpz_cdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
 
129
void mpz_fdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
 
130
void mpz_tdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
 
131
void mpz_cdiv_q (mpz_t, const mpz_t, const mpz_t);
 
132
void mpz_fdiv_q (mpz_t, const mpz_t, const mpz_t);
 
133
void mpz_tdiv_q (mpz_t, const mpz_t, const mpz_t);
 
134
void mpz_cdiv_r (mpz_t, const mpz_t, const mpz_t);
 
135
void mpz_fdiv_r (mpz_t, const mpz_t, const mpz_t);
 
136
void mpz_tdiv_r (mpz_t, const mpz_t, const mpz_t);
 
137
 
 
138
void mpz_cdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
139
void mpz_fdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
140
void mpz_tdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
141
void mpz_cdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
142
void mpz_fdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
143
void mpz_tdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
 
144
 
 
145
void mpz_mod (mpz_t, const mpz_t, const mpz_t);
 
146
 
 
147
void mpz_divexact (mpz_t, const mpz_t, const mpz_t);
 
148
 
 
149
int mpz_divisible_p (const mpz_t, const mpz_t);
 
150
 
 
151
unsigned long mpz_cdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
 
152
unsigned long mpz_fdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
 
153
unsigned long mpz_tdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
 
154
unsigned long mpz_cdiv_q_ui (mpz_t, const mpz_t, unsigned long);
 
155
unsigned long mpz_fdiv_q_ui (mpz_t, const mpz_t, unsigned long);
 
156
unsigned long mpz_tdiv_q_ui (mpz_t, const mpz_t, unsigned long);
 
157
unsigned long mpz_cdiv_r_ui (mpz_t, const mpz_t, unsigned long);
 
158
unsigned long mpz_fdiv_r_ui (mpz_t, const mpz_t, unsigned long);
 
159
unsigned long mpz_tdiv_r_ui (mpz_t, const mpz_t, unsigned long);
 
160
unsigned long mpz_cdiv_ui (const mpz_t, unsigned long);
 
161
unsigned long mpz_fdiv_ui (const mpz_t, unsigned long);
 
162
unsigned long mpz_tdiv_ui (const mpz_t, unsigned long);
 
163
 
 
164
unsigned long mpz_mod_ui (mpz_t, const mpz_t, unsigned long);
 
165
 
 
166
void mpz_divexact_ui (mpz_t, const mpz_t, unsigned long);
 
167
 
 
168
int mpz_divisible_ui_p (const mpz_t, unsigned long);
 
169
 
 
170
unsigned long mpz_gcd_ui (mpz_t, const mpz_t, unsigned long);
 
171
void mpz_gcd (mpz_t, const mpz_t, const mpz_t);
 
172
void mpz_gcdext (mpz_t, mpz_t, mpz_t, const mpz_t, const mpz_t);
 
173
void mpz_lcm_ui (mpz_t, const mpz_t, unsigned long);
 
174
void mpz_lcm (mpz_t, const mpz_t, const mpz_t);
 
175
int mpz_invert (mpz_t, const mpz_t, const mpz_t);
 
176
 
 
177
void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t);
 
178
void mpz_sqrt (mpz_t, const mpz_t);
 
179
 
 
180
void mpz_pow_ui (mpz_t, const mpz_t, unsigned long);
 
181
void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long);
 
182
void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t);
 
183
void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t);
 
184
 
 
185
void mpz_rootrem (mpz_t, mpz_t, const mpz_t, unsigned long);
 
186
int mpz_root (mpz_t, const mpz_t, unsigned long);
 
187
 
 
188
void mpz_fac_ui (mpz_t, unsigned long);
 
189
void mpz_bin_uiui (mpz_t, unsigned long, unsigned long);
 
190
 
 
191
int mpz_tstbit (const mpz_t, mp_bitcnt_t);
 
192
void mpz_setbit (mpz_t, mp_bitcnt_t);
 
193
void mpz_clrbit (mpz_t, mp_bitcnt_t);
 
194
void mpz_combit (mpz_t, mp_bitcnt_t);
 
195
 
 
196
void mpz_com (mpz_t, const mpz_t);
 
197
void mpz_and (mpz_t, const mpz_t, const mpz_t);
 
198
void mpz_ior (mpz_t, const mpz_t, const mpz_t);
 
199
void mpz_xor (mpz_t, const mpz_t, const mpz_t);
 
200
 
 
201
mp_bitcnt_t mpz_popcount (const mpz_t);
 
202
mp_bitcnt_t mpz_hamdist (const mpz_t, const mpz_t);
 
203
mp_bitcnt_t mpz_scan0 (const mpz_t, mp_bitcnt_t);
 
204
mp_bitcnt_t mpz_scan1 (const mpz_t, mp_bitcnt_t);
 
205
 
 
206
int mpz_fits_slong_p (const mpz_t);
 
207
int mpz_fits_ulong_p (const mpz_t);
 
208
long int mpz_get_si (const mpz_t);
 
209
unsigned long int mpz_get_ui (const mpz_t);
 
210
double mpz_get_d (const mpz_t);
 
211
size_t mpz_size (const mpz_t);
 
212
mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t);
 
213
 
 
214
void mpz_set_si (mpz_t, signed long int);
 
215
void mpz_set_ui (mpz_t, unsigned long int);
 
216
void mpz_set (mpz_t, const mpz_t);
 
217
void mpz_set_d (mpz_t, double);
 
218
 
 
219
void mpz_init_set_si (mpz_t, signed long int);
 
220
void mpz_init_set_ui (mpz_t, unsigned long int);
 
221
void mpz_init_set (mpz_t, const mpz_t);
 
222
void mpz_init_set_d (mpz_t, double);
 
223
 
 
224
size_t mpz_sizeinbase (const mpz_t, int);
 
225
char *mpz_get_str (char *, int, const mpz_t);
 
226
int mpz_set_str (mpz_t, const char *, int);
 
227
int mpz_init_set_str (mpz_t, const char *, int);
 
228
 
 
229
/* This long list taken from gmp.h. */
 
230
/* For reference, "defined(EOF)" cannot be used here.  In g++ 2.95.4,
 
231
   <iostream> defines EOF but not FILE.  */
 
232
#if defined (FILE)                                              \
 
233
  || defined (H_STDIO)                                          \
 
234
  || defined (_H_STDIO)               /* AIX */                 \
 
235
  || defined (_STDIO_H)               /* glibc, Sun, SCO */     \
 
236
  || defined (_STDIO_H_)              /* BSD, OSF */            \
 
237
  || defined (__STDIO_H)              /* Borland */             \
 
238
  || defined (__STDIO_H__)            /* IRIX */                \
 
239
  || defined (_STDIO_INCLUDED)        /* HPUX */                \
 
240
  || defined (__dj_include_stdio_h_)  /* DJGPP */               \
 
241
  || defined (_FILE_DEFINED)          /* Microsoft */           \
 
242
  || defined (__STDIO__)              /* Apple MPW MrC */       \
 
243
  || defined (_MSL_STDIO_H)           /* Metrowerks */          \
 
244
  || defined (_STDIO_H_INCLUDED)      /* QNX4 */                \
 
245
  || defined (_ISO_STDIO_ISO_H)       /* Sun C++ */             \
 
246
  || defined (__STDIO_LOADED)         /* VMS */
 
247
size_t mpz_out_str (FILE *, int, const mpz_t);
 
248
#endif
 
249
 
 
250
void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *);
 
251
void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t);
 
252
 
 
253
#if defined (__cplusplus)
 
254
}
 
255
#endif
 
256
#endif /* __MINI_GMP_H__ */