1/* visibility.c - Wrapper for all public functions.
2 * Copyright (C) 2007, 2008, 2011  Free Software Foundation, Inc.
3 *
4 * This file is part of Libgcrypt.
5 *
6 * Libgcrypt is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as
8 * published by the Free Software Foundation; either version 2.1 of
9 * the License, or (at your option) any later version.
10 *
11 * Libgcrypt is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <config.h>
21#include <stdarg.h>
22
23#define _GCRY_INCLUDED_BY_VISIBILITY_C
24#include "g10lib.h"
25#include "cipher-proto.h"
26
27
28
29const char *
30gcry_strerror (gcry_error_t err)
31{
32  return _gcry_strerror (err);
33}
34
35const char *
36gcry_strsource (gcry_error_t err)
37{
38  return _gcry_strsource (err);
39}
40
41gcry_err_code_t
42gcry_err_code_from_errno (int err)
43{
44  return _gcry_err_code_from_errno (err);
45}
46
47int
48gcry_err_code_to_errno (gcry_err_code_t code)
49{
50  return _gcry_err_code_to_errno (code);
51}
52
53gcry_error_t
54gcry_err_make_from_errno (gcry_err_source_t source, int err)
55{
56  return _gcry_err_make_from_errno (source, err);
57}
58
59gcry_err_code_t
60gcry_error_from_errno (int err)
61{
62  return _gcry_error_from_errno (err);
63}
64
65const char *
66gcry_check_version (const char *req_version)
67{
68  return _gcry_check_version (req_version);
69}
70
71gcry_error_t
72gcry_control (enum gcry_ctl_cmds cmd, ...)
73{
74  gcry_error_t err;
75  va_list arg_ptr;
76
77  va_start (arg_ptr, cmd);
78  err = _gcry_vcontrol (cmd, arg_ptr);
79  va_end(arg_ptr);
80  return err;
81}
82
83gcry_error_t
84gcry_sexp_new (gcry_sexp_t *retsexp,
85               const void *buffer, size_t length,
86               int autodetect)
87{
88  return _gcry_sexp_new (retsexp, buffer, length, autodetect);
89}
90
91gcry_error_t
92gcry_sexp_create (gcry_sexp_t *retsexp,
93                  void *buffer, size_t length,
94                  int autodetect, void (*freefnc) (void *))
95{
96  return _gcry_sexp_create (retsexp, buffer, length,
97                            autodetect, freefnc);
98}
99
100gcry_error_t
101gcry_sexp_sscan (gcry_sexp_t *retsexp, size_t *erroff,
102                 const char *buffer, size_t length)
103{
104  return _gcry_sexp_sscan (retsexp, erroff, buffer, length);
105}
106
107gcry_error_t
108gcry_sexp_build (gcry_sexp_t *retsexp, size_t *erroff,
109                 const char *format, ...)
110{
111  gcry_error_t err;
112  va_list arg_ptr;
113
114  va_start (arg_ptr, format);
115  err = _gcry_sexp_vbuild (retsexp, erroff, format, arg_ptr);
116  va_end (arg_ptr);
117  return err;
118}
119
120gcry_error_t
121gcry_sexp_build_array (gcry_sexp_t *retsexp, size_t *erroff,
122                       const char *format, void **arg_list)
123{
124  return _gcry_sexp_build_array (retsexp, erroff, format, arg_list);
125}
126
127void
128gcry_sexp_release (gcry_sexp_t sexp)
129{
130  _gcry_sexp_release (sexp);
131}
132
133size_t
134gcry_sexp_canon_len (const unsigned char *buffer, size_t length,
135                     size_t *erroff, gcry_error_t *errcode)
136{
137  return _gcry_sexp_canon_len (buffer, length, erroff, errcode);
138}
139
140size_t
141gcry_sexp_sprint (gcry_sexp_t sexp, int mode, void *buffer, size_t maxlength)
142{
143  return _gcry_sexp_sprint (sexp, mode, buffer, maxlength);
144}
145
146void
147gcry_sexp_dump (const gcry_sexp_t a)
148{
149  _gcry_sexp_dump (a);
150}
151
152gcry_sexp_t
153gcry_sexp_cons (const gcry_sexp_t a, const gcry_sexp_t b)
154{
155  return _gcry_sexp_cons (a, b);
156}
157
158gcry_sexp_t
159gcry_sexp_alist (const gcry_sexp_t *array)
160{
161  return _gcry_sexp_alist (array);
162}
163
164gcry_sexp_t
165gcry_sexp_vlist (const gcry_sexp_t a, ...)
166{
167  /* This is not yet implemented in sexp.c.  */
168  (void)a;
169  BUG ();
170  return NULL;
171}
172
173gcry_sexp_t
174gcry_sexp_append (const gcry_sexp_t a, const gcry_sexp_t n)
175{
176  return _gcry_sexp_append (a, n);
177}
178
179gcry_sexp_t
180gcry_sexp_prepend (const gcry_sexp_t a, const gcry_sexp_t n)
181{
182  return _gcry_sexp_prepend (a, n);
183}
184
185
186gcry_sexp_t
187gcry_sexp_find_token (gcry_sexp_t list, const char *tok, size_t toklen)
188{
189  return _gcry_sexp_find_token (list, tok, toklen);
190}
191
192int
193gcry_sexp_length (const gcry_sexp_t list)
194{
195  return _gcry_sexp_length (list);
196}
197
198gcry_sexp_t
199gcry_sexp_nth (const gcry_sexp_t list, int number)
200{
201  return _gcry_sexp_nth (list, number);
202}
203
204gcry_sexp_t
205gcry_sexp_car (const gcry_sexp_t list)
206{
207  return _gcry_sexp_car (list);
208}
209
210gcry_sexp_t
211gcry_sexp_cdr (const gcry_sexp_t list)
212{
213  return _gcry_sexp_cdr (list);
214}
215
216gcry_sexp_t
217gcry_sexp_cadr (const gcry_sexp_t list)
218{
219  return _gcry_sexp_cadr (list);
220}
221
222const char *
223gcry_sexp_nth_data (const gcry_sexp_t list, int number, size_t *datalen)
224{
225  return _gcry_sexp_nth_data (list, number, datalen);
226}
227
228char *
229gcry_sexp_nth_string (gcry_sexp_t list, int number)
230{
231  return _gcry_sexp_nth_string (list, number);
232}
233
234gcry_mpi_t
235gcry_sexp_nth_mpi (gcry_sexp_t list, int number, int mpifmt)
236{
237  return _gcry_sexp_nth_mpi (list, number, mpifmt);
238}
239
240gcry_mpi_t
241gcry_mpi_new (unsigned int nbits)
242{
243  return _gcry_mpi_new (nbits);
244}
245
246gcry_mpi_t
247gcry_mpi_snew (unsigned int nbits)
248{
249  return _gcry_mpi_snew (nbits);
250}
251
252void
253gcry_mpi_release (gcry_mpi_t a)
254{
255  _gcry_mpi_release (a);
256}
257
258gcry_mpi_t
259gcry_mpi_copy (const gcry_mpi_t a)
260{
261  return _gcry_mpi_copy (a);
262}
263
264gcry_mpi_t
265gcry_mpi_set (gcry_mpi_t w, const gcry_mpi_t u)
266{
267  return _gcry_mpi_set (w, u);
268}
269
270gcry_mpi_t
271gcry_mpi_set_ui (gcry_mpi_t w, unsigned long u)
272{
273  return _gcry_mpi_set_ui (w, u);
274}
275
276void
277gcry_mpi_swap (gcry_mpi_t a, gcry_mpi_t b)
278{
279  _gcry_mpi_swap (a, b);
280}
281
282int
283gcry_mpi_cmp (const gcry_mpi_t u, const gcry_mpi_t v)
284{
285  return _gcry_mpi_cmp (u, v);
286}
287
288int
289gcry_mpi_cmp_ui (const gcry_mpi_t u, unsigned long v)
290{
291  return _gcry_mpi_cmp_ui (u, v);
292}
293
294gcry_error_t
295gcry_mpi_scan (gcry_mpi_t *ret_mpi, enum gcry_mpi_format format,
296               const void *buffer, size_t buflen,
297               size_t *nscanned)
298{
299  return _gcry_mpi_scan (ret_mpi, format, buffer, buflen, nscanned);
300}
301
302gcry_error_t
303gcry_mpi_print (enum gcry_mpi_format format,
304                unsigned char *buffer, size_t buflen,
305                size_t *nwritten,
306                const gcry_mpi_t a)
307{
308  return _gcry_mpi_print (format, buffer, buflen, nwritten, a);
309}
310
311gcry_error_t
312gcry_mpi_aprint (enum gcry_mpi_format format,
313                 unsigned char **buffer, size_t *nwritten,
314                 const gcry_mpi_t a)
315{
316  return _gcry_mpi_aprint (format, buffer, nwritten, a);
317}
318
319void
320gcry_mpi_dump (const gcry_mpi_t a)
321{
322  _gcry_mpi_dump (a);
323}
324
325void
326gcry_mpi_add (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
327{
328  _gcry_mpi_add (w, u, v);
329}
330
331void
332gcry_mpi_add_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v)
333{
334  _gcry_mpi_add_ui (w, u, v);
335}
336
337void
338gcry_mpi_addm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m)
339{
340  _gcry_mpi_addm (w, u, v, m);
341}
342
343void
344gcry_mpi_sub (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
345{
346  _gcry_mpi_sub (w, u, v);
347}
348
349void
350gcry_mpi_sub_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v )
351{
352  _gcry_mpi_sub_ui (w, u, v);
353}
354
355void
356gcry_mpi_subm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m)
357{
358  _gcry_mpi_subm (w, u, v, m);
359}
360
361void
362gcry_mpi_mul (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
363{
364  _gcry_mpi_mul (w, u, v);
365}
366
367void
368gcry_mpi_mul_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v )
369{
370  _gcry_mpi_mul_ui (w, u, v);
371}
372
373void
374gcry_mpi_mulm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m)
375{
376  _gcry_mpi_mulm (w, u, v, m);
377}
378
379void
380gcry_mpi_mul_2exp (gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt)
381{
382  _gcry_mpi_mul_2exp (w, u, cnt);
383}
384
385void
386gcry_mpi_div (gcry_mpi_t q, gcry_mpi_t r,
387              gcry_mpi_t dividend, gcry_mpi_t divisor, int round)
388{
389  _gcry_mpi_div (q, r, dividend, divisor, round);
390}
391
392void
393gcry_mpi_mod (gcry_mpi_t r, gcry_mpi_t dividend, gcry_mpi_t divisor)
394{
395  _gcry_mpi_mod (r, dividend, divisor);
396}
397
398void
399gcry_mpi_powm (gcry_mpi_t w, const gcry_mpi_t b, const gcry_mpi_t e,
400               const gcry_mpi_t m)
401{
402  _gcry_mpi_powm (w, b, e, m);
403}
404
405int
406gcry_mpi_gcd (gcry_mpi_t g, gcry_mpi_t a, gcry_mpi_t b)
407{
408  return _gcry_mpi_gcd (g, a, b);
409}
410
411int
412gcry_mpi_invm (gcry_mpi_t x, gcry_mpi_t a, gcry_mpi_t m)
413{
414  return _gcry_mpi_invm (x, a, m);
415}
416
417
418unsigned int
419gcry_mpi_get_nbits (gcry_mpi_t a)
420{
421  return _gcry_mpi_get_nbits (a);
422}
423
424int
425gcry_mpi_test_bit (gcry_mpi_t a, unsigned int n)
426{
427  return _gcry_mpi_test_bit (a, n);
428}
429
430void
431gcry_mpi_set_bit (gcry_mpi_t a, unsigned int n)
432{
433  _gcry_mpi_set_bit (a, n);
434}
435
436void
437gcry_mpi_clear_bit (gcry_mpi_t a, unsigned int n)
438{
439  _gcry_mpi_clear_bit (a, n);
440}
441
442void
443gcry_mpi_set_highbit (gcry_mpi_t a, unsigned int n)
444{
445  _gcry_mpi_set_highbit (a, n);
446}
447
448void
449gcry_mpi_clear_highbit (gcry_mpi_t a, unsigned int n)
450{
451  _gcry_mpi_clear_highbit (a, n);
452}
453
454void
455gcry_mpi_rshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n)
456{
457  _gcry_mpi_rshift (x, a, n);
458}
459
460void
461gcry_mpi_lshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n)
462{
463  _gcry_mpi_lshift (x, a, n);
464}
465
466gcry_mpi_t
467gcry_mpi_set_opaque (gcry_mpi_t a, void *p, unsigned int nbits)
468{
469  return _gcry_mpi_set_opaque (a, p, nbits);
470}
471
472void *
473gcry_mpi_get_opaque (gcry_mpi_t a, unsigned int *nbits)
474{
475  return _gcry_mpi_get_opaque (a, nbits);
476}
477
478void
479gcry_mpi_set_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
480{
481  _gcry_mpi_set_flag (a, flag);
482}
483
484void
485gcry_mpi_clear_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
486{
487  _gcry_mpi_clear_flag (a, flag);
488}
489
490int
491gcry_mpi_get_flag (gcry_mpi_t a, enum gcry_mpi_flag flag)
492{
493  return _gcry_mpi_get_flag (a, flag);
494}
495
496gcry_error_t
497gcry_cipher_open (gcry_cipher_hd_t *handle,
498                  int algo, int mode, unsigned int flags)
499{
500  if (!fips_is_operational ())
501    {
502      *handle = NULL;
503      return gpg_error (fips_not_operational ());
504    }
505
506  return _gcry_cipher_open (handle, algo, mode, flags);
507}
508
509void
510gcry_cipher_close (gcry_cipher_hd_t h)
511{
512  _gcry_cipher_close (h);
513}
514
515gcry_error_t
516gcry_cipher_setkey (gcry_cipher_hd_t hd, const void *key, size_t keylen)
517{
518  if (!fips_is_operational ())
519    return gpg_error (fips_not_operational ());
520
521  return _gcry_cipher_setkey (hd, key, keylen);
522}
523
524gcry_error_t
525gcry_cipher_setiv (gcry_cipher_hd_t hd, const void *iv, size_t ivlen)
526{
527  if (!fips_is_operational ())
528    return gpg_error (fips_not_operational ());
529
530  return _gcry_cipher_setiv (hd, iv, ivlen);
531}
532
533gpg_error_t
534gcry_cipher_setctr (gcry_cipher_hd_t hd, const void *ctr, size_t ctrlen)
535{
536  if (!fips_is_operational ())
537    return gpg_error (fips_not_operational ());
538
539  return _gcry_cipher_setctr (hd, ctr, ctrlen);
540}
541
542
543gcry_error_t
544gcry_cipher_ctl (gcry_cipher_hd_t h, int cmd, void *buffer, size_t buflen)
545{
546  if (!fips_is_operational ())
547    return gpg_error (fips_not_operational ());
548
549  return _gcry_cipher_ctl (h, cmd, buffer, buflen);
550}
551
552gcry_error_t
553gcry_cipher_info (gcry_cipher_hd_t h, int what, void *buffer, size_t *nbytes)
554{
555  return _gcry_cipher_info (h, what, buffer, nbytes);
556}
557
558gcry_error_t
559gcry_cipher_algo_info (int algo, int what, void *buffer, size_t *nbytes)
560{
561  if (!fips_is_operational ())
562    return gpg_error (fips_not_operational ());
563
564  return _gcry_cipher_algo_info (algo, what, buffer, nbytes);
565}
566
567const char *
568gcry_cipher_algo_name (int algorithm)
569{
570  return _gcry_cipher_algo_name (algorithm);
571}
572
573int
574gcry_cipher_map_name (const char *name)
575{
576  return _gcry_cipher_map_name (name);
577}
578
579int
580gcry_cipher_mode_from_oid (const char *string)
581{
582  return _gcry_cipher_mode_from_oid (string);
583}
584
585gcry_error_t
586gcry_cipher_encrypt (gcry_cipher_hd_t h,
587                     void *out, size_t outsize,
588                     const void *in, size_t inlen)
589{
590  if (!fips_is_operational ())
591    {
592      /* Make sure that the plaintext will never make it to OUT. */
593      if (out)
594        memset (out, 0x42, outsize);
595      return gpg_error (fips_not_operational ());
596    }
597
598  return _gcry_cipher_encrypt (h, out, outsize, in, inlen);
599}
600
601gcry_error_t
602gcry_cipher_decrypt (gcry_cipher_hd_t h,
603                     void *out, size_t outsize,
604                     const void *in, size_t inlen)
605{
606  if (!fips_is_operational ())
607    return gpg_error (fips_not_operational ());
608
609  return _gcry_cipher_decrypt (h, out, outsize, in, inlen);
610}
611
612size_t
613gcry_cipher_get_algo_keylen (int algo)
614{
615  return _gcry_cipher_get_algo_keylen (algo);
616}
617
618size_t
619gcry_cipher_get_algo_blklen (int algo)
620{
621  return _gcry_cipher_get_algo_blklen (algo);
622}
623
624gcry_error_t
625gcry_cipher_list (int *list, int *list_length)
626{
627  return _gcry_cipher_list (list, list_length);
628}
629
630gcry_error_t
631gcry_pk_encrypt (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t pkey)
632{
633  if (!fips_is_operational ())
634    {
635      *result = NULL;
636      return gpg_error (fips_not_operational ());
637    }
638  return _gcry_pk_encrypt (result, data, pkey);
639}
640
641gcry_error_t
642gcry_pk_decrypt (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t skey)
643{
644  if (!fips_is_operational ())
645    {
646      *result = NULL;
647      return gpg_error (fips_not_operational ());
648    }
649  return _gcry_pk_decrypt (result, data, skey);
650}
651
652gcry_error_t
653gcry_pk_sign (gcry_sexp_t *result, gcry_sexp_t data, gcry_sexp_t skey)
654{
655  if (!fips_is_operational ())
656    {
657      *result = NULL;
658      return gpg_error (fips_not_operational ());
659    }
660  return _gcry_pk_sign (result, data, skey);
661}
662
663gcry_error_t
664gcry_pk_verify (gcry_sexp_t sigval, gcry_sexp_t data, gcry_sexp_t pkey)
665{
666  if (!fips_is_operational ())
667    return gpg_error (fips_not_operational ());
668  return _gcry_pk_verify (sigval, data, pkey);
669}
670
671gcry_error_t
672gcry_pk_testkey (gcry_sexp_t key)
673{
674  if (!fips_is_operational ())
675    return gpg_error (fips_not_operational ());
676  return _gcry_pk_testkey (key);
677}
678
679gcry_error_t
680gcry_pk_genkey (gcry_sexp_t *r_key, gcry_sexp_t s_parms)
681{
682  if (!fips_is_operational ())
683    {
684      *r_key = NULL;
685      return gpg_error (fips_not_operational ());
686    }
687  return _gcry_pk_genkey (r_key, s_parms);
688}
689
690gcry_error_t
691gcry_pk_ctl (int cmd, void *buffer, size_t buflen)
692{
693  return _gcry_pk_ctl (cmd, buffer, buflen);
694}
695
696gcry_error_t
697gcry_pk_algo_info (int algo, int what, void *buffer, size_t *nbytes)
698{
699  if (!fips_is_operational ())
700    return gpg_error (fips_not_operational ());
701
702  return _gcry_pk_algo_info (algo, what, buffer, nbytes);
703}
704
705const char *
706gcry_pk_algo_name (int algorithm)
707{
708  return _gcry_pk_algo_name (algorithm);
709}
710
711int
712gcry_pk_map_name (const char *name)
713{
714  return _gcry_pk_map_name (name);
715}
716
717unsigned int
718gcry_pk_get_nbits (gcry_sexp_t key)
719{
720  if (!fips_is_operational ())
721    {
722      (void)fips_not_operational ();
723      return 0;
724    }
725
726  return _gcry_pk_get_nbits (key);
727}
728
729unsigned char *
730gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array)
731{
732  if (!fips_is_operational ())
733    {
734      (void)fips_not_operational ();
735      return NULL;
736    }
737  return _gcry_pk_get_keygrip (key, array);
738}
739
740const char *
741gcry_pk_get_curve (gcry_sexp_t key, int iterator, unsigned int *r_nbits)
742{
743  if (!fips_is_operational ())
744    {
745      (void)fips_not_operational ();
746      return NULL;
747    }
748  return _gcry_pk_get_curve (key, iterator, r_nbits);
749}
750
751gcry_sexp_t
752gcry_pk_get_param (int algo, const char *name)
753{
754  if (!fips_is_operational ())
755    {
756      (void)fips_not_operational ();
757      return NULL;
758    }
759  return _gcry_pk_get_param (algo, name);
760}
761
762gcry_error_t
763gcry_pk_list (int *list, int *list_length)
764{
765  return _gcry_pk_list (list, list_length);
766}
767
768gcry_error_t
769gcry_md_open (gcry_md_hd_t *h, int algo, unsigned int flags)
770{
771  if (!fips_is_operational ())
772    {
773      *h = NULL;
774      return gpg_error (fips_not_operational ());
775    }
776
777  return _gcry_md_open (h, algo, flags);
778}
779
780void
781gcry_md_close (gcry_md_hd_t hd)
782{
783  _gcry_md_close (hd);
784}
785
786gcry_error_t
787gcry_md_enable (gcry_md_hd_t hd, int algo)
788{
789  if (!fips_is_operational ())
790    return gpg_error (fips_not_operational ());
791  return _gcry_md_enable (hd, algo);
792}
793
794gcry_error_t
795gcry_md_copy (gcry_md_hd_t *bhd, gcry_md_hd_t ahd)
796{
797  if (!fips_is_operational ())
798    {
799      *bhd = NULL;
800      return gpg_error (fips_not_operational ());
801    }
802  return _gcry_md_copy (bhd, ahd);
803}
804
805void
806gcry_md_reset (gcry_md_hd_t hd)
807{
808  _gcry_md_reset (hd);
809}
810
811gcry_error_t
812gcry_md_ctl (gcry_md_hd_t hd, int cmd, void *buffer, size_t buflen)
813{
814  if (!fips_is_operational ())
815    return gpg_error (fips_not_operational ());
816  return _gcry_md_ctl (hd, cmd, buffer, buflen);
817}
818
819void
820gcry_md_write (gcry_md_hd_t hd, const void *buffer, size_t length)
821{
822  if (!fips_is_operational ())
823    {
824      (void)fips_not_operational ();
825      return;
826    }
827  _gcry_md_write (hd, buffer, length);
828}
829
830unsigned char *
831gcry_md_read (gcry_md_hd_t hd, int algo)
832{
833  return _gcry_md_read (hd, algo);
834}
835
836void
837gcry_md_hash_buffer (int algo, void *digest,
838                     const void *buffer, size_t length)
839{
840  if (!fips_is_operational ())
841    {
842      (void)fips_not_operational ();
843      fips_signal_error ("called in non-operational state");
844    }
845  _gcry_md_hash_buffer (algo, digest, buffer, length);
846}
847
848int
849gcry_md_get_algo (gcry_md_hd_t hd)
850{
851  if (!fips_is_operational ())
852    {
853      (void)fips_not_operational ();
854      fips_signal_error ("used in non-operational state");
855      return 0;
856    }
857  return _gcry_md_get_algo (hd);
858}
859
860unsigned int
861gcry_md_get_algo_dlen (int algo)
862{
863  return _gcry_md_get_algo_dlen (algo);
864}
865
866int
867gcry_md_is_enabled (gcry_md_hd_t a, int algo)
868{
869  if (!fips_is_operational ())
870    {
871      (void)fips_not_operational ();
872      return 0;
873    }
874
875  return _gcry_md_is_enabled (a, algo);
876}
877
878int
879gcry_md_is_secure (gcry_md_hd_t a)
880{
881  return _gcry_md_is_secure (a);
882}
883
884gcry_error_t
885gcry_md_info (gcry_md_hd_t h, int what, void *buffer, size_t *nbytes)
886{
887  if (!fips_is_operational ())
888    return gpg_error (fips_not_operational ());
889
890  return _gcry_md_info (h, what, buffer, nbytes);
891}
892
893gcry_error_t
894gcry_md_algo_info (int algo, int what, void *buffer, size_t *nbytes)
895{
896  return _gcry_md_algo_info (algo, what, buffer, nbytes);
897}
898
899const char *
900gcry_md_algo_name (int algo)
901{
902  return _gcry_md_algo_name (algo);
903}
904
905int
906gcry_md_map_name (const char* name)
907{
908  return _gcry_md_map_name (name);
909}
910
911gcry_error_t
912gcry_md_setkey (gcry_md_hd_t hd, const void *key, size_t keylen)
913{
914  if (!fips_is_operational ())
915    return gpg_error (fips_not_operational ());
916  return _gcry_md_setkey (hd, key, keylen);
917}
918
919void
920gcry_md_debug (gcry_md_hd_t hd, const char *suffix)
921{
922  _gcry_md_debug (hd, suffix);
923}
924
925gcry_error_t
926gcry_md_list (int *list, int *list_length)
927{
928  return _gcry_md_list (list, list_length);
929}
930
931gcry_error_t
932gcry_ac_data_new (gcry_ac_data_t *data)
933{
934  return _gcry_ac_data_new (data);
935}
936
937void
938gcry_ac_data_destroy (gcry_ac_data_t data)
939{
940  _gcry_ac_data_destroy (data);
941}
942
943gcry_error_t
944gcry_ac_data_copy (gcry_ac_data_t *data_cp, gcry_ac_data_t data)
945{
946  return _gcry_ac_data_copy (data_cp, data);
947}
948
949unsigned int
950gcry_ac_data_length (gcry_ac_data_t data)
951{
952  return _gcry_ac_data_length (data);
953}
954
955void
956gcry_ac_data_clear (gcry_ac_data_t data)
957{
958  _gcry_ac_data_clear (data);
959}
960
961gcry_error_t
962gcry_ac_data_set (gcry_ac_data_t data, unsigned int flags,
963                  const char *name, gcry_mpi_t mpi)
964{
965  return _gcry_ac_data_set (data, flags, name, mpi);
966}
967
968gcry_error_t
969gcry_ac_data_get_name (gcry_ac_data_t data, unsigned int flags,
970                       const char *name, gcry_mpi_t *mpi)
971{
972  return _gcry_ac_data_get_name (data, flags, name, mpi);
973}
974
975gcry_error_t
976gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int flags,
977                        unsigned int idx, const char **name, gcry_mpi_t *mpi)
978{
979  return _gcry_ac_data_get_index (data, flags, idx, name, mpi);
980}
981
982gcry_error_t
983gcry_ac_data_to_sexp (gcry_ac_data_t data, gcry_sexp_t *sexp,
984                      const char **identifiers)
985{
986  return _gcry_ac_data_to_sexp (data, sexp, identifiers);
987}
988
989gcry_error_t
990gcry_ac_data_from_sexp (gcry_ac_data_t *data, gcry_sexp_t sexp,
991                        const char **identifiers)
992{
993  return _gcry_ac_data_from_sexp (data, sexp, identifiers);
994}
995
996void
997gcry_ac_io_init (gcry_ac_io_t *ac_io, gcry_ac_io_mode_t mode,
998                 gcry_ac_io_type_t type, ...)
999{
1000  va_list arg_ptr;
1001
1002  va_start (arg_ptr, type);
1003  _gcry_ac_io_init_va (ac_io, mode, type, arg_ptr);
1004  va_end (arg_ptr);
1005}
1006
1007void
1008gcry_ac_io_init_va (gcry_ac_io_t *ac_io, gcry_ac_io_mode_t mode,
1009                    gcry_ac_io_type_t type, va_list ap)
1010{
1011  _gcry_ac_io_init_va (ac_io, mode, type, ap);
1012}
1013
1014gcry_error_t
1015gcry_ac_open (gcry_ac_handle_t *handle,
1016              gcry_ac_id_t algorithm, unsigned int flags)
1017{
1018  return _gcry_ac_open (handle, algorithm, flags);
1019}
1020
1021void
1022gcry_ac_close (gcry_ac_handle_t handle)
1023{
1024  _gcry_ac_close (handle);
1025}
1026
1027gcry_error_t
1028gcry_ac_key_init (gcry_ac_key_t *key, gcry_ac_handle_t handle,
1029                  gcry_ac_key_type_t type, gcry_ac_data_t data)
1030{
1031  return _gcry_ac_key_init (key, handle, type, data);
1032}
1033
1034gcry_error_t
1035gcry_ac_key_pair_generate (gcry_ac_handle_t handle,
1036                           unsigned int nbits, void *spec,
1037                           gcry_ac_key_pair_t *key_pair,
1038                           gcry_mpi_t **miscdata)
1039{
1040  return _gcry_ac_key_pair_generate ( handle, nbits, spec, key_pair, miscdata);
1041}
1042
1043gcry_ac_key_t
1044gcry_ac_key_pair_extract (gcry_ac_key_pair_t keypair, gcry_ac_key_type_t which)
1045{
1046  return _gcry_ac_key_pair_extract (keypair, which);
1047}
1048
1049gcry_ac_data_t
1050gcry_ac_key_data_get (gcry_ac_key_t key)
1051{
1052  return _gcry_ac_key_data_get (key);
1053}
1054
1055gcry_error_t
1056gcry_ac_key_test (gcry_ac_handle_t handle, gcry_ac_key_t key)
1057{
1058  return _gcry_ac_key_test (handle, key);
1059}
1060
1061gcry_error_t
1062gcry_ac_key_get_nbits (gcry_ac_handle_t handle,
1063                       gcry_ac_key_t key, unsigned int *nbits)
1064{
1065  return _gcry_ac_key_get_nbits (handle, key, nbits);
1066}
1067
1068gcry_error_t
1069gcry_ac_key_get_grip (gcry_ac_handle_t handle, gcry_ac_key_t key,
1070                      unsigned char *key_grip)
1071{
1072  return _gcry_ac_key_get_grip (handle, key, key_grip);
1073}
1074
1075void
1076gcry_ac_key_destroy (gcry_ac_key_t key)
1077{
1078  _gcry_ac_key_destroy (key);
1079}
1080
1081void
1082gcry_ac_key_pair_destroy (gcry_ac_key_pair_t key_pair)
1083{
1084  _gcry_ac_key_pair_destroy (key_pair);
1085}
1086
1087gcry_error_t
1088gcry_ac_data_encode (gcry_ac_em_t method, unsigned int flags, void *options,
1089                     gcry_ac_io_t *io_read, gcry_ac_io_t *io_write)
1090{
1091  return _gcry_ac_data_encode (method, flags, options, io_read, io_write);
1092}
1093
1094gcry_error_t
1095gcry_ac_data_decode (gcry_ac_em_t method, unsigned int flags, void *options,
1096                     gcry_ac_io_t *io_read, gcry_ac_io_t *io_write)
1097{
1098  return _gcry_ac_data_decode (method, flags, options, io_read,  io_write);
1099}
1100
1101gcry_error_t
1102gcry_ac_data_encrypt (gcry_ac_handle_t handle,
1103                      unsigned int flags,
1104                      gcry_ac_key_t key,
1105                      gcry_mpi_t data_plain,
1106                      gcry_ac_data_t *data_encrypted)
1107{
1108  return _gcry_ac_data_encrypt (handle, flags, key,
1109                                data_plain, data_encrypted);
1110}
1111
1112gcry_error_t
1113gcry_ac_data_decrypt (gcry_ac_handle_t handle,
1114                      unsigned int flags,
1115                      gcry_ac_key_t key,
1116                      gcry_mpi_t *data_plain,
1117                      gcry_ac_data_t data_encrypted)
1118{
1119  return _gcry_ac_data_decrypt (handle, flags, key,
1120                                data_plain, data_encrypted);
1121}
1122
1123gcry_error_t
1124gcry_ac_data_sign (gcry_ac_handle_t handle,
1125                   gcry_ac_key_t key,
1126                   gcry_mpi_t data,
1127                   gcry_ac_data_t *data_signature)
1128{
1129  return _gcry_ac_data_sign (handle, key, data, data_signature);
1130}
1131
1132gcry_error_t
1133gcry_ac_data_verify (gcry_ac_handle_t handle,
1134                     gcry_ac_key_t key,
1135                     gcry_mpi_t data,
1136                     gcry_ac_data_t data_signature)
1137{
1138  return _gcry_ac_data_verify (handle, key, data, data_signature);
1139}
1140
1141gcry_error_t
1142gcry_ac_data_encrypt_scheme (gcry_ac_handle_t handle,
1143                             gcry_ac_scheme_t scheme,
1144                             unsigned int flags, void *opts,
1145                             gcry_ac_key_t key,
1146                             gcry_ac_io_t *io_message,
1147                             gcry_ac_io_t *io_cipher)
1148{
1149  return _gcry_ac_data_encrypt_scheme (handle, scheme, flags, opts, key,
1150                                       io_message, io_cipher);
1151}
1152
1153gcry_error_t
1154gcry_ac_data_decrypt_scheme (gcry_ac_handle_t handle,
1155                             gcry_ac_scheme_t scheme,
1156                             unsigned int flags, void *opts,
1157                             gcry_ac_key_t key,
1158                             gcry_ac_io_t *io_cipher,
1159                             gcry_ac_io_t *io_message)
1160{
1161  return _gcry_ac_data_decrypt_scheme (handle, scheme, flags, opts, key,
1162                                       io_cipher, io_message);
1163}
1164
1165gcry_error_t
1166gcry_ac_data_sign_scheme (gcry_ac_handle_t handle,
1167                          gcry_ac_scheme_t scheme,
1168                          unsigned int flags, void *opts,
1169                          gcry_ac_key_t key,
1170                          gcry_ac_io_t *io_message,
1171                          gcry_ac_io_t *io_signature)
1172{
1173  return _gcry_ac_data_sign_scheme (handle, scheme, flags, opts, key,
1174                                    io_message, io_signature);
1175}
1176
1177gcry_error_t
1178gcry_ac_data_verify_scheme (gcry_ac_handle_t handle,
1179                            gcry_ac_scheme_t scheme,
1180                            unsigned int flags, void *opts,
1181                            gcry_ac_key_t key,
1182                            gcry_ac_io_t *io_message,
1183                            gcry_ac_io_t *io_signature)
1184{
1185  return _gcry_ac_data_verify_scheme (handle, scheme, flags, opts, key,
1186                                      io_message, io_signature);
1187}
1188
1189gcry_error_t
1190gcry_ac_id_to_name (gcry_ac_id_t algorithm, const char **name)
1191{
1192  /* This function is deprecated.  We implement it in terms of the
1193     suggested replacement.  */
1194  const char *tmp = _gcry_pk_algo_name (algorithm);
1195  if (!*tmp)
1196    return gcry_error (GPG_ERR_PUBKEY_ALGO);
1197  *name = tmp;
1198  return 0;
1199}
1200
1201gcry_error_t
1202gcry_ac_name_to_id (const char *name, gcry_ac_id_t *algorithm)
1203{
1204  /* This function is deprecated.  We implement it in terms of the
1205     suggested replacement.  */
1206  int algo = _gcry_pk_map_name (name);
1207  if (!algo)
1208    return gcry_error (GPG_ERR_PUBKEY_ALGO);
1209  *algorithm = algo;
1210  return 0;
1211}
1212
1213gpg_error_t
1214gcry_kdf_derive (const void *passphrase, size_t passphraselen,
1215                 int algo, int hashalgo,
1216                 const void *salt, size_t saltlen,
1217                 unsigned long iterations,
1218                 size_t keysize, void *keybuffer)
1219{
1220  return _gcry_kdf_derive (passphrase, passphraselen, algo, hashalgo,
1221                           salt, saltlen, iterations, keysize, keybuffer);
1222}
1223
1224void
1225gcry_randomize (void *buffer, size_t length, enum gcry_random_level level)
1226{
1227  if (!fips_is_operational ())
1228    {
1229      (void)fips_not_operational ();
1230      fips_signal_fatal_error ("called in non-operational state");
1231      fips_noreturn ();
1232    }
1233  _gcry_randomize (buffer, length, level);
1234}
1235
1236gcry_error_t
1237gcry_random_add_bytes (const void *buffer, size_t length, int quality)
1238{
1239  if (!fips_is_operational ())
1240    return gpg_error (fips_not_operational ());
1241  return _gcry_random_add_bytes (buffer, length, quality);
1242}
1243
1244void *
1245gcry_random_bytes (size_t nbytes, enum gcry_random_level level)
1246{
1247  if (!fips_is_operational ())
1248    {
1249      (void)fips_not_operational ();
1250      fips_signal_fatal_error ("called in non-operational state");
1251      fips_noreturn ();
1252    }
1253
1254  return _gcry_random_bytes (nbytes,level);
1255}
1256
1257void *
1258gcry_random_bytes_secure (size_t nbytes, enum gcry_random_level level)
1259{
1260  if (!fips_is_operational ())
1261    {
1262      (void)fips_not_operational ();
1263      fips_signal_fatal_error ("called in non-operational state");
1264      fips_noreturn ();
1265    }
1266
1267  return _gcry_random_bytes_secure (nbytes, level);
1268}
1269
1270void
1271gcry_mpi_randomize (gcry_mpi_t w,
1272                    unsigned int nbits, enum gcry_random_level level)
1273{
1274  _gcry_mpi_randomize (w, nbits, level);
1275}
1276
1277void
1278gcry_create_nonce (void *buffer, size_t length)
1279{
1280  if (!fips_is_operational ())
1281    {
1282      (void)fips_not_operational ();
1283      fips_signal_fatal_error ("called in non-operational state");
1284      fips_noreturn ();
1285    }
1286  _gcry_create_nonce (buffer, length);
1287}
1288
1289gcry_error_t
1290gcry_prime_generate (gcry_mpi_t *prime,
1291                     unsigned int prime_bits,
1292                     unsigned int factor_bits,
1293                     gcry_mpi_t **factors,
1294                     gcry_prime_check_func_t cb_func,
1295                     void *cb_arg,
1296                     gcry_random_level_t random_level,
1297                     unsigned int flags)
1298{
1299  return _gcry_prime_generate (prime, prime_bits, factor_bits, factors,
1300                               cb_func, cb_arg, random_level, flags);
1301}
1302
1303gcry_error_t
1304gcry_prime_group_generator (gcry_mpi_t *r_g,
1305                            gcry_mpi_t prime, gcry_mpi_t *factors,
1306                            gcry_mpi_t start_g)
1307{
1308  return _gcry_prime_group_generator (r_g, prime, factors, start_g);
1309}
1310
1311void
1312gcry_prime_release_factors (gcry_mpi_t *factors)
1313{
1314  _gcry_prime_release_factors (factors);
1315}
1316
1317gcry_error_t
1318gcry_prime_check (gcry_mpi_t x, unsigned int flags)
1319{
1320  return _gcry_prime_check (x, flags);
1321}
1322
1323void
1324gcry_set_progress_handler (gcry_handler_progress_t cb, void *cb_data)
1325{
1326  _gcry_set_progress_handler (cb, cb_data);
1327}
1328
1329void
1330gcry_set_allocation_handler (gcry_handler_alloc_t func_alloc,
1331                             gcry_handler_alloc_t func_alloc_secure,
1332                             gcry_handler_secure_check_t func_secure_check,
1333                             gcry_handler_realloc_t func_realloc,
1334                             gcry_handler_free_t func_free)
1335{
1336  _gcry_set_allocation_handler (func_alloc, func_alloc_secure,
1337                                func_secure_check, func_realloc, func_free);
1338}
1339
1340void
1341gcry_set_outofcore_handler (gcry_handler_no_mem_t h, void *opaque)
1342{
1343  _gcry_set_outofcore_handler (h, opaque);
1344}
1345
1346void
1347gcry_set_fatalerror_handler (gcry_handler_error_t fnc, void *opaque)
1348{
1349  _gcry_set_fatalerror_handler (fnc, opaque);
1350}
1351
1352void
1353gcry_set_log_handler (gcry_handler_log_t f, void *opaque)
1354{
1355  _gcry_set_log_handler (f, opaque);
1356}
1357
1358void
1359gcry_set_gettext_handler (const char *(*f)(const char*))
1360{
1361  _gcry_set_gettext_handler (f);
1362}
1363
1364void *
1365gcry_malloc (size_t n)
1366{
1367  return _gcry_malloc (n);
1368}
1369
1370void *
1371gcry_calloc (size_t n, size_t m)
1372{
1373  return _gcry_calloc (n, m);
1374}
1375
1376void *
1377gcry_malloc_secure (size_t n)
1378{
1379  return _gcry_malloc_secure (n);
1380}
1381
1382void *
1383gcry_calloc_secure (size_t n, size_t m)
1384{
1385  return _gcry_calloc_secure (n,m);
1386}
1387
1388void *
1389gcry_realloc (void *a, size_t n)
1390{
1391  return _gcry_realloc (a, n);
1392}
1393
1394char *
1395gcry_strdup (const char *string)
1396{
1397  return _gcry_strdup (string);
1398}
1399
1400void *
1401gcry_xmalloc (size_t n)
1402{
1403  return _gcry_xmalloc (n);
1404}
1405
1406void *
1407gcry_xcalloc (size_t n, size_t m)
1408{
1409  return _gcry_xcalloc (n, m);
1410}
1411
1412void *
1413gcry_xmalloc_secure (size_t n)
1414{
1415  return _gcry_xmalloc_secure (n);
1416}
1417
1418void *
1419gcry_xcalloc_secure (size_t n, size_t m)
1420{
1421  return _gcry_xcalloc_secure (n, m);
1422}
1423
1424void *
1425gcry_xrealloc (void *a, size_t n)
1426{
1427  return _gcry_xrealloc (a, n);
1428}
1429
1430char *
1431gcry_xstrdup (const char *a)
1432{
1433  return _gcry_xstrdup (a);
1434}
1435
1436void
1437gcry_free (void *a)
1438{
1439  _gcry_free (a);
1440}
1441
1442int
1443gcry_is_secure (const void *a)
1444{
1445  return _gcry_is_secure (a);
1446}
1447
1448
1449gcry_error_t
1450gcry_cipher_register (gcry_cipher_spec_t *cipher, int *algorithm_id,
1451                      gcry_module_t *module)
1452{
1453  return _gcry_cipher_register (cipher, NULL, algorithm_id, module);
1454}
1455
1456void
1457gcry_cipher_unregister (gcry_module_t module)
1458{
1459  _gcry_cipher_unregister (module);
1460}
1461
1462gcry_error_t
1463gcry_pk_register (gcry_pk_spec_t *pubkey, unsigned int *algorithm_id,
1464                  gcry_module_t *module)
1465{
1466  return _gcry_pk_register (pubkey, NULL, algorithm_id, module);
1467}
1468
1469void
1470gcry_pk_unregister (gcry_module_t module)
1471{
1472  _gcry_pk_unregister (module);
1473}
1474
1475gcry_error_t
1476gcry_md_register (gcry_md_spec_t *digest, unsigned int *algorithm_id,
1477                  gcry_module_t *module)
1478{
1479  return _gcry_md_register (digest, NULL, algorithm_id, module);
1480}
1481
1482void
1483gcry_md_unregister (gcry_module_t module)
1484{
1485  _gcry_md_unregister (module);
1486}
1487