LCOV - code coverage report
Current view: top level - common - util.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 2 0.0 %
Date: 2016-11-29 15:00:56 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /* util.h - Utility functions for GnuPG
       2             :  * Copyright (C) 2001, 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
       3             :  *
       4             :  * This file is part of GnuPG.
       5             :  *
       6             :  * GnuPG is free software; you can redistribute it and/or modify it
       7             :  * under the terms of either
       8             :  *
       9             :  *   - the GNU Lesser General Public License as published by the Free
      10             :  *     Software Foundation; either version 3 of the License, or (at
      11             :  *     your option) any later version.
      12             :  *
      13             :  * or
      14             :  *
      15             :  *   - the GNU General Public License as published by the Free
      16             :  *     Software Foundation; either version 2 of the License, or (at
      17             :  *     your option) any later version.
      18             :  *
      19             :  * or both in parallel, as here.
      20             :  *
      21             :  * GnuPG is distributed in the hope that it will be useful, but
      22             :  * WITHOUT ANY WARRANTY; without even the implied warranty of
      23             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      24             :  * General Public License for more details.
      25             :  *
      26             :  * You should have received a copies of the GNU General Public License
      27             :  * and the GNU Lesser General Public License along with this program;
      28             :  * if not, see <https://www.gnu.org/licenses/>.
      29             :  */
      30             : 
      31             : #ifndef GNUPG_COMMON_UTIL_H
      32             : #define GNUPG_COMMON_UTIL_H
      33             : 
      34             : #include <gcrypt.h> /* We need this for the memory function protos. */
      35             : #include <errno.h>  /* We need errno.  */
      36             : #include <gpg-error.h> /* We need gpg_error_t and estream. */
      37             : 
      38             : /* These error codes are used but not defined in the required
      39             :  * libgpg-error version.  Define them here.
      40             :  * Example: (#if GPG_ERROR_VERSION_NUMBER < 0x011500 // 1.21)
      41             :  */
      42             : 
      43             : 
      44             : /* Hash function used with libksba. */
      45             : #define HASH_FNC ((void (*)(void *, const void*,size_t))gcry_md_write)
      46             : 
      47             : /* Get all the stuff from jnlib. */
      48             : #include "../common/logging.h"
      49             : #include "../common/argparse.h"
      50             : #include "../common/stringhelp.h"
      51             : #include "../common/mischelp.h"
      52             : #include "../common/strlist.h"
      53             : #include "../common/dotlock.h"
      54             : #include "../common/utf8conv.h"
      55             : #include "../common/dynload.h"
      56             : #include "../common/fwddecl.h"
      57             : #include "../common/utilproto.h"
      58             : 
      59             : #include "gettime.h"
      60             : 
      61             : /* Redefine asprintf by our estream version which uses our own memory
      62             :    allocator..  */
      63             : #define asprintf gpgrt_asprintf
      64             : #define vasprintf gpgrt_vasprintf
      65             : 
      66             : /* Due to a bug in mingw32's snprintf related to the 'l' modifier and
      67             :    for increased portability we use our snprintf on all systems. */
      68             : #undef snprintf
      69             : #define snprintf gpgrt_snprintf
      70             : 
      71             : 
      72             : /* Replacements for macros not available with libgpg-error < 1.20.  */
      73             : 
      74             : /* We need this type even if we are not using libreadline and or we
      75             :    did not include libreadline in the current file. */
      76             : #ifndef GNUPG_LIBREADLINE_H_INCLUDED
      77             : typedef char **rl_completion_func_t (const char *, int, int);
      78             : #endif /*!GNUPG_LIBREADLINE_H_INCLUDED*/
      79             : 
      80             : 
      81             : /* Handy malloc macros - please use only them. */
      82             : #define xtrymalloc(a)    gcry_malloc ((a))
      83             : #define xtrymalloc_secure(a)  gcry_malloc_secure ((a))
      84             : #define xtrycalloc(a,b)  gcry_calloc ((a),(b))
      85             : #define xtrycalloc_secure(a,b)  gcry_calloc_secure ((a),(b))
      86             : #define xtryrealloc(a,b) gcry_realloc ((a),(b))
      87             : #define xtrystrdup(a)    gcry_strdup ((a))
      88             : #define xfree(a)         gcry_free ((a))
      89             : #define xfree_fnc        gcry_free
      90             : 
      91             : #define xmalloc(a)       gcry_xmalloc ((a))
      92             : #define xmalloc_secure(a)  gcry_xmalloc_secure ((a))
      93             : #define xcalloc(a,b)     gcry_xcalloc ((a),(b))
      94             : #define xcalloc_secure(a,b) gcry_xcalloc_secure ((a),(b))
      95             : #define xrealloc(a,b)    gcry_xrealloc ((a),(b))
      96             : #define xstrdup(a)       gcry_xstrdup ((a))
      97             : 
      98             : /* For compatibility with gpg 1.4 we also define these: */
      99             : #define xmalloc_clear(a) gcry_xcalloc (1, (a))
     100             : #define xmalloc_secure_clear(a) gcry_xcalloc_secure (1, (a))
     101             : 
     102             : /* The default error source of the application.  This is different
     103             :    from GPG_ERR_SOURCE_DEFAULT in that it does not depend on the
     104             :    source file and thus is usable in code shared by applications.
     105             :    Defined by init.c.  */
     106             : extern gpg_err_source_t default_errsource;
     107             : 
     108             : /* Convenience function to return a gpg-error code for memory
     109             :    allocation failures.  This function makes sure that an error will
     110             :    be returned even if accidentally ERRNO is not set.  */
     111             : static inline gpg_error_t
     112           0 : out_of_core (void)
     113             : {
     114           0 :   return gpg_error_from_syserror ();
     115             : }
     116             : 
     117             : 
     118             : /*-- yesno.c --*/
     119             : int answer_is_yes (const char *s);
     120             : int answer_is_yes_no_default (const char *s, int def_answer);
     121             : int answer_is_yes_no_quit (const char *s);
     122             : int answer_is_okay_cancel (const char *s, int def_answer);
     123             : 
     124             : /*-- xreadline.c --*/
     125             : ssize_t read_line (FILE *fp,
     126             :                    char **addr_of_buffer, size_t *length_of_buffer,
     127             :                    size_t *max_length);
     128             : 
     129             : 
     130             : /*-- b64enc.c and b64dec.c --*/
     131             : struct b64state
     132             : {
     133             :   unsigned int flags;
     134             :   int idx;
     135             :   int quad_count;
     136             :   FILE *fp;
     137             :   estream_t stream;
     138             :   char *title;
     139             :   unsigned char radbuf[4];
     140             :   u32 crc;
     141             :   int stop_seen:1;
     142             :   int invalid_encoding:1;
     143             :   gpg_error_t lasterr;
     144             : };
     145             : 
     146             : gpg_error_t b64enc_start (struct b64state *state, FILE *fp, const char *title);
     147             : gpg_error_t b64enc_start_es (struct b64state *state, estream_t fp,
     148             :                              const char *title);
     149             : gpg_error_t b64enc_write (struct b64state *state,
     150             :                           const void *buffer, size_t nbytes);
     151             : gpg_error_t b64enc_finish (struct b64state *state);
     152             : 
     153             : gpg_error_t b64dec_start (struct b64state *state, const char *title);
     154             : gpg_error_t b64dec_proc (struct b64state *state, void *buffer, size_t length,
     155             :                          size_t *r_nbytes);
     156             : gpg_error_t b64dec_finish (struct b64state *state);
     157             : 
     158             : /*-- sexputil.c */
     159             : char *canon_sexp_to_string (const unsigned char *canon, size_t canonlen);
     160             : void log_printcanon (const char *text,
     161             :                      const unsigned char *sexp, size_t sexplen);
     162             : void log_printsexp (const char *text, gcry_sexp_t sexp);
     163             : 
     164             : gpg_error_t make_canon_sexp (gcry_sexp_t sexp,
     165             :                              unsigned char **r_buffer, size_t *r_buflen);
     166             : gpg_error_t make_canon_sexp_pad (gcry_sexp_t sexp, int secure,
     167             :                                  unsigned char **r_buffer, size_t *r_buflen);
     168             : gpg_error_t keygrip_from_canon_sexp (const unsigned char *key, size_t keylen,
     169             :                                      unsigned char *grip);
     170             : int cmp_simple_canon_sexp (const unsigned char *a, const unsigned char *b);
     171             : unsigned char *make_simple_sexp_from_hexstr (const char *line,
     172             :                                              size_t *nscanned);
     173             : int hash_algo_from_sigval (const unsigned char *sigval);
     174             : unsigned char *make_canon_sexp_from_rsa_pk (const void *m, size_t mlen,
     175             :                                             const void *e, size_t elen,
     176             :                                             size_t *r_len);
     177             : gpg_error_t get_rsa_pk_from_canon_sexp (const unsigned char *keydata,
     178             :                                         size_t keydatalen,
     179             :                                         unsigned char const **r_n,
     180             :                                         size_t *r_nlen,
     181             :                                         unsigned char const **r_e,
     182             :                                         size_t *r_elen);
     183             : gpg_error_t get_pk_algo_from_canon_sexp (const unsigned char *keydata,
     184             :                                          size_t keydatalen,
     185             :                                          const char **r_algo);
     186             : int get_pk_algo_from_key (gcry_sexp_t key);
     187             : 
     188             : /*-- convert.c --*/
     189             : int hex2bin (const char *string, void *buffer, size_t length);
     190             : int hexcolon2bin (const char *string, void *buffer, size_t length);
     191             : char *bin2hex (const void *buffer, size_t length, char *stringbuf);
     192             : char *bin2hexcolon (const void *buffer, size_t length, char *stringbuf);
     193             : const char *hex2str (const char *hexstring,
     194             :                      char *buffer, size_t bufsize, size_t *buflen);
     195             : char *hex2str_alloc (const char *hexstring, size_t *r_count);
     196             : 
     197             : /*-- percent.c --*/
     198             : char *percent_plus_escape (const char *string);
     199             : char *percent_plus_unescape (const char *string, int nulrepl);
     200             : char *percent_unescape (const char *string, int nulrepl);
     201             : 
     202             : size_t percent_plus_unescape_inplace (char *string, int nulrepl);
     203             : size_t percent_unescape_inplace (char *string, int nulrepl);
     204             : 
     205             : /*-- openpgp-oid.c --*/
     206             : gpg_error_t openpgp_oid_from_str (const char *string, gcry_mpi_t *r_mpi);
     207             : char *openpgp_oid_to_str (gcry_mpi_t a);
     208             : int openpgp_oid_is_ed25519 (gcry_mpi_t a);
     209             : int openpgp_oid_is_cv25519 (gcry_mpi_t a);
     210             : const char *openpgp_curve_to_oid (const char *name, unsigned int *r_nbits);
     211             : const char *openpgp_oid_to_curve (const char *oid, int canon);
     212             : const char *openpgp_enum_curves (int *idxp);
     213             : const char *openpgp_is_curve_supported (const char *name, int *r_algo);
     214             : 
     215             : 
     216             : /*-- homedir.c --*/
     217             : const char *standard_homedir (void);
     218             : const char *default_homedir (void);
     219             : void gnupg_set_homedir (const char *newdir);
     220             : const char *gnupg_homedir (void);
     221             : int gnupg_default_homedir_p (void);
     222             : const char *gnupg_socketdir (void);
     223             : const char *gnupg_sysconfdir (void);
     224             : const char *gnupg_bindir (void);
     225             : const char *gnupg_libexecdir (void);
     226             : const char *gnupg_libdir (void);
     227             : const char *gnupg_datadir (void);
     228             : const char *gnupg_localedir (void);
     229             : const char *gnupg_cachedir (void);
     230             : const char *dirmngr_socket_name (void);
     231             : 
     232             : char *_gnupg_socketdir_internal (int skip_checks, unsigned *r_info);
     233             : 
     234             : /* All module names.  We also include gpg and gpgsm for the sake for
     235             :    gpgconf. */
     236             : #define GNUPG_MODULE_NAME_AGENT        1
     237             : #define GNUPG_MODULE_NAME_PINENTRY     2
     238             : #define GNUPG_MODULE_NAME_SCDAEMON     3
     239             : #define GNUPG_MODULE_NAME_DIRMNGR      4
     240             : #define GNUPG_MODULE_NAME_PROTECT_TOOL 5
     241             : #define GNUPG_MODULE_NAME_CHECK_PATTERN 6
     242             : #define GNUPG_MODULE_NAME_GPGSM         7
     243             : #define GNUPG_MODULE_NAME_GPG           8
     244             : #define GNUPG_MODULE_NAME_CONNECT_AGENT 9
     245             : #define GNUPG_MODULE_NAME_GPGCONF       10
     246             : #define GNUPG_MODULE_NAME_DIRMNGR_LDAP  11
     247             : #define GNUPG_MODULE_NAME_GPGV          12
     248             : const char *gnupg_module_name (int which);
     249             : void gnupg_module_name_flush_some (void);
     250             : 
     251             : 
     252             : 
     253             : /*-- gpgrlhelp.c --*/
     254             : void gnupg_rl_initialize (void);
     255             : 
     256             : /*-- helpfile.c --*/
     257             : char *gnupg_get_help_string (const char *key, int only_current_locale);
     258             : 
     259             : /*-- localename.c --*/
     260             : const char *gnupg_messages_locale_name (void);
     261             : 
     262             : /*-- miscellaneous.c --*/
     263             : 
     264             : /* This function is called at startup to tell libgcrypt to use our own
     265             :    logging subsystem. */
     266             : void setup_libgcrypt_logging (void);
     267             : 
     268             : /* Print an out of core emssage and die.  */
     269             : void xoutofcore (void);
     270             : 
     271             : /* Same as estream_asprintf but die on memory failure.  */
     272             : char *xasprintf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
     273             : /* This is now an alias to estream_asprintf.  */
     274             : char *xtryasprintf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
     275             : 
     276             : /* Replacement for gcry_cipher_algo_name.  */
     277             : const char *gnupg_cipher_algo_name (int algo);
     278             : 
     279             : void obsolete_option (const char *configname, unsigned int configlineno,
     280             :                       const char *name);
     281             : 
     282             : const char *print_fname_stdout (const char *s);
     283             : const char *print_fname_stdin (const char *s);
     284             : void print_utf8_buffer3 (estream_t fp, const void *p, size_t n,
     285             :                          const char *delim);
     286             : void print_utf8_buffer2 (estream_t fp, const void *p, size_t n, int delim);
     287             : void print_utf8_buffer (estream_t fp, const void *p, size_t n);
     288             : void print_hexstring (FILE *fp, const void *buffer, size_t length,
     289             :                       int reserved);
     290             : char *try_make_printable_string (const void *p, size_t n, int delim);
     291             : char *make_printable_string (const void *p, size_t n, int delim);
     292             : 
     293             : int is_file_compressed (const char *s, int *ret_rc);
     294             : 
     295             : int match_multistr (const char *multistr,const char *match);
     296             : 
     297             : int gnupg_compare_version (const char *a, const char *b);
     298             : 
     299             : struct debug_flags_s
     300             : {
     301             :   unsigned int flag;
     302             :   const char *name;
     303             : };
     304             : int parse_debug_flag (const char *string, unsigned int *debugvar,
     305             :                       const struct debug_flags_s *flags);
     306             : 
     307             : 
     308             : /*-- Simple replacement functions. */
     309             : 
     310             : /* We use the gnupg_ttyname macro to be safe not to run into conflicts
     311             :    which an extisting but broken ttyname.  */
     312             : #if !defined(HAVE_TTYNAME) || defined(HAVE_BROKEN_TTYNAME)
     313             : # define gnupg_ttyname(n) _gnupg_ttyname ((n))
     314             : /* Systems without ttyname (W32) will merely return NULL. */
     315             : static inline char *
     316             : _gnupg_ttyname (int fd)
     317             : {
     318             :   (void)fd;
     319             :   return NULL;
     320             : }
     321             : #else /*HAVE_TTYNAME*/
     322             : # define gnupg_ttyname(n) ttyname ((n))
     323             : #endif /*HAVE_TTYNAME */
     324             : 
     325             : #ifdef HAVE_W32CE_SYSTEM
     326             : #define getpid() GetCurrentProcessId ()
     327             : char *_gnupg_getenv (const char *name); /* See sysutils.c */
     328             : #define getenv(a)  _gnupg_getenv ((a))
     329             : char *_gnupg_setenv (const char *name); /* See sysutils.c */
     330             : #define setenv(a,b,c)  _gnupg_setenv ((a),(b),(c))
     331             : int _gnupg_isatty (int fd);
     332             : #define gnupg_isatty(a)  _gnupg_isatty ((a))
     333             : #else
     334             : #define gnupg_isatty(a)  isatty ((a))
     335             : #endif
     336             : 
     337             : 
     338             : 
     339             : /*-- Macros to replace ctype ones to avoid locale problems. --*/
     340             : #define spacep(p)   (*(p) == ' ' || *(p) == '\t')
     341             : #define digitp(p)   (*(p) >= '0' && *(p) <= '9')
     342             : #define alphap(p)   ((*(p) >= 'A' && *(p) <= 'Z')       \
     343             :                      || (*(p) >= 'a' && *(p) <= 'z'))
     344             : #define alnump(p)   (alphap (p) || digitp (p))
     345             : #define hexdigitp(a) (digitp (a)                     \
     346             :                       || (*(a) >= 'A' && *(a) <= 'F')  \
     347             :                       || (*(a) >= 'a' && *(a) <= 'f'))
     348             :   /* Note this isn't identical to a C locale isspace() without \f and
     349             :      \v, but works for the purposes used here. */
     350             : #define ascii_isspace(a) ((a)==' ' || (a)=='\n' || (a)=='\r' || (a)=='\t')
     351             : 
     352             : /* The atoi macros assume that the buffer has only valid digits. */
     353             : #define atoi_1(p)   (*(p) - '0' )
     354             : #define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
     355             : #define atoi_4(p)   ((atoi_2(p) * 100) + atoi_2((p)+2))
     356             : #define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
     357             :                      *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
     358             : #define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
     359             : #define xtoi_4(p)   ((xtoi_2(p) * 256) + xtoi_2((p)+2))
     360             : 
     361             : #endif /*GNUPG_COMMON_UTIL_H*/

Generated by: LCOV version 1.11