1# ===========================================================================
2#      https://www.gnu.org/software/autoconf-archive/ax_lib_gcrypt.html
3# ===========================================================================
4#
5# SYNOPSIS
6#
7#   AX_LIB_GCRYPT([yes|no|auto])
8#
9# DESCRIPTION
10#
11#   Searches for the 'gcrypt' library with the --with... option.
12#
13#   If found, define HAVE_GCRYPT and macro GCRYPT_LIBS and GCRYPT_CFLAGS.
14#   Also defines GCRYPT_WITH_<algo> for the algorithms found available.
15#   Possible algorithms are: AES ARCFOUR BLOWFISH CAST5 DES IDEA RFC2268
16#   SERPENT TWOFISH CRC HAVAL MD2 MD4 MD5 RMD160 SHA0 SHA1 SHA224 SHA256
17#   SHA384 SHA512 TIGER WHIRLPOOL DSA ELGAMAL RSA
18#
19#   The argument is used if no --with...-gcrypt option is set. Value "yes"
20#   requires the configuration by default. Value "no" does not require it by
21#   default. Value "auto" configures the library only if available.
22#
23#   See also AX_LIB_BEECRYPT and AX_LIB_CRYPTO.
24#
25# LICENSE
26#
27#   Copyright (c) 2009 Fabien Coelho <autoconf.archive@coelho.net>
28#
29#   Copying and distribution of this file, with or without modification, are
30#   permitted in any medium without royalty provided the copyright notice
31#   and this notice are preserved. This file is offered as-is, without any
32#   warranty.
33
34#serial 12
35
36# AX_CHECK_GCRYPT_ALGO([algo])
37# generate convenient defines for each algorithm
38AC_DEFUN([AX_CHECK_GCRYPT_ALGO],[
39  AC_REQUIRE([AC_PROG_EGREP])
40  AC_MSG_CHECKING([for $1 in gcrypt])
41  if echo $gcrypt_algos | $EGREP -i ":.*( $1 | $1$)" > /dev/null ; then
42    AC_DEFINE([GCRYPT_WITH_$1],[1],[Algorithm $1 in gcrypt library])
43    AC_MSG_RESULT([yes])
44  else
45    AC_MSG_RESULT([no])
46  fi
47])
48
49# AX_LIB_GCRYPT([yes|no|auto])
50AC_DEFUN([AX_LIB_GCRYPT],[
51  AC_MSG_CHECKING([whether gcrypt is enabled])
52  AC_ARG_WITH([gcrypt],[  --with-gcrypt           require gcrypt library
53  --without-gcrypt        disable gcrypt library],[
54    AC_MSG_RESULT([$withval])
55    ac_with_gcrypt=$withval
56  ],[
57    AC_MSG_RESULT($1)
58    ac_with_gcrypt=$1
59  ])
60  if test "$ac_with_gcrypt" = "yes" -o "$ac_with_gcrypt" = "auto" ; then
61    AM_PATH_LIBGCRYPT([1.2.0],[
62      AC_DEFINE([HAVE_GCRYPT],[1],[Gcrypt library is available])
63      HAVE_GCRYPT=1
64      # checking for available algorithms...
65      gcrypt_algos=`$LIBGCRYPT_CONFIG --algorithms`
66      # ciphers
67      # this does not work with a "for" loop: nothing generated in config.h:-(
68      AX_CHECK_GCRYPT_ALGO([AES])
69      AX_CHECK_GCRYPT_ALGO([ARCFOUR])
70      AX_CHECK_GCRYPT_ALGO([BLOWFISH])
71      AX_CHECK_GCRYPT_ALGO([CAST5])
72      AX_CHECK_GCRYPT_ALGO([DES])
73      AX_CHECK_GCRYPT_ALGO([IDEA])
74      AX_CHECK_GCRYPT_ALGO([RFC2268])
75      AX_CHECK_GCRYPT_ALGO([SERPENT])
76      AX_CHECK_GCRYPT_ALGO([TWOFISH])
77      # digests
78      AX_CHECK_GCRYPT_ALGO([CRC])
79      AX_CHECK_GCRYPT_ALGO([HAVAL])
80      AX_CHECK_GCRYPT_ALGO([MD2])
81      AX_CHECK_GCRYPT_ALGO([MD4])
82      AX_CHECK_GCRYPT_ALGO([MD5])
83      AX_CHECK_GCRYPT_ALGO([RMD160])
84      AX_CHECK_GCRYPT_ALGO([SHA0])
85      AX_CHECK_GCRYPT_ALGO([SHA1])
86      AX_CHECK_GCRYPT_ALGO([SHA224])
87      AX_CHECK_GCRYPT_ALGO([SHA256])
88      AX_CHECK_GCRYPT_ALGO([SHA384])
89      AX_CHECK_GCRYPT_ALGO([SHA512])
90      AX_CHECK_GCRYPT_ALGO([TIGER])
91      AX_CHECK_GCRYPT_ALGO([WHIRLPOOL])
92      # others
93      AX_CHECK_GCRYPT_ALGO([DSA])
94      AX_CHECK_GCRYPT_ALGO([ELGAMAL])
95      AX_CHECK_GCRYPT_ALGO([RSA])
96      # CMAC support
97      AC_MSG_CHECKING([for CMAC_AES in gcrypt])
98      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gcrypt.h>]], [[
99int ok = GCRY_MAC_CMAC_AES;
100(void)ok;
101      ]])],[
102        AC_MSG_RESULT([yes])
103        AC_DEFINE([GCRYPT_WITH_CMAC_AES],[1],[Algorithm CMAC_AES in gcrypt library])
104        HAVE_CMAC=yes
105      ], [
106        AC_MSG_RESULT([no])
107        HAVE_CMAC=no
108      ])
109      # conclusion
110      GCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
111      GCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
112      AC_SUBST(GCRYPT_CFLAGS)
113      AC_SUBST(GCRYPT_LIBS)
114    ],[
115      # complain only if explicitly required
116      if test "$ac_with_gcrypt" = "yes" ; then
117	AC_MSG_ERROR([cannot configure required gcrypt library])
118      fi
119    ])
120  fi
121])
122