Fix Serpent-AVX2 and Camellia-AVX2 counter modes
[libgcrypt.git] / src / g10lib.h
1 /* g10lib.h - Internal definitions for libgcrypt
2  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
3  *               2007, 2011 Free Software Foundation, Inc.
4  *
5  * This file is part of Libgcrypt.
6  *
7  * Libgcrypt is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser general Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * Libgcrypt is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 /* This header is to be used inside of libgcrypt in place of gcrypt.h.
22    This way we can better distinguish between internal and external
23    usage of gcrypt.h. */
24
25 #ifndef G10LIB_H
26 #define G10LIB_H 1
27
28 #ifdef _GCRYPT_H
29 #error  gcrypt.h already included
30 #endif
31
32 #ifndef _GCRYPT_IN_LIBGCRYPT
33 #error something is wrong with config.h
34 #endif
35
36 #include <stdio.h>
37 #include <stdarg.h>
38
39 #include "visibility.h"
40 #include "types.h"
41
42
43 \f
44
45 /* Attribute handling macros.  */
46
47 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
48 #define JNLIB_GCC_M_FUNCTION 1
49 #define JNLIB_GCC_A_NR       __attribute__ ((noreturn))
50 #define JNLIB_GCC_A_PRINTF( f, a )  __attribute__ ((format (printf,f,a)))
51 #define JNLIB_GCC_A_NR_PRINTF( f, a ) \
52                             __attribute__ ((noreturn, format (printf,f,a)))
53 #define GCC_ATTR_NORETURN  __attribute__ ((__noreturn__))
54 #else
55 #define JNLIB_GCC_A_NR
56 #define JNLIB_GCC_A_PRINTF( f, a )
57 #define JNLIB_GCC_A_NR_PRINTF( f, a )
58 #define GCC_ATTR_NORETURN
59 #endif
60
61 #if __GNUC__ >= 3
62 /* According to glibc this attribute is available since 2.8 however we
63    better play safe and use it only with gcc 3 or newer. */
64 #define GCC_ATTR_FORMAT_ARG(a)  __attribute__ ((format_arg (a)))
65 #else
66 #define GCC_ATTR_FORMAT_ARG(a)
67 #endif
68
69 /* I am not sure since when the unused attribute is really supported.
70    In any case it it only needed for gcc versions which print a
71    warning.  Thus let us require gcc >= 3.5.  */
72 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 5 )
73 #define GCC_ATTR_UNUSED  __attribute__ ((unused))
74 #else
75 #define GCC_ATTR_UNUSED
76 #endif
77
78 /* Gettext macros.  */
79
80 #define _(a)  _gcry_gettext(a)
81 #define N_(a) (a)
82
83 /* Some handy macros */
84 #ifndef STR
85 #define STR(v) #v
86 #endif
87 #define STR2(v) STR(v)
88 #define DIM(v) (sizeof(v)/sizeof((v)[0]))
89 #define DIMof(type,member)   DIM(((type *)0)->member)
90
91 \f
92
93 /*-- src/global.c -*/
94 int _gcry_global_is_operational (void);
95 gcry_error_t _gcry_vcontrol (enum gcry_ctl_cmds cmd, va_list arg_ptr);
96 void  _gcry_check_heap (const void *a);
97 int _gcry_get_debug_flag (unsigned int mask);
98
99
100 /*-- src/misc.c --*/
101
102 #if defined(JNLIB_GCC_M_FUNCTION) || __STDC_VERSION__ >= 199901L
103 void _gcry_bug (const char *file, int line,
104                 const char *func) GCC_ATTR_NORETURN;
105 void _gcry_assert_failed (const char *expr, const char *file, int line,
106                           const char *func) GCC_ATTR_NORETURN;
107 #else
108 void _gcry_bug (const char *file, int line);
109 void _gcry_assert_failed (const char *expr, const char *file, int line);
110 #endif
111
112 void _gcry_divide_by_zero (void) JNLIB_GCC_A_NR;
113
114 const char *_gcry_gettext (const char *key) GCC_ATTR_FORMAT_ARG(1);
115 void _gcry_fatal_error(int rc, const char *text ) JNLIB_GCC_A_NR;
116 void _gcry_logv (int level,
117                  const char *fmt, va_list arg_ptr) JNLIB_GCC_A_PRINTF(2,0);
118 void _gcry_log( int level, const char *fmt, ... ) JNLIB_GCC_A_PRINTF(2,3);
119 void _gcry_log_bug( const char *fmt, ... )   JNLIB_GCC_A_NR_PRINTF(1,2);
120 void _gcry_log_fatal( const char *fmt, ... ) JNLIB_GCC_A_NR_PRINTF(1,2);
121 void _gcry_log_error( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
122 void _gcry_log_info( const char *fmt, ... )  JNLIB_GCC_A_PRINTF(1,2);
123 int  _gcry_log_info_with_dummy_fp (FILE *fp, const char *fmt, ... )
124                                              JNLIB_GCC_A_PRINTF(2,3);
125 void _gcry_log_debug( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
126 void _gcry_log_printf ( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
127 void _gcry_log_printhex (const char *text, const void *buffer, size_t length);
128 void _gcry_log_printmpi (const char *text, gcry_mpi_t mpi);
129 void _gcry_log_printsxp (const char *text, gcry_sexp_t sexp);
130
131 void _gcry_set_log_verbosity( int level );
132 int _gcry_log_verbosity( int level );
133
134 #ifdef JNLIB_GCC_M_FUNCTION
135 #define BUG() _gcry_bug( __FILE__ , __LINE__, __FUNCTION__ )
136 #define gcry_assert(expr) ((expr)? (void)0 \
137          : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __FUNCTION__))
138 #elif __STDC_VERSION__ >= 199901L
139 #define BUG() _gcry_bug( __FILE__ , __LINE__, __func__ )
140 #define gcry_assert(expr) ((expr)? (void)0 \
141          : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __func__))
142 #else
143 #define BUG() _gcry_bug( __FILE__ , __LINE__ )
144 #define gcry_assert(expr) ((expr)? (void)0 \
145          : _gcry_assert_failed (STR(expr), __FILE__, __LINE__))
146 #endif
147
148
149 #define log_bug     _gcry_log_bug
150 #define log_fatal   _gcry_log_fatal
151 #define log_error   _gcry_log_error
152 #define log_info    _gcry_log_info
153 #define log_debug   _gcry_log_debug
154 #define log_printf  _gcry_log_printf
155 #define log_printhex _gcry_log_printhex
156 #define log_printmpi _gcry_log_printmpi
157 #define log_printsxp _gcry_log_printsxp
158
159 /* Compatibility macro.  */
160 #define log_mpidump _gcry_log_printmpi
161
162
163 /*-- src/hwfeatures.c --*/
164 /* (Do not change these values unless synced with the asm code.)  */
165 #define HWF_PADLOCK_RNG  1
166 #define HWF_PADLOCK_AES  2
167 #define HWF_PADLOCK_SHA  4
168 #define HWF_PADLOCK_MMUL 8
169
170 #define HWF_INTEL_AESNI  256
171 #define HWF_INTEL_RDRAND 512
172 #define HWF_INTEL_AVX    1024
173 #define HWF_INTEL_AVX2   2048
174
175 #define HWF_ARM_NEON     4096
176
177
178 unsigned int _gcry_get_hw_features (void);
179 void _gcry_detect_hw_features (unsigned int);
180
181
182 /*-- mpi/mpiutil.c --*/
183 const char *_gcry_mpi_get_hw_config (void);
184
185
186 /*-- cipher/pubkey.c --*/
187
188 /* FIXME: shouldn't this go into mpi.h?  */
189 #ifndef mpi_powm
190 #define mpi_powm(w,b,e,m)   gcry_mpi_powm( (w), (b), (e), (m) )
191 #endif
192
193 /*-- primegen.c --*/
194 gcry_err_code_t _gcry_primegen_init (void);
195 gcry_mpi_t _gcry_generate_secret_prime (unsigned int nbits,
196                                  gcry_random_level_t random_level,
197                                  int (*extra_check)(void*, gcry_mpi_t),
198                                  void *extra_check_arg);
199 gcry_mpi_t _gcry_generate_public_prime (unsigned int nbits,
200                                  gcry_random_level_t random_level,
201                                  int (*extra_check)(void*, gcry_mpi_t),
202                                  void *extra_check_arg);
203 gcry_mpi_t _gcry_generate_elg_prime (int mode,
204                                      unsigned int pbits, unsigned int qbits,
205                                      gcry_mpi_t g, gcry_mpi_t **factors);
206 gcry_mpi_t _gcry_derive_x931_prime (const gcry_mpi_t xp,
207                                     const gcry_mpi_t xp1, const gcry_mpi_t xp2,
208                                     const gcry_mpi_t e,
209                                     gcry_mpi_t *r_p1, gcry_mpi_t *r_p2);
210 gpg_err_code_t _gcry_generate_fips186_2_prime
211                  (unsigned int pbits, unsigned int qbits,
212                   const void *seed, size_t seedlen,
213                   gcry_mpi_t *r_q, gcry_mpi_t *r_p,
214                   int *r_counter,
215                   void **r_seed, size_t *r_seedlen);
216 gpg_err_code_t _gcry_generate_fips186_3_prime
217                  (unsigned int pbits, unsigned int qbits,
218                   const void *seed, size_t seedlen,
219                   gcry_mpi_t *r_q, gcry_mpi_t *r_p,
220                   int *r_counter,
221                   void **r_seed, size_t *r_seedlen, int *r_hashalgo);
222
223
224 /* Replacements of missing functions (missing-string.c).  */
225 #ifndef HAVE_STPCPY
226 char *stpcpy (char *a, const char *b);
227 #endif
228 #ifndef HAVE_STRCASECMP
229 int strcasecmp (const char *a, const char *b) _GCRY_GCC_ATTR_PURE;
230 #endif
231
232 #include "../compat/libcompat.h"
233
234
235 /* Macros used to rename missing functions.  */
236 #ifndef HAVE_STRTOUL
237 #define strtoul(a,b,c)  ((unsigned long)strtol((a),(b),(c)))
238 #endif
239 #ifndef HAVE_MEMMOVE
240 #define memmove(d, s, n) bcopy((s), (d), (n))
241 #endif
242 #ifndef HAVE_STRICMP
243 #define stricmp(a,b)     strcasecmp( (a), (b) )
244 #endif
245 #ifndef HAVE_ATEXIT
246 #define atexit(a)    (on_exit((a),0))
247 #endif
248 #ifndef HAVE_RAISE
249 #define raise(a) kill(getpid(), (a))
250 #endif
251
252
253 /* Stack burning.  */
254
255 #ifdef HAVE_GCC_ASM_VOLATILE_MEMORY
256 #define  __gcry_burn_stack_dummy() asm volatile ("":::"memory")
257 #else
258 void __gcry_burn_stack_dummy (void);
259 #endif
260
261 void __gcry_burn_stack (unsigned int bytes);
262 #define _gcry_burn_stack(bytes) \
263         do { __gcry_burn_stack (bytes); \
264              __gcry_burn_stack_dummy (); } while(0)
265
266
267 /* To avoid that a compiler optimizes certain memset calls away, these
268    macros may be used instead. */
269 #define wipememory2(_ptr,_set,_len) do { \
270               volatile char *_vptr=(volatile char *)(_ptr); \
271               size_t _vlen=(_len); \
272               unsigned char _vset=(_set); \
273               fast_wipememory2(_vptr,_vset,_vlen); \
274               while(_vlen) { *_vptr=(_vset); _vptr++; _vlen--; } \
275                   } while(0)
276 #define wipememory(_ptr,_len) wipememory2(_ptr,0,_len)
277
278 #ifdef HAVE_U64_TYPEDEF
279   #define FASTWIPE_T u64
280   #define FASTWIPE_MULT (U64_C(0x0101010101010101))
281 #else
282   #define FASTWIPE_T u32
283   #define FASTWIPE_MULT (0x01010101U)
284 #endif
285
286 /* Following architectures can handle unaligned accesses fast.  */
287 #if defined(__i386__) || defined(__x86_64__) || \
288     defined(__powerpc__) || defined(__powerpc64__) || \
289     (defined(__arm__) && defined(__ARM_FEATURE_UNALIGNED)) || \
290     defined(__aarch64__)
291 #define fast_wipememory2_unaligned_head(_ptr,_set,_len) /*do nothing*/
292 #else
293 #define fast_wipememory2_unaligned_head(_vptr,_vset,_vlen) do { \
294               while((size_t)(_vptr)&(sizeof(FASTWIPE_T)-1) && _vlen) \
295                 { *_vptr=(_vset); _vptr++; _vlen--; } \
296                   } while(0)
297 #endif
298
299 /* fast_wipememory2 may leave tail bytes unhandled, in which case tail bytes
300    are handled by wipememory2. */
301 #define fast_wipememory2(_vptr,_vset,_vlen) do { \
302               FASTWIPE_T _vset_long = _vset; \
303               fast_wipememory2_unaligned_head(_vptr,_vset,_vlen); \
304               if (_vlen < sizeof(FASTWIPE_T)) \
305                 break; \
306               _vset_long *= FASTWIPE_MULT; \
307               do { \
308                 volatile FASTWIPE_T *_vptr_long = (volatile void *)_vptr; \
309                 *_vptr_long = _vset_long; \
310                 _vlen -= sizeof(FASTWIPE_T); \
311                 _vptr += sizeof(FASTWIPE_T); \
312               } while (_vlen >= sizeof(FASTWIPE_T)); \
313                   } while (0)
314
315
316 /* Digit predicates.  */
317
318 #define digitp(p)   (*(p) >= '0' && *(p) <= '9')
319 #define octdigitp(p) (*(p) >= '0' && *(p) <= '7')
320 #define alphap(a)    (   (*(a) >= 'A' && *(a) <= 'Z')  \
321                       || (*(a) >= 'a' && *(a) <= 'z'))
322 #define hexdigitp(a) (digitp (a)                     \
323                       || (*(a) >= 'A' && *(a) <= 'F')  \
324                       || (*(a) >= 'a' && *(a) <= 'f'))
325
326 /* Init functions.  */
327
328 gcry_err_code_t _gcry_cipher_init (void);
329 gcry_err_code_t _gcry_md_init (void);
330 gcry_err_code_t _gcry_pk_init (void);
331 gcry_err_code_t _gcry_secmem_module_init (void);
332 gcry_err_code_t _gcry_mpi_init (void);
333
334 /* Memory management.  */
335 #define GCRY_ALLOC_FLAG_SECURE (1 << 0)
336
337
338 /*-- sexp.c --*/
339 gcry_err_code_t _gcry_sexp_vbuild (gcry_sexp_t *retsexp, size_t *erroff,
340                                    const char *format, va_list arg_ptr);
341 gcry_mpi_t _gcry_sexp_nth_opaque_mpi (gcry_sexp_t list, int number);
342 char *_gcry_sexp_nth_string (const gcry_sexp_t list, int number);
343 gpg_err_code_t _gcry_sexp_vextract_param (gcry_sexp_t sexp, const char *path,
344                                           const char *list, va_list arg_ptr);
345 gpg_err_code_t _gcry_sexp_extract_param (gcry_sexp_t sexp,
346                                          const char *path,
347                                          const char *list,
348                                          ...) _GCRY_GCC_ATTR_SENTINEL(0);
349
350
351 /*-- fips.c --*/
352
353 void _gcry_initialize_fips_mode (int force);
354
355 int _gcry_fips_mode (void);
356 #define fips_mode() _gcry_fips_mode ()
357
358 int _gcry_enforced_fips_mode (void);
359
360 void _gcry_set_enforced_fips_mode (void);
361
362 void _gcry_inactivate_fips_mode (const char *text);
363 int _gcry_is_fips_mode_inactive (void);
364
365
366 void _gcry_fips_signal_error (const char *srcfile,
367                               int srcline,
368                               const char *srcfunc,
369                               int is_fatal,
370                               const char *description);
371 #ifdef JNLIB_GCC_M_FUNCTION
372 # define fips_signal_error(a) \
373            _gcry_fips_signal_error (__FILE__, __LINE__, __FUNCTION__, 0, (a))
374 # define fips_signal_fatal_error(a) \
375            _gcry_fips_signal_error (__FILE__, __LINE__, __FUNCTION__, 1, (a))
376 #else
377 # define fips_signal_error(a) \
378            _gcry_fips_signal_error (__FILE__, __LINE__, NULL, 0, (a))
379 # define fips_signal_fatal_error(a) \
380            _gcry_fips_signal_error (__FILE__, __LINE__, NULL, 1, (a))
381 #endif
382
383 int _gcry_fips_is_operational (void);
384 #define fips_is_operational()   (_gcry_global_is_operational ())
385 #define fips_not_operational()  (GPG_ERR_NOT_OPERATIONAL)
386
387 int _gcry_fips_test_operational (void);
388 int _gcry_fips_test_error_or_operational (void);
389
390 gpg_err_code_t _gcry_fips_run_selftests (int extended);
391
392 void _gcry_fips_noreturn (void);
393 #define fips_noreturn()  (_gcry_fips_noreturn ())
394
395
396
397 #endif /* G10LIB_H */