1dnl Checks for libcrypto required headers and functions
2dnl
3dnl Version: 20210623
4
5dnl Function to detect whether openssl/evp.h can be used in combination with zlib.h
6AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_ZLIB_COMPATIBILE],
7  [AC_CACHE_CHECK(
8    [if openssl/evp.h can be used in combination with zlib.h],
9    [ac_cv_openssl_evp_zlib_compatible],
10    [AC_LANG_PUSH(C)
11    AC_LINK_IFELSE(
12      [AC_LANG_PROGRAM(
13        [[#include <zlib.h>
14#include <openssl/evp.h>]],
15        [[ ]] )],
16      [ac_cv_openssl_evp_zlib_compatible=yes],
17      [ac_cv_openssl_evp_zlib_compatible=no])
18    AC_LANG_POP(C)])
19  ])
20
21dnl Function to detect whether EVP_CipherInit_ex can be used with duplicate keys.
22AC_DEFUN([AX_LIBCRYPTO_CHECK_XTS_DUPLICATE_KEYS_SUPPORT],
23  [AC_CACHE_CHECK(
24    [if `EVP_CipherInit_ex' can be used with duplicate keys],
25    [ac_cv_openssl_xts_duplicate_keys],
26    [AC_LANG_PUSH(C)
27    ac_cv_libcrypto_backup_LIBS="$LIBS"
28    LIBS="$LIBS $ac_cv_libcrypto_LIBADD"
29    AC_RUN_IFELSE(
30      [AC_LANG_PROGRAM(
31        [[#include <openssl/err.h>
32#include <openssl/evp.h>]],
33        [[unsigned char key[ 16 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
34int result = 0;
35
36#if defined( HAVE_EVP_CIPHER_CTX_INIT )
37EVP_CIPHER_CTX ctx;
38
39EVP_CIPHER_CTX_init( &ctx );
40#else
41EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
42#endif
43
44result = EVP_CipherInit_ex(ctx, EVP_aes_128_xts(), NULL, key, key, 0);
45
46#if defined( HAVE_EVP_CIPHER_CTX_INIT )
47EVP_CIPHER_CTX_cleanup( &ctx );
48#else
49EVP_CIPHER_CTX_free( ctx );
50#endif
51
52return( result == 1 ); ]] )],
53      [ac_cv_openssl_xts_duplicate_keys=yes],
54      [ac_cv_openssl_xts_duplicate_keys=no])
55    LIBS="$ac_cv_libcrypto_backup_LIBS"
56    AC_LANG_POP(C)])
57  ])
58
59dnl Function to detect if libcrypto (openssl) EVP functions are available
60AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP],
61  [AC_CHECK_HEADERS([openssl/evp.h])
62
63  AS_IF(
64    [test "x$ac_cv_header_openssl_evp_h" = xno],
65    [ac_cv_libcrypto=no
66    ac_cv_libcrypto_evp=no],
67    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_ZLIB_COMPATIBILE
68
69    AS_IF(
70      [test "x$ac_cv_openssl_evp_zlib_compatible" = xyes],
71      [ac_cv_libcrypto=yes
72      ac_cv_libcrypto_evp=yes],
73      [ac_cv_libcrypto=no
74      ac_cv_libcrypto_evp=no])
75    ])
76  ])
77
78dnl Function to detect if libcrypto (openssl) EVP MD functions are available
79AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD],
80  [ac_cv_libcrypto_evp_md=yes
81
82  AC_CHECK_LIB(
83    crypto,
84    EVP_MD_CTX_new,
85    [ac_cv_libcrypto_dummy=yes],
86    [ac_cv_libcrypto_dummy=no])
87
88  AS_IF(
89    [test "x$ac_cv_lib_crypto_EVP_MD_CTX_new" = xyes],
90    [dnl Check for the new EVP API functions
91    AC_CHECK_LIB(
92      crypto,
93      EVP_MD_CTX_free,
94      [ac_cv_libcrypto_dummy=yes],
95      [ac_cv_libcrypto_evp_md=no])
96    ],
97    [dnl Check for the old EVP API functions
98    AC_CHECK_LIB(
99      crypto,
100      EVP_MD_CTX_init,
101      [ac_cv_libcrypto_dummy=yes],
102      [ac_cv_libcrypto_evp_md=no])
103    AC_CHECK_LIB(
104      crypto,
105      EVP_MD_CTX_cleanup,
106      [ac_cv_libcrypto_dummy=yes],
107      [ac_cv_libcrypto_evp_md=no])
108
109    AC_CHECK_LIB(
110      crypto,
111      ERR_remove_thread_state,
112      [ac_cv_libcrypto_dummy=yes],
113      [ac_cv_libcrypto_evp_md=no])
114    ])
115
116  AC_CHECK_LIB(
117    crypto,
118    EVP_DigestInit_ex,
119    [ac_cv_libcrypto_dummy=yes],
120    [ac_cv_libcrypto_evp_md=no])
121  AC_CHECK_LIB(
122    crypto,
123    EVP_DigestUpdate,
124    [ac_cv_libcrypto_dummy=yes],
125    [ac_cv_libcrypto_evp_md=no])
126  AC_CHECK_LIB(
127    crypto,
128    EVP_DigestFinal_ex,
129    [ac_cv_libcrypto_dummy=yes],
130    [ac_cv_libcrypto_evp_md=no])
131
132  AS_IF(
133    [test "x$ac_cv_enable_openssl_evp_md" = xyes && test "x$ac_cv_libcrypto_evp_md" = xno],
134    [AC_MSG_FAILURE(
135      [Missing OpenSSL EVP MD support],
136      [1])
137    ])
138
139  AS_IF(
140    [test "x$ac_cv_lib_crypto_EVP_MD_CTX_init" = xyes],
141    [AC_DEFINE(
142      [HAVE_EVP_MD_CTX_INIT],
143      [1],
144      [Define to 1 if you have the `EVP_MD_CTX_init' function".])
145    ])
146
147  AS_IF(
148    [test "x$ac_cv_lib_crypto_EVP_MD_CTX_cleanup" = xyes],
149    [AC_DEFINE(
150      [HAVE_EVP_MD_CTX_CLEANUP],
151      [1],
152      [Define to 1 if you have the `EVP_MD_CTX_cleanup' function".])
153    ])
154  ])
155
156dnl Function to detect if openssl EVP MD5 functions are available
157AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD5],
158  [AC_CHECK_LIB(
159    crypto,
160    EVP_md5,
161    [ac_cv_libcrypto_md5=libcrypto_evp],
162    [ac_cv_libcrypto_md5=no])
163
164  AS_IF(
165    [test "x$ac_cv_libcrypto_md5" = xlibcrypto_evp],
166    [AC_DEFINE(
167      [HAVE_EVP_MD5],
168      [1],
169      [Define to 1 if you have the `EVP_md5' function".])
170    ])
171  ])
172
173dnl Function to detect if openssl EVP SHA1 functions are available
174AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA1],
175  [AC_CHECK_LIB(
176    crypto,
177    EVP_sha1,
178    [ac_cv_libcrypto_sha1=libcrypto_evp],
179    [ac_cv_libcrypto_sha1=no])
180
181  AS_IF(
182    [test "x$ac_cv_libcrypto_sha1" = xlibcrypto_evp],
183    [AC_DEFINE(
184      [HAVE_EVP_SHA1],
185      [1],
186      [Define to 1 if you have the `EVP_sha1' function".])
187    ])
188  ])
189
190dnl Function to detect if openssl EVP SHA224 functions are available
191AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA224],
192  [AC_CHECK_LIB(
193    crypto,
194    EVP_sha224,
195    [ac_cv_libcrypto_sha224=libcrypto_evp],
196    [ac_cv_libcrypto_sha224=no])
197
198  AS_IF(
199    [test "x$ac_cv_libcrypto_sha224" = xlibcrypto_evp],
200    [AC_DEFINE(
201      [HAVE_EVP_SHA224],
202      [1],
203      [Define to 1 if you have the `EVP_sha224' function".])
204    ])
205  ])
206
207dnl Function to detect if openssl EVP SHA256 functions are available
208AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA256],
209  [AC_CHECK_LIB(
210    crypto,
211    EVP_sha256,
212    [ac_cv_libcrypto_sha256=libcrypto_evp],
213    [ac_cv_libcrypto_sha256=no])
214
215  AS_IF(
216    [test "x$ac_cv_libcrypto_sha256" = xlibcrypto_evp],
217    [AC_DEFINE(
218      [HAVE_EVP_SHA256],
219      [1],
220      [Define to 1 if you have the `EVP_sha256' function".])
221    ])
222  ])
223
224dnl Function to detect if openssl EVP SHA512 functions are available
225AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA512],
226  [AC_CHECK_LIB(
227    crypto,
228    EVP_sha512,
229    [ac_cv_libcrypto_sha512=libcrypto_evp],
230    [ac_cv_libcrypto_sha512=no])
231
232  AS_IF(
233    [test "x$ac_cv_libcrypto_sha512" = xlibcrypto_evp],
234    [AC_DEFINE(
235      [HAVE_EVP_SHA512],
236      [1],
237      [Define to 1 if you have the `EVP_sha512' function".])
238    ])
239  ])
240
241dnl Function to detect if openssl MD5 functions are available
242AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_MD5],
243  [AC_CHECK_HEADERS([openssl/md5.h])
244
245  AS_IF(
246    [test "x$ac_cv_header_openssl_md5_h" = xno],
247    [ac_cv_libcrypto_md5=no],
248    [ac_cv_libcrypto_md5=libcrypto
249
250    AC_CHECK_LIB(
251      crypto,
252      MD5_Init,
253      [ac_cv_libcrypto_dummy=yes],
254      [ac_cv_libcrypto_md5=no])
255    AC_CHECK_LIB(
256      crypto,
257      MD5_Update,
258      [ac_cv_libcrypto_dummy=yes],
259      [ac_cv_libcrypto_md5=no])
260    AC_CHECK_LIB(
261      crypto,
262      MD5_Final,
263      [ac_cv_libcrypto_dummy=yes],
264      [ac_cv_libcrypto_md5=no])
265    ])
266
267  AS_IF(
268    [test "x$ac_cv_libcrypto" = xno && test "x$ac_cv_libcrypto_md5" = xlibcrypto],
269    [ac_cv_libcrypto=yes])
270  ])
271
272dnl Function to detect if openssl SHA1 functions are available
273AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_SHA1],
274  [AC_CHECK_HEADERS([openssl/sha.h])
275
276  AS_IF(
277    [test "x$ac_cv_header_openssl_sha_h" = xno],
278    [ac_cv_libcrypto_sha1=no],
279    [ac_cv_libcrypto_sha1=libcrypto
280
281    AC_CHECK_LIB(
282      crypto,
283      SHA1_Init,
284      [ac_cv_libcrypto_dummy=yes],
285      [ac_cv_libcrypto_sha1=no])
286    AC_CHECK_LIB(
287      crypto,
288      SHA1_Update,
289      [ac_cv_libcrypto_dummy=yes],
290      [ac_cv_libcrypto_sha1=no])
291    AC_CHECK_LIB(
292      crypto,
293      SHA1_Final,
294      [ac_cv_libcrypto_dummy=yes],
295      [ac_cv_libcrypto_sha1=no])
296    ])
297
298  AS_IF(
299    [test "x$ac_cv_libcrypto" = xno && test "x$ac_cv_libcrypto_sha1" = xlibcrypto],
300    [ac_cv_libcrypto=yes])
301  ])
302
303dnl Function to detect if openssl SHA224 functions are available
304AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_SHA224],
305  [AC_CHECK_HEADERS([openssl/sha.h])
306
307  AS_IF(
308    [test "x$ac_cv_header_openssl_sha_h" = xno],
309    [ac_cv_libcrypto_sha224=no],
310    [ac_cv_libcrypto_sha224=libcrypto
311
312    AC_CHECK_LIB(
313      crypto,
314      SHA224_Init,
315      [ac_cv_libcrypto_dummy=yes],
316      [ac_cv_libcrypto_sha224=no])
317    AC_CHECK_LIB(
318      crypto,
319      SHA224_Update,
320      [ac_cv_libcrypto_dummy=yes],
321      [ac_cv_libcrypto_sha224=no])
322    AC_CHECK_LIB(
323      crypto,
324      SHA224_Final,
325      [ac_cv_libcrypto_dummy=yes],
326      [ac_cv_libcrypto_sha224=no])
327    ])
328
329  AS_IF(
330    [test "x$ac_cv_libcrypto" = xno && test "x$ac_cv_libcrypto_sha224" = xlibcrypto],
331    [ac_cv_libcrypto=yes])
332  ])
333
334dnl Function to detect if openssl SHA256 functions are available
335AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_SHA256],
336  [AC_CHECK_HEADERS([openssl/sha.h])
337
338  AS_IF(
339    [test "x$ac_cv_header_openssl_sha_h" = xno],
340    [ac_cv_libcrypto_sha256=no],
341    [ac_cv_libcrypto_sha256=libcrypto
342
343    AC_CHECK_LIB(
344      crypto,
345      SHA256_Init,
346      [ac_cv_libcrypto_dummy=yes],
347      [ac_cv_libcrypto_sha256=no])
348    AC_CHECK_LIB(
349      crypto,
350      SHA256_Update,
351      [ac_cv_libcrypto_dummy=yes],
352      [ac_cv_libcrypto_sha256=no])
353    AC_CHECK_LIB(
354      crypto,
355      SHA256_Final,
356      [ac_cv_libcrypto_dummy=yes],
357      [ac_cv_libcrypto_sha256=no])
358    ])
359
360  AS_IF(
361    [test "x$ac_cv_libcrypto" = xno && test "x$ac_cv_libcrypto_sha256" = xlibcrypto],
362    [ac_cv_libcrypto=yes])
363  ])
364
365dnl Function to detect if openssl SHA512 functions are available
366AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_SHA512],
367  [AC_CHECK_HEADERS([openssl/sha.h])
368
369  AS_IF(
370    [test "x$ac_cv_header_openssl_sha_h" = xno],
371    [ac_cv_libcrypto_sha512=no],
372    [ac_cv_libcrypto_sha512=libcrypto
373
374    AC_CHECK_LIB(
375      crypto,
376      SHA512_Init,
377      [ac_cv_libcrypto_dummy=yes],
378      [ac_cv_libcrypto_sha512=no])
379    AC_CHECK_LIB(
380      crypto,
381      SHA512_Update,
382      [ac_cv_libcrypto_dummy=yes],
383      [ac_cv_libcrypto_sha512=no])
384    AC_CHECK_LIB(
385      crypto,
386      SHA512_Final,
387      [ac_cv_libcrypto_dummy=yes],
388      [ac_cv_libcrypto_sha512=no])
389    ])
390
391  AS_IF(
392    [test "x$ac_cv_libcrypto" = xno && test "x$ac_cv_libcrypto_sha512" = xlibcrypto],
393    [ac_cv_libcrypto=yes])
394  ])
395
396dnl Function to detect if openssl EVP CIPHER functions are available
397AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_EVP_CIPHER],
398  [ac_cv_libcrypto_evp_cipher=yes
399
400  dnl Check if all required libcrypto (openssl) EVP CIPHER functions are available
401  AC_CHECK_LIB(
402    crypto,
403    EVP_CIPHER_CTX_new,
404    [ac_cv_libcrypto_dummy=yes],
405    [ac_cv_libcrypto_dummy=no])
406
407  AS_IF(
408    [test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_new" = xyes],
409    [dnl Check for the new EVP API functions
410    AC_CHECK_LIB(
411      crypto,
412      EVP_CIPHER_CTX_free,
413      [ac_cv_libcrypto_dummy=yes],
414      [ac_cv_libcrypto_evp_cipher=no])
415    ],
416    [dnl Check for the old EVP API functions
417    AC_CHECK_LIB(
418      crypto,
419      EVP_CIPHER_CTX_init,
420      [ac_cv_libcrypto_dummy=yes],
421      [ac_cv_libcrypto_evp_cipher=no])
422    AC_CHECK_LIB(
423      crypto,
424      EVP_CIPHER_CTX_cleanup,
425      [ac_cv_libcrypto_dummy=yes],
426      [ac_cv_libcrypto_evp_cipher=no])
427
428    AC_CHECK_LIB(
429      crypto,
430      ERR_remove_thread_state,
431      [ac_cv_libcrypto_dummy=yes],
432      [ac_cv_libcrypto_evp_cipher=no])
433    ])
434
435  AC_CHECK_LIB(
436    crypto,
437    EVP_CIPHER_CTX_set_padding,
438    [ac_cv_libcrypto_dummy=yes],
439    [ac_cv_libcrypto_evp_cipher=no])
440
441  AC_CHECK_LIB(
442    crypto,
443    EVP_CipherInit_ex,
444    [ac_cv_libcrypto_dummy=yes],
445    [ac_cv_libcrypto_evp_cipher=no])
446  AC_CHECK_LIB(
447    crypto,
448    EVP_CipherUpdate,
449    [ac_cv_libcrypto_dummy=yes],
450    [ac_cv_libcrypto_evp_cipher=no])
451  AC_CHECK_LIB(
452    crypto,
453    EVP_CipherFinal_ex,
454    [ac_cv_libcrypto_dummy=yes],
455    [ac_cv_libcrypto_evp_cipher=no])
456
457  AS_IF(
458    [test "x$ac_cv_enable_openssl_evp_cipher" = xyes && test "x$ac_cv_libcrypto_evp_cipher" = xno],
459    [AC_MSG_FAILURE(
460      [Missing OpenSSL EVP CIPHER support],
461      [1])
462    ])
463
464  AS_IF(
465    [test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_init" = xyes],
466    [AC_DEFINE(
467      [HAVE_EVP_CIPHER_CTX_INIT],
468      [1],
469      [Define to 1 if you have the `EVP_CIPHER_CTX_init' function".])
470    ])
471
472  AS_IF(
473    [test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_cleanup" = xyes],
474    [AC_DEFINE(
475      [HAVE_EVP_CIPHER_CTX_CLEANUP],
476      [1],
477      [Define to 1 if you have the `EVP_CIPHER_CTX_cleanup' function".])
478    ])
479  ])
480
481dnl Function to detect if openssl AES-CBC and AES-ECB functions are available
482AC_DEFUN([AX_LIBCRYPTO_CHECK_OPENSSL_AES],
483  [AC_CHECK_HEADERS([openssl/aes.h])
484
485  AS_IF(
486    [test "x$ac_cv_header_openssl_aes_h" = xno],
487    [ac_cv_libcrypto_aes_cbc=no
488    ac_cv_libcrypto_aes_ecb=no],
489    [ac_cv_libcrypto_aes_cbc=libcrypto
490    ac_cv_libcrypto_aes_ecb=libcrypto
491
492    AC_CHECK_LIB(
493      crypto,
494      AES_set_decrypt_key,
495      [ac_cv_libcrypto_dummy=yes],
496      [ac_cv_libcrypto_aes_cbc=no,
497      ac_cv_libcrypto_aes_ecb=no])
498    AC_CHECK_LIB(
499      crypto,
500      AES_set_encrypt_key,
501      [ac_cv_libcrypto_dummy=yes],
502      [ac_cv_libcrypto_aes_cbc=no,
503      ac_cv_libcrypto_aes_ecb=no])
504
505    AC_CHECK_LIB(
506      crypto,
507      AES_cbc_encrypt,
508      [ac_cv_libcrypto_dummy=yes],
509      [ac_cv_libcrypto_aes_cbc=no])
510
511    AC_CHECK_LIB(
512      crypto,
513      AES_ecb_encrypt,
514      [ac_cv_libcrypto_dummy=yes],
515      [ac_cv_libcrypto_aes_ecb=no])
516
517    AS_IF(
518      [test "x$ac_cv_lib_crypto_AES_cbc_encrypt" = xyes],
519      [AC_DEFINE(
520        [HAVE_AES_CBC_ENCRYPT],
521        [1],
522        [Define to 1 if you have the `AES_cbc_encrypt' function".])
523      ])
524
525    AS_IF(
526      [test "x$ac_cv_lib_crypto_AES_ecb_encrypt" = xyes],
527      [AC_DEFINE(
528        [HAVE_AES_ECB_ENCRYPT],
529        [1],
530        [Define to 1 if you have the `AES_ecb_encrypt' function".])
531      ])
532    ])
533
534  AS_IF(
535    [test "x$ac_cv_libcrypto" = xno],
536    [AS_IF(
537      [test "x$ac_cv_libcrypto_aes_cbc" = xno || test "x$ac_cv_libcrypto_aes_ecb" = xno],
538      [ac_cv_libcrypto=yes])
539    ])
540
541  dnl ac_cv_libcrypto_aes is deprecated but kept for backwards compatibility
542  AS_IF(
543    [test "x$ac_cv_libcrypto_aes_cbc" = xno || test "x$ac_cv_libcrypto_aes_ecb" = xno],
544    [ac_cv_libcrypto_aes=no],
545    [ac_cv_libcrypto_aes=libcrypto])
546  ])
547
548dnl Function to detect if libcrypto (openssl) dependencies are available
549AC_DEFUN([AX_LIBCRYPTO_CHECK_LIB],
550  [AS_IF(
551    [test "x$ac_cv_enable_shared_libs" = xno || test "x$ac_cv_with_openssl" = xno],
552    [ac_cv_libcrypto=no],
553    [dnl Check if the directory provided as parameter exists
554    AS_IF(
555      [test "x$ac_cv_with_openssl" != x && test "x$ac_cv_with_openssl" != xauto-detect],
556      [AS_IF(
557        [test -d "$ac_cv_with_openssl"],
558        [CFLAGS="$CFLAGS -I${ac_cv_with_openssl}/include"
559        LDFLAGS="$LDFLAGS -L${ac_cv_with_openssl}/lib"],
560        [AC_MSG_FAILURE(
561          [no such directory: $ac_cv_with_openssl],
562          [1])
563        ])],
564      [dnl Check for a pkg-config file
565      AS_IF(
566        [test "x$cross_compiling" != "xyes" && test "x$PKGCONFIG" != "x"],
567        [PKG_CHECK_MODULES(
568          [openssl],
569          [openssl >= 1.0],
570          [ac_cv_libcrypto=yes
571          ac_cv_libcrypto_evp=yes],
572          [ac_cv_libcrypto=no
573          ac_cv_libcrypto_evp=no])
574        ])
575      AS_IF(
576        [test "x$ac_cv_libcrypto" = xyes],
577        [ac_cv_libcrypto_CPPFLAGS="$pkg_cv_openssl_CFLAGS"
578        ac_cv_libcrypto_LIBADD="$pkg_cv_openssl_LIBS"])
579      ])
580
581    AS_IF(
582      [test "x$ac_cv_libcrypto" != xyes],
583      [dnl Check for headers
584      AC_CHECK_HEADERS([openssl/opensslv.h])
585
586      AX_LIBCRYPTO_CHECK_OPENSSL_EVP
587
588      AS_IF(
589        [test "x$ac_cv_libcrypto_evp" != xyes && test "$ac_cv_header_openssl_opensslv" = xyes],
590        [ac_cv_libcrypto=yes])
591      ])
592
593    dnl Setup libcrypto (openssl) parameters
594    AS_IF(
595      [test "x$ac_cv_libcrypto" = xyes && test "x$ac_cv_libcrypto_evp" = xyes],
596      [AC_DEFINE(
597        [HAVE_OPENSSL_EVP_H],
598        [1],
599        [Define to 1 if you have the <openssl/evp.h> header file.])
600      AC_SUBST(
601        [HAVE_OPENSSL_EVP_H],
602        [1]) ],
603      [AC_SUBST(
604        [HAVE_OPENSSL_EVP_H],
605        [0])
606      ])
607
608    AS_IF(
609      [test "x$ac_cv_libcrypto" != xno],
610      [AC_DEFINE(
611        [HAVE_LIBCRYPTO],
612        [1],
613        [Define to 1 if you have the 'crypto' library (-lcrypto).])
614
615      ac_cv_libcrypto_LIBADD="-lcrypto"
616
617      dnl On Cygwin also link zlib since libcrypto relies on it
618      AS_CASE(
619        [$host],
620        [*cygwin*],
621        [ac_cv_libcrypto_LIBADD="-lcrypto -lz"])
622
623      dnl Enforce the dynamic loader library to be included if available
624      AC_CHECK_LIB(
625        dl,
626        dlopen,
627        [AC_SUBST(
628          [LIBDL_LIBADD],
629          ["-ldl"])],
630        [])
631      ])
632    ])
633  ])
634
635dnl Function to detect if libcrypto MD5 functions are available
636AC_DEFUN([AX_LIBCRYPTO_CHECK_MD5],
637  [ac_cv_libcrypto_md5=no
638
639  dnl Check for libcrypto (openssl) EVP MD support
640  AS_IF(
641    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_libcrypto_evp_md" != xyes],
642    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD])
643
644  dnl Check for libcrypto (openssl) EVP MD5 support
645  AS_IF(
646    [test "x$ac_cv_libcrypto_evp_md" = xyes],
647    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD5])
648
649  dnl Check for libcrypto (openssl) MD5 support
650  AS_IF(
651    [test "x$ac_cv_libcrypto_md5" = xno],
652    [AX_LIBCRYPTO_CHECK_OPENSSL_MD5])
653  ])
654
655dnl Function to detect if libcrypto SHA1 functions are available
656AC_DEFUN([AX_LIBCRYPTO_CHECK_SHA1],
657  [ac_cv_libcrypto_sha1=no
658
659  dnl Check for libcrypto (openssl) EVP MD support
660  AS_IF(
661    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_md" != xno && test "x$ac_cv_libcrypto_evp_md" != xyes],
662    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD])
663
664  dnl Check for libcrypto (openssl) EVP SHA1 support
665  AS_IF(
666    [test "x$ac_cv_libcrypto_evp_md" = xyes],
667    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA1])
668
669  dnl Check for libcrypto (openssl) SHA1 support
670  AS_IF(
671    [test "x$ac_cv_libcrypto_sha1" = xno],
672    [AX_LIBCRYPTO_CHECK_OPENSSL_SHA1])
673  ])
674
675dnl Function to detect if libcrypto SHA224 functions are available
676AC_DEFUN([AX_LIBCRYPTO_CHECK_SHA224],
677  [ac_cv_libcrypto_sha224=no
678
679  dnl Check for libcrypto (openssl) EVP MD support
680  AS_IF(
681    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_md" != xno && test "x$ac_cv_libcrypto_evp_md" != xyes],
682    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD])
683
684  dnl Check for libcrypto (openssl) EVP SHA224 support
685  AS_IF(
686    [test "x$ac_cv_libcrypto_evp_md" = xyes],
687    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA224])
688
689  dnl Check for libcrypto (openssl) SHA224 support
690  AS_IF(
691    [test "x$ac_cv_libcrypto_sha224" = xno],
692    [AX_LIBCRYPTO_CHECK_OPENSSL_SHA224])
693  ])
694
695dnl Function to detect if libcrypto SHA256 functions are available
696AC_DEFUN([AX_LIBCRYPTO_CHECK_SHA256],
697  [ac_cv_libcrypto_sha256=no
698
699  dnl Check for libcrypto (openssl) EVP MD support
700  AS_IF(
701    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_md" != xno && test "x$ac_cv_libcrypto_evp_md" != xyes],
702    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD])
703
704  dnl Check for libcrypto (openssl) EVP SHA256 support
705  AS_IF(
706    [test "x$ac_cv_libcrypto_evp_md" = xyes],
707    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA256])
708
709  dnl Check for libcrypto (openssl) SHA256 support
710  AS_IF(
711    [test "x$ac_cv_libcrypto_sha256" = xno],
712    [AX_LIBCRYPTO_CHECK_OPENSSL_SHA256])
713  ])
714
715dnl Function to detect if libcrypto SHA512 functions are available
716AC_DEFUN([AX_LIBCRYPTO_CHECK_SHA512],
717  [ac_cv_libcrypto_sha512=no
718
719  dnl Check for libcrypto (openssl) EVP MD support
720  AS_IF(
721    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_md" != xno && test "x$ac_cv_libcrypto_evp_md" != xyes],
722    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_MD])
723
724  dnl Check for libcrypto (openssl) EVP SHA512 support
725  AS_IF(
726    [test "x$ac_cv_libcrypto_evp_md" = xyes],
727    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_SHA512])
728
729  dnl Check for libcrypto (openssl) SHA512 support
730  AS_IF(
731    [test "x$ac_cv_libcrypto_sha512" = xno],
732    [AX_LIBCRYPTO_CHECK_OPENSSL_SHA512])
733  ])
734
735dnl Function to detect if libcrypto AES-CBC and AES-ECB functions are available
736AC_DEFUN([AX_LIBCRYPTO_CHECK_AES],
737  [dnl Check for libcrypto (openssl) EVP CIPHER AES-CBC and AES-ECB support
738  AX_LIBCRYPTO_CHECK_AES_CBC
739  AX_LIBCRYPTO_CHECK_AES_ECB
740
741  dnl ac_cv_libcrypto_aes is deprecated but kept for backwards compatibility
742  AS_IF(
743    [test "x$ac_cv_libcrypto_aes_cbc" = xno || test "x$ac_cv_libcrypto_aes_ecb" = xno],
744    [ac_cv_libcrypto_aes=no],
745    [ac_cv_libcrypto_aes=libcrypto_evp])
746
747  dnl Check for libcrypto (openssl) AES-CBC and AES-ECB support
748  AS_IF(
749    [test "x$ac_cv_libcrypto_aes_cbc" = xno || test "x$ac_cv_libcrypto_aes_ecb" = xno],
750    [AX_LIBCRYPTO_CHECK_OPENSSL_AES])
751  ])
752
753dnl Function to detect if libcrypto AES-CBC functions are available
754AC_DEFUN([AX_LIBCRYPTO_CHECK_AES_CBC],
755  [AS_IF(
756    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_cipher" != xno && test "x$ac_cv_libcrypto_evp_cipher" != xyes],
757    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_CIPHER])
758
759  AS_IF(
760    [test "x$ac_cv_libcrypto_evp_cipher" != xyes],
761    [ac_cv_libcrypto_aes_cbc=no],
762    [ac_cv_libcrypto_aes_cbc=libcrypto_evp
763
764    AC_CHECK_LIB(
765      crypto,
766      EVP_aes_128_cbc,
767      [ac_cv_libcrypto_dummy=yes],
768      [ac_cv_libcrypto_aes_cbc=no])
769    AC_CHECK_LIB(
770      crypto,
771      EVP_aes_192_cbc,
772      [ac_cv_libcrypto_dummy=yes],
773      [ac_cv_libcrypto_aes_cbc=no])
774    AC_CHECK_LIB(
775      crypto,
776      EVP_aes_256_cbc,
777      [ac_cv_libcrypto_dummy=yes],
778      [ac_cv_libcrypto_aes_cbc=no])
779
780    AS_IF(
781      [test "x$ac_cv_lib_crypto_EVP_aes_128_cbc" = xyes && test "x$ac_cv_lib_crypto_EVP_aes_192_cbc" = xyes && test "x$ac_cv_lib_crypto_EVP_aes_256_cbc" = xyes],
782      [AC_DEFINE(
783        [HAVE_EVP_CRYPTO_AES_CBC],
784        [1],
785        [Define to 1 if you have the `EVP_aes_128_cbc', `EVP_aes_192_cbc' and `EVP_aes_256_cbc' functions".])
786      ])
787    ])
788  ])
789
790dnl Function to detect if libcrypto AES-ECB functions are available
791AC_DEFUN([AX_LIBCRYPTO_CHECK_AES_ECB],
792  [AS_IF(
793    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_cipher" != xno && test "x$ac_cv_libcrypto_evp_cipher" != xyes],
794    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_CIPHER])
795
796  AS_IF(
797    [test "x$ac_cv_libcrypto_evp_cipher" != xyes],
798    [ac_cv_libcrypto_aes_ecb=no],
799    [ac_cv_libcrypto_aes_ecb=libcrypto_evp
800
801    AC_CHECK_LIB(
802      crypto,
803      EVP_aes_128_ecb,
804      [ac_cv_libcrypto_dummy=yes],
805      [ac_cv_libcrypto_aes_ecb=no])
806    AC_CHECK_LIB(
807      crypto,
808      EVP_aes_192_ecb,
809      [ac_cv_libcrypto_dummy=yes],
810      [ac_cv_libcrypto_aes_ecb=no])
811    AC_CHECK_LIB(
812      crypto,
813      EVP_aes_256_ecb,
814      [ac_cv_libcrypto_dummy=yes],
815      [ac_cv_libcrypto_aes_ecb=no])
816
817    AS_IF(
818      [test "x$ac_cv_lib_crypto_EVP_aes_128_ecb" = xyes && test "x$ac_cv_lib_crypto_EVP_aes_192_ecb" = xyes && test "x$ac_cv_lib_crypto_EVP_aes_256_ecb" = xyes],
819      [AC_DEFINE(
820        [HAVE_EVP_CRYPTO_AES_ECB],
821        [1],
822        [Define to 1 if you have the `EVP_aes_128_ecb', `EVP_aes_192_ecb' and `EVP_aes_256_ecb' functions".])
823      ])
824    ])
825  ])
826
827dnl Function to detect if libcrypto AES-XTS functions are available
828AC_DEFUN([AX_LIBCRYPTO_CHECK_AES_XTS],
829  [AS_IF(
830    [test "x$ac_cv_libcrypto_evp" = xyes && test "x$ac_cv_enable_openssl_evp_cipher" != xno && test "x$ac_cv_libcrypto_evp_cipher" != xyes],
831    [AX_LIBCRYPTO_CHECK_OPENSSL_EVP_CIPHER])
832
833  AS_IF(
834    [test "x$ac_cv_libcrypto_evp_cipher" != xyes],
835    [ac_cv_libcrypto_aes_xts=no],
836    [ac_cv_libcrypto_aes_xts=libcrypto_evp
837
838    AC_CHECK_LIB(
839      crypto,
840      EVP_aes_128_xts,
841      [ac_cv_libcrypto_dummy=yes],
842      [ac_cv_libcrypto_aes_xts=no])
843    AC_CHECK_LIB(
844      crypto,
845      EVP_aes_256_xts,
846      [ac_cv_libcrypto_dummy=yes],
847      [ac_cv_libcrypto_aes_xts=no])
848
849    dnl OpenSSL 1.1.1c will error with "xts duplicated keys".
850    AX_LIBCRYPTO_CHECK_XTS_DUPLICATE_KEYS_SUPPORT
851    AS_IF(
852      [test "x$ac_cv_openssl_xts_duplicate_keys" = xno],
853      [ac_cv_libcrypto_aes_xts=no],
854      [AS_IF(
855        [test "x$ac_cv_lib_crypto_EVP_aes_128_xts" = xyes && test "x$ac_cv_lib_crypto_EVP_aes_256_xts" = xyes],
856        [AC_DEFINE(
857          [HAVE_EVP_CRYPTO_AES_XTS],
858          [1],
859          [Define to 1 if you have the `EVP_aes_128_xts' and `EVP_aes_256_xts' functions".])
860        ])
861      ])
862    ])
863  ])
864
865dnl Function to detect how to enable libcrypto (openssl)
866AC_DEFUN([AX_LIBCRYPTO_CHECK_ENABLE],
867  [AX_COMMON_ARG_WITH(
868    [openssl],
869    [openssl],
870    [search for OpenSSL in includedir and libdir or in the specified DIR, or no if not to use OpenSSL],
871    [auto-detect],
872    [DIR])
873
874  AX_COMMON_ARG_ENABLE(
875    [openssl-evp-cipher],
876    [openssl_evp_cipher],
877    [enable OpenSSL EVP CIPHER support, or no to disable],
878    [auto-detect])
879
880  AX_COMMON_ARG_ENABLE(
881    [openssl-evp-md],
882    [openssl_evp_md],
883    [enable OpenSSL EVP MD support, or no to disable],
884    [auto-detect])
885
886  AS_IF(
887    [test "x$ac_cv_enable_static_executables" != xyes],
888    [dnl Check for a shared library version
889    AX_LIBCRYPTO_CHECK_LIB])
890
891  AS_IF(
892    [test "x$ac_cv_libcrypto_CPPFLAGS" != "x"],
893    [AC_SUBST(
894      [LIBCRYPTO_CPPFLAGS],
895      [$ac_cv_libcrypto_CPPFLAGS])
896    ])
897  AS_IF(
898    [test "x$ac_cv_libcrypto_LIBADD" != "x"],
899    [AC_SUBST(
900      [LIBCRYPTO_LIBADD],
901      [$ac_cv_libcrypto_LIBADD])
902    ])
903
904  AS_IF(
905    [test "x$ac_cv_libcrypto" != xno],
906    [AC_SUBST(
907      [ax_libcrypto_pc_libs_private],
908      [-lcrypto])
909    ])
910
911  AS_IF(
912    [test "x$ac_cv_libcrypto" != xno],
913    [AC_SUBST(
914      [ax_libcrypto_spec_requires],
915      [openssl])
916    AC_SUBST(
917      [ax_libcrypto_spec_build_requires],
918      [openssl-devel])
919    ])
920  ])
921
922